summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fixco_custom/models/reordering_rule.py2
-rw-r--r--fixco_custom/models/upload_payments.py106
2 files changed, 64 insertions, 44 deletions
diff --git a/fixco_custom/models/reordering_rule.py b/fixco_custom/models/reordering_rule.py
index 7f945b6..9f37da6 100644
--- a/fixco_custom/models/reordering_rule.py
+++ b/fixco_custom/models/reordering_rule.py
@@ -121,6 +121,8 @@ class ReorderingRule(models.Model):
+ vmsbm.incoming_qty - vmsbm.outgoing_qty
) > vmsbm.buffer_stock
THEN 'READY STOCK'
+
+ ELSE 'READY STOCK'
END AS stock_status
FROM view_buffer_stock_below_min vmsbm
diff --git a/fixco_custom/models/upload_payments.py b/fixco_custom/models/upload_payments.py
index 7761ce6..f66a2ab 100644
--- a/fixco_custom/models/upload_payments.py
+++ b/fixco_custom/models/upload_payments.py
@@ -15,6 +15,7 @@ class UploadPayments(models.Model):
user_id = fields.Many2one('res.users', string='Created By', copy=False, default=lambda self: self.env.user.id)
excel_file = fields.Binary('Excel File', attachment=True)
filename = fields.Char('File Name')
+ state = fields.Selection([('draft', 'Draft'), ('running', 'Running'), ('done', 'Done')], default='draft')
@api.model
def create(self, vals):
@@ -65,50 +66,41 @@ class UploadPayments(models.Model):
}
def action_create_payments(self):
- """Membuat payment untuk semua lines yang belum memiliki payment"""
- self.ensure_one()
- created_payments = []
-
- for line in self.payments_lines.filtered(lambda l: not l.payment_id):
- invoice = self.env['account.move'].search([
- ('invoice_marketplace', '=', line.no_invoice),
- ('state', '=', 'posted'),
- ('payment_state', '!=', 'paid'),
- ])
-
- for move in invoice:
- move._register_payment_automatically(line.date_invoice)
+ self.state = 'running'
def queue_job(self, limit=100):
- self.date_upload = fields.Datetime.now()
+ payments = self.env['upload.payments'].search([ ('state', '=', 'running') ], limit=1, orderby='id asc')
+
+ for payment in payments:
+ payment.date_upload = fields.Datetime.now()
- lines = self.payments_lines.filtered(
- lambda l: not l.payment_id and not l.is_queued
- )[:limit]
+ lines = payment.payments_lines.filtered(
+ lambda l: not l.payment_id and not l.is_queued
+ )[:limit]
- existing_jobs = self.env['queue.job'].search([
- ('model_name', '=', 'upload.payments.line'),
- ('method_name', '=', 'action_create_payments'),
- ('res_id', 'in', lines.ids),
- ('state', '!=', 'error'),
- ])
+ existing_jobs = self.env['queue.job'].search([
+ ('model_name', '=', 'upload.payments.line'),
+ ('method_name', '=', 'action_create_payments'),
+ ('res_id', 'in', lines.ids),
+ ('state', '!=', 'error'),
+ ])
- existing_res_ids = set(existing_jobs.mapped('res_id'))
+ existing_res_ids = set(existing_jobs.mapped('res_id'))
- for line in lines:
- if line.id in existing_res_ids:
- continue
+ for line in lines:
+ if line.id in existing_res_ids:
+ continue
- self.env['queue.job'].create({
- 'name': f'Upload Payments {line.no_bu}',
- 'model_name': 'upload.payments.line',
- 'method_name': 'action_create_payments',
- 'res_id': line.id,
- })
-
- line.is_queued = True
- self.env.cr.commit()
+ self.env['queue.job'].create({
+ 'name': f'Upload Payments {line.no_bu}',
+ 'model_name': 'upload.payments.line',
+ 'method_name': 'action_create_payments',
+ 'res_id': line.id,
+ })
+
+ line.is_queued = True
+ self.env.cr.commit()
class UploadPaymentsLine(models.Model):
@@ -126,11 +118,37 @@ class UploadPaymentsLine(models.Model):
def action_create_payments(self):
self.ensure_one()
- invoice = self.env['account.move'].search([
- ('invoice_marketplace', '=', self.no_invoice),
- ('state', '=', 'posted'),
- ('payment_state', '!=', 'paid'),
- ])
-
- for move in invoice:
- move._register_payment_automatically(self.date_invoice) \ No newline at end of file
+ try:
+ invoice = self.env['account.move'].search([
+ ('invoice_marketplace', '=', self.no_invoice),
+ ('state', '=', 'posted'),
+ ('payment_state', '!=', 'paid'),
+ ], limit=1)
+
+ if not invoice:
+ raise ValidationError('Invoice tidak ditemukan / sudah lunas')
+
+ payment = invoice._register_payment_automatically(self.date_invoice)
+
+ self.payment_id = payment.id
+ self.message_error = 'DONE'
+
+ except Exception as e:
+ self.message_error = str(e)
+
+ finally:
+ self._check_parent_done()
+
+ def _check_parent_done(self):
+ upload = self.upload_payments_id
+ if not upload:
+ return
+
+ unfinished = upload.payments_lines.filtered(
+ lambda l: not l.payment_id and not l.message_error
+ )
+
+ if not unfinished:
+ upload.state = 'done'
+
+