[MERGE]: Merge with lp:openobject-trunk-dev-addons2
bzr revid: atp@tinyerp.co.in-20100428051233-kg64cw0fe7maqxdg
This commit is contained in:
@@ -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: 2010-03-29 15:32+0000\n"
|
||||
"Last-Translator: Carlo Vettore <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-04-26 07:46+0000\n"
|
||||
"Last-Translator: eLBati - albatos.com <lorenzo.battistini@albatos.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-04-17 04:06+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-28 03:44+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account
|
||||
@@ -1192,7 +1192,7 @@ msgstr "Report tassa"
|
||||
#: wizard_button:account.analytic.account.chart,init,open:0
|
||||
#: wizard_button:account.chart,init,open:0
|
||||
msgid "Open Charts"
|
||||
msgstr "Conti aperti"
|
||||
msgstr "Apri"
|
||||
|
||||
#. module: account
|
||||
#: wizard_view:account.fiscalyear.close.state,init:0
|
||||
@@ -2301,6 +2301,8 @@ msgstr ""
|
||||
#: wizard_view:account.chart,init:0
|
||||
msgid "(If you do not select Fiscal year it will take all open fiscal years)"
|
||||
msgstr ""
|
||||
"Se non si seleziona un anno fiscale, verranno visualizzati tutti gli anni "
|
||||
"fiscali aperti"
|
||||
|
||||
#. module: account
|
||||
#: help:account.invoice.tax,base_code_id:0
|
||||
@@ -4429,7 +4431,7 @@ msgstr ""
|
||||
#. module: account
|
||||
#: wizard_view:account.wizard_paid_open,init:0
|
||||
msgid "Open Invoice"
|
||||
msgstr "Fattura aperta"
|
||||
msgstr "Apri fattura"
|
||||
|
||||
#. module: account
|
||||
#: model:process.node,note:account.process_node_draftstatement0
|
||||
|
||||
@@ -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: 2010-04-25 17:34+0000\n"
|
||||
"PO-Revision-Date: 2010-04-27 19:28+0000\n"
|
||||
"Last-Translator: Grzegorz Grzelak (Cirrus.pl) <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: 2010-04-26 03:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-28 03:44+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account
|
||||
@@ -2087,7 +2087,7 @@ msgstr "Wydatki"
|
||||
#. module: account
|
||||
#: field:account.journal,invoice_sequence_id:0
|
||||
msgid "Invoice Sequence"
|
||||
msgstr "Numeracja faktury"
|
||||
msgstr "Numeracja faktur"
|
||||
|
||||
#. module: account
|
||||
#: wizard_view:account.automatic.reconcile,init: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: 2010-04-25 21:20+0000\n"
|
||||
"PO-Revision-Date: 2010-04-26 09:10+0000\n"
|
||||
"Last-Translator: Martin Volf <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: 2010-04-26 03:41+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-28 03:44+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_tax_include
|
||||
@@ -24,12 +24,12 @@ msgstr "Neplatný XML pro zobrazení architektury"
|
||||
#. module: account_tax_include
|
||||
#: field:account.invoice,price_type:0
|
||||
msgid "Price method"
|
||||
msgstr ""
|
||||
msgstr "Metoda určování cen"
|
||||
|
||||
#. module: account_tax_include
|
||||
#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
|
||||
msgid "Invoices and prices with taxes included"
|
||||
msgstr ""
|
||||
msgstr "Faktury a ceny včetně daní"
|
||||
|
||||
#. module: account_tax_include
|
||||
#: selection:account.invoice,price_type:0
|
||||
|
||||
@@ -30,19 +30,26 @@ import tools
|
||||
#objects_proxy = netsvc.ExportService.getService('object').__class__
|
||||
class recording_objects_proxy(osv_pool):
|
||||
def execute(self, *args, **argv):
|
||||
if len(args) >= 6 and isinstance(args[5], dict):
|
||||
if args[3] == 'create':
|
||||
_old_args = args[4].copy()
|
||||
elif args[3] == 'write':
|
||||
_old_args = args[5].copy()
|
||||
elif len(args) >= 5 and isinstance(args[4], dict):
|
||||
_old_args = args[4].copy()
|
||||
else:
|
||||
_old_args = None
|
||||
res = super(recording_objects_proxy, self).execute(*args, **argv)
|
||||
pool = pooler.get_pool(args[0])
|
||||
mod = pool.get('ir.module.record')
|
||||
|
||||
if mod and mod.recording:
|
||||
if args[3] not in ('default_get','read','fields_view_get','fields_get','search','search_count','name_search','name_get','get','request_get', 'get_sc', 'unlink'):
|
||||
if _old_args is not None:
|
||||
args[5].update(_old_args)
|
||||
if args[5]:
|
||||
mod.recording_data.append(('query', args, argv,res))
|
||||
if args[3] == 'create':
|
||||
args[4].update(_old_args)
|
||||
elif args[3] == 'write':
|
||||
args[5].update(_old_args)
|
||||
mod.recording_data.append(('query', args, argv,res))
|
||||
return res
|
||||
|
||||
def exec_workflow(self, *args, **argv):
|
||||
@@ -125,7 +132,8 @@ class base_module_record(osv.osv):
|
||||
name = filter(lambda x: x in string.letters, (data.get('name','') or '').lower())
|
||||
except:
|
||||
name=''
|
||||
val = model.replace('.','_')+'_'+name+ str(i)
|
||||
# name=data.get('name','') or ''.lower()
|
||||
val = model.replace('.','_')+'_'+ name + str(i)
|
||||
i+=1
|
||||
if val not in self.ids.values():
|
||||
break
|
||||
@@ -146,7 +154,6 @@ class base_module_record(osv.osv):
|
||||
|
||||
def _create_record(self, cr, uid, doc, model, data, record_id, noupdate=False):
|
||||
|
||||
data_pool = self.pool.get('ir.model.data')
|
||||
model_pool = self.pool.get(model)
|
||||
|
||||
record = doc.createElement('record')
|
||||
@@ -196,12 +203,26 @@ class base_module_record(osv.osv):
|
||||
fname = model_pool._columns[key]._fields_id
|
||||
else:
|
||||
fname = model_pool._inherit_fields[key][2]._fields_id
|
||||
valitem[2][fname] = record_id
|
||||
newid,update = self._get_id(cr, uid, fields[key]['relation'], valitem[1])
|
||||
if not newid:
|
||||
if valitem[0] == 0:
|
||||
newid = self._create_id(cr, uid, fields[key]['relation'], valitem[2])
|
||||
valitem[1]=newid
|
||||
else:
|
||||
newid,update = self._get_id(cr, uid, fields[key]['relation'], valitem[1])
|
||||
if not newid:
|
||||
newid = self._create_id(cr, uid, fields[key]['relation'], valitem[2])
|
||||
valitem[1]=newid
|
||||
self.ids[(fields[key]['relation'], valitem[1])] = newid
|
||||
|
||||
# if valitem[0] in (0,1):
|
||||
# if key in model_pool._columns:
|
||||
# fname = model_pool._columns[key]._fields_id
|
||||
# else:
|
||||
# fname = model_pool._inherit_fields[key][2]._fields_id
|
||||
# valitem[2][fname] = record_id
|
||||
# newid,update = self._get_id(cr, uid, fields[key]['relation'], valitem[1])
|
||||
# if not newid:
|
||||
# newid = self._create_id(cr, uid, fields[key]['relation'], valitem[2])
|
||||
# self.ids[(fields[key]['relation'], valitem[1])] = newid
|
||||
#
|
||||
childrecord, update = self._create_record(cr, uid, doc, fields[key]['relation'],valitem[2], newid)
|
||||
noupdate = noupdate or update
|
||||
record_list += childrecord
|
||||
@@ -245,7 +266,7 @@ class base_module_record(osv.osv):
|
||||
for key,val in data.items():
|
||||
if ((key in defaults[model]) and (val == defaults[model][key])) and not(fields[key].get('required',False)):
|
||||
continue
|
||||
if not (val or (fields[key]['type']=='boolean')):
|
||||
if not (val or (fields[key]['type']=='function')):
|
||||
continue
|
||||
elif fields[key]['type'] in ('boolean',):
|
||||
if not val:
|
||||
@@ -267,12 +288,9 @@ class base_module_record(osv.osv):
|
||||
fname = model_pool._columns[key]._fields_id
|
||||
else:
|
||||
fname = model_pool._inherit_fields[key][2]._fields_id
|
||||
valitem[2][fname] = record_id
|
||||
newid,update = self._get_id(cr, uid, fields[key]['relation'], valitem[1])
|
||||
if not newid:
|
||||
newid = self._create_id(cr, uid, fields[key]['relation'], valitem[2])
|
||||
self.ids[(fields[key]['relation'], valitem[1])] = newid
|
||||
childrecord = self._create_yaml_record(cr, uid, fields[key]['relation'],valitem[2], newid)
|
||||
del valitem[2][fname] #delete parent_field from child's fields list
|
||||
|
||||
childrecord = self._create_yaml_record(cr, uid, fields[key]['relation'],valitem[2], None)
|
||||
items[0].append(childrecord['attrs'])
|
||||
attrs[key] = items
|
||||
elif fields[key]['type'] in ('many2many',):
|
||||
@@ -289,11 +307,11 @@ class base_module_record(osv.osv):
|
||||
if m2m[0]:
|
||||
attrs[key] = m2m
|
||||
else:
|
||||
val=val.replace('"','\'')
|
||||
try:
|
||||
attrs[key]=str(val)
|
||||
except:
|
||||
attrs[key]=tools.ustr(val)
|
||||
attrs[key]=attrs[key].replace('"','\'')
|
||||
record['attrs'] = attrs
|
||||
return record
|
||||
|
||||
@@ -311,7 +329,7 @@ class base_module_record(osv.osv):
|
||||
for f in filter(lambda a: isinstance(obj._columns[a], fields.function)\
|
||||
and (not obj._columns[a].store),obj._columns):
|
||||
del data[f]
|
||||
|
||||
|
||||
for key,val in data.items():
|
||||
if result.has_key(key):
|
||||
continue
|
||||
@@ -361,16 +379,16 @@ class base_module_record(osv.osv):
|
||||
def _generate_object_xml(self, cr, uid, rec, recv, doc, result=None):
|
||||
record_list = []
|
||||
noupdate = False
|
||||
if rec[4]=='write':
|
||||
for id in rec[5]:
|
||||
id,update = self._get_id(cr, uid, rec[3], id)
|
||||
if rec[3]=='write':
|
||||
for id in rec[4]:
|
||||
id,update = self._get_id(cr, uid, rec[2], id)
|
||||
noupdate = noupdate or update
|
||||
if not id:
|
||||
continue
|
||||
record,update = self._create_record(cr, uid, doc, rec[3], rec[6], id)
|
||||
record,update = self._create_record(cr, uid, doc, rec[2], rec[5], id)
|
||||
noupdate = noupdate or update
|
||||
record_list += record
|
||||
|
||||
|
||||
elif rec[4] in ('menu_create',):
|
||||
for id in rec[5]:
|
||||
id,update = self._get_id(cr, uid, rec[3], id)
|
||||
@@ -487,7 +505,10 @@ class base_module_record(osv.osv):
|
||||
yaml_file += str(object) + '''\n\n'''
|
||||
else:
|
||||
record= self._generate_object_yaml(cr, uid, rec[1],rec[3])
|
||||
yaml_file+="!comment Creating an %s record"%(record['model']) + '''\n'''
|
||||
if self.mode == "create" or self.mode == "copy":
|
||||
yaml_file+="!comment Creating a %s record"%(record['model']) + '''\n'''
|
||||
else:
|
||||
yaml_file+="!comment Modifying a %s record"%(record['model']) + '''\n'''
|
||||
object= yaml.load(unicode('''\n !record %s \n'''%record,'iso-8859-1'))
|
||||
yaml_file += str(object) + '''\n'''
|
||||
attrs=yaml.dump(object.attrs, default_flow_style=False)
|
||||
|
||||
@@ -28,7 +28,7 @@ If you don't think you need any of these right now, you can easily install them
|
||||
<field name="account"/> <field name="purchase"/>
|
||||
<field name="hr"/> <field name="point_of_sale"/>
|
||||
<field name="marketing"/> <field name="misc_tools"/>
|
||||
<field name="report_designer"/>
|
||||
<field name="report_designer"/> <field name="thunderbird"/>
|
||||
<separator string="Vertical Modules" colspan="4"/>
|
||||
<field name="profile_association"/>
|
||||
<field name="profile_training"/>
|
||||
|
||||
@@ -73,6 +73,7 @@ class base_setup_installer(osv.osv_memory):
|
||||
'report_designer':fields.boolean('Advanced Reporting',
|
||||
help="Lets you install various tools to simplify and enhance "
|
||||
"OpenERP's report creation."),
|
||||
'thunderbird' :fields.boolean('Thunderbird'),
|
||||
# Vertical modules
|
||||
'profile_association':fields.boolean('Associations',
|
||||
help="Installs a preselected set of OpenERP "
|
||||
|
||||
+13
-12
@@ -65,7 +65,7 @@ class crm_meeting(osv.osv):
|
||||
_defaults = {
|
||||
'state': lambda *a: 'draft',
|
||||
}
|
||||
|
||||
|
||||
def open_meeting(self, cr, uid, ids, context=None):
|
||||
"""
|
||||
Open Crm Meeting Form for Crm Meeting.
|
||||
@@ -75,13 +75,14 @@ class crm_meeting(osv.osv):
|
||||
@param context: A standard dictionary for contextual values
|
||||
@return: Dictionary value which open Crm Meeting form.
|
||||
"""
|
||||
|
||||
if not context:
|
||||
context = {}
|
||||
|
||||
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
|
||||
|
||||
value = {}
|
||||
|
||||
|
||||
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_form_view_meet')
|
||||
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_tree_view_meet')
|
||||
id4 = data_obj._get_id(cr, uid, 'crm', 'crm_case_calendar_view_meet')
|
||||
@@ -93,17 +94,17 @@ class crm_meeting(osv.osv):
|
||||
id4 = data_obj.browse(cr, uid, id4, context=context).res_id
|
||||
for id in ids:
|
||||
value = {
|
||||
'name': _('Meeting'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.meeting',
|
||||
'view_id': False,
|
||||
'name': _('Meeting'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.meeting',
|
||||
'view_id': False,
|
||||
'views': [(id2, 'form'), (id3, 'tree'), (id4, 'calendar')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'res_id': base_calendar.base_calendar_id2real_id(id),
|
||||
'type': 'ir.actions.act_window',
|
||||
'res_id': base_calendar.base_calendar_id2real_id(id),
|
||||
'nodestroy': True
|
||||
}
|
||||
|
||||
|
||||
return value
|
||||
|
||||
crm_meeting()
|
||||
|
||||
@@ -46,6 +46,9 @@
|
||||
'report/document_report_view.xml'
|
||||
],
|
||||
'demo_xml': [ 'document_demo.xml',],
|
||||
'test': [
|
||||
'test/document_test.yml',
|
||||
],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
'certificate': None,
|
||||
|
||||
@@ -105,7 +105,11 @@ class document_directory(osv.osv):
|
||||
]
|
||||
def name_get(self, cr, uid, ids, context={}):
|
||||
res = []
|
||||
all_ids = self.search(cr,uid,[])
|
||||
for d in self.browse(cr, uid, ids, context=context):
|
||||
if d.id not in all_ids:
|
||||
continue
|
||||
|
||||
s = ''
|
||||
d2 = d
|
||||
while d2 and d2.parent_id:
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
- |
|
||||
In order to test the Document Management System In OpenERP.
|
||||
-
|
||||
In order to test behaviour of resource Directory I will make one resource Directory "Partner Labels" in OpenERP having type "Other Resources" and Directory mapped to object "Partner"
|
||||
-
|
||||
!record {model: 'document.directory', id: dir_partner_label}:
|
||||
name : "Partner Labels"
|
||||
storage_id : storage_default
|
||||
type : ressource
|
||||
content_ids:
|
||||
- name: "Label"
|
||||
report_id : base.res_partner_address_report
|
||||
-
|
||||
Assign "res.partner" object to ressource_type_id.
|
||||
-
|
||||
!python {model: document.directory}: |
|
||||
ids = self.pool.get('ir.model').search(cr, uid, [('model','=','res.partner')])
|
||||
id = self.write(cr, uid, [ref("dir_partner_label")], {'ressource_type_id' : ids[0]}, context)
|
||||
-
|
||||
In order to check static directory in OpenERP which is the real directory just like system's local folders,
|
||||
First I create a directory in OpenERP named "Directory 1" with storage as "Default File storage" and type as "Static Directory"
|
||||
-
|
||||
!record {model: 'document.directory', id: directory_1}:
|
||||
name : "Directory 1"
|
||||
storage_id : storage_default
|
||||
type : directory
|
||||
-
|
||||
In order to make a directory hierarchy in OpenERP I will make other static directory "Directory 2" and I put its Parent Item as "Directory 1",
|
||||
So I can see the directory hierarchy in OpenERP's client like :- Directory1 -> Directory2
|
||||
-
|
||||
!record {model: 'document.directory', id: directory_2}:
|
||||
name : "Directory 2"
|
||||
storage_id : storage_default
|
||||
type : directory
|
||||
parent_id : directory_1
|
||||
-
|
||||
I am create a one Document Attachment name "My document" and select "Directory 2" as its Directory,
|
||||
And in order to put a File content.
|
||||
-
|
||||
When I am creating the document then "Resource Title" is filled automatic with "My document".
|
||||
-
|
||||
!record {model: 'ir.attachment', id: document_1}:
|
||||
name : "My document"
|
||||
parent_id : directory_2
|
||||
-
|
||||
Attach a pdf file in "My document"
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
import tools
|
||||
import base64
|
||||
file = open(tools.config['addons_path'] + '/document/test/partner.pdf')
|
||||
id = self.write(cr, uid, [ref("document_1")], {'datas' : base64.encodestring(file.read())}, context)
|
||||
@@ -0,0 +1,118 @@
|
||||
%PDF-1.3
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Times-Roman
|
||||
<< /BaseFont /Times-Roman
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
841.8898
|
||||
595.2756 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (Generated by OpenERP, Fabien Pinckaers)
|
||||
/CreationDate (20100421145542)
|
||||
/Keywords ()
|
||||
/Producer (ReportLab http://www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (Partner) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 524 >>
|
||||
stream
|
||||
Gat=(?#P<K'R_@f5MSc<`6.HPV2s@dQRlarfjrE>3i<Y4(hW<qY=/IHPo2nd;U2u=SpPc46=:icfCoF922oN\83q_*El(+<i)0C.\*qSa'orY`+p(cC^oTpn8t,B-+=I?_Q1#SGXQbKWJ5-M7"aXRSQCBTu'NHJF046Jno-.K&2kW+&Ddh9bXc1q%)-e?DSC(5(4%=lk+ql;XaX3m]F#7K:"]hph/QW?(0_J4kXQiP</;'9K=]Wd,jeGe.Ma6pqJ&iD]r%qkNclhVq5Q/gSmK+r&6mr`*Z[m8(n)Usu)MZo%TNta^h'I^g6m5Vp92+>e[>S,B2ME\)S7:@oo6@nF8`I+h##OY3a-n#Qm!>5jiD.9pQ@E1#Xj$=)27)F3RmD%fbqZh,T`gJd0/,?A3`0:_VVm`"l`>oOf9p&HGF7>WCGVJoD2&_+c#BDb)/&0>>rL5@]KY$9YOA<rrt#g)1a61mS([/:0_[`)!ctOhSA/p@bq]>qZHTJq8k]!o+?4a5\-KbB#NYJC'`~>endstream
|
||||
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000573 00000 n
|
||||
0000000740 00000 n
|
||||
0000001017 00000 n
|
||||
0000001152 00000 n
|
||||
0000001395 00000 n
|
||||
0000001500 00000 n
|
||||
0000002169 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\210\344\006bE\230CUUi\010[\)Qif) (\210\344\006bE\230CUUi\010[\)Qif)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
2221
|
||||
%%EOF
|
||||
@@ -37,6 +37,9 @@
|
||||
'security/ir.model.access.csv'
|
||||
],
|
||||
'demo_xml': [],
|
||||
'test': [
|
||||
'test/document_ftp_test.yml',
|
||||
],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
'certificate': None,
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
- |
|
||||
In order to test the document_ftp module in OpenERP, I will try different operation on the FTP interface, and check their impacts on OpenERP's documents and vice-versa.
|
||||
-
|
||||
In order to test behaviour of resource Directory I will make one resource Directory "Labels" in OpenERP having type "Other Resources" and Directory mapped to object "Partner"
|
||||
-
|
||||
!record {model: 'document.directory', id: dir_label}:
|
||||
name : "Labels"
|
||||
storage_id : document.storage_default
|
||||
type : ressource
|
||||
content_ids:
|
||||
- name: "Label"
|
||||
report_id : base.res_partner_address_report
|
||||
-
|
||||
Assign "res.partner" object to ressource_type_id.
|
||||
-
|
||||
!python {model: document.directory}: |
|
||||
ids = self.pool.get('ir.model').search(cr, uid, [('model','=','res.partner')])
|
||||
id = self.write(cr, uid, [ref("dir_label")], {'ressource_type_id' : ids[0]}, context)
|
||||
-
|
||||
In order to check static directory in OpenERP which is the real directory just like system's local folders,
|
||||
First I create a directory in OpenERP named "Directory 1" with storage as "Default File storage" and type as "Static Directory"
|
||||
-
|
||||
!record {model: 'document.directory', id: directory_file}:
|
||||
name : "File"
|
||||
storage_id : document.storage_default
|
||||
type : directory
|
||||
-
|
||||
I am create a one Document name "Document" and select "File" as its Directory,
|
||||
-
|
||||
When I am creating the record then "Resource Title" is filled automatic with "Document".
|
||||
-
|
||||
!record {model: 'ir.attachment', id: document_1}:
|
||||
name : "Document"
|
||||
parent_id : directory_file
|
||||
-
|
||||
In order to connect FTP server and set "File" path.
|
||||
I create one directory "New" in "File" directory from FTP and check its effect in OpenERP
|
||||
-
|
||||
Also Rename the directory name "New" to "New Directory".
|
||||
-
|
||||
Remove directory "New Directory" and remove file "Document".
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
from ftplib import FTP
|
||||
from tools.misc import detect_ip_addr
|
||||
from tools import config
|
||||
ftp = FTP()
|
||||
if detect_ip_addr:
|
||||
host = config.get('ftp_server_host', detect_ip_addr())
|
||||
else:
|
||||
host = config.get('ftp_server_host', '127.0.0.1')
|
||||
port = config.get('ftp_server_port','8021')
|
||||
ftp.connect(host,port)
|
||||
user = self.pool.get('res.users').read(cr, uid, uid, context)
|
||||
ftp.login(user.get('login',''),user.get('password',''))
|
||||
ftp.cwd("/" + cr.dbname+"/Documents/File/")
|
||||
ftp.mkd("New")
|
||||
ftp.rename('New','New Directory')
|
||||
ftp.cwd("/" + cr.dbname+"/Documents/File/")
|
||||
ftp.rmd('New Directory')
|
||||
ftp.delete('Document')
|
||||
ftp.quit()
|
||||
-
|
||||
In order to check directory created from FTP is working perfectly
|
||||
-
|
||||
Now I will test the same for Resource directory which is mapped with OpenERP object.
|
||||
When you open this directory from FTP clients, it displays each records of mapped resource object as directory.
|
||||
-
|
||||
Now I test FTP client and Open the "Labels" Directory to check Resource Directory in FTP.
|
||||
I can see that all Label of OpenERP are shown as children of "Labels" in FTP client as Directories
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
from ftplib import FTP
|
||||
from tools.misc import detect_ip_addr
|
||||
from tools import config
|
||||
ftp = FTP()
|
||||
if detect_ip_addr:
|
||||
host = config.get('ftp_server_host', detect_ip_addr())
|
||||
else:
|
||||
host = config.get('ftp_server_host', '127.0.0.1')
|
||||
port = config.get('ftp_server_port','8021')
|
||||
ftp.connect(host,port)
|
||||
user = self.pool.get('res.users').read(cr, uid, uid, context)
|
||||
ftp.login(user.get('login',''),user.get('password',''))
|
||||
ftp.cwd("/" + cr.dbname+"/Documents/Labels/")
|
||||
-
|
||||
I make sure that I Open Labels Directory successfully.
|
||||
@@ -137,7 +137,8 @@ class email_server(osv.osv):
|
||||
('imap','IMAP Server'),
|
||||
],'State', select=True, readonly=False),
|
||||
'is_ssl':fields.boolean('SSL ?', required=False),
|
||||
'date': fields.date('Date'),
|
||||
'attach':fields.boolean('Add Attachments ?', required=False),
|
||||
'date': fields.date('Date', readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'user' : fields.char('User Name', size=256, required=True, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'password' : fields.char('Password', size=1024, invisible=True, required=True, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'note': fields.text('Description'),
|
||||
@@ -292,17 +293,18 @@ class email_server(osv.osv):
|
||||
else:
|
||||
logger.notifyChannel('imap', netsvc.LOG_WARNING, 'method def message_new is not define in model %s' % (model_pool._name))
|
||||
return False
|
||||
|
||||
# for attactment in attachents or []:
|
||||
# data_attach = {
|
||||
# 'name': attactment,
|
||||
# 'datas':binascii.b2a_base64(str(attachents.get(attactment))),
|
||||
# 'datas_fname': attactment,
|
||||
# 'description': 'Mail attachment',
|
||||
# 'res_model': server.object_id.model,
|
||||
# 'res_id': res_id,
|
||||
# }
|
||||
# self.pool.get('ir.attachment').create(cr, uid, data_attach)
|
||||
|
||||
if server.attach:
|
||||
for attactment in attachents or []:
|
||||
data_attach = {
|
||||
'name': attactment,
|
||||
'datas':binascii.b2a_base64(str(attachents.get(attactment))),
|
||||
'datas_fname': attactment,
|
||||
'description': 'Mail attachment',
|
||||
'res_model': server.object_id.model,
|
||||
'res_id': res_id,
|
||||
}
|
||||
self.pool.get('ir.attachment').create(cr, uid, data_attach)
|
||||
|
||||
if server.action_id:
|
||||
action_pool = self.pool.get('ir.actions.server')
|
||||
@@ -319,10 +321,15 @@ class email_server(osv.osv):
|
||||
his_id = history_pool.create(cr, uid, res)
|
||||
|
||||
return res_id
|
||||
|
||||
def __fetch_mail(self, cr, uid, ids, context={}):
|
||||
sendmail_thread = threading.Thread(target=self.fetch_mail, args=(cr, uid, ids))
|
||||
sendmail_thread.start()
|
||||
|
||||
def set_draft(self, cr, uid, ids, context={}):
|
||||
self.write(cr, uid, ids , {'state':'draft'})
|
||||
return True
|
||||
|
||||
def button_fetch_mail(self, cr, uid, ids, context={}):
|
||||
self.fetch_mail(cr, uid, ids)
|
||||
# sendmail_thread = threading.Thread(target=self.fetch_mail, args=(cr, uid, ids))
|
||||
# sendmail_thread.start()
|
||||
return True
|
||||
|
||||
def _fetch_mails(self, cr, uid, ids=False, context={}):
|
||||
|
||||
@@ -26,15 +26,15 @@
|
||||
<group col="6" colspan="4">
|
||||
<field name="name" select="1" colspan="4"/>
|
||||
<field name="type" select="1" on_change="onchange_server_type(type, is_ssl)"/>
|
||||
|
||||
<field name="date" select="1"/>
|
||||
<field name="is_ssl" select="1" on_change="onchange_server_type(type, is_ssl)"/>
|
||||
<field name="attach"/>
|
||||
<field name="active" select="1"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Server & Login">
|
||||
<group col="2" colspan="2">
|
||||
<separator string="Server Information" colspan="2"/>
|
||||
<field name="is_ssl" select="1" on_change="onchange_server_type(type, is_ssl)"/>
|
||||
<field name="server" />
|
||||
<field name="port" />
|
||||
</group>
|
||||
@@ -58,7 +58,8 @@
|
||||
</notebook>
|
||||
<group col="6" colspan="4">
|
||||
<field name="state" select="1"/>
|
||||
<button string="Fetch Emails" type="object" name="__fetch_mail"/>
|
||||
<button string="Fetch Emails" type="object" name="button_fetch_mail"/>
|
||||
<button string="Set to Draft" type="object" name="set_draft"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
|
||||
@@ -2058,7 +2058,6 @@ class olap_warehouse_wizard(osv.osv_memory):
|
||||
@param uid: the current user’s ID for security checks,
|
||||
@param context: A standard dictionary for contextual values
|
||||
"""
|
||||
|
||||
query_obj = self.pool.get('olap.query.logs')
|
||||
qry_ids = query_obj.search(cr, uid, [('user_id', '=', uid), ('count', '>=', 3)])
|
||||
|
||||
|
||||
@@ -8,13 +8,13 @@ msgstr ""
|
||||
"Project-Id-Version: pt_BR\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-02-22 19:37+0000\n"
|
||||
"PO-Revision-Date: 2010-04-27 11:00+0000\n"
|
||||
"Last-Translator: Luiz Fernando M.França <Unknown>\n"
|
||||
"Language-Team: <pt@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-17 03:55+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-28 03:44+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: project
|
||||
@@ -461,7 +461,7 @@ msgstr "Tempo Planejado"
|
||||
#: view:project.task:0
|
||||
#: view:project.task.work:0
|
||||
msgid "Task Work"
|
||||
msgstr "Trabalho na Tarefa"
|
||||
msgstr "Tarefas realizadas"
|
||||
|
||||
#. module: project
|
||||
#: selection:res.company,project_time_mode:0
|
||||
|
||||
@@ -68,7 +68,9 @@ class smtpclient(osv.osv):
|
||||
_columns = {
|
||||
'name' : fields.char('Server Name', size=256, required=True),
|
||||
'from_email' : fields.char('Email From', size=256),
|
||||
'email' : fields.char('Email Address', size=256, required=True, readonly=True, states={'new':[('readonly',False)]}),
|
||||
'email':fields.char('Email Address', size=256, required=True, readonly=True, states={'new':[('readonly',False)]}),
|
||||
'cc_to':fields.char('Send copy to', size=256, readonly=True, states={'new':[('readonly',False)]}, help="use comma to supply multiple address. email@domain.com, email2@domain.com"),
|
||||
'bcc_to':fields.char('Send blind copy to', size=256, readonly=True, states={'new':[('readonly',False)]}, help="use comma to supply multiple address. email@domain.com, email2@domain.com"),
|
||||
'user' : fields.char('User Name', size=256, readonly=True, states={'new':[('readonly',False)]}),
|
||||
'password' : fields.char('Password', size=1024, invisible=True, readonly=True, states={'new':[('readonly',False)]}),
|
||||
'server' : fields.char('SMTP Server', size=256, required=True, readonly=True, states={'new':[('readonly',False)]}),
|
||||
@@ -386,7 +388,7 @@ class smtpclient(osv.osv):
|
||||
emailto = [emailto]
|
||||
|
||||
ir_pool = self.pool.get('ir.attachment')
|
||||
|
||||
|
||||
for to in emailto:
|
||||
msg = MIMEMultipart()
|
||||
msg['Subject'] = tools.ustr(subject)
|
||||
@@ -420,7 +422,13 @@ class smtpclient(osv.osv):
|
||||
msg['X-OpenERP-Server-Host'] = socket.gethostname()
|
||||
msg['X-OpenERP-Server-Version'] = release.version
|
||||
msg['Message-Id'] = "<%s-openerp-@%s>" % (time.time(), socket.gethostname())
|
||||
|
||||
|
||||
if smtp_server.cc_to:
|
||||
msg['Cc'] = smtp_server.cc_to
|
||||
|
||||
if smtp_server.bcc_to:
|
||||
msg['Bcc'] = smtp_server.bcc_to
|
||||
|
||||
#attach files from disc
|
||||
for file in attachments:
|
||||
part = MIMEBase('application', "octet-stream")
|
||||
@@ -442,8 +450,8 @@ class smtpclient(osv.osv):
|
||||
data = {
|
||||
'to':to,
|
||||
'server_id':server_id,
|
||||
'cc':False,
|
||||
'bcc':False,
|
||||
'cc':smtp_server.cc_to or False,
|
||||
'bcc':smtp_server.bcc_to or False,
|
||||
'name':subject,
|
||||
'body':body,
|
||||
'serialized_message':message,
|
||||
@@ -499,7 +507,7 @@ class smtpclient(osv.osv):
|
||||
self.open_connection(cr, uid, ids, email.server_id.id)
|
||||
|
||||
try:
|
||||
self.smtpServer[email.server_id.id].sendmail(email.server_id.email, email.to, tools.ustr(email.serialized_message))
|
||||
self.smtpServer[email.server_id.id].sendmail(email.server_id.email, [email.to, email.cc, email.bcc], tools.ustr(email.serialized_message))
|
||||
message = "message sent successfully to %s from %s server" % (email.to, email.server_id.name)
|
||||
logger.notifyChannel('smtp', netsvc.LOG_INFO, message)
|
||||
except Exception, e:
|
||||
@@ -539,6 +547,7 @@ class smtpclient(osv.osv):
|
||||
return result
|
||||
|
||||
def set_to_draft(self, cr, uid, ids, context={}):
|
||||
self.stop_process(cr, uid, ids, context)
|
||||
self.write(cr, uid, ids, {'state':'new', 'code':False})
|
||||
return True
|
||||
|
||||
@@ -555,17 +564,19 @@ class smtpclient(osv.osv):
|
||||
'interval_type':'minutes',
|
||||
'user_id':uid,
|
||||
'numbercall':-1,
|
||||
'doall':False
|
||||
'doall':False,
|
||||
'active':False
|
||||
}
|
||||
id = self.pool.get('ir.cron').create(cr, uid, res)
|
||||
self.write(cr, uid, ids, {'process_id':id})
|
||||
|
||||
return True
|
||||
|
||||
def start_process(self, cr, uid, ids, context={}):
|
||||
process = self.browse(cr, uid, ids[0], context)
|
||||
if not process.process_id:
|
||||
if not process.process_id or process.state != 'confirm':
|
||||
raise osv.except_osv(_('SMTP Server Error !'), _('Server is not Verified, Please Verify the Server !'))
|
||||
|
||||
|
||||
pid = process.process_id.id
|
||||
self.pool.get('ir.cron').write(cr, uid, [pid], {'active':True})
|
||||
self.write(cr, uid, ids, {'pstate':'running'})
|
||||
|
||||
@@ -77,6 +77,12 @@
|
||||
<field name="delete_queue" select="2" />
|
||||
<field name="delete_queue_period" select="2" attrs="{'readonly':[('delete_queue','not in',['content','all'])]}"/>
|
||||
</group>
|
||||
<group col="2" colspan="2">
|
||||
<separator string="Email Copy Configuration" colspan="2" />
|
||||
<field name="cc_to" select="2" />
|
||||
<field name="bcc_to" select="2" />
|
||||
</group>
|
||||
|
||||
<newline/>
|
||||
<separator string="Server Information" colspan="4"/>
|
||||
<group col="3" colspan="4">
|
||||
|
||||
@@ -48,7 +48,7 @@ class verifycode(wizard.interface):
|
||||
if code == data['form']['code']:
|
||||
if server_pool.create_process(cr, uid, [data['id']], context={}):
|
||||
server_pool.write(cr, uid, [data['id']], {'state':'confirm', 'pstate':'running'})
|
||||
print 'process created'
|
||||
server_pool.start_process(cr, uid, [data['id']], context)
|
||||
else:
|
||||
raise osv.except_osv(_('Error'), _('Verification failed. Invalid Verification Code!'))
|
||||
|
||||
|
||||
@@ -47,4 +47,4 @@
|
||||
##############################################################################
|
||||
|
||||
import partner
|
||||
|
||||
import installer
|
||||
|
||||
@@ -39,7 +39,8 @@
|
||||
Select a section for which you want to create case.''',
|
||||
"init_xml" : [],
|
||||
"demo_xml" : [],
|
||||
"update_xml" : ['security/ir.model.access.csv'],
|
||||
"update_xml" : ['thunderbird_installer.xml',
|
||||
'security/ir.model.access.csv'],
|
||||
"active": False,
|
||||
"installable": True
|
||||
}
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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
|
||||
from osv import osv
|
||||
from tools import config
|
||||
|
||||
import base64
|
||||
|
||||
class thunderbird_installer(osv.osv_memory):
|
||||
_name = 'thunderbird.installer'
|
||||
_inherit = 'res.config.installer'
|
||||
|
||||
def process_plugin(self, cr, uid, ids, context):
|
||||
"""
|
||||
Default Attach Thunderbird Plug-in File.
|
||||
"""
|
||||
data = {}
|
||||
file = open(config['addons_path'] + "/thunderbird/plugin/tiny_plugin-2.0.xpi", 'r')
|
||||
data['plugin_file'] = base64.encodestring(file.read())
|
||||
self.write(cr, uid, ids, data)
|
||||
return False
|
||||
|
||||
_columns = {
|
||||
'name':fields.char('File name', size=34, required=True, help='Save Thunderbird plugin file.'),
|
||||
'thunderbird':fields.boolean('Thunderbird Module ', help="Allows you to select an object that you’d like to add to your email and its attachments."),
|
||||
'plugin_file':fields.binary('Thunderbird Plug-in', readonly=True, help="Thunderbird plug-in file. Save as this file and install this plug-in in thunderbir."),
|
||||
|
||||
}
|
||||
_defaults = {
|
||||
'thunderbird' : True,
|
||||
'name' : 'tiny_plugin-2.0.xpi',
|
||||
}
|
||||
|
||||
thunderbird_installer()
|
||||
@@ -92,9 +92,9 @@ class tinythunderbird_partner(osv.osv):
|
||||
partner=add_obj.read(cr,user,partner_ids,['partner_id'])
|
||||
if partner:
|
||||
dictcreate.update({'partner_id':partner[0]['partner_id'][0]})
|
||||
search_id = self.pool.get('res.request.link').search(cr,user,[('object','=',dictcreate['ref'].split(',')[0])])
|
||||
if not search_id:
|
||||
create_link_id = self.pool.get('res.request.link').create(cr,user,{'name':dictcreate['ref'].split(',')[0],'object':dictcreate['ref'].split(',')[0]})
|
||||
# search_id = self.pool.get('res.request.link').search(cr,user,[('object','=',dictcreate['ref'].split(',')[0])])
|
||||
# if not search_id:
|
||||
# create_link_id = self.pool.get('res.request.link').create(cr,user,{'name':dictcreate['ref'].split(',')[0],'object':dictcreate['ref'].split(',')[0]})
|
||||
create_id = self.pool.get(dictcreate.get('object','crm.case')).create(cr, user, dictcreate)
|
||||
cases=case_pool.browse(cr,user,[create_id])
|
||||
case_pool._history(cr, user, cases, _('Archive'), history=True, email=False)
|
||||
@@ -162,12 +162,15 @@ class tinythunderbird_partner(osv.osv):
|
||||
dictcreate = dict(vals)
|
||||
datas = [dictcreate['datas']]
|
||||
name = [dictcreate['name']]
|
||||
f_name = [dictcreate['datas_fname']]
|
||||
if(dictcreate['datas'].__contains__(',')):
|
||||
name = dictcreate['name'].split(',')
|
||||
datas = dictcreate['datas'].split(',')
|
||||
f_name = dictcreate['datas_fname'].split(',')
|
||||
for i in range(0,datas.__len__()):
|
||||
dictcreate['name'] = name[i]
|
||||
dictcreate['datas'] = datas[i]
|
||||
dictcreate['datas_fname'] = f_name[i]
|
||||
create_id = self.pool.get('ir.attachment').create(cr,user,dictcreate)
|
||||
return 0
|
||||
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,103 @@
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_thunderbird_installer" model="ir.ui.view">
|
||||
<field name="name">thunderbird.installer.view</field>
|
||||
<field name="model">thunderbird.installer</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="base.res_config_installer"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<form position="attributes">
|
||||
<attribute name="string">Thunderbird Module Installation</attribute>
|
||||
</form>
|
||||
<separator string="title" position="attributes">
|
||||
<attribute name="string">Configure Thunderbird Module</attribute>
|
||||
</separator>
|
||||
<xpath expr="//label[@string='description']" position="attributes">
|
||||
<attribute name="string">This module is required for the thuderbird plug-in to work properly.This allows you to select an object that you had like to add to your email and its attachments. You can select a partner, a task, a project, an analytical account, or any other object and attach selected mail as .eml file in attachment of selected record.</attribute>
|
||||
</xpath>
|
||||
<group colspan="8">
|
||||
<separator string="Thunderbird" colspan="4"/>
|
||||
<field name="thunderbird"/>
|
||||
<field name="name" invisible="1"/>
|
||||
<newline/>
|
||||
|
||||
<field name="plugin_file"/>
|
||||
<button name="process_plugin" icon="gtk-execute" string="Get Plugin File" type="object"/>
|
||||
<newline/>
|
||||
<separator string="Thunderbird plugin installation note." colspan="4"/>
|
||||
<label colspan="8" string="Save The thunderbird plugin Follow the following step to install thunderbird plugin ? 1. From Menu Bar, Open Tools > Add ons. 2. Now click on install button and a browser window will appear. 3. Just select the (.xpi) file from thunderbird/plugin directory and click ok, a new software installation window will appear and within a short time Install Now button will be enabled. 4. Click on Install Now and restart Thunderbird. 5. Now Thunderbird plugin is installed."/>
|
||||
</group>
|
||||
</data>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_thunderbird_installer" model="ir.actions.act_window">
|
||||
<field name="name">Thunderbird Module Installation</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">thunderbird.installer</field>
|
||||
<field name="view_id" ref="view_thunderbird_installer"/>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<record id="thunderbird_installer_todo" model="ir.actions.todo">
|
||||
<field name="action_id" ref="action_thunderbird_installer"/>
|
||||
<field name="sequence">3</field>
|
||||
</record>
|
||||
|
||||
<!-- Configuration wizard. -->
|
||||
|
||||
<record id="view_thunderbird_wizard" model="ir.ui.view">
|
||||
<field name="name">thunderbird.wizard</field>
|
||||
<field name="model">thunderbird.installer</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string= "Thunderbird Installation">
|
||||
<group colspan="4">
|
||||
<separator string="Configure Thunderbird Module" colspan="4"/>
|
||||
<group colspan="4" col="10">
|
||||
<group colspan="2">
|
||||
<image name="gtk-dialog-info"/>
|
||||
<newline/>
|
||||
<label align="0.0" string="This module is required for the thuderbird plug-in to work properly.This allows you to select an object that you had like to add to your email and its attachments. You can select a partner, a task, a project, an analytical account, or any other object and attach selected mail as .eml file in attachment of selected record." width="200"/>
|
||||
</group>
|
||||
<group colspan="8">
|
||||
<separator string="Thunderbird" colspan="4"/>
|
||||
<field name="thunderbird"/>
|
||||
<field name="name" invisible="1"/>
|
||||
<newline/>
|
||||
<field name="plugin_file"/>
|
||||
<button name="process_plugin" icon="gtk-execute" string="Get Plugin File" type="object"/>
|
||||
<newline/>
|
||||
<separator string="Thunderbird plugin installation note." colspan="4"/>
|
||||
<label colspan="8" string="Save The thunderbird plugin Follow the following step to install thunderbird plugin ? 1. From Menu Bar, Open Tools > Add ons. 2. Now click on install button and a browser window will appear. 3. Just select the (.xpi) file from thunderbird/plugin directory and click ok, a new software installation window will appear and within a short time Install Now button will be enabled. 4. Click on Install Now and restart Thunderbird. 5. Now Thunderbird plugin is installed."/>
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
<separator string="" colspan="4"/>
|
||||
<group colspan="4">
|
||||
<label align="0.0" string="" colspan="3"/>
|
||||
<button colspan="1" icon="gtk-cancel" special="cancel" string="Cancel"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_thunderbird_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Thunderbird Module Installation</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">thunderbird.installer</field>
|
||||
<field name="view_id" ref="view_thunderbird_wizard"/>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_base_config_plugins" name="Plugins" parent="base.menu_base_config" sequence="10" />
|
||||
<menuitem id="menu_base_config_plugins_thunderbird" action="action_thunderbird_wizard" name="Thunderbird" parent="menu_base_config_plugins" sequence="10" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -33,17 +33,17 @@
|
||||
'depends': ['base'],
|
||||
'init_xml': [],
|
||||
'update_xml': [
|
||||
'wizard/wizard_view.xml',
|
||||
'wizard/wiki_wiki_page_open_view.xml',
|
||||
'wizard/wiki_create_menu_view.xml',
|
||||
'wizard/wiki_make_index_view.xml',
|
||||
'wizard/wiki_show_diff_view.xml',
|
||||
'wiki_view.xml',
|
||||
'data/wiki_quickstart.xml',
|
||||
'data/wiki_main.xml',
|
||||
'security/ir.model.access.csv'
|
||||
],
|
||||
'demo_xml': ['test/wiki_test00.yml'],
|
||||
# 'demo_xml': [],
|
||||
# 'test': ['test/wiki_test00.yml'],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
'certificate': '0086363630317',
|
||||
|
||||
@@ -7,20 +7,20 @@
|
||||
notes: I can Generate New Group for Select Display method = Tree.
|
||||
-
|
||||
Now I will create new wikipage and assign Group test to this page
|
||||
-
|
||||
-
|
||||
!record {model: wiki.wiki, id: wiki_wiki_openerpwikiediting0}:
|
||||
group_id: wiki.wiki_groups_wikigrouptest0
|
||||
name: OpenERP Wiki Test
|
||||
section: '1.1'
|
||||
text_area: '=The Open ERP wiki=
|
||||
|
||||
|
||||
The Open ERP wiki allows you to manage your enterprise contents using wiki
|
||||
|
||||
|
||||
restructured texts. This module provides a collaborative way to manage internal
|
||||
|
||||
|
||||
FAQs, quality manuals, technical references, etc.
|
||||
|
||||
'
|
||||
|
||||
'
|
||||
-
|
||||
I Get Help on this current page by clicking on "Basic wiki Editing" wizard
|
||||
-
|
||||
@@ -30,7 +30,7 @@
|
||||
I create Index on this current page by clicking on "Create Index" wizard
|
||||
-
|
||||
!python {model: wiki.make.index}: |
|
||||
ids = self.search(cr, uid, [])
|
||||
ids = self.search(cr, uid, [])
|
||||
self.wiki_do_index(cr, uid, ids , {'active_ids': [ref('wiki_wiki_openerpwikiediting0')]})
|
||||
-
|
||||
# Remaining Act window
|
||||
@@ -50,23 +50,21 @@
|
||||
-
|
||||
# Remaining beacuse of Act window (I search the page by clicking on the "search page".)
|
||||
In order to create a menu I will create wizard data
|
||||
-
|
||||
-
|
||||
!record {model: wiki.groups, id: wiki.wiki_groups_wikiformatting0}:
|
||||
home: wiki.wiki_wiki_main
|
||||
-
|
||||
I create a Menu by clicking on "create menu" button.
|
||||
# The folowing is not running properly because of osv memory problem
|
||||
-
|
||||
!record {model: wiki.create.menu, id: wiki_create_menu_0}:
|
||||
menu_name: Wiki Test menu
|
||||
menu_parent_id: base.menu_base_partner
|
||||
page: wiki.wiki_wiki_openerpwikiediting0
|
||||
-
|
||||
#I will check that menu is generated properly
|
||||
I will check that menu is generated properly
|
||||
-
|
||||
# Remaining because some problem occur
|
||||
#!python {model: wiki.create.menu}: |
|
||||
# ids = self.search(cr, uid, [])
|
||||
# self.wiki_menu_create(cr, uid, ids, context)
|
||||
|
||||
!python {model: wiki.create.menu}: |
|
||||
ids = self.search(cr, uid, [])
|
||||
self.wiki_menu_create(cr, uid, ids, context)
|
||||
|
||||
|
||||
|
||||
@@ -28,9 +28,9 @@ class wiki_create_menu(osv.osv_memory):
|
||||
_description = "Wizard Create Menu"
|
||||
|
||||
_columns = {
|
||||
'menu_name': fields.char('Menu Name', size=256, select=True, required=True),
|
||||
'menu_parent_id': fields.many2one('ir.ui.menu', 'Parent Menu', required=True),
|
||||
'page': fields.many2one('wiki.wiki', 'Group Home Page'),
|
||||
'menu_name': fields.char('Menu Name', size=256, select=True, required=True),
|
||||
'menu_parent_id': fields.many2one('ir.ui.menu', 'Parent Menu', required=True),
|
||||
'page': fields.many2one('wiki.wiki', 'Group Home Page'),
|
||||
}
|
||||
|
||||
def wiki_menu_create(self, cr, uid, ids, context):
|
||||
@@ -46,22 +46,22 @@ class wiki_create_menu(osv.osv_memory):
|
||||
|
||||
for menu in self.browse(cr, uid, ids):
|
||||
menu_id = self.pool.get('ir.ui.menu').create(cr, uid, {
|
||||
'name':menu.menu_name,
|
||||
'parent_id':menu.menu_parent_id.id,
|
||||
'icon': 'STOCK_DIALOG_QUESTION',
|
||||
'name': menu.menu_name,
|
||||
'parent_id':menu.menu_parent_id.id,
|
||||
'icon': 'STOCK_DIALOG_QUESTION',
|
||||
'action': 'ir.actions.act_window,'+ str(action_id)
|
||||
}, context)
|
||||
home = menu.page.id
|
||||
group_id = menu.id
|
||||
res = {
|
||||
'home':home,
|
||||
'home': home,
|
||||
}
|
||||
self.pool.get('wiki.groups').write(cr, uid, ids, res)
|
||||
self.pool.get('wiki.groups.link').create(cr, uid,
|
||||
self.pool.get('wiki.groups.link').create(cr, uid,
|
||||
{'group_id': group_id, 'action_id': menu_id})
|
||||
|
||||
return {}
|
||||
|
||||
|
||||
wiki_create_menu()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="view_wiki_history_diff" model="ir.ui.view">
|
||||
<field name="name">Differences</field>
|
||||
<field name="model">wizard.wiki.history.show_diff</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="History Differance">
|
||||
<separator string="Wiki Differance" colspan="4"/>
|
||||
<field name="diff" widget="text_html" nolabel="1" colspan="4"/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<act_window
|
||||
id="act_view_diff"
|
||||
name="Differences"
|
||||
res_model="wizard.wiki.history.show_diff"
|
||||
src_model="wiki.wiki.history"
|
||||
target="new"
|
||||
view_mode="form"
|
||||
/>
|
||||
</data>
|
||||
</openerp>
|
||||
Reference in New Issue
Block a user