`

OpenERP写入数据库

    博客分类:
  • ERP
 
阅读更多

    def do_change_standard_price(self, cr, uid, ids, datas, context=None):
        """ Changes the Standard Price of Product and creates an account move accordingly.
        @param datas : dict. contain default datas like new_price, stock_output_account, stock_input_account, stock_journal
        @param context: A standard dictionary
        @return:

        """
        location_obj = self.pool.get('stock.location')
        move_obj = self.pool.get('account.move')
        move_line_obj = self.pool.get('account.move.line')
        if context is None:
            context = {}

        new_price = datas.get('new_price', 0.0)
        stock_output_acc = datas.get('stock_output_account', False)
        stock_input_acc = datas.get('stock_input_account', False)
        journal_id = datas.get('stock_journal', False)
        product_obj=self.browse(cr, uid, ids, context=context)[0]
        account_variation = product_obj.categ_id.property_stock_variation
        account_variation_id = account_variation and account_variation.id or False
        if not account_variation_id: raise osv.except_osv(_('Error!'), _('Variation Account is not specified for Product Category: %s') % (product_obj.categ_id.name))
        move_ids = []
        loc_ids = location_obj.search(cr, uid,[('usage','=','internal')])
        for rec_id in ids:
            for location in location_obj.browse(cr, uid, loc_ids, context=context):
                c = context.copy()
                c.update({
                    'location': location.id,
                    'compute_child': False
                })

                product = self.browse(cr, uid, rec_id, context=c)
                qty = product.qty_available
                diff = product.standard_price - new_price
                if not diff: raise osv.except_osv(_('Error!'), _("Could not find any difference between standard price and new price!"))
                if qty:
                    company_id = location.company_id and location.company_id.id or False
                    if not company_id: raise osv.except_osv(_('Error!'), _('Company is not specified in Location'))
                    #
                    # Accounting Entries
                    #
                    if not journal_id:
                        journal_id = product.categ_id.property_stock_journal and product.categ_id.property_stock_journal.id or False
                    if not journal_id:
                        raise osv.except_osv(_('Error!'),
                            _('There is no journal defined '\
                                'on the product category: "%s" (id: %d)') % \
                                (product.categ_id.name,
                                    product.categ_id.id,))
                    move_id = move_obj.create(cr, uid, {
                                'journal_id': journal_id,
                                'company_id': company_id
                                })

                    move_ids.append(move_id)


                    if diff > 0:
                        if not stock_input_acc:
                            stock_input_acc = product.product_tmpl_id.\
                                property_stock_account_input.id
                        if not stock_input_acc:
                            stock_input_acc = product.categ_id.\
                                    property_stock_account_input_categ.id
                        if not stock_input_acc:
                            raise osv.except_osv(_('Error!'),
                                    _('There is no stock input account defined ' \
                                            'for this product: "%s" (id: %d)') % \
                                            (product.name,
                                                product.id,))
                        amount_diff = qty * diff
                        move_line_obj.create(cr, uid, {
                                    'name': product.name,
                                    'account_id': stock_input_acc,
                                    'debit': amount_diff,
                                    'move_id': move_id,
                                    })
                        move_line_obj.create(cr, uid, {
                                    'name': product.categ_id.name,
                                    'account_id': account_variation_id,
                                    'credit': amount_diff,
                                    'move_id': move_id
                                    })
                    elif diff < 0:
                        if not stock_output_acc:
                            stock_output_acc = product.product_tmpl_id.\
                                property_stock_account_output.id
                        if not stock_output_acc:
                            stock_output_acc = product.categ_id.\
                                    property_stock_account_output_categ.id
                        if not stock_output_acc:
                            raise osv.except_osv(_('Error!'),
                                    _('There is no stock output account defined ' \
                                            'for this product: "%s" (id: %d)') % \
                                            (product.name,
                                                product.id,))
                        amount_diff = qty * -diff
                        move_line_obj.create(cr, uid, {
                                        'name': product.name,
                                        'account_id': stock_output_acc,
                                        'credit': amount_diff,
                                        'move_id': move_id
                                    })
                        move_line_obj.create(cr, uid, {
                                        'name': product.categ_id.name,
                                        'account_id': account_variation_id,
                                        'debit': amount_diff,
                                        'move_id': move_id
                                    })

            self.write(cr, uid, rec_id, {'standard_price': new_price})

        return move_ids
分享到:
评论

相关推荐

    openERP 7.0使用手册 第三章 OpenERP快速入门

    * 安装完成后,OpenERP 会自动安装 PostgreSQL 数据库和 Server 两部分。 * 在安装过程中,需要配置 PostgreSQL 数据库的连接信息,包括数据库连接用户名和密码。 二、设置基础数据 * 在 OpenERP 中,需要设置基础...

    openerp.rar_erp 财务_openERP_python PostgreSQL_数据库ERP_财务 python

    OpenERP(08年5月前称之为TinyERP)是一个ERP/CRM系统。它使用Python语言开发,数据库采用开源的PostgreSQL,系统以GNU GPL开 源协议发布。 系统提供较灵活的模块架构,常用模块包括:采购管理,销售管理,库存管理...

    OpenERP.rar_openERP

    总之,“OpenERP应用和开发基础”涵盖了OpenERP的基本概念、系统架构、开发工具、数据库管理、模块开发以及实施策略等多个方面,对于想要理解和掌握OpenERP/Odoo的人来说是一份宝贵的参考资料。这份PDF文档将引导...

    openerp.zip_openERP

    3. 配置数据库:使用PostgreSQL或其他兼容的SQL数据库创建一个新的数据库用于OpenERP。 4. 安装开发者工具:安装用于调试和开发的额外工具,如IDE(PyCharm、Visual Studio Code等),以及openerp-server的开发版本...

    OpenERP开发基础教程

    OpenERP应用和开发基础,主要讲述OPENERP的系统架构以及基本知识,还有开发的一些基本语法等,非常适合入门者使用。

    (已压缩)OpenERP应用和开发基础(1-12).pdf

    PostgreSQL是OpenERP的主要数据库,它提供了强大的数据存储和查询能力。 #### 1.3 OpenERP的功能和应用 OpenERP涵盖了众多功能模块,包括销售管理、采购管理、库存控制、财务会计、人力资源等。其用户群广泛,从...

    OpenERP应用和开发基础文档及相关资源

    OpenERP应用和开发基础 OpenERP应用和开发基础(第一章).pdf OpenERP应用和开发基础(第二章).pdf OpenERP应用和开发基础(第三章).pdf OpenERP应用和开发基础(第四章).pdf OpenERP应用和开发基础(第五章).pdf OpenERP...

    openerp教程

    openerp教程

    openerp 免费下载

    OpenERP是一款优秀的开源ERP软件。开源是说,软件完全公开,您不仅可以自由下载软件,还可以自由下载软件的所有源代码;软件本身没有任何秘密, 没有任何用户数限制,没有任何收费!优秀是说,软件功能丰富,品质...

    OpenERP 文档

    ### OpenERP Web 参考文档知识点详解 #### 一、基础知识与模块构建 **1.1 基础概念** - **OpenERP**: 开源的企业资源计划系统,提供了丰富的功能来满足企业的各种需求。 - **OpenERP Web**: OpenERP 的前端用户...

    openerp应用和开发

    OpenERP应用和开发基础,随着openerp的发展,越来越多的中小企业开始应用此erp系统,免费开源是最大的特点

    OpenERP_Technical开发教程

    安装OpenERP时,除了获取源码或使用安装包,还需安装必要的依赖项,如PostgreSQL数据库和一些Python库。具体依赖及安装步骤可在doc.openerp.com上查阅最新文档。 #### 结论 OpenERP为开发者提供了一个全面而强大的...

    OpenERP Installing Ubuntu9.04

    OpenERP Installing Ubuntu9.04

    openerp 培训班 模块代码

    在`models/`目录下的Python文件中,我们定义了模块的核心业务逻辑,即数据库模型。每个模型都继承自` openerp.osv.osv.Model`,并定义字段、方法以及与其他模型的关系。 ```python from openerp.osv import osv, ...

    OpenERP在Ubuntu上安装说明

    在Ubuntu操作系统上安装OpenERP的过程主要包含几个步骤,包括安装、配置PostgreSQL数据库和OpenERP服务器。下面详细说明这些知识点: 1. Ubuntu软件安装方法:OpenERP作为Ubuntu 9.04系统的一个默认软件包,可通过...

    openERP 7.0使用手册 第五章 采购基本操作

    《OpenERP 7.0使用手册 第五章 采购基本操作》 OpenERP 7.0的采购管理是企业资源规划系统中一个重要的组成部分,它涵盖了从采购需求产生到完成付款的全过程。本章主要讨论了采购的基本操作,包括采购订单的创建、...

    使用虚拟机VM运行Linux版OpenERP

    OpenERP、Linux版、虚拟机VM、如何使用虚拟机VM运行Linux版OpenERP

    OpenERP技术开发文档

    2. **创建数据库**:使用 PostgreSQL 创建名为 `terp` 的数据库,并确保当前用户拥有创建数据库的权限。 ```bash createdb terp --encoding=unicode ``` 3. **启动 Tiny ERP 服务器**:运行 Tiny ERP 服务器程序...

    openerp 7.0 allinone part2

    openerp 7.0 allinone 安装包part1

    OpenERP操作指南

    OpenERP操作指南

Global site tag (gtag.js) - Google Analytics