From e36c1ec5be22025d288abbe8e8792dc44b2cfa4d Mon Sep 17 00:00:00 2001 From: yumoqing Date: Sat, 2 Aug 2025 00:27:44 +0800 Subject: [PATCH] first commit --- README.md | 123 +++++++++++++ json/agreedetail.json | 23 +++ json/agreedetailstep.json | 12 ++ json/agreement.json | 32 ++++ json/agreeproduct.json | 13 ++ json/biz_order.json | 12 ++ json/build.sh | 3 + json/choose_prodtype.json | 40 ++++ json/coupon.json | 12 ++ json/coupon_log.json | 12 ++ json/coupontype.json | 12 ++ json/paychannel.json | 12 ++ json/prodpricing.json | 20 ++ json/prodpricingtab.json | 12 ++ json/prodtype.json | 24 +++ json/prodtypespec.json | 15 ++ json/product.json | 24 +++ json/provide_agree.json | 30 +++ json/provide_agreedetail.json | 24 +++ json/provide_agreeproduct.json | 14 ++ json/recgarge_log.json | 12 ++ json/resource.json | 12 ++ json/retail_agree.json | 25 +++ models/agreedetail.xlsx | Bin 0 -> 16726 bytes models/agreedetailstep.xlsx | Bin 0 -> 16604 bytes models/agreement.xlsx | Bin 0 -> 19002 bytes models/agreeproduct.xlsx | Bin 0 -> 16608 bytes models/biz_order.xlsx | Bin 0 -> 16628 bytes models/biz_orderdetail.xlsx | Bin 0 -> 16303 bytes models/coupon.xlsx | Bin 0 -> 16162 bytes models/coupon_log.xlsx | Bin 0 -> 16068 bytes models/coupontype.xlsx | Bin 0 -> 16218 bytes models/distributionagreement.xlsx | Bin 0 -> 16674 bytes models/paychannel.xlsx | Bin 0 -> 15873 bytes models/pr_link.xlsx | Bin 0 -> 16038 bytes models/prodpricing.xlsx | Bin 0 -> 16842 bytes models/prodpricingtab.xlsx | Bin 0 -> 16823 bytes models/prodtype.xlsx | Bin 0 -> 15932 bytes models/prodtypespec.xlsx | Bin 0 -> 16145 bytes models/product.xlsx | Bin 0 -> 16301 bytes models/recharge_log.xlsx | Bin 0 -> 16368 bytes models/reseller.xlsx | Bin 0 -> 16053 bytes models/resource.xlsx | Bin 0 -> 16857 bytes platformbiz/biz.py | 10 + platformbiz/biz_order.py | 121 ++++++++++++ platformbiz/const.py | 2 + platformbiz/getdbname.py | 8 + platformbiz/init.py | 20 ++ platformbiz/pb_acc.py | 111 +++++++++++ platformbiz/pricing.py | 273 ++++++++++++++++++++++++++++ platformbiz/product.py | 59 ++++++ platformbiz/recharge.py | 51 ++++++ platformbiz/version.py | 1 + pyproject.toml | 4 + requirements.txt | 3 + script/roleperm.sh | 8 + setup.cfg | 15 ++ setup.py | 52 ++++++ tables.xlsx | Bin 0 -> 9100 bytes test/test_get_price_infos.py | 26 +++ test/test_open_agree_account.py | 12 ++ test/test_prodclone.py | 12 ++ test/test_prodpricing.py | 23 +++ test/testenv.py | 23 +++ wwwroot/agree_prodclone.dspy | 9 + wwwroot/agree_productauth.dspy | 7 + wwwroot/agreeproduct_auth.dspy | 7 + wwwroot/menu.ui | 27 +++ wwwroot/open_customer_accounts.dspy | 18 ++ wwwroot/open_owner_accounts.dspy | 6 + wwwroot/owner.operator.menu.ui | 33 ++++ wwwroot/recharge.dspy | 17 ++ wwwroot/recharge.ui | 38 ++++ wwwroot/reseller.operator.menu.ui | 30 +++ 74 files changed, 1544 insertions(+) create mode 100644 README.md create mode 100644 json/agreedetail.json create mode 100644 json/agreedetailstep.json create mode 100644 json/agreement.json create mode 100644 json/agreeproduct.json create mode 100644 json/biz_order.json create mode 100755 json/build.sh create mode 100644 json/choose_prodtype.json create mode 100644 json/coupon.json create mode 100644 json/coupon_log.json create mode 100644 json/coupontype.json create mode 100644 json/paychannel.json create mode 100644 json/prodpricing.json create mode 100644 json/prodpricingtab.json create mode 100644 json/prodtype.json create mode 100644 json/prodtypespec.json create mode 100644 json/product.json create mode 100644 json/provide_agree.json create mode 100644 json/provide_agreedetail.json create mode 100644 json/provide_agreeproduct.json create mode 100644 json/recgarge_log.json create mode 100644 json/resource.json create mode 100644 json/retail_agree.json create mode 100644 models/agreedetail.xlsx create mode 100644 models/agreedetailstep.xlsx create mode 100644 models/agreement.xlsx create mode 100644 models/agreeproduct.xlsx create mode 100644 models/biz_order.xlsx create mode 100644 models/biz_orderdetail.xlsx create mode 100644 models/coupon.xlsx create mode 100644 models/coupon_log.xlsx create mode 100644 models/coupontype.xlsx create mode 100644 models/distributionagreement.xlsx create mode 100644 models/paychannel.xlsx create mode 100644 models/pr_link.xlsx create mode 100644 models/prodpricing.xlsx create mode 100644 models/prodpricingtab.xlsx create mode 100644 models/prodtype.xlsx create mode 100644 models/prodtypespec.xlsx create mode 100644 models/product.xlsx create mode 100644 models/recharge_log.xlsx create mode 100644 models/reseller.xlsx create mode 100644 models/resource.xlsx create mode 100644 platformbiz/biz.py create mode 100644 platformbiz/biz_order.py create mode 100644 platformbiz/const.py create mode 100644 platformbiz/getdbname.py create mode 100644 platformbiz/init.py create mode 100644 platformbiz/pb_acc.py create mode 100644 platformbiz/pricing.py create mode 100644 platformbiz/product.py create mode 100644 platformbiz/recharge.py create mode 100644 platformbiz/version.py create mode 100644 pyproject.toml create mode 100644 requirements.txt create mode 100755 script/roleperm.sh create mode 100644 setup.cfg create mode 100755 setup.py create mode 100644 tables.xlsx create mode 100644 test/test_get_price_infos.py create mode 100644 test/test_open_agree_account.py create mode 100644 test/test_prodclone.py create mode 100644 test/test_prodpricing.py create mode 100644 test/testenv.py create mode 100644 wwwroot/agree_prodclone.dspy create mode 100644 wwwroot/agree_productauth.dspy create mode 100644 wwwroot/agreeproduct_auth.dspy create mode 100644 wwwroot/menu.ui create mode 100644 wwwroot/open_customer_accounts.dspy create mode 100644 wwwroot/open_owner_accounts.dspy create mode 100644 wwwroot/owner.operator.menu.ui create mode 100644 wwwroot/recharge.dspy create mode 100644 wwwroot/recharge.ui create mode 100644 wwwroot/reseller.operator.menu.ui diff --git a/README.md b/README.md new file mode 100644 index 0000000..6202ff4 --- /dev/null +++ b/README.md @@ -0,0 +1,123 @@ +# platformbiz +平台业务模块,包括业务功能和对应的数据表设计 + +## 依赖 + +* 记账模块[accounting](https://git.kaiyuancloud.cn/yumoqing/accounting) +* 鉴权模块[rbac](https://git.kaiyuancloud.cn/yumoqing/rbac) +* 支付模块[payment](https://git.kaiyuancloud.cn/yumoqing/payment) + +## 功能 + +### 平台机构功能 +#### 供应商管理 +##### 供应商协议 +##### 协议明细 +##### 阶梯折扣管理 +##### 分销产品管理 +##### 供应商接口测试 + +#### 机构用户管理 + +### 客户机构功能 +#### 账户管理 +##### 充值 +##### 提现 +##### 账户明细查询 +#### 订单管理 +##### 订单查询 +##### 取消订单 +##### 订单支付 +##### 重复购买 + +#### 账单管理 +##### 账单查询 +#### 资源管理 +##### 资源续费 +##### 资源退订 +##### 重复购买 +##### 资源入口 + +#### 产品浏览 +##### 产品比价 +##### 产品种类浏览 +##### 产品热卖 +##### 商户推荐 + +#### 购买 +##### 产品配置 +##### 产品询价 +##### 加入购物车 +##### 立即购买 +##### 支付 +##### 记账 +###### 记账角色 +* 客户:产品购买方 +* 商户:产品售卖方 +* 分销方:产品分销协议分销方 +* 供应方:产品分销协议供应方 +* 平台:算力平台 +###### 分录设置 +* 借: 客户 客户资金账户 交易金额 +* 贷: 商户 商户交易费支出 交易金额 * 交易费率 +* 借: 平台 平台交易费收入 交易金额 * 交易费率 +* 借: 商户 商户交易费支出 交易金额 * 交易费率 +* 借: 分销方-供应方 商户采购成本 采购金额 +* 贷: 分销方 客户资金账户 交易金额 - 采购金额 - (交易金额 * 交易费率) +* 借*: 商户-分销方 供应商分销收入 交易金额1 +* 贷*: 商户-供应方 商户采购成本 采购成本1 +* 贷*: 商户 客户资金账户 交易金额1 - 采购成本1 + +#### 参与商户营销 +##### 商户获客营销 +##### 参与售卖营销 + +### 商户机构功能 + +#### 成为商户 +在客户用户界面点击【成为商户】,系统自动将此平台客户添加商户角色,成为平台商户 +并为其开通商户经营所需的记账账号。 +与平台或平台其他商户(供应商)线下协商成为其产品的分销商 + +#### 添加不同角色的用户 + +#### 发展分销商户(自己成为分销商户的供应商) +新添一个分销协议,在协议中添加协议明细,设置分销折扣,或阶梯折扣,将自己的产品授权给分销商销售。 +##### 供应商添加分销协议 +##### 供应商添加协议明细 +##### 供应商添加协议明细步骤(只有阶梯折扣协议才需要) +##### 供应商添加分销产品到分销协议 +##### 商户设置一个无指定客户的分销协议 +#### 自有产品管理 +##### 添加自由产品 +##### 自有产品区域管理 +##### 自有产品数量管理 +##### 自有产品计价管理 +##### 自有产品计价表管理 + +#### 设置产品销售折扣或价格 +##### 公用产品折扣设置 +为所有客户提供一个以产品计价为基础的折扣 +##### 为指定客户设置特殊折扣 + +#### 主推产品管理 +#### 大屏功能 +##### 展示位置设置 +##### 展示指标管理 +##### 大屏风格设置 + +#### 短信管理 +##### 开通短信功能 +##### 通知场景管理 +##### 短信计费 + +### 产品购买 +#### 标的 +卖房提供的产品 +#### 参与方 +* 卖房 +* 买房 +* 平台 +* 供应方 +#### 分录设置 +借:买方- \ No newline at end of file diff --git a/json/agreedetail.json b/json/agreedetail.json new file mode 100644 index 0000000..66a1641 --- /dev/null +++ b/json/agreedetail.json @@ -0,0 +1,23 @@ +{ + "tblname":"agreedetail", + "params":{ + "browserfields": { + "exclouded": ["id", "agreeid"], + "alters": {} + }, + "editexclouded": [ + "id", "agreeid" + ], + "subtables":[ + { + "field":"agreedetailid", + "title":"协议产品", + "params":{ + "agreeid":"${agreeid}", + "prodtypeid":"${prodtypeid}" + }, + "subtable":"agreeproduct" + } + ] + } +} diff --git a/json/agreedetailstep.json b/json/agreedetailstep.json new file mode 100644 index 0000000..bd63014 --- /dev/null +++ b/json/agreedetailstep.json @@ -0,0 +1,12 @@ +{ + "tblname":"agreedetailstep", + "params":{ + "browserfields": { + "exclouded": ["id"], + "alters": {} + }, + "editexclouded": [ + "id" + ] + } +} diff --git a/json/agreement.json b/json/agreement.json new file mode 100644 index 0000000..9f4bf39 --- /dev/null +++ b/json/agreement.json @@ -0,0 +1,32 @@ +{ + "tblname":"agreement", + "params":{ + "toolbar":{ + "tools":[ + { + "name":"prodauth", + "selected_row":true, + "label":"授权" + } + ] + }, + "binds":[ + { + "wid":"self", + "event":"prodauth", + "actiontype":"urlwidget", + "target":"PopupWindow", + "options":{ + "url":"{{entire_url('../agree_prodclone.dspy')}}" + } + } + ], + "browserfields": { + "exclouded": ["id"], + "alters": {} + }, + "editexclouded": [ + "id" + ] + } +} diff --git a/json/agreeproduct.json b/json/agreeproduct.json new file mode 100644 index 0000000..5866643 --- /dev/null +++ b/json/agreeproduct.json @@ -0,0 +1,13 @@ +{ + "tblname":"agreeproduct", + "params":{ + "logined_userorgid":"orgid", + "browserfields": { + "exclouded": ["id", "agreedetailid"], + "alters": {} + }, + "editexclouded": [ + "id", "agreedetailid", "resellerpid" + ] + } +} diff --git a/json/biz_order.json b/json/biz_order.json new file mode 100644 index 0000000..9f55b9d --- /dev/null +++ b/json/biz_order.json @@ -0,0 +1,12 @@ +{ + "tblname":"biz_order", + "params":{ + "browserfields": { + "exclouded": ["id"], + "alters": {} + }, + "editexclouded": [ + "id" + ] + } +} diff --git a/json/build.sh b/json/build.sh new file mode 100755 index 0000000..e596dff --- /dev/null +++ b/json/build.sh @@ -0,0 +1,3 @@ +#!/usr/bin/bash + +xls2ui -m ../models -o ../wwwroot platformbiz *.json diff --git a/json/choose_prodtype.json b/json/choose_prodtype.json new file mode 100644 index 0000000..8baf780 --- /dev/null +++ b/json/choose_prodtype.json @@ -0,0 +1,40 @@ +{ + "tblname":"prodtype", + "uitype":"tree", + "alias":"choose_prodtype", + "params":{ + "toolbar":{ + "bar_cwidth":2, + "tools":[ + { + "name":"test", + "selected_data":true, + "label":"TEST" + } + ] + }, + "binds":[ + { + "wid":"self", + "event":"prodauth", + "actiontype":"urlwidget", + "target":"PopupWindow", + "options":{ + "url":"{{entire_url('platformbiz/ag.dspy')}}", + "params":{ + "agreedetailid":"{{params_kw.agreedetailid}}" + } + } + } + ], + "idField":"id", + "textField":"name", + "editable":true, + "browserfields":{ + "alters":{} + }, + "edit_exclouded_fields":["del_flg", "create_at"], + "parentField":"parentid" + } +} + diff --git a/json/coupon.json b/json/coupon.json new file mode 100644 index 0000000..74ad971 --- /dev/null +++ b/json/coupon.json @@ -0,0 +1,12 @@ +{ + "tblname":"coupon", + "params":{ + "browserfields": { + "exclouded": ["id"], + "alters": {} + }, + "editexclouded": [ + "id" + ] + } +} diff --git a/json/coupon_log.json b/json/coupon_log.json new file mode 100644 index 0000000..87b4fc0 --- /dev/null +++ b/json/coupon_log.json @@ -0,0 +1,12 @@ +{ + "tblname":"coupon_log", + "params":{ + "browserfields": { + "exclouded": ["id"], + "alters": {} + }, + "editexclouded": [ + "id" + ] + } +} diff --git a/json/coupontype.json b/json/coupontype.json new file mode 100644 index 0000000..b6b3518 --- /dev/null +++ b/json/coupontype.json @@ -0,0 +1,12 @@ +{ + "tblname":"coupontype", + "params":{ + "browserfields": { + "exclouded": ["id"], + "alters": {} + }, + "editexclouded": [ + "id" + ] + } +} diff --git a/json/paychannel.json b/json/paychannel.json new file mode 100644 index 0000000..ffc3471 --- /dev/null +++ b/json/paychannel.json @@ -0,0 +1,12 @@ +{ + "tblname":"paychannel", + "params":{ + "browserfields": { + "exclouded": ["id"], + "alters": {} + }, + "editexclouded": [ + "id" + ] + } +} diff --git a/json/prodpricing.json b/json/prodpricing.json new file mode 100644 index 0000000..194d663 --- /dev/null +++ b/json/prodpricing.json @@ -0,0 +1,20 @@ +{ + "tblname":"prodpricing", + "params":{ + "browserfields": { + "exclouded": ["id", "prodid" ], + "alters": { + } + }, + "editexclouded": [ + "id", "prodid" + ], + "subtables":[ + { + "field":"prodpricingid", + "subtable":"prodpricingtab", + "title":"产品定价表" + } + ] + } +} diff --git a/json/prodpricingtab.json b/json/prodpricingtab.json new file mode 100644 index 0000000..0ac556c --- /dev/null +++ b/json/prodpricingtab.json @@ -0,0 +1,12 @@ +{ + "tblname":"prodpricingtab", + "params":{ + "browserfields": { + "exclouded": ["id", "prodid"], + "alters": {} + }, + "editexclouded": [ + "id", "prodid" + ] + } +} diff --git a/json/prodtype.json b/json/prodtype.json new file mode 100644 index 0000000..08179a7 --- /dev/null +++ b/json/prodtype.json @@ -0,0 +1,24 @@ +{ + "tblname":"prodtype", + "uitype":"tree", + "params":{ + "idField":"id", + "textField":"name", + "parentField":"parentid", + "editable":true, + "browserfields": { + "exclouded": ["id", "parentid" ], + "alters": {} + }, + "editexclouded": [ + "id", "parentid" + ], + "subtables":[ + { + "field":"prodtypeid", + "title":"产品类型", + "subtable":"prodtypespec" + } + ] + } +} diff --git a/json/prodtypespec.json b/json/prodtypespec.json new file mode 100644 index 0000000..6f538c4 --- /dev/null +++ b/json/prodtypespec.json @@ -0,0 +1,15 @@ +{ + "tblname":"prodtypespec", + "params":{ + "browserfields": { + "exclouded": ["id", "prodtypeid"], + "alters": {} + }, + "data_params":{ + "prodtypeid":"${params_kw.id}" + }, + "editexclouded": [ + "id", "prodtypeid" + ] + } +} diff --git a/json/product.json b/json/product.json new file mode 100644 index 0000000..ce0cd3a --- /dev/null +++ b/json/product.json @@ -0,0 +1,24 @@ +{ + "tblname":"product", + "params":{ + "logined_userorgid":"orgid", + "browserfields": { + "exclouded": ["id", "orgid", "providerid", "agreeid", "providerpid" ], + "alters": { + } + }, + "editexclouded": [ + "id", "orgid", "providerid", "agreeid", "providerpid" + ], + "subtables":[ + { + "field":"prodid", + "params":{ + "prodtypeid":"${prodtypeid}" + }, + "subtable":"prodpricing", + "title":"产品定价" + } + ] + } +} diff --git a/json/provide_agree.json b/json/provide_agree.json new file mode 100644 index 0000000..f163166 --- /dev/null +++ b/json/provide_agree.json @@ -0,0 +1,30 @@ +{ + "tblname":"agreement", + "alias":"provide_agree", + "params":{ + "title":"供应协议", + "logined_userorgid":"resellerid", + "browserfields": { + "exclouded": ["id", "resellerid" ], + "alters": { + "providerid":{ + "uitype":"search", + "search_event":"row_selected", + "search_url":"{{entire_url('../select_org')}}", + "valueField":"id", + "textField":"orgname" + } + } + }, + "subtables":[ + { + "title":"协议明细", + "subtable":"provide_agreedetail", + "field":"agreeid" + } + ], + "editexclouded": [ + "id", "resellerid" + ] + } +} diff --git a/json/provide_agreedetail.json b/json/provide_agreedetail.json new file mode 100644 index 0000000..df6691f --- /dev/null +++ b/json/provide_agreedetail.json @@ -0,0 +1,24 @@ +{ + "tblname":"agreedetail", + "alias":"provide_agreedetail", + "params":{ + "browserfields": { + "exclouded": ["id", "agreeid"], + "alters": {} + }, + "editexclouded": [ + "id", "agreeid" + ], + "subtables":[ + { + "field":"agreedetailid", + "title":"供应协议产品", + "params":{ + "agreeid":"${agreeid}", + "prodtypeid":"${prodtypeid}" + }, + "subtable":"provide_agreeproduct" + } + ] + } +} diff --git a/json/provide_agreeproduct.json b/json/provide_agreeproduct.json new file mode 100644 index 0000000..ba691ee --- /dev/null +++ b/json/provide_agreeproduct.json @@ -0,0 +1,14 @@ +{ + "tblname":"agreeproduct", + "alias":"provide_agreeproduct", + "params":{ + "logined_userorgid":"orgid", + "browserfields": { + "exclouded": ["id", "agreedetailid", "resellerpid"], + "alters": {} + }, + "editexclouded": [ + "id", "agreedetailid", "resellerpid" + ] + } +} diff --git a/json/recgarge_log.json b/json/recgarge_log.json new file mode 100644 index 0000000..8af16b5 --- /dev/null +++ b/json/recgarge_log.json @@ -0,0 +1,12 @@ +{ + "tblname":"recharge_log", + "params":{ + "browserfields": { + "exclouded": ["id"], + "alters": {} + }, + "editexclouded": [ + "id" + ] + } +} diff --git a/json/resource.json b/json/resource.json new file mode 100644 index 0000000..9cfdcd1 --- /dev/null +++ b/json/resource.json @@ -0,0 +1,12 @@ +{ + "tblname":"resource", + "params":{ + "browserfields": { + "exclouded": ["id"], + "alters": {} + }, + "editexclouded": [ + "id" + ] + } +} diff --git a/json/retail_agree.json b/json/retail_agree.json new file mode 100644 index 0000000..d21e86e --- /dev/null +++ b/json/retail_agree.json @@ -0,0 +1,25 @@ +{ + "tblname":"agreement", + "alias":"retail_agree", + "params":{ + "title":"分销协议", + "sortby":"name", + "logined_userorgid":"providerid", + "logined_userid":"provideruid", + "browserfields": { + "exclouded": ["id", "providerid", "provideruid" ], + "alters": { + "resellerid":{ + "uitype":"search", + "search_event":"row_selected", + "search_url":"{{entire_url('../select_org')}}", + "valueField":"id", + "textField":"orgname" + } + } + }, + "editexclouded": [ + "id", "providerid", "provideruid" + ] + } +} diff --git a/models/agreedetail.xlsx b/models/agreedetail.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3c1f45a295b2603529ff7aa8d3230773f3f1eaa9 GIT binary patch literal 16726 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 literal 0 HcmV?d00001 diff --git a/models/agreedetailstep.xlsx b/models/agreedetailstep.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..be4ea04f5b434f096861b4595e3e00e4c842996f GIT binary patch literal 16604 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 I&Yye#4|w;fasU7T literal 0 HcmV?d00001 diff --git a/models/agreement.xlsx b/models/agreement.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2cf4c6a1a1ad643ddde60624663736ca41a4a884 GIT binary patch literal 19002 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 literal 0 HcmV?d00001 diff --git a/models/biz_order.xlsx b/models/biz_order.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..af31e66c701b5751e96c48aa1c87ebad213a4495 GIT binary patch literal 16628 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 Ay#N3J literal 0 HcmV?d00001 diff --git a/models/biz_orderdetail.xlsx b/models/biz_orderdetail.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ce66b8b8463a3a6663bd9006f542045ae892adfb GIT binary patch literal 16303 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

