~openerp-india/openerp-india/7.0

« back to all changes in this revision

Viewing changes to motif/procurement.py

  • Committer: Rohan Nayani(Open ERP)
  • Date: 2013-12-23 07:56:50 UTC
  • mto: (1.4.960 trunk-india)
  • mto: This revision was merged to the branch mainline in revision 22.
  • Revision ID: ron@tinyerp.com-20131223075650-erquhzykkr8zhzcf
[ADD]MRP,PURCHASE,SALE,STOCK:Motif manufacturing extended flow

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- coding: utf-8 -*-
 
2
##############################################################################
 
3
#
 
4
#    OpenERP, Open Source Management Solution
 
5
#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
 
6
#
 
7
#    This program is free software: you can redistribute it and/or modify
 
8
#    it under the terms of the GNU Affero General Public License as
 
9
#    published by the Free Software Foundation, either version 3 of the
 
10
#    License, or (at your option) any later version.
 
11
#
 
12
#    This program is distributed in the hope that it will be useful,
 
13
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
15
#    GNU Affero General Public License for more details.
 
16
#
 
17
#    You should have received a copy of the GNU Affero General Public License
 
18
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
19
#
 
20
##############################################################################
 
21
 
 
22
from datetime import datetime
 
23
from dateutil.relativedelta import relativedelta
 
24
from openerp.osv import osv
 
25
from openerp import netsvc
 
26
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP
 
27
from openerp.tools.translate import _
 
28
 
 
29
class procurement_order(osv.osv):
 
30
    _inherit = 'procurement.order'
 
31
 
 
32
    def make_mo(self, cr, uid, ids, context=None):
 
33
        """
 
34
        -Process
 
35
            - Overwrite this function only to "draft" production order instead of "confirm" stage
 
36
        -Result
 
37
            - AS it is
 
38
        """
 
39
        res = {}
 
40
        company = self.pool.get('res.users').browse(cr, uid, uid, context).company_id
 
41
        production_obj = self.pool.get('mrp.production')
 
42
        move_obj = self.pool.get('stock.move')
 
43
        wf_service = netsvc.LocalService("workflow")
 
44
        procurement_obj = self.pool.get('procurement.order')
 
45
        for procurement in procurement_obj.browse(cr, uid, ids, context=context):
 
46
            res_id = procurement.move_id.id
 
47
            newdate = datetime.strptime(procurement.date_planned, '%Y-%m-%d %H:%M:%S') - relativedelta(days=procurement.product_id.produce_delay or 0.0)
 
48
            newdate = newdate - relativedelta(days=company.manufacturing_lead)
 
49
            produce_id = production_obj.create(cr, uid, {
 
50
                'origin': procurement.origin,
 
51
                'product_id': procurement.product_id.id,
 
52
                'product_qty': procurement.product_qty,
 
53
                'product_uom': procurement.product_uom.id,
 
54
                'product_uos_qty': procurement.product_uos and procurement.product_uos_qty or False,
 
55
                'product_uos': procurement.product_uos and procurement.product_uos.id or False,
 
56
                'location_src_id': procurement.location_id.id,
 
57
                'location_dest_id': procurement.location_id.id,
 
58
                'bom_id': procurement.bom_id and procurement.bom_id.id or False,
 
59
                'date_planned': newdate.strftime('%Y-%m-%d %H:%M:%S'),
 
60
                'move_prod_id': res_id,
 
61
                'company_id': procurement.company_id.id,
 
62
            })
 
63
            
 
64
            res[procurement.id] = produce_id
 
65
            self.write(cr, uid, [procurement.id], {'state': 'running', 'production_id': produce_id})   
 
66
            bom_result = production_obj.action_compute(cr, uid,
 
67
                    [produce_id], properties=[x.id for x in procurement.property_ids])
 
68
            #no need to confirm production order based on procurmenet
 
69
            #wf_service.trg_validate(uid, 'mrp.production', produce_id, 'button_confirm', cr)
 
70
            if res_id:
 
71
                move_obj.write(cr, uid, [res_id],
 
72
                        {'location_id': procurement.location_id.id})
 
73
        self.production_order_create_note(cr, uid, ids, context=context)
 
74
        return res
 
75
 
 
76
    def make_po(self, cr, uid, ids, context=None):
 
