merge
authorFabien Pinckaers <fp@tinyerp.com>
Wed, 31 Mar 2010 14:49:35 +0000 (16:49 +0200)
committerFabien Pinckaers <fp@tinyerp.com>
Wed, 31 Mar 2010 14:49:35 +0000 (16:49 +0200)
bzr revid: fp@tinyerp.com-20100331144935-qqzvrmolejwcv6hl

36 files changed:
addons/account_chart/i18n/ru.po
addons/base_contact/i18n/bg.po
addons/board_account/i18n/ru.po
addons/board_project/i18n/ru.po
addons/crm/__terp__.py
addons/crm/crm.py
addons/crm/crm_action_rule.py
addons/crm/crm_claims_view.xml
addons/crm/crm_fund_view.xml
addons/crm/crm_helpdesk_view.xml
addons/crm/crm_lead_view.xml
addons/crm/crm_mailgate.py
addons/crm/crm_opportunity_view.xml
addons/crm/crm_view.xml
addons/crm/i18n/es.po
addons/crm/i18n/fi.po
addons/crm/scripts/openerp_mailgate/openerp_mailgate.py
addons/crm/wizard/crm_send_email.py
addons/crm/wizard/crm_send_email_view.xml
addons/hr_recruitment/hr_recruitment_view.xml
addons/idea/i18n/ru.po
addons/mail_gateway/mail_gateway.py
addons/mrp/i18n/fr.po
addons/mrp/i18n/ru.po
addons/mrp/mrp.py
addons/project_issue/__terp__.py
addons/project_issue/project_issue_view.xml
addons/sale/sale_view.xml
addons/stock/__terp__.py
addons/stock/stock_view.xml
addons/stock/stock_wizard.xml
addons/stock/wizard/__init__.py
addons/stock/wizard/stock_inventory_merge.py
addons/stock/wizard/stock_inventory_merge_view.xml [new file with mode: 0644]
addons/stock/wizard/stock_picking_make.py
addons/stock/wizard/stock_picking_make_view.xml [new file with mode: 0644]

index eaa300a..a7f1409 100644 (file)
@@ -7,16 +7,16 @@ msgstr ""
 "Project-Id-Version: OpenERP Server 5.0.4\n"
 "Report-Msgid-Bugs-To: support@openerp.com\n"
 "POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-04-10 14:08+0000\n"
-"Last-Translator: <>\n"
+"PO-Revision-Date: 2010-03-30 10:18+0000\n"
+"Last-Translator: Nikolay Chesnokov <chesnokov_n@msn.com>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-03-30 04:16+0000\n"
+"X-Launchpad-Export-Date: 2010-03-31 03:55+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
 #. module: account_chart
 #: model:ir.module.module,description:account_chart.module_meta_information
 msgid "Remove minimal account chart"
-msgstr ""
+msgstr "Удалите минимальный план счетов"
index 80c573d..dfdcd14 100644 (file)
@@ -7,13 +7,13 @@ msgstr ""
 "Project-Id-Version: OpenERP Server 5.0.0\n"
 "Report-Msgid-Bugs-To: support@openerp.com\n"
 "POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 13:01+0000\n"
-"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
+"PO-Revision-Date: 2010-03-30 19:31+0000\n"
+"Last-Translator: Boris <boris.t.ivanov@gmail.com>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-03-30 03:59+0000\n"
+"X-Launchpad-Export-Date: 2010-03-31 03:55+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
 #. module: base_contact
@@ -37,7 +37,7 @@ msgstr ""
 #. module: base_contact
 #: field:res.partner.job,function_id:0
 msgid "Partner Function"
-msgstr ""
+msgstr "Функция ня партньора"
 
 #. module: base_contact
 #: model:ir.actions.act_window,name:base_contact.action_partner_contact_form
@@ -57,12 +57,12 @@ msgstr ""
 #. module: base_contact
 #: selection:res.partner.job,state:0
 msgid "Current"
-msgstr ""
+msgstr "Текущ"
 
 #. module: base_contact
 #: field:res.partner.contact,first_name:0
 msgid "First Name"
-msgstr "Собствено име"
+msgstr "Собствено Име"
 
 #. module: base_contact
 #: model:ir.model,name:base_contact.model_res_partner_job
@@ -72,7 +72,7 @@ msgstr ""
 #. module: base_contact
 #: field:res.partner.job,other:0
 msgid "Other"
-msgstr ""
+msgstr "Друго"
 
 #. module: base_contact
 #: model:process.transition,name:base_contact.process_transition_contacttofunction0
@@ -286,7 +286,7 @@ msgstr ""
 #. module: base_contact
 #: model:process.node,name:base_contact.process_node_partners0
 msgid "Partners"
-msgstr ""
+msgstr "Партньори"
 
 #. module: base_contact
 #: model:process.node,name:base_contact.process_node_addresses0
index 51214d1..fd7e9d8 100644 (file)
@@ -7,13 +7,13 @@ msgstr ""
 "Project-Id-Version: OpenERP Server 5.0.0\n"
 "Report-Msgid-Bugs-To: support@openerp.com\n"
 "POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 12:16+0000\n"
-"Last-Translator: Sergei Kostigoff <sergei.kostigoff@gmail.com>\n"
+"PO-Revision-Date: 2010-03-30 10:23+0000\n"
+"Last-Translator: Nikolay Chesnokov <chesnokov_n@msn.com>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-03-30 04:12+0000\n"
+"X-Launchpad-Export-Date: 2010-03-31 03:55+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
 #. module: board_account
@@ -57,12 +57,12 @@ msgstr "Расходы для выставления счетов"
 #. module: board_account
 #: view:board.board:0
 msgid "Aged receivables"
-msgstr ""
+msgstr "Повременный расход"
 
 #. module: board_account
 #: model:ir.module.module,shortdesc:board_account.module_meta_information
 msgid "Board for accountant"
-msgstr ""
+msgstr "Панель контролёра счетов"
 
 #. module: board_account
 #: model:ir.actions.act_window,name:board_account.action_aged_income
@@ -77,7 +77,7 @@ msgstr "Мои индикаторы"
 #. module: board_account
 #: constraint:ir.actions.act_window:0
 msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Недопустимое имя модели в определении действия"
 
 #. module: board_account
 #: model:ir.ui.menu,name:board_account.next_id_68
@@ -87,9 +87,9 @@ msgstr "Бухгалтерский"
 #. module: board_account
 #: view:board.board:0
 msgid "Account Board"
-msgstr ""
+msgstr "Панель счетов"
 
 #. module: board_account
 #: view:board.board:0
 msgid "Aged income"
-msgstr ""
+msgstr "Повременный доход"
index 074cd66..60115d0 100644 (file)
@@ -7,13 +7,13 @@ msgstr ""
 "Project-Id-Version: OpenERP Server 5.0.0\n"
 "Report-Msgid-Bugs-To: support@openerp.com\n"
 "POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 12:27+0000\n"
-"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
+"PO-Revision-Date: 2010-03-30 10:26+0000\n"
+"Last-Translator: Nikolay Chesnokov <chesnokov_n@msn.com>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-03-30 04:00+0000\n"
+"X-Launchpad-Export-Date: 2010-03-31 03:55+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
 #. module: board_project
@@ -30,7 +30,7 @@ msgstr "Табели"
 #. module: board_project
 #: constraint:ir.actions.act_window:0
 msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Недопустимое имя модели в определении действия"
 
 #. module: board_project
 #: view:board.board:0
@@ -63,7 +63,7 @@ msgstr "Панель аналитики проекта"
 #. module: board_project
 #: model:ir.module.module,shortdesc:board_project.module_meta_information
 msgid "Board for project users"
-msgstr ""
+msgstr "Панель для пользователей проекта"
 
 #. module: board_project
 #: model:ir.actions.act_window,name:board_project.action_project_pipeline_user
@@ -73,7 +73,7 @@ msgstr "Конвейер заданий"
 #. module: board_project
 #: view:board.board:0
 msgid "My Planning"
-msgstr ""
+msgstr "Мой план"
 
 #. module: board_project
 #: view:board.board:0
@@ -136,4 +136,4 @@ msgstr "Мои конвейеры пользователей"
 #. module: board_project
 #: view:board.board:0
 msgid "My Timesheet"
