Merge lp:~camptocamp/contract-management/7.0-block-send-email-lep into lp:~contract-management-core-editors/contract-management/7.0

Proposed by Leonardo Pistone
Status: Merged
Approved by: Yannick Vaucher @ Camptocamp
Approved revision: 10
Merged at revision: 8
Proposed branch: lp:~camptocamp/contract-management/7.0-block-send-email-lep
Merge into: lp:~contract-management-core-editors/contract-management/7.0
Diff against target: 659 lines (+571/-38)
5 files modified
analytic_hours_block/__openerp__.py (+1/-0)
analytic_hours_block/hours_block.py (+41/-0)
analytic_hours_block/hours_block_data.xml (+24/-0)
analytic_hours_block/hours_block_view.xml (+45/-38)
analytic_hours_block/i18n/analytic_hours_block.pot (+460/-0)
To merge this branch: bzr merge lp:~camptocamp/contract-management/7.0-block-send-email-lep
Reviewer Review Type Date Requested Status
Matthieu Dietrich @ camptocamp (community) Approve
Guewen Baconnier @ Camptocamp Approve
Pedro Manuel Baeza Abstain
Review via email: mp+200812@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Pedro Manuel Baeza (pedro.baeza) wrote :

Hi, Leonardo, very appreciated the improvement!

Could you please add updated translation template to allow translation of the mail?

Regards.

review: Needs Fixing
9. By Leonardo Pistone

[add] analytic_hours_block: pot file

Revision history for this message
Leonardo Pistone (lepistone) wrote :

Pedro, I added the pot file.

Best

Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

l50ff it seems to me that it is dangerous to return a new action with the current context. I encountered subtle bugs because the active_ids, active_model etc are propagated to the new action when they shouldn't. I think it should just be a new dict.

review: Needs Fixing
Revision history for this message
Leonardo Pistone (lepistone) wrote :

Thanks Guewen.

but what about lang, timezone..

Maybe I could pop out the active_* from ctx?

Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

The timezone and lang are automatically set from the user. When one click on a menu item, this is also what happens: the context is empty (or as defined in the action) and the user's configuration is set again.

Revision history for this message
Pedro Manuel Baeza (pedro.baeza) wrote :

I can't review this module more than the check of the pot file for now, so I'm going to abstain to not disturb review status.

Regards.

review: Abstain
10. By Leonardo Pistone

[imp] create a new context, as suggested by Guewen

Revision history for this message
Leonardo Pistone (lepistone) wrote :

Good to know Guewen. Done.

Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

Thanks! LGTM

review: Approve
Revision history for this message
Matthieu Dietrich @ camptocamp (mdietrich-c2c) wrote :

Hi Leonardo,

LGTM.

