Переглянути джерело

[ADD] boton para cambio de estado

Rodney Enciso Arias 7 роки тому
батько
коміт
2bf612cba4
3 змінених файлів з 166 додано та 10 видалено
  1. 122 0
      model/proyect_car.py
  2. BIN
      model/proyect_car.pyc
  3. 44 10
      views/project.xml

+ 122 - 0
model/proyect_car.py

@@ -44,6 +44,123 @@ class CarCarModify(models.Model):
 class CarWorkshopModify(models.Model):
     _inherit = 'car.workshop'
 
+    invoice_ids = fields.One2many('account.invoice', 'work_invoice_id')
+
+    invoice_count = fields.Integer(
+        string='Facturas',
+        compute='_get_invoice_count',
+    )
+
+    @api.one
+    @api.depends('invoice_ids','state')
+    def _get_invoice_count(self):
+        self.invoice_count = len(self.invoice_ids)
+
+    @api.multi
+    def button_draft(self):
+        if self.invoice_count > 0:
+            raise Warning('Esta tarea tiene una factura asociada')
+        if self.invoice_count == 0:
+            for work in self:
+                work.write({'state': 'waiting'})
+            return True
+
+
+
+    @api.multi
+    def workshop_create_invoices(self):
+
+        self.state = 'workshop_create_invoices'
+        inv_obj = self.env['account.invoice']
+        inv_line_obj = self.env['account.invoice.line']
+        customer = self.partner_id
+        if not customer.name:
+            raise osv.except_osv(_('UserError!'), _('Please select a Customer.'))
+
+        company_id = self.env['res.users'].browse(1).company_id
+        currency_value = company_id.currency_id.id
+        self.ensure_one()
+        ir_values = self.env['ir.values']
+        journal_id = ir_values.get_default('workshop.config.setting', 'invoice_journal_type')
+        if not journal_id:
+            journal_id = 1
+        inv_data = {
+            'name': customer.name,
+            'reference': customer.name,
+            'account_id': customer.property_account_receivable.id,
+            'partner_id': customer.id,
+            'currency_id': currency_value,
+            'journal_id': journal_id,
+            'origin': self.name,
+            'company_id': company_id.id,
+            'work_invoice_id' : self.id,
+        }
+        inv_id = inv_obj.create(inv_data)
+        for records in self.planned_works:
+            if records.planned_work.id:
+                income_account = records.planned_work.property_account_income.id
+            if not income_account:
+                raise osv.except_osv(_('UserError!'), _('There is no income account defined '
+                                                        'for this product: "%s".') % (records.planned_work.name,))
+            inv_line_data = {
+                'name': records.planned_work.name,
+                'account_id': income_account,
+                'price_unit': records.work_cost,
+                'quantity': 1,
+                'product_id': records.planned_work.id,
+                'invoice_id': inv_id.id,
+            }
+            inv_line_obj.create(inv_line_data)
+
+        for records in self.materials_used:
+            if records.material.id:
+                income_account = records.material.property_account_income.id
+            if not income_account:
+                raise osv.except_osv(_('UserError!'), _('There is no income account defined '
+                                                        'for this product: "%s".') % (records.material.name,))
+
+            inv_line_data = {
+                'name': records.material.name,
+                'account_id': records.material.property_account_income.id,
+                'price_unit': records.price,
+                'quantity': records.amount,
+                'product_id': records.material.id,
+                'invoice_id': inv_id.id,
+            }
+            inv_line_obj.create(inv_line_data)
+
+        imd = self.env['ir.model.data']
+        action = imd.xmlid_to_object('account.action_invoice_tree1')
+        list_view_id = imd.xmlid_to_res_id('account.invoice_tree')
+        form_view_id = imd.xmlid_to_res_id('account.invoice_form')
+
+        result = {
+            'name': action.name,
+            'help': action.help,
+            'type': 'ir.actions.act_window',
+            'views': [[list_view_id, 'tree'], [form_view_id, 'form'], [False, 'graph'], [False, 'kanban'],
+                      [False, 'calendar'], [False, 'pivot']],
+            'target': action.target,
+            'context': action.context,
+            'res_model': 'account.invoice',
+        }
+        if len(inv_id) > 1:
+            result['domain'] = "[('id','in',%s)]" % inv_id.ids
+        elif len(inv_id) == 1:
+            result['views'] = [(form_view_id, 'form')]
+            result['res_id'] = inv_id.ids[0]
+        else:
+            result = {'type': 'ir.actions.act_window_close'}
+        invoiced_records = self.env['car.workshop']
+
+        total = 0
+        for rows in invoiced_records:
+            invoiced_date = rows.date
+            invoiced_date = invoiced_date[0:10]
+            if invoiced_date == str(date.today()):
+                total = total + rows.price_subtotal
+        return result
+
     @api.multi
     def unlink(self):
         for task in self:
