From e074c0cfe0e2c83a0041f4c7e45ec333cd047f76 Mon Sep 17 00:00:00 2001 From: Dorin Hongu Date: Mon, 26 Jul 2021 21:20:24 +0300 Subject: [PATCH 1/3] migrare modul mrp_cost --- deltatech_mrp_cost/README.rst | 71 +++ deltatech_mrp_cost/__init__.py | 6 + deltatech_mrp_cost/__manifest__.py | 23 + deltatech_mrp_cost/data/mrp_data.xml | 41 ++ deltatech_mrp_cost/i18n/es.po | 151 +++++++ deltatech_mrp_cost/i18n/ro.po | 32 ++ deltatech_mrp_cost/models/__init__.py | 6 + deltatech_mrp_cost/models/mrp_production.py | 266 +++++++++++ deltatech_mrp_cost/models/mrp_routing.py | 15 + deltatech_mrp_cost/models/mrp_workcenter.py | 16 + deltatech_mrp_cost/models/product_category.py | 13 + deltatech_mrp_cost/models/stock_move.py | 19 + deltatech_mrp_cost/models/stock_picking.py | 16 + deltatech_mrp_cost/readme/DESCRIPTION.rst | 11 + .../static/description/icon.png | Bin 0 -> 5170 bytes .../static/description/index.html | 423 ++++++++++++++++++ .../static/description/logo-terrabit.png | Bin 0 -> 3047 bytes .../static/description/main_screenshot.png | Bin 0 -> 13515 bytes .../views/mrp_production_templates.xml | 79 ++++ deltatech_mrp_cost/views/mrp_view.xml | 51 +++ .../views/mrp_workcenter_view.xml | 15 + deltatech_mrp_cost/views/product_view.xml | 15 + 22 files changed, 1269 insertions(+) create mode 100644 deltatech_mrp_cost/README.rst create mode 100644 deltatech_mrp_cost/__init__.py create mode 100644 deltatech_mrp_cost/__manifest__.py create mode 100644 deltatech_mrp_cost/data/mrp_data.xml create mode 100644 deltatech_mrp_cost/i18n/es.po create mode 100644 deltatech_mrp_cost/i18n/ro.po create mode 100644 deltatech_mrp_cost/models/__init__.py create mode 100644 deltatech_mrp_cost/models/mrp_production.py create mode 100644 deltatech_mrp_cost/models/mrp_routing.py create mode 100644 deltatech_mrp_cost/models/mrp_workcenter.py create mode 100644 deltatech_mrp_cost/models/product_category.py create mode 100644 deltatech_mrp_cost/models/stock_move.py create mode 100644 deltatech_mrp_cost/models/stock_picking.py create mode 100644 deltatech_mrp_cost/readme/DESCRIPTION.rst create mode 100644 deltatech_mrp_cost/static/description/icon.png create mode 100644 deltatech_mrp_cost/static/description/index.html create mode 100644 deltatech_mrp_cost/static/description/logo-terrabit.png create mode 100644 deltatech_mrp_cost/static/description/main_screenshot.png create mode 100644 deltatech_mrp_cost/views/mrp_production_templates.xml create mode 100644 deltatech_mrp_cost/views/mrp_view.xml create mode 100644 deltatech_mrp_cost/views/mrp_workcenter_view.xml create mode 100644 deltatech_mrp_cost/views/product_view.xml diff --git a/deltatech_mrp_cost/README.rst b/deltatech_mrp_cost/README.rst new file mode 100644 index 0000000000..77c398aa11 --- /dev/null +++ b/deltatech_mrp_cost/README.rst @@ -0,0 +1,71 @@ +======== +MRP Cost +======== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-dhongu%2Fdeltatech-lightgray.png?logo=github + :target: https://github.com/dhongu/deltatech/tree/14.0/deltatech_mrp_cost + :alt: dhongu/deltatech + +|badge1| |badge2| |badge3| + + +Features: + - Calculeaza pretul de productie ca fiind pretul real al componentelor + - Asigneaza un picking pentru materialele consumate si unul pentru cele receptionate + - Inregistrare costuri de servicii prestate de terti + - variantele au acelasi pret + + - Computes price of production as being the real price of the components + - Asigns a picking for consumed materials and one for the receptioned ones + - Registration of services costs provided by third parties + - the variants have the same price + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Terrabit +* Dorin Hongu + +Maintainers +~~~~~~~~~~~ + +.. |maintainer-dhongu| image:: https://github.com/dhongu.png?size=40px + :target: https://github.com/dhongu + :alt: dhongu + +Current maintainer: + +|maintainer-dhongu| + +This module is part of the `dhongu/deltatech `_ project on GitHub. + +You are welcome to contribute. diff --git a/deltatech_mrp_cost/__init__.py b/deltatech_mrp_cost/__init__.py new file mode 100644 index 0000000000..7d0c4f4782 --- /dev/null +++ b/deltatech_mrp_cost/__init__.py @@ -0,0 +1,6 @@ +# © 2015-2021 Deltatech +# Dorin Hongu + + + + + diff --git a/deltatech_mrp_cost/i18n/es.po b/deltatech_mrp_cost/i18n/es.po new file mode 100644 index 0000000000..37cda43440 --- /dev/null +++ b/deltatech_mrp_cost/i18n/es.po @@ -0,0 +1,151 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * deltatech_mrp_cost +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190607\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-08 09:15+0000\n" +"PO-Revision-Date: 2019-07-08 09:15+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: deltatech_mrp_cost +#: model_terms:ir.ui.view,arch_db:deltatech_mrp_cost.report_mrporder +msgid "Amount" +msgstr "Total" + +#. module: deltatech_mrp_cost +#: model_terms:ir.ui.view,arch_db:deltatech_mrp_cost.report_mrporder +msgid "Effective Quantity" +msgstr "Cantidad Efectiva" + +#. module: deltatech_mrp_cost +#: model_terms:ir.ui.view,arch_db:deltatech_mrp_cost.report_mrporder +msgid "Price" +msgstr "Precio" + +#. module: deltatech_mrp_cost +#: model_terms:ir.ui.view,arch_db:deltatech_mrp_cost.report_mrporder +msgid "Product" +msgstr "Producto" + +#. module: deltatech_mrp_cost +#: model_terms:ir.ui.view,arch_db:deltatech_mrp_cost.report_mrporder +msgid "Quantity" +msgstr "Cantidad" + +#. module: deltatech_mrp_cost +#: model:ir.model.fields,field_description:deltatech_mrp_cost.field_mrp_production__acc_move_line_ids +msgid "Account move lines" +msgstr "Apuntes contables" + +#. module: deltatech_mrp_cost +#: model_terms:ir.ui.view,arch_db:deltatech_mrp_cost.mrp_production_acc_form_view +msgid "Accounting Entries" +msgstr "Asientos contables" + +#. module: deltatech_mrp_cost +#: model:ir.model.fields,field_description:deltatech_mrp_cost.field_mrp_workcenter__costs_hour_account_id +msgid "Analytic Account" +msgstr "Cuenta analítica" + +#. module: deltatech_mrp_cost +#: model:ir.model.fields,field_description:deltatech_mrp_cost.field_mrp_production__calculate_price +msgid "Calculate Price" +msgstr "Precio calculado" + +#. module: deltatech_mrp_cost +#: model:ir.model.fields,help:deltatech_mrp_cost.field_stock_move__qty_available +msgid "Current quantity of products.\n" +"In a context with a single Stock Location, this includes goods stored at this Location, or any of its children.\n" +"In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\n" +"stored in the Stock Location of the Warehouse of this Shop, or any of its children.\n" +"Otherwise, this includes goods stored in any Stock Location with 'internal' type." +msgstr "Cantidad actual de los productos.\n" +"En un contexto de una sola ubicación de Stock, esto incluye los bienes almacenados en esta ubicación, o cualquiera de sus hijas.\n" +"En un contexto de un solo almacén, esto incluye los bienes almacenados en la ubicación de Stock de ese almacén, o cualquiera de sus hijas.\n" +"En cualquier otro caso, esto incluye los bienes almacenados en cualquier ubicación de Stock de tipo 'Interna'." + +#. module: deltatech_mrp_cost +#: model:ir.model.fields,help:deltatech_mrp_cost.field_mrp_workcenter__costs_hour_account_id +msgid "Fill this only if you want automatic analytic accounting entries on production orders." +msgstr "Rellena esto sólo si quieres entradas analíticas en las listas de producción" + +#. module: deltatech_mrp_cost +#: model_terms:ir.ui.view,arch_db:deltatech_mrp_cost.report_mrporder +msgid "Finished Products" +msgstr "Productos finalizados" + +#. module: deltatech_mrp_cost +#: code:addons/deltatech_mrp_cost/models/mrp_production.py:136 +#, python-format +msgid "Invoice %s is not validated" +msgstr "Factura %s no ha sido validada" + +#. module: deltatech_mrp_cost +#: model:ir.model,name:deltatech_mrp_cost.model_account_move_line +msgid "Journal Item" +msgstr "Apunte contable" + +#. module: deltatech_mrp_cost +#: code:addons/deltatech_mrp_cost/models/mrp_production.py:133 +#, python-format +msgid "Order %s is not invoiced" +msgstr "Pedido %s no ha sido facturado" + +#. module: deltatech_mrp_cost +#: model_terms:ir.ui.view,arch_db:deltatech_mrp_cost.mrp_production_form_view +msgid "Picking" +msgstr "Albarán" + +#. module: deltatech_mrp_cost +#: model:ir.model.fields,field_description:deltatech_mrp_cost.field_account_move_line__production_id +msgid "Production" +msgstr "Producción" + +#. module: deltatech_mrp_cost +#: model:ir.model.fields,field_description:deltatech_mrp_cost.field_mrp_production__amount +msgid "Production Amount" +msgstr "Total Producción" + +#. module: deltatech_mrp_cost +#: model:ir.model,name:deltatech_mrp_cost.model_mrp_production +msgid "Production Order" +msgstr "Pedido de producción" + +#. module: deltatech_mrp_cost +#: model:ir.model.fields,field_description:deltatech_mrp_cost.field_stock_move__qty_available +msgid "Quantity On Hand" +msgstr "Cantidad a mano" + +#. module: deltatech_mrp_cost +#: model:ir.model.fields,field_description:deltatech_mrp_cost.field_mrp_production__service_amount +msgid "Service Amount" +msgstr "Total Servicios" + +#. module: deltatech_mrp_cost +#: model:ir.model,name:deltatech_mrp_cost.model_stock_move +msgid "Stock Move" +msgstr "Movimiento de existencias" + +#. module: deltatech_mrp_cost +#: model:ir.model,name:deltatech_mrp_cost.model_stock_picking +msgid "Transfer" +msgstr "Transferir" + +#. module: deltatech_mrp_cost +#: model:ir.model,name:deltatech_mrp_cost.model_mrp_workcenter +msgid "Work Center" +msgstr "Centro de producción" + +#. module: deltatech_mrp_cost +#: model:ir.model,name:deltatech_mrp_cost.model_mrp_routing_workcenter +msgid "Work Center Usage" +msgstr "Utilización del centro de producción" + diff --git a/deltatech_mrp_cost/i18n/ro.po b/deltatech_mrp_cost/i18n/ro.po new file mode 100644 index 0000000000..2084f95f9b --- /dev/null +++ b/deltatech_mrp_cost/i18n/ro.po @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * deltatech_mrp_cost +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-04-22 07:25+0000\n" +"PO-Revision-Date: 2017-04-22 07:25+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: deltatech_mrp_cost +#: model:ir.model.fields,field_description:deltatech_mrp_cost.field_mrp_production_calculate_price +msgid "Calculate Price" +msgstr "Preț calculat" + +#. module: deltatech_mrp_cost +#: model:ir.model,name:deltatech_mrp_cost.model_mrp_production +msgid "Manufacturing Order" +msgstr "Comandă producție" + +#. module: deltatech_mrp_cost +#: model:ir.model.fields,field_description:deltatech_mrp_cost.field_mrp_production_amount +msgid "Production Amount" +msgstr "Valoare producție" + diff --git a/deltatech_mrp_cost/models/__init__.py b/deltatech_mrp_cost/models/__init__.py new file mode 100644 index 0000000000..3edb30f289 --- /dev/null +++ b/deltatech_mrp_cost/models/__init__.py @@ -0,0 +1,6 @@ +# © 2015-2021 Deltatech +# Dorin Hongu 0: + planned_cost = False # nu au fost facute miscari de stoc + + if planned_cost: + for move in production.move_raw_ids: + if move.product_id.type == "product": + qty = move.product_qty + move.product_qty * move.product_id.scrap + amount += move.price_unit * qty + product_qty = production.product_qty + + else: + for move in production.move_raw_ids: + if move.product_id.type == "product": + qty = move.quantity_done + amount += abs(move.price_unit) * qty + product_qty = 0.0 + for move in production.move_finished_ids: + product_qty += move.quantity_done + if product_qty == 0.0: + product_qty = production.product_qty + + # adaugare manopera la costul estimat + + if production.routing_id: + for operation in production.routing_id.operation_ids: + time_cycle = operation.get_time_cycle(quantity=product_qty, product=production.product_id) + + cycle_number = math.ceil(product_qty / operation.workcenter_id.capacity) + duration_expected = ( + operation.workcenter_id.time_start + + operation.workcenter_id.time_stop + + cycle_number * time_cycle * 100.0 / operation.workcenter_id.time_efficiency + ) + + amount += (duration_expected / 60) * operation.workcenter_id.costs_hour + + amount += production.service_amount + calculate_price = amount / product_qty + production.calculate_price = calculate_price + production.amount = amount + + def _cal_price(self, consumed_moves): + super(MrpProduction, self)._cal_price(consumed_moves) + self.ensure_one() + production = self + + self._calculate_amount() # refac calculul + price_unit = production.calculate_price + self.move_finished_ids.write({"price_unit": price_unit}) + # functia standard nu permite si de aceea am facut o modificare in deltatech_purchase_price + self.move_finished_ids.product_price_update_before_done() + + # if production.product_tmpl_id.cost_method == 'fifo' and + # production.product_tmpl_id.standard_price != production.calculate_price: + # + # price_unit = production.calculate_price + # production.product_tmpl_id.write({'standard_price': price_unit}) + # production.product_tmpl_id.product_variant_ids.write({'standard_price': price_unit}) + # production.move_finished_ids.write({'price_unit': price_unit}) + + return True + + def check_service_invoiced(self): + # sunt servicii in bom ? + for production in self: + service_amount = 0 + for line in production.bom_id.bom_line_ids: + if line.product_id.type == "service": + # care este comanda de achizitie ? + orders = self.env["purchase.order"].search([("group_id", "=", production.procurement_group_id.id)]) + for order in orders: + if order.invoice_status != "invoiced": + raise UserError(_("Order %s is not invoiced") % order.name) + for invoice in order.invoice_ids: + if not invoice.move_id: + raise UserError(_("Invoice %s is not validated") % invoice.number) + else: + for acc_move_line in invoice.move_id.line_ids: + acc_move_line.write({"production_id": production.id}) + if acc_move_line.product_id: + service_amount += acc_move_line.debit + acc_move_line.credit + if service_amount: + production.write({"service_amount": service_amount}) + + def post_inventory(self): + self.check_service_invoiced() + + self.assign_picking() + res = super(MrpProduction, self).post_inventory() + for production in self: + acc_move_line_ids = self.env["account.move.line"] + for move in production.move_raw_ids: + acc_move_line_ids |= move.account_move_ids.line_ids + for move in production.move_finished_ids: + acc_move_line_ids |= move.account_move_ids.line_ids + if acc_move_line_ids: + acc_move_line_ids.write({"production_id": production.id}) + return res + + def _generate_moves(self): + res = super(MrpProduction, self)._generate_moves() + self.assign_picking() + return res + + def assign_picking(self): + """ + Toate produsele consumate se vor reuni intr-un picking list (Bon de consum) + toate produsele receptionate (de regula un singur produs) se vor reuni intr-un picking list (Nota de predare) + """ + for production in self: + # bon de consum + move_list = self.env["stock.move"] + picking = False + for move in production.move_raw_ids: + if not move.picking_id: + move_list += move + else: + picking = move.picking_id + if move_list: + + warehouse_id = production.location_dest_id.get_warehouse() or self.env.user.company_id.warehouse_id + picking_type = warehouse_id.pick_type_prod_consume_id + if picking_type: + if not picking: + picking = self.env["stock.picking"].create( + { + "picking_type_id": picking_type.id, + "date": production.date_planned_start, + "location_id": picking_type.default_location_src_id.id, + "location_dest_id": picking_type.default_location_dest_id.id, + "origin": production.name, + } + ) + move_list.write({"picking_id": picking.id}) + # picking.action_assign() + + # nota de predare + move_list = self.env["stock.move"] + picking = False + for move in production.move_finished_ids: + if not move.picking_id: + move_list += move + else: + picking = move.picking_id + if move_list: + warehouse_id = production.location_src_id.get_warehouse() or self.env.user.company_id.warehouse_id + + picking_type = warehouse_id.pick_type_prod_receipt_id + if picking_type: + if not picking: + picking = self.env["stock.picking"].create( + { + "picking_type_id": picking_type.id, + "date": production.date_planned_start, + "location_id": picking_type.default_location_src_id.id, + "location_dest_id": picking_type.default_location_dest_id.id, + "origin": production.name, + } + ) + move_list.write({"picking_id": picking.id}) + # picking.action_assign() + return + + def action_see_picking(self): + pickings = self.env["stock.picking"] + for move in self.move_raw_ids: + pickings |= move.picking_id + for move in self.move_finished_ids: + pickings |= move.picking_id + + action = self.env.ref("stock.action_picking_tree_all").read()[0] + if pickings: + action["domain"] = "[('id','in'," + str(pickings.ids) + " )]" + + else: + action = False + return action + + def _generate_raw_move(self, bom_line, line_data): + move = super(MrpProduction, self)._generate_raw_move(bom_line, line_data) + if bom_line.product_id.type == "service": + self._action_launch_procurement_rule(bom_line, line_data) + # if bom_line.product_id.type != 'product': + # self.service_amount += bom_line.product_id.standard_price * line_data['qty'] + + return move + + @api.model + def _prepare_service_procurement_values(self): + location = self.location_src_id + return { + "company_id": self.company_id, + "date_planned": self.date_planned_start, + "warehouse_id": location.get_warehouse(), + "group_id": self.procurement_group_id, + } + + @api.model + def _action_launch_procurement_rule(self, bom_line, line_data): + values = self._prepare_service_procurement_values() + + name = "{} for {}".format(bom_line.product_id.name, self.name) + self.env["procurement.group"].sudo().run( + bom_line.product_id, line_data["qty"], bom_line.product_uom_id, self.location_src_id, name, name, values + ) + return True diff --git a/deltatech_mrp_cost/models/mrp_routing.py b/deltatech_mrp_cost/models/mrp_routing.py new file mode 100644 index 0000000000..afb1de5b36 --- /dev/null +++ b/deltatech_mrp_cost/models/mrp_routing.py @@ -0,0 +1,15 @@ +# © 2015-2021 Deltatech +# Dorin Hongu Bc`Y{&!d)|2FH- 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 g^?&u3rvZ)meZDO$E6VR*;|2g0rdF5gO + + + + + +MRP Cost + + + +
+