Revision history for this message
Matthieu Dietrich @ camptocamp (mdietrich-c2c) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'analytic_hours_block/__openerp__.py'
2--- analytic_hours_block/__openerp__.py 2012-12-17 14:42:58 +0000
3+++ analytic_hours_block/__openerp__.py 2014-01-31 14:46:22 +0000
4@@ -44,6 +44,7 @@
5 ],
6 "data": [
7 "hours_block_view.xml",
8+ "hours_block_data.xml",
9 "hours_block_menu.xml",
10 "report.xml",
11 "security/hours_block_security.xml",
12
13=== modified file 'analytic_hours_block/hours_block.py'
14--- analytic_hours_block/hours_block.py 2012-12-18 11:05:03 +0000
15+++ analytic_hours_block/hours_block.py 2014-01-31 14:46:22 +0000
16@@ -24,6 +24,7 @@
17
18 class AccountHoursBlock(orm.Model):
19 _name = "account.hours.block"
20+ _inherit = ['mail.thread']
21
22 def _get_last_action(self, cr, uid, ids, name, arg, context=None):
23 """ Return the last analytic line date for an invoice"""
24@@ -163,6 +164,46 @@
25 block_ids.update([inv.id for inv in invoice.account_hours_block_ids])
26 return list(block_ids)
27
28+ def action_send_block(self, cr, uid, ids, context=None):
29+ """Open a form to send by email. Return an action dict."""
30+
31+ assert len(ids) == 1, '''\
32+ This option should only be used for a single ID at a time.'''
33+
34+ ir_model_data = self.pool.get('ir.model.data')
35+
36+ try:
37+ template_id = ir_model_data.get_object_reference(
38+ cr, uid, 'analytic_hours_block', 'email_template_hours_block'
39+ )[1]
40+ except ValueError:
41+ template_id = False
42+
43+ try:
44+ compose_form_id = ir_model_data.get_object_reference(
45+ cr, uid, 'mail', 'email_compose_message_wizard_form'
46+ )[1]
47+ except ValueError:
48+ compose_form_id = False
49+
50+ ctx = {
51+ 'default_model': self._name,
52+ 'default_res_id': ids[0],
53+ 'default_use_template': bool(template_id),
54+ 'default_template_id': template_id,
55+ 'default_composition_mode': 'comment',
56+ }
57+ return {
58+ 'type': 'ir.actions.act_window',
59+ 'view_type': 'form',
60+ 'view_mode': 'form',
61+ 'res_model': 'mail.compose.message',
62+ 'views': [(compose_form_id, 'form')],
63+ 'view_id': compose_form_id,
64+ 'target': 'new',
65+ 'context': ctx,
66+ }
67+
68 _recompute_triggers = {
69 'account.hours.block': (lambda self, cr, uid, ids, c=None:
70 ids, ['invoice_id', 'type'], 10),
71
72=== added file 'analytic_hours_block/hours_block_data.xml'
73--- analytic_hours_block/hours_block_data.xml 1970-01-01 00:00:00 +0000
74+++ analytic_hours_block/hours_block_data.xml 2014-01-31 14:46:22 +0000
75@@ -0,0 +1,24 @@
76+<?xml version="1.0" ?>
77+<openerp>
78+ <!-- Mail template are declared in a NOUPDATE block
79+ so users can freely customize/delete them -->
80+ <data noupdate="1">
81+ <record id="email_template_hours_block" model="email.template">
82+ <field name="name">Hours Block - Send by Email</field>
83+ <field name="email_from">${(object.user_id.email or object.company_id.email or 'noreply@localhost')|safe}</field>
84+ <field name="subject">${object.company_id.name} Hours Block (Ref ${object.number or 'n/a'})</field>
85+ <field name="email_recipients">${object.partner_id.id}</field>
86+ <field name="model_id" ref="analytic_hours_block.model_account_hours_block"/>
87+ <field name="auto_delete" eval="True"/>
88+ <field name="report_template" ref="block_hours_report"/>
89+ <field name="report_name">Hours_Block_${(object.number or '').replace('/','_')}_${object.state == 'draft' and 'draft' or ''}</field>
90+ <field name="lang">${object.partner_id.lang}</field>
91+ <field name="body_html"><![CDATA[
92+ <p>Hello ${object.partner_id.name},</p>
93+
94+ <p>Please find attached your Hours Block Report.</p>
95+ <p>Best regards.</p>
96+ ]]></field>
97+ </record>
98+ </data>
99+</openerp>
100
101=== modified file 'analytic_hours_block/hours_block_view.xml'
102--- analytic_hours_block/hours_block_view.xml 2012-12-18 08:46:36 +0000
103+++ analytic_hours_block/hours_block_view.xml 2014-01-31 14:46:22 +0000
104@@ -41,44 +41,51 @@
105 <field name="model">account.hours.block</field>
106 <field name="arch" type="xml">
107 <form string="Hours Blocks" version="7.0">
108- <sheet>
109- <h1>
110- <field name="invoice_id" placeholder="Choose an invoice..."/>
111- <label for="type" string="Based on:" class="oe_inline"/>
112- <field name="type" class="oe_inline"/>
113- </h1>
114-
115- <group>
116- <field name="last_action_date" />
117- <field name="close_date" />
118- </group>
119-
120- <group>
121- <separator colspan="4" string="Hours Quantity / Amount"/>
122- <field name="amount_hours_block" string="Bought"/>
123- <field name="amount_hours_block_done" string="Used"/>
124- <field name="amount_hours_block_delta" string="Difference"/>
125- </group>
126-
127- <group>
128- <separator colspan="4" string="Invoice's related information"/>
129- <field name="date_invoice"/>
130- <field name="name"/>
131- <field name="number"/>
132- <field name="partner_id" groups="base.group_user"/>
133- <field name="user_id"/>
134- <field name="company_id" groups="base.group_multi_company" widget="selection"/>
135-
136- <field name="journal_id" invisible="1"/>
137- <field name="period_id" invisible="1" groups="account.group_account_user"/>
138-
139- <field name="currency_id"/>
140- <newline/>
141- <field name="residual" sum="Residual Amount"/>
142- <field name="amount_total" sum="Total Amount"/>
143- <field name="state"/>
144- </group>
145- </sheet>
146+ <header>
147+ <button name="action_send_block" type="object" string="Send by Email" class="oe_highlight"/>
148+ </header>
149+ <sheet>
150+ <h1>
151+ <field name="invoice_id" placeholder="Choose an invoice..."/>
152+ <label for="type" string="Based on:" class="oe_inline"/>
153+ <field name="type" class="oe_inline"/>
154+ </h1>
155+
156+ <group>
157+ <field name="last_action_date" />
158+ <field name="close_date" />
159+ </group>
160+
161+ <group>
162+ <separator colspan="4" string="Hours Quantity / Amount"/>
163+ <field name="amount_hours_block" string="Bought"/>
164+ <field name="amount_hours_block_done" string="Used"/>
165+ <field name="amount_hours_block_delta" string="Difference"/>
166+ </group>
167+
168+ <group>
169+ <separator colspan="4" string="Invoice's related information"/>
170+ <field name="date_invoice"/>
171+ <field name="name"/>
172+ <field name="number"/>
173+ <field name="partner_id" groups="base.group_user"/>
174+ <field name="user_id"/>
175+ <field name="company_id" groups="base.group_multi_company" widget="selection"/>
176+
177+ <field name="journal_id" invisible="1"/>
178+ <field name="period_id" invisible="1" groups="account.group_account_user"/>
179+
180+ <field name="currency_id"/>
181+ <newline/>
182+ <field name="residual" sum="Residual Amount"/>
183+ <field name="amount_total" sum="Total Amount"/>
184+ <field name="state"/>
185+ </group>
186+ </sheet>
187+ <div class="oe_chatter">
188+ <field name="message_follower_ids" widget="mail_followers"/>
189+ <field name="message_ids" widget="mail_thread"/>
190+ </div>
191 </form>
192 </field>
193 </record>
194
195=== added directory 'analytic_hours_block/i18n'
196=== added file 'analytic_hours_block/i18n/analytic_hours_block.pot'
197--- analytic_hours_block/i18n/analytic_hours_block.pot 1970-01-01 00:00:00 +0000
198+++ analytic_hours_block/i18n/analytic_hours_block.pot 2014-01-31 14:46:22 +0000
199@@ -0,0 +1,460 @@
200+# Translation of OpenERP Server.
201+# This file contains the translation of the following modules:
202+# * analytic_hours_block
203+#
204+msgid ""
205+msgstr ""
206+"Project-Id-Version: OpenERP Server 7.0\n"
207+"Report-Msgid-Bugs-To: \n"
208+"POT-Creation-Date: 2014-01-08 12:49+0000\n"
209+"PO-Revision-Date: 2014-01-08 12:49+0000\n"
210+"Last-Translator: <>\n"
211+"Language-Team: \n"
212+"MIME-Version: 1.0\n"
213+"Content-Type: text/plain; charset=UTF-8\n"
214+"Content-Transfer-Encoding: \n"
215+"Plural-Forms: \n"
216+
217+#. module: analytic_hours_block
218+#: report:account.hours.block:0
219+msgid "Maintenance And Support Summary"
220+msgstr ""
221+
222+#. module: analytic_hours_block
223+#: report:account.hours.block:0
224+msgid "Invoice Date:"
225+msgstr ""
226+
227+#. module: analytic_hours_block
228+#: view:account.hours.block:0
229+msgid "Group By..."
230+msgstr ""
231+
232+#. module: analytic_hours_block
233+#: view:account.hours.block:0
234+msgid "Bought"
235+msgstr ""
236+
237+#. module: analytic_hours_block
238+#: field:account.hours.block,close_date:0
239+msgid "Closed Date"
240+msgstr ""
241+
242+#. module: analytic_hours_block
243+#: field:account.hours.block,message_unread:0
244+msgid "Unread Messages"
245+msgstr ""
246+
247+#. module: analytic_hours_block
248+#: field:account.hours.block,company_id:0
249+msgid "Company"
250+msgstr ""
251+
252+#. module: analytic_hours_block
253+#: field:account.hours.block,date_invoice:0
254+msgid "Invoice Date"
255+msgstr ""
256+
257+#. module: analytic_hours_block
258+#: field:account.hours.block,residual:0
259+msgid "Residual"
260+msgstr ""
261+
262+#. module: analytic_hours_block
263+#: help:account.hours.block,amount_hours_block:0
264+msgid "Amount bought by the customer. This amount is expressed in the base Unit of Measure (factor=1.0)"
265+msgstr ""
266+
267+#. module: analytic_hours_block
268+#: view:account.hours.block:0
269+msgid "Based on:"
270+msgstr ""
271+
272+#. module: analytic_hours_block
273+#: field:account.hours.block,message_ids:0
274+msgid "Messages"
275+msgstr ""
276+
277+#. module: analytic_hours_block
278+#: selection:account.hours.block,type:0
279+msgid "Amount"
280+msgstr ""
281+
282+#. module: analytic_hours_block
283+#: selection:account.hours.block,state:0
284+msgid "Cancelled"
285+msgstr ""
286+
287+#. module: analytic_hours_block
288+#: help:account.hours.block,message_unread:0
289+msgid "If checked new messages require your attention."
290+msgstr ""
291+
292+#. module: analytic_hours_block
293+#: model:email.template,body_html:analytic_hours_block.email_template_hours_block
294+msgid "\n"
295+" Here is your Hours Block Report\n"
296+" "
297+msgstr ""
298+
299+#. module: analytic_hours_block
300+#: view:account.hours.block:0
301+msgid "Hours Quantity / Amount"
302+msgstr ""
303+
304+#. module: analytic_hours_block
305+#: report:account.hours.block:0
306+msgid "Remaining hours:"
307+msgstr ""
308+
309+#. module: analytic_hours_block
310+#: report:account.hours.block:0
311+msgid "Quantity of hours bought:"
312+msgstr ""
313+
314+#. module: analytic_hours_block
315+#: help:account.hours.block,message_summary:0
316+msgid "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views."
317+msgstr ""
318+
319+#. module: analytic_hours_block
320+#: view:account.hours.block:0
321+msgid "Quantity of hours bought"
322+msgstr ""
323+
324+#. module: analytic_hours_block
325+#: view:account.hours.block:0
326+#: field:account.hours.block,partner_id:0
327+msgid "Partner"
328+msgstr ""
329+
330+#. module: analytic_hours_block
331+#: view:account.hours.block:0
332+msgid "Quantity of hours difference"
333+msgstr ""
334+
335+#. module: analytic_hours_block
336+#: field:account.hours.block,period_id:0
337+msgid "Period"
338+msgstr ""
339+
340+#. module: analytic_hours_block
341+#: field:account.hours.block,state:0
342+msgid "State"
343+msgstr ""
344+
345+#. module: analytic_hours_block
346+#: field:account.hours.block,message_follower_ids:0
347+msgid "Followers"
348+msgstr ""
349+
350+#. module: analytic_hours_block
351+#: view:account.hours.block:0
352+msgid "Send by Email"
353+msgstr ""
354+
355+#. module: analytic_hours_block
356+#: view:account.hours.block:0
357+msgid "All Running Hours Block"
358+msgstr ""
359+
360+#. module: analytic_hours_block
361+#: field:account.hours.block,last_action_date:0
362+msgid "Last action date"
363+msgstr ""
364+
365+#. module: analytic_hours_block
366+#: selection:account.hours.block,type:0
367+msgid "Hours"
368+msgstr ""
369+
370+#. module: analytic_hours_block
371+#: report:account.hours.block:0
372+msgid "Description:"
373+msgstr ""
374+
375+#. module: analytic_hours_block
376+#: help:account.hours.block,type:0
377+msgid "The block is based on the quantity of hours or on the amount."
378+msgstr ""
379+
380+#. module: analytic_hours_block
381+#: model:email.template,report_name:analytic_hours_block.email_template_hours_block
382+msgid "Hours_Block_${(object.number or '').replace('/','_')}_${object.state == 'draft' and 'draft' or ''}"
383+msgstr ""
384+
385+#. module: analytic_hours_block
386+#: report:account.hours.block:0
387+msgid "Remaining amount:"
388+msgstr ""
389+
390+#. module: analytic_hours_block
391+#: model:ir.model,name:analytic_hours_block.model_account_hours_block
392+msgid "account.hours.block"
393+msgstr ""
394+
395+#. module: analytic_hours_block
396+#: field:account.hours.block,amount_hours_block:0
397+msgid "Quantity / Amount bought"
398+msgstr ""
399+
400+#. module: analytic_hours_block
401+#: model:ir.actions.report.xml,name:analytic_hours_block.block_hours_report
402+msgid "Block Hours State"
403+msgstr ""
404+
405+#. module: analytic_hours_block
406+#: view:account.hours.block:0
407+msgid "Choose an invoice..."
408+msgstr ""
409+
410+#. module: analytic_hours_block
411+#: selection:account.hours.block,state:0
412+msgid "Open"
413+msgstr ""
414+
415+#. module: analytic_hours_block
416+#: view:account.hours.block:0
417+msgid "My invoices"
418+msgstr ""
419+
420+#. module: analytic_hours_block
421+#: view:account.hours.block:0
422+msgid "Draft Hours Blocks"
423+msgstr ""
424+
425+#. module: analytic_hours_block
426+#: field:account.hours.block,currency_id:0
427+msgid "Currency"
428+msgstr ""
429+
430+#. module: analytic_hours_block
431+#: view:account.hours.block:0
432+#: field:account.hours.block,user_id:0
433+msgid "Salesman"
434+msgstr ""
435+
436+#. module: analytic_hours_block
437+#: view:account.hours.block:0
438+msgid "Quantity of hours used"
439+msgstr ""
440+
441+#. module: analytic_hours_block
442+#: view:account.hours.block:0
443+#: selection:account.hours.block,state:0
444+msgid "Draft"
445+msgstr ""
446+
447+#. module: analytic_hours_block
448+#: view:account.hours.block:0
449+#: model:ir.actions.act_window,name:analytic_hours_block.action_all_block_hour
450+msgid "Hours Blocks"
451+msgstr ""
452+
453+#. module: analytic_hours_block
454+#: field:account.hours.block,type:0
455+msgid "Type of Block"
456+msgstr ""
457+
458+#. module: analytic_hours_block
459+#: view:account.hours.block:0
460+msgid "Used"
461+msgstr ""
462+
463+#. module: analytic_hours_block
464+#: view:account.hours.block:0
465+msgid "Total Amount"
466+msgstr ""
467+
468+#. module: analytic_hours_block
469+#: selection:account.hours.block,state:0
470+msgid "Paid"
471+msgstr ""
472+
473+#. module: analytic_hours_block
474+#: report:account.hours.block:0
475+msgid "Page"
476+msgstr ""
477+
478+#. module: analytic_hours_block
479+#: field:account.hours.block,message_is_follower:0
480+msgid "Is a Follower"
481+msgstr ""
482+
483+#. module: analytic_hours_block
484+#: report:account.hours.block:0
485+msgid "Date"
486+msgstr ""
487+
488+#. module: analytic_hours_block
489+#: field:account.invoice,account_hours_block_ids:0
490+#: model:ir.actions.act_window,name:analytic_hours_block.act_hours_block_from_invoice
491+#: model:ir.ui.menu,name:analytic_hours_block.action_all_block_hour_account
492+msgid "Hours Block"
493+msgstr ""
494+
495+#. module: analytic_hours_block
496+#: help:account.hours.block,last_action_date:0
497+msgid "Date of the last analytic line linked to the invoice related to this block hours."
498+msgstr ""
499+
500+#. module: analytic_hours_block
501+#: report:account.hours.block:0
502+msgid "Report Date:"
503+msgstr ""
504+
505+#. module: analytic_hours_block
506+#: model:email.template,subject:analytic_hours_block.email_template_hours_block
507+msgid "${object.company_id.name} Hours Block (Ref ${object.number or 'n/a'})"
508+msgstr ""
509+
510+#. module: analytic_hours_block
511+#: view:account.hours.block:0
512+msgid "Invoice's related information"
513+msgstr ""
514+
515+#. module: analytic_hours_block
516+#: view:account.hours.block:0
517+msgid "Search Invoice"
518+msgstr ""
519+
520+#. module: analytic_hours_block
521+#: report:account.hours.block:0
522+msgid "Quantity"
523+msgstr ""
524+
525+#. module: analytic_hours_block
526+#: help:account.hours.block,amount_hours_block_delta:0
527+msgid "Difference between bought and used. This amount is expressed in the base Unit of Measure (factor=1.0)"
528+msgstr ""
529+
530+#. module: analytic_hours_block
531+#: report:account.hours.block:0
532+msgid "0.6cm 27.9cm 20.3cm 27.9cm"
533+msgstr ""
534+
535+#. module: analytic_hours_block
536+#: view:account.hours.block:0
537+msgid "Residual Amount"
538+msgstr ""
539+
540+#. module: analytic_hours_block
541+#: view:account.hours.block:0
542+msgid "Overdue Hours Block"
543+msgstr ""
544+
545+#. module: analytic_hours_block
546+#: report:account.hours.block:0
547+msgid "Amount used:"
548+msgstr ""
549+
550+#. module: analytic_hours_block
551+#: field:account.hours.block,number:0
552+msgid "Number"
553+msgstr ""
554+
555+#. module: analytic_hours_block
556+#: view:account.hours.block:0
557+#: field:account.hours.block,invoice_id:0
558+#: model:ir.actions.act_window,name:analytic_hours_block.act_invoice_from_hours_block
559+#: model:ir.model,name:analytic_hours_block.model_account_invoice
560+msgid "Invoice"
561+msgstr ""
562+
563+#. module: analytic_hours_block
564+#: selection:account.hours.block,state:0
565+msgid "Pro-forma"
566+msgstr ""
567+
568+#. module: analytic_hours_block
569+#: view:account.hours.block:0
570+msgid "Responsible"
571+msgstr ""
572+
573+#. module: analytic_hours_block
574+#: report:account.hours.block:0
575+#: field:account.hours.block,name:0
576+msgid "Description"
577+msgstr ""
578+
579+#. module: analytic_hours_block
580+#: report:account.hours.block:0
581+msgid "Amount bought:"
582+msgstr ""
583+
584+#. module: analytic_hours_block
585+#: help:account.hours.block,amount_hours_block_done:0
586+msgid "Amount done by the staff. This amount is expressed in the base Unit of Measure (factor=1.0)"
587+msgstr ""
588+
589+#. module: analytic_hours_block
590+#: report:account.hours.block:0
591+msgid "Quantity of hours used:"
592+msgstr ""
593+
594+#. module: analytic_hours_block
595+#: report:account.hours.block:0
596+msgid "Invoicing"
597+msgstr ""
598+
599+#. module: analytic_hours_block
600+#: field:account.hours.block,amount_hours_block_done:0
601+msgid "Quantity / Amount used"
602+msgstr ""
603+
604+#. module: analytic_hours_block
605+#: field:account.hours.block,journal_id:0
606+msgid "Journal"
607+msgstr ""
608+
609+#. module: analytic_hours_block
610+#: view:account.hours.block:0
611+msgid "Running"
612+msgstr ""
613+
614+#. module: analytic_hours_block
615+#: view:account.hours.block:0
616+#: field:account.hours.block,amount_hours_block_delta:0
617+msgid "Difference"
618+msgstr ""
619+
620+#. module: analytic_hours_block
621+#: model:ir.actions.act_window,name:analytic_hours_block.act_block_hour_from_partner
622+msgid "All blocks hours"
623+msgstr ""
624+
625+#. module: analytic_hours_block
626+#: report:account.hours.block:0
627+msgid "Deduced"
628+msgstr ""
629+
630+#. module: analytic_hours_block
631+#: model:ir.actions.act_window,name:analytic_hours_block.act_analytic_lines_from_hours_block
632+msgid "Analytic Lines"
633+msgstr ""
634+
635+#. module: analytic_hours_block
636+#: view:account.hours.block:0
637+msgid "Invoice State"
638+msgstr ""
639+
640+#. module: analytic_hours_block
641+#: field:account.hours.block,message_summary:0
642+msgid "Summary"
643+msgstr ""
644+
645+#. module: analytic_hours_block
646+#: help:account.hours.block,message_ids:0
647+msgid "Messages and communication history"
648+msgstr ""
649+
650+#. module: analytic_hours_block
651+#: view:account.hours.block:0
652+msgid "Overdue"
653+msgstr ""
654+
655+#. module: analytic_hours_block
656+#: field:account.hours.block,amount_total:0
657+msgid "Total"
658+msgstr ""
659+

Subscribers

People subscribed via source and target branches