*** 请先建立资料夹 payment_sinopac,以下路径以 "/" 来代表此资料夹 ***
__manifest__
__manifest__
主要是跟odoo 沟通说这个模组的需求(depends)、介绍,以及资料设定(data)
/__manifest__.py
# -*- coding: utf-8 -*-
{
"name": """永丰金流""",
"summary": """13th IT铁人赛""",
"category": "payment",
"images": ['static/description/icon.png'],
"version": "14.00",
"description": """
永丰金流 消费支付模组
""",
"author": "大河",
"website": "https://mikuroda4402.github.io",
'depends': ['web', 'website_sale'],
"external_dependencies": {
"python": ['pycryptodome'],
"bin": []
},
"data": [
'security/payment_sinopac_access_rule.xml',
'security/ir.model.access.csv',
'views/payment_order_views.xml',
],
'installable': True,
"application": False,
}
__init__
这里跟建立 package 一样,
不管是否有python档案要被探索,
这个一定要建立(应该吧),因为今天会把 models 的部分建立出来,
所以这里先拓展探索
/__init__.py
# coding: utf-8
from . import models
odoo 的 addons 是 MVC 架构,model 就是代表 table 栏位,
很有趣的是在 odoo 里要开栏位不用 Migrate 直接在里面宣告即可
所以我们先建立 /models/order_sinopac.py
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class OrderSinopac(models.Model):
_name = 'order.sinopac'
_rec_name = 'order_no'
order_no = fields.Char(string='订单编号')
prdt_name = fields.Char(string='商品名称')
ts_no = fields.Char(string='丰收款交易编号')
ts_date = fields.Datetime(string='交易时间')
approved_date = fields.Datetime(string='授权时间')
pay_date = fields.Datetime(string='付款/请款时间')
amount = fields.Float(string='订单金额', digits=(10, 2))
status = fields.Char(string='处理状态')
description = fields.Char(string='处理讯息')
pay_status = fields.Char(string='订单付款状态')
pay_type = fields.Selection(
string='收款方式',
selection=[('A', 'ATM转帐'), ('C', '信用卡')]
)
expire_date = fields.Datetime(string='付款截止日期')
refund_flag = fields.Char(string='退款注记')
refund_status = fields.Datetime(string='退款状态')
refund_date = fields.Date(string='申请退款日期')
# ATM Param
atm_pay_no = fields.Char(string='转帐目的虚拟帐号')
web_atm_url = fields.Char(string='ATM 线上转帐网址')
otp_url = fields.Char(string='简讯动态密码付款网址')
back_no = fields.Char(string='金融机构代码')
acc_no = fields.Char(string='转帐帐号')
# Card Param
auto_billing = fields.Boolean(string='信用卡自动请款', default=True)
exp_billing_days = fields.Integer(string='预计自动请款天数')
exp_minutes = fields.Integer(string='信用卡付款廉洁有效时间(分钟)')
pay_type_sub = fields.Char(string='信用卡付款子项目')
card_pay_url = fields.Char(string='信用卡付款网址')
staging_first_amount = fields.Float(string='分期付款首期金额', digits=(10, 2))
staging_each_amount = fields.Float(string='分期付款每期金额', digits=(10, 2))
bonus_count = fields.Integer(string='红利折抵点数')
bonus_amount = fields.Float(string='红利折抵金额', digits=(10, 2))
bonus_pay_amount = fields.Float(string='红利折抵实付金额', digits=(10, 2))
bonus_last_count = fields.Integer(string='红利折抵剩余点数')
left_cc_no = fields.Char(string='授权卡後前6码')
right_cc_no = fields.Char(string='授权卡後後4码')
auth_code = fields.Char(string='授权码')
cc_exp_date = fields.Char(string='卡号有效期限')
cc_token = fields.Char(string='快速付款 Token')
order_id = fields.Many2one('sale.order', string='销售订单')
是不是忘了什麽?
models 资料夹被探索了,但没有探索到刚刚的 py 对吧
所以一样在 models 建立 __init__.py
/models/__init__.py
# coding: utf-8
from . import order_sinopac
有 model 当然要有 view (废话),而 odoo 写 view 所使用的结构是 xml
在模组资料夹里建立 /views
这里不需要建立 __init__.py
,因为这里并没有要建立 .py
建立一个 view,位置为 /views/payment_order_views.xml
视图
,有没有看到关键字 tree
,这视清单
要呈现的部分动作
,跟 odoo 通知说,这个 res_model 有哪些视图可被使用(若该对应视图不存在则会跑系统预设)<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="order_sinopac_tree" model="ir.ui.view">
<field name="name">永丰金流订单列表</field>
<field name="model">order.sinopac</field>
<field name="arch" type="xml">
<tree>
<field name="order_no"/>
<field name="prdt_name"/>
<field name="ts_no"/>
<field name="ts_date"/>
<field name="amount"/>
<field name="status"/>
<field name="description"/>
<field name="pay_status"/>
</tree>
</field>
</record>
<record id="action_menuitem_order_sinopac" model="ir.actions.act_window">
<field name="name">永丰金流订单</field>
<field name="res_model">order.sinopac</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="menuitem_order_sinopac" name="永丰金流订单"
action="action_menuitem_order_sinopac"
parent="account.root_payment_menu"
groups="base.group_user"
sequence="5"/>
</odoo>
自从 odoo 13版开始,没有设定对於model的存取权限时,
就算view 写好了、用管理员登入也看不到我们写的画面跟选单,
当然还是有无视权限的功能,但我只用过一次,早就忘了 :p
但还是推荐各位不要无视权限,不然要上线的时候会除错除到怀疑人生
回到主题,一样在模组里建立 security
资料夹
并在里面建立一个档案 ir.model.access.csv
(请注意,要命名一模一样,不然odoo不会理你)
/security/ir.model.access.csv
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
payment_sinopac_admin,model_admin_access,model_order_sinopac,payment_sinopac.group_manager,1,1,1,1
payment_sinopac_user,model_user_access,model_order_sinopac,base.group_user,1,0,0,0
还没完成,我们在csv有宣告一个权限组 group_manager
我们同样在这个资料夹建立另一个档案 payment_sinopac_access_rule.xml
/security/payment_sinopac_access_rule.xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<record model="ir.module.category" id="access_management">
<field name="name">永丰金流存取权限</field>
<field name="sequence">5</field>
</record>
<record id="group_manager" model="res.groups">
<field name="name">管理者</field>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
<field name="category_id" ref="payment_sinopac.access_management"/>
</record>
</data>
</odoo>
安装完成後会在会计的设定选单里,有个永丰金流订单
点选进去後就会看到我们刚刚建立的tree view
今天快速地跑过一次流程,很多细节没有细讲,若有任何问题或错误欢迎提出或指正
明天会把目前写的永丰金流sdk放上来
大家~ 今天文章会特别短Q 来讲一下静态网站可以部署到哪里呢?大家应该常听到 Github Page...
在第一个 API 中我们编写的 View,不知道大家有没有觉得非常简洁呢,好像没有写什麽代码,但是就...
前言 受惠於深度学习框架的多元性,开发者可以选自己喜欢的框架, 像是: Theano、Caffe、O...
这是第三十天!!! 到目前为止的范例程序码就在这个 repo https://github.com/...
Webpack 是什麽? 图片来源 Webpack 是一个打包工具,经常用於前端领域,能够将各个依赖...