summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/sale_order.py
diff options
context:
space:
mode:
Diffstat (limited to 'indoteknik_custom/models/sale_order.py')
-rwxr-xr-xindoteknik_custom/models/sale_order.py98
1 files changed, 79 insertions, 19 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index a5e2f7c4..2ed4046f 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -397,8 +397,52 @@ class SaleOrder(models.Model):
string="Partner Locked CBD",
compute="_compute_partner_is_cbd_locked"
)
+ internal_notes_contact = fields.Text(related='partner_id.comment', string="Internal Notes", readonly=True, help="Internal Notes dari contact utama customer.")
+ is_so_fiktif = fields.Boolean('SO Fiktif?', tracking=3)
+ team_id = fields.Many2one(tracking=True)
+
+
+
+ def action_set_shipping_id(self):
+ for rec in self:
+ bu_pick = self.env['stock.picking'].search([
+ ('state', 'not in', ['cancel']),
+ ('picking_type_id', '=', 30),
+ ('sale_id', '=', rec.id),
+ ('linked_manual_bu_out', '=', False)
+ ])
+ # bu_out = bu_pick_has_out.mapped('linked_manual_bu_out')
+ bu_out = self.env['stock.picking'].search([
+ ('sale_id', '=', rec.id),
+ ('picking_type_id', '=', 29),
+ ('state', 'not in', ['cancel', 'done'])
+ ])
+ bu_pick_has_out = self.env['stock.picking'].search([
+ ('state', 'not in', ['cancel']),
+ ('picking_type_id', '=', 30),
+ ('sale_id', '=', rec.id),
+ ('linked_manual_bu_out.id', '=', bu_out.id),
+ ('linked_manual_bu_out.state', 'not in', ['done', 'cancel'])
+ ])
+ for pick in bu_pick_has_out:
+ linked_out = pick.linked_manual_bu_out
+ if pick.real_shipping_id != rec.real_shipping_id or linked_out.partner_id != rec.partner_shipping_id:
+ pick.real_shipping_id = rec.real_shipping_id
+ pick.partner_id = rec.partner_shipping_id
+ linked_out.partner_id = rec.partner_shipping_id
+ linked_out.real_shipping_id = rec.real_shipping_id
+ _logger.info('Updated bu_pick [%s] and bu_out [%s]', pick.name, linked_out.name)
+
+ for pick in bu_pick:
+ if pick.real_shipping_id != rec.real_shipping_id:
+ pick.real_shipping_id = rec.real_shipping_id
+ pick.partner_id = rec.partner_shipping_id
+ bu_out.partner_id = rec.partner_shipping_id
+ bu_out.real_shipping_id = rec.real_shipping_id
+ _logger.info('Updated bu_pick [%s] without bu_out', pick.name)
def action_open_partial_delivery_wizard(self):
+ # raise UserError("Fitur ini sedang dalam pengembangan")
self.ensure_one()
pickings = self.picking_ids.filtered(lambda p: p.state not in ['done', 'cancel'] and p.name and 'BU/PICK/' in p.name)
return {
@@ -421,7 +465,7 @@ class SaleOrder(models.Model):
order.partner_is_cbd_locked = order.partner_id.is_cbd_locked
- @api.constrains('payment_term_id', 'partner_id', 'state')
+ @api.constrains('payment_term_id', 'partner_id')
def _check_cbd_lock_sale_order(self):
cbd_term = self.env['account.payment.term'].browse(26)
for rec in self:
@@ -1984,10 +2028,10 @@ class SaleOrder(models.Model):
# raise UserError('Kelurahan Real Delivery Address harus diisi')
def generate_payment_link_midtrans_sales_order(self):
- midtrans_url = 'https://app.sandbox.midtrans.com/snap/v1/transactions' # dev - sandbox
- midtrans_auth = 'Basic U0ItTWlkLXNlcnZlci1uLVY3ZDJjMlpCMFNWRUQyOU95Q1dWWXA6' # dev - sandbox
- # midtrans_url = 'https://app.midtrans.com/snap/v1/transactions' # production
- # midtrans_auth = 'Basic TWlkLXNlcnZlci1SbGMxZ2gzWGpSVW5scl9JblZzTV9OTnU6' # production
+ # midtrans_url = 'https://app.sandbox.midtrans.com/snap/v1/transactions' # dev - sandbox
+ # midtrans_auth = 'Basic U0ItTWlkLXNlcnZlci1uLVY3ZDJjMlpCMFNWRUQyOU95Q1dWWXA6' # dev - sandbox
+ midtrans_url = 'https://app.midtrans.com/snap/v1/transactions' # production
+ midtrans_auth = 'Basic TWlkLXNlcnZlci1SbGMxZ2gzWGpSVW5scl9JblZzTV9OTnU6' # production
so_number = self.name
so_number = so_number.replace('/', '-')
@@ -2000,8 +2044,8 @@ class SaleOrder(models.Model):
}
# ==== ENV ====
- check_url = f'https://api.sandbox.midtrans.com/v2/{so_number}/status' # dev - sandbox
- # check_url = f'https://api.midtrans.com/v2/{so_number}/status' # production
+ # check_url = f'https://api.sandbox.midtrans.com/v2/{so_number}/status' # dev - sandbox
+ check_url = f'https://api.midtrans.com/v2/{so_number}/status' # production
# =============================================
check_response = requests.get(check_url, headers=headers)
@@ -2276,7 +2320,7 @@ class SaleOrder(models.Model):
raise UserError("Terdapat DUPLIKASI data pada Product {}".format(line.product_id.display_name))
def sale_order_approve(self):
- # self.check_duplicate_product()
+ self.check_duplicate_product()
self.check_product_bom()
self.check_credit_limit()
self.check_limit_so_to_invoice()
@@ -2340,27 +2384,38 @@ class SaleOrder(models.Model):
# return self._create_notification_action('Notification',
# 'Terdapat invoice yang telah melewati batas waktu, mohon perbarui pada dokumen Due Extension')
- if not order.with_context(ask_approval=True)._is_request_to_own_team_leader():
- return self._create_notification_action(
- 'Peringatan',
- 'Hanya bisa konfirmasi SO tim Anda.'
- )
if order._requires_approval_margin_leader():
order.approval_status = 'pengajuan2'
+ order.message_post(body="Mengajukan approval ke Pimpinan")
return self._create_approval_notification('Pimpinan')
elif order._requires_approval_margin_manager():
self.check_product_bom()
self.check_credit_limit()
self.check_limit_so_to_invoice()
order.approval_status = 'pengajuan1'
+ order.message_post(body="Mengajukan approval ke Sales Manager")
return self._create_approval_notification('Sales Manager')
elif order._requires_approval_team_sales():
self.check_product_bom()
self.check_credit_limit()
self.check_limit_so_to_invoice()
order.approval_status = 'pengajuan1'
+ order.message_post(body="Mengajukan approval ke Team Sales")
return self._create_approval_notification('Team Sales')
+
+ if not order.with_context(ask_approval=True)._is_request_to_own_team_leader():
+ return self._create_notification_action(
+ 'Peringatan',
+ 'Hanya bisa konfirmasi SO tim Anda.'
+ )
+ user = self.env.user
+ is_sales_admin = user.id in (3401, 20, 3988, 17340)
+ if is_sales_admin:
+ order.approval_status = 'pengajuan1'
+ order.message_post(body="Mengajukan approval ke Sales")
+ return self._create_approval_notification('Sales')
+
raise UserError("Bisa langsung Confirm")
def send_notif_to_salesperson(self, cancel=False):
@@ -2546,7 +2601,7 @@ class SaleOrder(models.Model):
for order in self:
order._validate_delivery_amt()
order._validate_uniform_taxes()
- # order.check_duplicate_product()
+ order.check_duplicate_product()
order.check_product_bom()
order.check_credit_limit()
order.check_limit_so_to_invoice()
@@ -2595,6 +2650,7 @@ class SaleOrder(models.Model):
return self._create_approval_notification('Sales Manager')
elif order._requires_approval_team_sales():
order.approval_status = 'pengajuan1'
+ order.message_post(body="Mengajukan approval ke Team Sales")
return self._create_approval_notification('Team Sales')
order.approval_status = 'approved'
@@ -2701,6 +2757,7 @@ class SaleOrder(models.Model):
def _requires_approval_team_sales(self):
return (
18 <= self.total_percent_margin <= 24
+ # self.total_percent_margin >= 18
and self.env.user.id not in [11, 9, 375] # Eko, Ade, Putra
and not self.env.user.is_sales_manager
and not self.env.user.is_leader
@@ -2714,12 +2771,12 @@ class SaleOrder(models.Model):
if user.is_leader or user.is_sales_manager:
return True
- if user.id in (3401, 20, 3988, 17340): # admin (fida, nabila, ninda)
+ if self.env.context.get("ask_approval") and user.id in (3401, 20, 3988, 17340):
return True
-
- if self.env.context.get("ask_approval") and user.id in (3401, 20, 3988):
- return True
-
+
+ if not self.env.context.get("ask_approval") and user.id in (3401, 20, 3988, 17340): # admin (fida, nabila, ninda, feby)
+ raise UserError("Sales Admin tidak bisa confirm SO, silahkan hubungi Salesperson yang bersangkutan.")
+
salesperson_id = self.user_id.id
approver_id = user.id
team_leader_id = self.team_id.user_id.id
@@ -3371,6 +3428,9 @@ class SaleOrder(models.Model):
# if updated_vals:
# line.write(updated_vals)
+
+ if 'real_shipping_id' in vals:
+ self.action_set_shipping_id()
return res
def button_refund(self):