construction_order_contractor.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. # -*- coding: utf-8 -*-
  2. from openerp import models, fields, tools, api, _
  3. import openerp.addons.decimal_precision as dp
  4. from openerp.exceptions import Warning, except_orm, AccessError
  5. class constructionOrderContractor(models.Model):
  6. _name = 'construction.order.contractor'
  7. name = fields.Char('name')
  8. date = fields.Date()
  9. active = fields.Boolean('Active', default=True)
  10. ref = fields.Char('Ref')
  11. comment = fields.Text('Comment', help='information')
  12. state = fields.Selection([('draft', 'Borrador'),('done', 'Hecho')], default='draft')
  13. ''' Contratista && subcontratista '''
  14. partner_id = fields.Many2one('res.partner', string='contractor', required=True)
  15. ''' ORDER && PRESUPUSETO '''
  16. budget_id = fields.Many2one('construction.order', string='budget', required=True)
  17. order_id = fields.Many2one('construction.order', string='order')
  18. line_ids = fields.One2many('construction.order.contractor.line', 'order_contractor_ids', string='lines')
  19. amount_total = fields.Float('Amount Total', digits_compute=dp.get_precision('Account'), default=0.0)
  20. ''' CREATE '''
  21. @api.model
  22. def create(self, vals):
  23. partner = self.env['res.partner'].browse(vals['partner_id'])
  24. budget = self.env['construction.order'].browse(vals['budget_id'])
  25. name ="Subcontratista/%s/%s" % (partner.name, budget.name)
  26. vals['name'] = name.upper()
  27. return super(constructionOrderContractor, self).create(vals)
  28. ''' Currency '''
  29. @api.model
  30. def get_currency_budget(self, id):
  31. contractor = self.env['construction.order.contractor'].browse(id)
  32. budget = contractor.budget_id
  33. return budget.get_currency_order(budget.id)
  34. @api.model
  35. def add_task_contractor(self, id,tasks):
  36. line = self.env['construction.order.contractor.line'].search([('order_contractor_ids', '=', id )])
  37. lineTask = []
  38. if ( line ):
  39. for i in line:
  40. i.unlink()
  41. for task in tasks:
  42. lineTask= {
  43. 'code':task['code'],
  44. 'task_name': task['taskName'],
  45. 'uom_id': task['uomId'],
  46. 'task_id': task['taskId'],
  47. 'task_line_id': task['taskLineId'],
  48. 'qty': task['qty'],
  49. 'amount': task['amount'],
  50. 'amount_total': task['amountTotal'],
  51. 'type': task['type'],
  52. 'order_contractor_ids': id,
  53. }
  54. line.create(lineTask)
  55. contractor = self.env['construction.order.contractor'].browse(id)
  56. if (not contractor):
  57. return {'state': False }
  58. ammount = 0
  59. for line in contractor.line_ids:
  60. if (line.type =='activity'):
  61. ammount += line.amount_total
  62. contractor.write({'amount_total': ammount})
  63. return {'state': True }
  64. class ConstructionOrder(models.Model):
  65. _inherit = 'construction.order'
  66. contractor_budget_ids = fields.One2many('construction.order.contractor', 'budget_id', string='contractor')
  67. contractor_order_ids = fields.One2many('construction.order.contractor', 'order_id', string='contractor')
  68. ''' RES PARTNER '''
  69. class ResPartnerContractor(models.Model):
  70. _inherit = 'res.partner'
  71. contractor = fields.Boolean('contractor', default=False, help='Define si es un contratista o un subcontratista')
  72. class constructionOrderContractorLine(models.Model):
  73. _name = 'construction.order.contractor.line'
  74. code = fields.Char('Code', size=32, required=True, select=True)
  75. task_name = fields.Char('name')
  76. uom_id = fields.Many2one('construction.uom', string='Unidad de medida')
  77. task_id = fields.Many2one('construction.task', string='Tarea')
  78. task_line_id = fields.Many2one('construction.task.line', string='Actividad')
  79. qty = fields.Float('Cantidad', default=0)
  80. amount = fields.Float('Amount Unit', digits_compute=dp.get_precision('Account'), default=0.0)
  81. amount_total = fields.Float('Amount Total', digits_compute=dp.get_precision('Account'), default=0.0)
  82. type = fields.Selection([('task', 'Tarea'),('activity', 'Actividad')])
  83. order_contractor_ids = fields.Many2one('construction.order.contractor', string='Orden Contratista', ondelete='cascade', index=True, required=True)