-msgstr ""
+msgstr "Мой табель"
index b2a40c8..ef5b80c 100644 (file)
@@ -70,7 +70,6 @@ between mails and Open ERP.""",
         'crm_lead_menu.xml',
         'crm_meeting_wizard.xml',
         'crm_meeting_view.xml',
-        'crm_meeting_menu.xml',
         'crm_phonecall_wizard.xml',
         'crm_phonecall_view.xml',
         'crm_phonecall_menu.xml',
index 45d0434..a6baed4 100644 (file)
@@ -316,14 +316,19 @@ class crm_case(osv.osv):
                     self.write(cr, uid, [case.id], {'stage_id': s[section][st]})
         return True    
     
-    def history(self, cr, uid, ids, keyword, history=False, email=False, details=None, context={}):
+    def history(self, cr, uid, ids, keyword, history=False, email=False, details=None, email_from=False, context={}):
         cases = self.browse(cr, uid, ids, context=context)
-        return self.__history(cr, uid, cases, keyword=keyword,\
-                               history=history, email=email, details=details,\
+        return self._history(cr, uid, cases, keyword=keyword,\
+                               history=history, email=email, details=details, email_from=email_from, \
                                context=context)
 
     def __history(self, cr, uid, cases, keyword, history=False, email=False, details=None, email_from=False, context={}):
-        model_obj = self.pool.get('ir.model')          
+        model_obj = self.pool.get('ir.model')  
+        if email and type(email) == type([]):
+            email = ','.join(email) 
+        if email_from and type(email_from) == type([]):
+            email_from = ','.join(email_from) 
+       
         for case in cases:
             model_ids = model_obj.search(cr, uid, [('model','=',case._name)])            
             data = {
@@ -339,11 +344,13 @@ class crm_case(osv.osv):
                 obj = self.pool.get('crm.case.history')
                 data['description'] = details or case.description
                 data['email_to'] = email or \
+                        (case.section_id and case.section_id.reply_to) or \
                         (case.user_id and case.user_id.address_id and \
-                            case.user_id.address_id.email) or False
+                            case.user_id.address_id.email) or tools.config.get('email_from',False)
                 data['email_from'] = email_from or \
+                        (case.section_id and case.section_id.reply_to) or \
                         (case.user_id and case.user_id.address_id and \
-                            case.user_id.address_id.email) or False
+                            case.user_id.address_id.email) or tools.config.get('email_from',False)
             res = obj.create(cr, uid, data, context)            
         return True
     _history = __history
index 1e7c505..cd9c8f3 100644 (file)
@@ -55,11 +55,14 @@ class case(osv.osv):
             if case.section_id.reply_to and case.email_from:
                 src = case.email_from
                 dest = case.section_id.reply_to
-                body = case.email_last or case.description
+                body = ""
+                body = case.email_last or case.description               
                 if not destination:
                     src, dest = dest, src
-                    if case.user_id.signature:
-                        body += '\n\n%s' % (case.user_id.signature or '')
+                    if body and case.user_id.signature:
+                        body += '\n\n%s' % (case.user_id.signature)
+
+                body = self.format_body(body)
                 dest = [dest]
 
                 attach_to_send = None
@@ -74,15 +77,16 @@ class case(osv.osv):
                     src,
                     dest,
                     "Reminder: [%s] %s" % (str(case.id), case.name, ),
-                    self.format_body(body),
+                    body,
                     reply_to=case.section_id.reply_to,
                     openobject_id=str(case.id),
                     attach=attach_to_send
                 )
-                if flag:
-                    raise osv.except_osv(_('Email!'),("Email Successfully Sent"))
-                else:
-                    raise osv.except_osv(_('Email Fail!'),("Email is not sent successfully"))
+                self._history(cr, uid, [case], _('Send'), history=True, email=dest, details=body, email_from=src)
+                #if flag:
+                #    raise osv.except_osv(_('Email!'),("Email Successfully Sent"))
+                #else:
+                #    raise osv.except_osv(_('Email Fail!'),("Email is not sent successfully"))
         return True    
 
     def _check(self, cr, uid, ids=False, context={}):
@@ -120,6 +124,23 @@ case()
 class base_action_rule(osv.osv):
     _inherit = 'base.action.rule'
     _description = 'Action Rules'
+
+    def email_send(self, cr, uid, obj, emails, body, emailfrom=tools.config.get('email_from',False), context={}):
+        body = self.format_mail(obj, body)
+        if not emailfrom:
+            if hasattr(obj, 'user_id')  and obj.user_id and obj.user_id.address_id and obj.user_id.address_id.email:
+                emailfrom = obj.user_id.address_id.email
+            
+        name = '[%d] %s' % (obj.id, tools.ustr(obj.name))
+        emailfrom = tools.ustr(emailfrom)
+        if hasattr(obj, 'section_id') and obj.section_id and obj.section_id.reply_to:
+            reply_to = obj.section_id.reply_to
+        else:
+            reply_to = emailfrom
+        if not emailfrom:
+            raise osv.except_osv(_('Error!'),
+                    _("No E-Mail ID Found for your Company address!"))
+        return tools.email_send(emailfrom, emails, name, body, reply_to=reply_to, openobject_id=str(obj.id))
     
     def do_check(self, cr, uid, action, obj, context={}):
         ok = super(base_action_rule, self).do_check(cr, uid, action, obj, context=context)
@@ -146,7 +167,7 @@ class base_action_rule(osv.osv):
         res = super(base_action_rule, self).do_action(cr, uid, action, model_obj, obj, context=context)         
         write = {}
         
-        if action.act_section_id:
+        if hasattr(action, act_section_id) and action.act_section_id:
             obj.section_id = action.act_section_id
             write['section_id'] = action.act_section_id.id        
         
index c1a3345..2104c1c 100644 (file)
                                    <field name="description" colspan="4" nolabel="1"/>
                                    <button colspan="4"
                                        string="Reply to Last Email"
-                                       name="%(action_crm_reply_mail)d"
+                                       name="%(action_crm_send_mail)d"
                                        context="{'mail':'reply', 'model': 'crm.claim'}"
                                        icon="gtk-undo" type="action" />
                                </form>
index bcd7846..d1287ab 100644 (file)
                                    <field name="description" colspan="4" nolabel="1"/>
                                    <button colspan="4"
                                        string="Reply to Last Email"
-                                       name="%(action_crm_reply_mail)d"
+                                       name="%(action_crm_send_mail)d"
                                        context="{'mail':'reply', 'model': 'crm.fundraising'}"
                                        icon="gtk-undo" type="action" />
                                </form>
index 307352f..c22ccf7 100644 (file)
                                    <field name="description" colspan="4" nolabel="1"/>
                                    <button colspan="4"
                                        string="Reply to Last Email"
-                                       name="%(action_crm_reply_mail)d"
+                                       name="%(action_crm_send_mail)d"
                                        context="{'mail':'reply', 'model': 'crm.helpdesk'}"
                                        icon="gtk-undo" type="action" />
                                </form>
index 222bc18..f660d26 100644 (file)
                                    <field name="description" colspan="4" nolabel="1"/>
                                    <button colspan="4"
                                        string="Reply to Last Email"
-                                       name="%(action_crm_reply_mail)d"
+                                       name="%(action_crm_send_mail)d"
                                        context="{'mail':'reply', 'model': 'crm.lead'}"
                                        icon="gtk-undo" type="action" />
                                </form>
index 8b2f3bd..60bd4f4 100644 (file)
@@ -34,24 +34,28 @@ from osv.orm import except_orm
 
 class crm_cases(osv.osv):
     _name = "crm.case"
-    _inherit = "crm.case"
+    _inherit = "crm.case"    
 
     def msg_new(self, cr, uid, msg):                
         mailgate_obj = self.pool.get('mail.gateway')
         msg_body = mailgate_obj.msg_body_get(msg)
+        msg_subject = mailgate_obj._decode_header(msg['Subject'])
+        msg_from = mailgate_obj._decode_header(msg['From'])
+        msg_cc = mailgate_obj._decode_header(msg['Cc'])
+        body = self.format_body(msg_body['body'])
         data = {   
-            'name': msg['Subject'],         
-            'email_from': msg['From'],
-            'email_cc': msg['Cc'],            
+            'name': msg_subject,         
+            'email_from': msg_from,
+            'email_cc': msg_cc,            
             'user_id': False,
-            'description': msg_body['body'],            
+            'description': body,            
         }
-        res = mailgate_obj.partner_get(cr, uid, msg['From'])
+        res = mailgate_obj.partner_get(cr, uid, msg_from)
         if res:
             data.update(res)
         res = self.create(cr, uid, data)        
         cases = self.browse(cr, uid, [res])       
-        self._history(cr, uid, cases, _('Receive'), history=True, email=msg['From'])
+        self._history(cr, uid, cases, _('Receive'), history=True, details=body, email_from=msg_from)
         return res
     
     def msg_update(self, cr, uid, ids, msg, data={}, default_act='pending'):
@@ -79,10 +83,10 @@ class crm_cases(osv.osv):
 
         if 'partner' in msg_actions:
             data['email_from'] = msg_actions['partner'][:128]        
-
+        msg_from = self._decode_header(msg['From'])
         res = self.write(cr, uid, select, data)
         cases = self.browse(cr, uid, select)       
-        self._history(cr, uid, cases, _('Receive'), history=True, email=msg['From'])        
+        self._history(cr, uid, cases, _('Receive'), history=True, details=body_data, email_from=msg['From'])        
         getattr(self,act)(cr, uid, select)
         return res
 
index bd1b61c..02ffc47 100644 (file)
                                    <field name="description" colspan="4" nolabel="1"/>
                                    <button colspan="4"
                                        string="Reply to Last Email"
-                                       name="%(action_crm_reply_mail)d"
+                                       name="%(action_crm_send_mail)d"
                                        context="{'mail':'reply', 'model': 'crm.opportunity'}"
                                        icon="gtk-undo" type="action" />
                                </form>
index 6594c2a..3348083 100644 (file)
                 <tree string="Case logs">
                     <field name="date"/>
                     <field name="name"/>
-                    <field name="som"/>
                     <field name="user_id"/>
                     <field name="section_id"/>
+                    <!--
+                    <field name="som"/>
                     <field name="canal_id"/>
+                    -->
                 </tree>
             </field>
         </record>
                 <tree string="Case History">
                     <field name="date"/>
                     <field name="name"/>
-                    <field name="som"/>
                     <field name="user_id"/>
+                    <!--
+                    <field name="som"/>
                     <field name="canal_id"/>
+                    -->
                 </tree>
             </field>
         </record>
                                    <field name="description" colspan="4" nolabel="1"/>
                                    <button colspan="4"
                                        string="Reply to Last Email"
-                                       name="%(action_crm_reply_mail)d"
+                                       name="%(action_crm_send_mail)d"
                                        context="{'mail':'reply', 'model': 'crm.case'}"
                                        icon="gtk-undo" type="action" />
                                </form>
index 7bd5f41..e1fbc85 100644 (file)
@@ -7,13 +7,13 @@ msgstr ""
 "Project-Id-Version: OpenERP Server 5.0.0\n"
 "Report-Msgid-Bugs-To: support@openerp.com\n"
 "POT-Creation-Date: 2010-01-05 05:59+0000\n"
-"PO-Revision-Date: 2010-03-04 10:04+0000\n"
-"Last-Translator: xavi <xgilest@gmail.com>\n"
+"PO-Revision-Date: 2010-03-30 21:03+0000\n"
+"Last-Translator: Luis Gerardo Cruz Garcia <lgcruz@morfosys.com>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-03-30 03:59+0000\n"
+"X-Launchpad-Export-Date: 2010-03-31 03:55+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
 #. module: crm
@@ -27,6 +27,8 @@ msgid ""
 "This property defines the list                 of date/time exceptions for "
 "arecurring calendar component."
 msgstr ""
+"Esta propiedad define la lista de excepciones (días/horas) para un evento de "
+"calendario recurrente"
 
 #. module: crm
 #: help:crm.case.rule,act_mail_to_user:0
@@ -306,7 +308,7 @@ msgstr ""
 #. module: crm
 #: view:crm.meeting:0
 msgid "Exception Dates"
-msgstr ""
+msgstr "Fechas de excepción"
 
 #. module: crm
 #: selection:crm.case.rule,trg_date_type:0
@@ -400,17 +402,17 @@ msgstr "Próxima entrevista"
 #. module: crm
 #: field:crm.case.rule,regex_history:0
 msgid "Regular Expression on Case History"
-msgstr ""
+msgstr "Expresiones Regulares en el Historial del Caso"
 
 #. module: crm
 #: model:ir.model,name:crm.model_crm_email_add_cc
 msgid "Email Add CC"
-msgstr ""
+msgstr "Email añadir CC"
 
 #. module: crm
 #: model:process.transition,name:crm.process_transition_opportunitymeeting0
 msgid "Opportunity Meeting"
-msgstr ""
+msgstr "Oportunidad de Reunión"
 
 #. module: crm
 #: help:crm.case,canal_id:0
@@ -423,7 +425,7 @@ msgstr ""
 #. module: crm
 #: view:crm.meeting:0
 msgid "Exception Rules"
-msgstr ""
+msgstr "Reglas de Excepción"
 
 #. module: crm
 #: field:crm.menu.config_wizard,opportunity:0
@@ -434,7 +436,7 @@ msgstr "Oportunidades de negocio"
 #. module: crm
 #: model:crm.case.stage,name:crm.stage_claim1
 msgid "Accepted as Claim"
-msgstr ""
+msgstr "Aceptado como reclamación"
 
 #. module: crm
 #: view:crm.case.rule:0
@@ -459,18 +461,18 @@ msgstr "%(email_from)s = Email empresa"
 #. module: crm
 #: model:crm.case.stage,name:crm.stage_lead6
 msgid "Dead"
-msgstr ""
+msgstr "Muerto"
 
 #. module: crm
 #: view:crm.meeting:0
 msgid "Confirm Meeting"
-msgstr ""
+msgstr "Confirmar reunión"
 
 #. module: crm
 #: model:crm.case.categ,name:crm.categ_lead1
 #: model:crm.case.categ,name:crm.categ_oppor1
 msgid "Existing Customer"
-msgstr ""
+msgstr "Cliente existente"
 
 #. module: crm
 #: model:crm.case.category2,name:crm.category_meet2
@@ -494,7 +496,7 @@ msgstr "Categoría"
 #: model:ir.ui.menu,name:crm.menu_crm_case_section_categ_stage_tree
 #: view:report.crm.case.section.categ.stage:0
 msgid "Cases by Section, Category and Stage"
-msgstr ""
+msgstr "Casos por sección, categoría y fase"
 
 #. module: crm
 #: help:crm.case.rule,act_mail_to_watchers:0
@@ -502,11 +504,13 @@ msgid ""
 "Check this if you want the rule to mark CC(mail to any other person defined "
 "in actions)."
 msgstr ""
+"Active esta casilla en caso que quiera que la regla sea marcada CC ( copia "
+"de email para cualquier otra persona definida en las acciones)"
 
 #. module: crm
 #: field:crm.meeting,class:0
 msgid "Privacy"
-msgstr ""
+msgstr "Privada"
 
 #. module: crm
 #: view:crm.case.rule:0
@@ -566,7 +570,7 @@ msgstr "Posición"
 #: model:ir.actions.wizard,name:crm.wizard_partner_create_opportunity
 #: model:ir.actions.wizard,name:crm.wizard_partner_create_opportunity1
 msgid "Create Opportunity"
-msgstr ""
+msgstr "Crear oportunidad"
 
 #. module: crm
 #: selection:report.crm.case.section.categ.categ2,month:0
@@ -579,7 +583,7 @@ msgstr ""
 #. module: crm
 #: view:crm.meeting:0
 msgid "Meetings Tree"
-msgstr ""
+msgstr "Árbol de reuniones"
 
 #. module: crm
 #: code:addons/crm/crm.py:0
@@ -596,7 +600,7 @@ msgstr "Escalado"
 #. module: crm
 #: model:ir.ui.menu,name:crm.menu_crm_case_categ_meet
 msgid "All Meetings"
-msgstr ""
+msgstr "Todas las reuniones"
 
 #. module: crm
 #: model:ir.module.module,shortdesc:crm.module_meta_information
@@ -607,7 +611,7 @@ msgstr "Gestión de relaciones con clientes & proveedores"
 #: view:crm.email.add.cc:0
 #: model:ir.actions.act_window,name:crm.action_view_crm_email_add_cc_wizard
 msgid "Add CC"
-msgstr ""
+msgstr "Agregar CC"
 
 #. module: crm
 #: selection:report.crm.case.section.categ.categ2,month:0
@@ -615,7 +619,7 @@ msgstr ""
 #: selection:report.crm.case.section.categ2,month:0
 #: selection:report.crm.case.section.stage,month:0
 msgid "June"
-msgstr ""
+msgstr "Junio"
 
 #. module: crm
 #: field:crm.segmentation,som_interval_default:0
@@ -625,7 +629,7 @@ msgstr "Por defecto (0=Ninguno)"
 #. module: crm
 #: model:crm.case.stage,name:crm.stage_job7
 msgid "Refused by Company"
-msgstr ""
+msgstr "Rechazado por la compañía"
 
 #. module: crm
 #: field:crm.case,planned_revenue:0
@@ -643,12 +647,12 @@ msgstr "Permitir eliminar"
 #: selection:report.crm.case.section.categ2,month:0
 #: selection:report.crm.case.section.stage,month:0
 msgid "October"
-msgstr ""
+msgstr "Octubre"
 
 #. module: crm
 #: model:crm.case.stage,name:crm.stage_oppor3
 msgid "Value Proposition"
-msgstr ""
+msgstr "Propuesta de valor"
 
 #. module: crm
 #: view:crm.case.rule:0
@@ -658,17 +662,17 @@ msgstr "%(case_id)s = ID del caso"
 #. module: crm
 #: model:crm.case.category2,name:crm.category_oppor2
 msgid "New Business"
-msgstr ""
+msgstr "Nuevo negocio"
 
 #. module: crm
 #: help:crm.case,email_from:0
 msgid "These people will receive email."
-msgstr ""
+msgstr "Estas personas recibirán un email."
 
 #. module: crm
 #: help:crm.case.section,calendar:0
 msgid "Allows to show calendar"
-msgstr ""
+msgstr "Permite mostrar el calendario"
 
 #. module: crm
 #: view:crm.job:0
@@ -676,13 +680,13 @@ msgstr ""
 #: view:crm.opportunity:0
 #: view:crm.phonecall:0
 msgid "   Today   "
-msgstr ""
+msgstr "   Hoy   "
 
 #. module: crm
 #: wizard_view:crm.job.reschedule_phone_call,init:0
 #: wizard_view:crm.opportunity.reschedule_phone_call,init:0
 msgid "Phone Call Description"
-msgstr ""
+msgstr "Descripción de la llamada"
 
 #. module: crm
 #: view:crm.case.categ:0
@@ -702,7 +706,7 @@ msgstr ""
 #. module: crm
 #: model:crm.case.categ,name:crm.categ_claim3
 msgid "Policy Claims"
-msgstr ""
+msgstr "Política de reclamaciones"
 
 #. module: crm
 #: code:addons/crm/crm.py:0
@@ -718,7 +722,7 @@ msgstr ""
 #. module: crm
 #: view:crm.phonecall:0
 msgid "Assigned to"
-msgstr ""
+msgstr "Asignada a"
 
 #. module: crm
 #: view:res.partner.events:0
@@ -728,12 +732,12 @@ msgstr "Eventos empresa"
 #. module: crm
 #: model:crm.case.stage,name:crm.stage_job4
 msgid "Contract Proposed"
-msgstr ""
+msgstr "Contrato propuesto"
 
 #. module: crm
 #: model:ir.ui.menu,name:crm.menu_crm_case_job_req_main
 msgid "Jobs - Hiring Process"
-msgstr ""
+msgstr "Trabajos - Proceso de selección de personal"
 
 #. module: crm
 #: view:crm.case:0
@@ -741,7 +745,7 @@ msgstr ""
 #: view:crm.lead:0
 #: view:crm.opportunity:0
 msgid "Related Cases"
-msgstr ""
+msgstr "Casos Relacionados"
 
 #. module: crm
 #: selection:report.crm.case.section.categ.categ2,month:0
@@ -749,7 +753,7 @@ msgstr ""
 #: selection:report.crm.case.section.categ2,month:0
 #: selection:report.crm.case.section.stage,month:0
 msgid "September"
-msgstr ""
+msgstr "Setiembre"
 
 #. module: crm
 #: view:crm.case:0
@@ -764,33 +768,33 @@ msgstr "Historial de comunicación"
 #. module: crm
 #: view:crm.claim:0
 msgid "New Claims"
-msgstr ""
+msgstr "Nuevas Reclamaciones"
 
 #. module: crm
 #: view:crm.meeting:0
 msgid "Meetings Form"
-msgstr ""
+msgstr "Formulario de reuniones"
 
 #. module: crm
 #: model:crm.case.stage,name:crm.stage_oppor5
 msgid "Negotiation/Review"
-msgstr ""
+msgstr "Negociación/Revisión"
 
 #. module: crm
 #: code:addons/crm/wizard/crm_phonecall_wizard.py:0
 #, python-format
 msgid "A partner is already defined on this phonecall."
-msgstr ""
+msgstr "Una empresa ya esta definida para esta llamada."
 
 #. module: crm
 #: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_stage
 msgid "Cases by Opportunities and Stage"
-msgstr ""
+msgstr "Casos por oportunidades y fase"
 
 #. module: crm
 #: view:crm.claim:0
 msgid "Date of Claim"
-msgstr ""
+msgstr "Fecha de reclamación"
 
 #. module: crm
 #: view:crm.segmentation.line:0
@@ -800,12 +804,12 @@ msgstr "Líneas de segmentación de empresa"
 #. module: crm
 #: model:ir.actions.act_window,name:crm.crm_case_category_act_leads_all
 msgid "All Leads"
-msgstr ""
+msgstr "Todas las iniciativas"
 
 #. module: crm
 #: view:crm.lead:0
 msgid "Leads Form"
-msgstr ""
+msgstr "Formulario de iniciativas"
 
 #. module: crm
 #: view:crm.segmentation:0
@@ -816,17 +820,17 @@ msgstr "Segmentación de empresa"
 #. module: crm
 #: model:crm.case.stage,name:crm.stage_job5
 msgid "Contract Signed"
-msgstr ""
+msgstr "Contrato firmado"
 
 #. module: crm
 #: wizard_view:caldav.crm.subscribe,init:0
 msgid "Subscribe to Remote ICS"
-msgstr ""
+msgstr "Subcribirse a ICS remotos"
 
 #. module: crm
 #: model:crm.case.category2,name:crm.category_oppor1
 msgid "Existing Business"
-msgstr ""
+msgstr "Negocio existente"
 
 #. module: crm
 #: field:crm.case,probability:0
@@ -837,7 +841,7 @@ msgstr "Probabilidad (%)"
 #. module: crm
 #: model:ir.model,name:crm.model_crm_lead
 msgid "Leads Cases"
-msgstr ""
+msgstr "Casos Oportunidades"
 
 #. module: crm
 #: help:crm.case.section,reply_to:0
@@ -864,7 +868,7 @@ msgstr "Regla del caso"
 #: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor
 #, python-format
 msgid "Opportunity"
-msgstr ""
+msgstr "Oportunidad"
 
 #. module: crm
 #: view:crm.case:0
@@ -874,12 +878,12 @@ msgstr ""
 #: view:crm.lead:0
 #: view:crm.opportunity:0
 msgid "Emails"
-msgstr ""
+msgstr "Emails"
 
 #. module: crm
 #: model:crm.case.category2,name:crm.category_lead7
 msgid "Television"
-msgstr ""
+msgstr "Televisión"
 
 #. module: crm
 #: view:crm.segmentation:0
@@ -889,18 +893,18 @@ msgstr "Parar el proceso"
 #. module: crm
 #: model:crm.case.categ,name:crm.categ_claim1
 msgid "Factual Claims"
-msgstr ""
+msgstr "Reclamaciones objetivas"
 
 #. module: crm
 #: view:crm.phonecall:0
 msgid "Search Phonecalls"
-msgstr ""
+msgstr "Buscar llamadas"
 
 #. module: crm
 #: wizard_button:crm.lead.opportunity_set,create_partner,create:0
 #: wizard_button:crm.phonecall.opportunity_set,create_partner,create:0
 msgid "Continue"
-msgstr ""
+msgstr "Continue"
 
 #. module: crm
 #: field:crm.segmentation,som_interval:0
@@ -915,13 +919,13 @@ msgstr "Valor"
 #. module: crm
 #: help:caldav.crm.export,init,name:0
 msgid "Save in .ics format"
-msgstr ""
+msgstr "Salvar en formato .ics"
 
 #. module: crm
 #: wizard_field:crm.new.send.mail,init,text:0
 #: wizard_field:crm.send.mail,init,text:0
 msgid "Message"
-msgstr ""
+msgstr "Mensaje"
 
 #. module: crm
 #: help:crm.segmentation,exclusif:0
@@ -960,7 +964,7 @@ msgstr ""
 #. module: crm
 #: model:crm.case.category2,name:crm.category_lead6
 msgid "Radio"
-msgstr ""
+msgstr "Radio"
 
 #. module: crm
 #: model:ir.model,name:crm.model_crm_opportunity_assign_wizard
@@ -980,12 +984,13 @@ msgstr "Fecha del disparo"
 #. module: crm
 #: view:crm.case.history:0
 msgid "Search Histories"
-msgstr ""
+msgstr "Buscar en Historial"
 
 #. module: crm
 #: help:crm.case.stage,sequence:0
 msgid "Gives the sequence order when displaying a list of case stages."
 msgstr ""
+"Da el orden de secuencia cuando se muestra un lista de etápas de caso."
 
 #. module: crm
 #: model:crm.case.section,name:crm.section_support3
@@ -993,7 +998,7 @@ msgstr ""
 #: model:ir.ui.menu,name:crm.menu_crm_case_opp
 #: model:process.node,name:crm.process_node_opportunities0
 msgid "Opportunities"
-msgstr ""
+msgstr "Oportunidades"
 
 #. module: crm
 #: help:crm.segmentation,name:0
@@ -1028,6 +1033,8 @@ msgid ""
 "These people will receive a copy of the future communication between partner "
 "and users by email"
 msgstr ""
+"Estas personas recibirán una copia de toda comunicación entre el partner y "
+"los usuarios."
 
 #. module: crm
 #: selection:report.crm.case.section.categ.categ2,month:0
@@ -1035,12 +1042,12 @@ msgstr ""
 #: selection:report.crm.case.section.categ2,month:0
 #: selection:report.crm.case.section.stage,month:0
 msgid "March"
-msgstr ""
+msgstr "Marzo"
 
 #. module: crm
 #: view:crm.case.rule:0
 msgid "Server Action to be Triggered"
-msgstr ""
+msgstr "Acción del servidor a ser ejecutada"
 
 #. module: crm
 #: model:ir.actions.act_window,name:crm.crm_case_rule-act
@@ -1057,13 +1064,13 @@ msgstr ""
 #. module: crm
 #: wizard_field:crm.new.send.mail,init,state:0
 msgid "Set State to"
-msgstr ""
+msgstr "Establecer estado a"
 
 #. module: crm
 #: code:addons/crm/wizard/wizard_crm_send_email.py:0
 #, python-format
 msgid "There is no mail to reply!"
-msgstr ""
+msgstr "Este correo no puede ser contestado"
 
 #. module: crm
 #: wizard_button:crm.job.partner_create,init,confirm:0
@@ -1073,7 +1080,7 @@ msgstr ""
 #: model:ir.actions.wizard,name:crm.wizard_crm_lead_partner_create
 #: model:ir.actions.wizard,name:crm.wizard_crm_phonecall_partner_create
 msgid "Create Partner"
-msgstr ""
+msgstr "Crear empresa"
 
 #. module: crm
 #: selection:crm.segmentation.line,expr_operator:0
@@ -1088,12 +1095,12 @@ msgstr ""
 #. module: crm
 #: view:crm.fundraising:0
 msgid "My Funds"
-msgstr ""
+msgstr "Mis donaciones"
 
 #. module: crm
 #: field:crm.case,partner_mobile:0
 msgid "Mobile"
-msgstr ""
+msgstr "Móvil"
 
 #. module: crm
 #: field:crm.case.rule,name:0
@@ -1114,12 +1121,12 @@ msgstr "Historial del caso"
 #. module: crm
 #: model:crm.case.categ,name:crm.categ_job2
 msgid "Junior Developer"
-msgstr ""
+msgstr "Desarrollador junior"
 
 #. module: crm
 #: view:crm.meeting:0
 msgid "My Meetings"
-msgstr ""
+msgstr "Mis reuniones"
 
 #. module: crm
 #: field:crm.case.categ,name:0
@@ -1129,7 +1136,7 @@ msgstr "Nombre de la categoría de casos"
 #. module: crm
 #: model:crm.case.category2,name:crm.category_claim2
 msgid "Preventive"
-msgstr ""
+msgstr "Preventivo"
 
 #. module: crm
 #: field:crm.case.rule,act_email_cc:0
@@ -1139,7 +1146,7 @@ msgstr "Añadir observadores (CC)"
 #. module: crm
 #: wizard_view:caldav.crm.export,init:0
 msgid "Export ICS"
-msgstr ""
+msgstr "Exportar ICS"
 
 #. module: crm
 #: code:addons/crm/crm_claim.py:0
@@ -1149,7 +1156,7 @@ msgstr ""
 #: code:addons/crm/crm_phonecall.py:0
 #, python-format
 msgid "You can not assign Closed Case."
-msgstr ""
+msgstr "No se puede asignar un caso cerrado."
 
 #. module: crm
 #: help:crm.case.rule,act_remind_partner:0
@@ -1167,7 +1174,7 @@ msgstr ""
 #: view:crm.meeting:0
 #, python-format
 msgid "Meetings"
-msgstr ""
+msgstr "Reuniones"
 
 #. module: crm
 #: view:crm.case.rule:0
@@ -1192,12 +1199,12 @@ msgstr "Fecha límite"
 #: wizard_button:caldav.crm.import,init,end:0
 #: wizard_button:caldav.crm.subscribe,init,end:0
 msgid "_Cancel"
-msgstr ""
+msgstr "Cancelar"
 
 #. module: crm
 #: field:crm.case,category2_id:0
 msgid "Category Name"
-msgstr ""
+msgstr "Nombre de Categoría"
 
 #. module: crm
 #: view:crm.segmentation:0
@@ -1207,7 +1214,7 @@ msgstr "Segmentaciones de empresa"
 #. module: crm
 #: view:crm.meeting:0
 msgid "Recurrency Rule"
-msgstr ""
+msgstr "Regla concurrente"
 
 #. module: crm
 #: model:ir.model,name:crm.model_crm_case_categ
@@ -1221,12 +1228,12 @@ msgstr "Categoría del caso"
 #: view:crm.phonecall:0
 #: wizard_field:crm.send.mail,init,subject:0
 msgid "Subject"
-msgstr ""
+msgstr "Asunto"
 
 #. module: crm
 #: field:crm.meeting,attendees:0
 msgid "Attendees"
-msgstr ""
+msgstr "Asistentes"
 
 #. module: crm
 #: model:ir.module.module,description:crm.module_meta_information
@@ -1281,7 +1288,7 @@ msgstr ""
 #. module: crm
 #: model:process.transition,note:crm.process_transition_leadpartner0
 msgid "Prospect is converting to business partner"
-msgstr ""
+msgstr "El prospecto se convierte a partner"
 
 #. module: crm
 #: view:crm.case.rule:0
@@ -1291,17 +1298,17 @@ msgstr ""
 #. module: crm
 #: view:crm.claim:0
 msgid "Pending Claims"
-msgstr ""
+msgstr "Reclamaciones Pendientes"
 
 #. module: crm
 #: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_categ_stage
 msgid "Cases by Opportunities, Category and Stage"
-msgstr ""
+msgstr "Casos por oportunidades, categoría y etapa"
 
 #. module: crm
 #: model:crm.case.category2,name:crm.category_lead4
 msgid "Print"
-msgstr ""
+msgstr "Imprimir"
 
 #. module: crm
 #: field:crm.case,som:0
@@ -1316,12 +1323,12 @@ msgstr "Grado de satisfacción"
 #: field:report.crm.case.section.categ.categ2,category2_id:0
 #: field:report.crm.case.section.categ2,category2_id:0
 msgid "Type"
-msgstr ""
+msgstr "Tipo"
 
 #. module: crm
 #: view:crm.job:0
 msgid "Candidate Refused"
-msgstr ""
+msgstr "Candidato rechazado"
 
 #. module: crm
 #: view:crm.segmentation:0
@@ -1351,7 +1358,7 @@ msgstr "Fecha creación"
 #: view:crm.phonecall:0
 #: model:process.node,name:crm.process_node_meeting0
 msgid "Meeting"
-msgstr ""
+msgstr "Reunión"
 
 #. module: crm
 #: view:crm.case.rule:0
@@ -1372,12 +1379,12 @@ msgstr "Cambiar a borrador"
 #. module: crm
 #: model:ir.model,name:crm.model_report_crm_case_section_categ_categ2
 msgid "Cases by section, Category and Category2"
-msgstr ""
+msgstr "Casos por sección, categoría y categoría2"
 
 #. module: crm
 #: model:crm.case.stage,name:crm.stage_oppor6
 msgid "Closed Won"
-msgstr ""
+msgstr "Cerrado-Ganado"
 
 #. module: crm
 #: model:ir.actions.act_window,name:crm.act_crm_case_categ_crm_case_opened
@@ -1396,7 +1403,7 @@ msgstr "Casos abiertos"
 #: field:report.crm.case.section.categ2,stage_id:0
 #: field:report.crm.case.section.stage,stage_id:0
 msgid "Stage"
-msgstr ""
+msgstr "Fase"
 
 #. module: crm
 #: constraint:ir.ui.view:0
@@ -1409,24 +1416,26 @@ msgid ""
 "If the active field is set to true, it will allow you to hide the case "
 "section without removing it."
 msgstr ""
+"Si el campo activo esta en verdadero, te permitira esconder la sección del "
+"caso sin removerla"
 
 #. module: crm
 #: model:crm.case.categ,name:crm.categ_fund2
 msgid "Learning And Education"
-msgstr ""
+msgstr "Aprendizaje y educación"
 
 #. module: crm
 #: wizard_view:crm.phonecall.opportunity_set,create_partner:0
 #: wizard_view:crm.phonecall.partner_create,init:0
 msgid "Are you sure you want to create a partner based on this phonecall ?"
-msgstr ""
+msgstr "Estas seguro que deseas crear una empresa basado en esta llamada?"
 
 #. module: crm
 #: view:crm.case.stage:0
 #: model:ir.actions.act_window,name:crm.crm_case_stage_act
 #: model:ir.ui.menu,name:crm.menu_crm_case_stage_act
 msgid "Stages"
-msgstr ""
+msgstr "Etapas"
 
 #. module: crm
 #: wizard_field:crm.case.opportunity.partner_opportunity,init,planned_revenue:0
index 7f79863..5a16207 100644 (file)
@@ -8,13 +8,13 @@ msgstr ""
 "Project-Id-Version: openobject-addons\n"
 "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
 "POT-Creation-Date: 2010-01-05 05:59+0000\n"
-"PO-Revision-Date: 2010-03-22 18:16+0000\n"
+"PO-Revision-Date: 2010-03-30 20:39+0000\n"
 "Last-Translator: smii <Unknown>\n"
 "Language-Team: Finnish <fi@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-03-30 03:58+0000\n"
+"X-Launchpad-Export-Date: 2010-03-31 03:55+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
 #. module: crm
@@ -1942,7 +1942,7 @@ msgstr ""
 #. module: crm
 #: model:crm.case.category2,name:crm.category_job1
 msgid "Graduate"
-msgstr ""
+msgstr "Valmistua"
 
 #. module: crm
 #: wizard_view:crm.job.meeting_set,init:0
@@ -1951,11 +1951,13 @@ msgid ""
 "Note that you can also use the calendar view to graphically schedule your "
 "next meeting."
 msgstr ""
+"Huomaa, että voit käyttää kalenterinäkymää myös suunnitellaksesi graafisesti "
+"seuraavan kokouksesi."
 
 #. module: crm
 #: view:crm.lead:0
 msgid "Leads Tree"
-msgstr ""
+msgstr "Opaspuu"
 
 #. module: crm
 #: field:crm.meeting,caldav_url:0
@@ -1965,7 +1967,7 @@ msgstr ""
 #. module: crm
 #: view:crm.meeting:0
 msgid "Attendee"
-msgstr ""
+msgstr "Osanottaja"
 
 #. module: crm
 #: code:addons/crm/crm.py:0
@@ -1979,12 +1981,12 @@ msgstr ""
 #: model:ir.actions.act_window,name:crm.crm_case_categ_phone_incoming0
 #: model:ir.ui.menu,name:crm.menu_crm_case_phone_inbound
 msgid "Inbound"
-msgstr ""
+msgstr "Saapuva"
 
 #. module: crm
 #: constraint:crm.case.section:0
 msgid "Error ! You cannot create recursive sections."
-msgstr ""
+msgstr "Virhe! Et voi luoda rekursiivisia osioita."
 
 #. module: crm
 #: model:ir.ui.menu,name:crm.menu_crm
@@ -2004,7 +2006,7 @@ msgstr ""
 #: view:report.crm.case.section.categ2:0
 #: view:report.crm.case.section.stage:0
 msgid "This Year"
-msgstr ""
+msgstr "Tänä vuonna"
 
 #. module: crm
 #: field:crm.case.rule,act_remind_partner:0
@@ -2022,7 +2024,7 @@ msgstr "Korkein"
 #. module: crm
 #: view:crm.job:0
 msgid "Contract Data"
-msgstr ""
+msgstr "Sopimuksen tiedot (data)"
 
 #. module: crm
 #: selection:crm.case.rule,trg_date_range_type:0
@@ -2037,17 +2039,17 @@ msgstr ""
 #. module: crm
 #: field:crm.menu.config_wizard,document_ics:0
 msgid "Shared Calendar"
-msgstr ""
+msgstr "Jaettu kalenteri"
 
 #. module: crm
 #: field:crm.case.section,reply_to:0
 msgid "Reply-To"
-msgstr ""
+msgstr "Vastaus osoitteeseen"
 
 #. module: crm
 #: model:ir.ui.menu,name:crm.menu_action_report_crm_case_lead_categ
 msgid "Cases by Leads and Type"
-msgstr ""
+msgstr "Tapahtumat johdon ja tyypin mukaan"
 
 #. module: crm
 #: selection:crm.case.rule,trg_date_range_type:0
@@ -2058,12 +2060,12 @@ msgstr "Minuuttia"
 #: field:report.crm.case.section.categ2,amount_revenue:0
 #: field:report.crm.case.section.stage,amount_revenue:0
 msgid "Est.Revenue"
-msgstr ""
+msgstr "Arvioitu tuotto"
 
 #. module: crm
 #: model:crm.case.stage,name:crm.stage_job1
 msgid "Initial Jobs Demand"
-msgstr ""
+msgstr "Alkutöiden tarve"
 
 #. module: crm
 #: field:crm.case.rule,trg_priority_to:0
@@ -2078,12 +2080,12 @@ msgstr ""
 #. module: crm
 #: view:crm.claim:0
 msgid "Claims Info"
-msgstr ""
+msgstr "Vaade tiedot"
 
 #. module: crm
 #: field:crm.case.category2,name:0
 msgid "Case Category2 Name"
-msgstr ""
+msgstr "Tapahtuma kategoria2 nimi"
 
 #. module: crm
 #: wizard_view:crm.lead.opportunity_set,opportunity:0
@@ -2091,13 +2093,13 @@ msgstr ""
 #: model:ir.actions.wizard,name:crm.wizard_crm_lead_opportunity_set
 #: model:ir.actions.wizard,name:crm.wizard_crm_phonecall_opportunity_set
 msgid "Convert To Opportunity"
-msgstr ""
+msgstr "Muunna mahdollisuudeksi"
 
 #. module: crm
 #: model:crm.case.stage,name:crm.stage_phone2
 #: view:crm.phonecall:0
 msgid "Held"
-msgstr ""
+msgstr "Pysäytetty"
 
 #. module: crm
 #: view:crm.case:0
@@ -2113,7 +2115,7 @@ msgstr ""
 #. module: crm
 #: selection:crm.new.send.mail,init,state:0
 msgid "Unchanged"
-msgstr ""
+msgstr "Muuttamaton"
 
 #. module: crm
 #: wizard_view:crm.job.partner_create,init:0
@@ -2122,7 +2124,7 @@ msgstr ""
 #: wizard_view:crm.phonecall.opportunity_set,create_partner:0
 #: wizard_view:crm.phonecall.partner_create,init:0
 msgid "Convert To Partner"
-msgstr ""
+msgstr "Muunna kumppaniksi"
 
 #. module: crm
 #: field:crm.case.rule,trg_state_from:0
@@ -2148,17 +2150,17 @@ msgstr "Prioriteetti"
 #. module: crm
 #: view:crm.opportunity:0
 msgid "Source"
-msgstr ""
+msgstr "Lähde"
 
 #. module: crm
 #: field:crm.meeting,location:0
 msgid "Location"
-msgstr ""
+msgstr "Sijainti"
 
 #. module: crm
 #: view:crm.fundraising:0
 msgid "Payment Mode"
-msgstr ""
+msgstr "Maksutapa"
 
 #. module: crm
 #: help:crm.case.rule,trg_date_range:0
@@ -2173,7 +2175,7 @@ msgstr ""
 #: view:crm.job:0
 #: view:crm.lead:0
 msgid "Stage: "
-msgstr ""
+msgstr "Vaihe: "
 
 #. module: crm
 #: view:crm.case.section:0
@@ -2183,7 +2185,7 @@ msgstr "Tapahtumaosio"
 #. module: crm
 #: model:process.node,note:crm.process_node_meeting0
 msgid "Schedule a normal or phone meeting"
-msgstr ""
+msgstr "Ajoita normaali puhelinkokous"
 
 #. module: crm
 #: code:addons/crm/crm.py:0
@@ -2194,7 +2196,7 @@ msgstr ""
 #: code:addons/crm/crm_phonecall.py:0
 #, python-format
 msgid "Error !"
-msgstr ""
+msgstr "Virhe!"
 
 #. module: crm
 #: view:crm.case.rule:0
@@ -2204,7 +2206,7 @@ msgstr "Muutettavat kentät"
 #. module: crm
 #: model:crm.case.category2,name:crm.category_lead1
 msgid "Telesales"
-msgstr ""
+msgstr "Puhelinmyynnit"
 
 #. module: crm
 #: model:ir.ui.menu,name:crm.menu_crm_case_history-act_main
@@ -2214,7 +2216,7 @@ msgstr "Tapahtumahistoriat"
 #. module: crm
 #: field:crm.case,create_date:0
 msgid "Created"
-msgstr ""
+msgstr "Luotu"
 
 #. module: crm
 #: view:crm.lead:0
@@ -2231,12 +2233,12 @@ msgstr "Segmentointirivi"
 #: wizard_field:crm.opportunity.reschedule_phone_call,init,deadline:0
 #: view:crm.phonecall:0
 msgid "Planned Date"
-msgstr ""
+msgstr "Suunniteltu päivämäärä"
 
 #. module: crm
 #: selection:crm.case.rule,trg_date_range_type:0
 msgid "Hours"
-msgstr ""
+msgstr "Tunnit"
 
 #. module: crm
 #: help:crm.menu.config_wizard,phonecall:0
@@ -2266,7 +2268,7 @@ msgstr ""
 #: selection:report.crm.case.section.categ2,month:0
 #: selection:report.crm.case.section.stage,month:0
 msgid "July"
-msgstr ""
+msgstr "heinäkuu"
 
 #. module: crm
 #: model:crm.case.stage,name:crm.stage_oppor1
@@ -2276,7 +2278,7 @@ msgstr ""
 #. module: crm
 #: field:crm.case,partner_name2:0
 msgid "Employee Email"
-msgstr ""
+msgstr "Työntekijän sähköposti"
 
 #. module: crm
 #: model:ir.model,name:crm.model_crm_meeting
@@ -2286,17 +2288,17 @@ msgstr ""
 #. module: crm
 #: view:crm.job:0
 msgid "Job Info"
-msgstr ""
+msgstr "Työtehtävän tiedot"
 
 #. module: crm
 #: view:crm.meeting:0
 msgid "Cancel Meeting"
-msgstr ""
+msgstr "Peruuta kokous/tapaaminen"
 
 #. module: crm
 #: model:crm.case.section,name:crm.section_support0
 msgid "Jobs"
-msgstr ""
+msgstr "Työpaikat"
 
 #. module: crm
 #: view:crm.case.rule:0
@@ -2307,7 +2309,7 @@ msgstr ""
 #: model:crm.case.stage,name:crm.stage_phone3
 #: view:crm.phonecall:0
 msgid "Not Held"
-msgstr ""
+msgstr "Ei pidätetty"
 
 #. module: crm
 #: field:crm.case.rule,act_mail_to_user:0
@@ -2317,12 +2319,12 @@ msgstr "Sähköposti vastaavalle"
 #. module: crm
 #: view:crm.job:0
 msgid "Jobs - Recruitment Form"
-msgstr ""
+msgstr "Työpaikat - Rekrytointilomake"
 
 #. module: crm
 #: model:crm.case.category2,name:crm.category_claim1
 msgid "Corrective"
-msgstr ""
+msgstr "Tarkennus"
 
 #. module: crm
 #: model:ir.model,name:crm.model_crm_opportunity
@@ -2345,7 +2347,7 @@ msgstr "Lähetettävän sähköpostin malli"
 #: field:report.crm.case.section.categ2,month:0
 #: field:report.crm.case.section.stage,month:0
 msgid "Month"
-msgstr ""
+msgstr "Kuukausi"
 
 #. module: crm
 #: model:crm.case.section,name:crm.section_support2
@@ -2361,7 +2363,7 @@ msgstr ""
 #: wizard_button:crm.new.send.mail,init,send:0
 #: wizard_button:crm.send.mail,init,send:0
 msgid "Send Email"
-msgstr ""
+msgstr "Lähetä sähköpostia"
 
 #. module: crm
 #: wizard_view:crm.new.send.mail,init:0
@@ -2371,7 +2373,7 @@ msgstr ""
 #. module: crm
 #: model:crm.case.category2,name:crm.categ2_fund3
 msgid "Credit Card"
-msgstr ""
+msgstr "Luottokortti"
 
 #. module: crm
 #: code:addons/crm/crm.py:0
@@ -2380,6 +2382,8 @@ msgid ""
 "No E-Mail ID Found for the Responsible Partner or missing reply address in "
 "section!"
 msgstr ""
+"Ei löydettyä sähköposti ID:tä vastaavalle kumppanille tai puuttuva "
+"vastausosoite tässä osiossa!"
 
 #. module: crm
 #: view:crm.job:0
@@ -2389,18 +2393,18 @@ msgstr ""
 #. module: crm
 #: field:crm.case.history,log_id:0
 msgid "Log"
-msgstr ""
+msgstr "Loki"
 
 #. module: crm
 #: help:crm.menu.config_wizard,fund:0
 msgid ""
 "This may help associations in their fund raising process and tracking."
-msgstr ""
+msgstr "Tämä saattaa auttaa yhteisöjä varainhankinnassa ja sen seurannassa."
 
 #. module: crm
 #: view:crm.meeting:0
 msgid "Reset to Unconfirmed"
-msgstr ""
+msgstr "Palauta vahvistamattomaksi"
 
 #. module: crm
 #: view:crm.case:0
@@ -2415,7 +2419,7 @@ msgstr "Seuraajien Sähköpostit"
 #. module: crm
 #: view:crm.case.rule:0
 msgid "Note"
-msgstr ""
+msgstr "Huomautus"
 
 #. module: crm
 #: field:report.crm.case.section.categ.categ2,delay_close:0
@@ -2423,7 +2427,7 @@ msgstr ""
 #: field:report.crm.case.section.categ2,delay_close:0
 #: field:report.crm.case.section.stage,delay_close:0
 msgid "Delay Close"
-msgstr ""
+msgstr "Viivytä sulkemista"
 
 #. module: crm
 #: selection:crm.case,priority:0
@@ -2431,7 +2435,7 @@ msgstr ""
 #: selection:crm.case.rule,trg_priority_from:0
 #: selection:crm.case.rule,trg_priority_to:0
 msgid "Low"
-msgstr ""
+msgstr "Matala"
 
 #. module: crm
 #: field:crm.case,date_closed:0
@@ -2444,23 +2448,23 @@ msgstr ""
 #: selection:report.crm.case.section.categ2,state:0
 #: selection:report.crm.case.section.stage,state:0
 msgid "Closed"
-msgstr ""
+msgstr "Suljettu"
 
 #. module: crm
 #: view:crm.job:0
 msgid "Candidate Name2"
-msgstr ""
+msgstr "Ehdokasnimi 2"
 
 #. module: crm
 #: code:addons/crm/crm.py:0
 #, python-format
 msgid "cancel"
-msgstr ""
+msgstr "Peruuta"
 
 #. module: crm
 #: model:crm.case.categ,name:crm.categ_meet2
 msgid "Internal Meeting"
-msgstr ""
+msgstr "Sisäinen kokous"
 
 #. module: crm
 #: view:crm.case:0
@@ -2469,7 +2473,7 @@ msgstr ""
 #: view:crm.lead:0
 #: view:crm.opportunity:0
 msgid "Events"
-msgstr ""
+msgstr "Tapahtumat"
 
 #. module: crm
 #: help:crm.menu.config_wizard,lead:0
@@ -2477,6 +2481,8 @@ msgid ""
 "Allows you to track and manage leads which are pre-sales requests or "
 "contacts, the very first contact with a customer request."
 msgstr ""
+"Sallii sinun seuraavan ja hallinoimaan oppaita jotka ovat esi-myynti "
+"pyyntöjä tai yhteystietoja. Ensimmäinen yhteydenotto asiakkaan pyyntöön."
 
 #. module: crm
 #: help:crm.case,som:0
@@ -2494,7 +2500,7 @@ msgstr ""
 #. module: crm
 #: model:crm.case.categ,name:crm.categ_meet1
 msgid "Customer Meeting"
-msgstr ""
+msgstr "Asiakastapaaminen"
 
 #. module: crm
 #: wizard_field:crm.new.send.mail,init,doc2:0
@@ -2509,7 +2515,7 @@ msgstr ""
 #. module: crm
 #: view:crm.job:0
 msgid "Degree"
-msgstr ""
+msgstr "Tutkinto"
 
 #. module: crm
 #: wizard_field:crm.new.send.mail,init,doc1:0
@@ -2525,7 +2531,7 @@ msgstr ""
 #: model:ir.ui.menu,name:crm.menu_crm_case_phone
 #, python-format
 msgid "Phone Calls"
-msgstr ""
+msgstr "Puhelinsoitot"
 
 #. module: crm
 #: help:crm.case,active:0
@@ -2547,19 +2553,19 @@ msgstr "Asiahistoria"
 #. module: crm
 #: field:crm.case,partner_phone:0
 msgid "Phone"
-msgstr ""
+msgstr "Puhelin"
 
 #. module: crm
 #: model:crm.case.category2,name:crm.categ2_fund2
 msgid "Cheque"
-msgstr ""
+msgstr "Šekki"
 
 #. module: crm
 #: field:crm.case,active:0
 #: field:crm.case.rule,active:0
 #: field:crm.case.section,active:0
 msgid "Active"
-msgstr ""
+msgstr "Aktiivinen"
 
 #. module: crm
 #: help:crm.case.rule,act_remind_attach:0
@@ -2578,7 +2584,7 @@ msgstr "Pakollinen Määritelmä"
 #. module: crm
 #: selection:crm.segmentation.line,expr_operator:0
 msgid ">"
-msgstr ""
+msgstr ">"
 
 #. module: crm
 #: view:crm.job:0
@@ -2588,12 +2594,12 @@ msgstr ""
 #. module: crm
 #: model:ir.actions.wizard,name:crm.wizard_crm_send_mail
 msgid "Send Mail"
-msgstr ""
+msgstr "Lähetä sähköpostia"
 
 #. module: crm
 #: selection:crm.case.rule,trg_date_range_type:0
 msgid "Months"
-msgstr ""
+msgstr "Kuukautta"
 
 #. module: crm
 #: view:crm.claim.assign_wizard:0
@@ -2616,7 +2622,7 @@ msgstr ""
 #. module: crm
 #: model:process.node,note:crm.process_node_opportunities0
 msgid "When a real project/opportunity is detected"
-msgstr ""
+msgstr "Kun todellinen projekti/mahdollisuus on löydetty"
 
 #. module: crm
 #: wizard_view:crm.job.partner_create,init:0
@@ -2627,7 +2633,7 @@ msgstr ""
 #: wizard_field:crm.lead.opportunity_set,create_partner,action:0
 #: wizard_field:crm.phonecall.opportunity_set,create_partner,action:0
 msgid "Action"
-msgstr ""
+msgstr "Toiminto"
 
 #. module: crm
 #: code:addons/crm/crm_claim.py:0
@@ -2638,7 +2644,7 @@ msgstr ""
 #: model:ir.ui.menu,name:crm.menu_crm_case_claims
 #, python-format
 msgid "Claims"
-msgstr ""
+msgstr "Vaateet"
 
 #. module: crm
 #: field:crm.segmentation,som_interval_decrease:0
@@ -2653,7 +2659,7 @@ msgstr ""
 #. module: crm
 #: model:ir.model,name:crm.model_crm_case_category2
 msgid "Category2 of case"
-msgstr ""
+msgstr "tapahtuman kategoria2"
 
 #. module: crm
 #: wizard_field:crm.new.send.mail,init,to:0
@@ -2669,29 +2675,29 @@ msgstr ""
 #. module: crm
 #: model:ir.ui.menu,name:crm.menu_presale
 msgid "Sales"
-msgstr ""
+msgstr "Myynnit"
 
 #. module: crm
 #: view:crm.case:0
 #: view:crm.phonecall:0
 msgid "General"
-msgstr ""
+msgstr "Yleiset"
 
 #. module: crm
 #: model:crm.case.stage,name:crm.stage_lead2
 msgid "Assigned"
-msgstr ""
+msgstr "Määrätty"
 
 #. module: crm
 #: model:crm.case.stage,name:crm.stage_lead5
 msgid "Recycled"
-msgstr ""
+msgstr "Kierrätetty"
 
 #. module: crm
 #: model:crm.case.categ,name:crm.categ_lead8
 #: model:crm.case.categ,name:crm.categ_oppor8
 msgid "Other"
-msgstr ""
+msgstr "Muu"
 
 #. module: crm
 #: view:crm.case:0
@@ -2701,7 +2707,7 @@ msgstr ""
 #: selection:crm.new.send.mail,init,state:0
 #: view:crm.opportunity:0
 msgid "Done"
-msgstr ""
+msgstr "Valmis"
 
 #. module: crm
 #: field:crm.segmentation,som_interval_max:0
@@ -2732,7 +2738,7 @@ msgstr ""
 #: selection:report.crm.case.section.stage,state:0
 #, python-format
 msgid "Open"
-msgstr ""
+msgstr "Avoin"
 
 #. module: crm
 #: selection:crm.meeting,class:0
@@ -2776,19 +2782,19 @@ msgstr ""
 #: field:crm.opportunity.assign_wizard,user_id:0
 #: field:crm.phonecall.assign_wizard,user_id:0
 msgid "Responsible"
-msgstr ""
+msgstr "Vastuullinen"
 
 #. module: crm
 #: model:crm.case.stage,name:crm.stage_claim4
 #: model:crm.case.stage,name:crm.stage_meet3
 msgid "Invalid"
-msgstr ""
+msgstr "Virheellinen"
 
 #. module: crm
 #: wizard_button:crm.job.meeting_set,init,order:0
 #: wizard_button:crm.phonecall.meeting_set,init,order:0
 msgid "Set Meeting"
-msgstr ""
+msgstr "Aseta kokous"
 
 #. module: crm
 #: field:crm.menu.config_wizard,meeting:0
index 3a7bf18..76a9f9b 100755 (executable)
@@ -34,7 +34,7 @@ import time, socket
 email_re = re.compile(r"([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6})")
 case_re = re.compile(r"\[([0-9]+)\]", re.UNICODE)
 command_re = re.compile("^Set-([a-z]+) *: *(.+)$", re.I + re.UNICODE)
-reference_re = re.compile("<.*-tinycrm-(\\d+)@(.*)>", re.UNICODE)
+reference_re = re.compile("<.*-openobject-(\\d+)@(.*)>", re.UNICODE)
 
 priorities = {
     '1': '1 (Highest)', 
@@ -157,25 +157,41 @@ class email_parser(object):
             'partner_id': adr[0].get('partner_id', False) and adr[0]['partner_id'][0] or False
         }
 
+    def _to_decode(self, s, charsets):
+       for charset in charsets:
+           if charset:
+               try:
+                   return s.decode(charset)
+               except UnicodeError:  
+                    pass         
+       try:
+           return s.decode('ascii')
+       except UnicodeError:
+           return s 
+
     def _decode_header(self, s):
         from email.Header import decode_header
-        s = decode_header(s)
-        return ''.join(map(lambda x:x[0].decode(x[1] or 'ascii', 'replace'), s))
+        s = decode_header(s)        
+        return ''.join(map(lambda x:self._to_decode(x[0], [x[1]]), s))
 
     def msg_new(self, msg):
         message = self.msg_body_get(msg)
+        msg_subject = self._decode_header(msg['Subject'])
+        msg_from = self._decode_header(msg['From'])
+        msg_cc = self._decode_header(msg['Cc'] or '')
+        
         data = {
-            'name': self._decode_header(msg['Subject']), 
-            'email_from': self._decode_header(msg['From']), 
-            'email_cc': self._decode_header(msg['Cc'] or ''),             
+            'name': msg_subject, 
+            'email_from': msg_from, 
+            'email_cc': msg_cc,             
             'user_id': False, 
             'description': message['body'], 
         }
-        data.update(self.partner_get(self._decode_header(msg['From'])))
+        data.update(self.partner_get(msg_from))
 
         try:
             id = self.rpc(self.model, 'create', data)
-            self.rpc(self.model, 'history', [id], 'Receive', True, msg['From'], message['body'])
+            self.rpc(self.model, 'history', [id], 'Receive', True, False, message['body'], msg['From'])
             #self.rpc(self.model, 'case_open', [id])
         except Exception, e:
             if getattr(e, 'faultCode', '') and 'AccessError' in e.faultCode:
@@ -222,7 +238,7 @@ class email_parser(object):
             if part.get_content_maintype()=='text':
                 buf = part.get_payload(decode=True)
                 if buf:
-                    txt = buf.decode(part.get_charsets()[0] or 'ascii', 'replace')
+                    txt = self._to_decode(buf, part.get_charsets())
                     txt = re.sub("<(\w)>", replace, txt)
                     txt = re.sub("<\/(\w)>", replace, txt)
                 if txt and part.get_content_subtype() == 'plain':
@@ -290,7 +306,7 @@ class email_parser(object):
 
         self.rpc(self.model, act, [id])
         self.rpc(self.model, 'write', [id], data)
-        self.rpc(self.model, 'history', [id], 'Receive', True, details=body['body'], email_from=msg['From'])
+        self.rpc(self.model, 'history', [id], 'Receive', True, False, body['body'], msg['From'])
         return id
 
     def msg_send(self, msg, emails, priority=None):
@@ -322,12 +338,16 @@ class email_parser(object):
         #    'description':body, 
         #}
         #self.rpc(self.model, 'write', [id], data)
-        self.rpc(self.model, 'history', [id], 'Receive', True, details=message['body'], email_from=msg['From'])
+        self.rpc(self.model, 'history', [id], 'Receive', True, False, message['body'], msg['From'])
         return id
 
     def msg_test(self, msg, case_str):
         if not case_str:
             return (False, False)
+        res = self.rpc(self.model, 'search', [('id', '=', int(case_str))])        
+        if not res:
+            return (False, False)
+        
         emails = self.rpc(self.model, 'emails_get', int(case_str))
         return (int(case_str), emails)
 
@@ -336,9 +356,9 @@ class email_parser(object):
         if case_str:
             case_str = case_str.group(1)
         else:
-            case_str = case_re.search(msg.get('Subject', ''))
+            case_str = case_re.search(msg.get('Subject', ''))            
             if case_str:
-                case_str = case_str.group(1)
+                case_str = case_str.group(1)            
         (case_id, emails) = self.msg_test(msg, case_str)
         if case_id:
             if emails[0] and self.email_get(emails[0])==self.email_get(self._decode_header(msg['From'])):
index ce16739..1f1e12d 100644 (file)
@@ -44,23 +44,12 @@ class crm_send_new_email(osv.osv_memory):
                 }
 
     def action_cancel(self, cr, uid, ids, context=None):
-        """
-        Closes Phonecall to Opportunity form
-        @param self: The object pointer
-        @param cr: the current row, from the database cursor,
-        @param uid: the current user’s ID for security checks,
-        @param ids: List of Phonecall to Opportunity's IDs
-        @param context: A standard dictionary for contextual values
+        """ Closes Phonecall to Opportunity form
         """
         return {'type':'ir.actions.act_window_close'}
 
     def action_send(self, cr, uid, ids, context=None):
         """ This sends an email to ALL the addresses of the selected partners.
-        @param self: The object pointer
-        @param cr: the current row, from the database cursor,
-        @param uid: the current user’s ID for security checks,
-        @param ids: List of Phonecall to Opportunity's IDs
-        @param context: A standard dictionary for contextual values
         """
         if not context:
             context = {}
