commit
06fae133f0
|
@ -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"/>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
@ -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','<=',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>
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
@ -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>
|
|
@ -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
|
||||
|
|
@ -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','<=',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>
|
|
@ -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
|
|
|
@ -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
|
|
@ -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" />
|
|
@ -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',
|
||||
],
|
||||
|
|
|
@ -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'),
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)]"
|
||||
/>
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
@ -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:
|
|
@ -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:
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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
|
||||
|
|
|
@ -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:
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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]})
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue