summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMqdd <ahmadmiqdad27@gmail.com>2026-01-19 22:25:00 +0700
committerMqdd <ahmadmiqdad27@gmail.com>2026-01-19 22:25:00 +0700
commitbbffc7f7092ad28994d511b3b7022e55b07ec2a8 (patch)
tree03c2056d042e94878302fc971ee1119c048982d0
parentb40989dc9dc36056f4e416aa5d2e040be595fd61 (diff)
<MIqdad> revisi date
-rw-r--r--indoteknik_custom/models/gudang_service.py55
-rw-r--r--indoteknik_custom/views/gudang_service.xml31
2 files changed, 51 insertions, 35 deletions
diff --git a/indoteknik_custom/models/gudang_service.py b/indoteknik_custom/models/gudang_service.py
index 0cdee5af..e401a65c 100644
--- a/indoteknik_custom/models/gudang_service.py
+++ b/indoteknik_custom/models/gudang_service.py
@@ -15,7 +15,18 @@ class GudangService(models.Model):
partner_id = fields.Many2one('res.partner', string='Customer', readonly=True)
origin = fields.Many2one('sale.order', string='Origin SO', required=True)
# picking_id = fields.Many2one('stock.picking', string = 'Picking ID', domain="[('sale_id', '=', origin)]")
- date = fields.Datetime('Date', default=fields.Datetime.now, tracking=True, copy=False)
+ schedule_date = fields.Date(
+ string="Schedule Date",
+ required=True,
+ tracking=True
+ )
+
+ start_date = fields.Datetime(
+ string="Date Processed",
+ copy=False,
+ tracking=True
+ )
+
done_date = fields.Datetime(string='Date Done', copy=False, tracking=True)
gudang_service_lines = fields.One2many('gudang.service.line', 'gudang_service_id', string='Gudang Service Lines')
remaining_date = fields.Char('Remaining Date', compute='_compute_remaining_date')
@@ -67,9 +78,9 @@ class GudangService(models.Model):
'user_id': user.id,
'summary': 'Gudang Service On Progress',
'note': _(
- 'Gudang Service <b>%s</b> masih <b>On Progress</b> sejak %s'
- ) % (rec.name, rec.date),
- 'date_deadline': fields.Date.today(),
+ 'Ada Jadwal Service Barang di Document <b>%s</b> Jadwal Service 📅 <b>%s</b>'
+ ) % (rec.name, rec.schedule_date),
+ # 'date_deadline': fields.Date.today(),
})
# kirim ke private message odoo
@@ -77,7 +88,7 @@ class GudangService(models.Model):
if not channel:
continue
res = self.env['mail.channel'].browse(channel)
- res.with_user(self.env.user.browse(25)).message_post(body=_('Gudang Service <b>%s</b> masih <b>On Progress</b> sejak %s') % (rec.name, rec.date), message_type='comment', subtype_xmlid='mail.mt_comment')
+ res.with_user(self.env.user.browse(25)).message_post(body=_('Ada Jadwal Service Barang di Document <b>%s</b> Jadwal Service 📅 <b>%s</b>') % (rec.name, rec.schedule_date), message_type='comment', subtype_xmlid='mail.mt_comment')
@api.model
def cron_notify_onprogress_gudang_service(self):
@@ -89,30 +100,32 @@ class GudangService(models.Model):
records._send_logistic_notification()
- @api.depends('date', 'state', 'done_date')
+ @api.depends('start_date', 'done_date', 'state')
def _compute_remaining_date(self):
today = fields.Date.today()
+
for rec in self:
- if not rec.date:
- rec.remaining_date = 0
+ if not rec.start_date:
+ rec.remaining_date = "-"
continue
- if rec.state in ['draft', 'cancel']:
- rec.remaining_date = 0
- continue
+ start = rec.start_date.date()
if rec.state == 'done' and rec.done_date:
- days = (rec.done_date.date() - rec.date.date()).days
- rec.remaining_date = "Since %s days" % days
- continue
+ end = rec.done_date.date()
+ else:
+ end = today
+
+ days = (end - start).days
+ rec.remaining_date = _("Since %s days") % days
- rec.remaining_date = (today - rec.date.date()).days
def action_submit(self):
for rec in self:
rec.state = 'onprogress'
- rec.date = fields.Datetime.now()
+ rec.start_date = fields.Datetime.now()
+ # rec.date = fields.Datetime.now()
def action_done(self):
for rec in self:
@@ -146,13 +159,14 @@ class GudangService(models.Model):
raise UserError("You cannot cancel a done record")
if not rec.cancel_reason:
raise UserError("Cancel Reason must be filled")
+ rec.start_date = False
+ rec.done_date = False
rec.state = 'cancel'
@api.model
def create(self, vals):
# Send notification
- self._send_logistic_notification()
if not vals.get('name') or vals['name'] == 'New':
vals['name'] = self.env['ir.sequence'].next_by_code('gudang.service')
@@ -160,7 +174,10 @@ class GudangService(models.Model):
so = self.env['sale.order'].browse(vals['origin'])
vals['partner_id'] = so.partner_id.id
- return super(GudangService, self).create(vals)
+ res = super(GudangService, self).create(vals)
+ # Send notification
+ res._send_logistic_notification()
+ return res
def write(self, vals):
if vals.get('origin'):
@@ -169,8 +186,6 @@ class GudangService(models.Model):
return super(GudangService, self).write(vals)
-
-
@api.onchange('origin')
def _onchange_origin(self):
if not self.origin:
diff --git a/indoteknik_custom/views/gudang_service.xml b/indoteknik_custom/views/gudang_service.xml
index 9818825b..42674585 100644
--- a/indoteknik_custom/views/gudang_service.xml
+++ b/indoteknik_custom/views/gudang_service.xml
@@ -18,7 +18,8 @@
<field name="name"/>
<field name="partner_id"/>
<field name="origin"/>
- <field name="date"/>
+ <field name="schedule_date"/>
+ <field name="start_date" optional="hide"/>
<field name="remaining_date"/>
<field name="state" widget="badge" decoration-danger="state in ('draft')" decoration-warning="state == 'onprogress'"
decoration-success="state == 'done'" decoration-muted="state == 'cancel'" />
@@ -34,7 +35,7 @@
<field name="arch" type="xml">
<form>
<header>
- <button name="action_submit" string="Submit" type="object"
+ <button name="action_submit" string="Proceed" type="object"
class="btn-primary"
attrs="{'invisible': [('state', 'in', ['cancel', 'done', 'onprogress'])]}"/>
<button name="action_done" string="Set Done" type="object"
@@ -43,7 +44,7 @@
<button name="action_cancel" string="Cancel" type="object"
class="btn-secondary"
attrs="{'invisible': [('state', 'in', ['cancel', 'done', 'draft'])]}"/>
- <button name="action_draft" string="Set to Draft" type="object"
+ <button name="action_draft" string="Set to Backlog" type="object"
class="btn-secondary"
attrs="{'invisible': [('state', 'in', ['draft', 'done', 'onprogress'])]}"/>
<field name="state" widget="statusbar" readonly="1"/>
@@ -55,11 +56,11 @@
</h1>
</div>
<group>
- <field name="origin"/>
+ <field name="origin" attrs="{'readonly': [('state', 'not in', ['draft'])]}"/>
<field name="partner_id"/>
- <!-- <field name="picking_id"/> -->
- <field name="date"/>
<field name="remaining_date"/>
+ <field name="schedule_date" attrs="{'readonly': [('state', 'not in', ['draft'])]}"/>
+ <field name="start_date" readonly="1"/>
<field name="done_date" attrs="{'invisible': [('state', 'not in', ['done'])]}"/>
<field name="create_uid"/>
<field name="cancel_reason"
@@ -90,17 +91,17 @@
<field name="type">ir.actions.act_window</field>
<field name="res_model">gudang.service</field>
<field name="view_mode">tree,form</field>
- <field name="context">{'group_by': ['state']}</field>
+ <!-- <field name="context">{'group_by': ['state']}</field> -->
</record>
- <!-- Menu -->
- <menuitem
- id="menu_gudang_service"
- name="Monitoring Barang Service"
- parent="indoteknik_custom.menu_monitoring_in_sale"
- sequence="10"
- action="action_gudang_service"
- />
+ <!-- Menu -->
+ <menuitem
+ id="menu_gudang_service"
+ name="Monitoring Barang Service"
+ parent="indoteknik_custom.menu_monitoring_in_sale"
+ sequence="10"
+ action="action_gudang_service"
+ />
</data>
<!-- Cron -->
<record id="ir_cron_gudang_service_logistik_notify" model="ir.cron">