Merge lp:~openerp-dev/openobject-server/trunk-missing_default_value-jpr into lp:openobject-server

Proposed by Jitendra Prajapati(OpenERP)
Status: Needs review
Proposed branch: lp:~openerp-dev/openobject-server/trunk-missing_default_value-jpr
Merge into: lp:openobject-server
Diff against target: 151 lines (+53/-15)
2 files modified
openerp/osv/orm.py (+11/-2)
openerp/tools/yaml_import.py (+42/-13)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/trunk-missing_default_value-jpr
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+216449@code.launchpad.net

Description of the change

Hello,

   the default uom missing value is set on onchange of product in inventory and mrp, when import csv file.

Thanks

To post a comment you must log in.
5157. By Jitendra Prajapati(OpenERP)

[MERGE]with main branch

5158. By Jitendra Prajapati(OpenERP)

[MERGE]sync main branch

Unmerged revisions

5158. By Jitendra Prajapati(OpenERP)

[MERGE]sync main branch

5157. By Jitendra Prajapati(OpenERP)

[MERGE]with main branch

5156. By Jitendra Prajapati(OpenERP)

[MERGE]with main branch

5155. By Jitendra Prajapati(OpenERP)

[MERGE]with main branch

5154. By Jitendra Prajapati(OpenERP)

[MERGE]with main branch

5153. By Jitendra Prajapati(OpenERP)

[MERGE]with main branch

5152. By Jitendra Prajapati(OpenERP)

[IMP]the default uom missing value is set on onchange of product in inventory and mrp

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openerp/osv/orm.py'
2--- openerp/osv/orm.py 2014-04-16 14:34:31 +0000
3+++ openerp/osv/orm.py 2014-05-09 05:04:58 +0000
4@@ -1344,7 +1344,7 @@
5 self._parent_store_compute(cr)
6 return position, 0, 0, 0
7
8- def load(self, cr, uid, fields, data, context=None):
9+ def load(self, cr, uid, fields, data, csv=False, context=None):
10 """
11 Attempts to load the data matrix, and returns a list of ids (or
12 ``False`` if there was an error and no id could be generated) and a
13@@ -1388,6 +1388,12 @@
14 u"Unknown database error: '%s'" % e))
15 break
16 try:
17+ if csv:
18+ cur_obj = self.pool.get(self._name)
19+ view_info = self.fields_view_get(cr, uid, False, 'form', context)
20+ interpreter = tools.YamlInterpreter(cr, current_module, xid, mode, filename=None)
21+ record_dict = interpreter._create_record(cur_obj, record, view_info, csv=csv)
22+ record.update(record_dict)
23 ids.append(ModelData._update(cr, uid, self._name,
24 current_module, record, mode=mode, xml_id=xid,
25 noupdate=noupdate, res_id=id, context=context))
26@@ -2135,7 +2141,10 @@
27 or (dv in self._inherit_fields and self._inherit_fields[dv][2]._type == 'one2many')) \
28 and isinstance(defaults[dv], (list, tuple)) and defaults[dv] and isinstance(defaults[dv][0], dict):
29 defaults[dv] = [(0, 0, x) for x in defaults[dv]]
30- defaults.update(values)
31+ if isinstance(values,(tuple)):
32+ defaults.update(values[2])
33+ else:
34+ defaults.update(values)
35 values = defaults
36 return values
37
38
39=== modified file 'openerp/tools/yaml_import.py'
40--- openerp/tools/yaml_import.py 2014-02-09 00:37:45 +0000
41+++ openerp/tools/yaml_import.py 2014-05-09 05:04:58 +0000
42@@ -152,6 +152,8 @@
43 # raise YamlImportException("The xml_id should be a non empty string.")
44 elif isinstance(xml_id, types.IntType):
45 id = xml_id
46+ elif isinstance(xml_id, (list,tuple)):
47+ id = xml_id[-1]
48 elif xml_id in self.id_map:
49 id = self.id_map[xml_id]
50 else:
51@@ -327,7 +329,7 @@
52 if config.get('import_partial'):
53 self.cr.commit()
54
55- def _create_record(self, model, fields, view_info=None, parent={}, default=True):
56+ def _create_record(self, model, fields, view_info=None, parent={}, default=True, csv=False):
57 """This function processes the !record tag in yalm files. It simulates the record creation through an xml
58 view (either specified on the !record tag or the default one for this object), including the calls to
59 on_change() functions, and sending only values for fields that aren't set as readonly.
60@@ -390,7 +392,13 @@
61 fg = view_info['fields']
62 # gather the default values on the object. (Can't use `fields´ as parameter instead of {} because we may
63 # have references like `base.main_company´ in the yaml file and it's not compatible with the function)
64- defaults = default and model._add_missing_default_values(self.cr, SUPERUSER_ID, {}, context=self.context) or {}
65+ if csv:#if field_name has not a default value or a value is not given in the csv file.
66+ if isinstance(fields,(tuple)) and fields[2]:
67+ defaults = default and model._add_missing_default_values(self.cr, SUPERUSER_ID, fields, context=self.context) or {}
68+ else:
69+ defaults = {}
70+ else:
71+ defaults = default and model._add_missing_default_values(self.cr, SUPERUSER_ID, {}, context=self.context) or {}
72
73 # copy the default values in record_dict, only if they are in the view (because that's what the client does)
74 # the other default values will be added later on by the create().
75@@ -409,7 +417,7 @@
76 # for one2many fields, we want to eval them using the inline form view defined on the parent
77 one2many_form_view = _get_right_one2many_view(fg, field_name, 'form')
78
79- field_value = self._eval_field(model, field_name, fields[field_name], one2many_form_view or view_info, parent=record_dict, default=default)
80+ field_value = self._eval_field(model, field_name, fields[field_name], one2many_form_view or view_info, parent=record_dict, default=default, csv=csv)
81
82 #call process_val to not update record_dict if values were given for readonly fields
83 val = process_val(field_name, field_value)
84@@ -455,17 +463,29 @@
85 ))
86 if key not in fields:
87 # do not shadow values explicitly set in yaml.
88- record_dict[key] = process_val(key, val)
89+ # if field value are given in import_csv file.
90+ if csv and ctx[key] > val:
91+ record_dict[key] = process_val(key, ctx[key])
92+ else:
93+ record_dict[key] = process_val(key, val)
94 else:
95 nodes = list(el) + nodes
96 else:
97 record_dict = {}
98
99- for field_name, expression in fields.items():
100- if field_name in record_dict:
101- continue
102- field_value = self._eval_field(model, field_name, expression, default=False)
103- record_dict[field_name] = field_value
104+ if isinstance(fields,(tuple)):
105+ if fields[2]:
106+ for field_name, expression in fields[2].items():
107+ if field_name in record_dict:
108+ continue
109+ field_value = self._eval_field(model, field_name, expression, default=False, csv=csv)
110+ record_dict[field_name] = field_value
111+ else:
112+ for field_name, expression in fields.items():
113+ if field_name in record_dict:
114+ continue
115+ field_value = self._eval_field(model, field_name, expression, default=False)
116+ record_dict[field_name] = field_value
117 return record_dict
118
119 def process_ref(self, node, column=None):
120@@ -494,7 +514,7 @@
121 def process_eval(self, node):
122 return eval(node.expression, self.eval_context)
123
124- def _eval_field(self, model, field_name, expression, view_info=False, parent={}, default=True):
125+ def _eval_field(self, model, field_name, expression, view_info=False, parent={}, default=True, csv=False):
126 # TODO this should be refactored as something like model.get_field() in bin/osv
127 if field_name in model._columns:
128 column = model._columns[field_name]
129@@ -515,10 +535,19 @@
130 value = self.get_id(expression)
131 elif column._type == "one2many":
132 other_model = self.get_model(column._obj)
133- value = [(0, 0, self._create_record(other_model, fields, view_info, parent, default=default)) for fields in expression]
134+ if expression is not False:
135+ value = [(0, 0, self._create_record(other_model, fields, view_info, parent, default=default, csv=csv)) for fields in expression]
136+ else:
137+ value = expression
138 elif column._type == "many2many":
139- ids = [self.get_id(xml_id) for xml_id in expression]
140- value = [(6, 0, ids)]
141+ if expression is not False:
142+ ids = [self.get_id(xml_id) for xml_id in expression]
143+ if ids and type(ids[0]) is list:
144+ value = [(6, 0, ids[0])]
145+ else:
146+ value = [(6, 0, ids)]
147+ else:
148+ value = expression
149 elif column._type == "date" and is_string(expression):
150 # enforce ISO format for string date values, to be locale-agnostic during tests
151 time.strptime(expression, misc.DEFAULT_SERVER_DATE_FORMAT)