[MERGE]: Merge with lp:openobject-trunk-dev-addons2

bzr revid: atp@tinyerp.co.in-20100428051233-kg64cw0fe7maqxdg
This commit is contained in:
atp (Open ERP)
2010-04-28 10:42:33 +05:30
30 changed files with 588 additions and 138 deletions
+7 -5
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 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
+3 -3
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 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
+4 -4
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-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
+46 -25
View File
@@ -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)
+1 -1
View File
@@ -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"/>
+1
View File
@@ -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
View File
@@ -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()
+3
View File
@@ -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,
+4
View File
@@ -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:
+52
View File
@@ -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)
+118
View File
@@ -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
+3
View File
@@ -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.
+23 -16
View File
@@ -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={}):
+4 -3
View File
@@ -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 &amp; 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>
-1
View File
@@ -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)])
+3 -3
View File
@@ -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
+20 -9
View File
@@ -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'})
+6
View File
@@ -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">
+1 -1
View File
@@ -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!'))
+1 -1
View File
@@ -47,4 +47,4 @@
##############################################################################
import partner
import installer
+2 -1
View File
@@ -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
}
+53
View File
@@ -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()
+6 -3
View File
@@ -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 plug­in Follow the following step to install thunderbird plug­in ? 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 plug­in 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 plug­in Follow the following step to install thunderbird plug­in ? 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 plug­in 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>
+2 -2
View File
@@ -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',
+13 -15
View File
@@ -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)
+9 -9
View File
@@ -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:
-24
View File
@@ -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>