crm_mensaje.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. # -*- coding: utf-8 -*-
  2. ##############################################################################
  3. #
  4. # OpenERP, Open Source Management Solution
  5. # Copyright (C) 2004-today OpenERP SA (<http://www.openerp.com>)
  6. #
  7. # This program is free software: you can redistribute it and/or modify
  8. # it under the terms of the GNU Affero General Public License as
  9. # published by the Free Software Foundation, either version 3 of the
  10. # License, or (at your option) any later version.
  11. #
  12. # This program is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. # GNU Affero General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU Affero General Public License
  18. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  19. #
  20. ##############################################################################
  21. from datetime import datetime
  22. from openerp.osv import fields, osv
  23. from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
  24. from openerp.tools.translate import _
  25. class crm_mensaje(osv.osv):
  26. """ Model for CRM Mensajes """
  27. _name = "crm.mensaje"
  28. _description = "Mensaje"
  29. _order = "id desc"
  30. _columns = {
  31. 'date_action_last': fields.datetime('Accion Anterior', readonly=1),
  32. 'date_action_next': fields.datetime('Fecha Prox. Accion', readonly=True),
  33. 'action_next': fields.char('Prox. Accion'),
  34. 'create_date': fields.datetime('Fecha Creado' , readonly=True),
  35. 'user_id': fields.many2one('res.users', 'Responsable'),
  36. 'partner_id': fields.many2one('res.partner', 'Cliente'),
  37. 'company_id': fields.many2one('res.company', 'Compania'),
  38. 'description': fields.text('Descripcion'),
  39. 'state': fields.selection(
  40. [('open', 'Abierto'),
  41. ('cancel', 'Cancelado'),
  42. ('pending', 'Pendiente'),
  43. ('done', 'Realizado')
  44. ], string='Estado', readonly=True, track_visibility='onchange',
  45. help='El estado se establece en Abierto, cuando se crea un caso.\n'
  46. 'Cuando la convesacion termina, el estado se establece en Realizada.\n'
  47. 'Si las llamadas no es aplicable más, el estado se puede configurar para Cancelado.'),
  48. 'date_open': fields.datetime('Fecha Abierto', readonly=True),
  49. # phonecall fields
  50. 'name': fields.char('Resumen del mensaje', required=True),
  51. 'active': fields.boolean('Activo', required=False),
  52. 'partner_phone': fields.char('Celular1'),
  53. 'partner_mobile': fields.char('Celular2'),
  54. 'priority': fields.selection([('0','P'), ('1','Poco'),('2','Normal'), ('3','Alto')], 'Prioridad'),
  55. 'date_closed': fields.datetime('Cerrado', readonly=True),
  56. 'opportunity_id': fields.many2one ('crm.lead', 'Iniciativa/Oportunidad'),
  57. 'date': fields.datetime('Fecha'),
  58. }
  59. def _get_default_state(self, cr, uid, context=None):
  60. if context and context.get('default_state'):
  61. return context.get('default_state')
  62. return 'open'
  63. _defaults = {
  64. 'date': fields.datetime.now,
  65. 'date_action_next': fields.datetime.now,
  66. 'priority': '1',
  67. 'state': _get_default_state,
  68. 'user_id': lambda self, cr, uid, ctx: uid,
  69. 'active': 1
  70. }
  71. def on_change_partner_id(self, cr, uid, ids, partner_id, context=None):
  72. values = {}
  73. if partner_id:
  74. partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
  75. values = {
  76. 'partner_phone': partner.phone,
  77. 'partner_mobile': partner.mobile,
  78. }
  79. return {'value': values}
  80. def write(self, cr, uid, ids, values, context=None):
  81. """ Override to add case management: open/close dates """
  82. if values.get('state'):
  83. if values.get('state') == 'done':
  84. values['date_closed'] = fields.datetime.now()
  85. elif values.get('state') == 'open':
  86. values['date_open'] = fields.datetime.now()
  87. return super(crm_mensaje, self).write(cr, uid, ids, values, context=context)
  88. def _call_create_partner(self, cr, uid, mensaje, context=None):
  89. partner = self.pool.get('res.partner')
  90. partner_id = partner.create(cr, uid, {
  91. 'name': mensaje.name,
  92. 'user_id': mensaje.user_id.id,
  93. 'comment': mensaje.description,
  94. 'address': []
  95. })
  96. return partner_id
  97. def _call_set_partner(self, cr, uid, ids, partner_id, context=None):
  98. write_res = self.write(cr, uid, ids, {'partner_id' : partner_id}, context=context)
  99. self._call_set_partner_send_note(cr, uid, ids, context)
  100. return write_res
  101. def _call_create_partner_address(self, cr, uid, mensaje, partner_id, context=None):
  102. address = self.pool.get('res.partner')
  103. return address.create(cr, uid, {
  104. 'parent_id': partner_id,
  105. 'name': mensaje.name,
  106. 'phone': mensaje.partner_phone,})
  107. class res_partner(osv.osv):
  108. _inherit = 'res.partner'
  109. def _mensaje_count(self, cr, uid, ids, field_name, arg, context=None):
  110. Claim_mensaje = self.pool['crm.mensaje']
  111. return {
  112. partner_id: Claim_mensaje.search_count(cr,uid, [('partner_id', '=', partner_id)], context=context)
  113. for partner_id in ids
  114. }
  115. _columns = {
  116. 'mensaje_count': fields.function(_mensaje_count, string='# Contador Mensaje', type='integer'),
  117. }
  118. # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: