|
@@ -255,14 +245,12 @@
-
+
|
-
+
|
diff --git a/custom_breeding_apps/views/stock_move_line_view.xml b/custom_breeding_apps/views/stock_move_line_view.xml
index c454c1ff4f..6c747da461 100644
--- a/custom_breeding_apps/views/stock_move_line_view.xml
+++ b/custom_breeding_apps/views/stock_move_line_view.xml
@@ -113,6 +113,7 @@
{'column_invisible':['|', ('parent.egg_production', '=', True), ('parent.picking_type_code', '=', 'outgoing')]}
+ show
bottom
-
+
1
+ and line.order_id.update_line_qty
+ and all([c.state == "done" for c in line.order_id.picking_ids])
+ and all(
+ [
+ c.product_qty == c.qty_received
+ for c in (line.order_id.order_line)
+ ]
+ )
+ ):
+ line.order_id.update_line_qty = False
+
+ def _create_or_update_picking(self):
+ for line in self:
+ if (
+ line.product_id
+ and line.product_id.type in ("product", "consu")
+ and line.order_id.update_line_qty
+ and line.return_qty
+ ):
+ continue
+ else:
+ return super()._create_or_update_picking()
diff --git a/custom_p/models/sale_order.py b/custom_p/models/sale_order.py
index 9c525a6cc4..de931a4da2 100644
--- a/custom_p/models/sale_order.py
+++ b/custom_p/models/sale_order.py
@@ -16,10 +16,44 @@ class SaleOrder(models.Model):
copy=False,
)
+ def button_confirm_pickings(self):
+ if self.auto_purchase_order_id:
+ for line in self.order_line:
+ if line.auto_purchase_line_id:
+ lot = self.env["stock.production.lot"]
+ if line.lot_id:
+ lot_name = line.lot_id.name
+ company = line.sudo().auto_purchase_line_id.company_id
+ product = line.product_id
+ lot_domain = [
+ ("name", "=", lot_name),
+ ("company_id", "=", company.id),
+ ("product_id", "=", product.id),
+ ]
+ lot = lot.sudo().search(lot_domain)
+ if not lot:
+ lot = lot.sudo().action_create_lot(
+ product, lot_name, company
+ )
+ line.auto_purchase_line_id.sudo().write(
+ {
+ "lot_id": lot.id or False,
+ "return_qty": line.return_qty,
+ }
+ )
+ return super().button_confirm_pickings()
+
def button_return_picking(self):
self.update_line_qty = True
return super().button_return_picking()
+ def action_view_sale_lines(self):
+ result = super().action_view_sale_lines()
+ view_tree_id = self.env.ref("custom_p.view_order_line_tree").id
+ result["views"] = [(view_tree_id, "tree")]
+ result["view"] = view_tree_id
+ return result
+
def action_last_month_partner_sales(self):
self.ensure_one()
if not self.partner_id:
diff --git a/custom_p/models/sale_order_line.py b/custom_p/models/sale_order_line.py
index b22fb079b2..a9008456dc 100644
--- a/custom_p/models/sale_order_line.py
+++ b/custom_p/models/sale_order_line.py
@@ -1,5 +1,6 @@
# Copyright 2024 Berezi Amubieta - AvanzOSC
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+from datetime import timedelta
from odoo import api, fields, models
@@ -26,6 +27,7 @@ def _compute_qty_delivered(self):
and line.return_qty
):
line.product_uom_qty = line.qty_delivered
+ line._compute_qty_amount_pending_delivery()
if (
len(line.order_id.picking_ids) > 1
and line.order_id.update_line_qty
@@ -62,3 +64,51 @@ def _compute_possible_lot_ids(self):
)
lot_ids += lots
line.possible_lot_ids = [(6, 0, lot_ids.ids)]
+
+ @api.depends("invoice_lines.move_id.state", "invoice_lines.quantity")
+ def _get_invoice_qty(self):
+ super()._get_invoice_qty()
+ for line in self:
+ if line.invoice_lines.filtered(lambda c: c.out_refund_from_invoice):
+ qty_invoiced = 0.0
+ for invoice_line in line.invoice_lines:
+ if invoice_line.move_id.state != "cancel":
+ if invoice_line.move_id.move_type == "out_invoice":
+ qty_invoiced += (
+ invoice_line.product_uom_id._compute_quantity(
+ invoice_line.quantity, line.product_uom
+ )
+ )
+ elif (
+ invoice_line.filtered(
+ lambda c: not c.out_refund_from_invoice
+ ).move_id.move_type
+ == "out_refund"
+ ):
+ qty_invoiced -= (
+ invoice_line.product_uom_id._compute_quantity(
+ invoice_line.quantity, line.product_uom
+ )
+ )
+ line.qty_invoiced = qty_invoiced
+
+ @api.model
+ def create(self, values):
+ if "customer_lead" not in values:
+ order = self.env["sale.order"].browse(values.get("order_id"))
+ product = self.env["product.product"].browse(values.get("product_id"))
+ values.update(
+ {"customer_lead": order._get_customer_lead(product.product_tmpl_id)}
+ )
+ result = super(SaleOrderLine, self).create(values)
+ if not result.order_id.commitment_date:
+ order_date = fields.Datetime.from_string(
+ result.order_id.date_order
+ if result.order_id.date_order
+ and result.order_id.state in ["sale", "done"]
+ else fields.Datetime.now()
+ )
+ result.order_id.commitment_date = order_date + timedelta(
+ days=result.customer_lead or 0.0
+ )
+ return result
diff --git a/custom_p/models/stock_move_line.py b/custom_p/models/stock_move_line.py
new file mode 100644
index 0000000000..263b97ed6c
--- /dev/null
+++ b/custom_p/models/stock_move_line.py
@@ -0,0 +1,18 @@
+# Copyright 2024 Berezi Amubieta - AvanzOSC
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+from odoo import api, models
+
+
+class StockMoveLine(models.Model):
+ _inherit = "stock.move.line"
+
+ @api.model
+ def _prepare_stock_move_vals(self):
+ result = super()._prepare_stock_move_vals()
+ result.update(
+ {
+ "name": self.product_id.display_name,
+ }
+ )
+ return result
diff --git a/custom_p/models/stock_picking.py b/custom_p/models/stock_picking.py
index ab7a9974e7..bc8acea380 100644
--- a/custom_p/models/stock_picking.py
+++ b/custom_p/models/stock_picking.py
@@ -6,6 +6,7 @@
class StockPicking(models.Model):
_inherit = "stock.picking"
+ _order = "custom_date_done desc, priority desc, scheduled_date asc, id desc"
def button_validate(self):
for picking in self:
diff --git a/custom_p/views/account_move_view.xml b/custom_p/views/account_move_view.xml
index b353a7c6d8..f9baac4d70 100644
--- a/custom_p/views/account_move_view.xml
+++ b/custom_p/views/account_move_view.xml
@@ -9,4 +9,14 @@
+
+
+ account.move
+
+
+
+
+
+
+
diff --git a/custom_p/views/hr_employee_view.xml b/custom_p/views/hr_employee_view.xml
new file mode 100644
index 0000000000..2ff0c64813
--- /dev/null
+++ b/custom_p/views/hr_employee_view.xml
@@ -0,0 +1,12 @@
+
+
+
+ hr.employee
+
+
+
+
+
+
+
+
diff --git a/custom_p/views/sale_order_line_view.xml b/custom_p/views/sale_order_line_view.xml
new file mode 100644
index 0000000000..9588b0a6c2
--- /dev/null
+++ b/custom_p/views/sale_order_line_view.xml
@@ -0,0 +1,96 @@
+
+
+
+ sale.order.line
+
+ primary
+
+
+ 0
+ bottom
+
+
+
+ 1
+
+
+
+ hide
+
+
+ hide
+
+
+ hide
+
+
+
+
+
+
+
+
+
+
+ hide
+
+
+ hide
+
+
+ hide
+
+
+ hide
+
+
+ hide
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/custom_p/views/stock_picking_view.xml b/custom_p/views/stock_picking_view.xml
index c10fa2e18b..75bee3e493 100644
--- a/custom_p/views/stock_picking_view.xml
+++ b/custom_p/views/stock_picking_view.xml
@@ -7,6 +7,11 @@
+
+ {'readonly': [('state', '=', 'cancel')]}
+
diff --git a/custom_p/wizards/__init__.py b/custom_p/wizards/__init__.py
index d7bf376da3..02e520b858 100644
--- a/custom_p/wizards/__init__.py
+++ b/custom_p/wizards/__init__.py
@@ -1,3 +1,4 @@
from . import sale_order_line_price_history_line
from . import product_pricelist_print
from . import stock_inventory_warning_wizard
+from . import account_move_reversal
diff --git a/custom_p/wizards/account_move_reversal.py b/custom_p/wizards/account_move_reversal.py
new file mode 100644
index 0000000000..cb4086ac2b
--- /dev/null
+++ b/custom_p/wizards/account_move_reversal.py
@@ -0,0 +1,18 @@
+# Copyright 2024 Berezi Amubieta - AvanzOSC
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+from odoo import models
+
+
+class AccountMoveReversal(models.TransientModel):
+ _inherit = "account.move.reversal"
+
+ def reverse_moves(self):
+ result = super().reverse_moves()
+ model = result.get("res_model")
+ if model == "account.move":
+ id = result.get("res_id")
+ move = self.env[model].browse(id)
+ for line in move.invoice_line_ids:
+ line.out_refund_from_invoice = True
+ return result
diff --git a/custom_purchase_import_wizard/i18n/custom_purchase_import_wizard.pot b/custom_purchase_import_wizard/i18n/custom_purchase_import_wizard.pot
index 7dfea14b69..a7ecb4e143 100644
--- a/custom_purchase_import_wizard/i18n/custom_purchase_import_wizard.pot
+++ b/custom_purchase_import_wizard/i18n/custom_purchase_import_wizard.pot
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-28 09:35+0000\n"
-"PO-Revision-Date: 2023-08-28 09:35+0000\n"
+"POT-Creation-Date: 2024-10-22 06:20+0000\n"
+"PO-Revision-Date: 2024-10-22 06:20+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -177,6 +177,7 @@ msgstr ""
#. module: custom_purchase_import_wizard
#: code:addons/custom_purchase_import_wizard/models/purchase_order_import.py:0
+#: code:addons/custom_purchase_import_wizard/models/purchase_order_import.py:0
#, python-format
msgid "Error: More than one shipping method found."
msgstr ""
@@ -211,6 +212,7 @@ msgstr ""
#. module: custom_purchase_import_wizard
#: code:addons/custom_purchase_import_wizard/models/purchase_order_import.py:0
+#: code:addons/custom_purchase_import_wizard/models/purchase_order_import.py:0
#, python-format
msgid "Error: No shipping method found."
msgstr ""
@@ -355,7 +357,8 @@ msgstr ""
#. module: custom_purchase_import_wizard
#: model:ir.actions.act_window,name:custom_purchase_import_wizard.purchase_order_import_action
-#: model:ir.ui.menu,name:custom_purchase_import_wizard.purchase_order_import_menu
+#: model:ir.ui.menu,name:custom_purchase_import_wizard.purchase_order_import_menu_config
+#: model:ir.ui.menu,name:custom_purchase_import_wizard.purchase_order_import_menu_purchase
msgid "Import Purchase Orders"
msgstr ""
@@ -451,11 +454,6 @@ msgstr ""
msgid "Next Activity Type"
msgstr ""
-#. module: custom_purchase_import_wizard
-#: model:ir.model.fields.selection,name:custom_purchase_import_wizard.selection__purchase_order_import_line__action__nothing
-msgid "Nothing"
-msgstr ""
-
#. module: custom_purchase_import_wizard
#: model:ir.model.fields,field_description:custom_purchase_import_wizard.field_purchase_order_import__message_needaction_counter
msgid "Number of Actions"
@@ -577,6 +575,11 @@ msgstr ""
msgid "Shipping Method"
msgstr ""
+#. module: custom_purchase_import_wizard
+#: model:ir.model.fields,field_description:custom_purchase_import_wizard.field_purchase_order_import__split_size
+msgid "Split Size"
+msgstr ""
+
#. module: custom_purchase_import_wizard
#: model:ir.model.fields,field_description:custom_purchase_import_wizard.field_purchase_order_import__state
#: model:ir.model.fields,field_description:custom_purchase_import_wizard.field_purchase_order_import_line__state
diff --git a/custom_purchase_import_wizard/i18n/es.po b/custom_purchase_import_wizard/i18n/es.po
index 8e0ebc1452..6fc97fa87f 100644
--- a/custom_purchase_import_wizard/i18n/es.po
+++ b/custom_purchase_import_wizard/i18n/es.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-28 09:36+0000\n"
-"PO-Revision-Date: 2023-08-28 09:36+0000\n"
+"POT-Creation-Date: 2024-10-22 06:21+0000\n"
+"PO-Revision-Date: 2024-10-22 06:21+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -180,6 +180,7 @@ msgstr ""
#. module: custom_purchase_import_wizard
#: code:addons/custom_purchase_import_wizard/models/purchase_order_import.py:0
+#: code:addons/custom_purchase_import_wizard/models/purchase_order_import.py:0
#, python-format
msgid "Error: More than one shipping method found."
msgstr "Error: Más de un método de envío encontrado."
@@ -203,7 +204,7 @@ msgstr "Error: Se ha encontrado más de un almacén con nombre {}."
#: code:addons/custom_purchase_import_wizard/models/purchase_order_import.py:0
#, python-format
msgid "Error: No picking type found."
-msgstr "Error: No se ha encontrado ningún tipo de operación."
+msgstr "Error: Tipo de operación no encontrado."
#. module: custom_purchase_import_wizard
#: code:addons/custom_purchase_import_wizard/models/purchase_order_import.py:0
@@ -214,6 +215,7 @@ msgstr "Error: Producto no encontrado."
#. module: custom_purchase_import_wizard
#: code:addons/custom_purchase_import_wizard/models/purchase_order_import.py:0
+#: code:addons/custom_purchase_import_wizard/models/purchase_order_import.py:0
#, python-format
msgid "Error: No shipping method found."
msgstr "Error: Método de envío no encontrado."
@@ -359,7 +361,8 @@ msgstr "Importar líneas de pedido de compra"
#. module: custom_purchase_import_wizard
#: model:ir.actions.act_window,name:custom_purchase_import_wizard.purchase_order_import_action
-#: model:ir.ui.menu,name:custom_purchase_import_wizard.purchase_order_import_menu
+#: model:ir.ui.menu,name:custom_purchase_import_wizard.purchase_order_import_menu_config
+#: model:ir.ui.menu,name:custom_purchase_import_wizard.purchase_order_import_menu_purchase
msgid "Import Purchase Orders"
msgstr "Importar pedidos de compra"
@@ -455,11 +458,6 @@ msgstr "Resumen de la siguiente actividad"
msgid "Next Activity Type"
msgstr "Resumen de la siguiente actividad"
-#. module: custom_purchase_import_wizard
-#: model:ir.model.fields.selection,name:custom_purchase_import_wizard.selection__purchase_order_import_line__action__nothing
-msgid "Nothing"
-msgstr "Nada"
-
#. module: custom_purchase_import_wizard
#: model:ir.model.fields,field_description:custom_purchase_import_wizard.field_purchase_order_import__message_needaction_counter
msgid "Number of Actions"
@@ -581,6 +579,11 @@ msgstr "Coste de envío"
msgid "Shipping Method"
msgstr "Método de envío"
+#. module: custom_purchase_import_wizard
+#: model:ir.model.fields,field_description:custom_purchase_import_wizard.field_purchase_order_import__split_size
+msgid "Split Size"
+msgstr ""
+
#. module: custom_purchase_import_wizard
#: model:ir.model.fields,field_description:custom_purchase_import_wizard.field_purchase_order_import__state
#: model:ir.model.fields,field_description:custom_purchase_import_wizard.field_purchase_order_import_line__state
diff --git a/custom_purchase_import_wizard/views/purchase_order_import_line_views.xml b/custom_purchase_import_wizard/views/purchase_order_import_line_views.xml
index c28e24a64e..ef2f3ede1d 100644
--- a/custom_purchase_import_wizard/views/purchase_order_import_line_views.xml
+++ b/custom_purchase_import_wizard/views/purchase_order_import_line_views.xml
@@ -154,12 +154,12 @@
diff --git a/custom_purchase_import_wizard/views/purchase_order_import_views.xml b/custom_purchase_import_wizard/views/purchase_order_import_views.xml
index d9949133a5..ab77b8ce42 100644
--- a/custom_purchase_import_wizard/views/purchase_order_import_views.xml
+++ b/custom_purchase_import_wizard/views/purchase_order_import_views.xml
@@ -173,14 +173,14 @@
|