77
        """ Make purchase order from procurement
 
78
        @return: New created Purchase Orders procurement wise
 
79
        """
 
80
        res = {}
 
81
        if context is None:
 
82
            context = {}
 
83
        company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id
 
84
        partner_obj = self.pool.get('res.partner')
 
85
        uom_obj = self.pool.get('product.uom')
 
86
        pricelist_obj = self.pool.get('product.pricelist')
 
87
        prod_obj = self.pool.get('product.product')
 
88
        acc_pos_obj = self.pool.get('account.fiscal.position')
 
89
        seq_obj = self.pool.get('ir.sequence')
 
90
        for procurement in self.browse(cr, uid, ids, context=context):
 
91
            res_id = procurement.move_id.id
 
92
            partner = procurement.product_id.seller_id # Taken Main Supplier of Product of Procurement.
 
93
            seller_qty = procurement.product_id.seller_qty
 
94
            partner_id = partner.id
 
95
            address_id = partner_obj.address_get(cr, uid, [partner_id], ['delivery'])['delivery']
 
96
            pricelist_id = partner.property_product_pricelist_purchase.id
 
97
            uom_id = procurement.product_id.uom_po_id.id
 
98
 
 
99
            qty = uom_obj._compute_qty(cr, uid, procurement.product_uom.id, procurement.product_qty, uom_id)
 
100
            if seller_qty:
 
101
                qty = max(qty,seller_qty)
 
102
 
 
103
            price = pricelist_obj.price_get(cr, uid, [pricelist_id], procurement.product_id.id, qty, partner_id, {'uom': uom_id})[pricelist_id]
 
104
 
 
105
            schedule_date = self._get_purchase_schedule_date(cr, uid, procurement, company, context=context)
 
106
            purchase_date = self._get_purchase_order_date(cr, uid, procurement, company, schedule_date, context=context)
 
107
 
 
108
            #Passing partner_id to context for purchase order line integrity of Line name
 
109
            new_context = context.copy()
 
110
            new_context.update({'lang': partner.lang, 'partner_id': partner_id})
 
111
 
 
112
            product = prod_obj.browse(cr, uid, procurement.product_id.id, context=new_context)
 
113
            taxes_ids = procurement.product_id.supplier_taxes_id
 
114
            taxes = acc_pos_obj.map_tax(cr, uid, partner.property_account_position, taxes_ids)
 
115
 
 
116
            name = product.partner_ref
 
117
            if product.description_purchase:
 
118
                name += '\n'+ product.description_purchase
 
119
            line_vals = {
 
120
                'name': name,
 
121
                'product_qty': qty,
 
122
 
 
123
                #ADD PUCHASE QTY
 
124
                'line_qty': procurement.product_id.p_coefficient * qty,
 
125
                'line_uom_id': procurement.product_id.p_uom_id.id,
 
126
 
 
127
                'product_id': procurement.product_id.id,
 
128
                'product_uom': uom_id,
 
129
                'price_unit': price or 0.0,
 
130
                'date_planned': schedule_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT),
 
131
                'move_dest_id': res_id,
 
132
                'taxes_id': [(6,0,taxes)],
 
133
            }
 
134
            name = seq_obj.get(cr, uid, 'purchase.order') or _('PO: %s') % procurement.name
 
135
            po_vals = {
 
136
                'name': name,
 
137
                'origin': procurement.origin,
 
138
                'partner_id': partner_id,
 
139
                'location_id': procurement.location_id.id,
 
140
                'warehouse_id': self._get_warehouse(procurement, company),
 
141
                'pricelist_id': pricelist_id,
 
142
                'date_order': purchase_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT),
 
143
                'company_id': procurement.company_id.id,
 
144
                'fiscal_position': partner.property_account_position and partner.property_account_position.id or False,
 
145
                'payment_term_id': partner.property_supplier_payment_term.id or False,
 
146
            }
 
147
            res[procurement.id] = self.create_procurement_purchase_order(cr, uid, procurement, po_vals, line_vals, context=new_context)
 
148
            self.write(cr, uid, [procurement.id], {'state': 'running', 'purchase_id': res[procurement.id]})
 
149
        self.message_post(cr, uid, ids, body=_("Draft Purchase Order created"), context=context)
 
150
        return res
 
151
 
 
152
 
 
153
procurement_order()
 
154
 
 
155
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: