summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-10-06 11:02:40 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-10-06 11:02:40 +0700
commit4603578f08af74760c323aac624ea2ae95252d4b (patch)
tree4f92a6bf33967d8af8bba3ef56de0938b667d1f0
parent63bb46e84f44bdcb286bbca544f65b03a7d98636 (diff)
<Miqdad> cr approval BU/IU
-rw-r--r--indoteknik_custom/models/stock_picking.py57
1 files changed, 48 insertions, 9 deletions
diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py
index 43e45c09..8408cdc4 100644
--- a/indoteknik_custom/models/stock_picking.py
+++ b/indoteknik_custom/models/stock_picking.py
@@ -176,6 +176,28 @@ class StockPicking(models.Model):
linked_manual_bu_out = fields.Many2one('stock.picking', string='BU Out', copy=False)
area_name = fields.Char(string="Area", compute="_compute_area_name")
+ is_bu_iu = fields.Boolean('Is BU/IU', compute='_compute_is_bu_iu', default=False, copy=False, readonl=True)
+
+ @api.depends('name')
+ def _compute_is_bu_iu(self):
+ for record in self:
+ if 'BU/IU' in record.name:
+ record.is_bu_iu = True
+ else:
+ record.is_bu_iu = False
+
+ def action_bu_iu_to_pengajuan2(self):
+ for rec in self:
+ if not rec.is_bu_iu or not rec.is_internal_use:
+ raise UserError(_("Tombol ini hanya untuk dokumen BU/IU - Internal Use."))
+ if rec.approval_status == False:
+ raise UserError("Harus Ask Approval terlebih dahulu")
+ if rec.approval_status in ['pengajuan1'] and self.env.user.is_accounting:
+ rec.approval_status = 'pengajuan2'
+ # raise UserError(_("Hanya bisa dijalankan saat status di 'pengajuan1'."))
+ rec.message_post(body=_("Status naik ke Approval Logistik oleh %s") % self.env.user.display_name)
+
+ return True
# def _get_biteship_api_key(self):
# # return self.env['ir.config_parameter'].sudo().get_param('biteship.api_key_test')
@@ -343,6 +365,7 @@ class StockPicking(models.Model):
except ValueError:
return False
+
def action_get_kgx_pod(self, shipment=False):
self.ensure_one()
@@ -1063,8 +1086,7 @@ class StockPicking(models.Model):
self.sale_id.date_doc_kirim = self.date_doc_kirim
def action_assign(self):
- if self.env.context.get('default_picking_type_id') and (
- 'BU/INPUT' not in self.name or 'BU/PUT' not in self.name):
+ if self.env.context.get('default_picking_type_id') and ('BU/INPUT' not in self.name or 'BU/PUT' not in self.name):
pickings_to_assign = self.filtered(
lambda p: not (p.sale_id and p.sale_id.hold_outgoing)
)
@@ -1080,10 +1102,18 @@ class StockPicking(models.Model):
return res
+
def ask_approval(self):
- if self.env.user.is_accounting:
+ # if self.env.user.is_accounting:
+ # if self.env.user.is_accounting and self.location_id.id == 57 or self.location_id == 57 and self.approval_status in ['pengajuan1', ''] and 'BU/IU' in self.name and self.approval_status == 'pengajuan1':
+ # raise UserError("Bisa langsung set ke approval logistik")
+ if self.env.user.is_accounting and self.approval_status == "pengajuan2" and 'BU/IU' in self.name:
+ raise UserError("Tidak perlu ask approval sudah approval logistik")
+ if self.env.user.is_logistic_approver and self.location_id.id == 57 or self.location_id== 57 and self.approval_status == 'pengajuan2' and 'BU/IU' in self.name:
raise UserError("Bisa langsung Validate")
+
+
# for calendar distribute only
# if self.is_internal_use:
# stock_move_lines = self.env['stock.move.line'].search([
@@ -1106,6 +1136,7 @@ class StockPicking(models.Model):
raise UserError("Qty tidak boleh 0")
pick.approval_status = 'pengajuan1'
+
def ask_receipt_approval(self):
if self.env.user.is_logistic_approver:
raise UserError('Bisa langsung validate tanpa Ask Receipt')
@@ -1307,7 +1338,10 @@ class StockPicking(models.Model):
if self.picking_type_id.code == 'incoming' and self.group_id.id == False and self.is_internal_use == False:
raise UserError(_('Tidak bisa Validate jika tidak dari Document SO / PO'))
- if self.is_internal_use and not self.env.user.is_accounting:
+ if self.is_internal_use and not self.env.user.is_logistic_approver and self.location_id.id == 57 and self.approval_status == 'pengajuan2':
+ raise UserError("Harus di Approve oleh Logistik")
+
+ if self.is_internal_use and not self.env.user.is_accounting and self.approval_status == 'pengajuan1' and self.location_id.id == 57:
raise UserError("Harus di Approve oleh Accounting")
if self.picking_type_id.id == 28 and not self.env.user.is_logistic_approver:
@@ -1316,8 +1350,10 @@ class StockPicking(models.Model):
if self.location_dest_id.id == 47 and not self.env.user.is_purchasing_manager:
raise UserError("Transfer ke gudang selisih harus di approve Rafly Hanggara")
- if self.is_internal_use:
+ if self.is_internal_use and self.approval_status == 'pengajuan2':
self.approval_status = 'approved'
+ elif self.is_internal_use and self.approval_status in ['pengajuan1', '', False]:
+ raise UserError("Tidak Bisa Validate, set approval status ke approval logistik terlebih dahhulu")
elif self.picking_type_id.code == 'incoming':
self.approval_receipt_status = 'approved'
@@ -1333,6 +1369,7 @@ class StockPicking(models.Model):
current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
self.date_reserved = current_time
+
# Validate Qty Demand Can't higher than Qty Product
if self.location_dest_id.id == 58 and 'BU/INPUT/' in self.name:
for move in self.move_ids_without_package:
@@ -1359,8 +1396,8 @@ class StockPicking(models.Model):
if picking.name and 'BD/' in picking.name and picking.purchase_id:
stock_journal = self.env['account.move'].search([
('ref', 'ilike', picking.name + '%'),
- ('journal_id', '=', 3) # Stock Journal ID
- ], limit=1)
+ ('journal_id', '=', 3) # Stock Journal ID
+ ], limit = 1)
if stock_journal:
stock_journal.write({
'purchase_order_id': picking.purchase_id.id
@@ -1733,8 +1770,7 @@ class StockPicking(models.Model):
'name': move_line.product_id.name,
'code': move_line.product_id.default_code,
'qty': move_line.qty_done,
- 'image': self.env['ir.attachment'].api_image('product.template', 'image_128',
- move_line.product_id.product_tmpl_id.id),
+ 'image': self.env['ir.attachment'].api_image('product.template', 'image_128', move_line.product_id.product_tmpl_id.id),
})
response = {
@@ -2100,6 +2136,7 @@ class CheckProduct(models.Model):
_order = 'picking_id, id'
_inherit = ['barcodes.barcode_events_mixin']
+
picking_id = fields.Many2one(
'stock.picking',
string='Picking Reference',
@@ -2552,6 +2589,8 @@ class ScanKoli(models.Model):
out_move.qty_done += qty_to_assign
qty_koli -= qty_to_assign
+
+
def _reset_qty_done_if_no_scan(self, picking_id):
product_bu_pick = self.env['stock.move.line'].search([('picking_id', '=', picking_id)])