11# Copyright 2020 Vildan Safin <https://github.com/Enigma228322>
22# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
33
4- from odoo import api , fields , models
4+ from odoo import api , fields , models , modules
55import logging
66
77_logger = logging .getLogger (__name__ )
88
99
1010class SAASModule (models .Model ):
11- _name = 'saas.module'
12- _description = 'Model line'
11+ _inherit = 'saas.module'
1312
14- name = fields .Char (default = "default" , string = "Module Name" )
1513 month_price = fields .Float (default = 0.0 , string = "Month price" )
1614 year_price = fields .Float (default = 0.0 , string = "Year price" )
17- icon_path = fields .Char (compute = '_compute_path' , string = "icon path" )
15+ icon_path = fields .Char (string = "Icon path" )
1816 saas_modules = fields .Many2one ('saas.line' , string = "Module dependencies" )
1917
20- def _compute_path (self ):
21- self .icon_path = "/saas_apps/static/src/img/%s.png" % self .name
22-
2318 @api .model
2419 def create (self , vals ):
2520 rec = super (SAASModule , self ).create (vals )
@@ -40,38 +35,44 @@ def add_new_module(self, name):
4035
4136 def refresh (self ):
4237 irmodules = self .env ["ir.module.module" ].search ([])
38+ ir_module_obj = self .env ["ir.module.module" ]
4339 if len (irmodules ) > len (self .search ([])):
4440 for irmodule in irmodules :
4541 if len (self .search ([('name' , '=' , irmodule .name )])) == 0 :
4642 self .create ({'name' : irmodule .name })
47-
48- def cost (self , month ):
49- if month :
50- return self .month_price
51- else :
52- return self .year_price
5343
5444
5545class SAASDependence (models .Model ):
5646 _name = 'saas.line'
5747 _description = 'Module dependencies'
5848
5949 # First dependence is root module
60- name = fields .Char (default = "default" , string = "Module Name" )
50+ name = fields .Char (default = "default" , string = "Module technical name" )
51+ module_name = fields .Char (default = "default" , string = "Module name" )
6152 allow_to_sell = fields .Boolean (string = "Sellable" )
6253 dependencies = fields .One2many ('saas.module' , 'saas_modules' , ondelete = 'cascade' , delegate = True )
6354 year_price = fields .Float (default = 0.0 , compute = '_compute_year_price' , string = "Price per year" )
6455 month_price = fields .Float (default = 0.0 , compute = '_compute_month_price' , string = "Price per month" )
6556
6657 def refresh (self ):
6758 apps = self .env ["saas.module" ]
59+ apps .search ([]).unlink ()
60+ self .search ([]).unlink ()
6861 apps .refresh ()
69- apps = apps .search ([])
70- if len (apps ) > len (self .search ([])):
71- for app in apps :
62+ for app in apps .search ([]):
63+ try :
7264 if len (self .search ([('name' , '=' , app .name )])) == 0 :
73- new = self .create ({'name' : app .name })
74- new .dependencies += app
65+ new = self .create ({
66+ 'name' : app .name ,
67+ 'module_name' : app .module_name
68+ })
69+ if len (ir_module_obj .get_module_info (app .name )):
70+ for dep_name in ir_module_obj .get_module_info (app .name )['depends' ]:
71+ new .dependencies += app .search ([('name' , '=' , dep_name )])
72+ except :
73+ # import wdb
74+ # wdb.set_trace()
75+ _logger .error ("Fuck!" )
7576
7677 def _compute_year_price (self ):
7778 for module in self .dependencies :
@@ -81,29 +82,26 @@ def _compute_month_price(self):
8182 for module in self .dependencies :
8283 self .month_price += module .month_price
8384
84- def dependencies_info (self , for_month , deep ):
85+ def dependencies_info (self , root ):
8586 apps = []
86- # Root module
87- if not deep :
88- apps .append ({
89- 'parent' : 'root' ,
90- 'name' : self .name ,
91- 'price' : self .dependencies [0 ].cost (for_month )
92- })
87+ childs = []
88+ for child in self .dependencies - self .dependencies [0 ]:
89+ childs .append (child .module_name )
90+ apps .append ({
91+ 'parent' : root ,
92+ 'name' : self .module_name ,
93+ 'year_price' : self .dependencies [0 ].year_price ,
94+ 'month_price' : self .dependencies [0 ].month_price ,
95+ 'childs' : childs ,
96+ 'icon_path' : self .dependencies [0 ].icon_path
97+ })
9398 # Looking to the period
9499 for app in self .dependencies - self .dependencies [0 ]:
95100 set = self .search ([('name' , '=' , app .name )])
96- leafs = set .dependencies_info (for_month , deep + 1 )
101+ leafs = set .dependencies_info (self . name )
97102 for leaf in leafs :
98103 if not (leaf in apps ):
99104 apps .append (leaf )
100- item = {
101- 'parent' : self .name ,
102- 'name' : app .name ,
103- 'price' : app .cost (for_month )
104- }
105- if not (item in apps ):
106- apps .append (item )
107105 return apps
108106
109107 @api .multi
0 commit comments