<commit_before># -*- coding: utf-8 -*-
##############################################################################
#
#    OpenERP, Open Source Management Solution
#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU Affero General Public License as
#    published by the Free Software Foundation, either version 3 of the
#    License, or (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU Affero General Public License for more details.
#
#    You should have received a copy of the GNU Affero General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################

from base_calendar import base_calendar
from crm import crm_base, crm_case
from osv import fields, osv
from tools.translate import _
import logging

class crm_lead(crm_case, osv.osv):
    """ CRM Leads """
    _name = 'crm.lead'
crm_lead()

class crm_phonecall(crm_case, osv.osv):
    """ CRM Phonecall """
    _name = 'crm.phonecall'
crm_phonecall()


class crm_meeting(crm_base, osv.osv):
    """ CRM Meeting Cases """

    _name = 'crm.meeting'
    _description = "Meeting"
    _order = "id desc"
    _inherit = ["calendar.event","mail.thread"]
    _columns = {
        # From crm.case
        'name': fields.char('Summary', size=124, required=True, states={'done': [('readonly', True)]}),
        'partner_id': fields.many2one('res.partner', 'Partner', states={'done': [('readonly', True)]}),
        'section_id': fields.many2one('crm.case.section', 'Sales Team', states={'done': [('readonly', True)]}, \
                        select=True, help='Sales team to which Case belongs to.'),
        'email_from': fields.char('Email', size=128, states={'done': [('readonly', True)]}, help="These people will receive email."),
        'id': fields.integer('ID', readonly=True),
        'create_date': fields.datetime('Creation Date' , readonly=True),
        'write_date': fields.datetime('Write Date' , readonly=True),
        'date_action_last': fields.datetime('Last Action', readonly=1),
        'date_action_next': fields.datetime('Next Action', readonly=1),
        # Meeting fields
        'categ_id': fields.many2one('crm.case.categ', 'Meeting Type', \
                        domain="[('object_id.model', '=', 'crm.meeting')]", \
            ),
        'phonecall_id': fields.many2one ('crm.phonecall', 'Phonecall'),
        'opportunity_id': fields.many2one ('crm.lead', 'Opportunity', domain="[('type', '=', 'opportunity')]"),
        'attendee_ids': fields.many2many('calendar.attendee', 'meeting_attendee_rel',\
                                 'event_id', 'attendee_id', 'Attendees', states={'done': [('readonly', True)]}),
        'date_closed': fields.datetime('Closed', readonly=True),
        'date_deadline': fields.datetime('Deadline', states={'done': [('readonly', True)]}),
        'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
        'state': fields.selection([('open', 'Confirmed'),
                                    ('draft', 'Unconfirmed'),
                                    ('cancel', 'Cancelled'),
                                    ('done', 'Done')], 'State', \
                                    size=16, readonly=True),
    }
    _defaults = {
        'state': 'draft',
        'active': 1,
        'user_id': lambda self, cr, uid, ctx: uid,
    }

    def create(self, cr, uid, vals, context=None):
        obj_id = super(crm_meeting, self).create(cr, uid, vals, context=context)
        self.create_send_note(cr, uid, [obj_id], context=context)
        return obj_id

    def get_needaction_user_ids(self, cr, uid, ids, context=None):
        result = dict.fromkeys(ids, [])
        for obj in self.browse(cr, uid, ids, context=context):
            if (obj.state == 'draft' and obj.user_id):
                result[obj.id] = [obj.user_id.id]
        return result

    def case_get_note_msg_prefix(self, cr, uid, id, context=None):
        return 'Meeting'

    def create_send_note(self, cr, uid, ids, context=None):
        # update context: if come from phonecall, default state values can make the message_append_note crash
        context.pop('default_state', False)
        lead_obj = self.pool.get('crm.lead')
        phonecall_obj = self.pool.get('crm.phonecall')
        for meeting in self.browse(cr, uid, ids, context=context):
            message = _("A meeting has been <b>scheduled</b> on <em>%s</em>.") % (meeting.date)
            if meeting.opportunity_id: # meeting can be create from phonecalls or opportunities, therefore checking for the parent
                lead = meeting.opportunity_id
                parent_message = _("Meeting linked to the opportunity <em>%s</em> has been <b>created</b> and <b>cscheduled</b> on <em>%s</em>.") % (lead.name, meeting.date)
                lead.message_append_note(_('System Notification'), message)
            elif meeting.phonecall_id:
                phonecall = meeting.phonecall_id
                parent_message = _("Meeting linked to the phonecall <em>%s</em> has been <b>created</b> and <b>cscheduled</b> on <em>%s</em>.") % (phonecall.name, meeting.date)
                phonecall.message_append_note(_('System Notification'), message)
            else:
                parent_message = message
            if parent_message:
                meeting.message_append_note(_('System Notification'), parent_message)
        return True

    def case_close_send_note(self, cr, uid, ids, context=None):
        message = _("Meeting has been <b>done</b>.")<commit_msg>[FIX] Fix of the fix of the fix.<commit_after># -*- coding: utf-8 -*-
