From 04d1057a8a4ba4f860fe8e7aadb05144c207425c Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 4 Aug 2024 01:30:06 +0200 Subject: [PATCH] notebook --- ow_vm_management/__init__.py | 2 + ow_vm_management/__manifest__.py | 23 +++++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 202 bytes ow_vm_management/controllers/__init__.py | 1 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 180 bytes .../__pycache__/portal.cpython-39.pyc | Bin 0 -> 2866 bytes ow_vm_management/controllers/portal.py | 80 ++++++++++++++++ ow_vm_management/models/__init__.py | 2 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 213 bytes .../__pycache__/res_partner.cpython-39.pyc | Bin 0 -> 491 bytes .../__pycache__/vps_server.cpython-39.pyc | Bin 0 -> 1092 bytes ow_vm_management/models/res_partner.py | 6 ++ ow_vm_management/models/vps_server.py | 19 ++++ ow_vm_management/security/ir.model.access.csv | 3 + ow_vm_management/views/portal_templates.xml | 90 ++++++++++++++++++ ow_vm_management/views/res_partner_views.xml | 25 +++++ ow_vm_management/views/vps_server_views.xml | 59 ++++++++++++ 17 files changed, 310 insertions(+) create mode 100644 ow_vm_management/__init__.py create mode 100644 ow_vm_management/__manifest__.py create mode 100644 ow_vm_management/__pycache__/__init__.cpython-39.pyc create mode 100644 ow_vm_management/controllers/__init__.py create mode 100644 ow_vm_management/controllers/__pycache__/__init__.cpython-39.pyc create mode 100644 ow_vm_management/controllers/__pycache__/portal.cpython-39.pyc create mode 100644 ow_vm_management/controllers/portal.py create mode 100644 ow_vm_management/models/__init__.py create mode 100644 ow_vm_management/models/__pycache__/__init__.cpython-39.pyc create mode 100644 ow_vm_management/models/__pycache__/res_partner.cpython-39.pyc create mode 100644 ow_vm_management/models/__pycache__/vps_server.cpython-39.pyc create mode 100644 ow_vm_management/models/res_partner.py create mode 100644 ow_vm_management/models/vps_server.py create mode 100644 ow_vm_management/security/ir.model.access.csv create mode 100644 ow_vm_management/views/portal_templates.xml create mode 100644 ow_vm_management/views/res_partner_views.xml create mode 100644 ow_vm_management/views/vps_server_views.xml 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 0000000000000000000000000000000000000000..cdc4661b1d1a143700ee16e69215c5165130945b GIT binary patch literal 202 zcmYj~y$u2}429zyAOv?Cu)q~03n0V3jg95HduLqW|#rTJahoW9GQ0as#G8PqLet@hv^Dm NoSj|M$4obC_yHpkE`9(2 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a3ab54e284e64444f92d43cac5b482698d94f472 GIT binary patch literal 180 zcmYe~<>g`k0-p8j(nNstV-N=!FabFZKwK;UBvKes7;_kM8KW2(8B&;n88n$+G6ID) z8E>%_B8!~&$i#4juT+`JO~)QXa#MBT)cl>EG6{rvLyvfTLG z#Jt4x)ZA2{Y;t~HNl|`IPHIuHetdjpUS>&ryk0@&Ee@O9{FKt1R6CGOpMjVG01xpi AhX4Qo literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..803e75c3070c86908b0ce490d8e51e6e20b27083 GIT binary patch literal 2866 zcma)8TW=gi7OtwkPEU{RI8HU`xF4!oKfMDec=n@ef#o5a(1+$RshB9@Uvsw^Qf(Ri(XNMBw}W zKi>}j9TW0D>@0sSbl!$m{|ks9f)=Et2`yQ|DE3+5ly2gdUgFulQ}|_&1eSM;uG-E z@ke=G=i@!w>r)db`NdS$8rH46Gp%)1N_C@BIxUPhN%y3JHSFV0G8DV~`HN1y3ydTQ z6(nI_k|7mTuzO+RNO$B3N4R@Tc&Mld@4I4MbVYoR-ld6e=X-l}Y4*HW5vz7K5NqPx zJ(7f95|<<$Fl@t|dsMy8Zrse+l12{j9yI)~w}5DJmmJfEp3pfH@P9zmTbhj=!7h-i}#2nAE(M>Od-_O0T9uRO5P3-R1`+FViu^ zu#_;HRb#EHq5v_2R;kU&p;`llI_R+w2%#|z=?ipr^$AyR{)SbjtAp}z0KU1}`lg;e z_t?MyGik7ukM-Y>+g2Djbsos4Xrw-zNaLncy>Eisa<|U4{EoupPKE(}@T~xYW%dEI z`oBOLa!gLh+}CsjfxATJfndVH9)uOL4}&@nwJ+SeHp`9}@B#3l@Q;}29I<()aqAC- zH+LK0E)fxdl&E3qPUAoeFK z8#3yMwfo*YZh}$NgiVAaO)SoV^!5Ahyw~{0UD(qT=V5dO&lMX-!3m{A)8klNX#5jQ zz>7Nykc6ln5;WboJ821S8Uux5^@?;?LXB2RNHvT8apUrJArzFkiSh}DBtX8;)bqIi z3X&I5NHRemX~8;{2CH?_pt97XQ~Pl0^zCJ ztBt2C1PK=d3VEvK#Q4>4SWDe^+OxbOFLSM4#dEQA7RA&LjEmw;_u*J=Iw*&uaSBs0 z=?Xbar-kNt>Uvu&yQ$)+4!~EfUV&A!E03r7=Az!pL%t-v-!sqtlE8}SgV zb0E@YrP@I50uqE1wGPC@i;bwLGOHZ2w5&OlJhv|JTOEx*omlI91?~g*Tu~QM!~jVj z$;(Jkd&6$sR!J^_-J+V{T$vM z>hOJdYFs$eTYaxBB9x@w17iGJw-JTT@`HL87FZ?iod#yJpL}=r+LI>#UXc2(`V+|7 z+1cqcXpsrIMJUcq#CchXX(54+Isams7KmM(+Z)y1Z^lyqFj8Rz6c(XX%=8u)cP5Jh zmOrfHOSlA!S>Y`gK(lcRS?q7n_|lR< z({$_u1cU@@fd{1$Hh3S4sD?yBkoI0W7|@Pw?!3Jcb%v}A>~ X$3jxL)p}?fukspgg5-l21~m3F=^+zu literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4675b84ba9757cdbd53ad43e9fdb90b803588e80 GIT binary patch literal 213 zcmYjKF%H5o3`|mxP-%a_2Rc9`BsPS20Sj9fD^d)q)TEUY3OtDg{?nC-FEHV3oaFPJ zZJkY7=7LeYo~JeUcQXG_Z1!AX!DNM%t#GoIGHJzH)rxg?6xHM-`J|F#KJ)pgHhZJ4NADl%p`2YX_ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..599b15802331b788aac3743ec894f9b7cb34372f GIT binary patch literal 491 zcmYjNy-veG48F@BQQ9INp%YRDT8W7Pp>9kRL?wn>PEqZaRJo+wrG<8d74aM_h>3@} zm5Eni!k1K{mh7|dv;Eo5dcA~^ynTMmzUcjS!M+3(j7ZHf8DPK*rnunB6CP)m3_S2( z82HE+{*wxiJumb)NXFU`Q9UZb|1>B`iVLM?OHcJ6K_{Ye9ul-tPE zIxpvA>J>{_W(uXWiIgZSbJ+=rwo)@eukjX#CxH^BtK{*nr_h5O2LB9*MUxhfULYbugU@c_L&To>XeA z))<#ZtM$mOdsQhl&&GLrnih38=V><9hf;8;w;RF}ot~t6`Nv}AIojvBco8|KrL;_o zxe25=UZhe$9X>r6?EpxjRNdJB4U4wyWdD&3LtVuwpdR+X z8PEakt^3evZ1$s;@k%I5Y3tuaF6~b@{+|7 + + + + + + + \ 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