Electrical Devices Service

This commit is contained in:
eman 2024-11-16 15:50:08 +02:00
parent 60007c0cfa
commit e3d56cc785
3 changed files with 86 additions and 16 deletions

View File

@ -9,5 +9,12 @@
<field name="state">code</field>
<field name="code">action = records.action_open_exchange_order_wizard()</field>
</record>
<record id="server_action_vendor_bill" model="ir.actions.server">
<field name="name">Create Vendor Bill</field>
<field name="model_id" ref="odex_benefit.model_service_request"/>
<field name="binding_model_id" ref="odex_benefit.model_service_request"/>
<field name="state">code</field>
<field name="code">action = records.create_vendor_bill()</field>
</record>
</data>
</odoo>

View File

@ -68,6 +68,7 @@ class ServiceRequest(models.Model):
added_amount_if_mother_dead = fields.Float(string="Added Amount (If mother dead)",compute="_get_added_amount_if_mother_dead")
attachment_lines = fields.One2many('service.attachments.settings','service_request_id',related='service_cat.attachment_lines',readonly=False)
account_id = fields.Many2one('account.account',string='Expenses Account',related='service_cat.account_id')
device_account_id = fields.Many2one('account.account',string='Expenses Account',related='device_id.account_id')
accountant_id = fields.Many2one('res.users',string='Accountant',related='service_cat.accountant_id',readonly=False)
service_producer_id = fields.Many2one('res.partner',string='Service Producer',related='service_cat.service_producer_id')
is_service_producer = fields.Boolean(string='Is Service Producer?',related='service_cat.is_service_producer')
@ -90,18 +91,22 @@ class ServiceRequest(models.Model):
max_complete_building_house_amount = fields.Float(string='Max Complete Building House Amount',related='service_cat.max_complete_building_house_amount')
#Fields for electrical_devices service
device_id = fields.Many2one('electrical.devices',string='Device',domain="[('min_count_member','<=',benefit_member_count),('max_count_member','>=',benefit_member_count)]")
vendor_bill = fields.Many2one('account.move')
requested_quantity = fields.Integer(string='Requested Quantity')
exception_or_steal = fields.Boolean(string='Exception Or Steal?')
state = fields.Selection([
('draft', 'Draft'),
('researcher', 'Researcher'),
('send_request', 'Send Request'),
('first_approve', 'Request First Approve'),
('second_approve', 'Request Second Approve'),
('accounting_approve', 'Accounting Approve'),
('refused', 'Refused'),
], string='state', default="draft", tracking=True)
state = fields.Selection( selection = [
('draft', 'Draft'),
('researcher', 'Researcher'),
('send_request', 'Send Request'),
('first_approve', 'Request First Approve'),
('second_approve', 'Request Second Approve'),
('accounting_approve', 'Accounting Approve'),
('send_request_to_supplier', 'Send Request To Supplier'),
('family_received_device', 'Family Received Device'),
('refused', 'Refused')
], string='state',default='draft', tracking=True)
state_a = fields.Selection(related='state', tracking=False)
state_b = fields.Selection(related='state', tracking=False)
# @api.model
# def search(self, args, offset=0, limit=None, order=None, count=False):
@ -297,6 +302,14 @@ class ServiceRequest(models.Model):
for rec in self:
rec.state = 'accounting_approve'
def action_send_request_to_supplier(self):
for rec in self:
rec.state = 'send_request_to_supplier'
def action_family_received_device(self):
for rec in self:
rec.state = 'family_received_device'
def action_accounting_first_refuse(self):
for rec in self:
rec.state = 'draft'
@ -440,12 +453,12 @@ class ServiceRequest(models.Model):
raise UserError(
_("You Cannot request this service twice in seven years"))
@api.onchange('requested_quantity','service_type')
@api.onchange('requested_quantity','benefit_type')
def onchange_requested_quantity(self):
res = {}
for rec in self:
if rec.requested_quantity > rec.device_id.allowed_quantity:
self.service_type = False
self.benefit_type = False
res['warning'] = {'title': _('ValidationError'),
'message': _("You cannot request more than %s") % rec.device_id.allowed_quantity}
return res
@ -523,4 +536,31 @@ class ServiceRequest(models.Model):
'view_mode': 'form',
'target': 'new',
'context': {'default_service_ids': ids}
}
}
def create_vendor_bill(self):
ids = []
line_ids = []
for rec in self:
ids.append(rec.id)
service_requests = self.env['service.request'].browse(ids)
service_producer_id = self.env['service.request'].search([('id','=',ids[0])],limit=1)
if any(request.state not in 'family_received_device' for request in service_requests):
raise UserError(_("All selected requests should be in Family Received Device state"))
if any(request.vendor_bill for request in service_requests):
raise UserError(_("All selected requests should be not has Vendor Bill"))
for request in service_requests:
invoice_line = (0, 0, {
'name': f'{request.family_id.name}/{request.device_id.device_name}/{request.description}/{request.name}',
'account_id': request.device_account_id.id,
'analytic_account_id': request.branch_custom_id.branch.analytic_account_id.id,
'quantity' : request.device_id.allowed_quantity,
'price_unit' : request.requested_service_amount,
})
line_ids.append(invoice_line)
vendor_bill = self.env['account.move'].create({
'move_type':'in_invoice',
'partner_id':service_producer_id.service_producer_id.id,
# 'accountant_id': self.accountant_id.id,
'invoice_line_ids': line_ids,
})
self.vendor_bill = vendor_bill

