-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
0ccbe94
commit 8925200
Showing
9 changed files
with
174 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
from . import models | ||
from . import wizard |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
from . import account_payment |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
from . import whatsapp_wizard |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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!') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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> |