From 7761c855d2dce1806d93c559fbe83972b1a4188c Mon Sep 17 00:00:00 2001
From: AjmalCybro
Date: Sat, 29 Oct 2022 18:27:35 +0530
Subject: [PATCH] Oct 29 [ADD] Initial Commit 'mobile_service_shop'
---
mobile_service_shop/README.rst | 35 +
mobile_service_shop/__init__.py | 24 +
mobile_service_shop/__manifest__.py | 56 ++
.../data/mobile_service_data.xml | 23 +
.../data/mobile_service_email_template.xml | 24 +
mobile_service_shop/doc/RELEASE_NOTES.md | 8 +
mobile_service_shop/models/__init__.py | 25 +
mobile_service_shop/models/mobile_service.py | 405 +++++++++++
mobile_service_shop/models/product.py | 36 +
.../models/product_order_line.py | 92 +++
mobile_service_shop/models/service_ticket.py | 46 ++
.../reports/mobile_service_ticket.xml | 12 +
.../reports/service_ticket_template.xml | 78 +++
.../security/ir.model.access.csv | 15 +
mobile_service_shop/security/security.xml | 36 +
.../static/description/assets/icons/check.png | Bin 0 -> 3676 bytes
.../description/assets/icons/chevron.png | Bin 0 -> 310 bytes
.../static/description/assets/icons/cogs.png | Bin 0 -> 1377 bytes
.../description/assets/icons/consultation.png | Bin 0 -> 1458 bytes
.../description/assets/icons/ecom-black.png | Bin 0 -> 576 bytes
.../assets/icons/education-black.png | Bin 0 -> 733 bytes
.../description/assets/icons/hotel-black.png | Bin 0 -> 911 bytes
.../description/assets/icons/license.png | Bin 0 -> 1095 bytes
.../description/assets/icons/lifebuoy.png | Bin 0 -> 1199 bytes
.../assets/icons/manufacturing-black.png | Bin 0 -> 673 bytes
.../description/assets/icons/pos-black.png | Bin 0 -> 878 bytes
.../description/assets/icons/puzzle.png | Bin 0 -> 653 bytes
.../assets/icons/restaurant-black.png | Bin 0 -> 905 bytes
.../assets/icons/service-black.png | Bin 0 -> 839 bytes
.../assets/icons/trading-black.png | Bin 0 -> 427 bytes
.../description/assets/icons/training.png | Bin 0 -> 627 bytes
.../description/assets/icons/update.png | Bin 0 -> 1225 bytes
.../static/description/assets/icons/user.png | Bin 0 -> 988 bytes
.../description/assets/icons/wrench.png | Bin 0 -> 1205 bytes
.../description/assets/misc/categories.png | Bin 0 -> 1532 bytes
.../description/assets/misc/check-box.png | Bin 0 -> 1118 bytes
.../description/assets/misc/compass.png | Bin 0 -> 1931 bytes
.../description/assets/misc/corporate.png | Bin 0 -> 1177 bytes
.../assets/misc/customer-support.png | Bin 0 -> 2136 bytes
.../description/assets/misc/cybrosys-logo.png | Bin 0 -> 4496 bytes
.../description/assets/misc/features.png | Bin 0 -> 589 bytes
.../static/description/assets/misc/logo.png | Bin 0 -> 3452 bytes
.../description/assets/misc/pictures.png | Bin 0 -> 1692 bytes
.../description/assets/misc/pie-chart.png | Bin 0 -> 2338 bytes
.../description/assets/misc/right-arrow.png | Bin 0 -> 967 bytes
.../static/description/assets/misc/star.png | Bin 0 -> 1642 bytes
.../description/assets/misc/support.png | Bin 0 -> 3892 bytes
.../description/assets/misc/whatsapp.png | Bin 0 -> 5097 bytes
.../static/description/assets/modules/1.png | Bin 0 -> 61003 bytes
.../static/description/assets/modules/2.png | Bin 0 -> 57860 bytes
.../static/description/assets/modules/3.png | Bin 0 -> 57356 bytes
.../static/description/assets/modules/4.png | Bin 0 -> 60233 bytes
.../static/description/assets/modules/5.gif | Bin 0 -> 1859948 bytes
.../static/description/assets/modules/6.png | Bin 0 -> 58088 bytes
.../description/assets/screenshots/1.png | Bin 0 -> 66976 bytes
.../description/assets/screenshots/10.png | Bin 0 -> 43954 bytes
.../description/assets/screenshots/11.png | Bin 0 -> 38798 bytes
.../description/assets/screenshots/12.png | Bin 0 -> 44351 bytes
.../description/assets/screenshots/2.png | Bin 0 -> 100477 bytes
.../description/assets/screenshots/3.png | Bin 0 -> 49383 bytes
.../description/assets/screenshots/4.png | Bin 0 -> 98858 bytes
.../description/assets/screenshots/5.png | Bin 0 -> 97643 bytes
.../description/assets/screenshots/6.png | Bin 0 -> 94215 bytes
.../description/assets/screenshots/7.png | Bin 0 -> 30962 bytes
.../description/assets/screenshots/8.png | Bin 0 -> 48644 bytes
.../description/assets/screenshots/9.png | Bin 0 -> 46213 bytes
.../description/assets/screenshots/hero.gif | Bin 0 -> 299353 bytes
.../static/description/banner.png | Bin 0 -> 83298 bytes
.../static/description/icon.png | Bin 0 -> 12034 bytes
.../static/description/index.html | 663 ++++++++++++++++++
.../static/src/css/mobile_service.css | 6 +
mobile_service_shop/views/brand.xml | 45 ++
mobile_service_shop/views/brand_models.xml | 82 +++
.../views/complaint_template.xml | 45 ++
mobile_service_shop/views/complaint_type.xml | 47 ++
.../views/mobile_service_views.xml | 298 ++++++++
.../views/product_template.xml | 83 +++
.../views/terms_and_condition.xml | 44 ++
mobile_service_shop/wizard/__init__.py | 23 +
.../wizard/mobile_create_invoice.py | 159 +++++
.../wizard/mobile_create_invoice_views.xml | 37 +
81 files changed, 2447 insertions(+)
create mode 100644 mobile_service_shop/README.rst
create mode 100644 mobile_service_shop/__init__.py
create mode 100644 mobile_service_shop/__manifest__.py
create mode 100644 mobile_service_shop/data/mobile_service_data.xml
create mode 100644 mobile_service_shop/data/mobile_service_email_template.xml
create mode 100755 mobile_service_shop/doc/RELEASE_NOTES.md
create mode 100644 mobile_service_shop/models/__init__.py
create mode 100644 mobile_service_shop/models/mobile_service.py
create mode 100644 mobile_service_shop/models/product.py
create mode 100644 mobile_service_shop/models/product_order_line.py
create mode 100755 mobile_service_shop/models/service_ticket.py
create mode 100644 mobile_service_shop/reports/mobile_service_ticket.xml
create mode 100644 mobile_service_shop/reports/service_ticket_template.xml
create mode 100644 mobile_service_shop/security/ir.model.access.csv
create mode 100644 mobile_service_shop/security/security.xml
create mode 100644 mobile_service_shop/static/description/assets/icons/check.png
create mode 100644 mobile_service_shop/static/description/assets/icons/chevron.png
create mode 100644 mobile_service_shop/static/description/assets/icons/cogs.png
create mode 100644 mobile_service_shop/static/description/assets/icons/consultation.png
create mode 100644 mobile_service_shop/static/description/assets/icons/ecom-black.png
create mode 100644 mobile_service_shop/static/description/assets/icons/education-black.png
create mode 100644 mobile_service_shop/static/description/assets/icons/hotel-black.png
create mode 100644 mobile_service_shop/static/description/assets/icons/license.png
create mode 100644 mobile_service_shop/static/description/assets/icons/lifebuoy.png
create mode 100644 mobile_service_shop/static/description/assets/icons/manufacturing-black.png
create mode 100644 mobile_service_shop/static/description/assets/icons/pos-black.png
create mode 100644 mobile_service_shop/static/description/assets/icons/puzzle.png
create mode 100644 mobile_service_shop/static/description/assets/icons/restaurant-black.png
create mode 100644 mobile_service_shop/static/description/assets/icons/service-black.png
create mode 100644 mobile_service_shop/static/description/assets/icons/trading-black.png
create mode 100644 mobile_service_shop/static/description/assets/icons/training.png
create mode 100644 mobile_service_shop/static/description/assets/icons/update.png
create mode 100644 mobile_service_shop/static/description/assets/icons/user.png
create mode 100644 mobile_service_shop/static/description/assets/icons/wrench.png
create mode 100644 mobile_service_shop/static/description/assets/misc/categories.png
create mode 100644 mobile_service_shop/static/description/assets/misc/check-box.png
create mode 100644 mobile_service_shop/static/description/assets/misc/compass.png
create mode 100644 mobile_service_shop/static/description/assets/misc/corporate.png
create mode 100644 mobile_service_shop/static/description/assets/misc/customer-support.png
create mode 100644 mobile_service_shop/static/description/assets/misc/cybrosys-logo.png
create mode 100644 mobile_service_shop/static/description/assets/misc/features.png
create mode 100644 mobile_service_shop/static/description/assets/misc/logo.png
create mode 100644 mobile_service_shop/static/description/assets/misc/pictures.png
create mode 100644 mobile_service_shop/static/description/assets/misc/pie-chart.png
create mode 100644 mobile_service_shop/static/description/assets/misc/right-arrow.png
create mode 100644 mobile_service_shop/static/description/assets/misc/star.png
create mode 100644 mobile_service_shop/static/description/assets/misc/support.png
create mode 100644 mobile_service_shop/static/description/assets/misc/whatsapp.png
create mode 100644 mobile_service_shop/static/description/assets/modules/1.png
create mode 100644 mobile_service_shop/static/description/assets/modules/2.png
create mode 100644 mobile_service_shop/static/description/assets/modules/3.png
create mode 100644 mobile_service_shop/static/description/assets/modules/4.png
create mode 100644 mobile_service_shop/static/description/assets/modules/5.gif
create mode 100644 mobile_service_shop/static/description/assets/modules/6.png
create mode 100644 mobile_service_shop/static/description/assets/screenshots/1.png
create mode 100644 mobile_service_shop/static/description/assets/screenshots/10.png
create mode 100644 mobile_service_shop/static/description/assets/screenshots/11.png
create mode 100644 mobile_service_shop/static/description/assets/screenshots/12.png
create mode 100644 mobile_service_shop/static/description/assets/screenshots/2.png
create mode 100644 mobile_service_shop/static/description/assets/screenshots/3.png
create mode 100644 mobile_service_shop/static/description/assets/screenshots/4.png
create mode 100644 mobile_service_shop/static/description/assets/screenshots/5.png
create mode 100644 mobile_service_shop/static/description/assets/screenshots/6.png
create mode 100644 mobile_service_shop/static/description/assets/screenshots/7.png
create mode 100644 mobile_service_shop/static/description/assets/screenshots/8.png
create mode 100644 mobile_service_shop/static/description/assets/screenshots/9.png
create mode 100644 mobile_service_shop/static/description/assets/screenshots/hero.gif
create mode 100644 mobile_service_shop/static/description/banner.png
create mode 100644 mobile_service_shop/static/description/icon.png
create mode 100644 mobile_service_shop/static/description/index.html
create mode 100644 mobile_service_shop/static/src/css/mobile_service.css
create mode 100644 mobile_service_shop/views/brand.xml
create mode 100644 mobile_service_shop/views/brand_models.xml
create mode 100644 mobile_service_shop/views/complaint_template.xml
create mode 100644 mobile_service_shop/views/complaint_type.xml
create mode 100644 mobile_service_shop/views/mobile_service_views.xml
create mode 100644 mobile_service_shop/views/product_template.xml
create mode 100644 mobile_service_shop/views/terms_and_condition.xml
create mode 100644 mobile_service_shop/wizard/__init__.py
create mode 100644 mobile_service_shop/wizard/mobile_create_invoice.py
create mode 100644 mobile_service_shop/wizard/mobile_create_invoice_views.xml
diff --git a/mobile_service_shop/README.rst b/mobile_service_shop/README.rst
new file mode 100644
index 000000000..e4a34d408
--- /dev/null
+++ b/mobile_service_shop/README.rst
@@ -0,0 +1,35 @@
+Mobile Service Management
+=========================
+Module for mobile service shop daily activities
+
+Configuration
+=============
+* No additional configurations needed
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+Credits
+-------
+* Developers: Milind Mohan @ Cybrosys, odoo@cybrosys.com
+ Mohammed Shahil M P @cybrosys, odoo@cybrosys.com
+ Neenu Merlin Jose @cybrosys, odoo@cybrosys.com
+
+Bug Tracker
+-----------
+Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
+
+Maintainer
+==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit `Our Website `__
+
+Further information
+===================
+HTML Description: ``__
+
diff --git a/mobile_service_shop/__init__.py b/mobile_service_shop/__init__.py
new file mode 100644
index 000000000..52d4e9e57
--- /dev/null
+++ b/mobile_service_shop/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2019-TODAY Cybrosys Technologies().
+# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com)
+# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com)
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+
+from . import models
+from . import wizard
diff --git a/mobile_service_shop/__manifest__.py b/mobile_service_shop/__manifest__.py
new file mode 100644
index 000000000..fcbbac999
--- /dev/null
+++ b/mobile_service_shop/__manifest__.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2019-TODAY Cybrosys Technologies().
+# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com)
+# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com)
+# Noorjahan @ Cybrosys, (odoo@cybrosys.com)
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+{
+ 'name': 'Mobile Service Management',
+ 'version': '16.0.1.0.0',
+ 'summary': 'Module for managing mobile service shop daily activities.',
+ 'category': 'Industries',
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'depends': ['base', 'stock_account', 'mail', 'product', 'account'],
+ 'data': ['security/security.xml',
+ 'security/ir.model.access.csv',
+ 'views/mobile_service_views.xml',
+ 'views/product_template.xml',
+ 'views/terms_and_condition.xml',
+ 'views/complaint_template.xml',
+ 'views/complaint_type.xml',
+ 'views/brand_models.xml',
+ 'views/brand.xml',
+ 'wizard/mobile_create_invoice_views.xml',
+ 'reports/mobile_service_ticket.xml',
+ 'reports/service_ticket_template.xml',
+ 'data/mobile_service_data.xml',
+ 'data/mobile_service_email_template.xml'],
+ 'images': ['static/description/banner.png'],
+ 'assets': {
+ 'web.assets_backend': [
+ 'mobile_service_shop/static/src/css/mobile_service.css',
+ ],
+ },
+ 'installable': True,
+ 'application': True,
+ 'auto_install': False,
+ 'license': 'LGPL-3',
+}
\ No newline at end of file
diff --git a/mobile_service_shop/data/mobile_service_data.xml b/mobile_service_shop/data/mobile_service_data.xml
new file mode 100644
index 000000000..f4b1fa2b5
--- /dev/null
+++ b/mobile_service_shop/data/mobile_service_data.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+ Mobile Service
+ sale
+ SERV
+ TRUE
+
+
+ Mobile Service Charge
+ service
+
+
+
+ Mobile Service Advance
+ service
+
+
+
+
+
\ No newline at end of file
diff --git a/mobile_service_shop/data/mobile_service_email_template.xml b/mobile_service_shop/data/mobile_service_email_template.xml
new file mode 100644
index 000000000..99e7894a4
--- /dev/null
+++ b/mobile_service_shop/data/mobile_service_email_template.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+ Service Status Email
+
+ ${(object.user_id.email |safe}
+ ${object.person_name.email |safe}
+ Ref ${object.name or 'n/a' }
+
+ ${object.person_name.lang}
+ Dear ${object.person_name.name},
+ Your service request for ${object.brand_name.brand_name or 'n/a' } (${object.model_name.mobile_brand_models or 'n/a' }) with reference no ${object.name or 'n/a' } has been processed to ${object.service_state or 'n/a' } stage.
+ If you have any questions, please let us know.
+ Best regards,
]]>
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mobile_service_shop/doc/RELEASE_NOTES.md b/mobile_service_shop/doc/RELEASE_NOTES.md
new file mode 100755
index 000000000..a38b3facc
--- /dev/null
+++ b/mobile_service_shop/doc/RELEASE_NOTES.md
@@ -0,0 +1,8 @@
+## Module
+
+#### 05.10.2020
+#### Version 16.0.1.0.0
+#### ADD
+
+Initial Commit.
+
diff --git a/mobile_service_shop/models/__init__.py b/mobile_service_shop/models/__init__.py
new file mode 100644
index 000000000..be71dbc02
--- /dev/null
+++ b/mobile_service_shop/models/__init__.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2019-TODAY Cybrosys Technologies().
+# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com)
+# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com)
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from . import mobile_service
+from . import service_ticket
+from . import product_order_line
+from . import product
\ No newline at end of file
diff --git a/mobile_service_shop/models/mobile_service.py b/mobile_service_shop/models/mobile_service.py
new file mode 100644
index 000000000..3d149a3a7
--- /dev/null
+++ b/mobile_service_shop/models/mobile_service.py
@@ -0,0 +1,405 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2019-TODAY Cybrosys Technologies().
+# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com)
+# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com)
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+#############################################################################
+from datetime import datetime, date, timedelta
+from odoo import models, fields, api, _
+from odoo.exceptions import Warning, UserError
+import pytz
+
+
+class MobileServiceShop(models.Model):
+ _name = 'mobile.service'
+ _rec_name = 'name'
+ _inherit = ['mail.thread', 'mail.activity.mixin']
+
+ name = fields.Char(string='Service Number', copy=False, default="New")
+ person_name = fields.Many2one('res.partner', string="Customer Name", required=True)
+ contact_no = fields.Char(related='person_name.mobile', string="Contact Number")
+ email_id = fields.Char(related='person_name.email', string="Email")
+
+ street = fields.Char(related='person_name.street', string="Address")
+ street2 = fields.Char(related='person_name.street2', string="Address")
+ city = fields.Char(related='person_name.city', string="Address")
+ state_id = fields.Many2one(related='person_name.state_id', string="Address")
+ zip = fields.Char(related='person_name.zip', string="Address")
+ country_id = fields.Many2one(related='person_name.country_id', string="Address")
+
+ brand_name = fields.Many2one('mobile.brand', string="Mobile Brand")
+ is_in_warranty = fields.Boolean(
+ 'In Warranty', default=False,
+ help="Specify if the product is in warranty.")
+
+ warranty_number = fields.Char(string="Warranty No ", help="warranty details")
+
+ re_repair = fields.Boolean(
+ 'Re-repair', default=False,
+ help="Re-repairing.")
+
+ imei_no = fields.Char(string="IMEI Number")
+
+ model_name = fields.Many2one('brand.model', string="Model", domain="[('mobile_brand_name','=',brand_name)]")
+ image_medium = fields.Binary(related='model_name.image_medium', store=True, attachment=True)
+ date_request = fields.Date(string="Requested date", default=fields.Date.context_today)
+ return_date = fields.Date(string="Return date", required=True)
+ technician_name = fields.Many2one('res.users', string="Technician Name",
+ default=lambda self: self.env.user, required=True)
+ service_state = fields.Selection([('draft', 'Draft'), ('assigned', 'Assigned'),
+ ('completed', 'Completed'), ('returned', 'Returned'),
+ ('not_solved', 'Not solved')],
+ string='Service Status', default='draft', track_visibility='always')
+
+ complaints_tree = fields.One2many('mobile.complaint.tree', 'complaint_id', string='Complaints Tree')
+
+ product_order_line = fields.One2many('product.order.line', 'product_order_id', string='Parts Order Lines')
+
+ internal_notes = fields.Text(string="Internal notes")
+ invoice_count = fields.Integer(compute='_invoice_count', string='# Invoice', copy=False)
+ invoice_ids = fields.Many2many("account.move", string='Invoices', compute="_get_invoiced", readonly=True,
+ copy=False)
+
+ first_payment_inv = fields.Many2one('account.move', copy=False)
+
+ first_invoice_created = fields.Boolean(string="First Invoice Created", invisible=True, copy=False)
+
+ journal_type = fields.Many2one('account.journal', 'Journal', invisible=True,
+ default=lambda self: self.env['account.journal'].search([('code', '=', 'SERV')]))
+
+ company_id = fields.Many2one('res.company', 'Company',
+ default=lambda self: self.env['res.company']._company_default_get('mobile.service'))
+
+ @api.model
+ def _default_picking_transfer(self):
+ type_obj = self.env['stock.picking.type']
+ company_id = self.env.context.get('company_id') or self.env.user.company_id.id
+ types = type_obj.search([('code', '=', 'outgoing'), ('warehouse_id.company_id', '=', company_id)], limit=1)
+ if not types:
+ types = type_obj.search([('code', '=', 'outgoing'), ('warehouse_id', '=', False)])
+ return types[:4]
+
+ stock_picking_id = fields.Many2one('stock.picking', string="Picking Id")
+
+ picking_transfer_id = fields.Many2one('stock.picking.type', 'Deliver To', required=True,
+ default=_default_picking_transfer,
+ help="This will determine picking type of outgoing shipment")
+
+ picking_count = fields.Integer()
+
+ @api.onchange('return_date')
+ def check_date(self):
+ if self.return_date != False:
+ return_date_string = datetime.strptime(str(self.return_date), "%Y-%m-%d")
+ request_date_string = datetime.strptime(str(self.date_request), "%Y-%m-%d")
+ if return_date_string < request_date_string:
+ raise UserError("Return date should be greater than requested date")
+
+ def approve(self):
+ self.service_state = 'assigned'
+
+ def complete(self):
+ self.service_state = 'completed'
+
+ def return_to(self):
+ self.service_state = 'returned'
+
+ def not_solved(self):
+ self.service_state = 'not_solved'
+
+ def action_send_mail(self):
+ '''
+ This function opens a window to compose an email, with the edi sale template message loaded by default
+ '''
+ self.ensure_one()
+ ir_model_data = self.env['ir.model.data']
+ try:
+ template_id = ir_model_data._xmlid_lookup('mobile_service_shop.email_template_mobile_service')[2]
+ except ValueError:
+ template_id = False
+ try:
+ compose_form_id = ir_model_data._xmlid_lookup('mail.email_compose_message_wizard_form')[2]
+ except ValueError:
+ compose_form_id = False
+ ctx = {
+ 'default_model': 'mobile.service',
+ 'default_res_id': self.ids[0],
+ 'default_use_template': bool(template_id),
+ 'default_template_id': template_id,
+ 'default_composition_mode': 'comment',
+ }
+ return {
+ 'name': _('Compose Email'),
+ 'type': 'ir.actions.act_window',
+ 'view_mode': 'form',
+ 'res_model': 'mail.compose.message',
+ 'views': [(compose_form_id, 'form')],
+ 'view_id': compose_form_id,
+ 'target': 'new',
+ 'context': ctx,
+ }
+
+ def return_advance(self):
+ inv_obj = self.env['account.move'].search([('invoice_origin', '=', self.name)])
+ inv_ids = []
+ for each in inv_obj:
+ inv_ids.append(each.id)
+ view_id = self.env.ref('account.view_move_form').id
+
+
+ if inv_ids:
+ if len(inv_ids) <= 1:
+ value = {
+ 'view_mode': 'form',
+ 'res_model': 'account.move',
+ 'view_id': view_id,
+ 'type': 'ir.actions.act_window',
+ 'name': 'Invoice',
+ 'res_id': inv_ids[0]
+ }
+ else:
+ value = {
+ 'domain': str([('id', 'in', inv_ids)]),
+ 'view_mode': 'tree,form',
+ 'res_model': 'account.move',
+ 'view_id': False,
+ 'type': 'ir.actions.act_window',
+ 'name': 'Invoice',
+ 'res_id': inv_ids[0]
+ }
+
+ return value
+ else:
+ raise UserError("No invoice created")
+
+ def _invoice_count(self):
+ invoice_ids = self.env['account.move'].search([('invoice_origin', '=', self.name)])
+ self.invoice_count = len(invoice_ids)
+
+ @api.model
+ def create(self, vals):
+ print(self.env.user.company_id)
+ if 'company_id' in vals:
+ vals['name'] = self.env['ir.sequence'].with_context(force_company=self.env.user.company_id.id).next_by_code(
+ 'mobile.service') or _('New')
+ else:
+ vals['name'] = self.env['ir.sequence'].next_by_code('mobile.service') or _('New')
+ vals['service_state'] = 'draft'
+ return super(MobileServiceShop, self).create(vals)
+
+ def unlink(self):
+ for i in self:
+ if i.service_state != 'draft':
+ raise UserError(_('You cannot delete an assigned service request'))
+ return super(MobileServiceShop, self).unlink()
+
+ def action_invoice_create_wizard(self):
+
+ return {
+ 'name': _('Create Invoice'),
+ 'view_mode': 'form',
+ 'res_model': 'mobile.invoice',
+ 'type': 'ir.actions.act_window',
+ 'target': 'new'
+ }
+
+ def action_post_stock(self):
+ flag = 0
+ for order in self.product_order_line:
+ if order.product_uom_qty > order.qty_stock_move:
+ flag = 1
+ pick = {
+ 'picking_type_id': self.picking_transfer_id.id,
+ 'partner_id': self.person_name.id,
+ 'origin': self.name,
+ 'location_dest_id': self.person_name.property_stock_customer.id,
+ 'location_id': self.picking_transfer_id.default_location_src_id.id,
+
+ }
+
+ picking = self.env['stock.picking'].create(pick)
+ self.stock_picking_id = picking.id
+ self.picking_count = len(picking)
+ moves = order.filtered(
+ lambda r: r.product_id.type in ['product', 'consu'])._create_stock_moves_transfer(picking)
+ move_ids = moves._action_confirm()
+ move_ids._action_assign()
+ if order.product_uom_qty < order.qty_stock_move:
+ raise UserError(_('Used quantity is less than quantity stock move posted. '))
+ if flag != 1:
+ raise UserError(_('Nothing to post stock move'))
+ if flag != 1:
+ raise UserError(_('Nothing to post stock move'))
+
+ def action_view_invoice(self):
+ self.ensure_one()
+ ctx = dict(
+ create=False,
+ )
+ action = {
+ 'name': _("Invoices"),
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'account.move',
+ 'target': 'current',
+ 'context': ctx
+ }
+ invoice_ids = self.env['account.move'].search([('invoice_origin', '=', self.name)])
+ inv_ids = []
+ for each in invoice_ids:
+ inv_ids.append(each.id)
+ if len(invoice_ids) == 1:
+ invoice = inv_ids and inv_ids[0]
+ action['res_id'] = invoice
+ action['view_mode'] = 'form'
+ action['views'] = [
+ (self.env.ref('account.view_move_form').id, 'form')]
+ else:
+
+ action['view_mode'] = 'tree,form'
+ action['domain'] = [('id', 'in', inv_ids)]
+ return action
+ # inv_obj = self.env['account.move'].search([('invoice_origin', '=', self.name)])
+ # inv_ids = []
+ # for each in inv_obj:
+ # inv_ids.append(each.id)
+ # view_id = self.env.ref('account.view_move_form').id
+ # ctx = dict(
+ # create=False,
+ # )
+ # if inv_ids:
+ # if len(inv_ids) <= 1:
+ # value = {
+ # 'view_mode': 'form',
+ # 'res_model': 'account.move',
+ # 'view_id': view_id,
+ # 'type': 'ir.actions.act_window',
+ # 'name': 'Invoice',
+ # 'context': ctx,
+ # 'res_id': inv_ids and inv_ids[0]
+ # }
+ # else:
+ # value = {
+ # 'domain': str([('id', 'in', inv_ids)]),
+ # 'view_mode': 'tree,form',
+ # 'res_model': 'account.move',
+ # 'view_id': False,
+ # 'type': 'ir.actions.act_window',
+ # 'context': ctx,
+ # 'name': 'Invoice',
+ # 'res_id': inv_ids
+ # }
+ #
+ # return value
+
+ def get_ticket(self):
+ self.ensure_one()
+ user = self.env['res.users'].browse(self.env.uid)
+ if user.tz:
+ tz = pytz.timezone(user.tz)
+ time = pytz.utc.localize(datetime.now()).astimezone(tz)
+ date_today = time.strftime("%Y-%m-%d %H:%M %p")
+ else:
+ date_today = datetime.strftime(datetime.now(), "%Y-%m-%d %I:%M:%S %p")
+ complaint_text = ""
+ description_text = ""
+ complaint_id = self.env['mobile.complaint.tree'].search([('complaint_id', '=', self.id)])
+ if complaint_id:
+ for obj in complaint_id:
+ complaint = obj.complaint_type_tree
+ description = obj.description_tree
+ complaint_text = complaint.complaint_type + ", " + complaint_text
+ if description.description:
+ description_text = description.description + ", " + description_text
+ else:
+ for obj in complaint_id:
+ complaint = obj.complaint_type_tree
+ complaint_text = complaint.complaint_type + ", " + complaint_text
+ data = {
+ 'ids': self.ids,
+ 'model': self._name,
+ 'date_today': date_today,
+ 'date_request': self.date_request,
+ 'date_return': self.return_date,
+ 'sev_id': self.name,
+ 'warranty': self.is_in_warranty,
+ 'customer_name': self.person_name.name,
+ 'imei_no': self.imei_no,
+ 'technician': self.technician_name.name,
+ 'complaint_types': complaint_text,
+ 'complaint_description': description_text,
+ 'mobile_brand': self.brand_name.brand_name,
+ 'model_name': self.model_name.mobile_brand_models,
+
+ }
+ return self.env.ref('mobile_service_shop.mobile_service_ticket').report_action(self, data=data)
+
+
+class MobileBrand(models.Model):
+ _name = 'mobile.brand'
+ _rec_name = 'brand_name'
+
+ brand_name = fields.Char(string="Mobile Brand", required=True)
+
+
+class MobileComplaintType(models.Model):
+ _name = 'mobile.complaint'
+ _rec_name = 'complaint_type'
+
+ complaint_type = fields.Char(string="Complaint Type", required=True)
+
+
+class MobileComplaintTypeTemplate(models.Model):
+ _name = 'mobile.complaint.description'
+ _rec_name = 'description'
+
+ complaint_type_template = fields.Many2one('mobile.complaint', string="Complaint Type Template", required=True)
+ description = fields.Text(string="Complaint Description")
+
+
+class MobileComplaintTree(models.Model):
+ _name = 'mobile.complaint.tree'
+ _rec_name = 'complaint_type_tree'
+
+ complaint_id = fields.Many2one('mobile.service')
+
+ complaint_type_tree = fields.Many2one('mobile.complaint', string="Category", required=True)
+ description_tree = fields.Many2one('mobile.complaint.description', string="Description",
+ domain="[('complaint_type_template','=',complaint_type_tree)]")
+
+
+class MobileBrandModels(models.Model):
+ _name = 'brand.model'
+ _rec_name = 'mobile_brand_models'
+
+ mobile_brand_name = fields.Many2one('mobile.brand', string="Mobile Brand", required=True)
+ mobile_brand_models = fields.Char(string="Model Name", required=True)
+ image_medium = fields.Binary(string='image', store=True, attachment=True)
+
+
+class MobileServiceTermsAndConditions(models.Model):
+ _name = 'terms.conditions'
+ _rec_name = 'terms_id'
+
+ terms_id = fields.Char(String="Terms and condition", compute="_find_id")
+ terms_conditions = fields.Text(string="Terms and Conditions")
+
+ def _find_id(self):
+ self.terms_id = self.id or ''
+
+
diff --git a/mobile_service_shop/models/product.py b/mobile_service_shop/models/product.py
new file mode 100644
index 000000000..ca57029fe
--- /dev/null
+++ b/mobile_service_shop/models/product.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2019-TODAY Cybrosys Technologies().
+# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com)
+# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com)
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import models, fields, api, _
+
+
+class ProductProduct(models.Model):
+ _inherit = 'product.template'
+
+ is_a_parts = fields.Boolean(
+ 'Is a Mobile Part', default=False,
+ help="Specify if the product is a mobile part or not.")
+
+ brand_name = fields.Many2one('mobile.brand', String="Brand", help="Select a mobile brand for the part")
+ model_name = fields.Many2one('brand.model', String="Model Name", domain="[('mobile_brand_name','=',brand_name)]",
+ help="Select a model for the part")
+ model_colour = fields.Char(string="Colour", help="colour for the part")
+ extra_descriptions = fields.Text(string="Note")
\ No newline at end of file
diff --git a/mobile_service_shop/models/product_order_line.py b/mobile_service_shop/models/product_order_line.py
new file mode 100644
index 000000000..7cbd74592
--- /dev/null
+++ b/mobile_service_shop/models/product_order_line.py
@@ -0,0 +1,92 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2019-TODAY Cybrosys Technologies().
+# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com)
+# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com)
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import models, fields, api, _
+
+
+class ProductOrderLine(models.Model):
+
+ _name = 'product.order.line'
+
+ product_order_id = fields.Many2one('mobile.service')
+
+ product_id = fields.Many2one('product.product', string='Product',
+ domain="[('is_a_parts','=', True)]", required=True)
+ product_uom_qty = fields.Float(string='Used Quantity', default=1.0, required=True)
+ price_unit = fields.Float(string='Unit Price', default=0.0, required=True)
+ qty_invoiced = fields.Float(string='Invoiced qty', readonly=True)
+ qty_stock_move = fields.Float(string='Stock Move Posted Qty', readonly=True)
+ part_price = fields.Char(compute='_compute_amount', string='Price', readonly=True, store=True)
+ product_uom = fields.Char(string='Unit of Measure', required=True)
+
+ @api.onchange('product_id')
+ def change_prod(self):
+ self.ensure_one()
+ if self.product_id:
+ product_template_obj = self.product_id.product_tmpl_id
+ self.price_unit = product_template_obj.list_price
+ self.product_uom = product_template_obj.uom_id.name
+
+ @api.depends('product_uom_qty', 'product_id')
+ def _compute_amount(self):
+ """
+ Compute the amount
+ """
+ for line in self:
+ price = line.price_unit * line.product_uom_qty
+
+ line.update({
+ 'part_price': price,
+ })
+
+ def _create_stock_moves_transfer(self, picking):
+ moves = self.env['stock.move']
+ done = self.env['stock.move'].browse()
+ if self.product_id.product_tmpl_id.type != 'service':
+ price_unit = self.price_unit
+ template = {
+ 'name': self.product_id.product_tmpl_id.name or '',
+ 'product_id': self.product_id.id,
+ 'product_uom': self.product_id.product_tmpl_id.uom_id.id,
+ 'location_id': picking.picking_type_id.default_location_src_id.id,
+ 'location_dest_id': self.product_order_id.person_name.property_stock_customer.id,
+ 'picking_id': picking.id,
+ 'move_dest_ids': False,
+ 'state': 'draft',
+ 'company_id': self.product_order_id.company_id.id,
+ 'price_unit': price_unit,
+ 'picking_type_id': picking.picking_type_id.id,
+ 'route_ids': 1 and [
+ (6, 0, [x.id for x in self.env['stock.route'].search([('id', 'in', (2, 3))])])] or [],
+ 'warehouse_id': picking.picking_type_id.warehouse_id.id,
+
+ }
+ qty = self.product_uom_qty - self.qty_stock_move
+ print(qty)
+ diff_quantity = qty
+ tmp = template.copy()
+ tmp.update({
+ 'product_uom_qty': diff_quantity,
+ })
+ template['product_uom_qty'] = diff_quantity
+ done += moves.create(template)
+ self.qty_stock_move = self.qty_stock_move + qty
+ return done
\ No newline at end of file
diff --git a/mobile_service_shop/models/service_ticket.py b/mobile_service_shop/models/service_ticket.py
new file mode 100755
index 000000000..cb224f9eb
--- /dev/null
+++ b/mobile_service_shop/models/service_ticket.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2019-TODAY Cybrosys Technologies().
+# Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com)
+# Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com)
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import models, api
+
+
+class StockMoveReport(models.AbstractModel):
+
+ _name = 'report.mobile_service_shop.mobile_service_ticket_template'
+
+ @api.model
+ def _get_report_values(self, docids, data):
+ terms = self.env['terms.conditions'].search([])
+ return {
+ 'date_today': data['date_today'],
+ 'date_request': data['date_request'],
+ 'date_return': data['date_return'],
+ 'sev_id': data['sev_id'],
+ 'imei_no': data['imei_no'],
+ 'technician': data['technician'],
+ 'complaint_types': data['complaint_types'],
+ 'complaint_description': data['complaint_description'],
+ 'mobile_brand': data['mobile_brand'],
+ 'model_name': data['model_name'],
+ 'customer_name': data['customer_name'],
+ 'warranty': data['warranty'],
+ 'terms': terms,
+ }
diff --git a/mobile_service_shop/reports/mobile_service_ticket.xml b/mobile_service_shop/reports/mobile_service_ticket.xml
new file mode 100644
index 000000000..5a9f0cc4d
--- /dev/null
+++ b/mobile_service_shop/reports/mobile_service_ticket.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ Mobile Service Ticket
+ mobile.service
+ qweb-pdf
+ mobile_service_shop.mobile_service_ticket_template
+ mobile_service_shop.mobile_service_ticket_template
+
+
+
\ No newline at end of file
diff --git a/mobile_service_shop/reports/service_ticket_template.xml b/mobile_service_shop/reports/service_ticket_template.xml
new file mode 100644
index 000000000..4cbab2e20
--- /dev/null
+++ b/mobile_service_shop/reports/service_ticket_template.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
Service Ticket
+
+
+
+
+
+ Ref no | : |
+ |
+ Customer name | : |
+ |
+
+
+
+
+
+
+
+
+ Requested date | : |
+ |
+ Return date | : |
+ |
+
+
+
+
+
Device details
+
+
+
+ Sl no. |
+ Device brand |
+ Model name |
+ IMEI |
+ Complaints |
+ Description |
+
+
+
+
+ 1 |
+ |
+ |
+ |
+ |
+ |
+
+
+
+
+
+
+ The device is in warranty range !!
+
+
+
+
Terms and Conditions
+
+
+
+
+
+ Keep this ticket safely for future reference.
+ Issue Date :
+
+
+
+
+
\ No newline at end of file
diff --git a/mobile_service_shop/security/ir.model.access.csv b/mobile_service_shop/security/ir.model.access.csv
new file mode 100644
index 000000000..ca693432e
--- /dev/null
+++ b/mobile_service_shop/security/ir.model.access.csv
@@ -0,0 +1,15 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_mobile_service_shop_mobile_service_shop,access.mobile_service_shop.mobile_service_shop,model_mobile_service,mobile_service_group_executer,1,1,0,0
+access_mobile_service_shop_mobile_service_shop11,access.mobile_service_shop.mobile_service_shop11,model_mobile_complaint,mobile_service_group_executer,1,0,0,0
+access_mobile_service_shop_mobile_service_shop22,access.mobile_service_shop.mobile_service_shop22,model_mobile_service,mobile_service_group_manager,1,1,1,1
+access_mobile_service_shop_mobile_service_shop33,access.mobile_service_shop.mobile_service_shop33,model_mobile_brand,mobile_service_group_manager,1,1,1,1
+access_mobile_service_shop_mobile_service_shop44,access.mobile_service_shop.mobile_service_shop44,model_brand_model,mobile_service_group_manager,1,1,1,1
+access_mobile_service_shop_mobile_service_shop66,access.mobile_service_shop.mobile_service_shop66,model_mobile_complaint,mobile_service_group_manager,1,1,1,1
+access_mobile_service_shop_mobile_service_shop88,access.mobile_service_shop.mobile_service_shop88,model_product_template,mobile_service_group_manager,1,1,1,1
+access_mobile_service_shop_mobile_service_shop99,access.mobile_service_shop.mobile_service_shop99,model_mobile_complaint_tree,mobile_service_group_executer,1,1,1,0
+access_mobile_service_shop_mobile_service_shop111,access.mobile_service_shop.mobile_service_shop111,model_mobile_complaint_description,mobile_service_group_manager,1,1,1,1
+access_mobile_service_shop_mobile_service_shop112,access.mobile_service_shop.mobile_service_shop112,model_terms_conditions,mobile_service_group_manager,1,1,1,1
+access_mobile_service_shop_mobile_service_shop113,access.mobile_service_shop.mobile_service_shop113,model_mobile_complaint_tree,mobile_service_group_manager,1,1,1,1
+access_mobile_service_shop_mobile_service_shop114,access.mobile_service_shop.mobile_service_shop114,model_mobile_complaint_description,mobile_service_group_executer,1,1,0,0
+access_mobile_service_shop_mobile_service_shop115,access.mobile_service_shop.mobile_service_shop115,model_product_order_line,mobile_service_group_executer,1,1,1,1
+access_mobile_service_shop_mobile_service_shop116,access.mobile_service_shop.mobile_service_shop116,model_mobile_invoice,mobile_service_group_manager,1,1,1,1
diff --git a/mobile_service_shop/security/security.xml b/mobile_service_shop/security/security.xml
new file mode 100644
index 000000000..c52e40263
--- /dev/null
+++ b/mobile_service_shop/security/security.xml
@@ -0,0 +1,36 @@
+
+
+
+
+ Mobile Service
+ 5
+
+
+
+ Mobile Technician
+
+
+
+
+
+ Manager
+
+
+
+
+
+
+ Mobile Service rule
+
+ [('technician_name','=',user.id),('service_state','!=','draft'), ('company_id','=',user.company_id.id)]
+
+
+
+
+ Mobile Service Manager rule
+
+ [('company_id','=',user.company_id.id)]
+
+
+
+
\ No newline at end of file
diff --git a/mobile_service_shop/static/description/assets/icons/check.png b/mobile_service_shop/static/description/assets/icons/check.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8e85f51d612c626d167e4def7bccdbe1d6d17bd
GIT binary patch
literal 3676
zcmcgvdsGuw8jpg4iY%zK;)6~HwPkUVnaO)JDiRS~W01#+Tdm%CgiJ{?ab|#k+GElB
zs)m`Fq^5i_*c#09+YQPFKr}nwM5Uo-TAL;V~rhtuFtx>&0g#C#25Hk&m#sUb-WA~31MBLg4ikrG=iSUHIid9Tb1
z9z?MSXrWNHppa=`3T|)6tVasU1O?OhfLBAPab-$=Aj^bs-a^skcg`{z&c(Sok1Rnf
z5yC>1Y_<@*U9)a?2rbEDiXfxl+}cG;IVE0Blf_9wp~!G!ilE2DR$`Kz#XXhg1%^X-
zXt38Q$b#e)IuIe${frbc@94mx((??I^YI-(m7WmPOQnh&kOeVE5L~UXliA7*Aqh2!
zygrHdutKqvq)a?GfU^Rbv!F1L2n;u3q&9~jDV>4R8gLYj5g8$Gdf5;PM8e91VHO}tH2a0L8XijPj4WT@OfXUAT
zJnhf*@K9tDMU;r4{0y>T@q!c#dc9U3Y|rFt)F2wJDdXk4$u2;9M#3=B({jWE?ZT8AH%
zg#Ynm7{OD-iERSQ3q%07QcjdCs6!Oo2=IDcJmb$VO_7HU?ogqWL}USZT7WtfjpanX
zO$@a45~6_o7yUgq;$EyC{@)i#qZ|N_R=_bJvw}bMOMXYUaeIWvk1PbW5LY2pwz5%~)8GxdCY^PssXRx5eoz
zoO^~fem~r``@rOd6TkZU8il$gE8}Oz-;cgl{mIK`Pdv;QZ%-|s
z|GM{J*isd7WKnONICtpgNp#AiUeQbceyF&&T9d++kK5LH+xFP3BM=)2;)S)A$sTiU6of)b*Y#j{o#0g@7kQ@$&^?Xwd#C)
z*?`OMhxblls7-52Hx9e<G~?b~~OYW?LWQyXXH
zri{BfJ2omM>(N5CCh8@jy!2dILd_cwrrn5}-u1H`e?0w$}WEW5P9XVW2;W}-E(N#mKb@>!_?9;7EcMc
z{$}01S5Kra9GY1>s2abs9zQ>M^!2#Wa|ZgdtCP$7HxD_{=b{ky&9Q_CH6!ldap(T*
zf}8Jcd_*M`3GY@f|5wb3WaRUu4KwLk^ZH)Cx@g9Gqrd$0VaEMIzioWH^;l}xdpp8T
z8}{xXW=4I#;LY(#$DH;dANHu-yZ<(gnNzG17ONUnb$vS3
zb*fD2Tp8xe4);ae*%)~z`kF2F+Q6#SXw|Se#$N^e?zR2i*OIq99+Iy7|H~LN!Mc6)
H^s@f|!zCx=
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/icons/chevron.png b/mobile_service_shop/static/description/assets/icons/chevron.png
new file mode 100644
index 0000000000000000000000000000000000000000..2089293d6ad94cfc015cc0a8c07bb03efd4a689e
GIT binary patch
literal 310
zcmV-60m=S}P)fLA$g5CzAh99{FF(tp
zz^tD4))$4c^0SZV9_X~njUYum@4i`~v!i=obU%PG(6q`OMK>{HG>r}*tHKc2@w+qg
z7|l>B76qkX(U2E&K_1Nf!JbCtpGzwGSJ~CkU>QcDY&q>lnbwQm<|2>>iH5vL6qJIP
zp;W{K-Snrb@Z2gLMVZAQQ5jU>DXT)0mtk@hpq-Sb{2q6{0V4Z;tNXT3P5=M^07*qo
IM6N<$f_?6Y+W-In
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/icons/cogs.png b/mobile_service_shop/static/description/assets/icons/cogs.png
new file mode 100644
index 0000000000000000000000000000000000000000..95d0bad62cf22361b148e1d6cefe2ceab605955d
GIT binary patch
literal 1377
zcmV-n1)lneP)lH5n~Zj$eiG;8wLI!*reT1_VfljL=sA}=JrOptsX2RfC&)+l61t|6JPeb$mZ
z6v1wNClWXiLSlOh+mR64U7bjvhva*zJ0HRRaDbgl@(q$*^PYf*$fE&7)c&&!Rfm?&yLyFbQ?2&R6W6v@rWu!;bZU9|_!
z4Je^Q5$r!vH2{)*ok-wK1%Wz7TG;LgvHhtN39JtxLC&_yAzs|bhFaWtFLrukMR}l_
zP~>z0rF26#(W+H@aXx?6lf(f454Uv()R+QrlZafX3t}g5wp6-Blj;u$XaE#h->+xC
z005Fp0GtMpYoBiuo)VG0UP0_GltOix%1(%-bKgbA0o1pB3&6VoRs+}%fFWUi1MmQV
zmjH~{WZwYT7ng4njIz1iD4PuYIM&NvU6NVO4kNuj`IZ(nzL#XTM^~@uFGT>-aT6dh
zAgaP68%9MDu}+cu7uohT0RHqW9d8lhD-kJqd^i9;Rw)OT!X*D$Y?MvID9;=%I@23T
z$~m4}V3f^0BG}d<_%@?#emG&81LI_NvTQ!T$gzGzil=|K?VCM%e*mZ`d`!0R--N(>
zX_T!|fX{f;z6ZDfz>JL{bFu7UqLI0BExN7c!HmOYg;$V?QB4==-_|4!R<1p=W!b
zXM0?cbrc+q5buUe#ZpdV?VzCxk-Rm+);3(wb8q`(#{e8FI_3z8RwJLQk>}&nRHK0|
zNhvzkFo4$qbT=sr4i@y>Bdr`7j(HfwmH^uc7xH9%r%nnDB_ty3>&opGxGMoP9kf;<
zd%_$N;{SC3V62>WZcCaxpx6frT|FlOj5R5zGbh3vrqY>j1H`{Bkt_d-PcIzGcOeS&
z0OimpMB04AZ5M$FkksHx)9_uX*rDTKrDER^Aij2r>}i8vD4G(OFwKFYV|^yVP5w23
z`asH~GaMjZ={ojt!?Lb#lcy352^1ZBLpqIV|5
zLfz5N09ce%03XI(J-h5`5#>QuTr`wWt<}xj9|=Odm?U{1pyiQF6&>pYfaOUB0`PfX
zSMHvKeKvO?5vfw7-bq{v4vAnDh^?3%L|Q@w6Pmd9iD(;0IfB{ww?bB5NS1mno@&9c
zXC4%!P8Bklxq~Ew%%g071mXR`&iMY{dhWR!JtLt}njRD_-Cxi%N0X&qj~Nq_rI}Yn
za8e0TJ(H#J00000NkvXXu0mjfE=YKA
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/icons/consultation.png b/mobile_service_shop/static/description/assets/icons/consultation.png
new file mode 100644
index 0000000000000000000000000000000000000000..8319d4baa09d6afac9362dff318f63a0f96f555e
GIT binary patch
literal 1458
zcmV;j1x@;iP)fo-7eN@Nx;}%h)9e^5-C?E
zsEH&b3Z#%2B-}L7v^LRRD&QZ8A<7MshM0yxF7rU)x4)gW;*vW;3
z#hX3&)M|C@Hzy`0dbVF71Cp#6E*?;(1E5ZgN|t#IpsRseZTS;fmL2OZ%G1F2%+iN5
z?1unK-3Ni+4&6W$B|ic7=Z$mSG;E8PyRX^_00(R
zZhUjoBfjtdy_aS#1FePDP8??a5dOFCh
z*MWRv)G@zc9y@oAQ6L5)gF{}MFZh1tt%7=2kn>q6`mgJDye)VpNyeX>nXy(;k)8%5c~P{u8)+YKOVK2Ka7pM_X}a`O
zk#~c24MYp^y)u3b+*+!2>R#%t}=?wy_<
zpYKn-%7CQNC`x``VuKC^f_Kx@zC4JDHDk0HCO^O4#RC{@^;{j6<{9
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/icons/ecom-black.png b/mobile_service_shop/static/description/assets/icons/ecom-black.png
new file mode 100644
index 0000000000000000000000000000000000000000..a9385ff13f696e96d517a56ce2b2ff7d282c748a
GIT binary patch
literal 576
zcmV-G0>Ax5}Z)a!cc0ra5uqqg5lnhXD
zTbP_`oKdQ!!sJxrjN&KdC#M>hn6H53Z@_@W06J)|I<5r7bODP7TpFfK@D$$y9ro1J
z_#n7|3NU9+Eg3t67i6kk1G7mAm}&y~>LPq;59$DNz9rz_PKFAe2JQYcbvs+lNHw^F+;#7cCP*z(AJ2&$C0H1W+ddn*~CoC?@7snGmV!9
z<==r}6|tyA>`?)>6k{b=2d<=(_5rWxzxsKgUs~Q{+du)!y5s>SG|Pu>T2kaR7OcV&-NYURtom{p?~^a9V+
z7O-a3C?=EC%HIJ!R*hUb72^tZzf-`AuuDDSkJJnF?!xs=oN3JbnbTGPz&Os^S>dl1
z(84w;APbb-b_k@KC|~4YkNmz@^KPH*e34{*2J>2yF9_24A}NIoShST-^{Ye_(vLmm
zd~pgm3F$kIkw;g)NYXe9tbV#5fWaonr$h>8ffe1h+u&f*`C7F2cl-b`l5Ye!`u+O=
O0000##3Xw+{I#MbTYoZ-I?3FUBiCh!QRfyd*8S0
zzBhAFP*6~?-lzdrfLY+Hwprk^9?LDGz;$2=SdFk>z#U*LBaI?QQKD9e7VcUbxCb21
zK<^(;Xc0+8N7+;0G_au`qDwm1ixh;r_7XS;lzSn3Ks%r7fpFK}0T+SIX$T+G&OY=(
zxNCJ_5*Q8nGpO{QD=gKm=?w>jvsI4EeCbfxmVgL)==l)8DLS{4AE!e?Z8#kPQdt|>qP=~
z0Jlc(3Gg?f*M1lL)`j_1YkWB%UdQh2b66h*ZnCzsy7n_B0ckvzW`}^r+Q1XwyiR6N
z+Zb>`kF^u{kzSF3ZWCxE2%MHJ3h_5t<4fjdNthVL50AOsk~o%60t*2`LXkdVyV0$h
z3!el&2Fvm1lW@sw^on`m-Vx`wwB6`P4R}rO
zE6^)ow-A5YnfJ&y0Ye!WLUqzpz$M^$fY4`p?Mdxxh|Yg2?gAd7ipc|DXJ`UZ90Kkq
z5IzMQOgng*oJH-CT;UDiOoqC=IL6w|-va-Bgt_N1s&c*2*98Ry1?!OCgV~htO4|
P00000NkvXXu0mjf_K8qG
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/icons/hotel-black.png b/mobile_service_shop/static/description/assets/icons/hotel-black.png
new file mode 100644
index 0000000000000000000000000000000000000000..130f613be065b02c7b942088c4d90db37ed8acf3
GIT binary patch
literal 911
zcmV;A191F_P)sqyP_dDm_d+wti*Wu|Jegr#e_!#{@68vYp!)bLlu6Zk`LG>4b)
zEtVJfV|c&7EyFk1UEqgt9*;Njw1VZ>g|{(-Ih??2*p8dxr0-%j^2hNC#&IhqaU^nc
z@$+Ql#-r}>$jwGuyQA&xajp}QpNYQgQvRX3un9j@9GJrg7>xWw!mm^1U#(2=6#lMo
z|KQokEyJGV*$a3$^4H^V!vBQLO`Y#xXJTY1;rCX!>CE#}6@DtiPgnT82{)9?y|d)x
z(wYD^;79DoMQqIQU*HgKi6iBw;@FUI9sNVmM#^uDbMB8mr2J(psR`f_e2lfYQ^?Pc
zD*O(-j!VKyGmVpx8^nFlK|*>Q!@2nVHmt#iLfSnlYCO2
zdFMZq-%%fsUm+%4DcBAM@nlB#OJUtlu?=@5vKyk0-(~c{nEb2TSI|FD&|jC)U02XO
zP_VtPpg&ess@n%zfz}7m^l)@9-pa_g6!iB9hqNkI7IY^HwJpfkw1vjiEIS#Wpt0?`HcKIp}DC=(*S1hNk)FAp#M3(Ph`2hp<^Rwd!~tF
ztxuuW2aq1-#_&}}?@!(9I-!5fU3;7r`rs;-;>L{bUqXMKVkK5&4iq?1871GE)(+iE(2hg+zdgWT>s_5?n3yszX(6k07r<#7z+xi};Iw>y+AElqG*-EPDTmCjr_EtL
l9oc+vR{1Wfk3Rkj{so);rk=IPI$i((002ovPDHLkV1j5u&D{V1
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/icons/license.png b/mobile_service_shop/static/description/assets/icons/license.png
new file mode 100644
index 0000000000000000000000000000000000000000..a5869797ecaa7583c552c3bb7c9bce5910df78e0
GIT binary patch
literal 1095
zcmV-N1i1T&P)?DLX
z+1Y*BO%2WWvTu05Ki}`p`@J{sJ=nx1)&%L)P@|a%i#deKSU(9Ndee~mRtn|o9hqkt
zsH)g_?j-1Oz*{rH&X9nd_6n5~S%#SclCXXhkhBHYOR<={+%T9HHm_+Rj=iH!?az_sX`LfziH+4|52SPxCd(lFQ#&
zy}6O4ybXVUJ6qGPGqH9kZO+TqO1)ZNXdyA~iK
zjU@8F177OZcQq)~$=N9vU#B7D6{_#K`1J!DzKA!x0H-08MD^1m@!Cu1^1Ay68A9JiW%_
zS;VTfBGKSzreWdMUn09>mmHnKrHDNn2a^cnnZ|MXDzMjuSf_9uLfT_HXSmEliE3?k
zXG5qm?Zm1JIMsm2cnJK_V=hkE@UzgSfJcoDFQBI%WSu~xnTe+6cI1o%43w{m$eK<(
z*6j^w>_69x>X$9vq!B%D)n2i2Fx3eCH`fw(T?A+}`>a(i3QK#4M*6$U2tPE#;4RnK
z>mxwS8DJZNZzlfX70^76^jmNLyX*lJ7YEWlH{
zcu!SGBHwAI5D}|zA|-av#xj{i{y7^5SAdUFv(H6FZ!P*Haqu>f2gqsj_qOq~2-w*F
zS(Vp;I|v^e^)8@E=esPmmg4ZVjs4>wpR8c|FGJSOYN$8)|IM@rI3xAI#QT>#L{?m_|*Crlo{0DLwqmu7G?&JUf
N002ovPDHLkV1nf|8?OKW
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/icons/lifebuoy.png b/mobile_service_shop/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 0000000000000000000000000000000000000000..658d56cccfbc0e46060ad4850b9fc60c656baf18
GIT binary patch
literal 1199
zcmV;g1W@~lP)K~!jg?OD%n8$}d;Z#;H3_Ux`{Y$>IOhC`GK2Z&mUBGl%91P8y|S)kfJ7y@Fv(h8fJTCuS1y-dl~V3Bn@u?h-V-e;5wUK!dy#X#2mo{Oe@Ws202*N!
zUYebq1*Oz(7=|0J>pn(AT~tHi06fpT5Cp+8=UfzYF~>QdlTyCudEUcDqp?-Q3ClZy
zh`8_jS1ilAN<>A)|0jSkVOiEy-}kQ++2pw<5YcQ91S^cOdS0R|Fvb>wAgB}3_lVdx
zo@Z(pi+`PnCN6%2qaJh2n$9r_fQWby1S^wxWem84@B1sJuai*#Qp(HIeDX(8DwXO|
z%F8CUnE~{Az4MH*g_Fz52gcZf=Xn=0?a~H`hylQ*oZNq<_}k0ls8Xpc6H#iiO$}f$
z7+lQz-Xr3jB4gvg7!%!YH+A(>1Bjw%(UgpcwAQ*+tJSUpz&ZeoCZ;U_SQA3r;GDOJ
z$T;)HSw0bo%R@wVuh)CagoKDRBK{zR*fFtJO3f3|HAFNzMEd>yw@I~AqJ#bY{dp7T
z002bv$W%N4fDmGbh<-J-uT(0DT8^y%5pku|M*#3XBv+M(*h9qcYPH&RL>!t5ih0Vt
zUhhjHdIJES%P?;Pz-K~;bwmtD2ac^kEdHi}cmRNNMD(sw>ZYmi5uOi;=pD!w4*<{v
zfK{c`>d}E?De;q!JM+w*2G6)Xkk{#{&dFU)|KBh!fb9Z)o)nlf5uR}Y
zd|trusm)0`Mppsg1Ndk6r(q8O?g$}n6g)=1h>y{88Rl&O_*4k-$x*rHnJTQfhuU9KK{~
ze{gV+s3kFgxc1mJAwWb%MAv-ZUm~J%N@uP-7z~#3)Ik8So7O{0t+hLy&I_FLR}6^`
z@phbH$Kh*4{3egHFbsdG*XzG0ji){Z*L5FjtyLbvcvB|f%{;ykQM#_XnP!t303zyA
zsq`QZDWumnCUwuh==b}N5RuYsGT*~mt@c!Fo%$4}0j>3>Nw>~uBiXinKZ>Hx$z_=#
zilR=d)w*wDYuue4X>6r_BNNeAsf38{WsIw8wR+FAJ7-+XA!5H;t=^mFN<>lA$s-;h
zXEln5eaCU`PGe7Ktv4OVxtm8kK!NspT#NkddEOtDN@bZbcA|D8B1!;w=r~T1>a_U%
zK%>#vBBJeXx4STU!I1-p7aW^eM`ao&dc|bh_WW=-{0Wl3r~lMizvej3Q$);_Ad@h$
zFS2H{DJ{#|0D#*mX186}-I$d4sUW^)U5g92(PHl7XX2Xm3}<-8@HhS0PsfeRnq&X~
N002ovPDHLkV1i;vH)8+*
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/icons/manufacturing-black.png b/mobile_service_shop/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 0000000000000000000000000000000000000000..697eb0e9f2c06e40c9c720df7b80b8f6fac63b34
GIT binary patch
literal 673
zcmV;S0$%-zP)xK~!jg?U=D^6hRope;$f(2!dRQAe>DQQeT=B*H{T+6R=CPGo?i;
zwb3GCV`G=p7B(h-MB0d*S1Kujl2}+MniNSfJM7zGW^Qgb$r_ypLnbqCci)@+?wfB1
zGBPqU+Qfwk`Okp9XM78I>x?Y|Ll1WcSarsR1>c9|Nd%6=HgM!=YaZ@efV=JCJ_>M;
z#tG_7>fmofHqbV*fwqwi6!_g1x2b_In2ly7f%_eJ0o+aC9sujWOnqs7*p2KnX7jli
z;o6OCA9xO2jd1No_NTb+#z~0v;T`Z0zwl|`n*9F~cmiDUaJy7Xk_W&W{K7lHtvX^;
z(Zj6p4`48cdl|FZyT#uaI>0^PBmPpQF;uv%TS5j@xaEcnsPI^=RU1CxAp>3Du_HWW
zz$g4f4a9`I24ccp10CQ#@F~J=WS|GU0)9pwVB0W3xNXY`!W$Ww23{u$x9zmJwG4zl
zNZM#Y1GyGz8>t31fw`hBIdgN;Ml!xCHr9#=MoC1iB|&YhBqA8G
zu?X7OSOnBURJ8DgX)FXmEY-qi6Qc+|;sZf^#TXGy#8}J>ckeKJckY?{hP0VaJzj0X8RhK^60Y~Xz{&a9?$@^
z`*!wmV5Zy_F}!tF1}J$Bj0DI7)BwvuZXk8w60j{qaRkSJJyKzx5OU#xRG|a+LWHFb
zOd6COC^gCslp0b8n(}BvP?neGfxW0~`7uN}P!H_L!mj|jfWyE~sgms!uaGmXN9#VL
z&o{&wH`(XFRQ($pDUuL+1@xib4Gb0l2lVkR;3DeD8LS7k>f__UV1%mzx>4a$5ZEDf
zFs9!N;)lCQb0feM2j7i5gwE^pjd8|FLg;tGbr&DyCbIB3L*hWI<61T88h);WH`i)_
z#w>i!kj#Nyz$P-ET7zx?XMsbOOtb!-1`Gk8B3ufXFR%lU=Ye?%_gs{PuhlItkT`G~
z*iYsNGy_*qE6PdWv?bF996`l@7wT=!Aca~OHVbSKIdC1d{b6GWSPEPQ9$MUMlmo*+
zzeDyaLI);$B1?p11lFKJCR&>;B)yV!00U$$m*(l#18adt5v~eYC$PgCrL2V#6Pa`s
z8YOcQ*O0DT0KSqr0(GRrbsYE};VKANl_YcE0xA?5BdrDarup5doDk*PG&c?`vA8VaO=C>m4%I|X)lqm$yVLT0P+oIdY}GtOrO29vww9VSooqbBNnh
zcu(I|YQ)0zb`*zp)aRe-TomMhG1NxyHQX;fPUPZ16kAXwMG|^ZYrnxPV4v0J8EW^T
zsOZBl9Hv`x%N>1ggc$PASEFSIN{zAurN)2jfOsd(fgd5lQU?Y?lv>E=CtGh+0(VGG
zWW%UGZ@o!Njc1h3(oB}@JmzAS!6!o=#PN)%o0h~rfH{E-AX#fBK07*qoM6N<$
Eg49ZXX8-^I
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/icons/puzzle.png b/mobile_service_shop/static/description/assets/icons/puzzle.png
new file mode 100644
index 0000000000000000000000000000000000000000..65cf854e7ea72e36142ffc1a407bf2b8355cc85c
GIT binary patch
literal 653
zcmV;80&@L{P)9a`;n_Do>R91)@YfrZ;WIBYI)WE@w%y
z7IC%30~nX`B(&|Bi6!}ZGuBf8IAM^
zQA&SX2=P2@*<+`kI7+k$-1A&gaYV-{Ks?g2#0TH?II!as;HNYK-X1sS_e0Z#CLzvF_5wZZ}7k)9y#mQhdC00000NkvXXu0mjfog*sX
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/icons/restaurant-black.png b/mobile_service_shop/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 0000000000000000000000000000000000000000..4a35eb939cf065c6f8cf83781a15f357348769da
GIT binary patch
literal 905
zcmV;419tq0P)?`PC*pLe{WG*jTWtl`Uu)I!h(oI7q&uZZ6pM-kw|Ur
zMPftz3s_jOvBN@wkko<{5h@lmjYJTFNYSdk7WZDgxt))5&f8mkk}hV>Idh-qo-=c2
z<}K*Z0h|JE0{hdxYd{s)k+v@ZXMrAIo@0zw;4N@F7c(R11%8u|tpdl>{-S`voX=~=
zI9qe}3E(2Iz)Gr4;kyl(s~mqF&>XN=fMdX2piMb8pcAmd@&I7Dz-K#&h$ije8Ud@c
zgQt)P0N6-UPAX^wv}*@XAr$~{fXT%{gxOL;d7J^}NS&nu>IqNA5SA(ZHvoI3&Qbww
zBrApmt%jI`Qb(zPr3MliEX(6AgxqFAfF%PhK$pZ(DxlHPm#x|JJ?#vOh0iFWL*gX;
zvNkySP6D04&a{0VI7IUG&7=5n`XhX%X!6%0pdIMTwKt`IMHB^02%jlh^`s@_+Eq$X
zUua7+@KNF<74Svq=fdYgTbhAkiIY^oW1*i5PYP{`fFHnsWN@i~VW3~=Tf~(@TO!~V
ziHK=MH!#NJVMOxR&(xQ+UJ$o$y2)oaLNW;@b@MoYxa>1*DRX}LjYb1P&7s^nlmWWk=>z*h>g|NU{%5MtF5CHx%
zsv|6})E_wVDBiwF?G1#>YfMYTD&SYd?mLjjCb;?_Zxs-Gkk1|~y%8;uG6am{&rq!N
z-f4+g1^f)yLT_-QuCw0J!G4)Cg3XY
f0eA)+t%bl}x(3Cqe?`Zc00000NkvXXu0mjfu`-q5
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/icons/service-black.png b/mobile_service_shop/static/description/assets/icons/service-black.png
new file mode 100644
index 0000000000000000000000000000000000000000..301ab51cb1363cb8a0063c4f9f7cb9cf73c91e10
GIT binary patch
literal 839
zcmV-N1GxN&P)wG}3wsU*IR)z|Z&+>zafrqJwCq*x@FjvNVI2F^z|C
zN%{bO#A+2K9mjI&psYL^8b1O*HWO0*iAfK
zwBzye?BGqTEZN2s-YR-iRRhR^{{@@H!rmxCX)mp)h^Mf|a7g;p*wW?ud=J0RL?CEP
zkEcMj#QI2Tc@Mv*2kEq`DKw7vdi=Jb&-aer)!-Z0qjz+QFK@N1&aRXO}`izA!9+A#$97UmLtKG(#D$V@JG;R0Xua%1u4_kNMazOP^ayYznp(_+pa
zmHp&*7l9|T=r9&<9@|?Ko;a_$GXn6R3=
z-_eWeE8>!NN6sWQh>p|@{|B~~h0NN}OyO(k|0o{Eevvy?ir79Q%G}xZ=i2u5tSHu2
zwf(N(bFnYJT6O^a^n}=lCZF8Nx;w2}uUkB4XPd5v`7Z>im~HzdJMCK7trz|-8@38>5jc3xX@h`{
zh@iEj_%)@#V~J@-!i)2n-XCy!_SC5Qyigi**PVuC+h<}!~>FElyR+PxP0svs|A}^vKikR
z#>I0>S!0;4UyI{*IK1PzbOF;IshL(A_k5A?+#7WY^+>e^YX;p
z=xW)DcRQbIOIo!~v-$kABZfD^J?Ag~CjG!0N_ye{SWo@7I2vn7n(V-R~kb-3M9=yBBG68O-n8v2ber%t!Zu
Pq0ivy>gTe~DWM4f&Ev8V
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/icons/training.png b/mobile_service_shop/static/description/assets/icons/training.png
new file mode 100644
index 0000000000000000000000000000000000000000..884ca024d71ca9127a5393134632ee92a61b07c4
GIT binary patch
literal 627
zcmV-(0*w8MP)Ji_yZ6G
zgCi9sC+SZOF3B?A-3o?c9a^B`5B^xi{atdGlsx
zfu5coC)9d9*W)+29w+CYx6HE5(7FIXTmz`}IuU&auvT&%3np6<$3JExZ8|Qv1`yF6
z{uK`ZBO-bN;C9iN>oGlP1At#74phASP()5l1Dq?6>v00$qR~ktYISg_G~Q>PN9l*Pyjm+=0joaxS5K;Rj(=Ddy)iyD^P2j9tz7$MRPPN-6X6Ic<
zC{O?T4(yVQo5t(DjmAqa0UQ-9Bj}SmO~ZA+0wO7a=S3S8?~`nFrw($EDaoG!IQ?TF
zt|2?U(I}QLQFZXyQiDB8SX$~v-8kVA@YGU+KFk?f>fJUiwWsHQ*BQQneoi*
zIdjgY7w2;~&-47A-}lQiGr#AVfgU}2^thi$w2V8gP8xe`iYA|^nQ(?HLC@=`7Uk<})
zLeWEQiU$yZ^@<(}ZFDXOrZ=@2KTECwL3TGYp{o5;VR!&Zenfb(Y~lunk>o@WhF_@a
z!ghmmZ=oQx3ZUrTMV_|@z*@URl_LrpnuMspmx02LayE1`&DBGH7
zIB$fJR!y{I;6E2v5gyA7yJ&>%uIrAsk}Qk0c3q+z1eRyI&Umi#qKMSynj`laxQDEG
z$>9=BWqAjWxCde)_&ZYtQ_uHfppNAb)C&iMgDG4Yayz-APl492qWnZ
z+2s4qPerk;Qd
zRTxgcUKCf(0QEW%Si8S$d^23v9Y;Bm$|Jh7D5kUlU|v?DQjz!5DcCSIHI;o!&C;0x
zy1x?jTA~w;DMb2S$s6C7*Wr6^*LJGyqHt8;>Dg;xBk)zTu^q3#d?0F4bwS{Xys;0Y
z0b}%PxF6sy{*u>yU@TD!7kg>wn=-H#OA+vz;H27KSYpwM_&kp%X2ny`^Yp0@|(y-wyRtOEu)
zkZMr2S!>sIk}ylBD^a-LQPoOlqjSJ;L-U^%BWoPTxn4GDGXiV(qm1VDmv{z1L}Jvu
zn`vGi$NH_RE@&E5g2~Cr0o8JExjDBIzCUyV^vhJEFcOB*@hFO_Ws){xtzG=^;Lve_
zQnzMHdm+ztcL8TpjlxKr=$THQiK!@hAyIz4N4%2V3+2+10THPgVGEG`aJ3>)#)7~e
zj-qI|S!^?IMA7OXjJ}pce+C{;_v(adyt>r~yRAcuwRTCOd=IQ`K0+rHj*6O7#^_|N
zR=ZNIR{yzq^QL#_j;<2XwFs{P&o>X}q=;_wJnsh7KQIfj8}c9GwohHEy0HGyN#1EU
zwtz&CPhEFtR77q!cFdS4^%iP|h}3+~+kwg^h2P66zKc$%k(WHr*_9O!^)V)55l)iG=bkroSVWSt8oK?9X|oC&>t|S94mi~JQz6J@L4Q+~({Wt+
nVe#UD%iYS|qeqV(_m6)8sc^)gW+q6200000NkvXXu0mjfv*t}m
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/icons/user.png b/mobile_service_shop/static/description/assets/icons/user.png
new file mode 100644
index 0000000000000000000000000000000000000000..6ffb23d9f036834a32954f83bcfeca00790ee443
GIT binary patch
literal 988
zcmV<210(#2P)cAU
zg%n1_!UO~hi=Zajq!7VI@CUR>p`!Rx*a$&o3k`~bXb@RtC1&nyR*WQ@xp&s=+|MHZ
z%qBDA%sD6P7W>?P9RqF}kWv6&A-zOAepFK7
zn%moe*=$Tc@)I0INT*#4Q(tpt!c>;Iw0DH*Nr(MZj6)>|hd7}=D`NRPh
zXvGuSy!q^~M868;^;_^453rHAwcCa0XTYMJUi@XTxY>o~XCPvW7k?SF)lGsQoZDZQ
zP)=G_j{)g77n-L5oA={)hSIDH&Cfs)ee1>VM9F4cXnqDNc7ia=s32eb!iDI$gsOi4
zLvKEpLvw7Jbc*9=pw+k^81;$)fYoTt-RZ*gtblIt<9DK%bYb~+p`ZNt9gylSG|w)y
z^f7S3E5=1EFtYA*7owK|ZMZhYc+MxrUpVY~%?xuR%hGp%`<%$)6(zO(uDSg$G#5pD
z;K6<0FLeNz{gRNEPQuWq)1OJI*Gp=<<_=N;X(Gq;tOM~GAMp_MS;a)29s}JqVCIjM
z)b8=k8|EJXBpK4+2QuS_5P5?c0HB~e#B8sn^Ebj8h&ak%8{2szdo@hTfKXDKM!FmH
zW1nf?P!ziqZws=70=&$bXf^g?93W~xqS9P$i-O)xkbdQkw>_W_=3j
zHL&MZ+4h#Vli`J@6>FxCSeAZmS!$N0X3g}h<>^5?bLOg^ymRRmYovK~+eD>9insPXvj3+6Gb@v&hmf9xq1t2!EP|dQ8Gk{Nb(_%F
zfZ2)l~DhpZ1%x!dRjm
zO=;u!cb$X1D_}gv>Jbl6rqq7)(!s6*&8$S;I1dcnm#;8RsZyKh9Ozzw#ra8ApLl@n
zmu`~X4VYcGB63`?zPU_W_r4w%$5|}xSP?5ge^6@en%S9MO4}qmpBLGc
z+0FjUY-Um~^1{NNbKdiv_nq_2d}juhaAqNAYGGAPQ!by+?CdIx=|Q!EF@IoLzlew*
zHqN3N&|>jiL`D#~5!H3TiYBy2#kO~cjhT*5UTf&o)WxJyJAvB(gK7(+j!7;TT0A7Y
z1FE_V&)W$+3}iZx$0V2A6?Kio3}~@vBQg$L-C2d~l5BRYn{^UNAuSXJ5cvdH*O{zi
zV%uGb2Qb}EY>Q0hdBTeCB5i_*J%!Y9hB4-|&cua_ha`5unC%@oF^Pv{Qs|lv<4<)f
zUXLH|SJ!zQN!xgltnuI
zA*#cGrK&x(v3Ly_Q|`zSxko)OA2y^qPL@<^KO#f_bvjN$1}w`3PIqAS3hH^A
zP<=n*vz)54C3ehdJM0g+#tCDPU9e*A9n+;vw!rRxEBni5
z)-Ry*UUp(jA$8sBfPFx3TrnGPh-`L9MCxAWV%Y)pyc>XbNlyG}DwX>i#X}4RsyFRk
zVEIC0wZTI&IM}qlEXaTsi?^UUPIBUXU{q}T#a4t=w~?!r^mSlaglPrljv8T7?RP}(
z65D>Q9jU9ESY3A%*b`~K>IAlZtB6c%p|F}v<_biHP`wm58|VX$0ly;h9+vfvh)j11
z8_9sG3ZAzI7>zOy_>^pRvxuCEIIkl@7qaR%o>zf8Bd&3X>FJx35Dy`DKpiKGG2_6-
zi1EL|_pg8qr_|L-ofg+klMsFq4s0+U^c|Cvl?
zW76WGjRAGt5q$puurgxIe=ugV^!5FI`VHxE7Je0$oQCSazOkXL=HEJ@iy7)<8ccM
zi$(+ef&T;QIOo)jsy2Ql_>yw@-e%|Y#X_Tj-|AYa)EhMu>Nvyr{xgBmKbe`?Dr?r9
zOju)E)IDj`^R}b-mDwQojt1IgQcl=+(LyKais%c845mdJTs}XVW{eu|uie$6SB5Pd25|YHf6OMZB
Tt+q0v00000NkvXXu0mjf(ZE2?
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/misc/categories.png b/mobile_service_shop/static/description/assets/misc/categories.png
new file mode 100644
index 0000000000000000000000000000000000000000..bedf1e0b189ab85a0800d2bf16f8907ae0f9b225
GIT binary patch
literal 1532
zcmZ{keKgZ+9Kav<&g)v_b;hk!gv>VTU}Ro~txRZnf7vk1>ts^0E+H?ytaOVCAAtJwqh7z>jo|))?0E=;^I0L}r!q@1EP`)*ij%*d2<}K;)isHiUuO(K8sRsh
z-Pis3{YvV^@OQmmNs&NQU=)KXv{AlE^1MknPJ@r9OQ`&Nj0POs^TNY&qa1m>k$^h9D8PU8DqJ&&5k(K{sH@
z>V&X6c_01q(%2SvYvLlvZnd>@@hKBUnCj~2ChNaWzfP;#&qp?|WQ{%Kh@)Q3?|Ni0
z=(zu3N5auKDLJw+J9M|2X2;&ImwC4Jf<@^EEM+385H^D2h1?zJ3CZs;Z5fLh)hk%5
z92LCeycC`uoi_YZVuu}XVj@bJ4%>5%sl%Pd2NlL!H`UvThTU6LJEXe^gn}6qo&D*^
zm^{E}_)%2m+Lg7mTKSD%vkXWsw?3^(z8CV2X1=Ih+$)FISZ`Q1W>#&(U;Pf3754az
zInOwxDLL*iQ+nNfq^Y+ffJ{jKv)@>P_0P3jxYZ!D3cFG&Z(+^{gBw2KslvLZ6k9pp
zcav^CwSZWm8XpNq>1*NKY-M4jgw>z=OfFMf(-%Ced^p_UI?=L>ul247laA={vAc40
z&MbkA
zQp*daY+?&xt97XHt%JJN_4~;wCD(^h2BpL1xp@X^wlU;+cG@IQw(58Lm3j6ZZ+dn9)
zlL|m@Tzt8QBUiJiT2oW)3o_`6!%f0b4fhFzCeI?t)lB#3@yOj}Mt_vsQ;lPFV#O6{
z#%pHl7`Xv@3G+~0gf4=9HDk7006U7#X5b?aGavvftd$iSYlF73p<;LAaeMIAHoLG`
zJQn*_0WSNWkeD3Bj6U{lp)90@1PP}9O<*$<8L4b~BJ10ZkX&2>Ie_fuMQn7To%{z~
C2BR$i
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/misc/check-box.png b/mobile_service_shop/static/description/assets/misc/check-box.png
new file mode 100644
index 0000000000000000000000000000000000000000..42caf24b98062c6ea6bb4a636808964262e04e64
GIT binary patch
literal 1118
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
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/misc/cybrosys-logo.png b/mobile_service_shop/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..cc3cc0ccfdaf8dff2e8ebcb010e24ad9e636b494
GIT binary patch
literal 4496
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
B&Kv*$
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/misc/logo.png b/mobile_service_shop/static/description/assets/misc/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..478462d3e73d73cc9bae9fea8e7f8fac84fab049
GIT binary patch
literal 3452
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
e!*|2?|H>Z_>p))&1OWs90000l?
zWKy}bLYpqAEQ(GYLL;Gb(D`-#IL~wb=zX5=`+48*`+lDHkMH++vpn2fWTn-m0RWIC
z9Kam{srDn};o#iz@f{BYjOs*k0)QL&sI?$TaIX_`;1CG_67>Kel?4EQfvMC#0pJ80
z0A>OKz_uI!ROyu+p7!7YJlNF*2NE3LoOvlAr055ZFhBlyRK=FmTchU@1VS5t^%)rBQM9x$MwS_
zIXL28E0Jutq+4j;o%BRKk^5frRo5||pMzOotWxt7e`AC8&_%_GFa5wg4|BIgM?sHX}t!3?X6PLp4$UBYR*G4H&
zMWX78_VXrTlyZUMxJRvzIRlyY?ck;R``%gwo;iG&QYPkRhHGmxV&U|J?Y^rE3saY1
zG~M-*5Q7+U3lPx5rh}=!OE26Gy*noAY^$SS1z(p>+80-3tY&2q4P(pi=oiXZbv==y
zXNz%@hg?y+v5^*UM&psGr?#W?#oy?vVT!Nq;xo2R2u5H<#RL5qj7dO4ac@0F^!ngf
z&PKr*uOm|Ap(E|9ZzYaPLWnC%tr3r8Ip>Osz(!1gNeva3Mwcv72UG3Cw(^a2VSqj+
zi^Gw7-K8=_q3X|GY3d)JcoS`y2fuJ>cPr!LN#P&A2aWB|#WZhQ72J@Mi-2%_f2*#Y
zN>HTSP7l8m-qvJ*mJe2QXf)d?xw#rCH_dEO(a3Z^O8y(8pbhe*mx~XuA}pYj%F=G$6K(s;ly_O+L&wbDL`GV~pO~%~
zb-PH}OteCdwx9+4m(buZi#6EN`j}3e6EiuG#AL|cKo&hdUL+J{m?}#zsV1<9ax%nz
zu6S>pFkEA{-8Z>oTkYo&~Ct(r52;n35<_46W44SR|=yRZb>u`vCFL|O%y
zvHd+g6~vOiaEwWo&Gx1)vM`!ybp5j9d~a2FcK#-HcUG{IW9kF$JJMax#<6T@tbvx@
z$jqUkmA=~0F9J@|)1nwszzpy4gMpl7U8}JtE7}@?iFZV
zi%UJkou|bMX>_Z&mia{Gm1ER8qI{S!4wYU=N;1}ifE8wL*nd%HI-fmC8l2CMv-R~u
zvLDDM5}tj44JzEQ*b$bs1|hT<=)srdA^a+{tvf8CrMN979i}O4ehAemf%4cedr{mn
zGO;GJJ6*4d5f{8kimVX0tGi;q66V;a5r+ll#Tf1JQR?ITA_3c#FgN#Z&wSd7rsk1#
zz@rm(^=;c#Bj>sSsWVIc7rsY+Ik(`8u_yE!zp6Cn)=S25Z^cV3AX(?Dbv!U6gQlBt
zNC{m%*Y<{X>)BW2u_SzBEef}Y{Dt+>dGfohq3m#N@KS^KHSx!Gg!cfYpwHXRC9@B$
z4an`Ay4?85=X%4ZN>1Uk%ZcT8LJ)2eT3WnQW+Lo>r(h_TX1>tfcWOr&Dyk3?X=J36
zKdbY6a*BJb<@)(GsIql|R|Wyu3I4h}nRq`YC5Rbn8xj`^0>Gd#7-O`RF~;gJ+QJrX
zZHvb2LZfZbXvv51_x~qE|3ZlfOZd6KWD8G&g28_;Fe9Qv8O)$)`p=ymdGocP0}$|T
JxMpl%+CQV6u!vJ6b2LQ+{
z08k|5Hl8;V48(lSS)m0K*v8qWXaU4Y)|bKr#QoPfLFWB}1Vpy6w*bw8ppr_kLt{~G
zg3c!!^cfdyd+o&tj0-_-IqKL|DT#v*Tt(VR^p4|6prn%In@+FjDyl+Ba-xF~Di*o1
zx1guX{>c}`ffisl;XpCP%2;L>T(T8x-gJ;p+_7=b(m`FN+@eG_S^4z(swp$6AOG}(RGqLPX`>E|>w!|QLqhG3-1qHCT)(Q)h~`IeQAoQ|B(Fe(k=IQDJyJ-)3slV5N9QB$+<
zu4?=JxT>vkq}G80CL?V-ntJN=@c2yUm&LetGTO2T(#j^OseJ*DCoC?G5Q?B&pWvkm
zOYoE;DdcSqJUen1_q3ZEmgOznZDExTJ)V_&Rh)`E95GzJ4&G^q{F$r}|7E&o>+(ec
z64CLp)6^!M!3fo%=MZluDcd<1WlhCFjp4Bl4#q!@b*1&Xwa{w%sl7v6O-=ScLhV0;
z47)u%PF004qYRdY9GTLSaf>OCK~;YtPt6V3z-srmem%XD3*m0au-^8>2S>(GiYsD)
zpO-i4^Dmc2^2iIJL37{IB_*OpP`gM*{r#;A#$k<&;^~d;9KudWS?k0v&zimPlH?|J
z;knX-i?W2q)DsQlGC4*m`V4HUu4;M&+t4(GUC+0%aXetc60Y;`z{a8cy)H|gYm={j
z;l{W9T$SPNFVBC(rBJ#sc(pp-rX=*iu67=eLx|jWLQcNE{{sE{`T7@1Z)9bD8zf0(
zjj~_mT4SZ%t3rjZ)!{+2vp?nO{UgKK5#yNL>do)RTlsz2bB}HLdTS3{kkn^F2U7gp
zeaCg}X@l?hW~nDsTvy+m_*r&&mzT4%)(9!}{CMT15>^6t%fNQzma@FX@aRa|1l0z*qvGe-ASXo+H75MF{hm1@$B`s6e`mtp!u{1kM23&ZI?Q~aH
zN9c6V;=6*9!4dO;r|zZd$_WOZQV@&;NNnA|Q?IR?yF8?du)`6$l_(0$V9J1RKmcV*
zL8?eOFOMC}v{Q;TXr?v4(8$Y*4M*d5teg-LQu7*+Szj~fKj&n^&=_#Bn>!WDNFV)p
zKhqa@bvz1L=JLch`E!DQQi`PCX&pZg7N>Eq;&or4tJE-I1D?u=@o}LTUVUV9Z1x9K
zl-W1V4UY3U$sz7&6*jVHxCmv$zDA`E312662$dQQFCCh1p7TfJ34T$BgE}dRTB|LT-;YEoNK7ViA>jCqdQH
zKBcB6G4S@&$Lel2T2^;NazX~5d1xAxU`Q7a_L)UzJ8>v}+Nh30S#B5{KE{W0
z#*57t-V&9JQeIkH6N@r-4+)waqjM8>2F_r#b(0B(>Dx`rM_;dK`EU>?=Qro7lB?mj
zx7S_n@%OR(i)Ai{8Me<&+UvtElV8*v3lri0qIr4s
zu+es*p>Y-FhM%-{8Q?+x5Ci4jtTNiRdwT3D*)8iinnteUB|-VY!51KxoFN{psB7JI
zKNn5!NMef%;b~SiLeB68D2@4D9cerQV-6f;Tjg~E`
z?bzd}7Tt$!x1AqrR-WumDLffbZQ^=ao6`5U;WZ~2%Nx&p^xjAh*d9)kkNG}$%5A+VOdR^iev6_9*0mc5>s>W({cMY*pr&6E+Y%Cnm&&+Xg{{c=MKK%dy
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/misc/right-arrow.png b/mobile_service_shop/static/description/assets/misc/right-arrow.png
new file mode 100644
index 0000000000000000000000000000000000000000..730984a0635c971661c6ccafc2fec83a2dee1632
GIT binary patch
literal 967
zcmeAS@N?(olHy`uVBq!ia0vp^4j?SR1|)y|Tss#?v7|ftIx;Y9?C1WI$O_~uBzpw;
zGB8xBF)%c=0965n8eT9klo~KFyh>nTu$sZZAYL$MSD+10f-TA0-33Sk!B6Mi^+1ZV
zz$3C4NGE{this?wKn8n>r>`sfGj=I%4b4g4AADwDU~2MoaSW-r_4bZ!MsT3Sv5((f
zj=RO|;#kCS=}}7XL8tDJKN>$74xU}fF>8v}j2jEzPD!~~B4D&6V6&)t;iMZW0#n(z
zM5Ri70$rZ#WgS)W=yTpFs=aW@vwOvPpZ>4?exP>p_lE`Vt_v~(ZHIzC=1bq*>z0|h
zL$rJ5x+8)Hu@2<{TBXXnCcMxU`O+qJVZYbXC(k_;P{=m
zoy94kwEF;O_c>0rrT6}e&e$-V*P8MWRF-G>B-@r{Pc42%%tE>x>1&hK=0!iJj_bFU=Io=^F7{M7dD=9_DxO9dJFZ;G)nC3NUIDloLooN-(2f)V94EWEpbZ~Z
zma#f64Z4`2v~cT7d6xV)e1{w_vmT7DkGCt5Ur=3pHLa;*5f
zc07h}=2!o+4~gCP*(>6B_RmB<{nj$JXpjQAjcb8g9~ebTzfTZ+G3jl;^Y7o%?q9u4
zqt|+Q)SXiP9{zRhqs#@~+wA#bT
zfk+J(R@O0J6qFZ;eYtTmFny?&xJHzuB$lLFB^RXvDF!10BO_e{b6q2|5JN*N69X#~
zLu~^CD+2>trOB!&8glbfGSez?Yw)Spo(a^T0k@$fGdH!kBr&%Dw;t&%E;pba22WQ%
Jmvv4FO#tlhdcptz
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/misc/star.png b/mobile_service_shop/static/description/assets/misc/star.png
new file mode 100644
index 0000000000000000000000000000000000000000..2eb9ab29f722b495b4ab0ece3ad21e7b82394f3a
GIT binary patch
literal 1642
zcmZ{kX;cze6o8)_%zz{|jy5T_nC3DXlBrQ{D7dhQ;$CJZkW?-u8k#BY>10{CONm2j
zS(=t;$2D_paV=a*EprsoO3bpw(qZPuoHIYV=iK|<`|kP9`*+i+6h{PXBMbn5aCUNV
zmvO^CiG;{%wRoyg2F1g6WIF(A&cnY2D#_-}K~C;u0Aln2;3fm`RrbV{01$}=VD2CQ
z*n9vq!g&pDdu0pAA)=#$jI#J*-xx2$&*4tK5i%b9H>F2${jvtib|&MYvrtXNjmD2)
z)OG-rbe$dSJbcS0T_J9h7=ba)GD@Y)Z4%I{m53aoBzyMi|aQIi2zE_#N__+%0Hh141
zV)v5xuhe>IzQVca4VwMpL#TJ;||e=cM%{MUEOMwYghQ!59{b=zmX~BHv&X<2eM{7
zJT{LNN4icLnLvP!Ewik?>43_Xk-W6c`%|~N(~8YTkzAaqSziUr9cx*2f;C`S`~LK_)qAtD+(@_
z6v)gsESJaedKJd
zzMz`=g#GSPA~$k=udY|Ck-;UK7mXS^iJi>UHmr|=+dAkFfWO*vQtF3n``AUWOpI3?
zEF}hZww+i>%gM19tGjo*w3hd8vdUn+qao=`9HKDAWo2bhnFHc|DnA>=!aD;R&9l;G
zrwWa{zm=aejS%-0j~v5vqoQM1>P{-W3`>n-jAv(FHm_W(Z&AkG=F|jOSK(ic-5I2q
zp)4Nr(r>kMkR2V|4FR2FtE>9(`mG_+yRU7hY2+g&CU!hL`;9QIiA=8G?$yohE_xEw)9HD{!>f`iy!}WHSiub;MVCN)k+@T?13yj(M
z(wU){=%JR=)P$>47q{kzQ08MINlTgk`ZK3+cJZm))tuKtzop@eZ`mK)k_5)%yT-<7
z9>}Gn-m+S!GDG8%lC}JoekmU2LoW3`l}DF}z68$8dut|51%IB1IJv-dbq-=RL+?-g
z=H}ajB8^x1x2RWPoD5kp^ImzQ|4BH!2EX=(xl8!F0Zc!ydxizbxY`!bGQy8pW&lifskd_1(
zFYZ(53wrAabdp3|dUg+}e8=5%A|-3}=ymk=whX)8wAK1OEL4xj(R3@wdMT7sJC|V^
z|CRlxnxbWERUd83oF(h=9O)w4%Br^=^;tdl>2P8Jr}${b9}yZ0%ebU-feJ@{fnBBz
zfGa-!2#}ixv)1#}|2o?*cE3B2V4sr0LpUbrqX$H{3T>_F7mKZQOx9b)1)$F|JAE&Q
zk~~ENSjzTiKU4itCzMx8>g>~i?O)fwAEN9c)Q;mH+0mFo`w+J
z!*=e&?(uBBSn&Qnk5{r7?c-OxFaJUbhB{pk_WapsiU)LORr3U6oHn`k4GMwBkwiW3
zD*crDtFt&2UOG^Vq{eP>JGmCMJ#_qOG1MYg^(i+MY4Mb~cg
zU!IW~3F^Z|k&AaZ6EokH)C$R2*K0o-%WkMH8}GxW2eKL1pc4!k00xc07^5wWF%}+Z
zGc3j&YqrY>jmDzU^5^=x{wIWl(OJys9}5vrqGDu%{(nEPSs{!Fc3?>OkDYB@-lZ}J
NIO8b}Rk(wRe*?eI-Sq$f
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/misc/support.png b/mobile_service_shop/static/description/assets/misc/support.png
new file mode 100644
index 0000000000000000000000000000000000000000..4f18b8b8201e3a268ab1d8ceb8bf46d7a7a37dd9
GIT binary patch
literal 3892
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
literal 0
HcmV?d00001
diff --git a/mobile_service_shop/static/description/assets/misc/whatsapp.png b/mobile_service_shop/static/description/assets/misc/whatsapp.png
new file mode 100644
index 0000000000000000000000000000000000000000..d513a5356b2564f545f2edcb0b80dd3dbff9629b
GIT binary patch
literal 5097
zcmZ`-WmMGNxBd-7NDrZaqzowxJ<>41P@>X}bVv+Cca0*AGD?H+N=S#&jYy}0gwy~M
z0@B@=_rtww-SuDp5BofOpYuFxpL0I#y`#0Bsgjf2CjkI}TwM*RbBkgB8U+7#l`QZE
z-vYja!czqR`23di(u&|VX0uV#c?tjlT(`V%0671b{|5lPg#ci~5&)!90f5devr${-
z_5jaXLlp@C#qm&)+lbgr&Dir6Z&|mt>#R6(>kxUVKUF4LC1M0aseKAozXAYtp*m7Q
z&u@C`xwDtv_}zJ5>LX)^IXBm==9v
z$`{Hdx)u_c?KxtTeZ}Un(2fBUQ7}ok{ipNY@naDegapCC^)4B!kcd_2?PY_BzUP6(
z_ik}J7HmOxaaSwEJ>y|@V(eaHtV*Mb@H
zeCH(ukk;(lt^$rWJ=F2{mBoT2v{MAW1}Z9nt$HX%Yh50=%&1g*7OXls>%vaN?<2D1
z+G#WaX