d*Yr7l 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 literal 0 HcmV?d00001 diff --git a/models/coupon.xlsx b/models/coupon.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7b7e2e32e7daddcf685e0f1e6bc1502aaadeec8f GIT binary patch literal 16162 zcmeHu7wG=onxg_aBt8UOs|c??v)Y*$0(26YjnyvJr49_D8FUEZwIoVe==+AT_9 z19f)Et_Zv~j8>*^pk?_xsh-?iq0<`!uC$(kIq)@J6G7IAP*;eFk-J3=c zWF8gx#n~OT0iuS5+?B^Q!;O0kiQU3L+W}usGj8LVusnlB1%b*;jCL_?N;@?vgua`! z7*xs`FGCQUz#O$Ni^42c?CU%)DonEtt_pCoF9s<5arqt;cuN+2PA(L9&48DC1w7&d zl$l%Jw-T~6K1k4hW#BAsg7_o;!*nmC%iduy0j?f}b3Ht!E%8n6D5=YxD=OQ(j^imk zG!Q~E+x`wZwC0%WWKQq1nROA6f!s~s@ZOXBa}8#?16IAZ5C?$Ey}yG3DgGO8QT4mb zKmfem0?-l`z*_@nGg}u1`d{b&^7a2PN&oV%SH#Q7fHEP4Uk1MuPjvFEQIpKtGKd|? znZ5!urM((*q{S7qz21upx#l(zcxP05WO=3Cnb+le<|FyIqa=$#2WObiwX65ZytcGJ zA}2VDN1sXd1(Dd6otEFRL{snQF5mG-R(#J3r6+$6#B!5R9}MPe)wSZ(OmfE3zLiES zBiBvZ#}D7aQJiEQoRWm%aRJTaf9QDZVCRslwi@?#7%e2Fi7OJFiqm?CTM<6_!Ir0< zTS(Sh<3DyBG4@Pi0!r{f`!)OM(&n48vN(BII%wv>;~6J-Lq~y_3u?f6nz-*FV+S*0 zv8Fx4Xx=?jEuYDh#xw`Y)Mnk&-%iqb|1DWWN9$&j>19rr5-xWR_7k5kKi3ihdEtJXRE8P zFd9^71Iq!7C1mrNHMn^#z>V%1=yUY9cnP5q?4xzG=qj>+X?=pG3}Pz1l10lnU!c9` z+c*1rm`V~4=+h#J165XOebl>YVMBe9Vn#+jOAe~&bF|i3^*oJ7DK(<+jIyDb)>pUE z3HY$1=e3S+D>FQY?~QU=>|A)V{uhFC@UTIw4Hv+)Dor5qFU1IWq?pa;8ZN5=I6i$i zf%ISjbZEP#`ypN#sNw5`z2K&_gP!92;hsBT1N^C$Mp&2T@nJ?NTjuPr{kFc0r(s5m z{HeuSpoQufksNjO48^U?cJF-=Q4pg zdJg%VXnqD(@1Qq4Y)C}FNipdt4N0p?3!@F~3Q3^ywbqO#vi#<(?|#+9aje*tb(xe* z%l!Q7u`Ud)FAY>JwRv^sc~NnGM#Le>r6Zb;IJwn71~Q29)e9z|Fv+85k{6HW7P13$ ztHOMBpsvk5MF>Ooh;7_i3tVq@>gj6U%~4hU}&ILMh5<&^{)_j0PNC8J@B;cRv# z3&(>)Hghyt*pm7BJ*;5B$-k2=b9<@wDpOh4s$vR8^W-bMG}GCxT?*H5MfZBi(kHtP zx*|Z97rYCVzXXkMC9Etu)UOa#s?!jIU540h8h#C_qECsME0%AAC@q^Vm`VFSvR$BF zA4QceW(lWKTl5T$h+S7&1ixEjvzE*v^k5zLBP0}h?=78%S|;x(ni5^o&f@8EtZct) z6g*?0q(V zBw{YLm-jegDK|7m&rPkR4MGXvs6-=%Mo4n_mhR|FqIH82m|#SzDfdRN@_Zg|Di!Qi z27wArN8jNaSqBVAbK_Q%AKV1dlb=o>uU(U)KB&BZ;3R!zL@!W!q_0lr7N#e=Ha*R< zeZpUZ!A(A&d@wraFX|$If8A6#uemT(h^jj61i77G=B;N&J%!>5;sCC0dR@nTWYlYJ zpQcse5~K(UceM#n`k5Xw>b|X0BdI*7?kbOgjAKQJXJ;9@iH+p}L2<=&cQqyGYiP8_ z-8=i!I*&5e%#-oIg#DPWU*%Qiud5py}9u#MFInX`k8%>|q;?Knp z)a_wMV^?30O}wk%K_NqnrmdP+o=%?xKIE?|{V?NT@pP zhDI&U4a&TNe-R|lPC$#Ds@MZ%e<7pg>3?xb8&y~3dQGWHmSWOJ>vgWhf>4S_2zm5u zfI84(*X657{#=38`E8{EW!cC8ok{V~l|X?&8E2~K^@SI9c@6d}r#gQS*aeWwK;p}S zHlNdh&c_h<+P4cxyzxCMov_+=F;V3p`{JUx+C@%0nz$oWHKD-v z+g`IPn_2mQbs|>4$Xx_0vzT{ajRvh?+ilWL#K>GsMCH(CVW6IHS?TNP>_G*rAj~2- zky)f>psHp=Xdbay9vdpSWWOkIpBOMovCNw#xR}V8=%X7@==mz)7y64QE)iHH_6?vo z&W+~J5gP9h|Nr_~C*)xI7?B3A%R{*W(M8u;H(H#DJ;N+N5SIMtGcED-(IIZX_xb#; z$r4)0YkxvAKwn=B%Jr=NlZ;aYV^N)mRn`RlQ?-!Fmjivg$vJ-yl4A1xF8I55g3%45 za1V_G#(I10AILQ^jXb_N)5&RePk+m(QYry?b^xPjp#LMI*#5z&QG3AEhF>NlbLwUsE$(^Zd5Y4ej=Le4jg%ZVJi7%YMav%nu{@i8P zvn_3wc>rv%5&Sp=%&;b>T}vxvpLQ@igHP;n$Y`r31&pX(!J1kV!l}q>_|}yiy*1as z30d5#Q-){6;;Mv6O12O zz1~#ue(Z9D)3-13rvk7E2x%dWQIMX3W+{b|Z5(g8igH2`^;9Iv zV}=^Gf@e`I%Tdspztxb5W+%}a=54xv8CLISh?!{pn5LFp2gjz5(LqD5>RZ^?%XQ*g z?fwJISqbvRIYQ{|Pv>_{w1MdpgbS@E=@gVR;Mas5(l3bEWTN=rFs44%vyM%7L(hmDLmXuBW?v}X)awLM65L9h`TtcEEFsL5Oy$nAYTp%ZTs& zT@vqX&2>gPBk|1mY}#q=zTN{0|9{2<))*m}K1DduY7}Q6nuv&*t!Ns|;2Bh3yH&z@ zvI3=Vb2@_;2b13?=hamyAADVp)Qq>tb%_VYDRYnH_l5ZDVASR8ymCZ-2APG@+D7?)b9&?fqDK7W-uV2KKTF0HTHjSO)hqg=nt+DBHe@Sdgc#A)|WNu zxjCpU*iD1QnxHY#$Hl5Gyl?i_W=e9gYMZiPz3}%l_McpvvT_Cf7-I+Dp9@8?ETB`X zr#m{0Jsb^2Arw`CvBRZ2!u5P=d3!K&Yp_4G2^5T*c?e!4Zs0P}Uo;HOUd6!CEv;Z7 z*)CpV-r`0w`@o!DD8+0cUJ{-K-P-=qs9aj=!FGRB5OoR(QX6c&yISoOGX2Z_c9dhg zAJ3P?hKOa#%03-H3u)xVY)$h6JI*fuwXCGG^FzVI6a>e{OZ12Qg8EH$qexTt%^!9T zGEJt!F$HT6mwi`JT%0ATJ+Rb%TgeaoBhm~tD?CO&kTGJ%_kGkbZWU&mp|uIxP2){# z+pPnRz165E9HSyROJJTp9U6E_uXrz@&nSRP1h7%m5^yYDeD8yOl0w=M3W-V*0!s(w z4O;v%P+JsmuS)R6)>JSUx^7#KDi_5EpFUyS>7t#_AH1;= z^es*7!>l!#u|ia&2fU1I2DcAhpbGzVyw{W9r}byU$?ejV?6A}{`3QF;^SMDzh4*4b<$1i{|`%ho>P5u_sM}#C6Fn9&p zh@r?~mk@SCJd}DicQJ(X`U(!I)53BpV`7isZD=0(`r_8QUNm>k`g19J_<*}a-R@v( z?jBFT4~y;RA)0@YtD;0>E4+2gvERJj*7|T4m&HJ590jDlX8tJ~Y85ovz~K!~yO|U! zJmzF(N!qN?;9*^dolpYl>U_k90-CNu5vLeSod6jk(G-cMlzWr_DbAb3MW2XFMiFN(D(P`$c_E_kA*=nWP{jdwbCz ziHisLKM^J15(iOl7Ig)4U_pu3*CT(K;3>vn9cd|y=(qrDtvzWa3qo;heLkQHOAF)X ziNQK^5iUy`wBLycQi2L~{1IZArOfHVsW^-bTfYxYHA#27E-J~pxZh}Qjo0r7y%bZ4JcNQxGNd6LVO`~N1 z0T&6pn)wzuN=XzdEpR9rwwGq0;4ozLc4m%xbCV27uf<30v-f_WZS7E(LRp~%5iqn`?`t$PB0^J{;dGQ<67xtUMOUKoS$$|x(StJm ziysTTS$AK(8zBcb+st4GS1trMBtyf)@YwNhL`^o4MnOzCe2}*iL=sQ_aH-$pjJIp% zr+&a+<^k*1|4=2f{Ig2_6=wngIsI3hS^Fv;ZDyfXsQoL>45w{7MfLTAXPBzpb$j&K z6f4tz(`Ju?Jot*8T1vp6{RI_})l03qCVpjg(#hN+fi3|$e&z3=9Pk>8fRxlTH+=r= zv9QvXe+dL46nxEgE_@_2)Nv%}(%ry^rE66=$Gct4!??w>Eyp|?iLTXTo-QLIA$)vc zwA_>g!mq<*$!HY%E33bBC3I$6YOjaPt>b_6C$6|au1%2+PXQ|w{e1IiSh4F9=4Eh$ zj=A^!itfrMb)D=r`U729{brNVCsXzz->+}sc37A!$L#OzjE|9AoTHvW8miY#aW{x8 z#n@~E_HJ-Xvc%~|I0xPHWJzTLOO(QiJ@vN1vg==MBJo}kwzUNdP7k8{zQmv_% z`uj_BKEIoyj5|4;Gtu+re}#i4K#S1C3f*-L#-~(MDL{JXVUi&F`f2TiTH&@>wZ{N| z#RZY4+<%n9b(w0J628G#ai?s3qRrvw3;13xY>NweK889mvP2#^I}Sm_K?-ZOgkexL z1q5M57OyBv^4Z%TMcW_Qq>gGzQjX3^idL$jo@$IigR)MISyh>mUUGs4qOKw;>C84> zC^$y&8;VY$F;Vx#RF62|BrbqWeHcn>VHr$)97SRUlQIvv3eh|Z_cdvXNJ)oWh1@Sk z&v4-hYWUYE=%2x9B0dErbjSOyD=yduTo`8-~NJW%*hbd>vZkl_e@yP&M9 zS|y?yukMx{Gz4VUrA{e#^dN`pcAu#7k;$9Fb~7&^Js2v)CIi47qJe+-II@ls)tXK3 zc!3`sen5pF26@`pUmM4+2hIHh!xZ9bNb7E1L5nW4s%M57fnd{ zQJ^c%Zv!KnR=x22HSay1E4`%Jvg(!rTCeAB+G51gJ57HLhG-y==`~ezAQ(L(XB1 z9jgm*IRMF1EaXNja7k#WJ%c+~FttK0NQ!-vatx|fe4;9(jj~KA zIHhKiRgYHA4zr7rR+*g}DMYmlgEgSFX&Tcw<&!FS}*N=Wi$3$VkRNP0NOs zM$*3B5$%X6Vb$JTig?C*=35Tkt(7D=J=I#1;M-hJ6v2g2h1@!3OD@lcozy^eB&D%s z`m|hm3b=_P#k)w!EaBmk)ulD~g7|(2J5=KX{M62P&(p`9Ygp=D%POr3`fzYo;pDuw z_4WE6oH2eJFrC+4oRKd*p513fDp?8Pd(e@xR9v7OuJHIGkFapx`9hGe2J)To9*nyN-86;w3?!Y|u5IA+H=_ z0~d9PSjs~T+DM42EP8-|**Zysv{19y>iY`6HYKNaEK9h5gY3y)_w!3fNU@r9J|6~m z$uy!UViwc}XimSFFU>;riL;ccb(O&u%Z>ru<5z9U8}0aD_UA+aX<$LVW6<5KXkQu# zs~zs=U3X2PZ%IfaSfm(kag^eOVbT*#X-qk&tyk) z&-d@IKb8c|liAE1i7j37r*k%7YSK7-3f=D(M2^ebzFpzNfDwHFuS#p%d`-*od&Z2P zYYQ!Kt=FH!&5im5cD@E6_>mY+2mLI-*aL7x%6pQQI* zN3HJM&U`!(SIYzv`7`n&(*~lwFU+$2!1q@J7GbBJ`p<&j_WD2NksBr6x1O-D;)Rh3 z-P6c(`cY)O?mGSaN0a3Ds-Q&?7`Y1&98TeYfYAOK94w8T%}iBXovrLG{)iD38U_xi z5=a5n^OuGjpd~0fwj{aVR}X+oQ5^gz71Yq}E*F1Nd9*LJyCvR^hEZt7Eeerv!W0F? z396z)&LX`H#9an=_*|nJ1aW1f&VPkRcPI34Kk#7r@ii@zMmOVbeF6?%_+x$E7oM+d z%!yj-?wW;`x{q&bpQ@u}DWU2=jbqc{xUjO)CwIN%A%&BGHqp}Js1d((ScR)6d6V&u z`;BcEO@PKiaYCT8+=5D<)kv3K>Hg4V_u0IS=#PpTw2|%c_~0U5G?bBTbE{0!>bOaX zE?lgNL@v&&%_vrCICLmVfwx1FOUOw8eK6aGfjqyT)UaHOe3TK(s5eHPm+p}&X|pyz z`$=okZB${I>ua*qq!=Z}J@1%ksyL!pAU~ATHm@hz(e=wMcw8Wmd4!G#R4oZ|PuGEq zs3kK9dQXeI*GZ^oc3FhO>=RHth7bl`&rN_TDtKZ6$3`%7_d!DOjeQaf5e!eP=!j<55AnNwIA+qFP;_Z;?xsq?XjBnzWLNWn zFKp>t@NrY=PqaS2(`hfEO6A{2ZDkSIqo9BBq)3@8vO^(Tc!1R7y%g0ju(FJs9JD;7 zn=g6_9SWd<-XLWhiEa`C&qQB^{me2y*?AG!=5D~QFFyTqKbzwkE-uq;!82%o;In~- zs=$)N-O^=YVd5aNtPo;8hX}o$$ommjVSN{BhGEmSEFH(K`L}33wRg625%%iUfV(Bk zZJWz>50~rG`vW4b%<*wdp5fxr2Ukx=Jr%PWlZT8!7VA``ZkX~Y$BN5fS!{axH8GP} zEV$ad-Usrj@aH(AH=DzU2o^^d(Zp+C&do6K=v)k#i*NZBCZcGX$51Z*kDMD4!`M7I zz^y7Zpz!0aq8bsG{fjdF)kPLVMjT!v61PSb49{c{9F*;z+@*75x;JD!TK z3`7#Kix$O8q1j2ZfMz(LcKe<0;a6=VOMvzWANDU9&>zKstEHKp8N(lEre7t&nU+E< zE*n}m={3H%OR<#uk76x0o$~_)O!wx>HY=srsVJ7+Ar^v_DSH=@b7W{}B}E3w2v|rk zRcrD%%4~BPB`W1^km)Sbp-oO(ohD@=IeP5rOFn__`xhVosj$z@s3-Ww^iVQ9{^z<2 z_l`Id;Ke~tSUipPb}65!23DoteX8`Y-=e*>0)he2w6gzPT3@@d zdBJv|37YusdUVm~eaZ&waAaUm=T)BDg`pqf{CY?JVmJfNpzR4ib`AegLEC1dEo>_laDfx167%17-t3%^i3ytGfhKRuydPJi6u?Y=L> zWsrTj6!3rAYi3v%T$U&lQ|R`-8qSAQxD5Dt_Uwc3fFVJO%1;K3v1#VJr)L6PA;&Y+ zgctizE(K>IN(+q^V*l}^D~fJ=A3KkJoxLg3BLp<8B`~F^nN|nUm_KQN>4$xWW{=;{ z5&Nz@}v< zp_qjYvVogZerQfqTiVXA18d>~$MMA2TAx&5&f~zoGrM3z`&2lTI*&o`bB@Hc#^ zAx3h;5*V0w-X&*EqI4?7%L`3M*b-rO$M#~}4f=En3;iXA(M(@pK)A)U%2Bf#`BpCn z(PR1kn6~zdZu}>iLjvOo(Vxo&xcOu*tFp7p1OAj0ad{){V+F8X(`Wd3S;PpGde|4Z zU^+YenNU@rF6k6W(0QA(t)$5*jP>`sQ8CDiw4ej_*KWeIDx=T%b_``J7$2r4>s^8? zG!{>}nnd4tYG9QT z;%OH~_DrQupjF*;U&m?1g6hY#gpY!Cc-8EYPDfa#G4@Sk@@0zEK68>D9k8H@XXRK% zvgWw87mRt0SfP|J3CP}N7RF+0MuT33{>WuwXs{ZAR${8#p?kfpWxE_FUL1&asCk^K zPGh*wVy?S)8B&vQC4C!1yr5%}%}JFsDaGn3#j7%+tIU0p9BWXd@Fr;Az1-86 z2raNr-LaL&dG{j+?I|ZMGXqd-)ybTLaV@Qx!R0#hW43f1deAij>tY1LFYx^-u=ipV zKj?^(wt&KtO>?}QGRh2voe?7+A}kdo)C&od9T1R94Qq@u)CCo#i!|6ZvJr(gFSfAH zjIEjDfo&i#6T~_ZP1fL&K5>hK2JX02Id(04uSQglw}si^kLV|L5G{Ve2}ZMNupSE{ zMs^%j8SlhKX-T4usF>(R4YQJOKWNOE%Js$jMl1d!(m37=VTnvTH9z}C?35Z3p+VPB zU>bIZQW^ZGfyTz1Oyf<4P`cS;@~)I1*Z?c^;h?BNRWQiNpyc2>(DvWYMn=+3)96ikXlZS6T6)E zZpL>b!+ae<0=|~Uf5f5;OW{PIsP^e2#z>%)dA|h#Q!`q{UaIt znwjP^A`M^C-0^63L4wNFQU&sNAhogU8Z;ga(^syG4EfVc3xoqGCyT4xn&4-iC1 zWLO5X6roLq6Q3bi??2h~<`g%{{|KzMpY%Nq)bNW_r&XB4p3}wgCPKSF39q!F+Wr

