From c5e2c4dee5969c594d2b0e5fe64c8aad91777916 Mon Sep 17 00:00:00 2001 From: Shanta Kabra Date: Thu, 11 Sep 2008 18:27:49 +0530 Subject: [PATCH 001/151] Interchanged 'x' and 'y' roles in result dictionary. Normalized order of nodes bzr revid: shanta.kabra@gmail.com-20080911125749-ny4btftghgazh29q --- bin/tools/graph.py | 124 ++++++++++++++++++++++----------------------- 1 file changed, 60 insertions(+), 64 deletions(-) diff --git a/bin/tools/graph.py b/bin/tools/graph.py index 8508f10ce42..e0469d4fd06 100644 --- a/bin/tools/graph.py +++ b/bin/tools/graph.py @@ -56,7 +56,7 @@ class graph(object): """ self.edge_wt = {} for link in self.links: - self.edge_wt[link] = self.result[link[1]]['y'] - self.result[link[0]]['y'] + self.edge_wt[link] = self.result[link[1]]['x'] - self.result[link[0]]['x'] tot_node = self.partial_order.__len__() #do until all the nodes in the component are searched @@ -88,10 +88,10 @@ class graph(object): for node in self.result: if node in self.reachable_nodes: - self.result[node]['y'] += delta + self.result[node]['x'] += delta for edge in self.edge_wt: - self.edge_wt[edge] = self.result[edge[1]]['y'] - self.result[edge[0]]['y'] + self.edge_wt[edge] = self.result[edge[1]]['x'] - self.result[edge[0]]['x'] self.init_cutvalues() @@ -164,10 +164,10 @@ class graph(object): """ if node not in self.result: - self.result[node] = {'x': None, 'y':level, 'mark':0} + self.result[node] = {'y': None, 'x':level, 'mark':0} else: - if level > self.result[node]['y']: - self.result[node]['y'] = level + if level > self.result[node]['x']: + self.result[node]['x'] = level if self.result[node]['mark']==0: self.result[node]['mark'] = 1 @@ -272,7 +272,7 @@ class graph(object): def finalize_rank(self, node, level): - self.result[node]['y'] = level + self.result[node]['x'] = level for destination in self.optimal_edges.get(node, []): self.finalize_rank(destination, level+1) @@ -281,15 +281,11 @@ class graph(object): """The ranks are normalized by setting the least rank to zero. """ - least_rank=100 - - for node in self.result: - if least_rank>self.result[node]['y']: - least_rank = self.result[node]['y'] + least_rank = min(map(lambda x: x['x'], self.result.values())) if(least_rank!=0): for node in self.result: - self.result[node]['y']-=least_rank + self.result[node]['x']-=least_rank def make_chain(self): @@ -300,12 +296,12 @@ class graph(object): for edge in self.edge_wt: if self.edge_wt[edge]>1: self.transitions[edge[0]].remove(edge[1]) - start = self.result[edge[0]]['y'] - end = self.result[edge[1]]['y'] + start = self.result[edge[0]]['x'] + end = self.result[edge[1]]['x'] for rank in range(start+1, end): if not self.result.get((rank, 'temp'), False): - self.result[(rank, 'temp')] = {'x': None, 'y': rank, 'mark': 0} + self.result[(rank, 'temp')] = {'y': None, 'x': rank, 'mark': 0} for rank in range(start, end): if start==rank: @@ -319,12 +315,12 @@ class graph(object): def init_order(self, node, level): """Initialize orders the nodes in each rank with depth-first search """ - if not self.result[node]['x']: - self.result[node]['x'] = self.order[level] + if not self.result[node]['y']: + self.result[node]['y'] = self.order[level] self.order[level] = self.order[level]+1 for sec_end in self.transitions.get(node, []): - self.init_order(sec_end, self.result[sec_end]['y']) + self.init_order(sec_end, self.result[sec_end]['x']) def order_heuristic(self): @@ -349,10 +345,8 @@ class graph(object): self.levels[level] = new_list order = 0 for node in nodes: - self.result[node]['x'] = order - order +=1 - - + self.result[node]['y'] = order + order +=1 def median_value(self, node, adj_rank): @@ -390,7 +384,7 @@ class graph(object): if pre_level_nodes: for src in pre_level_nodes: if (self.transitions.get(src) and self.transitions[src].__contains__(node)): - adj_nodes.append(self.result[src]['x']) + adj_nodes.append(self.result[src]['y']) return adj_nodes @@ -399,7 +393,7 @@ class graph(object): levels = {} for r in self.partial_order: - l = self.result[r]['y'] + l = self.result[r]['x'] levels.setdefault(l,[]) levels[l].append(r) @@ -425,28 +419,28 @@ class graph(object): else: first_half = list[no/2+1:] if max_level==1:#for the case when horizontal graph is there - self.result[list[no/2]]['x'] = mid_pos + (self.result[list[no/2]]['y']%2 * 0.5) + self.result[list[no/2]]['y'] = mid_pos + (self.result[list[no/2]]['x']%2 * 0.5) else: - self.result[list[no/2]]['x'] = mid_pos + factor + self.result[list[no/2]]['y'] = mid_pos + factor last_half = list[:no/2] i=1 for node in first_half: - self.result[node]['x'] = mid_pos - (i + factor) + self.result[node]['y'] = mid_pos - (i + factor) i += 1 i=1 for node in last_half: - self.result[node]['x'] = mid_pos + (i + factor) + self.result[node]['y'] = mid_pos + (i + factor) i += 1 else: self.max_order += max_level+1 - mid_pos = self.result[self.start]['x'] + mid_pos = self.result[self.start]['y'] def tree_order(self, node, last=0): - mid_pos = self.result[node]['x'] + mid_pos = self.result[node]['y'] l = self.transitions.get(node, []) l.reverse() no = len(l) @@ -462,41 +456,41 @@ class graph(object): i=1 for child in first_half: - self.result[child]['x'] = mid_pos - (i - (factor * 0.5)) + self.result[child]['y'] = mid_pos - (i - (factor * 0.5)) i += 1 if self.transitions.get(child, False): if last: - self.result[child]['x'] = last + len(self.transitions[child])/2 + 1 + self.result[child]['y'] = last + len(self.transitions[child])/2 + 1 last = self.tree_order(child, last) if no%2: mid_node = l[no/2] - self.result[mid_node]['x'] = mid_pos + self.result[mid_node]['y'] = mid_pos if self.transitions.get((mid_node), False): if last: - self.result[mid_node]['x'] = last + len(self.transitions[mid_node])/2 + 1 + self.result[mid_node]['y'] = last + len(self.transitions[mid_node])/2 + 1 last = self.tree_order(mid_node) else: if last: - self.result[mid_node]['x'] = last + 1 - self.result[node]['x'] = self.result[mid_node]['x'] - mid_pos = self.result[node]['x'] + self.result[mid_node]['y'] = last + 1 + self.result[node]['y'] = self.result[mid_node]['y'] + mid_pos = self.result[node]['y'] i=1 last_child = None for child in last_half: - self.result[child]['x'] = mid_pos + (i - (factor * 0.5)) + self.result[child]['y'] = mid_pos + (i - (factor * 0.5)) last_child = child i += 1 if self.transitions.get(child, False): if last: - self.result[child]['x'] = last + len(self.transitions[child])/2 + 1 + self.result[child]['y'] = last + len(self.transitions[child])/2 + 1 last = self.tree_order(child, last) if last_child: - last = self.result[last_child]['x'] + last = self.result[last_child]['y'] return last @@ -504,27 +498,29 @@ class graph(object): def process_order(self): """Finds actual-order of the nodes with respect to maximum number of nodes in a rank in component """ - max_level = max(map(lambda x: len(x), self.levels.values())) - - if max_level%2: - self.result[self.start]['x'] = (max_level+1)/2 + self.max_order +1 - else: - self.result[self.start]['x'] = (max_level)/2 + self.max_order + 1 if self.Is_Cyclic: + max_level = max(map(lambda x: len(x), self.levels.values())) + + if max_level%2: + self.result[self.start]['y'] = (max_level+1)/2 + self.max_order + (self.max_order and 1) + else: + self.result[self.start]['y'] = (max_level)/2 + self.max_order + (self.max_order and 1) + self.graph_order() else: - self.result[self.start]['x'] = 0 + self.result[self.start]['y'] = 0 self.tree_order(self.start, 0) - min_order = math.fabs(min(map(lambda x: x['x'], self.result.values()))) - min_order += self.max_order + 1 + min_order = math.fabs(min(map(lambda x: x['y'], self.result.values()))) + min_order += self.max_order + (self.max_order and 1) for level in self.levels: for node in self.levels[level]: - self.result[node]['x'] += min_order + self.result[node]['y'] += min_order - self.max_order = max(map(lambda x: x['x'], self.result.values())) + self.max_order = max(map(lambda x: x['y'], self.result.values())) + def find_starts(self): """Finds other start nodes of the graph in the case when graph is disconneted @@ -606,7 +602,7 @@ class graph(object): #normalization self.normalize() for edge in self.edge_wt: - self.edge_wt[edge] = self.result[edge[1]]['y'] - self.result[edge[0]]['y'] + self.edge_wt[edge] = self.result[edge[1]]['x'] - self.result[edge[0]]['x'] def order_in_rank(self): """Finds optimized order of the nodes within their ranks using median heuristic @@ -622,10 +618,10 @@ class graph(object): for i in range(max_rank+1): self.order[i] = 0 - self.init_order(self.start, self.result[self.start]['y']) + self.init_order(self.start, self.result[self.start]['x']) for level in self.levels: - self.levels[level].sort(lambda x, y: cmp(self.result[x]['x'], self.result[y]['x'])) + self.levels[level].sort(lambda x, y: cmp(self.result[x]['y'], self.result[y]['y'])) self.order_heuristic() self.process_order() @@ -673,7 +669,7 @@ class graph(object): for l in self.levels: result += 'PosY: ' + str(l) + '\n' for node in self.levels[l]: - result += '\tPosX: '+ str(self.result[node]['x']) + ' - Node:' + node + "\n" + result += '\tPosX: '+ str(self.result[node]['y']) + ' - Node:' + node + "\n" return result @@ -684,16 +680,16 @@ class graph(object): #for flat edges ie. source an destination nodes are on the same rank for src in self.transitions: for des in self.transitions[src]: - if (self.result[des]['y'] - self.result[src]['y'] == 0): - self.result[src]['y'] += 0.08 - self.result[des]['y'] -= 0.08 + if (self.result[des]['x'] - self.result[src]['x'] == 0): + self.result[src]['x'] += 0.08 + self.result[des]['x'] -= 0.08 factorX = maxx + nheight factorY = maxy + nwidth for node in self.result: - self.result[node]['x'] = (self.result[node]['x']) * factorX + margin - self.result[node]['y'] = (self.result[node]['y']) * factorY + margin + self.result[node]['y'] = (self.result[node]['y']) * factorX + margin + self.result[node]['x'] = (self.result[node]['x']) * factorY + margin def result_get(self): @@ -731,13 +727,13 @@ if __name__=='__main__': draw = ImageDraw.Draw(img) for name,node in g.result.items(): - draw.arc( (int(node['x']-radius), int(node['y']-radius),int(node['x']+radius), int(node['y']+radius) ), 0, 360, (128,128,128)) - draw.text( (int(node['x']), int(node['y'])), name, (128,128,128)) + draw.arc( (int(node['y']-radius), int(node['x']-radius),int(node['y']+radius), int(node['x']+radius) ), 0, 360, (128,128,128)) + draw.text( (int(node['y']), int(node['x'])), name, (128,128,128)) for nodefrom in g.transitions: for nodeto in g.transitions[nodefrom]: - draw.line( (int(g.result[nodefrom]['x']), int(g.result[nodefrom]['y']),int(g.result[nodeto]['x']),int(g.result[nodeto]['y'])),(128,128,128) ) + draw.line( (int(g.result[nodefrom]['y']), int(g.result[nodefrom]['x']),int(g.result[nodeto]['y']),int(g.result[nodeto]['x'])),(128,128,128) ) img.save("graph.png", "PNG") From 56d6d3235d98f8889df5c86538a85adb4c1a89cb Mon Sep 17 00:00:00 2001 From: Priyesh Date: Tue, 23 Sep 2008 18:28:32 +0530 Subject: [PATCH 002/151] made sale_process.xml for sales workflow in sale module bzr revid: solanki.priyesh@gmail.com-20080923125832-5ly7v74to7202t1t --- addons/process/__terp__.py | 1 + addons/sale/process/sale_process.xml | 243 +++++++++++++++++++++++++++ 2 files changed, 244 insertions(+) create mode 100644 addons/sale/process/sale_process.xml diff --git a/addons/process/__terp__.py b/addons/process/__terp__.py index f8cbf4ad927..80008ca6181 100644 --- a/addons/process/__terp__.py +++ b/addons/process/__terp__.py @@ -14,6 +14,7 @@ This module allows you to manage your process for the end-users. "update_xml" : [ "security/ir.model.access.csv", 'process_view.xml', + '../sale/process/sale_process.xml' ], "active": False, "installable": True diff --git a/addons/sale/process/sale_process.xml b/addons/sale/process/sale_process.xml new file mode 100644 index 00000000000..6865fa8a57b --- /dev/null +++ b/addons/sale/process/sale_process.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 2e7f1a4d772c51458d78e7ce14823be81c5a6a89 Mon Sep 17 00:00:00 2001 From: Jay Vora Date: Fri, 26 Sep 2008 15:52:29 +0530 Subject: [PATCH 003/151] Bugfixed Format() method issue of reports. bzr revid: jvo@tinyerp.com-20080926102229-6ldy5j1tz07t849a --- bin/report/report_sxw.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/bin/report/report_sxw.py b/bin/report/report_sxw.py index a5f7ee8d7ef..934fe3b1ee1 100644 --- a/bin/report/report_sxw.py +++ b/bin/report/report_sxw.py @@ -292,13 +292,17 @@ class rml_parse(object): oldtag = self.tag self._node.data = '' node = self._find_parent(self._node, [oldtag]) - - pp = node.parentNode - ns = node.nextSibling - pp.removeChild(node) + if node: + pp = node.parentNode + ns = node.nextSibling + pp.removeChild(node) + else: + pp=self._node self._node = pp - lst = text.split('\n') - if not len(lst): + lst='' + if type(text)==type(''): + lst = text.split('\n') + if lst and (not len(lst)): return None nodes = [] for i in range(len(lst)): From 6e36c805ee8fa1286ae69f6bf1f66f5b88160416 Mon Sep 17 00:00:00 2001 From: Harshad Modi Date: Fri, 26 Sep 2008 16:42:09 +0530 Subject: [PATCH 004/151] add new function for fetch property data on partner model bzr revid: hmo@tinyerp.com-20080926111209-g7ij0j5uw8rukri8 --- bin/addons/base/res/partner/partner.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bin/addons/base/res/partner/partner.py b/bin/addons/base/res/partner/partner.py index d568032fdd1..3c5f539ee4d 100644 --- a/bin/addons/base/res/partner/partner.py +++ b/bin/addons/base/res/partner/partner.py @@ -247,6 +247,18 @@ class res_partner(osv.osv): result[a] = adr.get(a, default_address) return result + def property_get(self, cr, uid, ids,property_pref=[]): + select = ids + if isinstance(ids, (int, long)): + select = [ids] + result=self.read(cr,uid,select,property_pref) + for res in result: + for prt in property_pref: + res[prt] = res[prt] and res[prt][0] or False + if isinstance(ids, (int, long)): + return result[0] + return result + def gen_next_ref(self, cr, uid, ids): if len(ids) != 1: return True From 457ada6dff32509b78495d22c4d9e60da40232d3 Mon Sep 17 00:00:00 2001 From: Priyesh Date: Fri, 26 Sep 2008 20:18:14 +0530 Subject: [PATCH 005/151] Demo of all process bzr revid: solanki.priyesh@gmail.com-20080926144814-4lyid0srfi35ff1d --- addons/account/process/invoice_process.xml | 214 ++++++++++++++++++ addons/account/process/statement_process.xml | 135 +++++++++++ .../process/hr_timesheet_process.xml | 135 +++++++++++ .../process/hr_timesheet_sheet_process.xml | 154 +++++++++++++ addons/process/__terp__.py | 13 +- addons/product/process/product_process.xml | 141 ++++++++++++ addons/project/process/task_process.xml | 177 +++++++++++++++ addons/purchase/process/purchase_process.xml | 155 +++++++++++++ 8 files changed, 1123 insertions(+), 1 deletion(-) create mode 100644 addons/account/process/invoice_process.xml create mode 100644 addons/account/process/statement_process.xml create mode 100644 addons/hr_timesheet/process/hr_timesheet_process.xml create mode 100644 addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml create mode 100644 addons/product/process/product_process.xml create mode 100644 addons/project/process/task_process.xml create mode 100644 addons/purchase/process/purchase_process.xml diff --git a/addons/account/process/invoice_process.xml b/addons/account/process/invoice_process.xml new file mode 100644 index 00000000000..7e8e3ef7c7a --- /dev/null +++ b/addons/account/process/invoice_process.xml @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/account/process/statement_process.xml b/addons/account/process/statement_process.xml new file mode 100644 index 00000000000..10365e76df0 --- /dev/null +++ b/addons/account/process/statement_process.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/hr_timesheet/process/hr_timesheet_process.xml b/addons/hr_timesheet/process/hr_timesheet_process.xml new file mode 100644 index 00000000000..9af5f1453a3 --- /dev/null +++ b/addons/hr_timesheet/process/hr_timesheet_process.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml b/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml new file mode 100644 index 00000000000..8ba8e0392d9 --- /dev/null +++ b/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/process/__terp__.py b/addons/process/__terp__.py index 80008ca6181..b692a8f3c8e 100644 --- a/addons/process/__terp__.py +++ b/addons/process/__terp__.py @@ -10,7 +10,18 @@ This module allows you to manage your process for the end-users. """, "depends" : ["base", "sale"], "init_xml" : [], - "demo_xml" : ['process_demo.xml'], +# "demo_xml" : ['process_demo.xml'], + "demo_xml" : [ + '../sale/process/sale_process.xml', + '../hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml', + '../account/process/invoice_process.xml', + '../account/process/statement_process.xml', + '../project/process/task_process.xml', + '../hr_timesheet/process/hr_timesheet_process.xml', + '../purchase/process/purchase_process.xml', + '../product/process/product_process.xml', + ] + "update_xml" : [ "security/ir.model.access.csv", 'process_view.xml', diff --git a/addons/product/process/product_process.xml b/addons/product/process/product_process.xml new file mode 100644 index 00000000000..73d28808133 --- /dev/null +++ b/addons/product/process/product_process.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/project/process/task_process.xml b/addons/project/process/task_process.xml new file mode 100644 index 00000000000..9f5da3b2de0 --- /dev/null +++ b/addons/project/process/task_process.xml @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/purchase/process/purchase_process.xml b/addons/purchase/process/purchase_process.xml new file mode 100644 index 00000000000..05a1857cbe3 --- /dev/null +++ b/addons/purchase/process/purchase_process.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From ff36260e03ffb1d7d1ea2eca7dabaf891c2d67ee Mon Sep 17 00:00:00 2001 From: Mustufa Rangwala Date: Mon, 29 Sep 2008 11:52:08 +0530 Subject: [PATCH 006/151] modify res.partner.bank object -now it search on bank account number instead of bank type.. bzr revid: mra@tinyerp.com-20080929062208-ysl03mvcg4a4jqvc --- bin/addons/base/res/partner/partner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/addons/base/res/partner/partner.py b/bin/addons/base/res/partner/partner.py index 3c5f539ee4d..b419f35c941 100644 --- a/bin/addons/base/res/partner/partner.py +++ b/bin/addons/base/res/partner/partner.py @@ -370,7 +370,7 @@ res_partner_bank_type_fields() class res_partner_bank(osv.osv): '''Bank Accounts''' _name = "res.partner.bank" - _rec_name = "state" + _rec_name = "acc_number" _description = __doc__ _order = 'sequence' From 5c02f5e44e62870e1df882e629baaf5e9056f18b Mon Sep 17 00:00:00 2001 From: Priyesh Date: Mon, 29 Sep 2008 12:44:10 +0530 Subject: [PATCH 007/151] demo for procurement flow bzr revid: solanki.priyesh@gmail.com-20080929071410-xc0t6oqb2tvvcv8f --- addons/mrp/process/procurement_process.xml | 275 +++++++++++++++++++++ addons/process/__terp__.py | 1 + 2 files changed, 276 insertions(+) create mode 100644 addons/mrp/process/procurement_process.xml diff --git a/addons/mrp/process/procurement_process.xml b/addons/mrp/process/procurement_process.xml new file mode 100644 index 00000000000..73e12053143 --- /dev/null +++ b/addons/mrp/process/procurement_process.xml @@ -0,0 +1,275 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/process/__terp__.py b/addons/process/__terp__.py index b692a8f3c8e..2dbab4d079c 100644 --- a/addons/process/__terp__.py +++ b/addons/process/__terp__.py @@ -20,6 +20,7 @@ This module allows you to manage your process for the end-users. '../hr_timesheet/process/hr_timesheet_process.xml', '../purchase/process/purchase_process.xml', '../product/process/product_process.xml', + '../mrp/process/procurement_process.xml', ] "update_xml" : [ From 732db1293808dc857571454dc6468cc08adbc9d0 Mon Sep 17 00:00:00 2001 From: Amit Mendapara Date: Mon, 29 Sep 2008 12:54:49 +0530 Subject: [PATCH 008/151] * Fixed attribute error. bzr revid: ame@tinyerp.com-20080929072449-ozko10ut1zgg83jt --- addons/process/process.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/process/process.py b/addons/process/process.py index ccfa9c45fb6..183f3acf93c 100644 --- a/addons/process/process.py +++ b/addons/process/process.py @@ -118,7 +118,7 @@ class process_process(osv.osv): data['url'] = node.help_url # chech whether directory_id from inherited from document2 is available - if hasattr(node, 'directory_id') and node.directory_id: + if 'directory_id' in node and node.directory_id: data['directory'] = "ftp://localhost:8021" #TODO: implement document_directory.get_url # get assosiated workflow From 1949b8bd997bfe0a5722aa4c6e5670dfc46efd28 Mon Sep 17 00:00:00 2001 From: Jay Vora Date: Mon, 29 Sep 2008 13:07:13 +0530 Subject: [PATCH 009/151] Account budget reports:Optimized code and bugfixes bzr revid: jvo@tinyerp.com-20080929073713-701e5q4qc8igfurh --- .../report/analytic_account_budget_report.py | 29 +++++++------------ .../report/crossovered_budget_report.py | 15 +++------- 2 files changed, 15 insertions(+), 29 deletions(-) diff --git a/addons/account_budget/report/analytic_account_budget_report.py b/addons/account_budget/report/analytic_account_budget_report.py index ea904caeda1..52ee37783fe 100644 --- a/addons/account_budget/report/analytic_account_budget_report.py +++ b/addons/account_budget/report/analytic_account_budget_report.py @@ -34,34 +34,27 @@ class analytic_account_budget_report(report_sxw.rml_parse): result=[] accounts = self.pool.get('account.analytic.account').browse(self.cr, self.uid, [object.id], self.context.copy()) + c_b_lines_obj=self.pool.get('crossovered.budget.lines') for account_id in accounts: res={} - budget_lines=[] b_line_ids=[] for line in account_id.crossovered_budget_line: b_line_ids.append(line.id) + if not b_line_ids: + return [] + bd_lines_ids = ','.join([str(x) for x in b_line_ids]) d_from=form['date_from'] d_to=form['date_to'] - query="select id from crossovered_budget_lines where id in ("+ str(bd_lines_ids) + ")"# AND '"+ str(d_from) +"'<=date_from AND date_from Date: Mon, 29 Sep 2008 10:28:33 +0200 Subject: [PATCH 010/151] bugfix with menu permissions lp bug: https://launchpad.net/bugs/274306 fixed bzr revid: christophe@tinyerp.com-20080929082833-nmtdgqoofepjy9hv --- bin/addons/base/ir/ir_ui_menu.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/addons/base/ir/ir_ui_menu.py b/bin/addons/base/ir/ir_ui_menu.py index 555a5b4b7a1..bc3693be85f 100644 --- a/bin/addons/base/ir/ir_ui_menu.py +++ b/bin/addons/base/ir/ir_ui_menu.py @@ -66,7 +66,7 @@ class ir_ui_menu(osv.osv): context=context) if uid==1: return ids - user_groups = set(self.pool.get('res.users').read(cr, uid, uid)['groups_id']) + user_groups = set(self.pool.get('res.users').browse(cr, uid, uid)['groups_id'] or []) result = [] for menu in self.browse(cr, uid, ids): restrict_to_groups = menu.groups_id @@ -76,7 +76,7 @@ class ir_ui_menu(osv.osv): # the action of the menu try: m, oid = menu.action.split(',', 1) - data = self.pool.get(m).read(cr, uid, int(oid), context=context) + data = self.pool.get(m).browse(cr, uid, int(oid), context=context) if data and 'groups_id' in data: restrict_to_groups = data['groups_id'] except: From ce6f095b2d8bac105e7e17c2cb0f90d42875f517 Mon Sep 17 00:00:00 2001 From: Priyesh Date: Mon, 29 Sep 2008 14:10:56 +0530 Subject: [PATCH 011/151] modified terp files bzr revid: solanki.priyesh@gmail.com-20080929084056-35wl5hygi2b5ny30 --- addons/account/__terp__.py | 4 +++- addons/hr_timesheet/__terp__.py | 3 ++- addons/hr_timesheet_sheet/__terp__.py | 5 +++-- addons/mrp/__terp__.py | 3 ++- addons/process/__terp__.py | 14 +------------- addons/product/__terp__.py | 5 +++-- addons/project/__terp__.py | 3 ++- addons/purchase/__terp__.py | 3 ++- addons/sale/__terp__.py | 3 ++- 9 files changed, 20 insertions(+), 23 deletions(-) diff --git a/addons/account/__terp__.py b/addons/account/__terp__.py index 2051c8dc501..bed1cc2a0b6 100644 --- a/addons/account/__terp__.py +++ b/addons/account/__terp__.py @@ -29,7 +29,7 @@ { "name" : "Accounting and financial management", "version" : "1.0", - "depends" : ["product", "base"], + "depends" : ["product", "base", "process"], "author" : "Tiny", "description": """Financial and accounting module that covers: General accounting @@ -66,6 +66,8 @@ "project/project_report.xml", "product_view.xml", "account_assert_test.xml", + "process/invoice_process.xml" + "process/statement_process.xml" ], "translations" : { "fr": "i18n/french_fr.csv" diff --git a/addons/hr_timesheet/__terp__.py b/addons/hr_timesheet/__terp__.py index 1004f06d903..fd84f3fb051 100644 --- a/addons/hr_timesheet/__terp__.py +++ b/addons/hr_timesheet/__terp__.py @@ -43,7 +43,7 @@ Lots of reporting on time and employee tracking are provided. It is completly integrated with the cost accounting module. It allows you to set up a management by affair. """, - "depends" : ["account", "hr", "base", "hr_attendance"], + "depends" : ["account", "hr", "base", "hr_attendance", "process"], "init_xml" : ["hr_timesheet_data.xml"], "demo_xml" : ["hr_timesheet_demo.xml",], "update_xml" : [ @@ -51,6 +51,7 @@ to set up a management by affair. "hr_timesheet_view.xml", "hr_timesheet_report.xml", "hr_timesheet_wizard.xml", + "process/hr_timesheet_process.xml" ], "active": False, "installable": True diff --git a/addons/hr_timesheet_sheet/__terp__.py b/addons/hr_timesheet_sheet/__terp__.py index 4c307a5af33..19419f71dd1 100644 --- a/addons/hr_timesheet_sheet/__terp__.py +++ b/addons/hr_timesheet_sheet/__terp__.py @@ -51,13 +51,14 @@ The validation can be configured in te company: * Period size (day, week, month, year) * Maximal difference between timesheet and attendances """, - "depends" : ["hr_timesheet", "hr_timesheet_invoice"], + "depends" : ["hr_timesheet", "hr_timesheet_invoice", "process"], "init_xml" : [], "demo_xml" : ["hr_timesheet_sheet_demo.xml",], "update_xml" : [ "security/ir.model.access.csv", "hr_timesheet_sheet_view.xml", - "hr_timesheet_workflow.xml" + "hr_timesheet_workflow.xml", + "process/hr_timesheet_sheet_process.xml" ], "active": False, "installable": True diff --git a/addons/mrp/__terp__.py b/addons/mrp/__terp__.py index 8fa15f145fd..ea672858ebc 100644 --- a/addons/mrp/__terp__.py +++ b/addons/mrp/__terp__.py @@ -32,7 +32,7 @@ "author" : "Tiny", "website" : "http://tinyerp.com/module_mrp.html", "category" : "Generic Modules/Production", - "depends" : ["stock", "hr", "purchase", "product"], + "depends" : ["stock", "hr", "purchase", "product", "process"], "description": """ This is the base module to manage the manufacturing process in Tiny ERP. @@ -70,6 +70,7 @@ "mrp_wizard.xml", "mrp_report.xml", "company_view.xml", + "process/procurement_process.xml" ], "active": False, "installable": True diff --git a/addons/process/__terp__.py b/addons/process/__terp__.py index 2dbab4d079c..80008ca6181 100644 --- a/addons/process/__terp__.py +++ b/addons/process/__terp__.py @@ -10,19 +10,7 @@ This module allows you to manage your process for the end-users. """, "depends" : ["base", "sale"], "init_xml" : [], -# "demo_xml" : ['process_demo.xml'], - "demo_xml" : [ - '../sale/process/sale_process.xml', - '../hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml', - '../account/process/invoice_process.xml', - '../account/process/statement_process.xml', - '../project/process/task_process.xml', - '../hr_timesheet/process/hr_timesheet_process.xml', - '../purchase/process/purchase_process.xml', - '../product/process/product_process.xml', - '../mrp/process/procurement_process.xml', - ] - + "demo_xml" : ['process_demo.xml'], "update_xml" : [ "security/ir.model.access.csv", 'process_view.xml', diff --git a/addons/product/__terp__.py b/addons/product/__terp__.py index 34cd432b10e..c9e52f9b7e5 100644 --- a/addons/product/__terp__.py +++ b/addons/product/__terp__.py @@ -31,7 +31,7 @@ "version" : "1.0", "author" : "Tiny", "category" : "Generic Modules/Inventory Control", - "depends" : ["base"], + "depends" : ["base", "process"], "init_xml" : [], "demo_xml" : ["product_demo.xml"], "description": """ @@ -57,7 +57,8 @@ "security/ir.model.access.csv", "product_data.xml","product_report.xml", "product_view.xml", "pricelist_view.xml", - "partner_view.xml", "product_wizard.xml"], + "partner_view.xml", "product_wizard.xml", + "process/product_process.xml"], "active": False, "installable": True } diff --git a/addons/project/__terp__.py b/addons/project/__terp__.py index cbef75ca0e3..d153de14336 100644 --- a/addons/project/__terp__.py +++ b/addons/project/__terp__.py @@ -32,7 +32,7 @@ "author" : "Tiny", "website" : "http://tinyerp.com/module_project.html", "category" : "Generic Modules/Projects & Services", - "depends" : ["product", "account", "hr"], + "depends" : ["product", "account", "hr", "process"], "description": "Project management module that track multi-level projects, tasks, works done on tasks, eso. It is able to render planning, order tasks, eso.", "init_xml" : [], "demo_xml" : ["project_demo.xml"], @@ -43,6 +43,7 @@ "project_wizard.xml", "project_view.xml", "project_report.xml", + "process/task_process.xml" ], "active": False, "installable": True diff --git a/addons/purchase/__terp__.py b/addons/purchase/__terp__.py index d5d50f6d5f8..ec218e520c5 100644 --- a/addons/purchase/__terp__.py +++ b/addons/purchase/__terp__.py @@ -31,7 +31,7 @@ "version" : "1.0", "author" : "Tiny", "website" : "http://tinyerp.com/module_purchase.html", - "depends" : ["base", "account", "stock"], + "depends" : ["base", "account", "stock", "process"], "category" : "Generic Modules/Sales & Purchases", "init_xml" : [], "demo_xml" : ["purchase_demo.xml", @@ -48,6 +48,7 @@ "purchase_wizard.xml", "stock_view.xml", "partner_view.xml" + "process/purchase_process.xml" ], "active": False, "installable": True diff --git a/addons/sale/__terp__.py b/addons/sale/__terp__.py index d5bc58a98ae..6dbd080b853 100644 --- a/addons/sale/__terp__.py +++ b/addons/sale/__terp__.py @@ -31,7 +31,7 @@ "version" : "1.0", "author" : "Tiny", "website" : "http://tinyerp.com/module_sale.html", - "depends" : ["product", "stock", "mrp"], + "depends" : ["product", "stock", "mrp", "process"], "category" : "Generic Modules/Sales & Purchases", "init_xml" : [], "demo_xml" : ["sale_demo.xml"], @@ -62,6 +62,7 @@ "sale_report.xml", "sale_wizard.xml", "stock_view.xml", + "process/sale_process.xml" ], "active": False, "installable": True From 4f80a8e2137a0fa9b57ff7f73d01fdb41ba23dfc Mon Sep 17 00:00:00 2001 From: Harshad Modi Date: Mon, 29 Sep 2008 14:19:06 +0530 Subject: [PATCH 012/151] Improvement on Configuration wizard step : * rename "ir.module.module.configuration.step" with "ir.actions.todo" and put into ir/ir_actions.py file * added more fields like : - active - start_date (datetime) - stop_date (datetime) - users_id and groups_id ( for security) - type : configure | service | other ( default type is "configure" ) - start_on : at once | auto | manual * rename "ir.module.module.configuration.wizard" with "ir.actions.configuration.wizard" and put into ir/ir_actions.py file bzr revid: hmo@tinyerp.com-20080929084906-8jke69eg3uadl9vm --- bin/addons/base/base_update.xml | 4 +- bin/addons/base/ir/ir.xml | 70 +++++++++++ bin/addons/base/ir/ir_actions.py | 119 ++++++++++++++++++ bin/addons/base/ir/ir_model.py | 4 +- bin/addons/base/module/module.py | 107 ---------------- bin/addons/base/module/module_view.xml | 67 +--------- .../module/wizard/wizard_module_upgrade.py | 2 +- bin/addons/base/res/res_user.py | 8 +- bin/addons/base/security/ir.model.access.csv | 2 - 9 files changed, 199 insertions(+), 184 deletions(-) diff --git a/bin/addons/base/base_update.xml b/bin/addons/base/base_update.xml index b56866a5a15..756085896bb 100644 --- a/bin/addons/base/base_update.xml +++ b/bin/addons/base/base_update.xml @@ -244,7 +244,7 @@ - + Create User Create your users. You will be able to assign groups to users. Groups define the access rights of each users on the different objects of the system. @@ -254,7 +254,7 @@ You will be able to assign groups to users. Groups define the access rights of e 10 - + Select Your Interface Choose between the "Simplified Interface" or the extended one. If you are testing or using OpenERP for the first time, we suggest you to use diff --git a/bin/addons/base/ir/ir.xml b/bin/addons/base/ir/ir.xml index b67f5704af8..11358c788ce 100644 --- a/bin/addons/base/ir/ir.xml +++ b/bin/addons/base/ir/ir.xml @@ -1187,5 +1187,75 @@ + + ir.actions.todo + Config Wizard Steps + tree + + + + + + + + + + + + ir.actions.todo + Config Wizard Steps + form + +
+ + + + + + + + +
+ + Config Wizard Steps + ir.actions.todo + + form + [('type','=','configure')] + + + + + Main Configuration Wizard + ir.actions.configuration.wizard + form + +
+ + + + + + +