Skip to content

Commit

Permalink
[ADD] asd_whatsapp: init
Browse files Browse the repository at this point in the history
  • Loading branch information
shaheedabd committed Mar 26, 2024
1 parent 0ccbe94 commit 8925200
Show file tree
Hide file tree
Showing 9 changed files with 174 additions and 0 deletions.
2 changes: 2 additions & 0 deletions asd_whatsapp/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import models
from . import wizard
22 changes: 22 additions & 0 deletions asd_whatsapp/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Copyright 2024 PT Arkana Solusi Digital
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
{
'name': "Pennyu - WhatsApp",
'summary': """WhatsApp for Pennyu""",
"author": "PT Arkana Solusi Digital",
"website": "https://arkana.co.id",
'category': 'WhatsApp',
'version': '0.1',
'depends': [
'base',
'account'
],
'data': [
'wizard/whatsapp_wizard_views.xml',
'views/account_payment_views.xml',
],
'installable': True,
'application': False,
'auto_install': False,
}
1 change: 1 addition & 0 deletions asd_whatsapp/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import account_payment
13 changes: 13 additions & 0 deletions asd_whatsapp/models/account_payment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from odoo import models

class AccountPayment(models.Model):
_inherit = 'account.payment'

def send_whatsapp_message(self):
whatsapp_wizard = self.env['whatsapp.wizard'].create({
'partner_id': self.partner_id.id,
'account_payment_id': self.id,
'type': 'payment',
'mode': 'direct',
})
return whatsapp_wizard.send_whatsapp_message()
Binary file added asd_whatsapp/static/description/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 changes: 22 additions & 0 deletions asd_whatsapp/views/account_payment_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.ui.view" id="view_account_payment_form">
<field name="name">account.payment.form.inherit</field>
<field name="model">account.payment</field>
<field name="inherit_id" ref="account.view_account_payment_form"/>
<field name="arch" type="xml">
<xpath expr="//header" position="inside">
<button name="%(asd_whatsapp.whatsapp_wizard)d" string="Whatsapp" type="action" class="oe_highlight" attrs="{'invisible': ['|', ('state', 'in', ('cancel'))]}"
context="{
'default_partner_id': partner_id,
'default_account_payment_id': id,
'default_type': 'payment',
}"
/>
<button name='send_whatsapp_message' string="Whatsapp (Direct)" type="object" class="oe_highlight" attrs="{'invisible': ['|', ('state', 'in', ('cancel'))]}"/>
</xpath>
</field>
</record>
</data>
</odoo>
1 change: 1 addition & 0 deletions asd_whatsapp/wizard/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import whatsapp_wizard
71 changes: 71 additions & 0 deletions asd_whatsapp/wizard/whatsapp_wizard.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
from odoo import models, fields, api
from odoo.exceptions import UserError
from datetime import datetime as dt

class WhatsAppIntegration(models.TransientModel):
_name = 'whatsapp.wizard'
_defaults = {
'mode': 'edit'
}

partner_id = fields.Many2one('res.partner', string='Recipient')
account_payment_id = fields.Many2one('account.payment')
send_message = fields.Text(string='Message', compute='_get_message_text', inverse='_set_message_text')
type = fields.Char()
mode = fields.Char(default='edit')
is_edited = fields.Char(default='')

def get_payment_text(self, data):
payment_id = data.account_payment_id
payment_date = dt.strptime(payment_id.payment_date, '%Y-%m-%d').date()
text = f"""Halo {data.partner_id.name if data.partner_id else 'N/A'},%0A%0A
%09Pembayaran anda pada tanggal {payment_date.strftime('%d')}-{payment_date.strftime('%b')}-{payment_date.strftime('%Y')} sejumlah Rp. {payment_id.amount:,} telah kami terima, apabila anda tidak melakukan konfirmasi, maka jumlah pembayaran akan kami anggap sesuai.%0A%0A
Terima kasih."""

return text

@api.depends('partner_id')
def _get_message_text(self):
for data in self:
if not data.is_edited:
text = ''
if data.type == 'payment':
if data.mode != 'direct':
data.account_payment_id = data.env.context.get('default_account_payment_id', False)
text = self.get_payment_text(data)
data.send_message = text
else:
data.send_message = data.is_edited

@api.depends('send_message')
def _set_message_text(self):
for data in self:
data.is_edited = data.send_message

def send_whatsapp_message(self):
user_phone_number = self.partner_id.phone or self.partner_id.mobile
message_body = self.send_message
self.is_edited = ''
if not user_phone_number:
raise UserError('No WhatsApp number is provided for this customer!')

if user_phone_number[0] == "+":
phone_number = [number for number in user_phone_number if number.isnumeric()]
phone_number = "".join(phone_number)
phone_number = "+" + phone_number
if 12 <= len(phone_number) <= 15:
link = "https://web.whatsapp.com/send?phone=" + phone_number
url_id = link + "&text=" + message_body
return {
'type':'ir.actions.act_url',
'url': url_id,
'target':'new',
'res_id': self.id,
}
else:
raise UserError('WhatsApp does not exists. Please add a valid WhatsApp number!')

else:
raise UserError('No country code! Please add a valid WhatsApp number along with country code!')
42 changes: 42 additions & 0 deletions asd_whatsapp/wizard/whatsapp_wizard_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="whatsapp_form_wizard" model="ir.ui.view">
<field name="name">whatsapp.form.wizard</field>
<field name="model">whatsapp.wizard</field>
<field name="arch" type="xml">
<form name="Send WhatsApp Message">
<group>
<field name="partner_id" widget="many2one"/>
</group>
<group>
<field name="type" invisible="1"/>
</group>
<group>
<field name="send_message" style='max-width:1150px; width: 500px' readonly="0"/>
</group>
<div id="instruction">
<span>
<b>Instructions:</b>
<ul>
<li>Use %0A for new line</li>
<li>Use %09 for a tab</li>
<li>Use *text* for bold</li>
</ul>
</span>
</div>
<footer>
<button string="Send Message" name="send_whatsapp_message" type="object" class="btn-primary"/>
<button string="Cancel" class="btn-secondary" special="cancel" />
</footer>
</form>
</field>
</record>

<record id="whatsapp_wizard" model="ir.actions.act_window">
<field name="name">Send Whatsapp Message</field>
<field name="res_model">whatsapp.wizard</field>
<field name="view_mode">form</field>
<field name="view_id" ref="whatsapp_form_wizard"/>
<field name="target">new</field>
</record>
</odoo>

0 comments on commit 8925200

Please sign in to comment.