diff options
| author | Rafi Zadanly <zadanlyr@gmail.com> | 2023-01-25 16:57:22 +0700 |
|---|---|---|
| committer | Rafi Zadanly <zadanlyr@gmail.com> | 2023-01-25 16:57:22 +0700 |
| commit | fadf15d1391ca2da11f3e3e4921801bbf38cac51 (patch) | |
| tree | ab4b46ae9036154e0304e717dd2bdc9b0a5aae1c | |
| parent | c2699c98509438855315f8dab0b390305f32eae7 (diff) | |
| parent | 44a5536200bdaf189c496751b1679c7479b7b926 (diff) | |
Merge branch 'staging' of bitbucket.org:altafixco/indoteknik-addons into staging
| -rwxr-xr-x | indoteknik_custom/__manifest__.py | 1 | ||||
| -rwxr-xr-x | indoteknik_custom/models/__init__.py | 1 | ||||
| -rw-r--r-- | indoteknik_custom/models/leads_monitoring.py | 70 | ||||
| -rwxr-xr-x | indoteknik_custom/security/ir.model.access.csv | 3 | ||||
| -rw-r--r-- | indoteknik_custom/views/leads_monitoring.xml | 88 |
5 files changed, 162 insertions, 1 deletions
diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py index 66184081..1643d9d1 100755 --- a/indoteknik_custom/__manifest__.py +++ b/indoteknik_custom/__manifest__.py @@ -58,6 +58,7 @@ 'views/website_content.xml', 'views/custom_mail_marketing.xml', 'views/website_ads.xml', + 'views/leads_monitoring.xml', 'report/report.xml', 'report/report_banner_banner.xml', 'report/report_banner_banner2.xml', diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py index 5d5ad0ec..c6fb7d4f 100755 --- a/indoteknik_custom/models/__init__.py +++ b/indoteknik_custom/models/__init__.py @@ -45,3 +45,4 @@ from . import x_manufactures from . import x_partner_purchase_order from . import x_product_tags from . import website_ads +from . import leads_monitoring diff --git a/indoteknik_custom/models/leads_monitoring.py b/indoteknik_custom/models/leads_monitoring.py new file mode 100644 index 00000000..0fe63a3d --- /dev/null +++ b/indoteknik_custom/models/leads_monitoring.py @@ -0,0 +1,70 @@ +from odoo import fields, models, api, tools +import logging + +_logger = logging.getLogger(__name__) + + +class LeadsMonitoring(models.Model): + _name = 'leads.monitoring' + _auto = False + _rec_name = 'lead_id' + + id = fields.Integer() + lead_id = fields.Many2one('crm.lead', string='Leads') + create_date = fields.Datetime(string='Created') + lead_name = fields.Char(string='Lead') + contact_name = fields.Char(string='Contact Name') + partner_name = fields.Char(string='Partner Name') + email = fields.Char(string='Email') + phone = fields.Char(string='Phone') + mobile = fields.Char(string='Mobile') + salesperson_id = fields.Many2one('res.partner', string='Salesperson') + salesperson = fields.Char(string='Sales Name') + type = fields.Char(string='Type') + priority = fields.Char(string='Priority') + date_last_stage_update = fields.Datetime(string='Last Stage Updated') + stage_status = fields.Char(string='Status') + total_quotation = fields.Float(string='Quotation') + total_sales = fields.Float(string='Sales') + + def init(self): + self._drop_view() + self.env.cr.execute("SELECT matviewname from pg_matviews where schemaname = 'public' and matviewname = '%s'" % self._table) + materialized_view = self.env.cr.fetchone() + if materialized_view is None: + self._init_materialized_view() + + def action_refresh(self): + _logger.info("Refresh %s Materialized View..." % self._table) + self.env.cr.execute("Refresh Materialized View %s" % self._table) + _logger.info('Refresh %s View Success' % self._table) + + def _drop_view(self): + self.env.cr.execute("SELECT viewname from pg_views where schemaname = 'public' and viewname = '%s'" % self._table) + standard_view = self.env.cr.fetchone() + if standard_view is not None: + self.env.cr.execute("DROP VIEW %s CASCADE" % self._table) + + def _init_materialized_view(self): + self.env.cr.execute(""" + CREATE MATERIALIZED VIEW %s AS ( + select cl.id, cl.id as lead_id, cl.create_date,cl.email_from as email, cl.phone, cl.mobile, cl.name as lead_name, + u.partner_id as salesperson_id, p.name as salesperson, cl.type, cl.priority, cl.date_last_stage_update, + cl.contact_name, cl.partner_name, + case + when cl.stage_id = 2 then '3-Proses Quotation' + when cl.stage_id = 1 then '1-Lead / Potensi Baru' + when cl.stage_id = 4 then '5-Proses Berhasil' + when cl.stage_id = 3 then '2-Proses Lain, Visit, Etc' + when cl.stage_id = 5 then '4-Proses Negosiasi' + else '6-Undefined' + end as stage_status, + (select sum(so.amount_total) from sale_order so where so.opportunity_id = cl.id and so.state in ('draft', 'sent')) as total_quotation, + (select sum(so.amount_total) from sale_order so where so.opportunity_id = cl.id and so.state in ('sale')) as total_sales + from crm_lead cl + left join res_users u on u.id = cl.user_id + left join res_partner p on p.id = u.partner_id + where cl.active = 'true' and cl.stage_id not in(4,7) + order by cl.create_date desc + ) + """ % self._table) diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv index 9349a566..d469aa1e 100755 --- a/indoteknik_custom/security/ir.model.access.csv +++ b/indoteknik_custom/security/ir.model.access.csv @@ -26,4 +26,5 @@ access_website_content_channel,access.website.content.channel,model_website_cont access_website_content,access.website.content,model_website_content,,1,1,1,1 access_invoice_reklas,access.invoice.reklas,model_invoice_reklas,,1,1,1,1 access_custom_mail_marketing,access.custom.mail.marketing,model_custom_mail_marketing,,1,1,1,1 -access_website_ads,access.website.ads,model_website_ads,,1,1,1,1
\ No newline at end of file +access_website_ads,access.website.ads,model_website_ads,,1,1,1,1 +access_leads_monitoring,access.leads.monitoring,model_leads_monitoring,,1,1,1,1
\ No newline at end of file diff --git a/indoteknik_custom/views/leads_monitoring.xml b/indoteknik_custom/views/leads_monitoring.xml new file mode 100644 index 00000000..3b4327cd --- /dev/null +++ b/indoteknik_custom/views/leads_monitoring.xml @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="utf-8" ?> +<odoo> + <record id="leads_monitoring_tree" model="ir.ui.view"> + <field name="name">leads_monitoring.tree</field> + <field name="model">leads.monitoring</field> + <field name="arch" type="xml"> + <tree create="false" multi_edit="1"> + <header> + <button name="action_refresh" string="Refresh" class="oe_highlight" type="object" /> + </header> + <field name="create_date"/> + <field name="lead_name"/> + <field name="contact_name"/> + <field name="partner_name"/> + <field name="email"/> + <field name="phone"/> + <field name="mobile"/> + <field name="salesperson"/> + <field name="type"/> + <field name="priority"/> + <field name="date_last_stage_update"/> + <field name="total_quotation"/> + <field name="total_sales"/> + <field name="stage_status" + widget="badge" + decoration-danger="stage_status == '1-Lead / Potensi Baru'" + decoration-warning="stage_status == '2-Proses Lain, Visit, Etc'" + decoration-success="stage_status == '3-Proses Quotation'" + decoration-info="stage_status == '4-Proses Negosiasi'" + /> + </tree> + </field> + </record> + + <record id="leads_monitoring_form" model="ir.ui.view"> + <field name="name">leads.monitoring.form</field> + <field name="model">leads.monitoring</field> + <field name="arch" type="xml"> + <form create="false" edit="false"> + <sheet> + <group> + <group> + <field name="lead_id"/> + <field name="create_date"/> + <field name="lead_name"/> + <field name="contact_name"/> + <field name="partner_name"/> + <field name="email"/> + <field name="phone"/> + <field name="mobile"/> + </group> + <group> + <field name="salesperson_id"/> + <field name="type"/> + <field name="priority"/> + <field name="date_last_stage_update"/> + <field name="total_quotation"/> + <field name="total_sales"/> + <field name="stage_status" + widget="badge" + decoration-danger="stage_status == '1-Lead / Potensi Baru'" + decoration-warning="stage_status == '2-Proses Lain, Visit, Etc'" + decoration-success="stage_status == '3-Proses Quotation'" + decoration-info="stage_status == '4-Proses Negosiasi'" + /> + </group> + </group> + </sheet> + </form> + </field> + </record> + + <record id="leads_monitoring_action" model="ir.actions.act_window"> + <field name="name">Leads Monitoring</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">leads.monitoring</field> + <field name="view_mode">tree,form</field> + </record> + + <menuitem + id="menu_leads_monitoring_in_sale" + name="Leads Monitoring" + parent="menu_monitoring_in_sale" + sequence="3" + action="leads_monitoring_action" + /> + +</odoo>
\ No newline at end of file |