MRP Cost

+ + +

Beta License: LGPL-3 dhongu/deltatech

+
+
Features:
+
    +
  • Calculeaza pretul de productie ca fiind pretul real al componentelor
  • +
  • Asigneaza un picking pentru materialele consumate si unul pentru cele receptionate
  • +
  • Inregistrare costuri de servicii prestate de terti
  • +
  • variantele au acelasi pret
  • +
  • Computes price of production as being the real price of the components
  • +
  • Asigns a picking for consumed materials and one for the receptioned ones
  • +
  • Registration of services costs provided by third parties
  • +
  • the variants have the same price
  • +
+
+
+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Terrabit
  • +
  • Dorin Hongu
  • +
+
+
+

Maintainers

+

Current maintainer:

+

dhongu

+

This module is part of the dhongu/deltatech project on GitHub.

+

You are welcome to contribute.

+
+
+
+ + diff --git a/deltatech_mrp_cost/static/description/logo-terrabit.png b/deltatech_mrp_cost/static/description/logo-terrabit.png new file mode 100644 index 0000000000000000000000000000000000000000..8b23ccdd371b63cfa87fdea531374b662e586588 GIT binary patch literal 3047 zcmVPx#s8CE)MF0Q*q`t8ugIpVbR%yXy2y;k*l!pRvM488$ zYr$p;bx8+vM=OS5R8&@9yjmfGT3dy55_wNDi)bc=UJ!UrVPRrWP*QPmb6s6uT3cOe zYHVCwURPIHO-)ZIhG1j9UUh_UFXs!}a_0e#&~V-mW8!NZ9YzK&DO*eMU{OP&EfK`2YX_CUjCxQve2* zRK7wV`VcnS?;7U%hc2!|am9l7K%~fJxz_$;*H`{|P^gZl6l~o901B%~L_t(|+T~p7 zcB8x!GKn!o4DT=h2nY&tf5SEX_5DTYz5mjC_35)9eDoXx z<^6TjVhDpC1Mv21)4}vlsjms}sc*X3>sv1Yc=@&IZ2Ef-%fj31<{A6wTP6tac?QJz zU)%wLUs68-*e8d>;dJao1}{AXAl_fTu%*dA1_6x#{qU7rCkT3z2qgy`(*l9?*o6x| z`cV-C=bk$hpT4LaI%$K?UPxr;TKE$uB?4bbmmtvlAdQBr(xLr#iNIywi4AL1F#650 z(SX}%f+O1=DV!l}+pMIT=@2s;E@_)1ws|D*Zpkjrw$*#-&+|dB`KacBD06H$QaOzS z10HIcYuMRnPNiA2;YGw9F^e|-)|hcM)ymu(l4flvaV{=v1$^$6iRwd%!1tboAl~Ri zFg?x#aa*??LZIHb92nI$O~lX7*;Sh@@W6|aG}`uCu8m_Lc!p#c86m*Ar(1rqab|pq zVIG{A-{{HV!qZB>l)s3;cI%Ef2%u)_Zuv{28G)_rv>>pP^BmBwtUqy*mO)Tf#CV@v zvR`~BZ9(vd2y8`xhrrg#fmU4Fq>h>qz`yJg10(lb3+q!o2(bSgSolHkrwC{^7Xic? zgt$v@<>dne&@f#PaO7*fz)@$3EQ&Y#6G)A(LrV~dyNqb)Z5B+J-x#nVMSwZOpa?L{ z77;HNObvlSK(<6tv^0tsKtP5=0VW)&w>sYgVTin~`i}|naXBD0XqexKn-`=40dZ8C zQXrr$ZQCBY)YTjT*}=_L4u_kCnyInR86rRq^OIo=S-t4u3Izf-$yAv2Y~F|*1oAX-0S^?)r*e$P-d%YJz=~M) zKRp~bx?aKHy%B+36#>tUJ26tUlS)XHStyH8Uvz2P2eEl+5;W} zB(G_^rmCt2=z*z*3N0yZ2%wxgcc=snNU$+br^2W708)xu$ZXV8jhO+ATt02E2ne)# zwjqEnvwE%;vaHCQ^zt9{fJNs8nr#<_zyJuyOVcfmzzXt6~!Wy%@kV zbsF$c6&HCR8!9^?q_m)pI0)eC(T0FbvmnM=7rCP!(g)rXS(IG3t7v~70|UjP><$s2 zc~E3HT_7#W-p;8apsB{FoFz6Qu*(t1BmbgzDFX~3hX=A)F~rQ4m1Ai3z$QN!Sur(f zd)_RPNwZNsi!O8LElU&r-Y^`SET5Th7|!u7s|7KQ{3K@NVA@_2PY-IrPcVYOo<{yb zFWwwe@6$)J2-k#1Yb5{whLYqAX94LkZkiKtvH{hE_~G>U2bh*2z%B~%=7lM5p#;~& zBY(MAP=1IZJ+Qsq;hRFdGJNXt{0~Q5H&dVoKA0VOKg6&mM1lbFepGBJeXyL8igZ?1IP%@xpg&4qR$4mtTM8RuU{K zZ+B*06leCKix#T9IQaaTJ14MC-7!>1f*|dvh|2ZihK(eO8B{kvpr(K=oRU;2q!Rg( z1GEcLVRS7{show!Rd~a&9R+kp;5eI)B3*p>Y7Bx$D`nuF0Y3@WQ{Nv?XRuDrreoh< zc;F_K$#}x7F-p_%4F3<>gT$BhyS0K?SUVLQ51#In4afF zB^n6DFhU4K;aq~lgkIKhOdFMXc1KxzNdy%t{JQL8{m?E57(vLd1nAmHfba|gIkIb?i2+YRi8zG_49wXCfl#s# zmkOCla#~#vh@aS0Dq#>7(VQMH^1JaswAK+o0V1$*(t-d2H1kQAfWngji3W+7qJamV z0Jh*$Aqav?a)AEFPwlN=6n(;3apQODx~uxT=I3YcK*$lzb-j|if=exAnuv5b$fxra1lV){7mfx zP)FcSQ1U!P0I46uH|SDOXXMF*Pyy-UqmdU7Cq5PCK~PAZeUc)Fh#Hw8@IBSD`TRI~x=RNYM-Fe6C;Gm2o&(50A`eEz|9tdGp4!fXw= z)23?u=YL(mr$Ww-!3F?+{ud^ED(w1k#b+NrvEiyh{Brc4`M_qFQ6c=iC~Yi!tlf=% zd}M`R$)CY&ur}{&vTIKOs8Hc|SO4!Tqc4Ak0a77%-ovwar7j1(F-nER|M+@7-&_2@ zo?W{?0OVA-NwRqlatU`VE?sC*G0LV*&-TAt@$*MCNC_}5{;oru6Kq3e_w5y5J*lGI%Rfn#ZAsJIA$YhW+pts(Y|oN4)ivzVpr^J}Wp`M8 pxWdR@8W!0EZ{fXJef&FA{{tOWnqPkQ04x9i002ovPDHLkV1hA_f)xM& literal 0 HcmV?d00001 diff --git a/deltatech_mrp_cost/static/description/main_screenshot.png b/deltatech_mrp_cost/static/description/main_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..4513ca1d397680899df5e54e92b792d5f1ec13e1 GIT binary patch literal 13515 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
    3wjm;&q?2cfmqxYY2U0lV^Uk{-ZeHecO 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 + + + diff --git a/deltatech_mrp_cost/views/mrp_view.xml b/deltatech_mrp_cost/views/mrp_view.xml new file mode 100644 index 0000000000..d28c796f0e --- /dev/null +++ b/deltatech_mrp_cost/views/mrp_view.xml @@ -0,0 +1,51 @@ + + + + + deltatech.mrp.production.form + mrp.production + form + + +
    +
    + + + + + + + + + + + + +
    +
    +
    + + deltatech.mrp.production.form + mrp.production + form + + + + + + + + + + +
    diff --git a/deltatech_mrp_cost/views/mrp_workcenter_view.xml b/deltatech_mrp_cost/views/mrp_workcenter_view.xml new file mode 100644 index 0000000000..3152ad4247 --- /dev/null +++ b/deltatech_mrp_cost/views/mrp_workcenter_view.xml @@ -0,0 +1,15 @@ + + + + + mrp.workcenter.form + mrp.workcenter + + + + + + + + + diff --git a/deltatech_mrp_cost/views/product_view.xml b/deltatech_mrp_cost/views/product_view.xml new file mode 100644 index 0000000000..ebb396c473 --- /dev/null +++ b/deltatech_mrp_cost/views/product_view.xml @@ -0,0 +1,15 @@ + + + + + product.category.form + product.category + + + + + + + + + From bef2807edc960ab68c0970b3853799fe54538cf9 Mon Sep 17 00:00:00 2001 From: Dorin Hongu Date: Tue, 27 Jul 2021 14:06:16 +0300 Subject: [PATCH 2/3] fix --- deltatech_mrp_cost/models/mrp_production.py | 23 ++++++++++----------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/deltatech_mrp_cost/models/mrp_production.py b/deltatech_mrp_cost/models/mrp_production.py index 57d41eb475..d5252af6bb 100644 --- a/deltatech_mrp_cost/models/mrp_production.py +++ b/deltatech_mrp_cost/models/mrp_production.py @@ -81,18 +81,17 @@ def _compute_amount(self): # adaugare manopera la costul estimat - if production.routing_id: - for operation in production.routing_id.operation_ids: - time_cycle = operation.get_time_cycle(quantity=product_qty, product=production.product_id) - - cycle_number = math.ceil(product_qty / operation.workcenter_id.capacity) - duration_expected = ( - operation.workcenter_id.time_start - + operation.workcenter_id.time_stop - + cycle_number * time_cycle * 100.0 / operation.workcenter_id.time_efficiency - ) - - amount += (duration_expected / 60) * operation.workcenter_id.costs_hour + for operation in production.bom_id.operation_ids: + time_cycle = operation.get_time_cycle(quantity=product_qty, product=production.product_id) + + cycle_number = math.ceil(product_qty / operation.workcenter_id.capacity) + duration_expected = ( + operation.workcenter_id.time_start + + operation.workcenter_id.time_stop + + cycle_number * time_cycle * 100.0 / operation.workcenter_id.time_efficiency + ) + + amount += (duration_expected / 60) * operation.workcenter_id.costs_hour amount += production.service_amount calculate_price = amount / product_qty From e579992b3c9ab58fa0488b24e558e98055554774 Mon Sep 17 00:00:00 2001 From: Dorin Hongu Date: Tue, 27 Jul 2021 18:31:48 +0300 Subject: [PATCH 3/3] fix _calculate_amount --- deltatech_mrp_cost/README.rst | 3 +++ deltatech_mrp_cost/models/mrp_production.py | 2 +- deltatech_mrp_cost/readme/DESCRIPTION.rst | 3 +++ deltatech_mrp_cost/static/description/index.html | 4 +++- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/deltatech_mrp_cost/README.rst b/deltatech_mrp_cost/README.rst index 77c398aa11..d01154fe43 100644 --- a/deltatech_mrp_cost/README.rst +++ b/deltatech_mrp_cost/README.rst @@ -31,6 +31,9 @@ Features: - Registration of services costs provided by third parties - the variants have the same price + + De testat cum functioneaza cu mrp_account instalat + **Table of contents** .. contents:: diff --git a/deltatech_mrp_cost/models/mrp_production.py b/deltatech_mrp_cost/models/mrp_production.py index d5252af6bb..0ada84b5d4 100644 --- a/deltatech_mrp_cost/models/mrp_production.py +++ b/deltatech_mrp_cost/models/mrp_production.py @@ -103,7 +103,7 @@ def _cal_price(self, consumed_moves): self.ensure_one() production = self - self._calculate_amount() # refac calculul + # self._calculate_amount() # refac calculul price_unit = production.calculate_price self.move_finished_ids.write({"price_unit": price_unit}) # functia standard nu permite si de aceea am facut o modificare in deltatech_purchase_price diff --git a/deltatech_mrp_cost/readme/DESCRIPTION.rst b/deltatech_mrp_cost/readme/DESCRIPTION.rst index 96fdcfde12..057acd306b 100644 --- a/deltatech_mrp_cost/readme/DESCRIPTION.rst +++ b/deltatech_mrp_cost/readme/DESCRIPTION.rst @@ -9,3 +9,6 @@ Features: - Asigns a picking for consumed materials and one for the receptioned ones - Registration of services costs provided by third parties - the variants have the same price + + + De testat cum functioneaza cu mrp_account instalat diff --git a/deltatech_mrp_cost/static/description/index.html b/deltatech_mrp_cost/static/description/index.html index 383eeb2bc6..2d611dea68 100644 --- a/deltatech_mrp_cost/static/description/index.html +++ b/deltatech_mrp_cost/static/description/index.html @@ -370,7 +370,7 @@

    MRP Cost

    Beta License: LGPL-3 dhongu/deltatech

    Features:
    -
      +
      • Calculeaza pretul de productie ca fiind pretul real al componentelor
      • Asigneaza un picking pentru materialele consumate si unul pentru cele receptionate
      • Inregistrare costuri de servicii prestate de terti
      • @@ -380,6 +380,8 @@

        MRP Cost

      • Registration of services costs provided by third parties
      • the variants have the same price
      +
      +De testat cum functioneaza cu mrp_account instalat

    Table of contents