summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/tukar_guling.py
diff options
context:
space:
mode:
Diffstat (limited to 'indoteknik_custom/models/tukar_guling.py')
-rw-r--r--indoteknik_custom/models/tukar_guling.py72
1 files changed, 40 insertions, 32 deletions
diff --git a/indoteknik_custom/models/tukar_guling.py b/indoteknik_custom/models/tukar_guling.py
index 699ee670..d718ba0f 100644
--- a/indoteknik_custom/models/tukar_guling.py
+++ b/indoteknik_custom/models/tukar_guling.py
@@ -27,6 +27,10 @@ class TukarGuling(models.Model):
if_so = fields.Boolean('Is SO', default=True)
if_po = fields.Boolean('Is PO', default=False)
real_shipping_id = fields.Many2one('res.partner', string='Shipping Address')
+ refund_id = fields.Many2one(
+ 'refund.sale.order',
+ string="Refund Ref"
+ )
picking_ids = fields.One2many(
'stock.picking',
'tukar_guling_id',
@@ -92,41 +96,45 @@ class TukarGuling(models.Model):
so = self.env['sale.order'].search([('name', '=', origin_str)], limit=1)
rec.origin_so = so.id if so else False
- @api.depends('origin', 'origin_so', 'partner_id', 'line_ids.product_id')
+ @api.depends('origin', 'origin_so', 'partner_id', 'line_ids.product_id', 'invoice_id', 'operations')
def _compute_is_has_invoice(self):
Move = self.env['account.move']
for rec in self:
- rec.is_has_invoice = False
- rec.invoice_id = [(5, 0, 0)]
-
- product_ids = rec.line_ids.mapped('product_id').ids
- if not product_ids:
- continue
-
- domain = [
- ('move_type', 'in', ['out_invoice', 'in_invoice']),
- ('state', 'not in', ['draft', 'cancel']),
- ('invoice_line_ids.product_id', 'in', product_ids),
- ]
-
- extra = []
- if rec.origin:
- extra.append(('invoice_origin', 'ilike', rec.origin))
- if rec.origin_so:
- extra.append(('invoice_line_ids.sale_line_ids.order_id', '=', rec.origin_so.id))
- if extra:
- domain = domain + ['|'] * (len(extra) - 1) + extra
-
- invoices = Move.search(domain).with_context(active_test=False)
- if invoices:
- rec.invoice_id = [(6, 0, invoices.ids)]
- rec.is_has_invoice = True
+ invoices = rec.invoice_id
+
+ if not invoices:
+ product_ids = rec.line_ids.mapped('product_id').ids
+ if product_ids:
+ domain = [
+ ('move_type', 'in', ['out_invoice', 'out_refund', 'in_invoice']),
+ ('state', 'not in', ['draft', 'cancel']),
+ ('invoice_line_ids.product_id', 'in', product_ids),
+ ]
+
+ # if rec.partner_id:
+ # domain.append(
+ # ('partner_id.commercial_partner_id', '=', rec.partner_id.commercial_partner_id.id)
+ # )
+
+ extra = []
+ if rec.origin:
+ extra.append(('invoice_origin', 'ilike', rec.origin))
+ if rec.origin_so:
+ extra.append(('invoice_line_ids.sale_line_ids.order_id', '=', rec.origin_so.id))
+ if extra:
+ domain += ['|'] * (len(extra) - 1) + extra
+
+ invoices = Move.search(domain).with_context(active_test=False)
+ if invoices:
+ rec.invoice_id = [(6, 0, invoices.ids)]
+
+ rec.is_has_invoice = bool(invoices)
def set_opt(self):
if not self.val_inv_opt and self.is_has_invoice == True:
raise UserError("Kalau sudah ada invoice Return Invoice Option harus diisi!")
for rec in self:
- if rec.val_inv_opt == 'cancel_invoice' and self.is_has_invoice == True:
+ if rec.val_inv_opt == 'cancel_invoice' and self.is_has_invoice == True and rec.invoice_id.state != 'cancel':
raise UserError("Tidak bisa mengubah Return karena sudah ada invoice dan belum di cancel.")
elif rec.val_inv_opt == 'tanpa_cancel' and self.is_has_invoice == True:
continue
@@ -435,9 +443,9 @@ class TukarGuling(models.Model):
# if self.state == 'done':
# raise UserError ("Tidak Boleh delete ketika sudahh done")
for record in self:
- if record.state == 'approved' or record.state == 'done':
+ if record.state in [ 'approved', 'done', 'approval_logistic', 'approval_finance', 'approval_sales']:
raise UserError(
- "Tidak bisa hapus pengajuan jika sudah Approved, set ke draft terlebih dahulu jika ingin menghapus")
+ "Tidak bisa hapus pengajuan jika sudah Proses Approval, set ke draft terlebih dahulu atau cancel jika ingin menghapus")
ongoing_bu = self.picking_ids.filtered(lambda p: p.state != 'approved')
for picking in ongoing_bu:
picking.action_cancel()
@@ -702,7 +710,7 @@ class TukarGuling(models.Model):
### ======== SRT dari BU/OUT =========
srt_return_lines = []
- if mapping_koli:
+ if mapping_koli and record.operations.picking_type_id.id == 29:
for prod in mapping_koli.mapped('product_id'):
qty_total = sum(mk.qty_return for mk in mapping_koli.filtered(lambda m: m.product_id == prod))
move = bu_out.move_lines.filtered(lambda m: m.product_id == prod)
@@ -715,7 +723,7 @@ class TukarGuling(models.Model):
}))
_logger.info(f"📟 SRT line: {prod.display_name} | qty={qty_total}")
- elif not mapping_koli:
+ elif not mapping_koli and record.operations.picking_type_id.id == 29:
for line in record.line_ids:
move = bu_out.move_lines.filtered(lambda m: m.product_id == line.product_id)
if not move:
@@ -1002,4 +1010,4 @@ class TukarGulingMappingKoli(models.Model):
for rec in self:
if rec.tukar_guling_id and rec.tukar_guling_id.state not in ['draft', 'cancel']:
raise UserError("Tidak bisa menghapus Mapping Koli karena status Tukar Guling bukan Draft atau Cancel.")
- return super(TukarGulingMappingKoli, self).unlink()
+ return super(TukarGulingMappingKoli, self).unlink() \ No newline at end of file