diff --git a/.mrbob.ini b/.mrbob.ini deleted file mode 100644 index c2469e116..000000000 --- a/.mrbob.ini +++ /dev/null @@ -1,18 +0,0 @@ -[variables] -copyright.name = saas apps -copyright.github = saas-addons -addon.version = 12 -addon.technical_category = saas -addon.category = Marketing -addon.dependency = -addon.upstream = odoo-saas-tools -addon.name = SaaS Apps -addon.technical_name = saas_apps -addon.summary = short -addon.description = Loong -odoo.version = 12 -addon.name_camelwords = Saas Apps -copyright.year = 2020 -addon.branch = 12.0 -addon.odoo_sha = feb7c99f47cae55fff77035fe53975ea4a14d624 - diff --git a/saas_apps/README.rst b/saas_apps/README.rst index 660002acc..95c401776 100644 --- a/saas_apps/README.rst +++ b/saas_apps/README.rst @@ -6,18 +6,16 @@ Saas Apps =========== -short +Base module for manage modules in saas. -Loong +Module allows to choose modules that users gona use in their db. Credits ======= Contributors ------------ -* `saas apps `__: - - * :one::zero: init version of the module +* `Vildan Safin `__ Sponsors -------- diff --git a/saas_apps/__manifest__.py b/saas_apps/__manifest__.py index 242bd9be6..96534d7b3 100644 --- a/saas_apps/__manifest__.py +++ b/saas_apps/__manifest__.py @@ -3,10 +3,10 @@ { "name": """SaaS Apps""", - "summary": """short""", + "summary": """Choose your apps""", "category": "Marketing", # "live_test_url": "http://apps.it-projects.info/shop/product/DEMO-URL?version=12.0", - "images": [], + "images": ['/images/attention.jpg'], "version": "12.0.1.0.0", "application": False, @@ -17,10 +17,13 @@ # "price": 9.00, # "currency": "EUR", - "depends": [ - ], + "depends": ['website'], "external_dependencies": {"python": [], "bin": []}, "data": [ + 'security/ir.model.access.csv', + 'views/calculator.xml', + 'views/manage.xml', + 'views/assets.xml' ], "demo": [ ], diff --git a/saas_apps/controllers/main.py b/saas_apps/controllers/main.py index 0ddc65176..8fdab4fb4 100644 --- a/saas_apps/controllers/main.py +++ b/saas_apps/controllers/main.py @@ -2,9 +2,40 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from odoo.http import route, request, Controller - +from odoo import http +from openerp.http import request +import json class SaaSAppsController(Controller): - @route('/price', type='http', auth='public') - def index(self, *kw): - return "shit" + @route('/price', auth='public', website=True) + def user_page(self, **kw): + import wdb + wdb.set_trace() + apps = http.request.env['saas.lines'] + return http.request.render('saas_apps.index', { + 'apps': apps.search([]) + }) + + @route('/manage', auth='public', website=True) + def manager_page(self, **kw): + apps = http.request.env['ir.module.module'] + return http.request.render('saas_apps.manage', { + 'apps': apps.search([]) + }) + + # @route('/manage/', auth='public', website=True) + # def module_information(self, name): + # return http.request.render('saas_apps.info', {}) + + @http.route(['/test'], type='json', auth='public', website=True) + def catch_app_click(self, **kw): + import wdb + wdb.set_trace() + # Mark choosen module as saleable + http.request.env['ir.module.module'].search([('name', '=', kw['args'][0])]).allow_to_sell = True + apps = http.request.env['saas.lines'] + apps.add_new_module(kw['args'][0]) + # request.redirect('/manage/%s' % name) + return { + 'apps': kw['args'][0] + } diff --git a/saas_apps/images/attention.jpg b/saas_apps/images/attention.jpg new file mode 100644 index 000000000..6a5528b8a Binary files /dev/null and b/saas_apps/images/attention.jpg differ diff --git a/saas_apps/models/saas_apps.py b/saas_apps/models/saas_apps.py index ea644efb2..d126b97e6 100644 --- a/saas_apps/models/saas_apps.py +++ b/saas_apps/models/saas_apps.py @@ -2,10 +2,76 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from odoo import api, fields, models +import logging +_logger = logging.getLogger(__name__) -class SAASApps(models.Model): - _name = 'saas.apps' +class SAASBasket(models.Model): + _name = 'saas.basket' _description = 'Module for selecting applications' users = fields.Integer(default=0) + module_sets_in_basket = fields.One2many('saas.set', 'basket', ondelete="cascade", delegate=True) + final_basket_price = fields.Float(default=0.0, compute='_compute_price', string="Price of the set") + + def _compute_price(self): + for module_set in self.module_set_in_basket: + self.final_basket_price = self.final_basket_price + module_set.price + + +class SAASLine(models.Model): + _name = 'saas.lines' + _description = 'Model line' + + module_name = fields.Char(default="default") + price = fields.Float(default=0.0) + icon_path = fields.Char(compute='_compute_path', string="icon path") + dependencies = fields.Many2one('saas.set', string="Module dependences") + + def _compute_path(self): + self.icon_path = "/saas_apps/static/src/img/%s.png" % self.module_name + + @api.constrains('price') + def _validate_price(self): + if self.price < 0: + self.price = 0 + raise "Price can't be negative." + + def add_new_module(self, name): + import wdb + wdb.set_trace() + # for module in self: + # if(module.module_name == name) + # return False + self.create({ + 'name': name + }) + return True + + +class SAASDependence(models.Model): + _name = 'saas.set' + _description = 'Module with dependencies' + + basket = fields.Many2one('saas.basket', string='Modules in basket') + modules = fields.One2many('saas.lines', 'dependencies', ondelete='cascade', delegate=True) + final_set_price = fields.Float(default=0.0, compute='_compute_price', string="Price of the set") + + def add_dependence(self, new_module_name, new_module_price): + try: + self.modules.create({ + 'module_name': new_module_name, + 'price': int(new_module_name_price) + }) + except: + _logger.error("Can't add new item in dependencies of this module") + + def _compute_price(self): + for module in self.modules: + self.final_set_price = self.final_set_price + module.price + + +# class IrModuleModule(models.Model): +# _inherit = "ir.module.module" + +# allow_to_sell = fields.Boolean(default=False) diff --git a/saas_apps/security/ir.model.access.csv b/saas_apps/security/ir.model.access.csv new file mode 100644 index 000000000..1278b44e3 --- /dev/null +++ b/saas_apps/security/ir.model.access.csv @@ -0,0 +1,4 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_saas_basket,access_saas_basket,model_saas_basket,base.group_user,1,1,1,1 +access_saas_lines,access_saas_lines,model_saas_lines,base.group_user,1,1,1,1 +access_saas_set,access_saas_set,model_saas_set,base.group_user,1,1,1,1 diff --git a/saas_apps/static/src/css/calculator.css b/saas_apps/static/src/css/calculator.css new file mode 100644 index 000000000..0efc03b36 --- /dev/null +++ b/saas_apps/static/src/css/calculator.css @@ -0,0 +1,9 @@ +.main-control-pad{ + margin-left: 15%; + width: auto; +} + +.col-lg-12{ + flex: 0 0 100%; + max-width: 100%; +} \ No newline at end of file diff --git a/saas_apps/static/src/img/default.png b/saas_apps/static/src/img/default.png new file mode 100644 index 000000000..abf1e5d8d Binary files /dev/null and b/saas_apps/static/src/img/default.png differ diff --git a/saas_apps/static/src/js/apps.js b/saas_apps/static/src/js/apps.js new file mode 100644 index 000000000..b0eb5b06f --- /dev/null +++ b/saas_apps/static/src/js/apps.js @@ -0,0 +1,22 @@ +odoo.define('saas_apps.model', function (require){ + 'use_strict'; + + var session = require('web.session'); + + + // function poopup_widjet(args){ + + // } + + window.onclick=function(e){ + console.log(e.target.innerText); + + if(window.location.pathname === "/manage") + session.rpc('/test', { + args: [e.target.innerText] + }).then(function (result) { + console.log(result); + // poopup_widjet(result); + }); + } +}); diff --git a/saas_apps/views/assets.xml b/saas_apps/views/assets.xml new file mode 100644 index 000000000..c9cc72fa3 --- /dev/null +++ b/saas_apps/views/assets.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/saas_apps/views/calculator.xml b/saas_apps/views/calculator.xml new file mode 100644 index 000000000..5eb50c245 --- /dev/null +++ b/saas_apps/views/calculator.xml @@ -0,0 +1,70 @@ + + + + + diff --git a/saas_apps/views/manage.xml b/saas_apps/views/manage.xml new file mode 100644 index 000000000..31c4208a0 --- /dev/null +++ b/saas_apps/views/manage.xml @@ -0,0 +1,26 @@ + + + + + diff --git a/saas_apps/views/module_info.xml b/saas_apps/views/module_info.xml new file mode 100644 index 000000000..037465cbb --- /dev/null +++ b/saas_apps/views/module_info.xml @@ -0,0 +1,11 @@ + + + + +