bzr revid: uco@tinyerp.co.in-20100211131138-g0uhyj8ov9ai39rw
This commit is contained in:
uco (OpenERP) 2010-02-11 18:41:38 +05:30
commit 06fae133f0
68 changed files with 2676 additions and 3308 deletions

View File

@ -146,12 +146,26 @@
</field>
</record>
<record id="view_account_search" model="ir.ui.view">
<field name="name">account.account.search</field>
<field name="model">account.account</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Accounts">
<field name="code" select="1"/>
<field name="name" select="1"/>
<field name="user_type" select="1"/>
<field name="type" select="1"/>
</search>
</field>
</record>
<record id="action_account_form" model="ir.actions.act_window">
<field name="name">List of Accounts</field>
<field name="res_model">account.account</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,graph</field>
<field name="search_view_id" ref="view_account_search"/>
</record>
<menuitem id="account_account_menu" name="Financial Accounts" parent="account.menu_finance_accounting"/>
<menuitem action="action_account_form" id="menu_action_account_form" parent="account_account_menu"/>

View File

@ -7,30 +7,30 @@ 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: 2010-01-15 14:07+0000\n"
"Last-Translator: DenisD <denis_delismajlovic@yahoo.com>\n"
"PO-Revision-Date: 2010-02-10 12:49+0000\n"
"Last-Translator: adnan <adnankraljic@yahoo.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-01-16 04:35+0000\n"
"X-Launchpad-Export-Date: 2010-02-11 05:02+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
#: field:account.tax.template,description:0
msgid "Internal Name"
msgstr ""
msgstr "Interni naziv"
#. module: account
#: view:account.tax.code:0
msgid "Account Tax Code"
msgstr ""
msgstr "Šifra poreza"
#. module: account
#: model:ir.actions.act_window,name:account.action_invoice_tree9
#: model:ir.ui.menu,name:account.menu_action_invoice_tree9
msgid "Unpaid Supplier Invoices"
msgstr ""
msgstr "Neplaćeni ulazni računi"
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_entries
@ -55,7 +55,7 @@ msgstr "Sredstvo"
#. module: account
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Neispravan naziv modela u definiciji zadatka."
#. module: account
#: help:account.journal,currency:0
@ -65,7 +65,7 @@ msgstr ""
#. module: account
#: wizard_view:account_use_models,init_form:0
msgid "Select Message"
msgstr ""
msgstr "Odaberi poruku"
#. module: account
#: help:product.category,property_account_income_categ:0
@ -99,18 +99,18 @@ msgstr ""
#. module: account
#: view:account.account:0
msgid "Account Statistics"
msgstr ""
msgstr "Statistike konta"
#. module: account
#: model:ir.actions.wizard,name:account.wizard_vat_declaration
#: model:ir.ui.menu,name:account.menu_wizard_vat_declaration
msgid "Print Taxes Report"
msgstr ""
msgstr "Štampaj porezni izvještaj"
#. module: account
#: field:account.account,parent_id:0
msgid "Parent"
msgstr ""
msgstr "Roditelj"
#. module: account
#: selection:account.move,type:0

View 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: 2009-02-03 08:32+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-02-10 12:26+0000\n"
"Last-Translator: adnan <adnankraljic@yahoo.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: 2009-12-16 05:10+0000\n"
"X-Launchpad-Export-Date: 2010-02-11 05:02+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_tax_include
@ -24,29 +24,29 @@ msgstr "Neodgovarajući XML za arhitekturu prikaza!"
#. module: account_tax_include
#: field:account.invoice,price_type:0
msgid "Price method"
msgstr ""
msgstr "Cjenovna procedura"
#. module: account_tax_include
#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
msgid "Invoices and prices with taxes included"
msgstr ""
msgstr "Računi i cijene sa uključenim porezom"
#. module: account_tax_include
#: selection:account.invoice,price_type:0
msgid "Tax included"
msgstr ""
msgstr "Porez uključen"
#. module: account_tax_include
#: selection:account.invoice,price_type:0
msgid "Tax excluded"
msgstr ""
msgstr "Porez nije uključen"
#. module: account_tax_include
#: view:account.tax:0
msgid "Compute Code for Taxes included prices"
msgstr ""
msgstr "Izračunaj cijene sa porezima"
#. module: account_tax_include
#: field:account.invoice.line,price_subtotal_incl:0
msgid "Subtotal"
msgstr ""
msgstr "Sub-ukupno"

View File

@ -20,7 +20,5 @@
##############################################################################
import base_calendar
import wizard
import base_calendar_node
import webdav_server
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -24,25 +24,23 @@
"name" : "Basic Calendar Functionality",
"version" : "1.0",
"depends" : [
"base",
"caldav",
],
'description': """
Contains basic functionality for caldav system like:
- Maintenance of basic objects needed for caldav calendar
* Event(Meeting)
* Todo(Task)
* Reminder
* Attendee
- Availabilities of synchronisation using WebDAV
Full featured calendar system that support:
- Alerts (create requests)
- Recurring events (*)
- Invitations to others people
""",
"author" : "Tiny",
'category': 'Generic Modules/Others',
'website': 'http://www.openerp.com',
"init_xml" : ["base_calendar_data.xml"],
"init_xml" : [
'base_calendar_data.xml'
],
"demo_xml" : [],
"update_xml" : [
'security/ir.model.access.csv',
'base_calendar_wizard.xml',
'base_calendar_view.xml'
],
"installable" : True,

File diff suppressed because it is too large Load Diff

View File

@ -1,61 +1,250 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<data>
<!-- Attendee invite wizard-->
<record id="view_calendar_form" model="ir.ui.view">
<field name="name">Basic Calendar</field>
<field name="model">basic.calendar</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Basic Calendar">
<field name="name" required="1" select="1" />
<field name="active" select="1" />
<field name="line_ids" mode="form,tree" colspan="4" nolabel="1">
<form string="Calendar Lines">
<field name="name" required="1" select="1" />
<field name="object_id" required="1" select="1" />
<field name="domain" select="1" />
<field name="mapping_ids" select="1" colspan="4" nolabel="1">
<tree string="Attributes Mapping" editable="bottom">
<field name="name" required="1" domain="[('type', '=', parent.name)]"/>
<field name="fn" select="1" />
<field name="field_id" select="1" required="1" domain="[('model_id', '=', parent.object_id)]" />
<field name="expr" />
</tree>
<form string="Attributes Mapping">
<field name="name" select="1" required="1" domain="[('type', '=', parent.name)]"/>
<field name="field_id" select="1" domain="[('model_id', '=', parent.object_id)]"
required="1" />
<field name="fn" select="1" required="1" />
<field name="expr" />
<separator string="Value Mapping" colspan="4" />
<field name="mapping" select="1" colspan="4" nolabel="1" />
</form>
</field>
</form>
<tree string="Attributes Mapping" editable="bottom">
<field name="name" select="1" />
<field name="object_id" select="1" />
</tree>
</field>
</form>
</field>
</record>
<record id="action_view_calendar" model="ir.actions.act_window">
<field name="name">Calendar</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">basic.calendar</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<record id="view_calendar_invite_attendee_wizard" model="ir.ui.view">
<field name="name">Invite Attendees</field>
<field name="model">base_calendar.invite.attendee</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Invite People">
<field name="type" />
<field name="send_mail" />
<newline/>
<group col="1" colspan="4"
attrs="{'invisible': [('type', '!=', 'external')]}">
<field name="email" colspan="4"
attrs="{'required': [('type', '=', 'external')]}" />
</group>
<group col="1" colspan="4"
attrs="{'invisible': [('type', '!=', 'internal')]}">
<separator string="Users" colspan="4" />
<field name="user_ids" select="1" colspan="4"
nolabel="1" />
<newline />
</group>
<group col="2" colspan="4"
attrs="{'invisible': [('type', '!=', 'partner')]}">
<field name="partner_id" colspan="2"
on_change="onchange_partner_id(partner_id)"
attrs="{'required': [('type', '=', 'partner')]}" />
<newline />
<separator string="Partner Contacts"
colspan="4" />
<field name="contact_ids" select="1" colspan="4"
nolabel="1" domain="[('partner_id', '=', partner_id)]"
attrs="{'readonly': [('type', '!=', 'partner')]}" />
</group>
<newline/>
<separator string="" colspan="6" />
<label string="" colspan="2" />
<button icon='gtk-cancel' special="cancel"
string="Cancel" />
<button name="do_invite" string="Invite"
type="object" icon="gtk-ok" />
</form>
</field>
</record>
<menuitem id="menu_calendar_configuration" name="Calendar"
parent="base.menu_base_config" sequence="10" />
<record id="action_view_calendar_invite_attendee_wizard" model="ir.actions.act_window">
<field name="name">Invite Attendees</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">base_calendar.invite.attendee</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<menuitem id="menu_calendar"
name="Calendar" parent="menu_calendar_configuration"
sequence="5" action="action_view_calendar" />
<record id="base_calendar_attendee_form_view" model="ir.ui.view">
<field name="name">calendar.attendee.form</field>
<field name="model">calendar.attendee</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Invitation details">
<field name="email" string="Invitation To"/>
<field name="sent_by_uid" string="Invitation From"/>
<notebook colspan="4">
<page string="Invitation">
<separator string="Invitation Detail" colspan="4" />
<group colspan="4" col="4">
<field name="user_id" string="Invited User"/>
<newline/>
<field name="partner_id" string="Partner"/>
<field name="partner_address_id" string="Contact"/>
<field name="role" string="Role" />
<field name="cutype" string="Invitation type" />
<field name="rsvp" />
</group>
<separator string="Event Detail" colspan="4" />
<group colspan="4" col="4">
<field name="event_date" />
<field name="event_end_date" />
<field name="language"/>
<field name="ref" colspan="4"/>
</group>
</page>
<page string="Delegation Info">
<separator string="Delegated From" colspan="4" />
<field name="parent_ids" nolabel="1"
colspan="4" readonly="1" />
<separator string="Delegated To" colspan="4" />
<field name="child_ids" nolabel="1"
colspan="4" readonly="1" />
</page>
</notebook>
<group col="6" colspan="4">
<field name="state" select="2" />
<button name="do_tentative" states="needs-action,declined,accepted"
string="Uncertain" type="object"
icon="terp-crm" />
<button name="do_accept" string="Accept" states="needs-action,tentative,declined"
type="object" icon="gtk-apply" />
<button name="do_decline" string="Decline" states="needs-action,tentative,accepted"
type="object" icon="gtk-cancel" />
<button
name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d"
string="Delegate" type="action"
icon="gtk-sort-descending" states="needs-action,tentative,declined,accepted"
context="{'model' : 'calendar.attendee', 'attendee_field' : 'child_ids'}" />
</group>
</form>
</field>
</record>
</data>
<record id="base_calendar_attendee_tree_view" model="ir.ui.view">
<field name="name">calendar.attendee.tree</field>
<field name="model">calendar.attendee</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Invitation details">
<field name="email" string="Invitation To"/>
<field name="partner_id" string="Partner" />
<field name="partner_address_id" string="Contact" />
<field name="role" />
<field name="state" />
</tree>
</field>
</record>
<record id="res_alarm_form_view" model="ir.ui.view">
<field name="name">res.alarm.form</field>
<field name="model">res.alarm</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Reminder details">
<field name="name" />
<field name="active" />
<separator string="Reminder Details" colspan="4" />
<field name="trigger_duration" select="1" />
<field name="trigger_interval" select="1" />
<field name="trigger_occurs" select="1" />
<field name="trigger_related" select="1" />
<separator string="" colspan="4" />
<field name="duration" />
<field name="repeat" />
</form>
</field>
</record>
<record id="res_alarm_tree_view" model="ir.ui.view">
<field name="name">res.alarm.tree</field>
<field name="model">res.alarm</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Reminder details">
<field name="name" select="1"/>
<field name="trigger_interval" select="1"/>
<field name="trigger_duration" select="1"/>
<field name="trigger_related" select="1"/>
<field name="trigger_occurs" select="1"/>
</tree>
</field>
</record>
<record id="action_res_alarm_view" model="ir.actions.act_window">
<field name="name">Available Alarms</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.alarm</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<record id="view_custom_rule_form" model="ir.ui.view">
<field name="name">Custom Rule</field>
<field name="model">calendar.custom.rrule</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Custom Rule">
<separator string="Select data for Custom Rule" colspan="4"/>
<field name="freq" />
<field name="interval" />
<newline />
<field name="count"
attrs="{'required' : [('end_date','=',False)]}"/>
<field name="end_date"
attrs="{'required' : [('count','&lt;=',0), ('freq', '!=', 'None')]}"/>
<group col="7" colspan="4" name="Select weekdays"
attrs="{'invisible' : [('freq','!=','weekly')]}">
<separator string="" colspan="6" />
<newline />
<field name="mo" colspan="1" />
<field name="tu" colspan="1" />
<field name="we" colspan="1" />
<field name="th" colspan="1" />
<field name="fr" colspan="1" />
<field name="sa" colspan="1" />
<field name="su" colspan="1" />
<newline />
</group>
<group col="4" colspan="4" attrs="{'invisible' : [('freq','!=','monthly'), ('freq','!=','yearly')]}">
<separator string="" colspan="6"/>
<group col="2" colspan="4">
<field name="select1"/>
</group>
<group col="3" colspan="4" attrs="{'invisible' : [('select1','=','day')]}">
<field name="day" attrs="{'required' : [('select1','=','date')]}"/>
</group>
<newline />
<group col="3" colspan="4" attrs="{'invisible' : [('select1','=','date')]}">
<field name="byday" string="The"
attrs="{'required' : [('select1','=','day')]}"/>
<field name="week_list" nolabel="1"
attrs="{'required' : [('select1','=','day')]}"/>
</group>
<group col="2" colspan="4" attrs="{'invisible' : [('freq','!=','yearly')]}">
<field name="month_list" string="of" colspan="1"
attrs="{'required' : [('freq','=','yearly')]}"/>
</group>
</group>
<separator string="" colspan="6" />
<label string="" colspan="2"/>
<button icon='gtk-cancel' special="cancel" string="Cancel"/>
<button name="do_add" string="Ok" type="object" icon="gtk-ok"/>
</form>
</field>
</record>
<record id="action_calendar_custom_rrule_wizard" model="ir.actions.act_window">
<field name="name">Custom Rule</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">calendar.custom.rrule</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<!-- Available alarms-->
<menuitem name="Available alarms" id="menu_crm_meeting_avail_alarm"
action="base_calendar.action_res_alarm_view"
parent="caldav.menu_calendar_configuration" />
</data>
</openerp>

View File

@ -134,6 +134,25 @@ send_form_fields = {
}
}
rml_form_arch = '''<?xml version="1.0"?>
<form string="Save As" colspan="4">
<field name="file_rml"/>
</form>
'''
rml_form_fields = {
'file_rml': {
'string': 'Save As',
'type': 'binary',
}
}
save_rml_arch = '''<?xml version="1.0"?>
<form string="File saved">
<separator string="File saved" colspan="4"/>
<label string="Your .rml file is saved and report has been modified."/>
</form>'''
def _get_default(obj, cursor, user, data, context):
return {}
@ -148,11 +167,12 @@ class base_report_designer_modify(wizard.interface):
pool = pooler.get_pool(cr.dbname)
sxwval = StringIO.StringIO(base64.decodestring(data['form']['file_sxw']))
fp = tools.file_open('normalized_oo2rml.xsl',subdir='addons/base_report_designer/wizard/tiny_sxw2rml')
newrmlcontent = str(tiny_sxw2rml.sxw2rml(sxwval, xsl=fp.read()))
report = pool.get('ir.actions.report.xml').write(cr, uid, [data['form']['report_id']], {
'report_sxw_content': base64.decodestring(data['form']['file_sxw']),
'report_rml_content': str(tiny_sxw2rml.sxw2rml(sxwval, xsl=fp.read()))
'report_rml_content': newrmlcontent
})
return {}
return {'file_rml': base64.encodestring(newrmlcontent)}
def _get_report(self, cr, uid, data, context):
pool = pooler.get_pool(cr.dbname)
@ -207,12 +227,24 @@ class base_report_designer_modify(wizard.interface):
'fields': send_form_fields,
'state': [
('end','Close'),
('send_form_result', 'Update the report'),
('save_rml_to', 'Update the report'),
]
}
},
'send_form_result': {
'save_rml_to': {
'actions': [_upload_report],
'result': {
'type': 'form',
'arch': rml_form_arch,
'fields': rml_form_fields,
'state': [
('save_rml', 'Save rml'),
('send_form_result','Skip'),
]
}
},
'send_form_result': {
'actions': [],
'result': {
'type': 'form',
'arch': send_form_result_arch,
@ -222,6 +254,16 @@ class base_report_designer_modify(wizard.interface):
]
}
},
'save_rml': {
'actions': [],
'result': {
'type': 'form',
'arch': save_rml_arch, 'fields': {},
'state': [
('end','Close'),
]
}
},
}
base_report_designer_modify('base_report_designer.modify')