-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 literal 0 HcmV?d00001 diff --git a/models/coupon_log.xlsx b/models/coupon_log.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b9c36a2a8fe90ea7d2e23908be57547f78daef76 GIT binary patch literal 16068 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 literal 0 HcmV?d00001 diff --git a/models/coupontype.xlsx b/models/coupontype.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..11b4c3f8ab8f505042fd569d8428cb8a8184f49c GIT binary patch literal 16218 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 literal 0 HcmV?d00001 diff --git a/models/paychannel.xlsx b/models/paychannel.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..73da6834fb0ce856fb075f8c979db994d7a69062 GIT binary patch literal 15873 zcmeHuuOSG$a8tvSqK-!>=P0=) zFte(emi*OpAoAVZDZ;>46lJR-!5?j5pVdh5Q4>z>RTkZngSd)GO^FhwTaY@nzc&aW z@hHK~Pj9L85!TP;E)nn0MHT!z*}7hV=G4n`k&|j^7a2PN&oiO%M)azK$#FjE&|?&zP0nLP!msEF^C+> z7`*^9rM>8Jq{S6{eYq1AaLR4O_sFbr&2~?_HL1;a%SZHdLH;BH6_9B%)2iAd_0rr7 zft2VV8ht9><436AyLihRQNEoQL{IkShv_V)+8^+tMcbTHJ=p6bfV5U3jg3Lh|Uk4RzrF93?ga3x8#hfmowb9X2 z7!4}0hG`4N61e`v8ql=j>rD3q6d660ASN(`b-0QeT}kRY@e#i!3uyQ0 z=GEp7x`Nmh>ZC|)Uzt_%Bg*ZBpx#HJVn)UfW*k(}XQ(aHs(ES;5-Nn-jM70_7MC}Y ziFh!>XEk=OOOreYZw)dU>|D6gKIi;1a4`O?_2E=z>y(Gie+iEPcJxN#r-H4XqRjukmIW zJoreUtE+9}uvMNqt&Pq^Y>Mxo9zT?XF^ajiw%#nXYbF$#1g%kxX`LpTl0Wg8eqQmz zSfQ5#P|hUNNE8)GlygE&<}r&#EeI{l7Y7Tyl27U>5mU;hQEA$G8`pxFN*{CZ1Pj&! zh%jKXtHY&BGto>S@=|l&9iBv`d=(f?Z0g!m{-9ErG1LYY#)YwJWhuYAE5WLRt~k}= zSItpyVTJlEc#ndB-Kha3O(C`SUO{m*m(7?~0MAO0k-2ta~L6qg39(0=ben=O+W?%&>mSh3D?I;x+4%btM2HoJT8xjk-#t(t}F2!IDU~~K2dm)8P z*j@6KOZs`SxGKrI)bw4FVFw6E_ze!(RG3}sx=_8!0&qB^J$|!4X8EYgust&+5Noaz zUn-jo>|FQ-5#j4u!w%1RVnbHpL`RKF zxrR>JTuc3=Jg|$TH7vcT@7Z z5h2`4i0Hg75lov+xz_~-TYXQnm=s*R&bVxPU@foMk0eUOO-5>}xCsO%?<`qYwKelQ z0h0djT=?vGhj$F%LI7Yhf%z8~9L9tw3HG*AoNaOa%`Sxt?Qf+g>Ad3bC3jwunL>wEl(Sbw^|@h!qd*LN73#$)u1RKRL_wk5{0h6Yyh(9p z)hL5{cXPA&!tF*MDVJk)O7FW4g`+`5$#Z(u#}H$JzH^4f%U11{L>ZAc-nlYjU-b{d zqsCcc64?t=tg_!JX{Nb7ziJgkT0O>&n@0EH;g=G_FGtKvw4^Jte~x~+mg?#5#7WG> zTbQ>A4aR^)$=?+4$HWe_^E%ZBmLv*Fe&C~Eq3c8q9Hu{fy5j1(UhLh#)o?_BDf1a6 zcXCs|EN7kko&~*ewnZ}}gJH)mcFFhah5kBO&0IhSFrtQTX~nN~QD5s?1+Fdyhe3Lm z+8H!$z$c&KPH?#2Z=D3Cxn&fAhZx(L__ReVmF81#J2nsAIDJWCA=yToD^*2{RAD+g z9vMHJ!}{Pu@#3S%;j|qrAw@wbtxkDLF{bYsDLc40?tnZIV4+fcb1};01|J6um1F>v z4959um|4gln-1|FViS>>&|eZZCjsb>q2{wl$u5TdB`zT-vRNMxHI&^YuAk75AL=ZVP>%oYVh87^kpB8ltlwmydl(V>ugZeB{Lq9~S=X8!h}?qBCr;l)LDWm-rF1#_tDoCgK|Bo{vhQPLZ4S9WR*6A3$GGTir@c;J2vCvN?c5~ z*8z9?hCjTfAL6RE&sb-pd5u&Z)4=1EGw~_S`tcuah2N9g1sf<35DnCSZK{rZ2AudN3F9qQ?TKm=^G-t6LiDm9T{UcCGb`U|U zVhB4kWqz0Sj6BH?sWHwZekS(L{2&{dpqZ+<_MO95P&oqfCXStGXDMA^uz-Lot_r~t zmVvese#ealHq169&0_a1sV2P+m#)ZtvI=zui4bW=^TUrrt85{3QdFBu5y|gReuRPc zgH~>+)&3BZiL~S#TXRrx4Vq&^cKl+r$VN$~X;c?n6ElG}&@Ka^9aqttA8Pu>DZ}E! zl=!Jf!*+C1B<*a$3+pv38WW?!3F}Qonp+Qkp4nzI{P@LI;z-BxR#yG(^I~=X_JPBa zBs$lN1bktjHFjA+;*FuRs?U*;w)pB6CYrtc{teSu_6)CaqJ1L&XJq!*aybLu@d}** z9F|N9fu2ARB$hxstNBYXNfD^TRbPTx(u8uhi6=4N<=x9N636qc;Zg>TAZTB7BWTJ8 z$>5pI5di#Z%w2#X|5I?Bl60VZ_+f*ph}-#Pw0t#SirU4Ix+&1KZXQiU z*m;Paimv02SnF08H!2s5Ge3Pns2ViAu9b@4cK3RSY)Bw2AsgDRU2H_XK!rp;cw9-E)L~ z_!|e&+{W9rED~}e7?0=vuv~zoh@M=L4t5ZGEtJ?O8-Vq-m9pokw%VoZEWV-(;7$~d zG3U+w5^5TA5r6!}2Mb1lmEhMM{k}i8fAN1~1_J^bfcuYBWB*09M48wXLck^|`H=we z4s6FQzb~S$v{A>|R%On50xZ@Lm61L!R%PyOy}Kq$oQqY{hz0YRx0kW^_{xZt%kO%G z9ei&l2-&QFPNk0S@FezNH~^VISP9x1hw>1|?XmgwUf;Ri=D^aAKW_3qV4kR+%kbm8 zUeM=dbZqS}@pqe1cCFq#@$>aziwBq2Bf*%0mHUgH%P20+lGH93YVVCt_q{`s4Ao0K`qxP4v7>vQD(E+I z(@jvC_^n0>Mm4P#zDFJ^)Zgr)A~;K+AHxrH-6WSh=FlePz{Pyo$ZPO9=Fhi#U>+q9 zw*&&Ck_EuhLErn&$M@9~`Q9nx$6FbFjD>i0R0CL^B}fE0)i*`slB?QH9jaVpPdxg> zQTy}O4?f@x6`-$aA{5gWqy}#sAMD_zkW{V>W`he5qiQ5{gHsx$!IMbz&cm-kgkh3W&_kt5R?H)C>G4I47%QDpIrpENR4rH`ahUs7x1!a{YaCOSjp)gjylKrHf>|Ry3aL#5e|M=5@a(LN(=%HB7bNfELCxo^RVqwjKjzI$PNv(t0be^pv&8ph zQrh@B3E0RO+cMcDWqXi*)ps10J{riMCp8hZpIP}>%*uA^3B7aqXjaHpc(HF{5ZHfX+n(uVTIdj#3bYO!FIvhUup1D>w)ozL}h%USB6g)M@rqiS*d> zv#J^BkSi?|LxjUA8L3i<673~oh~YBw?HG@oIjz$zqR!9v+g_oe5fT{B3ZbKP7n?;a zDY_Jv&F(>sitd-{oewSWVBLA~Xn^Qn|7r}=zjV&OCLRS+ES@iR#dE1JacZH z?y|x{CL0LN2|E3Q^{jIuSIR?Cw=@#j&g$MOu-$`GqZfWNP*m-^SGxT>S^dJb%3TJ& zZ1T@sFbZEKv7O|G znhz|WCbtxhH+Ix7ba|Fmf7HTMU(oEvP|gC!m_S4j6^-Cy{R#&5l5NM89nIdO*ihx6HJzd#$EBtok5Td_ULz$qj}9Q31BZ z!ox<;uxU@Pz#WF00NMo%)f;DR1kCAcR`mnqN$e;Ck52Nl+>f`k$;>+;_Tdur1lGmZ z@3*DXPQBi$--L9&4|=tvIo5nEe0=z_g}FXd&M-)~-NErbF(V2R7`CK?F}2_b2#2v~ zH$zT&suLwq7$hS8UKRgP?u%cidt)*%yP3}sHTx{pEG61(Ez4D&cGTAkw`XXN1z}CD zlPpSB;evP#nP^c6gFULTL6+(qQ6-%)GYAB##`=ptEXgl(QcE>1E<WEr zMp>)EtgJ{$FaC|@U2S<(@~KsVKtK%t6tY&K0b%F2@h(xoNt6$Z`XGqb)GUJfD2mwp zUCJ!P^1G&K*o@?HLIo`{B{J_E9lg0n$ibhfls~o8x5N!Vd;oFq4Q=9>hH2aukr4Q( zK(eg9xV^OxtZZ@6s*X|RWy96qNV8aGSV@I%b!qVEbmFeLz_LrcsX=Zd_+TyD$h2PZ=(kzo`!ghvO9f<-A$ zZv6-BE?szaHTc)a>wJoK6)JD4(I@8)P3r(NrKIlf<~ZOFmFf_!B~j?c*%*;)2Wpb< z*03=Uywauzp6E@!sYK8AjMbOYa+bW5gN)@=s*t6f(025&DSE8cx?_sc8fa1q)qzF! zd2aP{Oi|y6pNfOG3ov?JJ`fkQ?BR1MJCt|6`rg*{RXAiLPc_=nYU*bzjZoRc;SxwM zJc%9QTD8b+A7nRzpc|#H(z*6V+SJgjZo>psgd~Td%eDrP=iU zj-uhH+zI>fN%Tj9V)y2j<>M>42TPCIpe=1VmrNTMu&4L%x<6okzOLVypWC|N4GQou zm;ufrz{&U-_;GY{w=#D8N%wDRV=*i2h#eS*Jdkacw}ujySf2vj+Ce}HMEur3+NY6? zQ3}OV^3WY3)*Vi25T>*yT5hb731g>-$d;Br_kFZwKkG*}cj!oa2-ygm!H^j)$04Sn zb_-}@!O#dYB`)?#&iP!aHh6wkSDu}iwAXl4fP82y)%|mGzcf*;axGyPxzNg?@43nb4gH(GBi-Jvc zp43RmGPc$bb=`0o8U`{0R`aqO@Ob$^WPvSPEd*2DotloFsW?)WUVDjUG=jI+onAiQbQMcl8p5VEPUxG=+(s=8Me+JsgXvy zxHoG(QMp*gd2)QoRmRLjJ840hAxdK_F_V(vpztNs(vL{PN|@?vPq!|h$_|`4bVMd= z{&O_pP1ywaow>+S`^%AY{ndV=LyF2N8J;fqgEbeTxg5L*V(|p2hbe0gBaYK??*-zi z$V?GKDsv6BU!x$d)&mjWhl%ZQe&4A%cxQ;Re(h=ZiuQr=3($`g!F|Hf7yTbZ*Jra< zBjUL^_oO-%w@Tq~&-B5HggSNRvR9IJ-)^Q(U141VG6Nkb#47~cJ=wY%kh3s3m%U71 zHZ^ww?YA}+?dtBnZ!WW^h8i9P1fUuR)zIL5o9L&P!w;H8MXwsISFXxg&B-a|MZkZ@Cfpac-&U z(xkW1QAs8JC|{5lWI}A7H}USWUedh&KoH{g0bwf8Hs~C9a*Mb_=r-25g_N1?v#xHU z9jAP6z9Yn~v2P4F8&_Tc@90)lgZyqZDY*3ywi{YBaPU%|Nzf5HiZ;}O-QnRNl51a4 z%ZXzs;q}re2Js0{AR#tQ7>NzRYzSm8{v?4Ah_y{shDGzn!p=G5o2!>6Ip21iq3zlt zSYAENW9Nz0GoTFjx(nLMS7pUV3w@7qc<{V&34hC?N>^WUv$t2!VRIdjgSAqQ8&OI_ zVu7c-g|BIz@dJd>9y$ULA;l_E={Xzp2M1T%%(rJXJOnGjq;}|ZO+TSoDSzWyE zw(q*Z51wN_rVh*y2->{x?RR~&km4TG3(DWVkPW64?R!C&POL5&zyEWToAWv zKE#OTW`$&Th6Owrr-p!T^rBP=RPMN+1xxY}$fD9g<+mM_nwoLKkal0f2ylKt8Go(i zdHUtZ{H`rXFE$*Q0DgiwG!PK#pW4Dq-@({O$;rXo#`KrcC|8}3LlHpj$hhZY_1pxr zDhuyk{sbBx&Vk^;91_)9cNVg?&L(TOP3R?W&0MTb01Mt3AIlw{U0fKImZ$_+0a!*4#vnYwG_;!U zQz1g$0}wJCFdO$CDjv)Is3g37`xP12BH|CUq{MyJAq{v2o;axh^KcUg5qm^N*0!tW zvJgs{j2%3!%>%#B(dE5bS~E4>4>}FsiSyy148e;=5zTQ?xInxL%LFSm3j3)W)|bI~ z){H$>-k#3qt^`n1tbLCw*xRefYz+@gi@%}As(m@V!**)ncbs8De*I8smpexU;0Ti{pn9dv*Wi%%&y%Ea+l! z#^+%l1&J-1J=;@vOKZyHj6Gn3rnw&$qk`IpsTE#f_yTDLeR1i$iCr*uXpIPn21&X6 zFQV@fX2)O7l$tMmS2{yrP)qA8$6XdBHSTlV=J2XIx)ro-wX@nVDECxiJ?7XCe2I&^ zh?!n#ne5*l+=%gG*P-IuT=|*#ZHeOlW|!8-J+S0Mz+eeZ(qX z5eXQU#6HHDGuYK|0EKibUMx8-pJXy)azwLXxtuhtpd%#@Z1y8otb|`XMd$P5>B`gV zzM$vl9@Hrx%@N!G`tTzeHpy>uTas?MEr)jzN zHFzNhcSF0UsZ^`oW3@@VGPQ;%`8MkL(6w$@FjVplyrk{ ziY?R&$WD=0z(A;R#1e{fQNs#}*zzerWSN() z_(l+|q7+Xe2l?9Eo+mx8?z^wD#0Fh`cso4r?#Ja?=%wr+3gfBnpIay19v@LICPFvf zcit7^Fi1aN@cBIMHZiR7FNzh4$aQ*L4(3D1UHJYuee#6AM;9YO;U$GaUpMyJ)iH!B zm*E*`#Erc#lYli8riDTcv$dUQjyxh7hw0mOJB)fA|RuRD2Ah@khQs!DgdMJM}80 z8=V{k*TuUd+M0Ongm9??e1mVoKNbsc@<|<+rKcDBd??A|@`hSR3Sc@WPVw@xiQp-9 zu+DM7w6=J&AS*!~)5(*e^46tWNIs=7*4^zy#URbog7(>5ISWoJ4L{*oGn6i&Q;d(* zIR=!gZM_Dft_jWDP>1N$Xy>gn-SC9`c)Npbw_y1Efgwd1mR2Xb`SyWF!~Gc_MG|2* zYWqX3+$IRLJg1+)8usC9wb@`Trq4LS6FU92_^4avaBO%Kfv7XUX zze)v!lMeLHlNFwR=Cu<&Z71b(%AskAq5QSDRqPS=hnPk&HjN{)rSestGvcmoFrZ1N zWtjTXCO9?cjCl>1L6pylNFK(f1|lo^{qBW6NTnjEFlv70BFdXVyWK6NI~>RE90=AZ zd7R4jBREeYPAYcetkY$g5@WC>J!=E+K}W=!k}GIZid9pJm!*W4nR~=JRv<~>3{kh; zUD6i_OtDT}uoOq%??v?6P>z{p`J&XQk~#$7m{~A`%e3dmY-rndp{e=R#_)xl8_k!3)NraD zTj#uWGQR2SNB8xCvsYAg8*y|Wl46KO*GR$T%o?nU~#8>$ca`MK`kK>wg2_WjI0sH zC^RR8ZYt?MK51z0MS-Rk;-HWXT&5U`OfQJ8a0&fpVPbF?kBrw&$-x*7^#<;JyRP?3 z?R)j6Yc_sDamJ1uXGodxR17w=^WsL}K$>Jg8uHm$Yaa)qElO0ghE~ERZGU2{r!Dp< z6UM>m-sFDFgG0f0OG0X^yh$aMI4#SdL)y0+Ju1@QDeX-q)oC2})Y#RZg!)Na{AjFe zM0D{qv3dn~9xr87O9TDp0~a4k=8TQ_K(6kSl-j7`Hk_*l5`>CCXYqrO=#mB2$w5<4 z;2U9LB`zTD`!(3qDUq-{5M&DN-4^GWKAa?)Q*_$H!jLeMzZIcRlINo#?Iwm8`)coU zDPJutn+r6%Bovyh3TASoz+EqXHowh@AJ0J+iar{$J*lQkbjWRgtUYh0|3;B(9c^0S z5*%6HZTIo|+|sL2_>`E``{}9go#eES&wy9@XW-=jAEA*>`u|2~!l)0TXibBt4+3aS zVN+%xzJi`(l9a~)hc8oW5ONLUj(wyELzXfkGn?lDP3~$p3NUHsCDsN=+yDG}l!A`s z4kO|-4fm9q*tn~;fsnynj$N?laqF>oO-aG6#7U&ok?+O4#4?R`u1D%z%qNYp^CHV` z8rHFkE>^d;H4LwDEMDi*O?>K0UzMu>2l&^-ZBvsMFup5>Cg*XY3>H~B;HL85$SyTBuGN>fUm3|#lEs_bz6sPj_S z`h9O~*`viL6k2wJ0;)-I-njujfuq{&y;}n|)vPe3y@RdfHxiPX`V*8G91JnY*d4(U zwSOdff`)OQ3a#eBUtiDcog(9} z%c;_sqbV=T?CxzIu6hk@PY31%-N1qd(3*dAWT9-k(Xl!j&P2THP#&<@-E zS2jVWX|LBdnH=e0M~7zS&|7r)0~)ei}*-bdhX+Yavd`r ziN=N5Y7;8CgMrk;(WsDOaW|{_84_l%_PT-==9%KC3P~M1#3*T!F;mC)%0WSLaVrk3 zHjn!9Ll)l@75S)$RStpT>Dm&md!q-Eq#Z*SRR3WU(_?U5wd)ZnpXVDcx8iMCZlv0P z705YO5EQ2i5(+NM`JU{1Nbt@Lxh=xyW5IC!I78ggeskWw8_cKIND-R-zCZ;&<0DH* z*l{%~>PD5&ZX8Mw5^5uG%H zlz;)!+h18ruOxk&Kt|Z$D#bmJS$=<2U~~927dT~=<*EwmlGfL4BjOtSCxms+2wonS z(`V;)`ki{|!1lN2^YeD#x(wTyyVFkDEUeSuK8`B-_OzEb!^M?trp4{=7y9SGciQK8 z%^dq5d)pn)8&*9h+G9KkT3mP6DR!hqP&+Og9u+Ir%PemjN?wBx91w&p2bfvws28p= z#R~)CmNN`PW>f zPIUBbvFW0NnGV4}-?PH@IEkccp>r48g(mWvITCp2*TV)wprgaa1gozw zufK#BTIrZc5BXSNpBbqQJEH#48bqQ-t)Qc9JqXw1rrdujM26H>Q2+UDYDy{J^mVRt zi6Q%D0L8TQVoUvQgm=QCBXFnPndF1nMWBT3CLZyor(KT$Yxhpdy+dByj8a%WCs(lR z!7Z~13};lkWY46~lq%e5^aro6Uu>s|gGkrHun?$DcY6)rK%KRQ>*Hw17lOal&OP5p zedhDhHn`=OgkW{^iK)BZhP;1|qxABR1t|WY)T=ar8F;`38qnv?FpnY_>}nj``p>zK|w8`7%IlFm%X z^xHa|HMYlL;RpDO%Wo_!OOGm1>+zN>lxd*2gq!xm${a)9@Yzk#pMfS8Rb9?XNGH0( zajNNUY-`0T$Scpfq7M+KcQ^IU>H{XLK`|%gxcHS3@xjd$ z#v%uaOO%qYO}cK%9GHN-UxIFWe3=RCbz!O7dmptHV;Rc3JjdCNSq2keux*IjjPs5Y zS|PpLGPOIhm(RKS!yKW0SH zM+vi<0WuZ`m__`%jOp9i{a3&MlJ)12nb-{|f`knLY(L;b&ZAdtAVc_7nd)&o)N6nw zJP(Yx(aEJkhA@Y-jZ^U6ox-^+uatM;8`ee_ji=ApkorbE3M(EvEHsz*inHGfW==T7 z=W^uM`zVFA-agfF5R<&q4S>OisS!g?dEA3(h|29BLZ^}?*-kO1X2+f{Jh1~?-Zoli zv2`6KKhCFPQYvSz1=M7N&MmcO2^8u_vhFF>tfu8i@Xove*nB;sw@6Pz{661D}AZmcz;FcA>MMMd0gvd%eA#Xd;j# z_l|d3)mz*W4Y{IlN ziwG>dV6!sVx=!BlW!TT}Mh7zw1Uo(Nb|7XBt~Fk%wRRs=}^h`ct;7Z3AITaSj#*M@=}-xctURlX zK6*S|P()JNfrbHGAv}7EQNm7w(7ePM2uim=-Au~zfez?{3Q@jo@Y2?A+K0*Eb)U`` z?`4adl^Qn#Ilp$6<3?Mrh@O?lZe0)FTVLN#tHBi>+w=qPec4RH(UZ-1o@}Jb{3pXp5pV$VT*S(Fg)>P_o4hwdE59oK?K_f3NnLW zE$mJ~n5|h`K~S437yXacoL(Vs$!i9tt3Fa`aRGFvYk))?@NErTmH4w z3{WofbLsC{%-<1yPs{v;FiQLj;rArX?*PBY^Zo*uq5Q{Z@GH9aJIe3Dg1=DOX#WxA zSLon(lz(-g|H1$QI%fg``UiLVcYuHOj{Xjy$oe;cKYgX&SO2TE`TJ^qKrHmHpa0YL Y$V-6($oJC?Lj)oK1WLYf{rvX-0E^v;)&Kwi literal 0 HcmV?d00001 diff --git a/models/pr_link.xlsx b/models/pr_link.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9195b0d7a00e251b5c42fed201772f1ca37ecf77 GIT binary patch literal 16038 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 literal 0 HcmV?d00001 diff --git a/models/prodpricingtab.xlsx b/models/prodpricingtab.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..77030ed27f415a8a40bb846099dcd6e5ea7cb7cc GIT binary patch literal 16823 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 literal 0 HcmV?d00001 diff --git a/models/prodtype.xlsx b/models/prodtype.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0a1ec77e2261ec1c073a5bca8a91d0c143295b56 GIT binary patch literal 15932 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 literal 0 HcmV?d00001 diff --git a/models/prodtypespec.xlsx b/models/prodtypespec.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..63765021056eaee06dfe6cc1a825ec06f64913b0 GIT binary patch literal 16145 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 z%0D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 WrN9B?`&oq{0ucaaecgF}e*1q?%2GW5 literal 0 HcmV?d00001 diff --git a/models/recharge_log.xlsx b/models/recharge_log.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c65398c1f84a98f815873f51853a5918726ed6b4 GIT binary patch literal 16368 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 z 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 literal 0 HcmV?d00001 diff --git a/models/resource.xlsx b/models/resource.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a89ed9cc1719973ad3ee5fffe8cf8fdfb29813a2 GIT binary patch literal 16857 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

Y6zAE-(`cdY5UCS?m;; z4+g`WYiRBAQsL6nOi|qyd84^?VR4kfOOoD)Y1;1RiEc`O}SB)i{?>+ev=;5&43cTpU=j#HWgKyK#^%!NIBh}q0E4(2-afsCTBlT?)Pz0;s;aB9fmBF0hEXQYOJ1jr~BTwHYl+~#MqdM zjUC9iElPg@Oqq=p_m;E;pQAuoQAfv2HaEyRw*J(mO*UCd;R}@!4zj6jp_-QsrPxF} z4Z1CdB`nScuQ>Xbcl$784dZqJ{8INDhKawCBw2LEf21}d0V9XQdpW*<_h_w2oZv z!FKO;=}0G4B-h%oJ|}x72ELqMWOmn|nS+Jee!|x7WFbO^9vvmT{_0y1_+g0XJbPY< z4~v$n5f-W8`UJt%aqUt%WFD>KEBaPBoEap*CSl?IPp2_q|EU`fmlb@yj zh)JmSk$1;_3Ioq}=S$Ry=Q{Qbk5gj=NG0J;7B_wsx=I3wZy)!o>yMaXh?=Q2;$mtA zdbO(rNXh-#YFFMNwa7sq8zl>7xxbb3_HYY1X818NVvilsCGr_&$8gQVmX!=k#4M$U z;Qd{IVn78}cgI`vfQrnLKPvREc?V;dFuf7TH&H-?jr>>M(X+MvAL9Ty=3iS{Y$q@l zfe$zXzd;N*4PUl~4&YZ|ti}1PRs|yAzGujV@m?xm0CO1CRf(Y{-tWNG zg=O~+U{Fet@x0A3wtlA=^R)^zg=~R5AGQiq)_QqBUU_caiDBu@hv873OsQqYd(`2Y z8+rM#x9{*?Y$lnKG9pjsAJ{-GuIsJRS-%~`-_NCBQYfXZ_*P|r&n~p23lwg%$dHY_ zO|hzNoo|Zys9FZk(JHCB4~v@}BM0i_H_>1N!xp20N6*EAt1o&ZWxfs=;04t~QVBxL zfgFdal*38ybf&eNLE`IpdA`0LZy=C-?-_=$%i?6dH2;~Glyr-uik`uqbR)^uYJteJ zGy(Yz;@kt4has$y1koz>&88QuD}NbHbBwGc9)~9476)Y^WY08I|16JNk?1_H#mvP0 z)wVbOUFZF{<9vBHD+BM?IY*HSt1!*tqJHugsUWA}eEI|ztJjDl1* z13F+0@9qu|n)p$uGDYl?QjwlkbXY>aTrll!!D30_Df``&V-1Kl7-U^8s{ zH?^ju4?3z1PZpI74+`-sR#j$oeAiNT?5` z;+~{gQ1m67Wf`+wBJT7mrlxT6rO;YquGP@4`$ut>cQSV3cH=QviV|}XK@vod7JmKg zvyMqsB)}QEMbXFi396vpo9=3;M_tOr(xdR>GNtCZ0PYGDwV1(Dy+Y~@qsKF5M@7b` zhvICdl`@VjVze}S@Da0*$4hM8u}v-7y``FW%!#NyPgQCX*0r^ABnSQj)5W&Hx{;%i{YN85$6p1c z*T;->`exS0(JQc^3h022T*~b^a91!QzHshItSl#lCSJ)Y&EtO+&mkuON zF%F9+CpEXcB{lOmLEo88q`u&ziH14#H9H-wlVMVKC;`Ix=(jNUq*r0+`fG`XDOE?q z81t|S6b0P{Ll1|C$H5aO=|XqMGO(6dF0d*kyxOC^2@Pp2tENtimdZv{_o5l3@6!%W zSH4aq@&U(B-&Q5z*RaPgN{n5KT;f}-PRi93>|CrWzjq z{ZEt_U?lzzD8C!nU!%P4$o&)L4)q^Ve)s3TMtR+F_a}-Da6$$6EU)|TUIV;t)%X*@ z1n(ao<9Fl6Yn0c;+dolKiGHK}M=AF;!s~L+p9m#ne<1w7;?HZ+*D2sXNv9}ZzrsHz zgkJ-`&ZzzgI79Us@He;o&ab{kd7Ym56J-?Guka6S@;h1c8s+cN$e$P>AfzlHApa1X zyaxEYOZry;UADgf{L4XoP5pNh|5s{R&c9Iq+u*+@f321O1X$$$y$1h(bhNw_Bv3_w RfS>|@y+HN;%=7E${{z(hHemn& literal 0 HcmV?d00001 diff --git a/platformbiz/biz.py b/platformbiz/biz.py new file mode 100644 index 0000000..7fb349c --- /dev/null +++ b/platformbiz/biz.py @@ -0,0 +1,10 @@ +from platformbiz.pricing import get_price_infos +from biz_order import add_pay_order + +async customerpay(sor, sellerid, customerid, userid, order_details): + await add_pay_order(sor, sellerid, customerid, userid, order_details) + price_infos = await get_price_infos(sor, sellerid, + customerid, + priductid, + prod_config) + : diff --git a/platformbiz/biz_order.py b/platformbiz/biz_order.py new file mode 100644 index 0000000..2d06af6 --- /dev/null +++ b/platformbiz/biz_order.py @@ -0,0 +1,121 @@ +from time import time +from ahserver.serverenv import get_serverenv +from sqlor.dbpools import DBPools +from appPublic.dictObject import DictObject +from appPublic.log import debug +from appPublic.uniqueID import getID +from platformbiz.const import ORDER_INITIAL, RECHARGE_INITIAL +from platformbiz.pricing import get_biz_date + +async def add_recharge_order(sor, customerid, userid, action, recharge_amt): + """ + arguments: + customerid: organization who recharge + userid: user who do the recharge action + recharge_amt: recharge amount + action: business action name + return: + order record + """ + rec = DictObject() + rec.id = getID() + rec.customerid = customerid + rec.userid = userid + get_business_date = get_serverenv('get_business_date') + rec.order_date = await get_business_date() + rec.business_op = action + rec.amount = recharge_amt + rec.order_status = ORDER_INITIAL + await sor.C('biz_order', rec.copy()) + return rec + +async def get_paychannel_by_name(sor, name): + sql = "select * from paychannel where name=${name}$" + recs = await sor.sqlExe(sql, {'name':name}) + if len(recs) > 0: + return recs[0] + debug(f'get paychannel error({name})') + return None + +async def add_recharge_log(sor, customerid, userid, action, orderid, transdate, recharge_amt, name): + rec = DictObject() + rec.id = getID() + rec.customerid = customerid + rec.userid = userid + rec.action = action + rec.recharge_amt = recharge_amt + pc = await get_paychannel_by_name(sor, name) + debug(f'{pc=}, {recharge_amt=}') + if pc is None: + raise Exception(f'paychannel({name}) pay channel not found') + rec.fee_amt = recharge_amt * pc.fee_rate + rec.fee_rate = pc.fee_rate + rec.pcid = pc.id + rec.biz_orderid = orderid + rec.recharge_status = RECHARGE_INITIAL + rec.transdate = transdate + await sor.C('recharge_log', rec.copy()) + return rec + +async def change_recharge_status(sor, rlid, status, tid): + recs = await sor.R('recharge_log', {'id':rlid}) + if len(recs) < 1: + return None + recs[0].recharge_status = status + recs[0].channel_tid = tid + await sor.U('recharge_log', recs[0].copy()) + return recs[0] + + +async def add_pay_order(sor, sellerid, + customerid, + userid, + action, + order_details, + origin_orderid=None): + env = globals() + customerid1 = await env.get_userorgid() + userid1 = await env.get_user() + if customerid != customerid1: + e = Exception(f'{custmerid} is not logined orgid') + exception(f'{e}') + raise e + if userid != userid1: + e = Exception(f'{userid} is not logined userid') + exception(f'{e}') + raise e + id = getID() + amount = 0.0 + for order_detail in order_details: + ns1 = { + "id": id, + "orderid":ns['id'], + "productid":order_detail.productid, + "product_cnt":order_detail.product_cnt, + "prod_config":order_detail.prod_config, + "list_amount":order_detail.list_amount, + "trans_amount":order_detail.trans_amount + } + await sor.C('biz_orderdetail', ns1) + amount += order_detail.trans_amount + price_infos = await get_price_infos(sor, sellerid, + customerid, + order_detail.productid, + order_detail.prod_config) + + + ns = { + "id": id, + "customerid":customerid, + "userid":userid, + "resellerid":sellerid, + "order_date":await get_biz_date(sor), + "order_status":"0", + "business_op":action, + "amount":pay_amount, + "ordertype":None, + "pay_date":None, + "origin_orderid":origin_orderid + } + await sor.C('biz_order', ns) + diff --git a/platformbiz/const.py b/platformbiz/const.py new file mode 100644 index 0000000..ad7bb01 --- /dev/null +++ b/platformbiz/const.py @@ -0,0 +1,2 @@ +ORDER_INITIAL = '0' +RECHARGE_INITIAL = '0' diff --git a/platformbiz/getdbname.py b/platformbiz/getdbname.py new file mode 100644 index 0000000..e7af9f9 --- /dev/null +++ b/platformbiz/getdbname.py @@ -0,0 +1,8 @@ +from ahserver.serverenv import get_serverenv + +def get_dbname(): + f = get_serverenv('get_module_dbname') + if f is None: + raise Exception('get_module_dbname() not found') + return f('platformbiz') + diff --git a/platformbiz/init.py b/platformbiz/init.py new file mode 100644 index 0000000..e88b1e4 --- /dev/null +++ b/platformbiz/init.py @@ -0,0 +1,20 @@ +from ahserver.serverenv import ServerEnv, get_serverenv +from platformbiz.recharge import Recharge +from platformbiz.pb_acc import PlatformBizAccRecharge, get_owner_orgid, get_balance +from platformbiz.biz_order import change_recharge_status +from platformbiz.pricing import calc_prod_price, get_sell_price, get_price_infos +from platformbiz.product import agree_products_clone, open_agree_account + +def load_platformbiz(): + g = ServerEnv() + g.Recharge = Recharge + g.PlatformBizAccRecharge = PlatformBizAccRecharge + g.change_recharge_status = change_recharge_status + g.get_owner_orgid = get_owner_orgid + g.get_balance = get_balance + g.calc_prod_price = calc_prod_price + g.get_sell_price = get_sell_price + g.get_price_infos = get_price_infos + g.agree_products_clone = agree_products_clone + g.open_agree_account = open_agree_account + diff --git a/platformbiz/pb_acc.py b/platformbiz/pb_acc.py new file mode 100644 index 0000000..8d5e13d --- /dev/null +++ b/platformbiz/pb_acc.py @@ -0,0 +1,111 @@ +import time +import json +from appPublic.timeUtils import timestampstr +from appPublic.registerfunction import rfexe +from sqlor.dbpools import DBPools +from ahserver.serverenv import get_serverenv +from accounting.accounting_config import Accounting +from accounting.bizaccount import BizAccounting +from accounting.bill import write_bill +from platformbiz.getdbname import get_dbname + +async def get_owner_orgid(sor, orgid): + return '0' + +async def get_balance(orgid): + db = DBPools() + dbname = get_dbname() + async with db.sqlorContext(dbname) as sor: + f = get_serverenv('getCustomerBalance') + if f: + return await f(sor, orgid) + return None + +class PlatformBizAcc: + """ + """ + async def build_accountset(self, sor, biz_order, biz_orderdetails): + acconuntset = DictObject() + accountset['action'] = biz_order.business_op + accountset['owner'] = get_owner_orgid(sor, '0') + accountset['reseller'] = biz_order.resellerid + accountset['customer'] = biz_order.customerid + accountset['交易金额'] = biz_order.amount + transfee = await get_transfee(sor, self.resellerid, biz_order.amount, self.curdate) + accountset['交易费用'] = transfee + accountset.subsets = [] + for od in biz_orderdetails: + price_infos = await get_price_infos(sor, self.resellerid, + self.customerid, + detail.productid, + detail.prod_config) + if len(price_infos) > 1: + for pi in price_infos[:-1]: + actions = biz_order.business_op.split('_') + actions[0] = actions[0] + '*' + aset = DictObject() + aset['action'] = '_'.join(actions) + aset['owner'] = get_owner_orgid(sor, '0') + aset['reseller'] = pi['buyerid'] + aset['provider'] = pi['resellerid'] + aset['采购成本'] = pi['sell_price'] + accountset.subsets.append(aset) + return accountset + + async def accounting(self, sor, biz_orderid): + biz_order = await sor.R('biz_order', {'id':biz_orderid}) + details = await sor.R('biz_orderdetail',{'orderid':biz_orderid}) + accountset = await self.build_accountset(biz_order, details) + self.curdate = await get_business_date(sor) + transfee = await get_transfee(sor, self.resellerid, biz_order.amount, self.curdate) + a = BizAccounting(self.curdate, biz_order, accountset) + r = await a.do_accounting(sor) + + async def get_orgid_by_trans_role(self, sor, orgtype): + if orgtype== 'customer': + return self.customerid + if orgtype== 'reseller': + return self.resellerid + if orgtype== 'provider': + return self.providerid + if orgtype == 'owner': + return '0' + return None + +class PlatformBizAccRecharge(PlatformBizAcc): + def __init__(self, rlid): + self.rlid = rlid + + async def accounting(self, sor): + sql = """select * from recharge_log where id=${rlid}$""" + recs = await sor.sqlExe(sql, {'rlid':self.rlid}) + if len(recs) < 1: + e = Exception(f'get recharge log err by {rlid=}') + exception(f'{e=}') + raise e + self.recharge = recs[0] + self.customerid = self.recharge.customerid + self.orderid = self.recharge.biz_orderid + self.userid = self.recharge.userid + get_business_date = get_serverenv('get_business_date') + self.curdate = await get_business_date(sor) + self.variable = { + "交易金额":self.recharge.recharge_amt, + "充值费率":self.recharge.fee_rate, + "充值费用":self.recharge.feemat + } + bill = await write_bill(sor, self.customerid, self.userid, + self.recharge.orderid, + self.recharge.action, + self.recharge.recharge_amt) + + self.billid = bill.id + self.bill = bill + self.providerid = None + self.resellerid = None + self.action = self.recharge.action + self.productid = None + self.timestamp = timestampstr() + a = Accounting(self) + r = await a.do_accounting(sor) + diff --git a/platformbiz/pricing.py b/platformbiz/pricing.py new file mode 100644 index 0000000..83abf4c --- /dev/null +++ b/platformbiz/pricing.py @@ -0,0 +1,273 @@ + +from appPublic.log import debug, exception +from ahserver.serverenv import get_serverenv +from traceback import format_exc + +def get_step_dates(use_date, step_type): + if step_type == '0': + # 总金额 + return '1000-01-01', '9999-12-31' + y = int(use_date[:4]) + m = int(use_date[6:7]) + if step_type == '1': + y = int(use_date[:4]) + return '%04d-01-01' % y, '%04d-01-01' % (y+1) + if step_type == '2': + ss = [1,4,7,10, 13] + for i, s in enumerate(ss): + if m >=s and m < ss[i+1]: + if i < 3: + return '%04d-%02d-01' % (y, s), '%04d-%02d-01' % (y, ss[i+1]) + else: + return '%04d-%02d-01' % (y, s), '%04d-01-01' % (y+1) + if step_type == '3': + if m < 12: + return '%04d-%02d-01' % (y, m), '%04d-%02d-01' % (y, m+1) + else: + return '%04d-%02d-01' % (y, m), '%04d-01-01' % (yi+1) + e = Exception(f'unknown {step_type=}') + exception(f'{e=}') + raise e + +async def get_biz_date(sor): + biz_date = '' + f = get_serverenv('get_business_date') + if f: + biz_date = await f(sor) + return biz_date + e = Exception(f'get_serverenv("get_business_date") return None') + exception(f'{e=}') + raise e + +async def get_step_discount(sor, agreedetailid, step_type, sellerid, buyerid): + amount = await get_sale_amount(sor, step_type, sellerid, buyerid) + sql = """select * from agreedetailstep +where adid = ${adid} + and minamt <= ${amount}$ + and maxamt > ${amount}$ +""" + recs = await sor.sqlExe(sql, {'adid':agreedetailid, + 'amount':amount + }) + if len(recs) < 1: + e = Exception(f'{sql=} not data, {agreedetailid=}, {amount=}') + exception(f'{e=}') + raise e + return rec.discount + +async def get_sale_amount(sor, step_type, sellerid, buyerid): + """ + 统计销售收入,根据step_type分别统计总销售额,本年销售累计 + 本季度销售累计,本月销售累计和本周销售累计等 + """ + subjectname = '供应商分销收入' + f = get_serverenv('getAccountByName') + if f is None: + e = Exception(f'get_serverenv("getAccountByName") return None') + exception(f'{e=}') + raise e + + acc = await f(sor, accounting_orgid, sellerid, subjectname, buyerid) + biz_date = await get_biz_date(sor) + from_date, to_date = get_date_between(biz_date, step_type) + f = get_serverenv('get_account_total_amount') + if f is None: + e = Exception(f'get_serverenv("get_account_total_amount") return None') + exception(f'{e=}') + raise e + amount = await f(sor, acc.id, acc.blance_at, from_date, to_date) + return amount + +async def get_product_agreement(sor, sellerid, buyerid, productid, biz_date): + sql = """select a.*, +c.id as agreedetailid, +c.prodtypeid as agree_prodtypeid, +c.discount, +c.step_type +from product as a, agreement as b, agreedetail as c +where c.agreeid = b.id + and ( a.prodtypeid = c.prodtypeid or c.prodtypeid is NULL) + and a.orgid = b.providerid + and b.enable_date <= ${biz_date}$ + and b.expire_date > ${biz_date}$ + and a.orgid = ${sellerid}$ + and b.resellerid = ${buyerid}$ + and a.id = ${productid}$ +""" + recs = await sor.sqlExe(sql, {'sellerid':sellerid, + 'buyerid':buyerid, + 'biz_date':biz_date, + 'productid':productid + }) + if len(recs) == 0: + e = f'there is no agreement for {sellerid=} and {buyerid=}, {productid=} at {biz_date=} {sql=}' + debug(f'{e=}') + return None + rec = None + for r in recs: + if r.prodtypeid == r.agree_prodtypeid: + rec = r + break + if rec is None: + for r in recs: + if r.agree_prodtypeid is None: + rec = r + break + if rec is None: + e = Exception(f'Not agreements for {sellerid=} and {buyerid=}, {productid=} at {biz_date=} ') + exception(f'{e=}') + raise e + return rec + +def get_unit_value_price(sc, pricingtab): + for pt in pricingtab: + if pt.specvalue == '': + pt.specvalue = None + if sc.spec_name == pt.specname and \ + sc.spec_value == pt.specvalue: + # print(f'found {sc.spec_name=},{sc.spec_value=}') + return pt.unit_value, pt.unit_amt + # print(f'{sc.spec_name=},{sc.spec_value=}:{pt.specname=},{pt.specvalue=}') + return None, None + +async def calc_prod_price(sor, productid, spec_config): + """fact_config: + [ + { + spec_name, spec_value, count + } + ] + """ + biz_date = await get_biz_date(sor) + sql = """select c.*, +e.name as specname +from product a, prodpricing b, + prodpricingtab c, prodtype d, + prodtypespec e +where a.id=${productid}$ + and a.prodtypeid = d.id + and e.prodtypeid = d.id + and a.id = b.prodid + and b.enable_date <= ${biz_date}$ + and b.expire_date > ${biz_date}$ + and c.prodpricingid = b.id + and c.ptspecid = e.id +""" + recs = await sor.sqlExe(sql, {'productid':productid, + 'biz_date':biz_date}) + + if len(recs) < 1: + e = Exception(f'{sql=}, {productid=} {biz_date=} return not data') + exception(f'{e=}') + raise e + price = 0.0 + for sc in spec_config: + # print(f'{sc=}, {recs=}') + uv, up = get_unit_value_price(sc, recs) + if uv is None: + continue + cnt = sc.count / uv + price += up * cnt + return price + +async def get_sell_price(sor, sellerid, buyerid, productid, list_price): + """ + 获得商品售价 + """ + + biz_date = await get_biz_date(sor) + agree = await get_product_agreement(sor, sellerid, buyerid, productid, biz_date) + if agree is None: + return list_price + + debug(f'{agree=}') + if agree.discount: + return list_price * agree.discount + discount = await get_step_discount(sor, agree.agreedetailid, agree.step_type, selllerid, buyerid) + debug(f'step {discount=}') + return discount * list_price + +async def get_price_infos(sor, sellerid, buyerid, productid, prod_config): + """ + 获得商品价格 + resellerid:商户id + productid:商品id + prod_config:商品配置 + 返回 + [ + {ownerid, list_price, price}, ... + ] + """ + cost_pricing_infos = [] + sql1 = """select a.*, +b.pricing_method, +b.apiid +from product a left join prodpricing b on a.id=b.prodid +where a.id = ${productid}$ + and a.orgid = ${sellerid}$""" + prods = await sor.sqlExe(sql1, {'productid':productid, 'sellerid':sellerid}) + if len(prods) < 1: + e = Exception(f'{resellerid=} {productid=} product not found') + exception(f'{e=}') + raise e + prod = prods[0] + if prod.agreeid is not None: + cost_pricing_infos = await get_price_infos(sor, prod.providerid, sellerid, prod.providerpid, prod_config) + + if prod.pricing_method == '0': + # 按资源因子计费 + list_price = await calc_prod_price(sor, productid, prod_config) + sell_price = await get_sell_price(sor, sellerid, buyerid, productid, list_price) + pricing_info = { + 'sellerid': sellerid, + 'buyerid': buyerid, + 'productid': productid, + 'list_price': list_price, + 'sell_price': sell_price + } + elif prod.pricing_method == '1': + # 外部计费 + f = get_serverenv('pricing_api') + list_price = await f(sor, prod.apiid, providerpid, prod_config) + sell_price = await get_sell_price(sor, sellerid, buyerid, productid, list_price) + pricing_info = { + 'sellerid': sellerid, + 'buyerid': buyerid, + 'productid': productid, + 'list_price': list_price, + 'sell_price': sell_price + } + else: + # 供应商计费 + if len(cost_pricing_infos) < 1: + e = Exception(f'{sellerid=}, {buyerid=}, {productid=} has not resell agreement') + exception(e) + raise e + list_price = cost_pricing_infos[-1]['list_price'] + sell_price = await get_sell_price(sor, sellerid, buyerid, productid, list_price) + pricing_info = { + 'sellerid': sellerid, + 'buyerid': buyerid, + 'productid': productid, + 'list_price': list_price, + 'sell_price': sell_price + } + if len(cost_pricing_infos) > 0: + pricing_info['cost_price'] = cost_pricing_infos[-1]['sell_price'] + cost_pricing_infos.append(pricing_info) + return cost_pricing_infos + +async def get_transfee(sor, resellerid, transamt, biz_date): + sql = """select * from reseller +where orgid=${resellerid}$ + and enable_date<=${biz_date}$ + and expire_date>${biz_date}$ +""" + recs = sor.sqlExe(sql, {'resellerid':resellerid, 'biz_date':biz_date}) + if len(recs) < 1: + e = Exception(f'reseller(id={resellerid}) not available at {biz_date=}') + exception(f'{e=}') + raise e + rate = recs[0].transrate + return transamt * rate + diff --git a/platformbiz/product.py b/platformbiz/product.py new file mode 100644 index 0000000..7c7b4ea --- /dev/null +++ b/platformbiz/product.py @@ -0,0 +1,59 @@ +from appPublic.uniqueID import getID +from appPublic.log import debug +from accounting.openaccount import openRetailRelationshipAccounts + +async def get_accounting_orgid(sor): + return '0' + +async def agree_products_clone(sor, orgid, agreeid): + """ + adid:agreedetailid + sor: + return None + """ + sql = """select a.id, +a.name, +a.prodtypeid, +a.description, +a.prod_state, +a.product_code, +a.spec_note, +b.id as apid, +d.id as agreeid, +d.providerid, +d.resellerid +from product a, agreeproduct b, agreedetail c, agreement d +where a.id = b.providerpid + and b.resellerpid is null + and c.id = b.agreedetailid + and d.id = c.agreeid + and d.id = ${agreeid}$ + and a.orgid = ${orgid}$ +""" + recs = await sor.sqlExe(sql, {'agreeid':agreeid, 'orgid':orgid}) + if len(recs) < 1: + debug(f'{orgid=}, {agreeid=}, {sql=}: found no data') + return + + for rec in recs: + pid = getID() + d = { + "id":pid, + "name":rec.name, + "prodtypeid":rec.prodtypeid, + "orgid":rec.resellerid, + "providerid":rec.providerid, + "agreeid":rec.agreeid, + "providerpid":rec.id, + "description":rec.description, + "prod_state":rec.prod_state, + "product_code":rec.product_code, + "spec_note":rec.spec_note + } + await sor.C('product', d) + await sor.U('agreeproduct', {'id':rec.apid, 'resellerpid':pid}) + +async def open_agree_account(sor, providerid, sellerid): + accounting_orgid = await get_accounting_orgid(sor) + await openRetailRelationshipAccounts(sor, accounting_orgid, providerid, sellerid) + diff --git a/platformbiz/recharge.py b/platformbiz/recharge.py new file mode 100644 index 0000000..df3a39c --- /dev/null +++ b/platformbiz/recharge.py @@ -0,0 +1,51 @@ +from accounting.accounting_config import Accounting +from appPublic.registerfunction import rfexe +from appPublic.log import exception, debug +from sqlor.dbpools import DBPools +from pf_pay.ali_pay import Zhifubao_Pay +from platformbiz.getdbname import get_dbname +from platformbiz.biz_order import add_recharge_log, add_recharge_order + +class Recharge: + def __init__(self, customerid, userid, recharge_amt, pc_name): + self.customerid = customerid + self.userid = userid + self.recharge_amt = recharge_amt + self.pc_name = pc_name + if pc_name not in ['alipay']: + raise Exception(f'{pc_name} pay channel not implemented') + + async def start_recharge(self): + return await self.start_recharge_action('RECHARGE') + + + async def start_recharge_reverse(self): + return await self.start_recharge_action('RECHARGE_REVERSE') + + async def start_recharge_action(self, action): + db = DBPools() + dbname = get_dbname() + async with db.sqlorContext(dbname) as sor: + order = await add_recharge_order(sor, self.customerid, + self.userid, + action, + self.recharge_amt) + if order is None: + return None + rl = await add_recharge_log(sor, self.customerid, + self.userid, + action, + order.id, + order.order_date, + self.recharge_amt, + self.pc_name) + if self.pc_name == 'alipay': + z = Zhifubao_Pay() + url = await z.alipay_payment(rl.id, rl.recharge_amt, action) + return url + + exception(f'exception ...........{self.pc_name}') + raise Exception(f'{self.pc_name} pay channel not implemented') + exception('Exception happend ....') + + diff --git a/platformbiz/version.py b/platformbiz/version.py new file mode 100644 index 0000000..b8023d8 --- /dev/null +++ b/platformbiz/version.py @@ -0,0 +1 @@ +__version__ = '0.0.1' diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..59514a1 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,4 @@ +[build-system] +requires = ["setuptools>=61", "wheel"] +build-backend = "setuptools.build_meta" + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..a745bff --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +# git+https://git.kaiyuancloud.cn/yumoqing/rbac +# git+https://git.kaiyuancloud.cn/yumoqing/accounting +# git+https://git.kaiyuancloud.cn/yumoqing/pf_pay diff --git a/script/roleperm.sh b/script/roleperm.sh new file mode 100755 index 0000000..c320114 --- /dev/null +++ b/script/roleperm.sh @@ -0,0 +1,8 @@ +#!/usr/bin/bash + +python ~/py/rbac/script/roleperm.py sage platformbiz provider sale retail_agree agreedetail agreedetailstep agreeproduct organization +python ~/py/rbac/script/roleperm.py sage platformbiz provider sale product prodpricing prodpricingtab +python ~/py/rbac/script/roleperm.py sage platformbiz reseller sale reseller retail_agree agreedetail agreedetailstep agreeproduct organization +python ~/py/rbac/script/roleperm.py sage platformbiz reseller operator provide_agree coupontype agreedetail agreedetailstep agreeproduct organization product prodpricing prodpricingtab coupontype coupon coupon_log recharge_log resource biz_order +python ~/py/rbac/script/roleperm.py sage platformbiz owner operator paychannel prodtype +python ~/py/rbac/script/roleperm.py sage platformbiz customer customer coupon coupon_log biz_order recharge_log resource diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..960f5e0 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,15 @@ +[metadata] +name=platformbiz +version = 0.0.1 +description = a platform business module +author = "yu moqing" +author_email = "yumoqing@gmail.com" +readme = "README.md" +license = "MIT" +[options] +packages = find: +requires_python = ">=3.8" +install_requires = + apppublic + sqlor + ahserver diff --git a/setup.py b/setup.py new file mode 100755 index 0000000..9a4d22c --- /dev/null +++ b/setup.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- + +from platformbiz.version import __version__ +try: + from setuptools import setup +except ImportError: + from distutils.core import setup +required = [] +with open('requirements.txt', 'r') as f: + ls = f.read() + required = ls.split('\n') + +with open('platformbiz/version.py', 'r') as f: + x = f.read() + y = x[x.index("'")+1:] + z = y[:y.index("'")] + version = z +with open("README.md", "r") as fh: + long_description = fh.read() + +name = "platformbiz" +description = "platformbiz" +author = "yumoqing" +email = "yumoqing@gmail.com" + +package_data = {} + +setup( + name="platformbiz", + version=version, + + # uncomment the following lines if you fill them out in release.py + description=description, + author=author, + author_email=email, + platforms='any', + install_requires=required , + packages=[ + "platformbiz" + ], + package_data=package_data, + keywords = [ + ], + url="https://github.com/yumoqing/platformbiz", + long_description=long_description, + long_description_content_type="text/markdown", + classifiers = [ + 'Operating System :: OS Independent', + 'Programming Language :: Python :: 3', + 'License :: OSI Approved :: MIT License', + ], +) diff --git a/tables.xlsx b/tables.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ca35904f4896bbd23cff634b3c7ab82254be045e GIT binary patch literal 9100 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 literal 0 HcmV?d00001 diff --git a/test/test_get_price_infos.py b/test/test_get_price_infos.py new file mode 100644 index 0000000..8ee713c --- /dev/null +++ b/test/test_get_price_infos.py @@ -0,0 +1,26 @@ + +from testenv import runtest +from appPublic.dictObject import DictObject +from platformbiz.pricing import get_price_infos + +async def test(sor): + # prodid = 'a--akNeu1Ia-NOZAJAadf' + prodid = '1wleQ7o-RkrSbR-n368bO' + buyerid = 'yyoJwfBDsRiwN8-WFl2q1' + sellerid = '0' + spec_config = [ + DictObject(**{ + "spec_name":"input_tokens", + "count":12832 + }), + DictObject(**{ + "spec_name":"output_tokens", + "count":786323 + }) + ] + d = await get_price_infos(sor, sellerid, buyerid, prodid, spec_config) + print(f'{d=}') + +if __name__ == '__main__': + runtest(test) + diff --git a/test/test_open_agree_account.py b/test/test_open_agree_account.py new file mode 100644 index 0000000..b1a84a3 --- /dev/null +++ b/test/test_open_agree_account.py @@ -0,0 +1,12 @@ +from testenv import runtest +from appPublic.dictObject import DictObject +from platformbiz.product import open_agree_account + +async def test(sor): + orgid = 'ac4HnQ0txGqmbAFWpI3wp' + agreeid = 'NUvV1sP9TtAdnlxCISzjo' + await open_agree_account(sor, orgid, '0') + +if __name__ == '__main__': + runtest(test) + diff --git a/test/test_prodclone.py b/test/test_prodclone.py new file mode 100644 index 0000000..2b42274 --- /dev/null +++ b/test/test_prodclone.py @@ -0,0 +1,12 @@ +from testenv import runtest +from appPublic.dictObject import DictObject +from platformbiz.product import agree_products_clone + +async def test(sor): + orgid = 'ac4HnQ0txGqmbAFWpI3wp' + agreeid = 'NUvV1sP9TtAdnlxCISzjo' + await agree_products_clone(sor, orgid, agreeid) + +if __name__ == '__main__': + runtest(test) + diff --git a/test/test_prodpricing.py b/test/test_prodpricing.py new file mode 100644 index 0000000..d86b399 --- /dev/null +++ b/test/test_prodpricing.py @@ -0,0 +1,23 @@ +from testenv import runtest +from appPublic.dictObject import DictObject +from platformbiz.pricing import calc_prod_price + +async def test(sor): + # prodid = 'a--akNeu1Ia-NOZAJAadf' + prodid = 'MT-k34zPUAuWqgov4QCmG' + spec_config = [ + DictObject(**{ + "spec_name":"input_tokens", + "count":12832 + })#, + #DictObject(**{ + # "spec_name":"output_tokens", + # "count":786323 + #}) + ] + price = await calc_prod_price(sor, prodid, spec_config) + print(f'{prodid=}, {spec_config=}, {price=}') + +if __name__ == '__main__': + runtest(test) + diff --git a/test/testenv.py b/test/testenv.py new file mode 100644 index 0000000..b5aa057 --- /dev/null +++ b/test/testenv.py @@ -0,0 +1,23 @@ +import os +import asyncio +from appPublic.jsonConfig import getConfig +from sqlor.dbpools import DBPools +from appbase.init import load_appbase +from accounting.init import load_accounting +from platformbiz.init import load_platformbiz + +async def main(asyncfunc): + home = os.environ['HOME'] + p = f'{home}/py/sage' + config = getConfig(p, {'workdir':p}) + db = DBPools(config.databases) + load_appbase() + load_accounting() + load_platformbiz() + async with db.sqlorContext('sage') as sor: + await asyncfunc(sor) + +def runtest(asyncfunc): + asyncio.new_event_loop().run_until_complete(main(asyncfunc)) + + diff --git a/wwwroot/agree_prodclone.dspy b/wwwroot/agree_prodclone.dspy new file mode 100644 index 0000000..8020c2b --- /dev/null +++ b/wwwroot/agree_prodclone.dspy @@ -0,0 +1,9 @@ +debug(f'{params_kw=}') +orgid = await get_userorgid() +db = DBPools() +dbname = get_module_dbname('platformbiz') +async with db.sqlorContext(dbname) as sor: + await agree_products_clone(sor, orgid, params_kw.id) + return UiMessage(title='product clone', message='product clone finished') +debug('product clone error') +return UiError(title='product clone', message='product clone error') diff --git a/wwwroot/agree_productauth.dspy b/wwwroot/agree_productauth.dspy new file mode 100644 index 0000000..49b3ebf --- /dev/null +++ b/wwwroot/agree_productauth.dspy @@ -0,0 +1,7 @@ +debug(f'{params_kw=}') +db = DBPools() +dbname = await get_module_dbname('platformbiz') +async with db.sqlorContext(dbname) as sor: + await agreedetail_products_clone(params_kw.agreedetailid) + return UiMessage(title='clone product', message='OK') +return UiError(title='Product clone', message='Product clone error') diff --git a/wwwroot/agreeproduct_auth.dspy b/wwwroot/agreeproduct_auth.dspy new file mode 100644 index 0000000..4895ab1 --- /dev/null +++ b/wwwroot/agreeproduct_auth.dspy @@ -0,0 +1,7 @@ +debug(f'{params_kw=}') +db = DBPools() +dbname = await get_module_dbname('platformbiz') +async with db.sqlorContext(dbname) as sor: + await agreedetail_products_clone(sor, params_kw.agreedetailid) + return UiMessage(title='clone product', message='OK') +return UiError(title='Product clone', message='Product clone error') diff --git a/wwwroot/menu.ui b/wwwroot/menu.ui new file mode 100644 index 0000000..31a5224 --- /dev/null +++ b/wwwroot/menu.ui @@ -0,0 +1,27 @@ +{% set roles = get_user_roles(get_user()) %} +{ + "widgettype":"Menu", + "options":{ + "target":"page_center", + "cwidth":10, + "items":[ +{% if 'reseller.operator' in roles %} + { + "name":"provider", + "label":"供应商管理" + "url":"{{entire_url('/platformbiz/provider')}}" + } +{% endif %} +{% if 'reseller.sale' in roles %} + { + "name":"reseller", + "label":"分销商管理", + "url":"{{entire_url('/platformbiz/reseller'}}" + } +{% endif %} +{% if 'reseller.accountant' in roles %} +{% endif %} + {} + ] + } +} diff --git a/wwwroot/open_customer_accounts.dspy b/wwwroot/open_customer_accounts.dspy new file mode 100644 index 0000000..68a938b --- /dev/null +++ b/wwwroot/open_customer_accounts.dspy @@ -0,0 +1,18 @@ +username = params_kw.username +db = DBPools() +dbname = await rfexe('get_module_dbname', 'platformbiz') +async with db.sqlorContext(dbname) as sor: + if username: + sql = "select * from users where username = ${username}$" + recs = await sor.sqlExe(sql, {'username':username}) + if len(recs) > 0: + userorgid = recs[0].orgid + else: + e = Exception(f'{user}:user not found') + exception(f'Eeception:{e}') + raise e + else: + userorgid = await get_userorgid() + await openCustomerAccounts(sor, '0', userorgid) + return "开帐成功" +return "开帐失败" diff --git a/wwwroot/open_owner_accounts.dspy b/wwwroot/open_owner_accounts.dspy new file mode 100644 index 0000000..15b892b --- /dev/null +++ b/wwwroot/open_owner_accounts.dspy @@ -0,0 +1,6 @@ +db = DBPools() +dbname = await rfexe('get_module_dbname', 'accounting') +async with db.sqlorContext(dbname) as sor: + await openOwnerAccounts(sor, '0') + return 'OK' +return 'error' diff --git a/wwwroot/owner.operator.menu.ui b/wwwroot/owner.operator.menu.ui new file mode 100644 index 0000000..1529b87 --- /dev/null +++ b/wwwroot/owner.operator.menu.ui @@ -0,0 +1,33 @@ +[ + { + "name":"agree", + "label":"供应商管理", + "url":"{{entire_url('/platformbiz/provider')}}" + }, + { + "name":"paychannel", + "label":"支付渠道", + "url":"{{entire_url('paychannel')}}" + }, + { + "name":"prodtype", + "label":"产品类型", + "url":"{{entire_url('/platformbiz/prodtype')}}" + }, + { + "name":"recharge", + "label":"充值", + "items":[ + { + "name":"recharge_log", + "label":"充值日志" + "url":"{{entire_url('/platformbiz/recharge_log')}}" + }, + { + "name":"recharge_4u", + "label":"充值错账处理", + "url":"{{entire_url('/platformbiz/rechange_accounting.ui')}}" + } + ] + } +] diff --git a/wwwroot/recharge.dspy b/wwwroot/recharge.dspy new file mode 100644 index 0000000..e50ad3f --- /dev/null +++ b/wwwroot/recharge.dspy @@ -0,0 +1,17 @@ +debug(f'{params_kw=}') +try: + userid = await get_user() + userorgid = await get_userorgid() + r = Recharge(userorgid, userid, float(params_kw.recharge_amt), params_kw.channel) + url = await r.start_recharge() + return { + "widgettype":"NewWindow", + "options":{ + "url":url + } + } +except Exception as e: + es = format_exc() + exception(f'{e=}, {es}') + return UiError(title='Error', message=f'Error:{e},trackback={es}') + diff --git a/wwwroot/recharge.ui b/wwwroot/recharge.ui new file mode 100644 index 0000000..0623ea3 --- /dev/null +++ b/wwwroot/recharge.ui @@ -0,0 +1,38 @@ +{ + "widgettype":"Form", + "options":{ + "fields":[ + { + "name":"recharge_amt", + "uitype":"float", + "required":true, + "label":"充值金额" + }, + { + "name":"channel", + "label":"选择充值方式", + "uitype":"checkbox", + "multicheck":false, + "required":true, + "value":"alipay", + "data":[ + { + "value":"alipay", + "text":"支付宝" + } + ] + } + ] + }, + "binds":[ + { + "wid":"self", + "event":"submit", + "actiontype":"urlwidget", + "target":"self", + "options":{ + "url":"{{entire_url('recharge.dspy')}}" + } + } + ] +} diff --git a/wwwroot/reseller.operator.menu.ui b/wwwroot/reseller.operator.menu.ui new file mode 100644 index 0000000..50998f2 --- /dev/null +++ b/wwwroot/reseller.operator.menu.ui @@ -0,0 +1,30 @@ +[ + { + "name":"product", + "label":"产品管理", + "url":"{{entire_url('/platformbiz/product')}}" + }, + { + "name":"coupon", + "label":"代金券", + "items":[ + { + "name":"coupontype", + "label":"代金券设置" + "url":"{{entire_url('/platformbiz/coupontype')}}" + }, + { + "name":"coupon_issue", + "label":"代金券发放", + "url":"{{entire_url('/platformbiz/coupon_issue.ui')}}" + }, + { + "name":"coupon", + "label":"代金券管理", + "url":"{{entire_url('/platformbiz/coupon')}}" + } + ] + } +] + +