##############################################################################
#
#    OpenERP, Open Source Management Solution
#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU Affero General Public License as
#    published by the Free Software Foundation, either version 3 of the
#    License, or (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU Affero General Public License for more details.
#
#    You should have received a copy of the GNU Affero General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################

from base_calendar import base_calendar
from crm import crm_base, crm_case
from osv import fields, osv
from tools.translate import _
import logging

class crm_lead(crm_case, osv.osv):
    """ CRM Leads """
    _name = 'crm.lead'
crm_lead()

class crm_phonecall(crm_case, osv.osv):
    """ CRM Phonecall """
    _name = 'crm.phonecall'
crm_phonecall()


class crm_meeting(crm_base, osv.osv):
    """ CRM Meeting Cases """

    _name = 'crm.meeting'
    _description = "Meeting"
    _order = "id desc"
    _inherit = ["calendar.event","mail.thread"]
    _columns = {
        # From crm.case
        'name': fields.char('Summary', size=124, required=True, states={'done': [('readonly', True)]}),
        'partner_id': fields.many2one('res.partner', 'Partner', states={'done': [('readonly', True)]}),
        'section_id': fields.many2one('crm.case.section', 'Sales Team', states={'done': [('readonly', True)]}, \
                        select=True, help='Sales team to which Case belongs to.'),
        'email_from': fields.char('Email', size=128, states={'done': [('readonly', True)]}, help="These people will receive email."),
        'id': fields.integer('ID', readonly=True),
        'create_date': fields.datetime('Creation Date' , readonly=True),
        'write_date': fields.datetime('Write Date' , readonly=True),
        'date_action_last': fields.datetime('Last Action', readonly=1),
        'date_action_next': fields.datetime('Next Action', readonly=1),
        # Meeting fields
        'categ_id': fields.many2one('crm.case.categ', 'Meeting Type', \
                        domain="[('object_id.model', '=', 'crm.meeting')]", \
            ),
        'phonecall_id': fields.many2one ('crm.phonecall', 'Phonecall'),
        'opportunity_id': fields.many2one ('crm.lead', 'Opportunity', domain="[('type', '=', 'opportunity')]"),
        'attendee_ids': fields.many2many('calendar.attendee', 'meeting_attendee_rel',\
                                 'event_id', 'attendee_id', 'Attendees', states={'done': [('readonly', True)]}),
        'date_closed': fields.datetime('Closed', readonly=True),
        'date_deadline': fields.datetime('Deadline', states={'done': [('readonly', True)]}),
        'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
        'state': fields.selection([('open', 'Confirmed'),
                                    ('draft', 'Unconfirmed'),
                                    ('cancel', 'Cancelled'),
                                    ('done', 'Done')], 'State', \
                                    size=16, readonly=True),
    }
    _defaults = {
        'state': 'draft',
        'active': 1,
        'user_id': lambda self, cr, uid, ctx: uid,
    }

    def create(self, cr, uid, vals, context=None):
        obj_id = super(crm_meeting, self).create(cr, uid, vals, context=context)
        self.create_send_note(cr, uid, [obj_id], context=context)
        return obj_id

    def get_needaction_user_ids(self, cr, uid, ids, context=None):
        result = dict.fromkeys(ids, [])
        for obj in self.browse(cr, uid, ids, context=context):
            if (obj.state == 'draft' and obj.user_id):
                result[obj.id] = [obj.user_id.id]
        return result

    def case_get_note_msg_prefix(self, cr, uid, id, context=None):
        return 'Meeting'

    def create_send_note(self, cr, uid, ids, context=None):
        if context is None:
            context = {}
        # update context: if come from phonecall, default state values can make the message_append_note crash
        context.pop('default_state', False)
        lead_obj = self.pool.get('crm.lead')
        phonecall_obj = self.pool.get('crm.phonecall')
        for meeting in self.browse(cr, uid, ids, context=context):
            message = _("A meeting has been <b>scheduled</b> on <em>%s</em>.") % (meeting.date)
            if meeting.opportunity_id: # meeting can be create from phonecalls or opportunities, therefore checking for the parent
                lead = meeting.opportunity_id
                parent_message = _("Meeting linked to the opportunity <em>%s</em> has been <b>created</b> and <b>cscheduled</b> on <em>%s</em>.") % (lead.name, meeting.date)
                lead.message_append_note(_('System Notification'), message)
            elif meeting.phonecall_id:
                phonecall = meeting.phonecall_id
                parent_message = _("Meeting linked to the phonecall <em>%s</em> has been <b>created</b> and <b>cscheduled</b> on <em>%s</em>.") % (phonecall.name, meeting.date)
                phonecall.message_append_note(_('System Notification'), message)
            else:
                parent_message = message
            if parent_message:
                meeting.message_append_note(_('System Notification'), parent_message)
        return True

    def case_close_send_note(self, cr, uid, ids, context=None):
        message = _("Meeting has been <b>done</b>.")
{'fraction_non_alphanumeric': 0.16540785498489427, 'fraction_numerical': 0.004699563611950319, 'mean_word_length': 2.912344057780696, 'pattern_counts': {'":': 0, '<': 51, '<?xml version=': 0, '>': 51, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 10, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5773017', 'n_tokens_mistral': 3584, 'n_tokens_neox': 3462, 'n_words': 937}