@@ -52,3 +169,8 @@ class CarWorkshopModify(models.Model):
             if len(task.planned_works)>0:
                 raise Warning(('No puedes borrar una tarea que tiene actividades'))
         return super(CarWorkshopModify, self).unlink()
+
+class AccountInvoiceModify(models.Model):
+    _inherit = 'account.invoice'
+
+    work_invoice_id = fields.Many2one('car.workshop')

BIN
model/proyect_car.pyc


+ 44 - 10
views/project.xml

@@ -37,15 +37,6 @@
             </field>
         </record>
 
-        <!-- <record id="planned_works_form" model="ir.ui.view">
-           <field name="name">planned.works.form</field>
-            <field name="model">planned.work</field>
-            <field name="inherit_id" ref="eiru_base_for_services.planned_work_form_view"/>
-            <field name="arch" type="xml">
-                
-            </field>
-        </record> -->
-
         <record id="view_planned_work_filter" model="ir.ui.view">
             <field name="name">planned.work.filter</field>
             <field name="model">planned.work</field>
@@ -72,11 +63,54 @@
          <record id="planned_works_action" model="ir.actions.act_window">
             <field name="name">Todas las actividades</field>
             <field name="res_model">planned.work</field>
-            <!-- <field name="view_type">form</field> -->
              <field name="view_mode">tree,form</field>
         </record>
 
 
+        <act_window
+            id="action_open_workshop_invoice"
+            name="Facturas"
+            res_model="account.invoice"
+            view_type="form"
+            view_mode="tree,form"
+            domain="[('work_invoice_id', '=', active_id)]"/>
+
+
+        <record id="view_invoice_workshop_form" model="ir.ui.view">
+            <field name="name">car.brand.form</field>
+            <field name="model">car.workshop</field>
+            <field name="inherit_id" ref="eiru_base_for_services.worksheet_form_view"/>
+            <field name="arch" type="xml">
+                <field name="kanban_state" position="after">
+                    <div class="oe_right oe_button_box">
+                        <button
+                            class="oe_inline oe_stat_button"
+                            type="action"
+                            name="%(action_open_workshop_invoice)d"
+                            icon="fa-money">
+                            <field name="invoice_count" string="Facturas" widget="statinfo" />
+                        </button>
+                    </div>    
+                </field> 
+            </field>
+        </record>
+
+         <record id="view_car_workshop_form_draft" model="ir.ui.view">
+            <field name="name">car.workshop.form.draft</field>
+            <field name="model">car.workshop</field>
+            <field name="inherit_id" ref="eiru_base_for_services.worksheet_form_view"/>
+            <field name="arch" type="xml">
+                <field name="stage_id" position="before">
+                    <button name="button_draft"
+                            states="cancel,workshop_create_invoices"
+                            string="Cambiar Estado"
+                            type="object"
+                            groups="base.group_no_one"/>
+                </field>
+            </field>
+        </record>
+
+    
         <menuitem name="Control de Actividades" parent="eiru_base_for_services.main_workshop_menu" id="planned_work_menu" sequence="3"/>
 
         <menuitem action="planned_works_action" id="menu_planned_works_action" parent="planned_work_menu"/>