View File

@ -20,5 +20,10 @@
##############################################################################
import caldav
import caldav_cache
import caldav_fs
import caldav_node
import webdav_server
import wizard
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -21,26 +21,28 @@
{
"name" : "CalDAV",
"name" : "Basic Calendar Functionality",
"version" : "1.0",
"depends" : [
"base_calendar",
"base",
],
'description': """
Full featured caldav system that support:
- alerts (create requests)
- recurring events (*)
- invitations to others people (exactly like sunbird)
Contains basic functionality for caldav system like:
- Maintenance of basic objects needed for caldav calendar
* Event(Meeting)
* Todo(Task)
* Reminder
* Attendee
- Availabilities of synchronisation using WebDAV
""",
"author" : "Tiny",
'category': 'Generic Modules/Others',
'website': 'http://www.openerp.com',
"init_xml" : [
'caldav_data.xml'
],
"init_xml" : ["caldav_data.xml"],
"demo_xml" : [],
"update_xml" : [
'security/ir.model.access.csv',
'caldav_wizard.xml',
'caldav_view.xml'
],
"installable" : True,

File diff suppressed because it is too large Load Diff

View File

@ -1,133 +0,0 @@
<?xml version="1.0"?>
<openerp>
<data noupdate="1">
<record model="res.alarm" id="alarm1">
<field name="name">1 minute before</field>
<field name="active" eval="1" />
<field name="trigger_duration" eval="1" />
<field name="trigger_interval">minutes</field>
<field name="trigger_occurs">before</field>
<field name="trigger_related">start</field>
</record>
<record model="res.alarm" id="alarm2">
<field name="name">5 minutes before</field>
<field name="active" eval="1" />
<field name="trigger_duration" eval="5" />
<field name="trigger_interval">minutes</field>
<field name="trigger_occurs">before</field>
<field name="trigger_related">start</field>
</record>
<record model="res.alarm" id="alarm3">
<field name="name">10 minutes before</field>
<field name="active" eval="1" />
<field name="trigger_duration" eval="10" />
<field name="trigger_interval">minutes</field>
<field name="trigger_occurs">before</field>
<field name="trigger_related">start</field>
</record>
<record model="res.alarm" id="alarm4">
<field name="name">15 minutes before</field>
<field name="active" eval="1" />
<field name="trigger_duration" eval="15" />
<field name="trigger_interval">minutes</field>
<field name="trigger_occurs">before</field>
<field name="trigger_related">start</field>
</record>
<record model="res.alarm" id="alarm5">
<field name="name">30 minutes before</field>
<field name="active" eval="1" />
<field name="trigger_duration" eval="30" />
<field name="trigger_interval">minutes</field>
<field name="trigger_occurs">before</field>
<field name="trigger_related">start</field>
</record>
<record model="res.alarm" id="alarm6">
<field name="name">45 minutes before</field>
<field name="active" eval="1" />
<field name="trigger_duration" eval="45" />
<field name="trigger_interval">minutes</field>
<field name="trigger_occurs">before</field>
<field name="trigger_related">start</field>
</record>
<record model="res.alarm" id="alarm7">
<field name="name">1 hour before</field>
<field name="active" eval="1" />
<field name="trigger_duration" eval="1" />
<field name="trigger_interval">hours</field>
<field name="trigger_occurs">before</field>
<field name="trigger_related">start</field>
</record>
<record model="res.alarm" id="alarm8">
<field name="name">2 hours before</field>
<field name="active" eval="1" />
<field name="trigger_duration" eval="2" />
<field name="trigger_interval">hours</field>
<field name="trigger_occurs">before</field>
<field name="trigger_related">start</field>
</record>
<record model="res.alarm" id="alarm9">
<field name="name">3 hours before</field>
<field name="active" eval="1" />
<field name="trigger_duration" eval="3" />
<field name="trigger_interval">hours</field>
<field name="trigger_occurs">before</field>
<field name="trigger_related">start</field>
</record>
<record model="res.alarm" id="alarm10">
<field name="name">4 hours before</field>
<field name="active" eval="1" />
<field name="trigger_duration" eval="4" />
<field name="trigger_interval">hours</field>
<field name="trigger_occurs">before</field>
<field name="trigger_related">start</field>
</record>
<record model="res.alarm" id="alarm11">
<field name="name">5 hours before</field>
<field name="active" eval="1" />
<field name="trigger_duration" eval="5" />
<field name="trigger_interval">hours</field>
<field name="trigger_occurs">before</field>
<field name="trigger_related">start</field>
</record>
<record model="res.alarm" id="alarm12">
<field name="name">18 hours before</field>
<field name="active" eval="1" />
<field name="trigger_duration" eval="18" />
<field name="trigger_interval">hours</field>
<field name="trigger_occurs">before</field>
<field name="trigger_related">start</field>
</record>
<!-- Scheduler for Event Alarm-->
<record forcecreate="True" id="ir_cron_scheduler_alarm"
model="ir.cron">
<field name="name">Run Event Reminder</field>
<field eval="True" name="active" />
<field name="user_id" ref="base.user_root" />
<field name="interval_number">1</field>
<field name="interval_type">minutes</field>
<field name="numbercall">-1</field>
<field eval="False" name="doall" />
<field eval="'calendar.alarm'" name="model" />
<field eval="'do_run_scheduler'" name="function" />
<field eval="'(False,)'" name="args" />
</record>
</data>
</openerp>

View File

@ -39,7 +39,7 @@ import urllib
from DAV.davcmd import copyone, copytree, moveone, movetree, delone, deltree
from document.nodes import node_res_dir, node_res_obj
from cache import memoize
from caldav_cache import memoize
from tools import misc
CACHE_SIZE=20000

View File

@ -1,248 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- Attendee invite wizard-->
<record id="view_calendar_invite_attendee_wizard" model="ir.ui.view">
<field name="name">Invite Attendees</field>
<field name="model">caldav.invite.attendee</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Invite People">
<field name="type" />
<field name="send_mail" />
<newline/>
<group col="1" colspan="4"
attrs="{'invisible': [('type', '!=', 'external')]}">
<field name="email" colspan="4"
attrs="{'required': [('type', '=', 'external')]}" />
</group>
<group col="1" colspan="4"
attrs="{'invisible': [('type', '!=', 'internal')]}">
<separator string="Users" colspan="4" />
<field name="user_ids" select="1" colspan="4"
nolabel="1" />
<newline />
</group>
<group col="2" colspan="4"
attrs="{'invisible': [('type', '!=', 'partner')]}">
<field name="partner_id" colspan="2"
on_change="onchange_partner_id(partner_id)"
attrs="{'required': [('type', '=', 'partner')]}" />
<newline />
<separator string="Partner Contacts"
colspan="4" />
<field name="contact_ids" select="1" colspan="4"
nolabel="1" domain="[('partner_id', '=', partner_id)]"
attrs="{'readonly': [('type', '!=', 'partner')]}" />
</group>
<newline/>
<separator string="" colspan="6" />
<label string="" colspan="2" />
<button icon='gtk-cancel' special="cancel"
string="Cancel" />
<button name="do_invite" string="Invite"
type="object" icon="gtk-ok" />
</form>
</field>
</record>
<record id="action_view_calendar_invite_attendee_wizard" model="ir.actions.act_window">
<field name="name">Invite Attendees</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">caldav.invite.attendee</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<record id="caldav_attendee_form_view" model="ir.ui.view">
<field name="name">calendar.attendee.form</field>
<field name="model">calendar.attendee</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Atendee details">
<field name="user_id"
on_change="onchange_user_id(user_id)" readonly="1" />
<field name="email" select="1" readonly="1" />
<field name="partner_id" select="1" readonly="1" />
<field name="partner_address_id" select="1" readonly="1" />
<newline />
<field name="role" select="1" readonly="1" string="Role" />
<field name="cutype" select="1" readonly="1" string="Invitation type" />
<newline />
<field name="rsvp" readonly="1" />
<notebook colspan="4">
<page string="Details">
<field name="event_date" />
<field name="event_end_date" />
<newline />
<field name="sent_by_uid" readonly="1"/>
<field name="dir" widget='url' readonly="1"/>
<field name="language" readonly="1"/>
<newline />
<field name="ref" colspan="4" readonly="1"/>
</page>
<page string="Delegation Info">
<separator string="Delegated From" colspan="4" />
<field name="parent_ids" nolabel="1"
colspan="4" readonly="1" />
<separator string="Delegated To" colspan="4" />
<field name="child_ids" nolabel="1"
colspan="4" readonly="1" />
</page>
</notebook>
<group col="6" colspan="4">
<field name="state" select="2" />
<button name="do_tentative" states="needs-action,declined,accepted"
string="Uncertain" type="object"
icon="terp-crm" />
<button name="do_accept" string="Accept" states="needs-action,tentative,declined"
type="object" icon="gtk-apply" />
<button name="do_decline" string="Decline" states="needs-action,tentative,accepted"
type="object" icon="gtk-cancel" />
<button
name="%(caldav.action_view_calendar_invite_attendee_wizard)d"
string="Delegate" type="action"
icon="gtk-sort-descending" states="needs-action,tentative,declined,accepted"
context="{'model' : 'calendar.attendee', 'attendee_field' : 'child_ids'}" />
</group>
</form>
</field>
</record>
<record id="caldav_attendee_tree_view" model="ir.ui.view">
<field name="name">calendar.attendee.tree</field>
<field name="model">calendar.attendee</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Atendee details" editable="top">
<field name="email" select="1" />
<field name="role" select="1" />
<field name="cutype" select="1" />
<field name="state" />
</tree>
</field>
</record>
<record id="res_alarm_form_view" model="ir.ui.view">
<field name="name">res.alarm.form</field>
<field name="model">res.alarm</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Reminder details">
<field name="name" />
<field name="active" />
<separator string="Reminder Details" colspan="4" />
<field name="trigger_duration" select="1" />
<field name="trigger_interval" select="1" />
<field name="trigger_occurs" select="1" />
<field name="trigger_related" select="1" />
<separator string="" colspan="4" />
<field name="duration" />
<field name="repeat" />
</form>
</field>
</record>
<record id="res_alarm_tree_view" model="ir.ui.view">
<field name="name">res.alarm.tree</field>
<field name="model">res.alarm</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Reminder details">
<field name="name" select="1"/>
<field name="trigger_interval" select="1"/>
<field name="trigger_duration" select="1"/>
<field name="trigger_related" select="1"/>
<field name="trigger_occurs" select="1"/>
</tree>
</field>
</record>
<record id="action_res_alarm_view" model="ir.actions.act_window">
<field name="name">Available Alarms</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.alarm</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<record id="view_custom_rule_form" model="ir.ui.view">
<field name="name">Custom Rule</field>
<field name="model">calendar.custom.rrule</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Custom Rule">
<separator string="Select data for Custom Rule" colspan="4"/>
<field name="freq" />
<field name="interval" />
<newline />
<field name="count"
attrs="{'required' : [('end_date','=',False)]}"/>
<field name="end_date"
attrs="{'required' : [('count','&lt;=',0), ('freq', '!=', 'None')]}"/>
<group col="7" colspan="4" name="Select weekdays"
attrs="{'invisible' : [('freq','!=','weekly')]}">
<separator string="" colspan="6" />
<newline />
<field name="mo" colspan="1" />
<field name="tu" colspan="1" />
<field name="we" colspan="1" />
<field name="th" colspan="1" />
<field name="fr" colspan="1" />
<field name="sa" colspan="1" />
<field name="su" colspan="1" />
<newline />
</group>
<group col="4" colspan="4" attrs="{'invisible' : [('freq','!=','monthly'), ('freq','!=','yearly')]}">
<separator string="" colspan="6"/>
<group col="2" colspan="4">
<field name="select1"/>
</group>
<group col="3" colspan="4" attrs="{'invisible' : [('select1','=','day')]}">
<field name="day" attrs="{'required' : [('select1','=','date')]}"/>
</group>
<newline />
<group col="3" colspan="4" attrs="{'invisible' : [('select1','=','date')]}">
<field name="byday" string="The"
attrs="{'required' : [('select1','=','day')]}"/>
<field name="week_list" nolabel="1"
attrs="{'required' : [('select1','=','day')]}"/>
</group>
<group col="2" colspan="4" attrs="{'invisible' : [('freq','!=','yearly')]}">
<field name="month_list" string="of" colspan="1"
attrs="{'required' : [('freq','=','yearly')]}"/>
</group>
</group>
<separator string="" colspan="6" />
<label string="" colspan="2"/>
<button icon='gtk-cancel' special="cancel" string="Cancel"/>
<button name="do_add" string="Ok" type="object" icon="gtk-ok"/>
</form>
</field>
</record>
<record id="action_calendar_custom_rrule_wizard" model="ir.actions.act_window">
<field name="name">Custom Rule</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">calendar.custom.rrule</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<!-- Available alarms-->
<menuitem name="Available alarms" id="menu_crm_meeting_avail_alarm"
action="caldav.action_res_alarm_view"
parent="base_calendar.menu_calendar_configuration" />
</data>
</openerp>

View File

@ -1,5 +0,0 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_calendar_attendee","calendar.attendee","model_calendar_attendee",,1,1,1,1
"access_calendar_alarm","calendar.alarm","model_calendar_alarm",,1,1,1,1
"access_res_alarm","res.alarm","model_res_alarm",,1,1,1,1
"access_calendar_event_all","calendar.event","model_calendar_event",,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_calendar_attendee calendar.attendee model_calendar_attendee 1 1 1 1
3 access_calendar_alarm calendar.alarm model_calendar_alarm 1 1 1 1
4 access_res_alarm res.alarm model_res_alarm 1 1 1 1
5 access_calendar_event_all calendar.event model_calendar_event 1 1 1 1

View File

@ -28,7 +28,7 @@
import netsvc
from dav_fs import tinydav_handler
from caldav_fs import tinydav_handler
from tools.config import config
from DAV.WebDAVServer import DAVRequestHandler
from service.websrv_lib import HTTPDir,FixSendError

View File

@ -24,7 +24,7 @@ import pooler
class event_edit_this(wizard.interface):
event_form = """<?xml version="1.0"?>
<form string="Edit Event">
<form string="Edit this Occurence">
<separator string="" colspan="4" />
<newline />
<field name='name' colspan="4" />

View File

@ -44,8 +44,7 @@ The CRM module has a email gateway for the synchronisation interface
between mails and Open ERP.""",
'author': 'Tiny',
'website': 'http://www.openerp.com',
'depends': ['base', 'base_action_rule',
'caldav',
'depends': ['base', 'base_action_rule',
'process',
'mail_gateway',
],

View File

@ -21,6 +21,8 @@
from osv import fields, osv
import crm
from datetime import datetime, timedelta
from datetime import datetime, timedelta
class crm_opportunity(osv.osv):
_name = 'crm.opportunity'
@ -32,7 +34,27 @@ class crm_meeting(osv.osv):
_name = 'crm.meeting'
_description = "Meeting Cases"
_order = "id desc"
_inherit = ["crm.case", "calendar.event"]
_inherit = "crm.case"
def _get_duration(self, cr, uid, ids, name, arg, context):
res = {}
for event in self.browse(cr, uid, ids, context=context):
start = datetime.strptime(event.date, "%Y-%m-%d %H:%M:%S")
res[event.id] = 0
if event.date_deadline:
end = datetime.strptime(event.date_deadline[:19], "%Y-%m-%d %H:%M:%S")
diff = end - start
duration = float(diff.days)* 24 + (float(diff.seconds) / 3600)
res[event.id] = round(duration, 2)
return res
def _set_duration(self, cr, uid, id, name, value, arg, context):
event = self.browse(cr, uid, id, context=context)
start = datetime.strptime(event.date, "%Y-%m-%d %H:%M:%S")
end = start + timedelta(hours=value)
cr.execute("UPDATE %s set date_deadline='%s' \
where id=%s"% (self._table, end.strftime("%Y-%m-%d %H:%M:%S"), id))
return True
_columns = {
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
@ -41,7 +63,8 @@ class crm_meeting(osv.osv):
('object_id.model', '=', 'crm.meeting')]", \
help='Category related to the section.Subdivide the CRM cases \
independently or section-wise.'),
'attendee_ids': fields.many2many('calendar.attendee', 'event_attendee_rel', 'event_id', 'attendee_id', 'Attendees'),
'duration': fields.function(_get_duration, method=True, \
fnct_inv=_set_duration, string='Duration'),
'phonecall_id':fields.many2one ('crm.phonecall', 'Phonecall'),
'opportunity_id':fields.many2one ('crm.opportunity', 'Opportunity'),
}

View File

@ -20,333 +20,6 @@
<field name="name">Phone Call</field>
<field name="section_id" ref="section_sales_department"/>
<field name="object_id" search="[('model','=','crm.meeting')]" model="ir.model"/>
</record>
<record model="res.request.link" id="request_link_meeting">
<field name="name">Case Meeting</field>
<field name="object">crm.meeting</field>
</record>
<!-- Event Attribute mapping for Calendar-->
<record model="basic.calendar" id="base_calendar.basic_calendar1">
<field name="name">Meetings</field>
</record>
<record model="basic.calendar.lines" id="caldav.calendar_lines_event">
<field name="name">vevent</field>
<field name="calendar_id" ref="base_calendar.basic_calendar1" />
<field name="object_id" search="[('model','=','crm.meeting')]" />
<field name="domain">[('user_id','=', uid)]</field>
</record>
<record model="basic.calendar.lines" id="caldav.calendar_lines_alarm">
<field name="name">valarm</field>
<field name="calendar_id" ref="base_calendar.basic_calendar1" />
<field name="object_id" search="[('model','=','calendar.alarm')]" />
</record>
<record model="basic.calendar.lines" id="caldav.calendar_lines_attendee">
<field name="name">attendee</field>
<field name="calendar_id" ref="base_calendar.basic_calendar1" />
<field name="object_id" search="[('model','=','calendar.attendee')]" />
</record>
<record model="basic.calendar.fields" id="map_event_1">
<field name="name" ref="base_calendar.field_event_uid"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','id'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_2">
<field name="name" ref="base_calendar.field_event_recurrence-id"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','recurrent_id'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_3">
<field name="name" ref="base_calendar.field_event_vtimezone"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','vtimezone'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_4">
<field name="name" ref="base_calendar.field_event_attendee" />
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','attendee_ids'),('model_id.model','=','crm.meeting')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_5">
<field name="name" ref="base_calendar.field_event_rrule"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','rrule'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_6">
<field name="name" ref="base_calendar.field_event_dtend"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','date_deadline'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_7">
<field name="name" ref="base_calendar.field_event_valarm"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','caldav_alarm_id'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_8">
<field name="name" ref="base_calendar.field_event_priority"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','priority'),('model_id.model','=','crm.meeting')]" />
<field name="fn">field</field>
<field name="mapping">{'1': '1', '2': '2', '3': '2','4': '2', '5': '3', '6': '4', '7': '4', '8': '4', '9': '5'}</field>
</record>
<record model="basic.calendar.fields" id="map_event_9">
<field name="name" ref="base_calendar.field_event_location"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','location'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_10">
<field name="name" ref="base_calendar.field_event_exrule"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','exrule'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_11">
<field name="name" ref="base_calendar.field_event_status"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','state'),('model_id.model','=','crm.meeting')]" />
<field name="mapping">{'tentative': 'draft', 'confirmed': 'open', 'cancelled': 'cancel'}</field>
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_12">
<field name="name" ref="base_calendar.field_event_exdate"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','exdate'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_13">
<field name="name" ref="base_calendar.field_event_dtstamp"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','date'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_14">
<field name="name" ref="base_calendar.field_event_description"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','description'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_15">
<field name="name" ref="base_calendar.field_event_dtstart"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','date'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_16">
<field name="name" ref="base_calendar.field_event_class"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','class'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_18">
<field name="name" ref="base_calendar.field_event_created"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','create_date'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_19">
<field name="name" ref="base_calendar.field_event_url"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','caldav_url'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_20">
<field name="name" ref="base_calendar.field_event_summary"/>
<field name="type_id" ref="caldav.calendar_lines_event" />
<field name="field_id" search="[('name','=','name'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_1">
<field name="name" ref="base_calendar.field_alarm_attendee"/>
<field name="type_id" ref="caldav.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','attendee_ids'),('model_id.model','=','calendar.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_2">
<field name="name" ref="base_calendar.field_alarm_trigger_duration"/>
<field name="type_id" ref="caldav.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','trigger_duration'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_3">
<field name="name" ref="base_calendar.field_alarm_description"/>
<field name="type_id" ref="caldav.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','description'),('model_id.model','=','calendar.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_4">
<field name="name" ref="base_calendar.field_alarm_attach"/>
<field name="type_id" ref="caldav.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','attach'),('model_id.model','=','calendar.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_5">
<field name="name" ref="base_calendar.field_alarm_trigger_occurs"/>
<field name="type_id" ref="caldav.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','trigger_occurs'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_6">
<field name="name" ref="base_calendar.field_alarm_trigger_interval"/>
<field name="type_id" ref="caldav.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','trigger_interval'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_7">
<field name="name" ref="base_calendar.field_alarm_summary"/>
<field name="type_id" ref="caldav.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','name'),('model_id.model','=','calendar.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_8">
<field name="name" ref="base_calendar.field_alarm_duration"/>
<field name="type_id" ref="caldav.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','duration'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_9">
<field name="name" ref="base_calendar.field_alarm_repeat"/>
<field name="type_id" ref="caldav.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','repeat'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_10">
<field name="name" ref="base_calendar.field_alarm_action"/>
<field name="type_id" ref="caldav.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','action'),('model_id.model','=','calendar.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_11">
<field name="name" ref="base_calendar.field_alarm_trigger_related"/>
<field name="type_id" ref="caldav.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','trigger_related'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_1">
<field name="name" ref="base_calendar.field_attendee_cn"/>
<field name="type_id" ref="caldav.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','cn'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_2">
<field name="name" ref="base_calendar.field_attendee_sent-by"/>
<field name="type_id" ref="caldav.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','sent_by'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_3">
<field name="name" ref="base_calendar.field_attendee_language"/>
<field name="type_id" ref="caldav.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','language'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_4">
<field name="name" ref="base_calendar.field_attendee_delegated-from"/>
<field name="type_id" ref="caldav.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','delegated_from'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_5">
<field name="name" ref="base_calendar.field_attendee_member"/>
<field name="type_id" ref="caldav.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','member'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_6">
<field name="name" ref="base_calendar.field_attendee_cutype"/>
<field name="type_id" ref="caldav.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','cutype'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_7">
<field name="name" ref="base_calendar.field_attendee_role"/>
<field name="type_id" ref="caldav.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','role'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_8">
<field name="name" ref="base_calendar.field_attendee_partstat"/>
<field name="type_id" ref="caldav.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','state'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_9">
<field name="name" ref="base_calendar.field_attendee_delegated-to"/>
<field name="type_id" ref="caldav.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','delegated_to'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_10">
<field name="name" ref="base_calendar.field_attendee_dir"/>
<field name="type_id" ref="caldav.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','dir'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_11">
<field name="name" ref="base_calendar.field_attendee_rsvp"/>
<field name="type_id" ref="caldav.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','rsvp'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
</record>
</data>
</openerp>

View File

@ -9,6 +9,7 @@
src_model="res.partner"
view_mode="calendar,tree,form,gantt"
context="{'default_partner_id': active_id, 'default_duration': 4.0}"
domain="[('partner_id', '=', active_id)]"
/>
@ -116,22 +117,7 @@
ALL MEETINGS
-->
<menuitem name="Meetings" id="menu_meeting_sale" parent="base.menu_base_partner" sequence="3"/>
<menuitem name="Meetings" id="menu_crm_case_categ_meet" action="crm_case_categ_meet" parent="menu_meeting_sale" sequence="1"/>
<record id="action_view_attendee_form" model="ir.actions.act_window">
<field name="name">Meeting Invitations</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">calendar.attendee</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="caldav.caldav_attendee_tree_view" />
<field name="domain">[('ref','like','crm.meeting,')]</field>
<field name="context">{'default_sent_by_uid': uid}</field>
</record>
<menuitem id="menu_attendee_invitations"
name="Meeting Invitations" parent="menu_meeting_sale"
sequence="10" action="action_view_attendee_form" />
<menuitem name="Meetings" id="menu_crm_case_categ_meet" action="crm_case_categ_meet" parent="menu_meeting_sale" sequence="1"/>
<record model="ir.actions.act_window" id="crm_case_category_act_meetall3">

View File

@ -24,84 +24,46 @@
<field name="model">crm.meeting</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Meetings Form">
<form string="Meetings">
<group col="6" colspan="4">
<field name="name" select="1" string="Summary"
colspan="4" />
<field name="location" />
colspan="4" />
<field name="categ_id" widget="selection" string="Meeting Type" domain="[('object_id.model', '=', 'crm.meeting')]"/>
<field name="date" string="Start Date" required="1" />
<field name="duration" widget="float_time" />
<field name="date_deadline" string="End Date" required="1" />
<field name="categ_id"/>
<field name="alarm_id" string="Reminder" widget="selection" />
<group colspan="2" col="3" attrs="{'readonly':[('recurrent_uid','!=',False)]}">
<field name="rrule_type" string="Recurrency"
on_change="onchange_rrule_type(rrule_type)"
colspan="1" />
<button string="Custom"
name="%(caldav.action_calendar_custom_rrule_wizard)d"
icon="gtk-save-as" type="action" context="{'model' : 'crm.meeting'}"
attrs="{'readonly': [('rrule_type','!=','custom')]}"
/>
</group>
</group>
<notebook colspan="4">
<page string="Description">
<page string="Meeting">
<separator colspan="4" string="Communication"/>
<field name="partner_id" string="Partner"
on_change="onchange_partner_id(partner_id)" />
<field name="partner_address_id"
string="Contact"
on_change="onchange_partner_address_id(partner_address_id, email_from)" />
<field name="email_from"/>
<separator colspan="4" string="Status and Categarization"/>
<group colspan="4" col="6">
<field name="priority"/>
<field name="user_id" />
<field name="section_id" widget="selection" />
</group>
<separator string="Description" colspan="4" />
<field name="description" nolabel="1" colspan="4" />
</page>
<page string="Attendee Detail">
<button string="Invite People"
name="%(caldav.action_view_calendar_invite_attendee_wizard)d"
icon="terp-partner" type="action"
context="{'model' : 'crm.meeting', 'attendee_field':'attendee_ids'}" colspan="2"/>
<field name="attendee_ids" colspan="4"
nolabel="1" widget="one2many" mode="tree,form">
<tree string="Atendee details" editable="top">
<field name="email" />
<field name="role" select="1" />
<field name="state" />
</tree>
<form string="Atendee details">
<notebook colspan="4">
<page string="Details">
<field name="email" />
<field name="rsvp" select="1" />
<field name="cutype" select="1" />
<field name="role" select="1" />
<separator colspan="4" string="" />
<field name="state" />
</page>
<page string="Other">
<field name="user_id"/>
<field name="partner_address_id" select="1" />
<newline />
</page>
</notebook>
</form>
</field>
</page>
<page string="Other Information">
<field name="priority"/>
<field name="show_as"/>
<field name="class"/>
<field name="user_id" on_change="onchange_user_id(user_id)"/>
<field name="section_id" widget="selection"
/>
<field name="vtimezone"/>
<field name="recurrent_id" invisible="1" />
<field name="recurrent_uid" invisible="1" />
<field name="rrule" invisible="1" />
</page>
<separator colspan="4"/>
<group col="8" colspan="4">
<field name="state" select="2"/>
<button name="case_close" string="Done" states="open,draft,pending" type="object" icon="gtk-close"/>
<button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward"/>
<button name="case_cancel" string="Cancel" states="draft,open,pending" type="object" icon="gtk-cancel"/>
<button name="case_pending" string="Pending" states="draft,open" type="object" icon="gtk-media-pause"/>
<button name="case_escalate" string="Escalate" states="open,draft,pending" type="object" icon="gtk-go-up"/>
<button name="case_reset" string="Reset to Draft" states="done,cancel" type="object" icon="gtk-convert"/>
</group>
</page>
</notebook>
<group col="3" colspan="4" attrs="{'invisible':[('rrule_type','in', ('none', False))]}">
<label string="" />
<button string="Modify this Occurrence"
name="%(base_calendar.wizard_edit_this_event)d" icon="gtk-save"
type="action" context="{'model' : 'crm.meeting', 'date': date, 'date_deadline': date_deadline}" />
</group>
</form>
</field>
</record>
@ -111,18 +73,16 @@
<field name="model">crm.meeting</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Meetings Tree" colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')">
<tree string="Meetings" colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')">
<field name="id" widget="char"/>
<field name="name" string="Title"/>
<field name="date" string="Meeting Date"/>
<field name="name" string="Subject"/>
<field name="partner_id" string="Partner"/>
<field name="section_id" />
<field name="priority"/>
<field name="date" string="Meeting Date"/>
<field name="categ_id"/>
<field name="priority"/>
<field name="user_id"/>
<field name="state"/>
<button name="case_open" string="Confirm Meeting" states="draft,cancel,pending" type="object" icon="terp-crm"/>
<button name="case_cancel" string="Cancel Meeting" states="draft,open,pending" type="object" icon="gtk-cancel"/>
<button name="case_reset" string="Reset to Unconfirmed" states="done,open,cancel" type="object" icon="gtk-convert"/>
<field name="state"/>
</tree>
</field>
</record>

View File

@ -1,18 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<wizard string="Import .ics File" model="crm.meeting"
name="calendar.event.import" id="base_calendar.wizard_cal_event_import" />
<wizard string="Subscribe"
model="crm.meeting" name="calendar.event.subscribe"
id="base_calendar.wizard_cal_event_subscribe" />
<wizard string="Export .ics File" model="crm.meeting"
name="calendar.event.export" id="base_calendar.wizard_cal_event_export" />
<wizard string="Edit this event" model="crm.meeting"
name="calendar.event.edit.this" id="base_calendar.wizard_edit_this_event"
menu="False" />
</data>
</openerp>

View File

@ -9,6 +9,7 @@
src_model="res.partner"
view_mode="calendar,tree,form"
context="{'default_partner_id': active_id, 'default_duration': 1.0}"
domain="[('partner_id', '=', active_id)]"
/>

View File

@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-02-10 04:43+0000\n"
"X-Launchpad-Export-Date: 2010-02-11 05:02+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm

View File

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

View File

@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'Extened Module to Add CalDav future on Meeting',
'version': '1.0',
'category': 'Generic Modules/CRM & SRM',
'description': """
New Futures in Meeting:
* Recurrent meeting
* Alarms
* Invitation facility
* Share meeting with other calendar clients like sunbird
""",
'author': 'Tiny',
'website': 'http://www.openerp.com',
'depends': ['base_calendar',
'crm'
],
'init_xml': [
'crm_caldav_data.xml',
],
'update_xml': [
'crm_caldav_wizard.xml',
'crm_caldav_view.xml',
'crm_caldav_menu.xml',
],
'demo_xml': [],
'installable': True,
'active': False,
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,66 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import fields, osv
from crm import crm
class crm_meeting(osv.osv):
_name = 'crm.meeting'
_description = "Meetings"
_order = "id desc"
_inherit = ["crm.case", "calendar.event"]
_columns = {
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
'categ_id': fields.many2one('crm.case.categ', 'Meeting Type', \
domain="[('object_id.model', '=', 'crm.meeting')]", \
),
'phonecall_id':fields.many2one ('crm.phonecall', 'Phonecall'),
'opportunity_id':fields.many2one ('crm.opportunity', 'Opportunity'),
'attendee_ids': fields.many2many('calendar.attendee', 'event_attendee_rel', 'event_id', 'attendee_id', 'Attendees'),
}
crm_meeting()
class calendar_attendee(osv.osv):
_inherit = 'calendar.attendee'
def _compute_data(self, cr, uid, ids, name, arg, context):
name = name[0]
result = super(calendar_attendee, self)._compute_data(cr, uid, ids, name, arg, context)
for attdata in self.browse(cr, uid, ids, context=context):
id = attdata.id
result[id] = {}
if name == 'categ_id':
if attdata.ref:
model, res_id = tuple(attdata.ref.split(','))
model_obj = self.pool.get(model)
obj = model_obj.read(cr, uid, res_id, ['categ_id'])[0]
result[id][name] = obj.get('categ_id')
else:
result[id][name] = False
return result
_columns = {
'categ_id': fields.function(_compute_data, method=True, string='Event Type', type="many2one", relation="crm.case.categ", multi='categ_id'),
}
calendar_attendee()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,331 @@
<?xml version="1.0"?>
<openerp>
<data noupdate="1">
<record model="res.request.link" id="request_link_meeting">
<field name="name">Case Meeting</field>
<field name="object">crm.meeting</field>
</record>
<!-- Event Attribute mapping for Calendar-->
<record model="basic.calendar" id="caldav.basic_calendar1">
<field name="name">Meetings</field>
</record>
<record model="basic.calendar.lines" id="base_calendar.calendar_lines_event">
<field name="name">vevent</field>
<field name="calendar_id" ref="caldav.basic_calendar1" />
<field name="object_id" search="[('model','=','crm.meeting')]" />
<field name="domain">[('user_id','=', uid)]</field>
</record>
<record model="basic.calendar.lines" id="base_calendar.calendar_lines_alarm">
<field name="name">valarm</field>
<field name="calendar_id" ref="caldav.basic_calendar1" />
<field name="object_id" search="[('model','=','calendar.alarm')]" />
</record>
<record model="basic.calendar.lines" id="base_calendar.calendar_lines_attendee">
<field name="name">attendee</field>
<field name="calendar_id" ref="caldav.basic_calendar1" />
<field name="object_id" search="[('model','=','calendar.attendee')]" />
</record>
<record model="basic.calendar.fields" id="map_event_1">
<field name="name" ref="caldav.field_event_uid"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','id'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_2">
<field name="name" ref="caldav.field_event_recurrence-id"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','recurrent_id'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_3">
<field name="name" ref="caldav.field_event_vtimezone"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','vtimezone'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_4">
<field name="name" ref="caldav.field_event_attendee" />
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','attendee_ids'),('model_id.model','=','crm.meeting')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_5">
<field name="name" ref="caldav.field_event_rrule"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','rrule'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_6">
<field name="name" ref="caldav.field_event_dtend"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','date_deadline'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_7">
<field name="name" ref="caldav.field_event_valarm"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','base_calendar_alarm_id'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_8">
<field name="name" ref="caldav.field_event_priority"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','priority'),('model_id.model','=','crm.meeting')]" />
<field name="fn">field</field>
<field name="mapping">{'1': '1', '2': '2', '3': '2','4': '2', '5': '3', '6': '4', '7': '4', '8': '4', '9': '5'}</field>
</record>
<record model="basic.calendar.fields" id="map_event_9">
<field name="name" ref="caldav.field_event_location"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','location'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_10">
<field name="name" ref="caldav.field_event_exrule"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','exrule'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_11">
<field name="name" ref="caldav.field_event_status"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','state'),('model_id.model','=','crm.meeting')]" />
<field name="mapping">{'tentative': 'draft', 'confirmed': 'open', 'cancelled': 'cancel'}</field>
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_12">
<field name="name" ref="caldav.field_event_exdate"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','exdate'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_13">
<field name="name" ref="caldav.field_event_dtstamp"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','date'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_14">
<field name="name" ref="caldav.field_event_description"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','description'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_15">
<field name="name" ref="caldav.field_event_dtstart"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','date'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_16">
<field name="name" ref="caldav.field_event_class"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','class'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_18">
<field name="name" ref="caldav.field_event_created"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','create_date'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_19">
<field name="name" ref="caldav.field_event_url"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','base_calendar_url'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_20">
<field name="name" ref="caldav.field_event_summary"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','name'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_1">
<field name="name" ref="caldav.field_alarm_attendee"/>
<field name="type_id" ref="base_calendar.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','attendee_ids'),('model_id.model','=','calendar.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_2">
<field name="name" ref="caldav.field_alarm_trigger_duration"/>
<field name="type_id" ref="base_calendar.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','trigger_duration'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_3">
<field name="name" ref="caldav.field_alarm_description"/>
<field name="type_id" ref="base_calendar.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','description'),('model_id.model','=','calendar.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_4">
<field name="name" ref="caldav.field_alarm_attach"/>
<field name="type_id" ref="base_calendar.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','attach'),('model_id.model','=','calendar.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_5">
<field name="name" ref="caldav.field_alarm_trigger_occurs"/>
<field name="type_id" ref="base_calendar.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','trigger_occurs'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_6">
<field name="name" ref="caldav.field_alarm_trigger_interval"/>
<field name="type_id" ref="base_calendar.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','trigger_interval'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_7">
<field name="name" ref="caldav.field_alarm_summary"/>
<field name="type_id" ref="base_calendar.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','name'),('model_id.model','=','calendar.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_8">
<field name="name" ref="caldav.field_alarm_duration"/>
<field name="type_id" ref="base_calendar.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','duration'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_9">
<field name="name" ref="caldav.field_alarm_repeat"/>
<field name="type_id" ref="base_calendar.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','repeat'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_10">
<field name="name" ref="caldav.field_alarm_action"/>
<field name="type_id" ref="base_calendar.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','action'),('model_id.model','=','calendar.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_11">
<field name="name" ref="caldav.field_alarm_trigger_related"/>
<field name="type_id" ref="base_calendar.calendar_lines_alarm" />
<field name="field_id" search="[('name','=','trigger_related'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_1">
<field name="name" ref="caldav.field_attendee_cn"/>
<field name="type_id" ref="base_calendar.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','cn'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_2">
<field name="name" ref="caldav.field_attendee_sent-by"/>
<field name="type_id" ref="base_calendar.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','sent_by'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_3">
<field name="name" ref="caldav.field_attendee_language"/>
<field name="type_id" ref="base_calendar.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','language'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_4">
<field name="name" ref="caldav.field_attendee_delegated-from"/>
<field name="type_id" ref="base_calendar.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','delegated_from'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_5">
<field name="name" ref="caldav.field_attendee_member"/>
<field name="type_id" ref="base_calendar.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','member'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_6">
<field name="name" ref="caldav.field_attendee_cutype"/>
<field name="type_id" ref="base_calendar.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','cutype'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_7">
<field name="name" ref="caldav.field_attendee_role"/>
<field name="type_id" ref="base_calendar.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','role'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_8">
<field name="name" ref="caldav.field_attendee_partstat"/>
<field name="type_id" ref="base_calendar.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','state'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_9">
<field name="name" ref="caldav.field_attendee_delegated-to"/>
<field name="type_id" ref="base_calendar.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','delegated_to'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_10">
<field name="name" ref="caldav.field_attendee_dir"/>
<field name="type_id" ref="base_calendar.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','dir'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_11">
<field name="name" ref="caldav.field_attendee_rsvp"/>
<field name="type_id" ref="base_calendar.calendar_lines_attendee" />
<field name="field_id" search="[('name','=','rsvp'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
</data>
</openerp>

View File

@ -0,0 +1,22 @@
<?xml version="1.0"?>
<openerp>
<data noupdate="1">
<record id="action_view_attendee_form" model="ir.actions.act_window">
<field name="name">Meeting Invitations</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">calendar.attendee</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="base_calendar.base_calendar_attendee_tree_view" />
<field name="domain">[('ref','like','crm.meeting,')]</field>
<field name="context">{'default_sent_by_uid': uid}</field>
</record>
<menuitem id="menu_attendee_invitations"
name="Meeting Invitations" parent="crm.menu_meeting_sale"
sequence="10" action="action_view_attendee_form" />
</data>
</openerp>

View File

@ -0,0 +1,130 @@
<?xml version="1.0"?>
<openerp>
<data>
<record id="meeting_form_view_inherit1" model="ir.ui.view">
<field name="name">CRM - Meetings Form Inherit1</field>
<field name="model">crm.meeting</field>
<field name="type">form</field>
<field name="inherit_id" ref="crm.crm_case_form_view_meet"/>
<field name="arch" type="xml">
<field name="date_deadline" position="after">
<group colspan="2" col="4" >
<field name="rrule_type" string="Recurrency"
on_change="onchange_rrule_type(rrule_type)"
colspan="1" attrs="{'readonly':[('recurrent_uid','!=',False)]}"/>
<button string="Custom"
name="%(base_calendar.action_calendar_custom_rrule_wizard)d"
icon="gtk-save-as" type="action" context="{'model' : 'crm.meeting'}"
attrs="{'invisible': [('rrule_type','!=','custom')]}"
/>
<button string="Edit" help="Edit only this Occurrency Meeting" attrs="{'invisible':[('rrule_type','in', ('none', False))]}"
name="%(caldav.wizard_edit_this_event)d" icon="gtk-save"
type="action" context="{'model' : 'crm.meeting', 'date': date, 'date_deadline': date_deadline}" />
</group>
<field name="alarm_id" string="Reminder" widget="selection" />
<field name="location" />
</field>
</field>
</record>
<record id="meeting_form_view_inherit2" model="ir.ui.view">
<field name="name">CRM - Meetings Form Inherit2</field>
<field name="model">crm.meeting</field>
<field name="type">form</field>
<field name="inherit_id" ref="crm.crm_case_form_view_meet"/>
<field name="arch" type="xml">
<xpath expr="/form/notebook/page[@string='Meeting']" position="after">
<page string="Invitation Detail">
<button string="Invite People"
name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d"
icon="terp-partner" type="action"
context="{'model' : 'crm.meeting', 'attendee_field':'attendee_ids'}" colspan="2"/>
<field name="attendee_ids" colspan="4"
nolabel="1" widget="one2many" mode="tree,form">
<tree string="Invitation details" editable="top">
<field name="email" />
<field name="role" select="1" />
<field name="state" />
</tree>
<form string="Invitation details">
<notebook colspan="4">
<page string="Details">
<field name="email" />
<field name="rsvp" select="1" />
<field name="cutype" select="1" />
<field name="role" select="1" />
<separator colspan="4" string="" />
<field name="state" />
</page>
<page string="Other">
<field name="user_id"/>
<field name="partner_address_id" select="1" />
<newline />
</page>
</notebook>
</form>
</field>
</page>
</xpath>
</field>
</record>
<record id="meeting_form_view_inherit3" model="ir.ui.view">
<field name="name">CRM - Meetings Form Inherit3</field>
<field name="model">crm.meeting</field>
<field name="type">form</field>
<field name="inherit_id" ref="crm.crm_case_form_view_meet"/>
<field name="arch" type="xml">
<xpath expr="/form/notebook/page/group/field[@name='section_id']" position="after">
<newline/>
<field name="show_as" string="Show time as"/>
<field name="class" string="Privacy"/>
<field name="vtimezone"/>
<field name="recurrent_id" invisible="1" />
<field name="recurrent_uid" invisible="1" />
<field name="rrule" invisible="1" />
</xpath>
</field>
</record>
<record id="meeting_form_view_inherit4" model="ir.ui.view">
<field name="name">CRM - Meetings Form Inherit4</field>
<field name="model">crm.meeting</field>
<field name="type">form</field>
<field name="inherit_id" ref="crm.crm_case_form_view_meet"/>
<field name="arch" type="xml">
<xpath expr="/form/notebook/page/group/field[@name='user_id']" position="replace">
<field name="user_id" on_change="onchange_user_id(user_id)"/>
</xpath>
</field>
</record>
<record id="attendee_form_view_inherit" model="ir.ui.view">
<field name="name">calendar.attendee.form.inherit</field>
<field name="model">calendar.attendee</field>
<field name="type">form</field>
<field name="inherit_id" ref="base_calendar.base_calendar_attendee_form_view"/>
<field name="arch" type="xml">
<field name="language" position="after">
<field name="categ_id" string="Event Type"/>
</field>
</field>
</record>
<record id="attendee_tree_view_inherit" model="ir.ui.view">
<field name="name">calendar.attendee.tree.inherit</field>
<field name="model">calendar.attendee</field>
<field name="type">tree</field>
<field name="inherit_id" ref="base_calendar.base_calendar_attendee_tree_view"/>
<field name="arch" type="xml">
<field name="role" position="after">
<field name="categ_id" string="Event Type"/>
</field>
</field>
</record>
</data>
</openerp>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<wizard string="Import .ics File" model="crm.meeting"
name="calendar.event.import" id="caldav.wizard_cal_event_import" />
<wizard string="Export .ics File" model="crm.meeting"
name="calendar.event.export" id="caldav.wizard_cal_event_export" />
<wizard string="Edit this event" model="crm.meeting"
name="calendar.event.edit.this" id="caldav.wizard_edit_this_event"
menu="False" />
</data>
</openerp>

View 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-16 12:14+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-02-10 21:46+0000\n"
"Last-Translator: Davide Corio <davide.corio@domsense.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: 2009-12-16 05:02+0000\n"
"X-Launchpad-Export-Date: 2010-02-11 05:02+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: project
@ -24,7 +24,7 @@ msgstr "Attività Assegnate"
#. module: project
#: model:process.process,name:project.process_process_tasksprocess0
msgid "Tasks Process"
msgstr ""
msgstr "Flusso Attività"
#. module: project
#: help:project.task.delegate,init,name:0

View File

@ -49,13 +49,14 @@ class project(osv.osv):
def search(self, cr, user, args, offset=0, limit=None, order=None,
context=None, count=False):
if user==1:
if user == 1:
return super(project, self).search(cr, user, args, offset=offset, limit=limit, order=order,
context=context, count=count)
if context and context.has_key('user_prefence') and context['user_prefence']:
cr.execute("""SELECT project.id FROM project_project project
LEFT JOIN account_analytic_account account ON account.id = project.category_id
WHERE (account.user_id = %s)"""%(user))
LEFT JOIN project_user_rel rel ON rel.project_id = project.category_id
WHERE (account.user_id = %s or rel.uid = %s)"""%(user, user))
res = cr.fetchall()
return [(r[0]) for r in res]
return super(project, self).search(cr, user, args, offset=offset, limit=limit, order=order,
@ -120,6 +121,7 @@ class project(osv.osv):
_columns = {
'complete_name': fields.function(_complete_name, method=True, string="Project Name", type='char', size=250),
'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the project without removing it."),
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of Projects."),
'category_id': fields.many2one('account.analytic.account','Analytic Account', help="Link this project to an analytic account if you need financial management on projects. It enables you to connect projects with budgets, planning, cost and revenue analysis, timesheets on projects, etc."),
'priority': fields.integer('Sequence'),
'warn_manager': fields.boolean('Warn Manager', help="If you check this field, the project manager will receive a request each time a task is completed by his team."),
@ -138,10 +140,11 @@ class project(osv.osv):
# \n If it is to be reviewed then the state is \'Pending\'.\n When the project is completed the state is set to \'Done\'.'),
'type_ids': fields.many2many('project.task.type', 'project_task_type_rel', 'project_id', 'type_id', 'Tasks Stages'),
}
_order = "sequence"
_defaults = {
'active': lambda *a: True,
'priority': lambda *a: 1,
'sequence': lambda *a: 10,
}
def _check_dates(self, cr, uid, ids):
leave = self.read(cr, uid, ids[0],['date_start','date'])
@ -536,6 +539,7 @@ config_compute_remaining()
class message(osv.osv):
_name = "project.message"
_description = "Message"
_columns = {
'subject': fields.char('Subject', size=128, required="True"),
'description': fields.text('Description'),
@ -543,6 +547,7 @@ class message(osv.osv):
'date': fields.date('Date'),
'user_id': fields.many2one('res.users', 'User', required="True"),
}
def _default_project(self, cr, uid, context={}):
if 'project_id' in context and context['project_id']:
return int(context['project_id'])
@ -554,20 +559,6 @@ class message(osv.osv):
message()
def _project_get(self, cr, uid, context={}):
if uid==1:
ids = self.pool.get('project.project').search(cr, uid, [])
res = self.pool.get('project.project').read(cr, uid, ids, ['id','name'], context)
res = [(str(r['id']),r['name']) for r in res]
else:
cr.execute("""SELECT project.id,account.name FROM project_project project
LEFT JOIN account_analytic_account account ON account.id = project.category_id
WHERE (account.user_id = %s)"""%(uid))
res = cr.fetchall()
print res
res = [(str(r[0]),r[1]) for r in res]
return res
class users(osv.osv):
_inherit = 'res.users'
_description = "Users"
@ -576,4 +567,4 @@ class users(osv.osv):
}
users()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -121,6 +121,7 @@
<field name="field_parent">child_ids</field>
<field name="arch" type="xml">
<tree string="Projects">
<field name="sequence" invisible="1"/>
<field name="name" string="Project Name"/>
<field name="user_id" string="Project Manager"/>
<field name="partner_id" string="Partner"/>
@ -183,37 +184,6 @@
</field>
</record>
<record id="view_my_project" model="ir.ui.view">
<field name="name">project.project.tree</field>
<field name="model">project.project</field>
<field name="type">tree</field>
<field name="field_parent">child_ids</field>
<field name="arch" type="xml">
<tree string="My projects">
<field name="name" string="Project Name"/>
<field name="partner_id" string="Partner"/>
<field name="planned_hours" widget="float_time"/>
<field name="effective_hours" widget="float_time"/>
<field name="progress_rate" widget="progressbar"/>
<field name="state"/>
</tree>
</field>
</record>
<record id="open_view_my_project_open" model="ir.actions.act_window">
<field name="name">Projects Structure</field>
<field name="res_model">project.project</field>
<field name="view_type">tree</field>
<field name="domain">[('parent_id','=',False)]</field>
<field name="view_id" ref="view_my_project"/>
</record>
<!--<menuitem
action="open_view_my_project_open"
id="menu_open_view_my_project_open"
parent="project.menu_all_project"/>-->
<!-- Wizard for compute remaining hours -->
<record id="view_config_compute_remaining" model="ir.ui.view">
<field name="name">Compute Remaining Hours </field>
<field name="model">config.compute.remaining</field>
@ -349,6 +319,7 @@
<field name="name"/>
<field name="project_id" icon="gtk-indent"/>
<field name="user_id"/>
<field name="delegated_user_id" invisible="context.get('show_delegated', True)"/>
<field name="remaining_hours" widget="float_time" sum="Remaining Hours" invisible="context.get('set_visible',False)"/>
<field name="date_deadline" invisible="context.get('set_visible',False)"/>
<field name="type" groups="base.group_extended" invisible="context.get('set_visible',False)"/>
@ -364,7 +335,7 @@
<field name="progress" widget="progressbar" invisible="context.get('set_visible',False)"/>
<field name="state" invisible="context.get('set_visible',False)"/>
<button name="do_open" states="pending,draft" string="Start Task" type="object" icon="gtk-execute" help="For changing to open state" invisible="context.get('set_visible',False)"/>
<button groups="base.group_extended" name="%(wizard_delegate_task)d" states="pending,open,draft" string="Delegate" type="action" icon="gtk-execute" help="For changing to delegate state" invisible="context.get('show_delegated',True)" />
<button groups="base.group_extended" name="%(wizard_delegate_task)d" states="pending,open,draft" string="Delegate" type="action" icon="gtk-execute" help="For changing to delegate state"/>
<button name="%(wizard_close_task)d" states="pending,open" string="Done" type="action" icon="gtk-jump-to" help="For changing to done state"/>
<button name="do_cancel" states="draft,open,pending" string="Cancel" type="object" icon="gtk-cancel" help="For cancelling the task"/>
</tree>
@ -595,15 +566,15 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Messages">
<group colspan="6">
<group colspan="6">
<field name="subject" select="1" string="Title"/>
<field name="project_id"/>
<field name="user_id" select="1"/>
<field name="date" select="2"/>
</group>
<separator string="Description" colspan="4"/>
<field name="description" nolabel="1" colspan="4"/>
</form>
<field name="user_id" select="1"/>
<field name="date" select="2"/>
</group>
<separator string="Description" colspan="4"/>
<field name="description" nolabel="1" colspan="4"/>
</form>
</field>
</record>

View File

@ -44,17 +44,30 @@ compute_fields = {
def timeformat_convert(cr, uid, time_string, context={}):
# Function to convert input time string:: 8.5 to output time string 8:30
strg = str(time_string)[-2:]
last_strg = str(time_string)[0:-2]
if strg != '.0':
if '.' not in strg:
strg = '.' + strg
last_strg = str(time_string)[:-3]
new_strg = round(float(strg) / 0.016666667)
converted_strg = last_strg + ':' + str(new_strg)[:-2]
else:
converted_strg = last_strg + ':00'
return converted_strg
split_list = str(time_string).split('.')
hour_part = split_list[0]
mins_part = split_list[1]
round_mins = int(round(float(mins_part) * 60,-2))
converted_string = hour_part + ':' + str(round_mins)[0:2]
return converted_string
def leaves_resource(cr,uid,id):
# To get the leaves for the members working on project
pool = pooler.get_pool(cr.dbname)
resource_leaves_pool = pool.get('resource.calendar.leaves')
resource_leave_ids = resource_leaves_pool.search(cr,uid,[('resource_id','=',id)])
leaves = []
if resource_leave_ids:
res_leaves = resource_leaves_pool.read(cr,uid,resource_leave_ids,['date_from','date_to'])
for leave in range(len(res_leaves)):
dt_start = datetime.datetime.strptime(res_leaves[leave]['date_from'],'%Y-%m-%d %H:%M:%S')
dt_end = datetime.datetime.strptime(res_leaves[leave]['date_to'],'%Y-%m-%d %H:%M:%S')
no = dt_end - dt_start
leave_days = no.days + 1
[leaves.append((dt_start + datetime.timedelta(days=x)).strftime('%Y-%m-%d')) for x in range(int(leave_days))]
leaves.sort()
return leaves
class wizard_compute_tasks(wizard.interface):
@ -76,13 +89,14 @@ class wizard_compute_tasks(wizard.interface):
task_ids.sort()
task_obj = task_pool.browse(cr,uid,task_ids)
task_1 = task_obj[0]
dt_start = datetime.datetime.strftime(datetime.datetime.strptime(project.date_start,"%Y-%m-%d"),"%Y-%m-%d %H:%M")
date_start = datetime.datetime.strftime(datetime.datetime.strptime(project.date_start,"%Y-%m-%d"),"%Y-%m-%d %H:%M")
calendar_id = project.resource_calendar_id.id
# If project has a working calendar then that would be used otherwise
# the default faces calendar would be used
if calendar_id:
resource_leave_ids = resource_leaves_pool.search(cr,uid,[('calendar_id','=',project.resource_calendar_id.id)])
resource_leave_ids = resource_leaves_pool.search(cr,uid,[('calendar_id','=',calendar_id)])
time_range = "8:00-8:00"
non_working = ""
wk = {"0":"mon","1":"tue","2":"wed","3":"thu","4":"fri","5":"sat","6":"sun"}
@ -99,7 +113,6 @@ class wizard_compute_tasks(wizard.interface):
if wk.has_key(week['dayofweek']):
day = wk[week['dayofweek']]
wk_days[week['dayofweek']] = wk[week['dayofweek']]
hour_from_str = timeformat_convert(cr,uid,week['hour_from'])
hour_to_str = timeformat_convert(cr,uid,week['hour_to'])
res_str = hour_from_str + '-' + hour_to_str
@ -140,8 +153,12 @@ class wizard_compute_tasks(wizard.interface):
resource = project.members
resource_objs = []
for no in range(len(resource)):
leaves = []
resource_id = resource_pool.search(cr,uid,[('user_id','=',resource[no].id)])
resource_objs.append(classobj(str(resource[no].name),(Resource,),{'__doc__':resource[no].name,'__name__':resource[no].name}))
if resource_id and wktime_cal:
# Getting list of leaves for specific resource
leaves = leaves_resource(cr,uid,resource_id)
resource_objs.append(classobj(str(resource[no].name),(Resource,),{'__doc__':resource[no].name,'__name__':resource[no].name,'vacation':tuple(leaves)}))
# To create dynamic no of tasks
def tasks(j,eff):
@ -168,18 +185,17 @@ class wizard_compute_tasks(wizard.interface):
# Creating the project with all the tasks and resources
def Project():
resource = reduce(operator.or_,resource_objs)
title = project.name
start = dt_start
start = date_start
resource = reduce(operator.or_,resource_objs)
# If project has calendar
if wktime_cal or leaves:
if wktime_cal:
working_days = wktime_cal
vacation = tuple(leaves)
# Dynamic Creation of tasks
for i in range(len(task_obj)):
hours = str(task_obj[i].planned_hours / task_obj[i].occupation_rate)[:-2] + 'H'
hours = str(task_obj[i].remaining_hours / task_obj[i].occupation_rate)+ 'H'
if task_obj[i].user_id:
for resource_object in resource_objs:
if resource_object.__name__ == task_obj[i].user_id.name:
@ -195,7 +211,6 @@ class wizard_compute_tasks(wizard.interface):
while loop_no <= task_no:
s_date = t.start.to_datetime()
e_date = t.end.to_datetime()
print 'Start Date And End Date:::',s_date,e_date,t.name,t.booked_resource
if loop_no != 0:
user_id = user_pool.search(cr,uid,[('name','=',t.booked_resource[0].__name__)])
task_pool.write(cr,uid,[task_obj[loop_no - 1].id],{'date_start':s_date,'date_end':e_date,'user_id':user_id[0]})

View File

@ -25,7 +25,7 @@
"author" : "Tiny",
"category" : "Generic Modules/Others",
"description": """ Synchronize between Project task and Caldav Vtodo.""",
"depends" : ["project", "caldav"],
"depends" : ["project", "base_calendar"],
"init_xml" : ["project_calendar_data.xml"],
"demo_xml" : [],
"update_xml" : ["project_calendar_view.xml",

View File

@ -2,19 +2,19 @@
<openerp>
<data noupdate="1">
<record model="basic.calendar" id="base_calendar.basic_calendar2">
<record model="basic.calendar" id="caldav.basic_calendar2">
<field name="name">Todo</field>
</record>
<record model="basic.calendar.lines" id="caldav.calendar_lines_todo">
<field name="name">vtodo</field>
<field name="calendar_id" ref="base_calendar.basic_calendar2" />
<field name="calendar_id" ref="caldav.basic_calendar2" />
<field name="object_id" search="[('model','=','project.task')]" />
<field name="domain">[('user_id','=', uid)]</field>
</record>
<record model="basic.calendar.fields" id="map_todo_1">
<field name="name" ref="base_calendar.field_todo_status" />
<field name="name" ref="caldav.field_todo_status" />
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','state'),('model_id.model','=','project.task')]" />
<field name="mapping">{'needs-action': 'draft', 'completed': 'done', 'in-process': 'open', 'cancelled': 'cancelled'}</field>
@ -22,49 +22,49 @@
</record>
<record model="basic.calendar.fields" id="map_todo_2">
<field name="name" ref="base_calendar.field_todo_exdate"/>
<field name="name" ref="caldav.field_todo_exdate"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','exdate'),('model_id.model','=','calendar.todo')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_todo_3">
<field name="name" ref="base_calendar.field_todo_attendee" />
<field name="name" ref="caldav.field_todo_attendee" />
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','attendee_ids'),('model_id.model','=','project.task')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_todo_4">
<field name="name" ref="base_calendar.field_todo_valarm"/>
<field name="name" ref="caldav.field_todo_valarm"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','caldav_alarm_id'),('model_id.model','=','calendar.todo')]" />
<field name="field_id" search="[('name','=','base_calendar_alarm_id'),('model_id.model','=','calendar.todo')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_todo_5">
<field name="name" ref="base_calendar.field_todo_description"/>
<field name="name" ref="caldav.field_todo_description"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','description'),('model_id.model','=','calendar.todo')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_todo_6">
<field name="name" ref="base_calendar.field_todo_seq"/>
<field name="name" ref="caldav.field_todo_seq"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','sequence'),('model_id.model','=','calendar.todo')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_todo_7">
<field name="name" ref="base_calendar.field_todo_url"/>
<field name="name" ref="caldav.field_todo_url"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','caldav_url'),('model_id.model','=','calendar.todo')]" />
<field name="field_id" search="[('name','=','base_calendar_url'),('model_id.model','=','calendar.todo')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_todo_9">
<field name="name" ref="base_calendar.field_todo_percent"/>
<field name="name" ref="caldav.field_todo_percent"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','progress'),('model_id.model','=','project.task')]" />
<field name="fn">field</field>
@ -72,21 +72,21 @@
<record model="basic.calendar.fields" id="map_todo_10">
<field name="name" ref="base_calendar.field_todo_vtimezone"/>
<field name="name" ref="caldav.field_todo_vtimezone"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','vtimezone'),('model_id.model','=','calendar.todo')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_todo_11">
<field name="name" ref="base_calendar.field_todo_summary"/>
<field name="name" ref="caldav.field_todo_summary"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','name'),('model_id.model','=','calendar.todo')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_todo_12">
<field name="name" ref="base_calendar.field_event_priority"/>
<field name="name" ref="caldav.field_event_priority"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','priority'),('model_id.model','=','project.task')]" />
<field name="fn">field</field>
@ -94,49 +94,49 @@
</record>
<record model="basic.calendar.fields" id="map_todo_13">
<field name="name" ref="base_calendar.field_todo_location"/>
<field name="name" ref="caldav.field_todo_location"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','location'),('model_id.model','=','calendar.todo')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_todo_14">
<field name="name" ref="base_calendar.field_todo_exrule"/>
<field name="name" ref="caldav.field_todo_exrule"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','exrule'),('model_id.model','=','calendar.todo')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_todo_15">
<field name="name" ref="base_calendar.field_todo_duration"/>
<field name="name" ref="caldav.field_todo_duration"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','planned_hours'),('model_id.model','=','project.task')]" />
<field name="fn">hours</field>
</record>
<record model="basic.calendar.fields" id="map_todo_16">
<field name="name" ref="base_calendar.field_todo_dtstart"/>
<field name="name" ref="caldav.field_todo_dtstart"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','date'),('model_id.model','=','calendar.todo')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_todo_17">
<field name="name" ref="base_calendar.field_todo_rrule"/>
<field name="name" ref="caldav.field_todo_rrule"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','rrule'),('model_id.model','=','calendar.todo')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_todo_18">
<field name="name" ref="base_calendar.field_todo_class"/>
<field name="name" ref="caldav.field_todo_class"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','class'),('model_id.model','=','calendar.todo')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_todo_19">
<field name="name" ref="base_calendar.field_todo_uid"/>
<field name="name" ref="caldav.field_todo_uid"/>
<field name="type_id" ref="caldav.calendar_lines_todo" />
<field name="field_id" search="[('name','=','id'),('model_id.model','=','calendar.todo')]" />
<field name="fn">field</field>
@ -144,89 +144,89 @@
<record model="basic.calendar.lines" id="caldav.calendar_lines_alarm2">
<field name="name">valarm</field>
<field name="calendar_id" ref="base_calendar.basic_calendar2" />
<field name="calendar_id" ref="caldav.basic_calendar2" />
<field name="object_id" search="[('model','=','calendar.alarm')]" />
</record>
<record model="basic.calendar.lines" id="caldav.calendar_lines_attendee2">
<field name="name">attendee</field>
<field name="calendar_id" ref="base_calendar.basic_calendar2" />
<field name="calendar_id" ref="caldav.basic_calendar2" />
<field name="object_id" search="[('model','=','calendar.attendee')]" />
</record>
<record model="basic.calendar.fields" id="map_alarm_1">
<field name="name" ref="base_calendar.field_alarm_attendee"/>
<field name="name" ref="caldav.field_alarm_attendee"/>
<field name="type_id" ref="caldav.calendar_lines_alarm2" />
<field name="field_id" search="[('name','=','attendee_ids'),('model_id.model','=','calendar.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_2">
<field name="name" ref="base_calendar.field_alarm_trigger_duration"/>
<field name="name" ref="caldav.field_alarm_trigger_duration"/>
<field name="type_id" ref="caldav.calendar_lines_alarm2" />
<field name="field_id" search="[('name','=','trigger_duration'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_3">
<field name="name" ref="base_calendar.field_alarm_description"/>
<field name="name" ref="caldav.field_alarm_description"/>
<field name="type_id" ref="caldav.calendar_lines_alarm2" />
<field name="field_id" search="[('name','=','description'),('model_id.model','=','calendar.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_4">
<field name="name" ref="base_calendar.field_alarm_attach"/>
<field name="name" ref="caldav.field_alarm_attach"/>
<field name="type_id" ref="caldav.calendar_lines_alarm2" />
<field name="field_id" search="[('name','=','attach'),('model_id.model','=','calendar.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_5">
<field name="name" ref="base_calendar.field_alarm_trigger_occurs"/>
<field name="name" ref="caldav.field_alarm_trigger_occurs"/>
<field name="type_id" ref="caldav.calendar_lines_alarm2" />
<field name="field_id" search="[('name','=','trigger_occurs'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_6">
<field name="name" ref="base_calendar.field_alarm_trigger_interval"/>
<field name="name" ref="caldav.field_alarm_trigger_interval"/>
<field name="type_id" ref="caldav.calendar_lines_alarm2" />
<field name="field_id" search="[('name','=','trigger_interval'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_7">
<field name="name" ref="base_calendar.field_alarm_summary"/>
<field name="name" ref="caldav.field_alarm_summary"/>
<field name="type_id" ref="caldav.calendar_lines_alarm2" />
<field name="field_id" search="[('name','=','name'),('model_id.model','=','calendar.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_8">
<field name="name" ref="base_calendar.field_alarm_duration"/>
<field name="name" ref="caldav.field_alarm_duration"/>
<field name="type_id" ref="caldav.calendar_lines_alarm2" />
<field name="field_id" search="[('name','=','duration'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_9">
<field name="name" ref="base_calendar.field_alarm_repeat"/>
<field name="name" ref="caldav.field_alarm_repeat"/>
<field name="type_id" ref="caldav.calendar_lines_alarm2" />
<field name="field_id" search="[('name','=','repeat'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_10">
<field name="name" ref="base_calendar.field_alarm_action"/>
<field name="name" ref="caldav.field_alarm_action"/>
<field name="type_id" ref="caldav.calendar_lines_alarm2" />
<field name="field_id" search="[('name','=','action'),('model_id.model','=','calendar.alarm')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_alarm_11">
<field name="name" ref="base_calendar.field_alarm_trigger_related"/>
<field name="name" ref="caldav.field_alarm_trigger_related"/>
<field name="type_id" ref="caldav.calendar_lines_alarm2" />
<field name="field_id" search="[('name','=','trigger_related'),('model_id.model','=','res.alarm')]" />
<field name="fn">field</field>
@ -234,77 +234,77 @@
<record model="basic.calendar.fields" id="map_attendee_1">
<field name="name" ref="base_calendar.field_attendee_cn"/>
<field name="name" ref="caldav.field_attendee_cn"/>
<field name="type_id" ref="caldav.calendar_lines_attendee2" />
<field name="field_id" search="[('name','=','cn'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_2">
<field name="name" ref="base_calendar.field_attendee_sent-by"/>
<field name="name" ref="caldav.field_attendee_sent-by"/>
<field name="type_id" ref="caldav.calendar_lines_attendee2" />
<field name="field_id" search="[('name','=','sent_by'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_3">
<field name="name" ref="base_calendar.field_attendee_language"/>
<field name="name" ref="caldav.field_attendee_language"/>
<field name="type_id" ref="caldav.calendar_lines_attendee2" />
<field name="field_id" search="[('name','=','language'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_4">
<field name="name" ref="base_calendar.field_attendee_delegated-from"/>
<field name="name" ref="caldav.field_attendee_delegated-from"/>
<field name="type_id" ref="caldav.calendar_lines_attendee2" />
<field name="field_id" search="[('name','=','delegated_from'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_5">
<field name="name" ref="base_calendar.field_attendee_member"/>
<field name="name" ref="caldav.field_attendee_member"/>
<field name="type_id" ref="caldav.calendar_lines_attendee2" />
<field name="field_id" search="[('name','=','member'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_6">
<field name="name" ref="base_calendar.field_attendee_cutype"/>
<field name="name" ref="caldav.field_attendee_cutype"/>
<field name="type_id" ref="caldav.calendar_lines_attendee2" />
<field name="field_id" search="[('name','=','cutype'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_7">
<field name="name" ref="base_calendar.field_attendee_role"/>
<field name="name" ref="caldav.field_attendee_role"/>
<field name="type_id" ref="caldav.calendar_lines_attendee2" />
<field name="field_id" search="[('name','=','role'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_8">
<field name="name" ref="base_calendar.field_attendee_partstat"/>
<field name="name" ref="caldav.field_attendee_partstat"/>
<field name="type_id" ref="caldav.calendar_lines_attendee2" />
<field name="field_id" search="[('name','=','state'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_9">
<field name="name" ref="base_calendar.field_attendee_delegated-to"/>
<field name="name" ref="caldav.field_attendee_delegated-to"/>
<field name="type_id" ref="caldav.calendar_lines_attendee2" />
<field name="field_id" search="[('name','=','delegated_to'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_10">
<field name="name" ref="base_calendar.field_attendee_dir"/>
<field name="name" ref="caldav.field_attendee_dir"/>
<field name="type_id" ref="caldav.calendar_lines_attendee2" />
<field name="field_id" search="[('name','=','dir'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_attendee_11">
<field name="name" ref="base_calendar.field_attendee_rsvp"/>
<field name="name" ref="caldav.field_attendee_rsvp"/>
<field name="type_id" ref="caldav.calendar_lines_attendee2" />
<field name="field_id" search="[('name','=','rsvp'),('model_id.model','=','calendar.attendee')]" />
<field name="fn">field</field>

View File

@ -11,7 +11,7 @@
<notebook position="inside">
<page string="Assignees Detail">
<button string="Assign Task"
name="%(caldav.action_view_calendar_invite_attendee_wizard)d"
name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d"
icon="terp-partner" type="action"
context="{'model' : 'project.task'}" colspan="2"/>
<field name="attendee_ids" colspan="4"
@ -89,7 +89,7 @@
<field name="vtimezone" colspan="2" />
<field name="location" colspan="2" />
<field name="alarm_id" string="Reminder" widget="selection" />
<field name="caldav_url" widget="url" />
<field name="base_calendar_url" widget="url" />
<field name="rrule" invisible="1"/>
</field>
</field>

View File

@ -1,17 +1,17 @@
<openerp>
<data>
<wizard string="Import .ics File" model="project.task"
name="calendar.event.import" id="base_calendar.wizard_cal_event_import" />
name="calendar.event.import" id="caldav.wizard_cal_event_import" />
<wizard string="Subscribe"
model="project.task" name="calendar.event.subscribe"
id="base_calendar.wizard_cal_event_subscribe" />
id="caldav.wizard_cal_event_subscribe" />
<wizard string="Export .ics File" model="project.task"
name="calendar.event.export" id="base_calendar.wizard_cal_event_export" />
name="calendar.event.export" id="caldav.wizard_cal_event_export" />
<wizard string="Edit this event" model="project.task"
name="calendar.event.edit.this" id="base_calendar.wizard_edit_this_event"
name="calendar.event.edit.this" id="caldav.wizard_edit_this_event"
menu="False" />
</data>

View 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-12-01 14:56+0000\n"
"Last-Translator: Wei \"oldrev\" Li <oldrev@gmail.com>\n"
"PO-Revision-Date: 2010-02-11 03:12+0000\n"
"Last-Translator: 一念轮回 <Unknown>\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: 2009-12-16 05:19+0000\n"
"X-Launchpad-Export-Date: 2010-02-11 05:02+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: project_gtd
@ -128,7 +128,7 @@ msgstr "类型"
#. module: project_gtd
#: field:project.gtd.timebox,col_effective_hours:0
msgid "Effective Hours"
msgstr ""
msgstr "有效时间"
#. module: project_gtd
#: model:ir.actions.wizard,name:project_gtd.open_gtd_timebox_empty

View File

@ -40,12 +40,12 @@ class project_phase(osv.osv):
if (obj_self in prev_ids) or (obj_self in next_ids):
return False
ids = [id for id in prev_ids if id in next_ids]
#both prev_ids and next_ids must be unique
if ids:
return False
#unrelated project
prev_ids = [rec.id for rec in prev_ids]
next_ids = [rec.id for rec in next_ids]
@ -59,7 +59,7 @@ class project_phase(osv.osv):
if ids:
return False
prev_ids = prv_phase_ids
#iter next_ids
while next_ids:
cr.execute('select distinct next_phase_id from project_phase_next_rel where phase_id in ('+','.join(map(str, next_ids))+')')
@ -100,7 +100,9 @@ project_phase()
class project_resource_allocation(osv.osv):
_name = 'project.resource.allocation'
_description = 'Project Resource Allocation'
_rec_name = 'resource_id'
_columns = {
# 'name': fields.char('Name',size = 64),
'resource_id': fields.many2one('resource.resource', 'Resource', required=True),
'phase_id': fields.many2one('project.phase', 'Project Phase', required=True),
'useability': fields.float('Useability', help="Useability of this ressource for this project phase in percentage (=50%)"),
@ -108,6 +110,7 @@ class project_resource_allocation(osv.osv):
_defaults = {
'useability': lambda *a: 100,
}
project_resource_allocation()
class project(osv.osv):

View File

@ -24,151 +24,206 @@ import pooler
from tools.translate import _
import datetime
from resource.faces import *
from new import classobj
import operator
compute_form = """<?xml version="1.0" ?>
<form string="Compute Scheduling of Tasks">
<form string="Compute Scheduling of Phases">
<field name="project_id" colspan="4"/>
<field name="phase_id" colspan="4"/>
</form>"""
compute_fields = {
'project_id': {'string':'Project', 'type':'many2one', 'relation': 'project.project', 'required':'True'},
'phase_id': {'string':'Phase', 'type':'many2one', 'relation': 'project.phase', 'required':'True'},
}
success_msg = """<?xml version="1.0" ?>
<form string="Compute Scheduling of Phases">
<label string="Phase Scheduling completed successfully."/>
</form>"""
def timeformat_convert(cr, uid, time_string, context={}):
strg = str(time_string)[-2:]
last_strg = str(time_string)[0:-2]
if strg != '.0':
if '.' not in strg:
strg = '.' + strg
last_strg = str(time_string)[:-3]
# Function to convert input time string:: 8.5 to output time string 8:30
new_strg = round(float(strg) / 0.016666667)
converted_strg = last_strg + ':' + str(new_strg)[:-2]
else:
converted_strg = last_strg + ':00'
split_list = str(time_string).split('.')
hour_part = split_list[0]
mins_part = split_list[1]
round_mins = int(round(float(mins_part) * 60,-2))
converted_string = hour_part + ':' + str(round_mins)[0:2]
return converted_string
return converted_strg
def leaves_resource(cr,uid,id):
# To get the leaves for the resource_ids working on phase
pool = pooler.get_pool(cr.dbname)
resource_leaves_pool = pool.get('resource.calendar.leaves')
resource_leave_ids = resource_leaves_pool.search(cr,uid,[('resource_id','=',id)])
leaves = []
if resource_leave_ids:
res_leaves = resource_leaves_pool.read(cr,uid,resource_leave_ids,['date_from','date_to'])
for leave in range(len(res_leaves)):
dt_start = datetime.datetime.strptime(res_leaves[leave]['date_from'],'%Y-%m-%d %H:%M:%S')
dt_end = datetime.datetime.strptime(res_leaves[leave]['date_to'],'%Y-%m-%d %H:%M:%S')
no = dt_end - dt_start
leave_days = no.days + 1
[leaves.append((dt_start + datetime.timedelta(days=x)).strftime('%Y-%m-%d')) for x in range(int(leave_days))]
leaves.sort()
return leaves
def resource_list(cr,uid,obj):
# To get the resource_ids working on phase
pool = pooler.get_pool(cr.dbname)
resource_pool = pool.get('resource.resource')
resources = obj.resource_ids
resource_objs = []
leaves = []
calendar_id = obj.project_id.resource_calendar_id
for no in range(len(resources)):
resource_id = resource_pool.search(cr,uid,[('id','=',resources[no].resource_id.id)])
if resource_id and calendar_id:
# Getting list of leaves for specific resource
leaves = leaves_resource(cr,uid,resource_id)
# Creating the faces.Resource object with resource specific efficiency and vacation
resource_objs.append(classobj(str(resources[no].resource_id.name),(Resource,),{'__doc__':resources[no].resource_id.name,'__name__':resources[no].resource_id.name,'efficiency':resources[no].useability/100,'vacation':tuple(leaves)}))
return resource_objs
class wizard_compute_phases(wizard.interface):
def _compute_date(self, cr, uid, data, context):
project_id = data['form']['project_id']
project = pooler.get_pool(cr.dbname).get('project.project').browse(cr,uid,project_id)
phase_ids = pooler.get_pool(cr.dbname).get('project.phase').search(cr,uid,[('project_id','=',project_id)])
if phase_ids:
phase_obj = pooler.get_pool(cr.dbname).get('project.phase').browse(cr,uid,phase_ids)
phase_1 = phase_obj[0]
if phase_1.date_start:
date_dt = datetime.datetime.strptime(phase_1.date_start,"%Y-%m-%d %H:%M:%S")
else:
date_dt = datetime.datetime.strptime(project.date_start,"%Y-%m-%d")
dt = datetime.datetime.strftime(date_dt,"%Y-%m-%d %H:%M")
pool = pooler.get_pool(cr.dbname)
project_pool = pool.get('project.project')
phase_pool = pool.get('project.phase')
resource_pool = pool.get('resource.resource')
resource_leaves_pool = pool.get('resource.calendar.leaves')
resource_week_pool = pool.get('resource.calendar.week')
avg_hr = 0.0
wktime_cal = []
leaves = []
phase_id = data['form']['phase_id']
phase = phase_pool.browse(cr,uid,phase_id)
calendar_id = phase.project_id.resource_calendar_id.id
for i in range(len(phase_obj)):
final_lst = []
leaves = []
# if phase_obj[i].user_id.id:
# resource_id = pooler.get_pool(cr.dbname).get('resource.resource').search(cr,uid,[('user_id','=',task_obj[i].user_id.id)])
# resource_obj = pooler.get_pool(cr.dbname).get('resource.resource').browse(cr,uid,resource_id)[0]
if project.resource_calendar_id:
non_working = ""
time_range = "8:00-8:00"
wk = {"0":"mon","1":"tue","2":"wed","3":"thu","4":"fri"}
wk_days = {}
wk_time = {}
tlist = []
hours = []
hr = 0
# If project has a working calendar then that would be used otherwise
# the default faces calendar would be used
if calendar_id:
time_range = "8:00-8:00"
non_working = ""
wk = {"0":"mon","1":"tue","2":"wed","3":"thu","4":"fri","5":"sat","6":"sun"}
wk_days = {}
wk_time = {}
wktime_list = []
hours = []
hr = 0
week_ids = resource_week_pool.search(cr,uid,[('calendar_id','=',calendar_id)])
week_obj = resource_week_pool.read(cr,uid,week_ids,['dayofweek','hour_from','hour_to'])
week_ids = pooler.get_pool(cr.dbname).get('resource.calendar.week').search(cr,uid,[('calendar_id','=',project.resource_calendar_id.id)])
week_obj = pooler.get_pool(cr.dbname).get('resource.calendar.week').read(cr,uid,week_ids,['dayofweek','hour_from','hour_to'])
# Converting time formats into appropriate format required
# and creating a list like [('mon', '8:00-12:00'), ('mon', '13:00-18:00')]
for week in week_obj:
res_str = ""
if wk.has_key(week['dayofweek']):
day = wk[week['dayofweek']]
wk_days[week['dayofweek']] = wk[week['dayofweek']]
for week in week_obj:
res_str = ""
if wk.has_key(week['dayofweek']):
day = wk[week['dayofweek']]
wk_days[week['dayofweek']] = wk[week['dayofweek']]
hour_from_str = timeformat_convert(cr,uid,week['hour_from'])
hour_to_str = timeformat_convert(cr,uid,week['hour_to'])
res_str = hour_from_str + '-' + hour_to_str
hours.append(week['hour_from'])
hours.append(week['hour_to'])
wktime_list.append((day,res_str))
hour_from_str = timeformat_convert(cr,uid,week['hour_from'])
hour_to_str = timeformat_convert(cr,uid,week['hour_to'])
hours.append(week['hour_from'])
hours.append(week['hour_to'])
res_str = hour_from_str + '-' + hour_to_str
tlist.append((day,res_str))
for item in tlist:
if wk_time.has_key(item[0]):
wk_time[item[0]].append(item[1])
else:
wk_time[item[0]] = [item[0]]
wk_time[item[0]].append(item[1])
for k,v in wk_time.items():
final_lst.append(tuple(v))
for k,v in wk_days.items():
if wk.has_key(k):
wk.pop(k)
for v in wk.itervalues():
non_working += v + ','
if non_working:
final_lst.append((non_working[:-1],time_range))
leave_ids = pooler.get_pool(cr.dbname).get('resource.calendar.leaves').search(cr,uid,[('calendar_id','=',project.resource_calendar_id.id)])
if leave_ids:
res_leaves = pooler.get_pool(cr.dbname).get('resource.calendar.leaves').read(cr,uid,leave_ids,['date_from','date_to'])
for leave in range(len(res_leaves)):
dt_start = datetime.datetime.strptime(res_leaves[leave]['date_from'],'%Y-%m-%d %H:%M:%S')
dt_end = datetime.datetime.strptime(res_leaves[leave]['date_to'],'%Y-%m-%d %H:%M:%S')
no = dt_end - dt_start
leave_days = no.days + 1
[leaves.append((dt_start + datetime.timedelta(days=x)).strftime('%Y-%m-%d')) for x in range(int(leave_days))]
leaves.sort()
for hour in range(0,4):
if hour%2 ==0:
hr += float(hours[hour+1]) - float(hours[hour])
man_days = str(phase_obj[i].duration * hr)[:-2] + 'H'
if i == 0:
new_dt = dt
# Converting it to format like [('mon', '8:00-12:00', '13:00-18:00')]
for item in wktime_list:
if wk_time.has_key(item[0]):
wk_time[item[0]].append(item[1])
else:
data = pooler.get_pool(cr.dbname).get('project.phase').read(cr,uid,[phase_obj[i-1].id],['date_end'])[0]
if phase_obj[i].constraint_date_start and data['date_end'] < phase_obj[i].constraint_date_start:
new_dt = phase_obj[i].constraint_date_start[0:16]
else:
new_dt = data['date_end'][0:16]
wk_time[item[0]] = [item[0]]
wk_time[item[0]].append(item[1])
class user(Resource):
pass
for k,v in wk_time.items():
wktime_cal.append(tuple(v))
def Project_1():
resource = user
title = project.name
start = new_dt
effort = man_days
for hour in range(len(hours)):
if hour%2 ==0:
hr += float(hours[hour+1]) - float(hours[hour])
avg_hr = hr/len(wktime_cal)
if final_lst or leaves:
working_days = final_lst
# For non working days adding [('tue,wed,fri,sat,sun', '8:00-8:00')]
for k,v in wk_days.items():
if wk.has_key(k):
wk.pop(k)
for v in wk.itervalues():
non_working += v + ','
if non_working:
wktime_cal.append((non_working[:-1],time_range))
# If project working calendar has any leaves
resource_leave_ids = resource_leaves_pool.search(cr,uid,[('calendar_id','=',calendar_id)])
if resource_leave_ids:
res_leaves = resource_leaves_pool.read(cr,uid,resource_leave_ids,['date_from','date_to'])
for leave in range(len(res_leaves)):
dt_start = datetime.datetime.strptime(res_leaves[leave]['date_from'],'%Y-%m-%d %H:%M:%S')
dt_end = datetime.datetime.strptime(res_leaves[leave]['date_to'],'%Y-%m-%d %H:%M:%S')
no = dt_end - dt_start
leave_days = no.days + 1
[leaves.append((dt_start + datetime.timedelta(days=x)).strftime('%Y-%m-%d')) for x in range(int(leave_days))]
leaves.sort()
def phase_schedule(cr,uid,phase,start_date,avg_hour = 0.0):
if phase:
# To get resources and the duration for the phase
resources_list = resource_list(cr,uid,phase)
if not avg_hour:
avg_hour = 8.0
man_days = str(phase.duration * avg_hour) + 'H'
# Creating a new project for each phase
def Project():
start = start_date
# If project has working calendar else the default one would be considered
if wktime_cal:
working_days = wktime_cal
vacation = tuple(leaves)
def phase1():
start = new_dt
def phase():
effort = man_days
title = phase_obj[i].name
resource = reduce(operator.or_,resources_list)
project_1 = BalancedProject(Project_1)
start_date = project_1.calendar.WorkingDate(project_1.phase1.start).to_datetime()
e_date = project_1.calendar.WorkingDate(project_1.phase1.end).to_datetime()
if phase_obj[i].constraint_date_end and str(e_date) > phase_obj[i].constraint_date_end:
end_date = phase_obj[i].constraint_date_end
project = BalancedProject(Project)
print 'Project Phase Start & End:::',project.phase.name,project.phase.booked_resource,project.phase.start.to_datetime(),project.phase.end.to_datetime()
s_date = project.phase.start.to_datetime()
e_date = project.phase.end.to_datetime()
# According to constraints on date start and date end on phase recalculation done
if phase.constraint_date_start and str(s_date) < phase.constraint_date_start:
start_date = phase.constraint_date_start
else:
start_date = s_date
if phase.constraint_date_end and str(e_date) > phase.constraint_date_end:
end_date = phase.constraint_date_end[:-3]
else:
end_date = e_date
pooler.get_pool(cr.dbname).get('project.phase').write(cr,uid,[phase_obj[i].id],{'date_start':start_date,'date_end':end_date})
# Writing the dates back
phase_pool.write(cr,uid,[phase.id],{'date_start':start_date,'date_end':end_date})
date_start = end_date
# Recursive calling the next phases till all the phases are scheduled
for phase in phase.next_phase_ids:
phase_schedule(cr,uid,phase,date_start)
# Phase Scheduling starts from here with the call to phase_schedule method
start_dt = datetime.datetime.strftime((datetime.datetime.strptime(phase.project_id.date_start,"%Y-%m-%d")),"%Y-%m-%d %H:%M")
if avg_hr:
phase_schedule(cr,uid,phase,start_dt,avg_hr)
else:
phase_schedule(cr,uid,phase,start_dt)
return {}
states = {
@ -176,21 +231,16 @@ class wizard_compute_phases(wizard.interface):
'actions': [],
'result': {'type':'form', 'arch':compute_form, 'fields':compute_fields, 'state':[
('end', 'Cancel'),
('ok', 'Ok')
('compute', 'Compute')
]},
},
'ok': {
'compute': {
'actions': [_compute_date],
'result': {'type':'state', 'state':'end'},
'result': {'type':'form','arch':success_msg,'fields':{}, 'state':[('end', 'Ok')]},
}
}
wizard_compute_phases('wizard.compute.phases')
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -3,6 +3,6 @@
"access_report_account_analytic_planning_line","report_account_analytic.planning.line","model_report_account_analytic_planning_line","project.group_project_manager",1,1,1,1
"access_report_account_analytic_planning_stat_manager","report_account_analytic.planning.stat manager","model_report_account_analytic_planning_stat","project.group_project_manager",1,1,1,1
"access_report_account_analytic_planning_stat","report_account_analytic.planning.stat","model_report_account_analytic_planning_stat","project.group_project_user",1,0,0,0
"access_account_analytic_account_project_manager","account.analytic.account project manager","account.model_account_analytic_account","project.group_project_manager",1,1,1,1
"access_account_analytic_account_project_manager","account.analytic.account project manager","analytic.model_account_analytic_account","project.group_project_manager",1,1,1,1
"access_report_account_analytic_planning_user","report_account_analytic.planning.user","model_report_account_analytic_planning_user","project.group_project_manager",1,1,1,1
"access_report_account_analytic_planning_account","report_account_analytic.planning.account","model_report_account_analytic_planning_account","project.group_project_manager",1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
3 access_report_account_analytic_planning_line report_account_analytic.planning.line model_report_account_analytic_planning_line project.group_project_manager 1 1 1 1
4 access_report_account_analytic_planning_stat_manager report_account_analytic.planning.stat manager model_report_account_analytic_planning_stat project.group_project_manager 1 1 1 1
5 access_report_account_analytic_planning_stat report_account_analytic.planning.stat model_report_account_analytic_planning_stat project.group_project_user 1 0 0 0
6 access_account_analytic_account_project_manager account.analytic.account project manager account.model_account_analytic_account analytic.model_account_analytic_account project.group_project_manager 1 1 1 1
7 access_report_account_analytic_planning_user report_account_analytic.planning.user model_report_account_analytic_planning_user project.group_project_manager 1 1 1 1
8 access_report_account_analytic_planning_account report_account_analytic.planning.account model_report_account_analytic_planning_account project.group_project_manager 1 1 1 1

View 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: 2010-02-09 23:39+0000\n"
"PO-Revision-Date: 2010-02-10 09:31+0000\n"
"Last-Translator: adnan <adnankraljic@yahoo.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-02-10 04:43+0000\n"
"X-Launchpad-Export-Date: 2010-02-11 05:02+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: purchase
@ -24,7 +24,7 @@ msgstr "Račun izdat&Plaćeno"
#. module: purchase
#: model:process.node,note:purchase.process_node_invoiceafterpacking0
msgid "Supplier Invoice pre-generated on receptions for control"
msgstr ""
msgstr "Račun dobavljača pregenirisan prilikom primke - kontrole"
#. module: purchase
#: field:purchase.order,location_id:0
@ -34,7 +34,7 @@ msgstr "Odredište"
#. module: purchase
#: selection:purchase.order,invoice_method:0
msgid "From Picking"
msgstr ""
msgstr "Iz zaprimanja"
#. module: purchase
#: rml:purchase.order:0
@ -263,6 +263,8 @@ msgid ""
"Manual: no invoice will be pre-generated. The accountant will have to encode "
"manually."
msgstr ""
"Iz naloga: draft računa će biti pregenerisan na osnovu nabavnog naloga. "
"Odgovorna osoba samo mora validirati račun radi kontrole."
#. module: purchase
#: model:process.node,note:purchase.process_node_packinginvoice0
@ -452,6 +454,8 @@ msgid ""
"This is computed as the minimum scheduled date of all purchase order lines' "
"products."
msgstr ""
"Ovo je proračunato kao najbliži predviđeni datuma isporuke koji se nalazi u "
"svim nabavnim nalozima."
#. module: purchase
#: model:ir.actions.act_window,name:purchase.act_res_partner_2_purchase_order
@ -487,7 +491,7 @@ msgstr "Potvrdi nabavni nalog"
#: help:purchase.order,picking_ids:0
msgid ""
"This is the list of picking list that have been generated for this purchase"
msgstr ""
msgstr "Ovo je lista pakiranja koja je generisana za kupovinu."
#. module: purchase
#: model:ir.module.module,shortdesc:purchase.module_meta_information
@ -560,7 +564,7 @@ msgstr "Račun pakiranja"
#. module: purchase
#: model:process.transition,note:purchase.process_transition_invoicefrompackinglist0
msgid "Creates invoice from packin list"
msgstr ""
msgstr "Kreiraj račun na osnovu liste isporuke."
#. module: purchase
#: help:purchase.order,date_order:0
@ -580,7 +584,7 @@ msgstr "Datum"
#. module: purchase
#: help:purchase.order,origin:0
msgid "Reference of the document that generated this purchase order request."
msgstr ""
msgstr "Referenca dokumenta koja generira ovaj zahtjev za narudžbenicu."
#. module: purchase
#: rml:purchase.order:0
@ -635,7 +639,7 @@ msgstr "Ukupno :"
#. module: purchase
#: model:process.transition,note:purchase.process_transition_createpackinglist0
msgid "When purchase order is approved , it creates its packing list."
msgstr ""
msgstr "Odobrenje nabavnog naloga generiše kreiranje liste pakiranja."
#. module: purchase
#: view:purchase.order.line:0
@ -735,7 +739,7 @@ msgstr "Zahtjev za ponudu"
#. module: purchase
#: model:process.node,name:purchase.process_node_packinginvoice0
msgid "Out Packing"
msgstr ""
msgstr "Bez pakiranja"
#. module: purchase
#: model:process.node,note:purchase.process_node_productrecept0
@ -776,7 +780,7 @@ msgstr "Opis"
#. module: purchase
#: model:process.transition,name:purchase.process_transition_productrecept0
msgid "Product recept invoice"
msgstr ""
msgstr "Primka proizvoda na osnovu računa"
#. module: purchase
#: rml:purchase.quotation:0
@ -812,7 +816,7 @@ msgstr "Nabavni nalog je potvrđen od strane korisnika."
#. module: purchase
#: model:process.transition,name:purchase.process_transition_purchaseinvoice0
msgid "Purchase Invoice"
msgstr ""
msgstr "Faktura nabavke"
#. module: purchase
#: rml:purchase.order:0
@ -832,7 +836,7 @@ msgstr "Ukupni iznos"
#. module: purchase
#: rml:purchase.order:0
msgid "Date Ordered"
msgstr "Datum naruđbe"
msgstr "Datum nabavnog naloga"
#. module: purchase
#: view:purchase.order:0
@ -863,7 +867,7 @@ msgstr "Odobrena nabavka"
#. module: purchase
#: model:process.transition,note:purchase.process_transition_packinginvoice0
msgid "From Packing list, Create invoice."
msgstr ""
msgstr "Iz liste pakovanja kreiraj račun"
#. module: purchase
#: field:purchase.order,amount_total:0

View 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: 2009-02-04 05:55+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-02-10 12:28+0000\n"
"Last-Translator: adnan <adnankraljic@yahoo.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: 2009-12-16 05:03+0000\n"
"X-Launchpad-Export-Date: 2010-02-11 05:02+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: purchase_analytic_plans

View 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: 2009-12-15 19:47+0000\n"
"PO-Revision-Date: 2010-02-10 12:30+0000\n"
"Last-Translator: adnan <adnankraljic@yahoo.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: 2009-12-16 05:02+0000\n"
"X-Launchpad-Export-Date: 2010-02-11 05:02+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: report_purchase
@ -136,6 +136,8 @@ msgid ""
" Purchase By Product, Purchase By Category of Product, All Months, "
"Current Month."
msgstr ""
"Modul će omogućiti slijedeće poglede :\n"
"Kupovina po proizvodu, kategoriji, za sve mjesece ili samo određeni."
#. module: report_purchase
#: selection:report.purchase.order.category,state:0
@ -152,7 +154,7 @@ msgstr "Neodgovarajući XML za arhitekturu prikaza!"
#: selection:report.purchase.order.category,state:0
#: selection:report.purchase.order.product,state:0
msgid "Manual in progress"
msgstr ""
msgstr "Manual u izradi"
#. module: report_purchase
#: model:ir.actions.act_window,name:report_purchase.action_order_category_tree

View File

@ -7,34 +7,34 @@ 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-02-04 05:56+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-02-10 13:15+0000\n"
"Last-Translator: Tarik_985 <Unknown>\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: 2009-12-16 05:14+0000\n"
"X-Launchpad-Export-Date: 2010-02-11 05:02+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: sale
#: selection:sale.order,picking_policy:0
msgid "Partial Delivery"
msgstr ""
msgstr "Djelomična isporuka"
#. module: sale
#: view:sale.order:0
msgid "Recreate Procurement"
msgstr ""
msgstr "Ponovo kreiraj nabavni nalog"
#. module: sale
#: model:process.transition,name:sale.process_transition_confirmquotation0
msgid "Confirm Quotation"
msgstr ""
msgstr "Potvrdi upit"
#. module: sale
#: model:process.node,name:sale.process_node_deliveryorder0
msgid "Delivery Order"
msgstr ""
msgstr "Otpremnica"
#. module: sale
#: field:sale.order.line,address_allotment_id:0
@ -44,7 +44,7 @@ msgstr ""
#. module: sale
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Pogrešan model name u definisanju radnje"
#. module: sale
#: selection:sale.order,state:0
@ -61,12 +61,12 @@ msgstr ""
#. module: sale
#: selection:sale.order.line,type:0
msgid "from stock"
msgstr ""
msgstr "sa zaliha"
#. module: sale
#: field:sale.config.picking_policy,step:0
msgid "Steps To Deliver a Sale Order"
msgstr ""
msgstr "Koraci da bi se otpremila roba iz prodajnog naloga"
#. module: sale
#: wizard_field:sale.advance_payment_inv,init,qtty:0
@ -182,33 +182,33 @@ msgstr ""
#. module: sale
#: field:sale.order,order_policy:0
msgid "Shipping Policy"
msgstr ""
msgstr "Način otpreme"
#. module: sale
#: selection:sale.order,state:0
#: selection:sale.order.line,state:0
msgid "Cancelled"
msgstr ""
msgstr "Poništeno"
#. module: sale
#: selection:sale.order,state:0
msgid "Shipping Exception"
msgstr ""
msgstr "Izuzeci otpreme"
#. module: sale
#: field:sale.order,amount_total:0
msgid "Total"
msgstr ""
msgstr "Ukupno"
#. module: sale
#: field:sale.order,origin:0
msgid "Origin"
msgstr ""
msgstr "Porijeklo"
#. module: sale
#: field:sale.order,partner_invoice_id:0
msgid "Invoice Address"
msgstr ""
msgstr "Adresa kupca/primaoca računa"
#. module: sale
#: model:process.node,name:sale.process_node_packinglist0
@ -223,18 +223,18 @@ msgstr ""
#. module: sale
#: selection:sale.config.picking_policy,picking_policy:0
msgid "All at Once"
msgstr ""
msgstr "Sve od jednom"
#. module: sale
#: model:process.transition,note:sale.process_transition_saleprocurement0
msgid "Procurement is created after confirmation of sale order."
msgstr ""
msgstr "Narudzba je kreirana nakon potvrde nalog za prodaju."
#. module: sale
#: field:sale.order,project_id:0
#: field:sale.shop,project_id:0
msgid "Analytic Account"
msgstr ""
msgstr "Analitičko konto"
#. module: sale
#: rml:sale.order:0
@ -244,33 +244,33 @@ msgstr ""
#. module: sale
#: field:sale.order.line,type:0
msgid "Procure Method"
msgstr ""
msgstr "Metoda nabavke"
#. module: sale
#: view:sale.order:0
msgid "Extra Info"
msgstr ""
msgstr "Dodatni podaci"
#. module: sale
#: rml:sale.order:0
msgid "Fax :"
msgstr ""
msgstr "Fax:"
#. module: sale
#: field:sale.order.line,price_net:0
msgid "Net Price"
msgstr ""
msgstr "Neto cijena"
#. module: sale
#: model:ir.actions.act_window,name:sale.action_order_tree9
#: model:ir.ui.menu,name:sale.menu_action_order_tree9
msgid "My sales order in progress"
msgstr ""
msgstr "Moji prodajni nalozi u procesu"
#. module: sale
#: field:sale.order.line,product_uos_qty:0
msgid "Quantity (UoS)"
msgstr ""
msgstr "Količina (JM)"
#. module: sale
#: help:sale.order,invoice_quantity:0
@ -284,72 +284,72 @@ msgstr ""
#. module: sale
#: selection:sale.order.line,state:0
msgid "Confirmed"
msgstr ""
msgstr "Potvrđeno"
#. module: sale
#: field:sale.shop,payment_default_id:0
msgid "Default Payment Term"
msgstr ""
msgstr "Standardni rok plaćanja"
#. module: sale
#: model:ir.actions.act_window,name:sale.action_order_tree_all
#: model:ir.ui.menu,name:sale.menu_action_order_tree_all
msgid "All Sales Order"
msgstr ""
msgstr "Svi Prodajni nalozi"
#. module: sale
#: model:process.transition.action,name:sale.process_transition_action_confirm0
msgid "Confirm"
msgstr ""
msgstr "Potvrdi"
#. module: sale
#: field:sale.order,partner_shipping_id:0
msgid "Shipping Address"
msgstr ""
msgstr "Adresa isporuke"
#. module: sale
#: selection:sale.order,invoice_quantity:0
msgid "Shipped Quantities"
msgstr ""
msgstr "Isporučena količina"
#. module: sale
#: selection:sale.config.picking_policy,order_policy:0
msgid "Invoice Based on Sales Orders"
msgstr ""
msgstr "Račun sa referencom na Prodajni nalog"
#. module: sale
#: model:ir.model,name:sale.model_sale_shop
#: view:sale.shop:0
msgid "Sale Shop"
msgstr ""
msgstr "Prodavnica"
#. module: sale
#: field:sale.shop,warehouse_id:0
msgid "Warehouse"
msgstr ""
msgstr "Skladište"
#. module: sale
#: rml:sale.order:0
msgid "Order N°"
msgstr ""
msgstr "Nalog N°"
#. module: sale
#: field:sale.order,order_line:0
#: view:sale.order.line:0
msgid "Order Lines"
msgstr ""
msgstr "Stavke naloga"
#. module: sale
#: rml:sale.order:0
msgid "Disc.(%)"
msgstr ""
msgstr "Popust (%)"
#. module: sale
#: view:sale.order:0
#: view:sale.order.line:0
#: field:sale.order.line,invoice_lines:0
msgid "Invoice Lines"
msgstr ""
msgstr "Stavke računa"
#. module: sale
#: model:process.transition.action,name:sale.process_transition_action_forceassignation0
@ -359,7 +359,7 @@ msgstr ""
#. module: sale
#: view:sale.order:0
msgid "Untaxed amount"
msgstr ""
msgstr "Neoporezovan iznos"
#. module: sale
#: model:process.transition,note:sale.process_transition_packing0
@ -372,12 +372,12 @@ msgstr ""
#: model:ir.actions.act_window,name:sale.action_order_tree8
#: model:ir.ui.menu,name:sale.menu_action_order_tree8
msgid "My sales order waiting Invoice"
msgstr ""
msgstr "Moji Prodajni nalozi spremni za fakturisanje"
#. module: sale
#: rml:sale.order:0
msgid "Shipping address :"
msgstr ""
msgstr "Adresa isporuke"
#. module: sale
#: model:process.transition,note:sale.process_transition_invoiceafterdelivery0
@ -389,7 +389,7 @@ msgstr ""
#. module: sale
#: selection:sale.order,picking_policy:0
msgid "Complete Delivery"
msgstr ""
msgstr "Potpuna isporuka"
#. module: sale
#: view:sale.order:0
@ -399,51 +399,51 @@ msgstr ""
#. module: sale
#: field:sale.order.line,product_uom_qty:0
msgid "Quantity (UoM)"
msgstr ""
msgstr "Količina (JM)"
#. module: sale
#: model:ir.actions.act_window,name:sale.action_order_line_tree1
#: model:ir.ui.menu,name:sale.menu_action_order_line_tree1
#: view:sale.order.line:0
msgid "Sales Order Lines"
msgstr ""
msgstr "Stavke Prodajnog naloga"
#. module: sale
#: selection:sale.order,invoice_quantity:0
msgid "Ordered Quantities"
msgstr ""
msgstr "Naručena količina"
#. module: sale
#: model:process.node,name:sale.process_node_saleorderprocurement0
msgid "Sale Order Procurement"
msgstr ""
msgstr "Nabavka na osnovu Prodajnog naloga"
#. module: sale
#: model:process.transition,name:sale.process_transition_packing0
msgid "Packing"
msgstr ""
msgstr "Pakovanje"
#. module: sale
#: rml:sale.order:0
msgid "Total :"
msgstr ""
msgstr "Ukupno :"
#. module: sale
#: view:sale.order:0
msgid "Confirm Order"
msgstr ""
msgstr "Potvrdi nalog"
#. module: sale
#: field:sale.order,name:0
msgid "Order Reference"
msgstr ""
msgstr "Referenca naloga"
#. module: sale
#: selection:sale.order,state:0
#: view:sale.order.line:0
#: selection:sale.order.line,state:0
msgid "Done"
msgstr ""
msgstr "Urađeno"
#. module: sale
#: field:sale.order,pricelist_id:0
@ -454,12 +454,12 @@ msgstr ""
#. module: sale
#: model:ir.ui.menu,name:sale.menu_shop_configuration
msgid "Configuration"
msgstr ""
msgstr "Podešavanja"
#. module: sale
#: selection:sale.order,order_policy:0
msgid "Invoice on Order After Delivery"
msgstr ""
msgstr "Račun sa referencom na Prodajni nalog poslije otpreme"
#. module: sale
#: constraint:ir.ui.view:0
@ -484,7 +484,7 @@ msgstr ""
#. module: sale
#: field:sale.order,client_order_ref:0
msgid "Customer Ref"
msgstr ""
msgstr "Ref kupca"
#. module: sale
#: view:sale.order:0
@ -495,7 +495,7 @@ msgstr ""
#: model:process.node,name:sale.process_node_saleprocurement0
#: field:sale.order.line,procurement_id:0
msgid "Procurement"
msgstr ""
msgstr "Nabavka"
#. module: sale
#: view:sale.shop:0
@ -1068,17 +1068,17 @@ msgstr ""
#. module: sale
#: rml:sale.order:0
msgid "Quotation N°"
msgstr ""
msgstr "Upit Broj"
#. module: sale
#: field:stock.move,sale_line_id:0
msgid "Sale Order Line"
msgstr ""
msgstr "Stavka prodajnog naloga"
#. module: sale
#: model:process.transition.action,name:sale.process_transition_action_cancelassignation0
msgid "Cancel Assignation"
msgstr ""
msgstr "Dodjela"
#. module: sale
#: selection:sale.order,order_policy:0
@ -1089,24 +1089,26 @@ msgstr ""
#: model:ir.actions.wizard,name:sale.wizard_sale_order_line_invoice
#: model:ir.actions.wizard,name:sale.wizard_sale_order_make_invoice
msgid "Make invoices"
msgstr ""
msgstr "Kreiraj račune"
#. module: sale
#: help:sale.order,partner_order_id:0
msgid ""
"The name and address of the contact that requested the order or quotation."
msgstr ""
"Ime i adresa kontakt osobe koja je podnijela zahtjev za upitom ili prodajnim "
"nalogom."
#. module: sale
#: field:sale.order,partner_id:0
#: field:sale.order.line,order_partner_id:0
msgid "Customer"
msgstr ""
msgstr "Kupac"
#. module: sale
#: field:product.product,pricelist_purchase:0
msgid "Purchase Pricelists"
msgstr ""
msgstr "Cjenovnik kupovine"
#. module: sale
#: model:ir.model,name:sale.model_sale_order
@ -1115,12 +1117,12 @@ msgstr ""
#: view:sale.order:0
#: field:stock.picking,sale_id:0
msgid "Sale Order"
msgstr ""
msgstr "Prodajni nalog"
#. module: sale
#: field:sale.config.picking_policy,name:0
msgid "Name"
msgstr ""
msgstr "Ime"
#. module: sale
#: field:sale.order,invoice_quantity:0
@ -1131,23 +1133,23 @@ msgstr ""
#: model:ir.actions.act_window,name:sale.action_order_tree_new
#: model:ir.ui.menu,name:sale.menu_action_order_tree_new
msgid "New Quotation"
msgstr ""
msgstr "Novi upit"
#. module: sale
#: view:sale.order:0
msgid "Total amount"
msgstr ""
msgstr "Ukupni iznos"
#. module: sale
#: rml:sale.order:0
#: field:sale.order,date_order:0
msgid "Date Ordered"
msgstr ""
msgstr "Datum naruđbe"
#. module: sale
#: field:sale.order.line,product_uos:0
msgid "Product UoS"
msgstr ""
msgstr "Proizvod UoS"
#. module: sale
#: selection:sale.order,state:0
@ -1157,7 +1159,7 @@ msgstr ""
#. module: sale
#: field:sale.order.line,product_uom:0
msgid "Product UoM"
msgstr ""
msgstr "Proizvod UoM"
#. module: sale
#: help:sale.config.picking_policy,step:0
@ -1176,42 +1178,42 @@ msgstr ""
#. module: sale
#: model:process.node,name:sale.process_node_order0
msgid "Order"
msgstr ""
msgstr "Nalog"
#. module: sale
#: rml:sale.order:0
msgid "Payment Terms"
msgstr ""
msgstr "Uvjieti plaćanja"
#. module: sale
#: view:sale.order:0
msgid "Invoice Corrected"
msgstr ""
msgstr "Račun ispravljen"
#. module: sale
#: field:sale.order.line,delay:0
msgid "Delivery Delay"
msgstr ""
msgstr "Odgoda isporuke"
#. module: sale
#: view:sale.order:0
msgid "Related invoices"
msgstr ""
msgstr "Povezani računi"
#. module: sale
#: field:sale.shop,name:0
msgid "Shop Name"
msgstr ""
msgstr "Naziv prodajnog mjesta"
#. module: sale
#: field:sale.order,payment_term:0
msgid "Payment Term"
msgstr ""
msgstr "Uslovi plaćanja"
#. module: sale
#: selection:sale.order,order_policy:0
msgid "Payment Before Delivery"
msgstr ""
msgstr "Plaćanje prije isporuke"
#. module: sale
#: help:sale.order,invoice_ids:0
@ -1240,18 +1242,18 @@ msgstr ""
#. module: sale
#: constraint:product.product:0
msgid "Error: Invalid ean code"
msgstr ""
msgstr "Greška: nevažeći EAN kod"
#. module: sale
#: field:sale.order,picked_rate:0
#: field:sale.order,shipped:0
msgid "Picked"
msgstr ""
msgstr "Izuzeto"
#. module: sale
#: view:sale.shop:0
msgid "Accounting"
msgstr ""
msgstr "Računovodstvo"
#. module: sale
#: selection:sale.config.picking_policy,order_policy:0
@ -1261,7 +1263,7 @@ msgstr ""
#. module: sale
#: view:sale.order:0
msgid "Stock Moves"
msgstr ""
msgstr "Kretanje zaliha"
#. module: sale
#: model:ir.actions.act_window,name:sale.action_order_tree