@@ -90,18 +79,19 @@ class crm_send_new_email(osv.osv_memory):
 
             if case.user_id.signature:
                 body += '\n\n%s' % (case.user_id.signature)
-
-            case_pool._history(cr, uid, [case], _('Send'), history=True, email=data['email_to'], details=body)
+            body = case_pool.format_body(body)
             email_from = data.get('email_from', False)
+            case_pool._history(cr, uid, [case], _('Send'), history=True, email=data['email_to'], details=body, email_from=email_from)
+            
             flag = tools.email_send(
                 email_from,
                 emails,
                 data['subject'],
-                case_pool.format_body(body),
+                body,
                 attach=attach,
                 reply_to=case.section_id.reply_to,
-                openobject_id=str(case.id),                
-            )           
+                openobject_id=str(case.id),
+            )
             if flag:                
                 if data['state'] == 'unchanged':
                     pass
@@ -118,18 +108,12 @@ class crm_send_new_email(osv.osv_memory):
 #                raise osv.except_osv(_('Email!'), ("Email Successfully Sent"))
 #            else:
 #                raise osv.except_osv(_('Warning!'), _("Email not sent !"))
+
         return {}
 
     def default_get(self, cr, uid, fields, context=None):
         """
         This function gets default values
-        @param self: The object pointer
-        @param cr: the current row, from the database cursor,
-        @param uid: the current user’s ID for security checks,
-        @param fields: List of fields for default value
-        @param context: A standard dictionary for contextual values
-
-        @return : default values of fields.
         """
         if not context:
             context = {}
