diff options
| author | Mqdd <ahmadmiqdad27@gmail.com> | 2026-01-19 22:25:00 +0700 |
|---|---|---|
| committer | Mqdd <ahmadmiqdad27@gmail.com> | 2026-01-19 22:25:00 +0700 |
| commit | bbffc7f7092ad28994d511b3b7022e55b07ec2a8 (patch) | |
| tree | 03c2056d042e94878302fc971ee1119c048982d0 | |
| parent | b40989dc9dc36056f4e416aa5d2e040be595fd61 (diff) | |
<MIqdad> revisi date
| -rw-r--r-- | indoteknik_custom/models/gudang_service.py | 55 | ||||
| -rw-r--r-- | indoteknik_custom/views/gudang_service.xml | 31 |
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"> |
