commit 04d1057a8a4ba4f860fe8e7aadb05144c207425c Author: Mario Date: Sun Aug 4 01:30:06 2024 +0200 notebook diff --git a/ow_vm_management/__init__.py b/ow_vm_management/__init__.py new file mode 100644 index 0000000..38718f0 --- /dev/null +++ b/ow_vm_management/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import controllers \ No newline at end of file diff --git a/ow_vm_management/__manifest__.py b/ow_vm_management/__manifest__.py new file mode 100644 index 0000000..26fd8c4 --- /dev/null +++ b/ow_vm_management/__manifest__.py @@ -0,0 +1,23 @@ +{ + 'name': 'VPS Server Management', + 'version': '16.0.1.0.0', + 'category': 'Services/VPS', + 'summary': 'Manage VPS servers for customers', + 'description': """ + This module allows you to record and manage VPS servers for customers. + Customers can view their VPS server information in the portal. + """, + 'author': 'Your Company', + 'website': 'https://www.yourcompany.com', + 'depends': ['base', 'portal'], + 'data': [ + 'security/ir.model.access.csv', + 'views/vps_server_views.xml', + 'views/res_partner_views.xml', + 'views/portal_templates.xml', + ], + 'installable': True, + 'application': False, + 'auto_install': False, + 'license': 'LGPL-3', +} \ No newline at end of file diff --git a/ow_vm_management/__pycache__/__init__.cpython-39.pyc b/ow_vm_management/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..cdc4661 Binary files /dev/null and b/ow_vm_management/__pycache__/__init__.cpython-39.pyc differ diff --git a/ow_vm_management/controllers/__init__.py b/ow_vm_management/controllers/__init__.py new file mode 100644 index 0000000..e3e219b --- /dev/null +++ b/ow_vm_management/controllers/__init__.py @@ -0,0 +1 @@ +from . import portal \ No newline at end of file diff --git a/ow_vm_management/controllers/__pycache__/__init__.cpython-39.pyc b/ow_vm_management/controllers/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..a3ab54e Binary files /dev/null and b/ow_vm_management/controllers/__pycache__/__init__.cpython-39.pyc differ diff --git a/ow_vm_management/controllers/__pycache__/portal.cpython-39.pyc b/ow_vm_management/controllers/__pycache__/portal.cpython-39.pyc new file mode 100644 index 0000000..803e75c Binary files /dev/null and b/ow_vm_management/controllers/__pycache__/portal.cpython-39.pyc differ diff --git a/ow_vm_management/controllers/portal.py b/ow_vm_management/controllers/portal.py new file mode 100644 index 0000000..8a1c8f2 --- /dev/null +++ b/ow_vm_management/controllers/portal.py @@ -0,0 +1,80 @@ +from odoo import http, _ +from odoo.exceptions import AccessError, MissingError +from odoo.http import request +from odoo.addons.portal.controllers.portal import CustomerPortal, pager as portal_pager +from odoo.osv.expression import OR + +class CustomerPortalVPS(CustomerPortal): + + def _prepare_home_portal_values(self, counters): + values = super()._prepare_home_portal_values(counters) + if 'vps_server_count' in counters: + values['vps_server_count'] = request.env['vps.server'].search_count([('customer_id', '=', request.env.user.partner_id.id)]) + return values + + @http.route(['/my/vps-servers', '/my/vps-servers/page/'], type='http', auth="user", website=True) + def portal_my_vps_servers(self, page=1, date_begin=None, date_end=None, sortby=None, **kw): + values = self._prepare_portal_layout_values() + VPSServer = request.env['vps.server'] + + domain = [('customer_id', '=', request.env.user.partner_id.id)] + + searchbar_sortings = { + 'name': {'label': _('Name'), 'order': 'name'}, + 'ip_address': {'label': _('IP Address'), 'order': 'ip_address'}, + } + + if not sortby: + sortby = 'name' + sort_order = searchbar_sortings[sortby]['order'] + + if date_begin and date_end: + domain += [('create_date', '>', date_begin), ('create_date', '<=', date_end)] + + # count for pager + vps_server_count = VPSServer.search_count(domain) + + # make pager + pager = portal_pager( + url="/my/vps-servers", + url_args={'date_begin': date_begin, 'date_end': date_end, 'sortby': sortby}, + total=vps_server_count, + page=page, + step=self._items_per_page + ) + + # search the count to display, according to the pager data + vps_servers = VPSServer.search( + domain, + order=sort_order, + limit=self._items_per_page, + offset=pager['offset'] + ) + + values.update({ + 'date': date_begin, + 'vps_servers': vps_servers, + 'page_name': 'vps_server', + 'pager': pager, + 'default_url': '/my/vps-servers', + 'searchbar_sortings': searchbar_sortings, + 'sortby': sortby, + }) + return request.render("ow_vm_management.portal_my_vps_servers", values) + + @http.route(['/my/vps-servers/'], type='http', auth="user", website=True) + def portal_my_vps_server(self, vps_server_id=None, access_token=None, **kw): + try: + vps_server_sudo = self._document_check_access('vps.server', vps_server_id, access_token) + except (AccessError, MissingError): + return request.redirect('/my') + + values = self._vps_server_get_page_view_values(vps_server_sudo, access_token, **kw) + return request.render("ow_vm_management.portal_vps_server_page", values) + + def _vps_server_get_page_view_values(self, vps_server, access_token, **kwargs): + values = { + 'page_name': 'vps_server', + 'vps_server': vps_server, + } + return self._get_page_view_values(vps_server, access_token, values, 'my_vps_servers_history', False, **kwargs) \ No newline at end of file diff --git a/ow_vm_management/models/__init__.py b/ow_vm_management/models/__init__.py new file mode 100644 index 0000000..f26c1bd --- /dev/null +++ b/ow_vm_management/models/__init__.py @@ -0,0 +1,2 @@ +from . import vps_server +from . import res_partner \ No newline at end of file diff --git a/ow_vm_management/models/__pycache__/__init__.cpython-39.pyc b/ow_vm_management/models/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..4675b84 Binary files /dev/null and b/ow_vm_management/models/__pycache__/__init__.cpython-39.pyc differ diff --git a/ow_vm_management/models/__pycache__/res_partner.cpython-39.pyc b/ow_vm_management/models/__pycache__/res_partner.cpython-39.pyc new file mode 100644 index 0000000..599b158 Binary files /dev/null and b/ow_vm_management/models/__pycache__/res_partner.cpython-39.pyc differ diff --git a/ow_vm_management/models/__pycache__/vps_server.cpython-39.pyc b/ow_vm_management/models/__pycache__/vps_server.cpython-39.pyc new file mode 100644 index 0000000..fa7d6b7 Binary files /dev/null and b/ow_vm_management/models/__pycache__/vps_server.cpython-39.pyc differ diff --git a/ow_vm_management/models/res_partner.py b/ow_vm_management/models/res_partner.py new file mode 100644 index 0000000..a7d090b --- /dev/null +++ b/ow_vm_management/models/res_partner.py @@ -0,0 +1,6 @@ +from odoo import models, fields + +class ResPartner(models.Model): + _inherit = 'res.partner' + + vps_server_ids = fields.One2many('vps.server', 'customer_id', string='VPS Servers') \ No newline at end of file diff --git a/ow_vm_management/models/vps_server.py b/ow_vm_management/models/vps_server.py new file mode 100644 index 0000000..ce220a4 --- /dev/null +++ b/ow_vm_management/models/vps_server.py @@ -0,0 +1,19 @@ +from odoo import models, fields, api + +class VPSServer(models.Model): + _name = 'vps.server' + _description = 'VPS Server' + _inherit = ['portal.mixin', 'mail.thread', 'mail.activity.mixin'] + + name = fields.Char(string='Server Name', required=True) + ip_address = fields.Char(string='IP Address', required=True) + cpu = fields.Integer(string='CPU Cores') + ram = fields.Float(string='RAM (GB)') + storage = fields.Float(string='Storage (GB)') + os = fields.Char(string='Operating System') + customer_id = fields.Many2one('res.partner', string='Customer', required=True) + + def _compute_access_url(self): + super()._compute_access_url() + for server in self: + server.access_url = '/my/vps-servers/%s' % server.id \ No newline at end of file diff --git a/ow_vm_management/security/ir.model.access.csv b/ow_vm_management/security/ir.model.access.csv new file mode 100644 index 0000000..f81e7c6 --- /dev/null +++ b/ow_vm_management/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_vps_server_user,vps.server.user,model_vps_server,base.group_user,1,1,1,1 +access_vps_server_portal,vps.server.portal,model_vps_server,base.group_portal,1,0,0,0 diff --git a/ow_vm_management/views/portal_templates.xml b/ow_vm_management/views/portal_templates.xml new file mode 100644 index 0000000..6e29808 --- /dev/null +++ b/ow_vm_management/views/portal_templates.xml @@ -0,0 +1,90 @@ + + + + + + + + \ No newline at end of file diff --git a/ow_vm_management/views/res_partner_views.xml b/ow_vm_management/views/res_partner_views.xml new file mode 100644 index 0000000..f38b437 --- /dev/null +++ b/ow_vm_management/views/res_partner_views.xml @@ -0,0 +1,25 @@ + + + + res.partner.form.inherit.vps + res.partner + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ow_vm_management/views/vps_server_views.xml b/ow_vm_management/views/vps_server_views.xml new file mode 100644 index 0000000..f6b02e7 --- /dev/null +++ b/ow_vm_management/views/vps_server_views.xml @@ -0,0 +1,59 @@ + + + + vps.server.form + vps.server + +
+ + + + + + + + + + + +
+
+
+ + + vps.server.tree + vps.server + + + + + + + + + + + VPS Servers + vps.server + tree,form + + + + + + + + + + +
\ No newline at end of file