@@ -151,7 +135,8 @@ class crm_send_new_email(osv.osv_memory):
             if 'email_to' in fields:
                 res.update({'email_to': case.email_from})
             if 'email_from' in fields:
-                res.update({'email_from': (case.user_id and case.user_id.address_id and \
+                res.update({'email_from': (case.section_id and case.section_id.reply_to) or \
+                            (case.user_id and case.user_id.address_id and \
                             case.user_id.address_id.email) or tools.config.get('email_from',False)})
             if 'subject' in fields:
                 res.update({'subject': '[%s] %s' %(str(case.id), case.name or '')}) 
@@ -166,13 +151,6 @@ class crm_send_new_email(osv.osv_memory):
     def get_reply_defaults(self, cr, uid, fields, context=None):
         """
         This function gets default values for reply mail
-        @param self: The object pointer
-        @param cr: the current row, from the database cursor,
-        @param uid: the current user’s ID for security checks,
-        @param fields: List of fields for default value
-        @param context: A standard dictionary for contextual values
-
-        @return : default values of fields.
         """
         hist_obj = self.pool.get('crm.case.history')
         res_ids = context and context.get('active_ids', []) or []
@@ -181,24 +159,25 @@ class crm_send_new_email(osv.osv_memory):
             model = hist.log_id.model_id.model
             model_pool = self.pool.get(model)
             case = model_pool.browse(cr, uid, hist.log_id.res_id)
-            if 'email_to' in fields and hist.email_to:
-                res.update({'email_to': hist.email_to})
+            if 'email_to' in fields:
+                res.update({'email_to': case.email_from or hist.email_from or False})
             if 'email_from' in fields:
-                res.update({'email_from': (case.user_id and case.user_id.address_id and \
-                            case.user_id.address_id.email) or tools.config.get('email_from',False)})
+                res.update({'email_from': (case.section_id and case.section_id.reply_to) or \
+                            (case.user_id and case.user_id.address_id and \
+                            case.user_id.address_id.email) or hist.email_to or tools.config.get('email_from',False)})
             if 'text' in fields:
                 header = '-------- Original Message --------'                
-                sender = 'From: %s' %(hist.email_from or tools.config.get('email_from',False))                
-                to = 'To: %s' % (hist.email_to)
-                sentdate = 'Sent: %s' % (hist.date)
+                sender = 'From: %s' %(hist.email_from or '')                
+                to = 'To: %s' % (hist.email_to or '')
+                sentdate = 'Date: %s' % (hist.date)
                 desc = '\n%s'%(hist.description)
                 original = [header, sender, to, sentdate, desc]
                 original = '\n'.join(original)
-                res.update({'text': '\n\n%s'%(original)})
+                res['text']=original
             if 'subject' in fields:
                 res.update({'subject': '[%s] %s' %(str(case.id), case.name or '')}) 
-            #if 'state' in fields:
-            #    res.update({'state': 'pending'})       
+            if 'state' in fields:
+                res['state']='pending'
         return res
 
     def view_init(self, cr, uid, fields_list, context=None):
index 61c7702..5576945 100644 (file)
@@ -4,12 +4,12 @@
 
 <!-- Send New Mail view -->
     
-        <record model="ir.ui.view" id="crm_send_new_mail_view">
-            <field name="name">crm.new.send.mail.form</field>
+        <record model="ir.ui.view" id="crm_send_mail_view">
+            <field name="name">crm.send.mail.form</field>
             <field name="model">crm.send.mail</field>
             <field name="type">form</field>
             <field name="arch" type="xml">
-                <form string="Send New Mail" col="2">
+                <form string="Send Mail" col="2">
                     <field name="email_from" />
                        <field name="email_to" />
                        <field name="email_cc" />
 <!-- Send New Mail action -->
 
         <record model="ir.actions.act_window" id="action_crm_send_mail">
-            <field name="name">Send New Mail</field>
+            <field name="name">Send Mail</field>
             <field name="res_model">crm.send.mail</field>
             <field name="view_type">form</field>
             <field name="view_mode">form</field>
-            <field name="view_id" ref="crm_send_new_mail_view"/>
+            <field name="view_id" ref="crm_send_mail_view"/>
             <field name="target">new</field>
-        </record>
-       
-       
-       <!-- Reply to Mail view -->
-    
-        <record model="ir.ui.view" id="crm_reply_mail_view">
-            <field name="name">crm.mail.reply.form</field>
-            <field name="model">crm.send.mail</field>
-            <field name="type">form</field>
-            <field name="arch" type="xml">
-                <form string="Reply to last Mail" col="2">
-                    <field name="email_from" />
-                       <field name="email_to" />
-                       <field name="email_cc" />
-                       <field name="subject" />                        
-                       <field name="doc1" />
-                       <field name="doc2" />
-                       <field name="doc3" />
-                    <separator string="" colspan="4"/>
-                    <field name="text" nolabel="1" colspan="4"/>
-                       <separator string=" " colspan="4"/>
-                    <group colspan="4" col="3" >
-                       <label string=" " />
-                        <button name="action_cancel" string="_Cancel" icon="gtk-cancel" special="cancel" />
-                        <button name="action_send" type="object" string="_Send Reply" icon="gtk-go-forward" />
-                    </group>
-                </form>
-            </field>
-        </record>
-
-<!-- Reply to Mail action -->
-
-        <record model="ir.actions.act_window" id="action_crm_reply_mail">
-            <field name="name">Reply to last Mail</field>
-            <field name="res_model">crm.send.mail</field>
-            <field name="view_type">form</field>
-            <field name="view_mode">form</field>
-            <field name="view_id" ref="crm_reply_mail_view"/>
-            <field name="target">new</field>
-        </record>
-       
+        </record>      
     </data>
 </openerp>   
index 9cde61f..46400fa 100644 (file)
                                    <field name="description" colspan="4" nolabel="1"/>
                                    <button colspan="4"
                                        string="Reply to Last Email"
-                                       name="%(crm.action_crm_reply_mail)d"
+                                       name="%(crm.action_crm_send_mail)d"
                                        context="{'mail':'reply', 'model': 'hr.applicant'}"
                                        icon="gtk-undo" type="action" />
                                </form>
index e17c673..052052b 100644 (file)
@@ -7,13 +7,13 @@ msgstr ""
 "Project-Id-Version: OpenERP Server 5.0.4\n"
 "Report-Msgid-Bugs-To: support@openerp.com\n"
 "POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2008-11-01 16:03+0000\n"
-"Last-Translator: Sergei Kostigoff <sergei.kostigoff@gmail.com>\n"
+"PO-Revision-Date: 2010-03-30 10:33+0000\n"
+"Last-Translator: Nikolay Chesnokov <chesnokov_n@msn.com>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-03-30 04:05+0000\n"
+"X-Launchpad-Export-Date: 2010-03-31 03:55+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
 #. module: idea
@@ -44,7 +44,7 @@ msgstr "Мои идеи"
 #. module: idea
 #: constraint:ir.actions.act_window:0
 msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Недопустимое имя модели в определении действия"
 
 #. module: idea
 #: selection:idea.idea,my_vote:0
@@ -119,7 +119,7 @@ msgstr "Категория идеи"
 #. module: idea
 #: model:ir.module.module,shortdesc:idea.module_meta_information
 msgid "Idea Manager"
-msgstr ""
+msgstr "Менеджер идеи"
 
 #. module: idea
 #: model:ir.ui.menu,name:idea.menu_idea_vote_stat
@@ -222,6 +222,13 @@ msgid ""
 "managers can obtain an easy view on best ideas from all the users. Once "
 "installed, check the menu 'Ideas' in the 'Tools' main menu."
 msgstr ""
+"Этот модуль позволяет вашему пользователю  легко и эффективно участвовать в "
+"инновациях бизнеса. Он позволяет каждому выразить идеи о различных вопросах. "
+"После этого, другие пользователи могут прокомментировать эти идеи и провести "
+"голосование за идеи. Каждая идея как счет основанный на различных "
+"голосованиях. Менеджеры могут получить легкий взгляд на самые лучшие идеии "
+"от всех пользователей. Как только установлено, проверите меню «идеи» в  "
+"главном меню «Инструменты»."
 
 #. module: idea
 #: field:idea.comment,create_date:0
@@ -242,7 +249,7 @@ msgstr "Кол-во голосов"
 #. module: idea
 #: model:ir.model,name:idea.model_idea_idea
 msgid "idea.idea"
-msgstr ""
+msgstr "идеи.идеи"
 
 #. module: idea
 #: model:ir.actions.act_window,name:idea.action_idea_idea_draft_my
@@ -307,7 +314,7 @@ msgstr "Открытые идеи"
 #: view:idea.idea:0
 #: view:idea.vote.stat:0
 msgid "vote_stat of ideas"
-msgstr ""
+msgstr "Статистика голосования"
 
 #. module: idea
 #: view:idea.comment:0
index ee7676d..087a413 100644 (file)
@@ -210,10 +210,22 @@ class mail_gateway(osv.osv):
             }
         return res
 
-    def _decode_header(self, s):
+    def _to_decode(self, s, charsets):
+       for charset in charsets:
+           if charset:
+               try:
+                   return s.decode(charset)
+               except UnicodeError:  
+                    pass         
+       try:
+           return s.decode('ascii')
+       except UnicodeError:
+           return s 
+
+    def _decode_header(self, s):        
         from email.Header import decode_header
         s = decode_header(s)
-        return ''.join(map(lambda x:x[0].decode(x[1] or 'ascii', 'replace'), s))
+        return ''.join(map(lambda x:self._to_decode(x[0], x[1]), s))
 
     def msg_new(self, cr, uid, msg, model):
         message = self.msg_body_get(msg)
@@ -250,7 +262,7 @@ class mail_gateway(osv.osv):
             if part.get_content_maintype()=='text':
                 buf = part.get_payload(decode=True)
                 if buf:
-                    txt = buf.decode(part.get_charsets()[0] or 'ascii', 'replace')
+                    txt = self._to_decode(buf, part.get_charsets)
                     txt = re.sub("<(\w)>", replace, txt)
                     txt = re.sub("<\/(\w)>", replace, txt)
                 if txt and part.get_content_subtype() == 'plain':
@@ -362,13 +374,11 @@ class mail_gateway(osv.osv):
                 del msg['Subject']
             msg['Subject'] = '[%s] %s' %(str(res_id), subject)            
 
-        em = [user_email, from_email] + (cc_email or '').split(',')
+        em = [user_email or '', from_email] + (cc_email or '').split(',')
         emails = map(self.emails_get, filter(None, em))
-
         mm = [self._decode_header(msg['From']), self._decode_header(msg['To'])]+self._decode_header(msg.get('Cc','')).split(',')
         msg_mails = map(self.emails_get, filter(None, mm))
-
-        emails = filter(lambda m: m and m not in msg_mails, emails)        
+        emails = filter(lambda m: m and m not in msg_mails, emails)
         try:
             self.msg_send(msg, mailgateway.reply_to, emails, priority, res_id)
             if hasattr(self.pool.get(res_model), 'msg_send'):
index 587b88a..34f1b5c 100644 (file)
@@ -7,13 +7,13 @@ msgstr ""
 "Project-Id-Version: OpenERP Server 5.0.1\n"
 "Report-Msgid-Bugs-To: support@openerp.com\n"
 "POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-01-11 20:49+0000\n"
+"PO-Revision-Date: 2010-03-30 14:06+0000\n"
 "Last-Translator: TeMPO <info@tempo-consulting.fr>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-03-30 03:54+0000\n"
+"X-Launchpad-Export-Date: 2010-03-31 03:54+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
 #. module: mrp
@@ -853,7 +853,7 @@ msgstr "Machine"
 #. module: mrp
 #: model:process.node,name:mrp.process_node_servicemts0
 msgid "Make to stock"
-msgstr "Production sur stock"
+msgstr "Sur stock"
 
 #. module: mrp
 #: field:mrp.workcenter,name:0
@@ -1088,7 +1088,7 @@ msgstr "Rendement produit"
 #. module: mrp
 #: model:ir.model,name:mrp.model_stock_warehouse_orderpoint
 msgid "Orderpoint minimum rule"
-msgstr "Règle de point de commande minimum"
+msgstr "Règle de stock minimum"
 
 #. module: mrp
 #: model:process.transition,name:mrp.process_transition_servicemts0
index b4238ea..dad225a 100644 (file)
@@ -7,24 +7,24 @@ msgstr ""
 "Project-Id-Version: OpenERP Server 5.0.0\n"
 "Report-Msgid-Bugs-To: support@openerp.com\n"
 "POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 15:56+0000\n"
-"Last-Translator: Sergei Kostigoff <sergei.kostigoff@gmail.com>\n"
+"PO-Revision-Date: 2010-03-30 10:42+0000\n"
+"Last-Translator: Nikolay Chesnokov <chesnokov_n@msn.com>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-03-30 03:55+0000\n"
+"X-Launchpad-Export-Date: 2010-03-31 03:54+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
 #. module: mrp
 #: field:mrp.production,move_created_ids:0
 msgid "Moves Created"
-msgstr ""
+msgstr "Перемещение создано"
 
 #. module: mrp
 #: rml:mrp.production.order:0
 msgid "No. Of Cycles"
-msgstr ""
+msgstr "№ цикла"
 
 #. module: mrp
 #: help:mrp.procurement.compute.all,init,automatic:0
@@ -37,34 +37,34 @@ msgstr ""
 #. module: mrp
 #: model:ir.module.module,shortdesc:mrp.module_meta_information
 msgid "Manufacturing Resource Planning"
-msgstr ""
+msgstr "Планирование материальных ресурсов"
 
 #. module: mrp
 #: constraint:ir.actions.act_window:0
 msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Недопустимое имя модели в определении действия"
 
 #. module: mrp
 #: field:mrp.bom.revision,indice:0
 msgid "Revision"
-msgstr ""
+msgstr "Ревизия"
 
 #. module: mrp
 #: model:ir.actions.wizard,name:mrp.wiz_mrp_proc2
 #: model:ir.ui.menu,name:mrp.menu_wiz_mrp_proc2
 msgid "Compute Stock Minimum Rules Only"
-msgstr ""
+msgstr "Правила вычисления минимального запаса"
 
 #. module: mrp
 #: model:ir.actions.act_window,name:mrp.mrp_procurement_action5
 #: model:ir.ui.menu,name:mrp.menu_mrp_procurement_action5
 msgid "Exceptions Procurements"
-msgstr ""
+msgstr "Исключения поставок"
 
 #. module: mrp
 #: view:mrp.routing.workcenter:0
 msgid "Routing Workcenters"
-msgstr ""
+msgstr "Используемые мощности маршрута"
 
 #. module: mrp
 #: help:mrp.property,composition:0
@@ -75,7 +75,7 @@ msgstr ""
 #: model:ir.actions.act_window,name:mrp.mrp_routing_action
 #: model:ir.ui.menu,name:mrp.menu_mrp_routing_action
 msgid "Routings"
-msgstr ""
+msgstr "Маршруты"
 
 #. module: mrp
 #: field:mrp.production,picking_id:0
@@ -85,7 +85,7 @@ msgstr "Упаковочный лист"
 #. module: mrp
 #: model:process.node,name:mrp.process_node_stock0
 msgid "Stockable Stock"
-msgstr ""
+msgstr "Склад для складирования"
 
 #. module: mrp
 #: field:mrp.procurement,origin:0
@@ -107,7 +107,7 @@ msgstr "Ссылка"
 #. module: mrp
 #: view:mrp.production:0
 msgid "Finished Products"
-msgstr ""
+msgstr "Конечный продукт"
 
 #. module: mrp
 #: wizard_field:mrp.procurement.compute.all,init,automatic:0
@@ -118,7 +118,7 @@ msgstr ""
 #. module: mrp
 #: selection:mrp.bom,method:0
 msgid "Set / Pack"
-msgstr ""
+msgstr "Установить / Упаковать"
 
 #. module: mrp
 #: constraint:ir.ui.view:0
@@ -149,7 +149,7 @@ msgstr "Продукция и местоположения"
 #. module: mrp
 #: view:res.company:0
 msgid "MRP & Logistic Scheduler"
-msgstr ""
+msgstr "ПМР и Логистическое планирование"
 
 #. module: mrp
 #: help:mrp.workcenter,capacity_per_cycle:0
index 6864b54..fe7d45c 100644 (file)
@@ -144,8 +144,7 @@ class mrp_bom(osv.osv):
 
              @return:  True
         
-        """ 
-             
+        """  
         result = {}
         for bom in self.browse(cr, uid, ids, context=context):
             result[bom.id] = map(lambda x: x.id, bom.bom_lines)
@@ -156,10 +155,7 @@ class mrp_bom(osv.osv):
                 sids = self.pool.get('mrp.bom').search(cr, uid, [('bom_id','=',False),('product_id','=',bom.product_id.id)])
                 if sids:
                     bom2 = self.pool.get('mrp.bom').browse(cr, uid, sids[0], context=context)
-                    result[bom.id] += map(lambda x: x.id, bom2.bom_lines)
-        print "name",name
-        print "arg",arg   
-        print "result",result            
+                    result[bom.id] += map(lambda x: x.id, bom2.bom_lines)                 
         return result
     def _compute_type(self, cr, uid, ids, field_name, arg, context):
         res = dict(map(lambda x: (x,''), ids))
index 03ec9e2..c4187ab 100644 (file)
@@ -41,8 +41,8 @@
     'update_xml': [
         'project_issue_wizard.xml',
         'project_issue_view.xml',
-        'project_issue_menu.xml',        
-        'project_feature_menu.xml',
+#        'project_issue_menu.xml',        
+#        'project_feature_menu.xml',
         'report/project_issue_report_view.xml',
         'security/project_issue_security.xml',
         'security/ir.model.access.csv',
index 203f839..f09643c 100644 (file)
                                    <field name="description" colspan="4" nolabel="1"/>
                                    <button colspan="4"
                                        string="Reply to Last Email"
-                                       name="%(crm.action_crm_reply_mail)d"
+                                       name="%(crm.action_crm_send_mail)d"
                                        context="{'mail':'reply', 'model': 'project.issue'}"
                                        icon="gtk-undo" type="action" />
                                </form>
index c62487c..073d95d 100644 (file)
@@ -85,7 +85,6 @@
                     <field name="invoiced_rate" widget="progressbar"/>
                     <field name="amount_untaxed" sum="Total Untaxed amount"/>
                     <field name="amount_total" sum="Total amount"/>
-                    <field name="user_id"/>
                     <field name="state"/>
                 </tree>
             </field>
index 5fa2722..459a2fa 100644 (file)
@@ -48,10 +48,11 @@ Thanks to the double entry management, the inventory controlling is powerful and
         "wizard/stock_inventory_set_stock_zero_view.xml",
         "wizard/stock_fill_inventory_view.xml",
         "wizard/stock_invoice_onshipping_view.xml",
+        "wizard/stock_inventory_merge_view.xml",
         "wizard/stock_location_product_view.xml",
         "wizard/stock_inventory_line_split_view.xml",
         "wizard/stock_change_standard_price_view.xml",
-       
+        "wizard/stock_picking_make_view.xml",
         "wizard/stock_traceability_view.xml",
         "stock_workflow.xml",
         "stock_incoterms.xml",
index 877ea31..2335b66 100644 (file)
                         <field name="min_date" select="1"/>
                         <field name="type"/>
                         <field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
-                        <button name="%(make_picking)d" 
+                        <button name="%(act_stock_make_picking_wizard)d" 
                             states="confirmed,assigned" 
                             string="Make Picking" 
                             type="action" 
                         <field name="min_date" select="1"/>
                         <field name="type"/>
                         <field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
-                        <button name="%(make_picking)d" 
+                        <button name="%(act_stock_make_picking_wizard)d" 
                                 states="assigned" 
                                 string="Make Picking" 
                                 type="action" 
                         <field name="backorder_id" select="2" readonly="1"/>
                         <field name="origin" select="2" readonly="1"/>
                         <field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
-                        <button name="%(make_picking)d" 
+                        <button name="%(act_stock_make_picking_wizard)d" 
                                 states="assigned" 
                                 string="Make Picking" 
                                 type="action" 
                         <field name="invoice_state" select="2" string="Invoice Control"/>
                         <field name="type"/>
                         <field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
-                        <button name="%(make_picking)d" 
+                        <button name="%(act_stock_make_picking_wizard)d" 
                                 states="confirmed,assigned" 
                                 string="Make Picking" 
                                 type="action" 
index f9a2dfc..4ead149 100644 (file)
             model="stock.picking"
             multi="True"
             name="stock.move.split"
-            string="Split move line"/>
-        
+            string="Split move line"/>       
 
-               <wizard 
-                       id="make_picking" 
-                       model="stock.picking"
-                       menu="False"
-                       keyword="client_action_multi"
-                       name="stock.picking.make" 
-                       string="Make Picking"/>
+               
 
            <wizard
                id="return_picking"
                name="stock.return.picking"
                string="Return picking"/>       
 
-    <wizard
-        id="split_inventory_lots"
-        model="stock.inventory.line"
-        multi="True"
-        name="stock.inventory.line.split"
-        string="Split inventory lines"/>
-
-    <!--wizard
-        string="Merge inventories"
-        model="stock.inventory"
-        name="inventory.merge"
-        keyword="client_action_multi"
-        multi="True"
-        id="wizard_merge_inventory"/-->
-
+        <wizard
+            id="split_inventory_lots"
+            model="stock.inventory.line"
+            multi="True"
+            name="stock.inventory.line.split"
+            string="Split inventory lines"/>    
    </data>
 </openerp>
index 6f5a83a..7c87212 100644 (file)
@@ -23,18 +23,17 @@ import stock_traceability
 import stock_move   
 import stock_partial_picking
 import stock_partial_move
-import wizard_picking_make
+import stock_picking_make
 import wizard_replacement
 import wizard_return
 import wizard_split_lot_line
 import wizard_ups
-import inventory_merge
+import stock_inventory_merge
 import stock_inventory_set_stock_zero
 import stock_fill_inventory
 import stock_inventory_line_split
 import stock_invoice_onshipping
 import stock_location_product
 import stock_change_standard_price
-
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
 
index 6462005..1c11ad8 100644 (file)
@@ -36,7 +36,18 @@ class stock_inventory_merge(osv.osv_memory):
             }
 
     def do_merge(self, cr, uid, ids, context):
-
+        """ 
+             To merge selected Inventories.
+            
+             @param self: The object pointer.
+             @param cr: A database cursor
+             @param uid: ID of the user currently logged in
+             @param ids: List of IDs selected 
+             @param context: A standard dictionary 
+             
+             @return: 
+        
+        """ 
         invent_obj = self.pool.get('stock.inventory')
         invent_line_obj = self.pool.get('stock.inventory.line')
 
@@ -46,10 +57,7 @@ class stock_inventory_merge(osv.osv_memory):
             raise osv.except_osv(_('Warning'),
             _('Please select at least two inventories.'))
 
-
-
         for inventory in invent_obj.browse(cr, uid, context['active_ids'], context=context):
-            print"-------active-ids----",context['active_ids']
             if inventory.state == "done":
                 raise osv.except_osv(_('Warning'),
                 _('Merging is only allowed on draft inventories.'))
diff --git a/addons/stock/wizard/stock_inventory_merge_view.xml b/addons/stock/wizard/stock_inventory_merge_view.xml
new file mode 100644 (file)
index 0000000..e8af34c
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<openerp>
+       <data>
+       
+               <record id="name_form" model="ir.ui.view">
+                       <field name="name">stock.inventory.merge.form</field>
+                       <field name="model">stock.inventory.merge</field>
+                       <field name="type">form</field>
+                       <field name="arch" type="xml">
+                             <form string="Merge inventories">
+                                   <separator colspan="4" string="Merge inventories" />
+                                   <label string="Do you want to merge theses inventories ?"/>
+                               <button special="cancel" string="Cancel" icon='gtk-cancel'/>
+                               <button name="do_merge" string="Yes" type="object" icon="gtk-apply"/>                           
+                               </form>
+                       </field>
+               </record>
+                <act_window name="Merge inventories"               
+                       res_model="stock.inventory.merge"
+                       src_model="stock.inventory"
+                       view_mode="form"
+                       target="new"        
+                       key2="client_action_multi"    
+                       id="action_view_stock_merge_inventories"/>      
+               
+       </data>
+</openerp>
index 6ac54ee..9d26595 100644 (file)
 ##############################################################################
 
 from osv import fields, osv
-from service import web_services
-from tools.misc import UpdateableStr, UpdateableDict
-from tools.translate import _
 import netsvc
-import pooler
-import time
-import wizard
 
 class stock_picking_make(osv.osv_memory):
-    _name = "stock.picking.make"
-    _description = "Make picking"
+    _name = 'stock.picking.make'
+    _description = "Make Picking"
+    
     _columns = {
-            'pickings': fields.many2many('stock.picking', 'Picking', required=True),
-            }
-
-ARCH = '''<?xml version="1.0"?>
-<form string="Make picking">
-    <field name="pickings" nolabel="1" colspan="4"
-        width="600" height="300"/>
-</form>'''
-
-FIELDS = {
-    'pickings': {
-        'string': 'Picking',
-        'type': 'many2many',
-        'relation': 'stock.picking',
-        'readonly': True,
-    },
-}
-
-def _get_value(obj, cursor, user, data, context):
-    pool = pooler.get_pool(cursor.dbname)
-    picking_obj = pool.get('stock.picking')
-
-    picking_ids = picking_obj.search(cursor, user, [
-        ('id', 'in', data['ids']),
-        ('state', '<>', 'done'),
-        ('state', '<>', 'cancel')], context=context)
-    return {'pickings': picking_ids}
-
-def _make_packing(obj, cursor, user, data, context):
-    wkf_service = netsvc.LocalService('workflow')
-    pool = pooler.get_pool(cursor.dbname)
-    picking_obj = pool.get('stock.picking')
-    ids = data['form']['pickings'][0][2]
-    print"-------ids--------",ids
-    picking_obj.force_assign(cursor, user, ids)
-    picking_obj.action_move(cursor, user, ids)
-    for picking_id in ids:
-        wkf_service.trg_validate(user, 'stock.picking', picking_id,
-                'button_done', cursor)
-    return {}
-
-class stock_picking_make(wizard.interface):
-    states = {
-        'init': {
-            'actions': [_get_value],
-            'result': {
-                'type': 'form',
-                'arch': ARCH,
-                'fields': FIELDS,
-                'state': [
-                    ('end', 'Cancel', 'gtk-cancel'),
-                    ('make', 'Ok', 'gtk-apply', True)
-                ],
-            },
-        },
-        'make': {
-            'actions': [_make_packing],
-            'result': {
-                'type': 'state',
-                'state':'end',
-            },
-        },
+        'picking_ids': fields.many2many('stock.picking', 'stock_picking_ids', 'parent_id', 'child_id', 'Pickings'),
     }
 
-stock_picking_make('stock.picking.make')
+    def default_get(self, cursor, user, fields, context):
+        """ 
+         To get default values for the object.
+         @param self: The object pointer.
+         @param cr: A database cursor
+         @param uid: ID of the user currently logged in
+         @param fields: List of fields for which we want default values 
+         @param context: A standard dictionary 
+         @return: A dictionary which of fields with values. 
+        """ 
+        res = super(stock_picking_make, self).default_get(cursor, user, fields, context=context)
+        record_ids = context and context.get('active_ids',False) or False
+        if record_ids:
+            picking_obj = self.pool.get('stock.picking')
+            picking_ids = picking_obj.search(cursor, user, [
+                ('id', 'in', record_ids),
+                ('state', '<>', 'done'),
+                ('state', '<>', 'cancel')], context=context)
+            res['picking_ids'] = picking_ids
+        return res
+    
+    def make_packing(self, cursor, user, ids, context):
+        """ 
+         Make Picking.
+         @param self: The object pointer.
+         @param cr: A database cursor
+         @param uid: ID of the user currently logged in
+         @param fields: List of fields for which we want default values 
+         @param context: A standard dictionary 
+         @return: A dictionary which of fields with values. 
+        """ 
+        record_ids = context and context.get('active_ids',False) or False
+        wkf_service = netsvc.LocalService('workflow')
+        picking_obj = self.pool.get('stock.picking')
+        data = self.read(cursor, user, ids[0])
+        pick_ids = data['picking_ids']
+        picking_obj.force_assign(cursor, user, pick_ids)
+        picking_obj.action_move(cursor, user, pick_ids)
+        for picking_id in ids:
+            wkf_service.trg_validate(user, 'stock.picking', picking_id,
+                    'button_done', cursor)
+        return {}
+
+stock_picking_make()
 
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock/wizard/stock_picking_make_view.xml b/addons/stock/wizard/stock_picking_make_view.xml
new file mode 100644 (file)
index 0000000..fa77042
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+    
+           <record id="view_stock_make_picking_wizard" model="ir.ui.view">
+            <field name="name">Make Picking</field>
+            <field name="model">stock.picking.make</field>
+            <field name="type">form</field>
+            <field name="arch" type="xml">
+                <form string="Make Picking">
+                                   <field name="picking_ids" nolabel="1" colspan="4"
+                                       width="600" height="300"/>
+                       <separator string="" colspan="4" />
+                       <button icon='gtk-cancel' special="cancel"
+                               string="Cancel" />
+                       <button name="make_packing" string="Ok"
+                               type="object" icon="gtk-apply" />
+                </form>
+            </field>
+        </record>
+        
+        <record id="act_stock_make_picking_wizard" model="ir.actions.act_window">
+            <field name="name">Make Picking</field>
+            <field name="type">ir.actions.act_window</field>
+            <field name="res_model">stock.picking.make</field>
+            <field name="view_type">form</field>
+            <field name="view_mode">form</field>
+            <field name="target">new</field>
+        </record>
+       </data>
+</openerp>