View File

@ -27,11 +27,20 @@
string="Accounting First Refuse" class="oe_highlight"
confirm="Are you sure you want to first refuse ?"
states="second_approve" groups="odex_benefit.group_benefit_accounting_accept"/>
<button name="action_send_request_to_supplier" type="object"
string="Send Request To Supplier" class="oe_highlight"
confirm="Are you sure you want to send request to supplier ?"
groups="odex_benefit.group_benefit_accounting_accept" attrs="{'invisible': ['|',('service_type','!=','electrical_devices'),('state_b','!=','accounting_approve')]}" />
<button name="action_family_received_device" type="object"
string="Family Received Device" class="oe_highlight"
groups="odex_benefit.group_benefit_accounting_accept" attrs="{'invisible': ['|',('service_type','!=','electrical_devices'),('state_b','!=','send_request_to_supplier')]}" />
<button name="action_refuse" type="object"
string="Refuse" class="oe_highlight"
confirm="Are you sure you want to refuse request ?"
states="first_approve,second_approve,draft,send_request,accounting_approve"/>
<field name="state" widget="statusbar"/>
<field name="state" widget="statusbar" invisible="1"/>
<field name="state_a" widget="statusbar" statusbar_visible="draft,researcher,send_request,first_approve,second_approve,accounting_approve,refused" attrs="{'invisible': [('service_type','=','electrical_devices')]}"/>
<field name="state_b" widget="statusbar" statusbar_visible="draft,researcher,send_request,first_approve,second_approve,accounting_approve,send_request_to_supplier,family_received_device,refused" attrs="{'invisible': [('service_type','!=','electrical_devices')]}" groups="odex_benefit.group_benefit_accounting_accept"/>
</header>
<sheet>
<field name="is_payment_order_done" invisible="1"/>
@ -51,9 +60,11 @@
<field name="benefit_member_count" force_save="1"/>
<field name="branch_custom_id" force_save="1"/>
<field name="member_id" attrs="{'invisible':[('benefit_type','!=','member')],'readonly':[('state','not in',['draft','researcher','send_request'])],'required':[('benefit_type','=','member')]}"/>
<field name="account_id"/>
<field name="account_id" attrs="{'invisible':[('service_type','=','electrical_devices')]}"/>
<field name="device_account_id" attrs="{'invisible':[('service_type','!=','electrical_devices')]}"/>
<field name="accountant_id" attrs="{'invisible':[('state','in',['draft','researcher','send_request','first_approve','second_approve'])]}"/>
<field name="payment_order_id" readonly="1" groups="odex_benefit.group_benefit_accounting_accept"/>
<field name="payment_order_id" readonly="1" groups="odex_benefit.group_benefit_accounting_accept" attrs="{'invisible':[('service_type','=','electrical_devices')]}"/>
<field name="vendor_bill" readonly="1" attrs="{'invisible':[('service_type','!=','electrical_devices')]}"/>
<field name="is_service_producer" invisible="1"/>
<field name="service_producer_id" attrs="{'invisible':[('is_service_producer','=',False)],'readonly':[('state','not in',['draft','researcher','send_request'])]}"/>
</group>
@ -242,6 +253,18 @@
<separator/>
<filter string="Need Payment Order" name="payment_order_done" domain="[('payment_order_id', '=', False),('state','=','accounting_approve')]"/>
<separator/>
<separator/>
<filter string="Need Vendor Bill" name="need_vendor_bill" domain="[('vendor_bill', '=', False),('state','=','family_received_device')]"/>
<separator/>
<separator/>
<filter string="Vendor Bill Done" name="need_vendor_bill" domain="[('vendor_bill', '!=', False),('state','=','family_received_device')]"/>
<separator/>
<separator/>
<filter string="Send Request To Supplier" name="send_request_to_supplier" domain="[('state','=','send_request_to_supplier')]"/>
<separator/>
<separator/>
<filter string="Family Received Device" name="family_received_device" domain="[('state','=','family_received_device')]"/>
<separator/>
<searchpanel>
<field name="service_cat" string="Categories" enable_counters="1" />
</searchpanel>