diff --git a/modules/purchase_trade/__init__.py b/modules/purchase_trade/__init__.py index 22f4c31..bd8fbc9 100755 --- a/modules/purchase_trade/__init__.py +++ b/modules/purchase_trade/__init__.py @@ -75,6 +75,8 @@ def register(): dashboard.Demos, party.Party, party.PartyExecution, + party.PartyExecutionSla, + party.PartyExecutionPlace, payment_term.PaymentTerm, payment_term.PaymentTermLine, purchase.Purchase, diff --git a/modules/purchase_trade/lot.py b/modules/purchase_trade/lot.py index 98c27bb..5397335 100755 --- a/modules/purchase_trade/lot.py +++ b/modules/purchase_trade/lot.py @@ -3151,135 +3151,8 @@ class CreateContracts(Wizard): type_=self.ct.type, ct=self.ct, ) - # SaleLine = Pool().get('sale.line') - # Sale = Pool().get('sale.sale') - # PurchaseLine = Pool().get('purchase.line') - # Purchase = Pool().get('purchase.purchase') - # LotQt = Pool().get('lot.qt') - # LotQtHist = Pool().get('lot.qt.hist') - # LotQtType = Pool().get('lot.qt.type') - # Lot = Pool().get('lot.lot') - # Date = Pool().get('ir.date') - # self.sale_lines = [] - # type = self.ct.type - # base_contract = self.ct.lot.sale_line.sale if type == 'Purchase' else self.ct.lot.line.purchase - # for c in self.ct.contracts: - # contract = Purchase() if type == 'Purchase' else Sale() - # contract_line = PurchaseLine() if type == 'Purchase' else SaleLine() - # parts = c.currency_unit.split("_") - # if int(parts[0]) != 0: - # contract.currency = int(parts[0]) - # else: - # contract.currency = 1 - # contract.party = c.party - # contract.crop = c.crop - # contract.tol_min = c.tol_min - # contract.tol_max = c.tol_max - # if type == 'Purchase': - # contract.purchase_date = Date.today() - # else: - # contract.sale_date = Date.today() - # contract.reference = c.reference - # if base_contract.from_location and base_contract.to_location: - # if type == 'Purchase': - # contract.to_location = base_contract.from_location - # else: - # contract.from_location = base_contract.to_location - # if base_contract.from_location.type == 'supplier' and base_contract.to_location.type == 'customer': - # contract.from_location = base_contract.from_location - # contract.to_location = base_contract.to_location - # if c.party.wb: - # contract.wb = c.party.wb - # if c.party.association: - # contract.association = c.party.association - # if type == 'Purchase': - # if c.party.supplier_payment_term: - # contract.payment_term = c.party.supplier_payment_term - # else: - # if c.party.customer_payment_term: - # contract.payment_term = c.party.customer_payment_term - # contract.incoterm = c.incoterm - # if c.party.addresses: - # contract.invoice_address = c.party.addresses[0] - # if type == 'Sale': - # contract.shipment_address = c.party.addresses[0] - # contract.__class__.save([contract]) - # contract_line.quantity = c.quantity - # contract_line.quantity_theorical = c.quantity - # contract_line.product = self.ct.product - # contract_line.price_type = c.price_type - # contract_line.unit = self.ct.unit - # if type == 'Purchase': - # contract_line.purchase = contract.id - # else: - # contract_line.sale = contract.id - # contract_line.created_by_code = self.ct.matched - # contract_line.premium = Decimal(0) - # if int(parts[0]) == 0: - # contract_line.enable_linked_currency = True - # contract_line.linked_currency = 1 - # contract_line.linked_unit = int(parts[1]) - # contract_line.linked_price = c.price - # contract_line.unit_price = contract_line.get_price_linked_currency() - # else: - # contract_line.unit_price = c.price if c.price else Decimal(0) - # contract_line.del_period = c.del_period - # contract_line.from_del = c.from_del - # contract_line.to_del = c.to_del - # contract_line.__class__.save([contract_line]) - # logger.info("CREATE_ID:%s",contract.id) - # logger.info("CREATE_LINE_ID:%s",contract_line.id) - # if self.ct.matched: - # lot = Lot() - # if type == 'Purchase': - # lot.line = contract_line.id - # else: - # lot.sale_line = contract_line.id - # lot.lot_qt = None - # lot.lot_unit = None - # lot.lot_unit_line = contract_line.unit - # lot.lot_quantity = round(contract_line.quantity,5) - # lot.lot_gross_quantity = None - # lot.lot_status = 'forecast' - # lot.lot_type = 'virtual' - # lot.lot_product = contract_line.product - # lqtt = LotQtType.search([('sequence','=',1)]) - # if lqtt: - # lqh = LotQtHist() - # lqh.quantity_type = lqtt[0] - # lqh.quantity = round(lot.lot_quantity,5) - # lqh.gross_quantity = round(lot.lot_quantity,5) - # lot.lot_hist = [lqh] - # Lot.save([lot]) - # vlot = self.ct.lot - # shipment_origin = None - # if self.ct.shipment_in: - # shipment_origin = 'stock.shipment.in,' + str(self.ct.shipment_in.id) - # elif self.ct.shipment_internal: - # shipment_origin = 'stock.shipment.internal,' + str(self.ct.shipment_internal.id) - # elif self.ct.shipment_out: - # shipment_origin = 'stock.shipment.out,' + str(self.ct.shipment_out.id) - - # qt = c.quantity - # if type == 'Purchase': - # if not lot.updateVirtualPart(qt,shipment_origin,vlot): - # lot.createVirtualPart(qt,shipment_origin,vlot) - # #Decrease forecasted virtual part non matched - # lot.updateVirtualPart(-qt,shipment_origin,vlot,'only sale') - # else: - # if not vlot.updateVirtualPart(qt,shipment_origin,lot): - # vlot.createVirtualPart(qt,shipment_origin,lot) - # #Decrease forecasted virtual part non matched - # vlot.updateVirtualPart(-qt,shipment_origin,None) - return 'end' - # def do_matching(self, action): - # return action, { - # 'ids': self.sale_lines, - # 'model': str(self.ct.lot.id), - # } - def end(self): return 'reload' @@ -3309,7 +3182,6 @@ class ContractsStart(ModelView): def default_matched(cls): return True - class ContractDetail(ModelView): "Contract Detail" diff --git a/modules/purchase_trade/party.py b/modules/purchase_trade/party.py index 8a6b6a1..1e72807 100755 --- a/modules/purchase_trade/party.py +++ b/modules/purchase_trade/party.py @@ -16,6 +16,43 @@ class PartyExecution(ModelSQL,ModelView): def get_percent(self,name): return 2 +class PartyExecutionSla(ModelSQL,ModelView): + "Party Execution Sla" + __name__ = 'party.execution.sla' + + party = fields.Many2One('party.party',"Party") + reference = fields.Char("Reference") + product = fields.Many2One('product.product',"Product") + date_from = fields.Date("From") + date_to = fields.Date("To") + places = fields.One2Many('party.execution.place','pes',"") + +class PartyExecutionPlace(ModelSQL,ModelView): + "Party Sla Place" + __name__ = 'party.execution.place' + + pes = fields.Many2One('party.execution.sla',"Sla") + location = fields.Many2One('stock.location',"Location") + cost = fields.Numeric("Cost",digits=(16,4)) + currency_unit = fields.Selection('get_currency_unit',string="Curr/Unit") + + @staticmethod + def get_currency_unit(): + Currency = Pool().get('currency.currency') + Uom = Pool().get('product.uom') + + result = [] + currencies = Currency.search([('concatenate','=',True)]) + units = Uom.search([('concatenate','=',True)]) + result.append(("0_5","USC/lb")) + result.append(("0_37","USC/mt")) + for c in currencies: + for u in units: + key = "%s_%s" % (c.id, u.id) + value = "%s / %s" % (c.name, u.symbol or u.name) + result.append((key, value)) + return result + class Party(metaclass=PoolMeta): __name__ = 'party.party' @@ -24,6 +61,7 @@ class Party(metaclass=PoolMeta): wb = fields.Many2One('purchase.weight.basis',"Weight basis") association = fields.Many2One('purchase.association',"Association") execution = fields.One2Many('party.execution','party',"") + sla = fields.One2Many('party.execution.sla','party', "Sla") def IsAvailableForControl(self,sh): return True diff --git a/modules/purchase_trade/party.xml b/modules/purchase_trade/party.xml index d576412..6cd1fa3 100755 --- a/modules/purchase_trade/party.xml +++ b/modules/purchase_trade/party.xml @@ -5,10 +5,25 @@ party_form - + party.execution tree party_exec_tree + + party.execution.sla + form + party_exec_sla_form + + + party.execution.sla + tree + party_exec_sla_tree + + + party.execution.place + tree + party_exec_place_tree + \ No newline at end of file diff --git a/modules/purchase_trade/view/party_exec_place_tree.xml b/modules/purchase_trade/view/party_exec_place_tree.xml new file mode 100644 index 0000000..399f3cc --- /dev/null +++ b/modules/purchase_trade/view/party_exec_place_tree.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/modules/purchase_trade/view/party_exec_sla_tree.xml b/modules/purchase_trade/view/party_exec_sla_tree.xml new file mode 100644 index 0000000..cd1db01 --- /dev/null +++ b/modules/purchase_trade/view/party_exec_sla_tree.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file