viewskopy.py 93 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854
  1. from django.shortcuts import render
  2. # Create your views here.
  3. import json
  4. import re
  5. from django import http
  6. from django.shortcuts import render
  7. # Create your views here.
  8. from django.views import View
  9. from django.conf import settings
  10. from django.db import connection, transaction
  11. import datetime
  12. from utils.cust_data import customer_data
  13. from utils.et_CACC_NO import et_CACC_NO
  14. from utils.examine_ood import examine_ood
  15. from utils.if_account import if_account
  16. from utils.usr_data import usr_data
  17. from utils.monthly_odd import monthly_odd
  18. from utils.executeQuery import executeQuery
  19. # 进货单
  20. class PcOrder(View):
  21. @transaction.atomic
  22. def get(self, request):
  23. context = {
  24. 'a': '进货单'
  25. }
  26. #HttpResponse(content=响应体,content_type=响应体数据MIME类型,status=状态码)
  27. return http.JsonResponse(context)
  28. @transaction.atomic
  29. def post(self, request):
  30. # 1获取参数
  31. req_data = json.loads(request.body.decode())
  32. PS_DD = req_data.get("PS_DD") # 单据日期
  33. CUS_NO = req_data.get("CUS_NO") # 客户编码
  34. CUS_NO_NAME = req_data.get("CUS_NO_NAME",'') # 客户名称
  35. PS_NO = req_data.get("PS_NO") # 单据号码
  36. TAX_ID = req_data.get("TAX_ID") # 扣税类别
  37. ZHANG_ID = req_data.get("ZHANG_ID") # 立账方式
  38. VOH_ID = req_data.get("VOH_ID",'') # 凭证模板
  39. USR = req_data.get("USR") # 制单人编码
  40. USR_NAME = req_data.get("USR_NAME",'') # 制单人名称
  41. # TAX_RTO = req_data.get("TAX_RTO") # 税率 直接取货品资料里面的
  42. AMT = req_data.get("AMT",0) # 金额
  43. DEP = req_data.get("DEP",'') # 部门代号
  44. SAL_NO = req_data.get("SAL_NO",'') # 业务员代号
  45. KPF = req_data.get("KPF", '') # 开票否
  46. #
  47. # print(PS_DD)
  48. # print(CUS_NO)
  49. # print(CUS_NO_NAME)
  50. # print(PS_NO)
  51. # print(TAX_ID)
  52. # print(ZHANG_ID)
  53. # print(VOH_ID)
  54. # print(USR)
  55. # print(USR_NAME)
  56. # # print(TAX_RTO)
  57. # print(AMT)
  58. # print(DEP)
  59. # print(SAL_NO)
  60. # 2校验参数
  61. # 校验日期格式
  62. # 判断是否有输入单号
  63. if PS_DD is None:
  64. return http.HttpResponseForbidden('请输入进货日期')
  65. # 判断是否有输入单号
  66. if PS_NO is None:
  67. return http.HttpResponseForbidden('请输入进货单号')
  68. if PS_NO[:3] != 'PCA' or len(PS_NO) != 11:
  69. #判断单号是否合法
  70. return http.HttpResponseForbidden('进货单号输入不合法,单号必须是PCA开头且长度必须是11位')
  71. #判断金额是否输入正确
  72. if re.compile('(^-?[0-9](\d+)?(\.\d{1,6})?$)|(^0$)|(^\d\.\d{1,2}$)').match(str(AMT)) is None:
  73. return http.HttpResponseForbidden('金额输入不正确')
  74. # 判断是否有输入供应商
  75. if CUS_NO is None:
  76. return http.HttpResponseForbidden('请输入供应商')
  77. if TAX_ID is None:
  78. return http.HttpResponseForbidden('请输入扣税类别')
  79. # 判断扣税类别是否输入正确
  80. if int(TAX_ID) != 1 and int(TAX_ID) != 2 and int(TAX_ID) != 3:
  81. return http.HttpResponseForbidden('扣税类别只能是1(不计税),2(应该税内行),3(应税外加)')
  82. if ZHANG_ID is None:
  83. return http.HttpResponseForbidden('请输入立账方式')
  84. # 判断立账方式是否输入正确
  85. if int(ZHANG_ID) != 1 and int(ZHANG_ID) != 2 and int(ZHANG_ID) != 3:
  86. return http.HttpResponseForbidden('立账方式只能是1(单张立账),2(不立账),3(收到发票才立账)')
  87. # #判断凭证模板是否输入
  88. # if VOH_ID is None:
  89. # return http.HttpResponseForbidden('请输入凭证模板')
  90. # 判断制单人是否输入
  91. if USR is None:
  92. return http.HttpResponseForbidden('请输入制单人')
  93. # 判断税率是否输入
  94. # if TAX_RTO is None:
  95. # return http.HttpResponseForbidden('请输入税率')
  96. # 判断进货单是否存在
  97. row_PS_NO = examine_ood('MF_PSS', 'PS_NO', PS_NO, 'PS_ID', 'PC')
  98. if row_PS_NO > 0:
  99. return http.HttpResponseForbidden('进货单号已存在')
  100. # 判断供应商是否哦存在,不存在的话创建
  101. try:
  102. row_cus_no = customer_data(CUS_NO, CUS_NO_NAME, '2', datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),0)
  103. except Exception:
  104. return http.HttpResponseForbidden('创建厂商失败')
  105. # 判断用户是否存在
  106. # row_usr = usr_data(USR, USR_NAME, datetime.datetime.strptime(PS_DD, '%Y-%m-%d'))
  107. try:
  108. # 判断用户是否存在,不存在则创建
  109. row_usr = usr_data(USR, USR_NAME, datetime.datetime.strptime(PS_DD, '%Y-%m-%d'))
  110. except Exception:
  111. return http.HttpResponseForbidden('创建用户失败')
  112. #判断单号是否存在
  113. #判断供应商是否存在
  114. #判断凭证模板是否存在--------------------------------------------待完成
  115. #判断字段制单人是否存在
  116. # 3数入库
  117. with connection.cursor() as cursor:
  118. # 单张立账或者不立账需要判断凭证模板是否存在,直接判断立账方式不等于3即可
  119. row_usr=0
  120. try:
  121. if VOH_ID !=0:
  122. row_usr = cursor.execute("SELECT COUNT(*) FROM MF_VHID WHERE VOH_ID=%s AND BIL_ID='PC'", [VOH_ID]).fetchall()[0][0]
  123. except Exception:
  124. return http.HttpResponseForbidden('查询凭证模板异常')
  125. if row_usr <= 0:
  126. return http.HttpResponseForbidden('凭证模板在ERP里面不存在请重新输入凭证模板')
  127. # 获取税率
  128. try:
  129. PRDT = cursor.execute("SELECT ISNULL(SPC_TAX,0),[NAME] FROM PRDT WHERE PRD_NO='AQ001'").fetchall()[0]
  130. SPC_TAX=PRDT[0]
  131. PRD_NAME=PRDT[1]
  132. except Exception:
  133. return http.HttpResponseForbidden('获取安装费税率异常')
  134. # 计算本位币 AMTN_NET:本位币, TAX:税金 ,SPC_TAX:税率
  135. TAX=0
  136. AMTN_NET=0
  137. if int(TAX_ID)==1:
  138. TAX=0
  139. AMTN_NET = AMT
  140. if int(TAX_ID)==2:
  141. print(SPC_TAX)
  142. TAX = float(AMT)/(1+float(SPC_TAX)/100)*float(SPC_TAX)/100
  143. AMTN_NET = float(AMT) - TAX
  144. if int(TAX_ID)==3:
  145. TAX = float(AMT) / 100 * float(SPC_TAX)
  146. AMTN_NET = float(AMT)
  147. sid = transaction.savepoint() # 开启事物
  148. try:
  149. # 插入进货单表头-----------------------改CUR_ID RMB
  150. if int(ZHANG_ID) == 1:
  151. cursor.execute("""INSERT INTO MF_PSS(PS_ID,PS_NO,PS_DD,CUS_NO,ZHANG_ID,USR,CHK_MAN,CLS_DATE,SYS_DATE,EXC_RTO,LZ_CLS_ID,CLSLZ,TAX_ID,ARP_NO,VOH_ID,DEP,SAL_NO)
  152. VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
  153. ['PC',
  154. 'PC' + PS_NO[2::],
  155. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  156. CUS_NO,
  157. ZHANG_ID,
  158. USR,
  159. USR,
  160. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  161. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  162. 1,
  163. 'F',
  164. '',
  165. TAX_ID,
  166. 'AP' + PS_NO[2::],
  167. VOH_ID,
  168. DEP,
  169. SAL_NO])
  170. # 插入自定义栏位表
  171. if KPF=='T':
  172. cursor.execute("""INSERT INTO MF_PSS_Z(PS_ID,PS_NO,KPF)VALUES(%s,%s,%s)""",['PC','PC' + PS_NO[2::],'T'])
  173. # 插入立账单MF_MRP------------------改CUR_ID RMB
  174. cursor.execute("""INSERT INTO MF_ARP(ARP_ID,OPN_ID,ARP_NO,BIL_NO,CUS_NO,PAY_DD,AMT,AMTN,AMTN_NET,EXC_RTO,CLOSE_ID,BIL_ID,SYS_DATE,BIL_DD,DEP,ZHANG_ID)VALUES
  175. (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
  176. [2,
  177. 2,
  178. 'AP' + PS_NO[2::],
  179. 'PC' + PS_NO[2::],
  180. CUS_NO,
  181. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  182. 0,
  183. AMT,
  184. AMTN_NET,
  185. 1,
  186. 'F',
  187. 'PC',
  188. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  189. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  190. DEP,
  191. ZHANG_ID])
  192. if int(ZHANG_ID) !=1:
  193. print(3)
  194. cursor.execute("""INSERT INTO MF_PSS(PS_ID,PS_NO,PS_DD,CUS_NO,ZHANG_ID,USR,CHK_MAN,CLS_DATE,SYS_DATE,EXC_RTO,LZ_CLS_ID,CLSLZ,TAX_ID,ARP_NO,VOH_ID,DEP,SAL_NO)
  195. VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
  196. ['PC',
  197. 'PC' + PS_NO[2::],
  198. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  199. CUS_NO,
  200. ZHANG_ID,
  201. USR,
  202. USR,
  203. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  204. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  205. 1,
  206. 'F',
  207. '',
  208. TAX_ID,
  209. '',
  210. VOH_ID,
  211. DEP,
  212. SAL_NO])
  213. # 插入进货单表身
  214. print(4)
  215. cursor.execute("""INSERT INTO TF_PSS(PS_ID,PS_NO,PS_DD,WH,PRD_NO,QTY,UP,AMT,AMTN_NET,TAX_RTO,ITM,UNIT,CSTN_SAL,PRE_ITM,TAX,EST_ITM,PRD_NAME)
  216. VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
  217. ['PC',
  218. 'PC' + PS_NO[2::] ,
  219. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  220. '0000',
  221. 'AQ001',
  222. 1,
  223. AMT,
  224. AMT,
  225. AMTN_NET,
  226. SPC_TAX,
  227. 1,
  228. 1,
  229. AMTN_NET,
  230. 1,
  231. TAX,
  232. 1,
  233. PRD_NAME
  234. ])
  235. except Exception:
  236. transaction.savepoint_rollback(sid) # 语句执行错误,进行语句回滚
  237. return http.HttpResponseForbidden("新增进货单sql语句执行错误")
  238. transaction.savepoint_commit(sid) # 提交事物
  239. # {
  240. # "PS_DD": "2019-12-09",
  241. # "CUS_NO": "AQ1111",
  242. # "CUS_NO_NAME": "天心客户",
  243. # "PS_NO": "PCA19C09001",
  244. # "TAX_ID": "1",
  245. # "ZHANG_ID": "1",
  246. # "VOH_ID": "01",
  247. # "USR": "a00001",
  248. # "USR_NAME": "楠楠",
  249. # "AMT": "200",
  250. # "DEP": "0000",
  251. # "SAL_NO": "A00002",
  252. # "user": "123",
  253. # "password": "123"
  254. # }
  255. context = {
  256. "errmsg": '新增进货单成功',
  257. "code":200
  258. }
  259. # HttpResponse(content=响应体,content_type=响应体数据MIME类型,status=状态码)
  260. return http.JsonResponse(context)
  261. # return http.JsonResponse({"code": RET.OK, "errmsg": "ok"})
  262. @transaction.atomic
  263. def put(self, request):
  264. # 1获取参数
  265. req_data = json.loads(request.body.decode())
  266. PS_DD = req_data.get("PS_DD") # 单据日期
  267. CUS_NO = req_data.get("CUS_NO") # 客户编码
  268. CUS_NO_NAME = req_data.get("CUS_NO_NAME",'') # 客户名称
  269. PS_NO = req_data.get("PS_NO") # 单据号码
  270. TAX_ID = req_data.get("TAX_ID") # 扣税类别
  271. ZHANG_ID = req_data.get("ZHANG_ID") # 立账方式
  272. VOH_ID = req_data.get("VOH_ID") # 凭证模板
  273. # TAX_RTO = req_data.get("TAX_RTO") # 税率 直接取货品资料里面的
  274. AMT = req_data.get("AMT",0) # 金额
  275. DEP = req_data.get("DEP",'') # 部门代号
  276. SAL_NO = req_data.get("SAL_NO",'') # 业务员代号
  277. KPF = req_data.get("KPF", '') # 开票否
  278. # {
  279. # "PS_DD": "2019-12-09",
  280. # "CUS_NO": "AQ1111",
  281. # "CUS_NO_NAME": "天心客户",
  282. # "PS_NO": "PCA19C09001",
  283. # "TAX_ID": "1",
  284. # "ZHANG_ID": "1",
  285. # "VOH_ID": "01",
  286. # "USR": "a00001",
  287. # "USR_NAME": "楠楠",
  288. # "AMT": "200",
  289. # "DEP": "0000",
  290. # "SAL_NO": "A00002",
  291. # "user": "123",
  292. # "password": "123"
  293. # }
  294. # 2校验参数
  295. # 判断是否有输入单号
  296. if PS_DD is None:
  297. return http.HttpResponseForbidden('请输入进货日期')
  298. # 校验日期格式
  299. try:
  300. datetime.datetime.strptime(PS_DD, '%Y-%m-%d')
  301. except Exception:
  302. return http.HttpResponseForbidden('日期格式输入不正确')
  303. # 判断是否有输入单号
  304. if PS_NO is None:
  305. return http.HttpResponseForbidden('请输入进货单号')
  306. if PS_NO[:3] != 'PCA' or len(PS_NO) != 11:
  307. # 判断单号是否合法
  308. return http.HttpResponseForbidden('进货单号输入不合法,单号必须是PCA开头且长度必须为11位')
  309. # 判断金额是否输入正确
  310. if re.compile('(^-?[0-9](\d+)?(\.\d{1,6})?$)|(^0$)|(^\d\.\d{1,2}$)').match(str(AMT)) is None:
  311. return http.HttpResponseForbidden('金额输入不正确')
  312. # 判断是否有输入供应商
  313. if CUS_NO is None:
  314. return http.HttpResponseForbidden('请输入供应商')
  315. if TAX_ID is None:
  316. return http.HttpResponseForbidden('请输入扣税类别')
  317. # 判断扣税类别是否输入正确
  318. if int(TAX_ID) != 1 and int(TAX_ID) != 2 and int(TAX_ID) != 3:
  319. return http.HttpResponseForbidden('扣税类别只能是1(不计税),2(应该税内行),3(应税外加)')
  320. if ZHANG_ID is None:
  321. return http.HttpResponseForbidden('请输入立账方式')
  322. # 判断立账方式是否输入正确
  323. if int(ZHANG_ID) != 1 and int(ZHANG_ID) != 2 and int(ZHANG_ID) != 3:
  324. return http.HttpResponseForbidden('立账方式只能是1(单张立账),2(不立账),3(收到发票才立账)')
  325. # # 判断凭证模板是否输入
  326. # if VOH_ID is None:
  327. # return http.HttpResponseForbidden('请输入凭证模板')
  328. # 判断进货单是否存在
  329. row_PS_NO = examine_ood('MF_PSS', 'PS_NO', PS_NO, 'PS_ID', 'PC')
  330. if row_PS_NO <= 0:
  331. return http.HttpResponseForbidden('进货单号不存在')
  332. # 判断供应商是否哦存在,不存在的话创建
  333. try:
  334. row_cus_no = customer_data(CUS_NO, CUS_NO_NAME, '2', datetime.datetime.strptime(PS_DD, '%Y-%m-%d'), 0)
  335. except Exception:
  336. return http.HttpResponseForbidden('创建厂商失败')
  337. #判断进货单是否产生后续单据===========待完成
  338. # 3数入库
  339. with connection.cursor() as cursor:
  340. # 判断单号是否产生后续单据,立账里面的一冲金额
  341. try:
  342. # 获取原来单据的立账方式
  343. ZHANG_ID_OLD = cursor.execute("SELECT ZHANG_ID FROM MF_PSS WHERE PS_ID='PC' AND PS_NO=%s",['PC' + PS_NO[2::]]).fetchall()[0][0]
  344. if int(ZHANG_ID_OLD)==1:
  345. print('AP' + PS_NO[2::])
  346. row_no = cursor.execute("SELECT ISNULL(AMTN_RCV,0) FROM MF_ARP WHERE ARP_NO=%s AND BIL_ID='PC'", ['AP' + PS_NO[2::]]).fetchall()[0][0]
  347. if float(row_no)>0 and row_no is not None:
  348. return http.HttpResponseForbidden('进货单已产生后续单据不允许修改')
  349. if int(ZHANG_ID_OLD) != 1:
  350. row_no = cursor.execute("SELECT ISNULL(ACC_FP_NO,'') FROM MF_PSS WHERE PS_NO=%s AND PS_ID='PC'",['PC' + PS_NO[2::]]).fetchall()[0][0]
  351. if row_no!='':
  352. return http.HttpResponseForbidden('进货单已产生后续单据不允许修改')
  353. except Exception:
  354. return http.HttpResponseForbidden('判断进货单是否产生后续单据异常')
  355. # 判断传过来的凭证模板在数据库里面是否存在
  356. row_usr=0
  357. try:
  358. if VOH_ID !=0:
  359. row_usr = cursor.execute("SELECT COUNT(*) FROM MF_VHID WHERE VOH_ID=%s AND BIL_ID='PC'", [VOH_ID]).fetchall()[0][0]
  360. except Exception:
  361. return http.HttpResponseForbidden('查询凭证模板异常')
  362. if row_usr <= 0:
  363. return http.HttpResponseForbidden('凭证模板在ERP里面不存在请重新输入凭证模板')
  364. # 获取税率
  365. try:
  366. PRDT = cursor.execute("SELECT ISNULL(SPC_TAX,0),[NAME] FROM PRDT WHERE PRD_NO='AQ001'").fetchall()[0]
  367. SPC_TAX = PRDT[0]
  368. PRD_NAME = PRDT[1]
  369. except Exception:
  370. return http.HttpResponseForbidden('获取安装费税率异常')
  371. # 计算本位币 AMTN_NET:本位币, TAX:税金 ,SPC_TAX:税率
  372. TAX = 0
  373. AMTN_NET = 0
  374. if int(TAX_ID) == 1:
  375. TAX = 0
  376. AMTN_NET = AMT
  377. if int(TAX_ID) == 2:
  378. print(SPC_TAX)
  379. TAX = float(AMT) / (1 + float(SPC_TAX) / 100) * float(SPC_TAX) / 100
  380. AMTN_NET = float(AMT) - TAX
  381. if int(TAX_ID) == 3:
  382. TAX = float(AMT) / 100 * float(SPC_TAX)
  383. AMTN_NET = float(AMT)
  384. sid = transaction.savepoint() # 开启事物
  385. try:
  386. # 插入进货单表头-----------------------改CUR_ID RMB
  387. # 修改自定义栏位表
  388. if KPF == 'T':
  389. cursor.execute("""UPDATE MF_PSS_Z SET KPF=%s WHERE PS_ID='PC' AND PS_NO=%s""",['T','PC' + PS_NO[2::]])
  390. if KPF == 'F':
  391. cursor.execute("""UPDATE MF_PSS_Z SET KPF=%s WHERE PS_ID='PC' AND PS_NO=%s""",['F','PC' + PS_NO[2::]])
  392. if int(ZHANG_ID) == 1:
  393. print(1)
  394. cursor.execute("""UPDATE MF_PSS SET PS_DD=%s,CUS_NO=%s,ZHANG_ID=%s,TAX_ID=%s,VOH_ID=%s,DEP=%s,SAL_NO=%s,MODIFY_DD=%s,ARP_NO=%s WHERE PS_ID='PC' AND PS_NO=%s """,
  395. [
  396. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  397. CUS_NO,
  398. ZHANG_ID,
  399. TAX_ID,
  400. VOH_ID,
  401. DEP,
  402. SAL_NO,
  403. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  404. 'AP' + PS_NO[2::],
  405. 'PC' + PS_NO[2::]
  406. ])
  407. print(2)
  408. # 如果旧的立账方式是1的话那么会有立账单,那么可以直接修改
  409. print(DEP)
  410. print(ZHANG_ID)
  411. if int(ZHANG_ID_OLD)==1:
  412. cursor.execute("""UPDATE MF_ARP SET CUS_NO=%s,PAY_DD=%s,AMTN=%s,AMTN_NET=%s,BIL_DD=%s,DEP=%s,ZHANG_ID=%s WHERE BIL_ID='PC' AND ARP_NO=%s""",
  413. [CUS_NO,
  414. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  415. AMT,
  416. AMTN_NET,
  417. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  418. DEP,
  419. ZHANG_ID,
  420. 'AP' + PS_NO[2::]
  421. ])
  422. #如果旧是立账方式四不为1,然后改为1那么系统会在生成一张立账单
  423. if int(ZHANG_ID_OLD) != 1:
  424. cursor.execute("""INSERT INTO MF_ARP(ARP_ID,OPN_ID,ARP_NO,BIL_NO,CUS_NO,PAY_DD,AMT,AMTN,AMTN_NET,EXC_RTO,CLOSE_ID,BIL_ID,SYS_DATE,BIL_DD,DEP,ZHANG_ID)VALUES
  425. (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
  426. [2,
  427. 2,
  428. 'AP' + PS_NO[2::],
  429. 'PC' + PS_NO[2::],
  430. CUS_NO,
  431. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  432. 0,
  433. AMT,
  434. AMTN_NET,
  435. 1,
  436. 'F',
  437. 'PC',
  438. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  439. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  440. DEP,
  441. ZHANG_ID])
  442. if int(ZHANG_ID) != 1:
  443. print(3)
  444. cursor.execute(
  445. """UPDATE MF_PSS SET PS_DD=%s,CUS_NO=%s,ZHANG_ID=%s,TAX_ID=%s,VOH_ID=%s,DEP=%s,SAL_NO=%s,MODIFY_DD=%s,ARP_NO=%s WHERE PS_ID='PC' AND PS_NO=%s """,
  446. [
  447. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  448. CUS_NO,
  449. ZHANG_ID,
  450. TAX_ID,
  451. VOH_ID,
  452. DEP,
  453. SAL_NO,
  454. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  455. '',
  456. 'PC' + PS_NO[2::]
  457. ])
  458. # 如果立账方式不为1的时候需要删除,立账单
  459. cursor.execute(
  460. """DELETE FROM MF_ARP WHERE BIL_ID='PC' AND ARP_NO=%s""",
  461. [
  462. 'AP' + PS_NO[2::]
  463. ])
  464. # 插入进货单表身
  465. print(4)
  466. cursor.execute("""UPDATE TF_PSS SET PS_DD=%s,UP=%s,AMT=%s,AMTN_NET=%s,CSTN_SAL=%s,TAX=%s,TAX_RTO=%s WHERE PS_ID='PC' AND PS_NO=%s""",
  467. [datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  468. AMT,
  469. AMT,
  470. AMTN_NET,
  471. AMTN_NET,
  472. TAX,
  473. SPC_TAX,
  474. 'PC' + PS_NO[2::]
  475. ])
  476. except Exception:
  477. transaction.savepoint_rollback(sid) # 语句执行错误,进行语句回滚
  478. return http.HttpResponseForbidden("修改进货单sql语句执行错误")
  479. transaction.savepoint_commit(sid) # 提交事物
  480. context = {
  481. "errmsg": '修改进货单成功',
  482. "code": 200
  483. }
  484. return http.JsonResponse(context)
  485. @transaction.atomic
  486. def delete(self, request):
  487. # 1获取参数
  488. req_data = json.loads(request.body.decode())
  489. PS_NO = req_data.get("PS_NO") # 单据日期
  490. # {
  491. # "PS_NO": "PCA19C09001",
  492. # "user": "123",
  493. # "password": "123"
  494. # }
  495. # 判断是否有输入单号
  496. if PS_NO is None:
  497. return http.HttpResponseForbidden('请输入进货单号')
  498. if PS_NO[:3] != 'PCA' or len(PS_NO) != 11:
  499. # 判断单号是否合法
  500. return http.HttpResponseForbidden('进货单号输入不合法,单号必须是PCA开头且长度必须为11位')
  501. # 判断进货单是否存在
  502. row_PS_NO = examine_ood('MF_PSS', 'PS_NO', PS_NO, 'PS_ID', 'PC')
  503. if row_PS_NO <= 0:
  504. return http.HttpResponseForbidden('进货单号不存在')
  505. # 3数入库
  506. with connection.cursor() as cursor:
  507. # 判断单号是否产生后续单据,立账里面的一冲金额
  508. try:
  509. # 获取原来单据的立账方式
  510. ZHANG_ID_OLD = cursor.execute("SELECT ZHANG_ID FROM MF_PSS WHERE PS_ID='PC' AND PS_NO=%s",
  511. ['PC' + PS_NO[2::]]).fetchall()[0][0]
  512. if int(ZHANG_ID_OLD) == 1:
  513. print('AP' + PS_NO[2::])
  514. row_no = cursor.execute("SELECT ISNULL(AMTN_RCV,0) FROM MF_ARP WHERE ARP_NO=%s AND BIL_ID='PC'",
  515. ['AP' + PS_NO[2::]]).fetchall()[0][0]
  516. if float(row_no) > 0 and row_no is not None:
  517. return http.HttpResponseForbidden('进货单已产生后续单据不允许删除')
  518. if int(ZHANG_ID_OLD) != 1:
  519. row_no = cursor.execute("SELECT ISNULL(ACC_FP_NO,'') FROM MF_PSS WHERE PS_NO=%s AND PS_ID='PC'",
  520. ['PC' + PS_NO[2::]]).fetchall()[0][0]
  521. if row_no != '':
  522. return http.HttpResponseForbidden('进货单已产生后续单据不允许删除')
  523. except Exception:
  524. return http.HttpResponseForbidden('判断进货单是否产生后续单据异常')
  525. sid = transaction.savepoint() # 开启事物
  526. try:
  527. cursor.execute("""DELETE FROM MF_PSS WHERE PS_NO=%s AND PS_ID='PC'""", ['PC' + PS_NO[2::]])
  528. cursor.execute("""DELETE FROM TF_PSS WHERE PS_NO=%s AND PS_ID='PC'""", ['PC' + PS_NO[2::]])
  529. cursor.execute("""DELETE FROM MF_ARP WHERE ARP_NO=%s AND BIL_ID='PC'""", ['AP' + PS_NO[2::]])
  530. except Exception:
  531. transaction.savepoint_rollback(sid) # 语句执行错误,进行语句回滚
  532. return http.HttpResponseForbidden("删除进货单失败")
  533. transaction.savepoint_commit(sid) # 提交事物
  534. context = {
  535. "errmsg": '删除进货单成功',
  536. "code": 200
  537. }
  538. return http.JsonResponse(context)
  539. # 销货单
  540. class SaOrder(View):
  541. @transaction.atomic
  542. def get(self, request):
  543. context = {
  544. 'a': '销货单'
  545. }
  546. # HttpResponse(content=响应体,content_type=响应体数据MIME类型,status=状态码)
  547. return http.JsonResponse(context)
  548. @transaction.atomic
  549. def post(self, request):
  550. # 1获取参数
  551. req_data = json.loads(request.body.decode())
  552. PS_DD = req_data.get("PS_DD") # 单据日期
  553. CUS_NO = req_data.get("CUS_NO") # 客户编码
  554. CUS_NO_NAME = req_data.get("CUS_NO_NAME", '') # 客户名称
  555. PS_NO = req_data.get("PS_NO") # 单据号码
  556. TAX_ID = req_data.get("TAX_ID") # 扣税类别
  557. ZHANG_ID = req_data.get("ZHANG_ID") # 立账方式
  558. VOH_ID = req_data.get("VOH_ID", '') # 凭证模板
  559. USR = req_data.get("USR") # 制单人编码
  560. USR_NAME = req_data.get("USR_NAME", '') # 制单人名称
  561. # TAX_RTO = req_data.get("TAX_RTO") # 税率 直接取货品资料里面的
  562. AMT = req_data.get("AMT", 0) # 金额
  563. DEP = req_data.get("DEP", '') # 部门代号
  564. SAL_NO = req_data.get("SAL_NO", '') # 业务员代号
  565. #
  566. # print(PS_DD)
  567. # print(CUS_NO)
  568. # print(CUS_NO_NAME)
  569. # print(PS_NO)
  570. # print(TAX_ID)
  571. # print(ZHANG_ID)
  572. # print(VOH_ID)
  573. # print(USR)
  574. # print(USR_NAME)
  575. # # print(TAX_RTO)
  576. # print(AMT)
  577. # print(DEP)
  578. # print(SAL_NO)
  579. # 2校验参数
  580. # 校验日期格式
  581. # {
  582. # "PS_DD": "2019-12-09",
  583. # "CUS_NO": "AQ2222",
  584. # "CUS_NO_NAME": "收款",
  585. # "PS_NO": "SAB19C09001",
  586. # "TAX_ID": "1",
  587. # "ZHANG_ID": "1",
  588. # "VOH_ID": "01",
  589. # "USR": "a00002",
  590. # "USR_NAME": "楠楠",
  591. # "AMT": "200",
  592. # "DEP": "0000",
  593. # "SAL_NO": "A00002",
  594. # "user": "123",
  595. # "password": "123"
  596. # }
  597. if PS_DD is None:
  598. return http.HttpResponseForbidden('请输入日期')
  599. try:
  600. datetime.datetime.strptime(PS_DD, '%Y-%m-%d')
  601. except Exception:
  602. return http.HttpResponseForbidden('日期格式输入不正确')
  603. # 判断是否有输入单号
  604. if PS_NO is None:
  605. return http.HttpResponseForbidden('请输入销货单号')
  606. if PS_NO[:3] != 'SAB' or len(PS_NO) != 11:
  607. # 判断单号是否合法
  608. return http.HttpResponseForbidden('销货单号输入不合法,单号必须是SAB开头且长度必须为11位')
  609. # 判断金额是否输入正确
  610. if re.compile('(^-?[0-9](\d+)?(\.\d{1,6})?$)|(^0$)|(^\d\.\d{1,2}$)').match(str(AMT)) is None:
  611. return http.HttpResponseForbidden('金额输入不正确')
  612. # 判断是否有输入供应商
  613. if CUS_NO is None:
  614. return http.HttpResponseForbidden('请输入客户')
  615. if TAX_ID is None:
  616. return http.HttpResponseForbidden('请输入扣税类别')
  617. # 判断扣税类别是否输入正确
  618. if int(TAX_ID) != 1 and int(TAX_ID) != 2 and int(TAX_ID) != 3:
  619. return http.HttpResponseForbidden('扣税类别只能是1(不计税),2(应该税内行),3(应税外加)')
  620. if ZHANG_ID is None:
  621. return http.HttpResponseForbidden('请输入立账方式')
  622. # 判断立账方式是否输入正确
  623. if int(ZHANG_ID) != 1 and int(ZHANG_ID) != 2 and int(ZHANG_ID) != 3:
  624. return http.HttpResponseForbidden('立账方式只能是1(单张立账),2(不立账),3(收到发票才立账)')
  625. # #判断凭证模板是否输入
  626. # if VOH_ID is None:
  627. # return http.HttpResponseForbidden('请输入凭证模板')
  628. # 判断制单人是否输入
  629. if USR is None:
  630. return http.HttpResponseForbidden('请输入制单人')
  631. # 判断税率是否输入
  632. # if TAX_RTO is None:
  633. # return http.HttpResponseForbidden('请输入税率')
  634. # 判断进货单是否存在
  635. row_PS_NO = examine_ood('MF_PSS', 'PS_NO', PS_NO, 'PS_ID', 'SA')
  636. if row_PS_NO > 0:
  637. return http.HttpResponseForbidden('销货单号已存在')
  638. # 判断供应商是否哦存在,不存在的话创建
  639. try:
  640. row_cus_no = customer_data(CUS_NO, CUS_NO_NAME, '1', datetime.datetime.strptime(PS_DD, '%Y-%m-%d'), 0)
  641. except Exception:
  642. return http.HttpResponseForbidden('创建客户失败')
  643. # 判断用户是否存在
  644. # row_usr = usr_data(USR, USR_NAME, datetime.datetime.strptime(PS_DD, '%Y-%m-%d'))
  645. try:
  646. # 判断用户是否存在,不存在则创建
  647. row_usr = usr_data(USR, USR_NAME, datetime.datetime.strptime(PS_DD, '%Y-%m-%d'))
  648. except Exception:
  649. return http.HttpResponseForbidden('创建用户失败')
  650. # 判断单号是否存在
  651. # 判断供应商是否存在
  652. # 判断凭证模板是否存在--------------------------------------------待完成
  653. # 判断字段制单人是否存在
  654. # 3数入库
  655. with connection.cursor() as cursor:
  656. # 单张立账或者不立账需要判断凭证模板是否存在,直接判断立账方式不等于3即可
  657. row_usr = 0
  658. try:
  659. if VOH_ID != 0:
  660. row_usr = cursor.execute("SELECT COUNT(*) FROM MF_VHID WHERE VOH_ID=%s AND BIL_ID='SA'", [VOH_ID]).fetchall()[0][0]
  661. except Exception:
  662. return http.HttpResponseForbidden('查询凭证模板异常')
  663. if row_usr <= 0:
  664. return http.HttpResponseForbidden('凭证模板在ERP里面不存在请重新输入凭证模板')
  665. # 获取税率
  666. try:
  667. PRDT = cursor.execute("SELECT ISNULL(SPC_TAX,0),[NAME] FROM PRDT WHERE PRD_NO='AQ001'").fetchall()[0]
  668. SPC_TAX = PRDT[0]
  669. PRD_NAME = PRDT[1]
  670. except Exception:
  671. return http.HttpResponseForbidden('获取安装费税率异常')
  672. # 计算本位币 AMTN_NET:本位币, TAX:税金 ,SPC_TAX:税率
  673. TAX = 0
  674. AMTN_NET = 0
  675. if int(TAX_ID) == 1:
  676. TAX = 0
  677. AMTN_NET = AMT
  678. if int(TAX_ID) == 2:
  679. print(SPC_TAX)
  680. TAX = float(AMT) / (1 + float(SPC_TAX) / 100) * float(SPC_TAX) / 100
  681. AMTN_NET = float(AMT) - TAX
  682. if int(TAX_ID) == 3:
  683. TAX = float(AMT) / 100 * float(SPC_TAX)
  684. AMTN_NET = float(AMT)
  685. sid = transaction.savepoint() # 开启事物
  686. try:
  687. # 插入销货单表头-----------------------改CUR_ID RMB
  688. if int(ZHANG_ID) == 1:
  689. cursor.execute("""INSERT INTO MF_PSS(PS_ID,PS_NO,PS_DD,CUS_NO,ZHANG_ID,USR,CHK_MAN,CLS_DATE,SYS_DATE,EXC_RTO,LZ_CLS_ID,CLSLZ,TAX_ID,ARP_NO,VOH_ID,DEP,SAL_NO,PRT_SW,YD_ID)
  690. VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
  691. ['SA',
  692. 'SA' + PS_NO[2::],
  693. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  694. CUS_NO,
  695. ZHANG_ID,
  696. USR,
  697. USR,
  698. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  699. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  700. 1,
  701. 'F',
  702. '',
  703. TAX_ID,
  704. 'AP' + PS_NO[2::],
  705. VOH_ID,
  706. DEP,
  707. SAL_NO,
  708. 'N',
  709. 'T'
  710. ])
  711. # 插入立账单MF_MRP------------------改CUR_ID RMB
  712. print(222222222)
  713. cursor.execute("""INSERT INTO MF_ARP(ARP_ID,OPN_ID,ARP_NO,BIL_NO,CUS_NO,PAY_DD,AMT,AMTN,AMTN_NET,EXC_RTO,CLOSE_ID,BIL_ID,SYS_DATE,BIL_DD,DEP,ZHANG_ID)VALUES
  714. (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
  715. [1,
  716. 2,
  717. 'AP' + PS_NO[2::],
  718. 'SA' + PS_NO[2::],
  719. CUS_NO,
  720. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  721. 0,
  722. AMT,
  723. AMTN_NET,
  724. 1,
  725. 'F',
  726. 'SA',
  727. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  728. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  729. DEP,
  730. ZHANG_ID])
  731. if int(ZHANG_ID) != 1:
  732. print(3)
  733. cursor.execute("""INSERT INTO MF_PSS(PS_ID,PS_NO,PS_DD,CUS_NO,ZHANG_ID,USR,CHK_MAN,CLS_DATE,SYS_DATE,EXC_RTO,LZ_CLS_ID,CLSLZ,TAX_ID,ARP_NO,VOH_ID,DEP,SAL_NO,PRT_SW,YD_ID)
  734. VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
  735. ['SA',
  736. 'SA' + PS_NO[2::],
  737. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  738. CUS_NO,
  739. ZHANG_ID,
  740. USR,
  741. USR,
  742. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  743. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  744. 1,
  745. 'F',
  746. '',
  747. TAX_ID,
  748. '',
  749. VOH_ID,
  750. DEP,
  751. SAL_NO,
  752. 'N',
  753. 'T'
  754. ])
  755. # 插入进货单表身
  756. print(4)
  757. cursor.execute("""INSERT INTO TF_PSS(PS_ID,PS_NO,PS_DD,WH,PRD_NO,QTY,UP,AMT,AMTN_NET,TAX_RTO,ITM,UNIT,CSTN_SAL,PRE_ITM,TAX,EST_ITM,PRD_NAME)
  758. VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
  759. ['SA',
  760. 'SA' + PS_NO[2::],
  761. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  762. '0000',
  763. 'AQ002',
  764. 1,
  765. AMT,
  766. AMT,
  767. AMTN_NET,
  768. SPC_TAX,
  769. 1,
  770. 1,
  771. AMTN_NET,
  772. 1,
  773. TAX,
  774. 1,
  775. PRD_NAME])
  776. except Exception:
  777. transaction.savepoint_rollback(sid) # 语句执行错误,进行语句回滚
  778. return http.HttpResponseForbidden("新增销货单sql语句执行错误")
  779. transaction.savepoint_commit(sid) # 提交事物
  780. context = {
  781. "errmsg": '新增销货单成功',
  782. "code": 200
  783. }
  784. # HttpResponse(content=响应体,content_type=响应体数据MIME类型,status=状态码)
  785. return http.JsonResponse(context)
  786. # return http.JsonResponse({"code": RET.OK, "errmsg": "ok"})
  787. @transaction.atomic
  788. def put(self, request):
  789. # 1获取参数
  790. req_data = json.loads(request.body.decode())
  791. PS_DD = req_data.get("PS_DD") # 单据日期
  792. CUS_NO = req_data.get("CUS_NO") # 客户编码
  793. CUS_NO_NAME = req_data.get("CUS_NO_NAME", '') # 客户名称
  794. PS_NO = req_data.get("PS_NO") # 单据号码
  795. TAX_ID = req_data.get("TAX_ID") # 扣税类别
  796. ZHANG_ID = req_data.get("ZHANG_ID") # 立账方式
  797. VOH_ID = req_data.get("VOH_ID") # 凭证模板
  798. # TAX_RTO = req_data.get("TAX_RTO") # 税率 直接取货品资料里面的
  799. AMT = req_data.get("AMT", 0) # 金额
  800. DEP = req_data.get("DEP", '') # 部门代号
  801. SAL_NO = req_data.get("SAL_NO", '') # 业务员代号
  802. # {
  803. # "PS_DD": "2019-12-09",
  804. # "CUS_NO": "AQ2222",
  805. # "CUS_NO_NAME": "收款",
  806. # "PS_NO": "SAB19C09001",
  807. # "TAX_ID": "3",
  808. # "ZHANG_ID": "3",
  809. # "VOH_ID": "01",
  810. # "USR": "a00002",
  811. # "USR_NAME": "楠楠",
  812. # "AMT": "200",
  813. # "DEP": "0000",
  814. # "SAL_NO": "A00002",
  815. # "user": "123",
  816. # "password": "123"
  817. # }
  818. # 2校验参数
  819. # 校验日期格式
  820. if PS_DD is None:
  821. return http.HttpResponseForbidden('请输入日期')
  822. try:
  823. datetime.datetime.strptime(PS_DD, '%Y-%m-%d')
  824. except Exception:
  825. return http.HttpResponseForbidden('日期格式输入不正确')
  826. # 判断是否有输入单号
  827. if PS_NO is None:
  828. return http.HttpResponseForbidden('请输入销货单号')
  829. if PS_NO[:3] != 'SAB' or len(PS_NO) != 11:
  830. # 判断单号是否合法
  831. return http.HttpResponseForbidden('销货单号输入不合法,单号必须是SAB开头且长度必须为11位')
  832. # 判断金额是否输入正确
  833. if re.compile('(^-?[0-9](\d+)?(\.\d{1,6})?$)|(^0$)|(^\d\.\d{1,2}$)').match(str(AMT)) is None:
  834. return http.HttpResponseForbidden('金额输入不正确')
  835. # 判断是否有输入供应商
  836. if CUS_NO is None:
  837. return http.HttpResponseForbidden('请输入客户')
  838. if TAX_ID is None:
  839. return http.HttpResponseForbidden('请输入扣税类别')
  840. # 判断扣税类别是否输入正确
  841. if int(TAX_ID) != 1 and int(TAX_ID) != 2 and int(TAX_ID) != 3:
  842. return http.HttpResponseForbidden('扣税类别只能是1(不计税),2(应该税内行),3(应税外加)')
  843. if ZHANG_ID is None:
  844. return http.HttpResponseForbidden('请输入立账方式')
  845. # 判断立账方式是否输入正确
  846. if int(ZHANG_ID) != 1 and int(ZHANG_ID) != 2 and int(ZHANG_ID) != 3:
  847. return http.HttpResponseForbidden('立账方式只能是1(单张立账),2(不立账),3(收到发票才立账)')
  848. # # 判断凭证模板是否输入
  849. # if VOH_ID is None:
  850. # return http.HttpResponseForbidden('请输入凭证模板')
  851. # 判断进货单是否存在
  852. row_PS_NO = examine_ood('MF_PSS', 'PS_NO', PS_NO, 'PS_ID', 'SA')
  853. if row_PS_NO <= 0:
  854. return http.HttpResponseForbidden('销货单号不存在')
  855. # 判断供应商是否哦存在,不存在的话创建
  856. try:
  857. row_cus_no = customer_data(CUS_NO, CUS_NO_NAME, '2', datetime.datetime.strptime(PS_DD, '%Y-%m-%d'), 0)
  858. except Exception:
  859. return http.HttpResponseForbidden('创建客户失败')
  860. # 判断进货单是否产生后续单据===========待完成
  861. # 3数入库
  862. with connection.cursor() as cursor:
  863. # 判断单号是否产生后续单据,立账里面的一冲金额
  864. try:
  865. # 获取原来单据的立账方式
  866. ZHANG_ID_OLD = cursor.execute("SELECT ZHANG_ID FROM MF_PSS WHERE PS_ID='SA' AND PS_NO=%s",
  867. ['SA' + PS_NO[2::]]).fetchall()[0][0]
  868. print('AP' + PS_NO[2::])
  869. if int(ZHANG_ID_OLD) == 1:
  870. print('AP' + PS_NO[2::])
  871. row_no = cursor.execute("SELECT ISNULL(AMTN_RCV,0) FROM MF_ARP WHERE ARP_NO=%s AND BIL_ID='SA'",
  872. ['AP' + PS_NO[2::]]).fetchall()[0][0]
  873. if float(row_no) > 0 and row_no is not None:
  874. return http.HttpResponseForbidden('销货单已产生后续单据不允许修改')
  875. if int(ZHANG_ID_OLD) != 1:
  876. row_no = cursor.execute("SELECT ISNULL(ACC_FP_NO,'') FROM MF_PSS WHERE PS_NO=%s AND PS_ID='SA'",
  877. ['SA' + PS_NO[2::]]).fetchall()[0][0]
  878. if row_no != '':
  879. return http.HttpResponseForbidden('销货单已产生后续单据不允许修改')
  880. except Exception:
  881. return http.HttpResponseForbidden('判断销货单是否产生后续单据异常')
  882. # 判断传过来的凭证模板在数据库里面是否存在
  883. row_usr = 0
  884. try:
  885. if VOH_ID != 0:
  886. row_usr = cursor.execute("SELECT COUNT(*) FROM MF_VHID WHERE VOH_ID=%s AND BIL_ID='PC'", [VOH_ID]).fetchall()[0][0]
  887. except Exception:
  888. return http.HttpResponseForbidden('查询凭证模板异常')
  889. if row_usr <= 0:
  890. return http.HttpResponseForbidden('凭证模板在ERP里面不存在请重新输入凭证模板')
  891. # 获取税率
  892. try:
  893. PRDT = cursor.execute("SELECT ISNULL(SPC_TAX,0),[NAME] FROM PRDT WHERE PRD_NO='AQ001'").fetchall()[0]
  894. SPC_TAX = PRDT[0]
  895. PRD_NAME = PRDT[1]
  896. except Exception:
  897. return http.HttpResponseForbidden('获取安装费税率异常')
  898. # 计算本位币 AMTN_NET:本位币, TAX:税金 ,SPC_TAX:税率
  899. TAX = 0
  900. AMTN_NET = 0
  901. if int(TAX_ID) == 1:
  902. TAX = 0
  903. AMTN_NET = AMT
  904. if int(TAX_ID) == 2:
  905. print(SPC_TAX)
  906. TAX = float(AMT) / (1 + float(SPC_TAX) / 100) * float(SPC_TAX) / 100
  907. AMTN_NET = float(AMT) - TAX
  908. if int(TAX_ID) == 3:
  909. TAX = float(AMT) / 100 * float(SPC_TAX)
  910. AMTN_NET = float(AMT)
  911. sid = transaction.savepoint() # 开启事物
  912. try:
  913. # 插入进货单表头-----------------------改CUR_ID RMB
  914. if int(ZHANG_ID) == 1:
  915. print(1)
  916. cursor.execute(
  917. """UPDATE MF_PSS SET PS_DD=%s,CUS_NO=%s,ZHANG_ID=%s,TAX_ID=%s,VOH_ID=%s,DEP=%s,SAL_NO=%s,MODIFY_DD=%s,ARP_NO=%s WHERE PS_ID='SA' AND PS_NO=%s """,
  918. [
  919. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  920. CUS_NO,
  921. ZHANG_ID,
  922. TAX_ID,
  923. VOH_ID,
  924. DEP,
  925. SAL_NO,
  926. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  927. 'AP' + PS_NO[2::],
  928. 'SA' + PS_NO[2::]
  929. ])
  930. print(2)
  931. # 如果旧的立账方式是1的话那么会有立账单,那么可以直接修改
  932. if int(ZHANG_ID_OLD) == 1:
  933. cursor.execute(
  934. """UPDATE MF_ARP SET CUS_NO=%s,PAY_DD=%s,AMTN=%s,AMTN_NET=%s,BIL_DD=%s,DEP=%s,ZHANG_ID=%s WHERE BIL_ID='SA' AND ARP_NO=%s""",
  935. [CUS_NO,
  936. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  937. AMT,
  938. AMTN_NET,
  939. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  940. DEP,
  941. ZHANG_ID,
  942. 'AP' + PS_NO[2::]
  943. ])
  944. # 如果旧是立账方式四不为1,然后改为1那么系统会在生成一张立账单
  945. if int(ZHANG_ID_OLD) != 1:
  946. cursor.execute("""INSERT INTO MF_ARP(ARP_ID,OPN_ID,ARP_NO,BIL_NO,CUS_NO,PAY_DD,AMT,AMTN,AMTN_NET,EXC_RTO,CLOSE_ID,BIL_ID,SYS_DATE,BIL_DD,DEP,ZHANG_ID)VALUES
  947. (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
  948. [1,
  949. 2,
  950. 'AP' + PS_NO[2::],
  951. 'SA' + PS_NO[2::],
  952. CUS_NO,
  953. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  954. 0,
  955. AMT,
  956. AMTN_NET,
  957. 1,
  958. 'F',
  959. 'SA',
  960. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  961. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  962. DEP,
  963. ZHANG_ID])
  964. if int(ZHANG_ID) != 1:
  965. print(3)
  966. cursor.execute(
  967. """UPDATE MF_PSS SET PS_DD=%s,CUS_NO=%s,ZHANG_ID=%s,TAX_ID=%s,VOH_ID=%s,DEP=%s,SAL_NO=%s,MODIFY_DD=%s,ARP_NO=%s WHERE PS_ID='SA' AND PS_NO=%s """,
  968. [
  969. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  970. CUS_NO,
  971. ZHANG_ID,
  972. TAX_ID,
  973. VOH_ID,
  974. DEP,
  975. SAL_NO,
  976. datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  977. '',
  978. 'SA' + PS_NO[2::]
  979. ])
  980. # 如果立账方式不为1的时候需要删除,立账单
  981. cursor.execute(
  982. """DELETE FROM MF_ARP WHERE BIL_ID='SA' AND ARP_NO=%s""",
  983. [
  984. 'AP' + PS_NO[2::]
  985. ])
  986. # 插入进货单表身
  987. print(4)
  988. cursor.execute(
  989. """UPDATE TF_PSS SET PS_DD=%s,UP=%s,AMT=%s,AMTN_NET=%s,CSTN_SAL=%s,TAX=%s,TAX_RTO=%s WHERE PS_ID='SA' AND PS_NO=%s""",
  990. [datetime.datetime.strptime(PS_DD, '%Y-%m-%d'),
  991. AMT,
  992. AMT,
  993. AMTN_NET,
  994. AMTN_NET,
  995. TAX,
  996. SPC_TAX,
  997. 'SA' + PS_NO[2::]
  998. ])
  999. except Exception:
  1000. transaction.savepoint_rollback(sid) # 语句执行错误,进行语句回滚
  1001. return http.HttpResponseForbidden("新增进货单sql语句执行错误")
  1002. transaction.savepoint_commit(sid) # 提交事物
  1003. context = {
  1004. "errmsg": '修改进货单成功',
  1005. "code": 200
  1006. }
  1007. return http.JsonResponse(context)
  1008. @transaction.atomic
  1009. def delete(self, request):
  1010. # 1获取参数
  1011. req_data = json.loads(request.body.decode())
  1012. PS_NO = req_data.get("PS_NO") # 单据日期
  1013. # 判断是否有输入单号
  1014. if PS_NO is None:
  1015. return http.HttpResponseForbidden('请输入销货单号')
  1016. if PS_NO[:3] != 'SAB' or len(PS_NO) != 11:
  1017. # 判断单号是否合法
  1018. return http.HttpResponseForbidden('销货单号输入不合法,单号必须是SAB开头且长度必须为11位')
  1019. # 判断进货单是否存在
  1020. row_PS_NO = examine_ood('MF_PSS', 'PS_NO', PS_NO, 'PS_ID', 'SA')
  1021. if row_PS_NO <= 0:
  1022. return http.HttpResponseForbidden('销货单号不存在')
  1023. # 3数入库
  1024. with connection.cursor() as cursor:
  1025. # 判断单号是否产生后续单据,立账里面的一冲金额
  1026. try:
  1027. # 获取原来单据的立账方式
  1028. ZHANG_ID_OLD = cursor.execute("SELECT ZHANG_ID FROM MF_PSS WHERE PS_ID='SA' AND PS_NO=%s",
  1029. ['SA' + PS_NO[2::]]).fetchall()[0][0]
  1030. if int(ZHANG_ID_OLD) == 1:
  1031. print('AP' + PS_NO[2::])
  1032. row_no = cursor.execute("SELECT ISNULL(AMTN_RCV,0) FROM MF_ARP WHERE ARP_NO=%s AND BIL_ID='SA'",
  1033. ['AP' + PS_NO[2::]]).fetchall()[0][0]
  1034. if float(row_no) > 0 and row_no is not None:
  1035. return http.HttpResponseForbidden('销货单已产生后续单据不允许删除')
  1036. if int(ZHANG_ID_OLD) != 1:
  1037. row_no = cursor.execute("SELECT ISNULL(ACC_FP_NO,'') FROM MF_PSS WHERE PS_NO=%s AND PS_ID='SA'",
  1038. ['SA' + PS_NO[2::]]).fetchall()[0][0]
  1039. if row_no != '':
  1040. return http.HttpResponseForbidden('销货单已产生后续单据不允许删除')
  1041. except Exception:
  1042. return http.HttpResponseForbidden('判断销货单是否产生后续单据异常')
  1043. sid = transaction.savepoint() # 开启事物
  1044. try:
  1045. cursor.execute("""DELETE FROM MF_PSS WHERE PS_NO=%s AND PS_ID='SA'""", ['SA' + PS_NO[2::]])
  1046. cursor.execute("""DELETE FROM TF_PSS WHERE PS_NO=%s AND PS_ID='SA'""", ['SA' + PS_NO[2::]])
  1047. cursor.execute("""DELETE FROM MF_ARP WHERE ARP_NO=%s AND BIL_ID='SA'""", ['AP' + PS_NO[2::]])
  1048. except Exception:
  1049. transaction.savepoint_rollback(sid) # 语句执行错误,进行语句回滚
  1050. return http.HttpResponseForbidden("删除销货单失败")
  1051. transaction.savepoint_commit(sid) # 提交事物
  1052. context = {
  1053. "errmsg": '删除销货单成功',
  1054. "code": 200
  1055. }
  1056. return http.JsonResponse(context)
  1057. #预付款单
  1058. class PtPayment(View):
  1059. @transaction.atomic
  1060. def get(self, request):
  1061. context = {
  1062. 'a': '客户预收款'
  1063. }
  1064. return http.JsonResponse(context)
  1065. @transaction.atomic
  1066. def post(self, request):
  1067. # 获取参数
  1068. req_data = json.loads(request.body.decode())
  1069. RP_NO = req_data.get("RP_NO") # 预付款单号 字符类型 ----------------1
  1070. RP_DD = req_data.get("RP_DD") # 预付款日期 字符类型 --------------------1
  1071. CUS_NO = req_data.get("CUS_NO") # 预付款客户编码 字符类型 -------------------------1
  1072. CUS_NO_NAME = req_data.get("CUS_NO_NAME",'') # 预付款客户名称 字符类型 ---------------------1
  1073. AMTN_BC = req_data.get("AMTN_BC") # 预付款金额 数字类型 ---------------------------1
  1074. CACC_NO = req_data.get("CACC_NO") # 预付款银行编码 字符类型 ------------1
  1075. USR = req_data.get("USR") # 制单人编码 字符类型 ------------------1
  1076. USR_NAME = req_data.get("USR_NAME",'') # 制单人姓名 字符类型 -----------------------1
  1077. DEP = req_data.get("DEP",'') # 部门 字符类型 -----------------------1
  1078. SAL_NO = req_data.get("SAL_NO",0) # 业务员 字符类型 -----------------------1
  1079. VOH_ID = req_data.get("VOH_ID",0) # 凭证模板 字符类型 -----------------------1
  1080. # {
  1081. # "RP_DD": "2019-12-06",
  1082. # "CUS_NO": "AQ2222",
  1083. # "CUS_NO_NAME": "收款",
  1084. # "RP_NO": "RTF9C0202",
  1085. # "AMTN_BC": "150",
  1086. # "CACC_NO": "01",
  1087. # "VOH_ID": "01",
  1088. # "USR": "a00002",
  1089. # "USR_NAME": "楠楠",
  1090. # "DEP": "0000",
  1091. # "SAL_NO": "A00002",
  1092. # "user": "123",
  1093. # "password": "123"
  1094. # }
  1095. # 判断单号的合法性
  1096. if RP_NO[:3] != 'RTF' or len(RP_NO) != 11:
  1097. return http.HttpResponseForbidden('预收款单号输入不合法,单号必须是RTF开头且长度长度必须为11位')
  1098. if RP_DD is None:
  1099. return http.HttpResponseForbidden('请输入日期')
  1100. # 校验日期格式
  1101. try:
  1102. datetime.datetime.strptime(RP_DD, '%Y-%m-%d')
  1103. except Exception:
  1104. return http.HttpResponseForbidden('日期格式输入不正确')
  1105. if RP_NO is None:
  1106. return http.HttpResponseForbidden('请输入预收款单号')
  1107. if CACC_NO is None:
  1108. return http.HttpResponseForbidden('请输入银行代号')
  1109. # //判断有没有输入银行账号
  1110. try:
  1111. sum_CACC_NO = et_CACC_NO(CACC_NO)
  1112. except Exception:
  1113. return http.HttpResponseForbidden('请检查银行账号是否存在或者是否输入正确')
  1114. if sum_CACC_NO == 'NO':
  1115. return http.HttpResponseForbidden('请检查银行账号是否存在或者是否输入正确')
  1116. # 判断金额输入是否正确
  1117. if re.compile('(^-?[0-9](\d+)?(\.\d{1,6})?$)|(^0$)|(^\d\.\d{1,2}$)').match(str(AMTN_BC)) is None:
  1118. return http.HttpResponseForbidden('金额输入不正确')
  1119. # 判断单号是否存在
  1120. row_ZL_NO = examine_ood('TF_MON', 'RP_NO', RP_NO, 'RP_ID', '1')
  1121. if row_ZL_NO > 0:
  1122. return http.HttpResponseForbidden('预付款单号已存在')
  1123. # 判断供应商是否哦存在,不存在的话创建
  1124. try:
  1125. row_cus_no = customer_data(CUS_NO, CUS_NO_NAME, '1', datetime.datetime.strptime(RP_DD, '%Y-%m-%d'), 0)
  1126. except Exception:
  1127. return http.HttpResponseForbidden('创建客户失败')
  1128. # 判断用户是否存在
  1129. # row_usr = usr_data(USR, USR_NAME, datetime.datetime.strptime(PS_DD, '%Y-%m-%d'))
  1130. try:
  1131. # 判断用户是否存在,不存在则创建
  1132. row_usr = usr_data(USR, USR_NAME, datetime.datetime.strptime(RP_DD, '%Y-%m-%d'))
  1133. except Exception:
  1134. return http.HttpResponseForbidden('创建用户失败')
  1135. # 判断账号类别
  1136. try:
  1137. tp_CACC_NO = if_account(CACC_NO)
  1138. except Exception:
  1139. return http.HttpResponseForbidden("账户类型异常(现金)、(银行)")
  1140. if tp_CACC_NO == 'NO':
  1141. return http.HttpResponseForbidden('账户类型不存在(现金)、(银行)')
  1142. with connection.cursor() as cursor:
  1143. row_usr = 0
  1144. try:
  1145. if VOH_ID != 0:
  1146. row_usr = cursor.execute("SELECT COUNT(*) FROM MF_VHID WHERE VOH_ID=%s AND BIL_ID='RT'", [VOH_ID]).fetchall()[0][0]
  1147. except Exception:
  1148. return http.HttpResponseForbidden('查询凭证模板异常')
  1149. if row_usr <= 0:
  1150. return http.HttpResponseForbidden('凭证模板在ERP里面不存在请重新输入凭证模板')
  1151. # 获取银行账号的会计科目
  1152. try:
  1153. Acc_No_km = cursor.execute("""SELECT ISNULL(Acc_No,'') FROM BACC WHERE BACC_NO=%s""", [CACC_NO]).fetchall()[0][0]
  1154. except Exception:
  1155. return http.HttpResponseForbidden("银行会计科目异常")
  1156. if Acc_No_km == '':
  1157. return http.HttpResponseForbidden('银行会计科目不存在')
  1158. sid = transaction.savepoint() # 开启事物
  1159. try:
  1160. # 银行账户
  1161. if int(tp_CACC_NO) == 1:
  1162. print(11112222)
  1163. # 插入预收款表头
  1164. cursor.execute("""INSERT INTO TF_MON(IRP_ID,RP_NO,ITM,RP_ID,CLS_ID,RP_DD,CUS_NO,INCLUDESON,AMTN_BB,AMTN_CLS,BC_NO,BACC_NO,EXC_RTO,DEP,USR,CHK_MAN,CLS_DATE,SYS_DATE,IEA_ID,IOR_ID,SK_TYPE,VOH_ID,USR_NO)VALUES
  1165. (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
  1166. [
  1167. 'T',
  1168. RP_NO,
  1169. 1,
  1170. 1,
  1171. 'F',
  1172. datetime.datetime.strptime(RP_DD, '%Y-%m-%d'),
  1173. CUS_NO,
  1174. 'F',
  1175. AMTN_BC,
  1176. 0,
  1177. 'BT' + RP_NO[2::],
  1178. CACC_NO,
  1179. 1,
  1180. DEP,
  1181. USR,
  1182. USR,
  1183. datetime.datetime.strptime(RP_DD, '%Y-%m-%d'),
  1184. datetime.datetime.strptime(RP_DD, '%Y-%m-%d'),
  1185. 'F',
  1186. 'F',
  1187. 1,
  1188. VOH_ID,
  1189. SAL_NO
  1190. ])
  1191. print(2323)
  1192. # 现金账户
  1193. if int(tp_CACC_NO) == 2:
  1194. print(1122)
  1195. print(VOH_ID)
  1196. print(SAL_NO)
  1197. # 插入预收款表头
  1198. cursor.execute("""INSERT INTO TF_MON(IRP_ID,RP_NO,ITM,RP_ID,CLS_ID,RP_DD,CUS_NO,INCLUDESON,AMTN_BC,AMTN_CLS,BC_NO,CACC_NO,EXC_RTO,DEP,USR,CHK_MAN,CLS_DATE,SYS_DATE,IEA_ID,IOR_ID,SK_TYPE,VOH_ID,USR_NO)VALUES
  1199. (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
  1200. ['T',RP_NO,1,1,'F',datetime.datetime.strptime(RP_DD, '%Y-%m-%d'), CUS_NO,'F',AMTN_BC,0,'BT' + RP_NO[2::],CACC_NO,1,'0000',USR,USR,datetime.datetime.strptime(RP_DD, '%Y-%m-%d'),
  1201. datetime.datetime.strptime(RP_DD, '%Y-%m-%d'),'F','F',1,VOH_ID,SAL_NO])
  1202. print(1)
  1203. # 插入语收款立账金额
  1204. cursor.execute("""INSERT INTO MF_MON(RP_ID,RP_NO,RP_DD,DEP,AMTN,AMTN_ARP,AMTN_REST,FJ_NUM)VALUES
  1205. (%s,%s,%s,%s,%s,%s,%s,%s)""",
  1206. [1,
  1207. RP_NO,
  1208. datetime.datetime.strptime(RP_DD, '%Y-%m-%d'),
  1209. DEP,
  1210. AMTN_BC,
  1211. 0,
  1212. 0,
  1213. 0])
  1214. print(3)
  1215. # 插入账户收支单表头
  1216. cursor.execute("""INSERT INTO MF_BAC(BB_ID,BB_NO,BB_DD,BACC_NO,ACC_NO,DEP,BIL_NO,EXC_RTO,AMTN,USR,CHK_MAN,OPN_ID,CLS_DATE,SYS_DATE,BIL_ID_N,BIL_NO_N)VALUES
  1217. (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
  1218. ['BT',
  1219. 'BT' + RP_NO[2::],
  1220. datetime.datetime.strptime(RP_DD, '%Y-%m-%d'),
  1221. CACC_NO,
  1222. Acc_No_km,
  1223. DEP,
  1224. 'BT' + RP_NO,
  1225. 1,
  1226. float(AMTN_BC),
  1227. USR,
  1228. USR,
  1229. 'F',
  1230. datetime.datetime.strptime(RP_DD, '%Y-%m-%d'),
  1231. datetime.datetime.strptime(RP_DD, '%Y-%m-%d'),
  1232. 'RT',
  1233. RP_NO])
  1234. print(4)
  1235. # 插入收支单表身
  1236. cursor.execute("""INSERT INTO TF_BAC(BB_ID,BB_NO,ITM,BB_DD,EXC_RTO,AMTN,DEP,CUS_NO,ADD_ID,PRE_ITM)values
  1237. (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
  1238. ['BT',
  1239. 'BT' + RP_NO[2::],
  1240. 1,
  1241. datetime.datetime.strptime(RP_DD, '%Y-%m-%d'),
  1242. 1,
  1243. AMTN_BC,
  1244. DEP,
  1245. CUS_NO,
  1246. '+',
  1247. 1 ])
  1248. except Exception:
  1249. transaction.savepoint_rollback(sid)
  1250. return http.HttpResponseForbidden("预收款单新增sql语句执行异常")
  1251. transaction.savepoint_commit(sid)
  1252. context = {
  1253. "errmsg": '新增客户预付款单成功',
  1254. "code": 200
  1255. }
  1256. return http.JsonResponse(context)
  1257. @transaction.atomic
  1258. def put(self, request):
  1259. # 获取参数
  1260. # 获取参数
  1261. req_data = json.loads(request.body.decode())
  1262. RP_NO = req_data.get("RP_NO") # 预付款单号 字符类型 ----------------1
  1263. RP_DD = req_data.get("RP_DD") # 预付款日期 字符类型 --------------------1
  1264. CUS_NO = req_data.get("CUS_NO") # 预付款客户编码 字符类型 -------------------------1
  1265. CUS_NO_NAME = req_data.get("CUS_NO_NAME", '') # 预付款客户名称 字符类型 ---------------------1
  1266. AMTN_BC = req_data.get("AMTN_BC") # 预付款金额 数字类型 ---------------------------1
  1267. CACC_NO = req_data.get("CACC_NO") # 预付款银行编码 字符类型 ------------1
  1268. USR = req_data.get("USR") # 制单人编码 字符类型 ------------------1
  1269. USR_NAME = req_data.get("USR_NAME", '') # 制单人姓名 字符类型 -----------------------1
  1270. DEP = req_data.get("DEP", '') # 部门 字符类型 -----------------------1
  1271. SAL_NO = req_data.get("SAL_NO", 0) # 业务员 字符类型 -----------------------1
  1272. VOH_ID = req_data.get("VOH_ID", 0) # 凭证模板 字符类型 -----------------------1
  1273. UP_DD = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
  1274. # {
  1275. # "RP_DD": "2019-12-06",
  1276. # "CUS_NO": "AQ2222",
  1277. # "CUS_NO_NAME": "收款",
  1278. # "RP_NO": "RTF9C0201",
  1279. # "AMTN_BC": "100",
  1280. # "CACC_NO": "01",
  1281. # "VOH_ID": "01",
  1282. # "USR": "a00002",
  1283. # "USR_NAME": "楠楠",
  1284. # "DEP": "0000",
  1285. # "SAL_NO": "A00002",
  1286. # "user": "123",
  1287. # "password": "123"
  1288. # }
  1289. if RP_DD is None:
  1290. return http.HttpResponseForbidden('请输入时间')
  1291. if RP_NO[:3] != 'RTF' or len(RP_NO) !=11:
  1292. return http.HttpResponseForbidden('预收款单号输入不合法,单号必须是RTF开头且长度必须是11位')
  1293. # 校验日期格式
  1294. try:
  1295. datetime.datetime.strptime(RP_DD, '%Y-%m-%d')
  1296. except Exception:
  1297. return http.HttpResponseForbidden('日期格式输入不正确')
  1298. if RP_NO is None:
  1299. return http.HttpResponseForbidden('请输入预收款单号')
  1300. if CACC_NO is None:
  1301. return http.HttpResponseForbidden('请输入银行代号')
  1302. # //判断有没有输入银行账号
  1303. try:
  1304. sum_CACC_NO = et_CACC_NO(CACC_NO)
  1305. except Exception:
  1306. return http.HttpResponseForbidden('请检查银行账号是否存在或者是否输入正确')
  1307. if sum_CACC_NO == 'NO':
  1308. return http.HttpResponseForbidden('请检查银行账号是否存在或者是否输入正确')
  1309. # 判断金额输入是否正确
  1310. if re.compile('(^-?[0-9](\d+)?(\.\d{1,6})?$)|(^0$)|(^\d\.\d{1,2}$)').match(str(AMTN_BC)) is None:
  1311. return http.HttpResponseForbidden('金额输入不正确')
  1312. # 判断单号是否存在
  1313. try:
  1314. row_ZL_NO = examine_ood('TF_MON', 'RP_NO', RP_NO, 'RP_ID', '1')
  1315. except Exception:
  1316. return http.HttpResponseForbidden('判断单号是否存在,单号查询异常')
  1317. if row_ZL_NO <= 0:
  1318. return http.HttpResponseForbidden('预付款单号不存在')
  1319. # 判断单号是不是已经产生付款单
  1320. try:
  1321. row_ZL_NO = examine_ood('TF_MON1', 'IRP_NO', RP_NO, 'RP_ID', '1')
  1322. except Exception:
  1323. return http.HttpResponseForbidden('判断单号是否产生后续单据异常')
  1324. if row_ZL_NO > 0:
  1325. return http.HttpResponseForbidden('预付款单已经产生付款单')
  1326. # 判断账号类别
  1327. try:
  1328. tp_CACC_NO = if_account(CACC_NO)
  1329. except Exception:
  1330. return http.HttpResponseForbidden("账户类型异常(现金)、(银行)")
  1331. if tp_CACC_NO == 'NO':
  1332. return http.HttpResponseForbidden('账户类型不存在(现金)、(银行)')
  1333. # 判断供应商是否哦存在,不存在的话创建
  1334. try:
  1335. row_cus_no = customer_data(CUS_NO, CUS_NO_NAME, '1', datetime.datetime.strptime(RP_DD, '%Y-%m-%d'), 0)
  1336. except Exception:
  1337. return http.HttpResponseForbidden('创建客户失败')
  1338. with connection.cursor() as cursor:
  1339. row_usr = 0
  1340. try:
  1341. if VOH_ID != 0:
  1342. row_usr = cursor.execute("SELECT COUNT(*) FROM MF_VHID WHERE VOH_ID=%s AND BIL_ID='RT'", [VOH_ID]).fetchall()[
  1343. 0][0]
  1344. except Exception:
  1345. return http.HttpResponseForbidden('查询凭证模板异常')
  1346. if row_usr <= 0:
  1347. return http.HttpResponseForbidden('凭证模板在ERP里面不存在请重新输入凭证模板')
  1348. # 获取银行账号的会计科目
  1349. try:
  1350. Acc_No_km = cursor.execute("""SELECT ISNULL(Acc_No,'') FROM BACC WHERE BACC_NO=%s""", [CACC_NO]).fetchall()[0][0]
  1351. except Exception:
  1352. return http.HttpResponseForbidden("银行会计科目异常")
  1353. if Acc_No_km == '':
  1354. return http.HttpResponseForbidden('银行会计科目不存在')
  1355. sid = transaction.savepoint() # 开启事物
  1356. try:
  1357. # 银行账户
  1358. if int(tp_CACC_NO) == 1:
  1359. # 修改预付款单
  1360. print(11111)
  1361. cursor.execute(
  1362. """UPDATE TF_MON SET RP_DD=%s,CUS_NO=%s,AMTN_BB=%s,BC_NO=%s,BACC_NO=%s,MODIFY_DD=%s,MODIFY_MAN=%s,VOH_ID=%s,USR_NO=%s,AMTN_BC=NULL,CACC_NO='' WHERE RP_NO=%s""",
  1363. [datetime.datetime.strptime(RP_DD, '%Y-%m-%d'), CUS_NO, AMTN_BC, 'BT' + RP_NO[2::], CACC_NO,
  1364. UP_DD,USR,VOH_ID,SAL_NO, RP_NO])
  1365. # 现金账户
  1366. if int(tp_CACC_NO) == 2:
  1367. print(11222)
  1368. # 修改预付款单
  1369. cursor.execute(
  1370. """UPDATE TF_MON SET RP_DD=%s,CUS_NO=%s,AMTN_BC=%s,BC_NO=%s,CACC_NO=%s,MODIFY_DD=%s,MODIFY_MAN=%s ,VOH_ID=%s,USR_NO=%s,AMTN_BB=NULL,BACC_NO='' WHERE RP_NO=%s""",
  1371. [datetime.datetime.strptime(RP_DD, '%Y-%m-%d'), CUS_NO, AMTN_BC, 'BT' + RP_NO[2::], CACC_NO,
  1372. UP_DD,USR,VOH_ID,SAL_NO, RP_NO])
  1373. # 修改立账单金额
  1374. print(2)
  1375. cursor.execute("""UPDATE MF_MON SET RP_DD=%s,AMTN=%s WHERE RP_NO=%s""",
  1376. [datetime.datetime.strptime(RP_DD, '%Y-%m-%d'), AMTN_BC, RP_NO])
  1377. print(3)
  1378. # 修改账户收支单表头
  1379. cursor.execute("""UPDATE MF_BAC SET BB_DD=%s,BACC_NO=%s,ACC_NO=%s,BIL_NO=%s,AMTN=%s,DEP=%s WHERE BB_NO=%s""",
  1380. [datetime.datetime.strptime(RP_DD, '%Y-%m-%d'), CACC_NO, Acc_No_km, 'BT' + RP_NO,
  1381. float(AMTN_BC),DEP, 'BT' + RP_NO[2::]])
  1382. print(4)
  1383. # 修改账户收支单表身
  1384. cursor.execute("""UPDATE TF_BAC SET BB_DD=%s,AMTN=%s,CUS_NO=%s WHERE BB_NO=%s""",
  1385. [datetime.datetime.strptime(RP_DD, '%Y-%m-%d'), AMTN_BC, CUS_NO, 'BT' + RP_NO[2::]])
  1386. except Exception:
  1387. transaction.savepoint_rollback(sid)
  1388. return http.HttpResponseForbidden("预收款单修改sql语句执行异常")
  1389. transaction.savepoint_commit(sid)
  1390. context = {
  1391. "errmsg": '修改客户预付款单成功',
  1392. "code": 200
  1393. }
  1394. return http.JsonResponse(context)
  1395. @transaction.atomic
  1396. def delete(self, request):
  1397. # 获取参数
  1398. req_data = json.loads(request.body.decode())
  1399. RP_NO = req_data.get("RP_NO") # 预付款单号
  1400. # {
  1401. # "RP_NO": "RTX9A300003"
  1402. # }
  1403. # 判断单号的合法性
  1404. if RP_NO[:3] != 'RTF' or len(RP_NO) != 11:
  1405. return http.HttpResponseForbidden('预收款单号输入不合法,单号必须是RTF开头且长度必须为11位')
  1406. if RP_NO is None:
  1407. return http.HttpResponseForbidden('请输入预收款单号')
  1408. # 判断单号是不是已经产生付款单
  1409. try:
  1410. row_ZL_NO = examine_ood('TF_MON1', 'IRP_NO', RP_NO, 'RP_ID', '1')
  1411. except Exception:
  1412. return http.HttpResponseForbidden('判断单号是否产生后续单据异常')
  1413. if row_ZL_NO > 0:
  1414. return http.HttpResponseForbidden('预付款单已经产生付款单')
  1415. # 判断单号是否存在
  1416. row_ZL_NO = examine_ood('TF_MON', 'RP_NO', RP_NO, 'RP_ID', '1')
  1417. if row_ZL_NO == 0:
  1418. return http.HttpResponseForbidden('预付款单号不存在')
  1419. with connection.cursor() as cursor:
  1420. sid = transaction.savepoint() # 开启事物
  1421. try:
  1422. # 删除付款单
  1423. cursor.execute("""DELETE FROM TF_MON WHERE RP_NO=%s AND RP_ID='1'""", [RP_NO])
  1424. # 删除金额立账单
  1425. cursor.execute("""DELETE FROM MF_MON WHERE RP_NO=%s AND RP_ID='1'""", [RP_NO])
  1426. # 删除账户收支单表头
  1427. cursor.execute("""DELETE FROM MF_BAC WHERE BB_NO=%s""", ['BT' + RP_NO[2::]])
  1428. # 删除账户收支单表身
  1429. cursor.execute("""DELETE FROM TF_BAC WHERE BB_NO=%s""", ['BT' + RP_NO[2::]])
  1430. except Exception:
  1431. transaction.savepoint_rollback(sid)
  1432. return http.HttpResponseForbidden("预收款单删除sql语句执行异常")
  1433. transaction.savepoint_commit(sid)
  1434. context = {
  1435. "errmsg": '删除客户预付款单成功',
  1436. "code": 200
  1437. }
  1438. return http.JsonResponse(context)
  1439. #回传进货票
  1440. class PcInvoice(View):
  1441. def post(self, request):
  1442. with connection.cursor() as cursor:
  1443. # 判断表是否存在
  1444. is_table=cursor.execute("""SELECT table_name FROM information_schema.TABLES WHERE table_name ='MF_LZ1_Z01'""", []).fetchall()
  1445. if len(is_table)==0:
  1446. return http.HttpResponseForbidden("MF_LZ1_Z01,此表不存在请先创建此表")
  1447. #判断表中是否存在数据
  1448. pc_count=cursor.execute("""SELECT COUNT(*) FROM MF_LZ1_Z01""", []).fetchall()[0][0]
  1449. if pc_count==0:
  1450. return http.HttpResponseForbidden("表数据为空请先增加数据")
  1451. #查询未被拉取的数据
  1452. pc_date = cursor.execute("""SELECT ISNULL(A_LZ_DD,'') AS A_LZ_DD,ISNULL(A_CUS_NO ,'') AS A_CUS_NO,ISNULL(C_NAME,'') AS C_NAME,ISNULL(A_LZ_NO,'') AS A_LZ_NO,ISNULL(A_INV_NO,'') AS A_INV_NO,
  1453. ISNULL(A_AMT,0) AS A_AMT,ISNULL(A_AMTN_NET,0) AS A_AMTN_NET,ISNULL(A_TAX,0) AS A_TAX,ISNULL(A_TAX_ID,'') AS A_TAX_ID,ISNULL(A_ZHANG_ID,'') AS A_ZHANG_ID,
  1454. ISNULL(B_PS_NO,'') AS B_PS_NO,ISNULL(B_QTY,0) AS B_QTY,ISNULL(B_UP,0) AS B_UP,ISNULL(B_AMT,0) AS B_AMT,ISNULL(B_TAX_RTO,0) AS B_TAX_RTO,OK FROM MF_LZ1_Z01 WHERE OK ='N'""", []).fetchall()
  1455. # print(pc_date)
  1456. # print(len(pc_date))
  1457. if len(pc_date)==0:
  1458. return http.HttpResponseForbidden("没有需要拉取的数据")
  1459. data=[]
  1460. LZ_NO=[]
  1461. for i in pc_date:
  1462. # print(1111)
  1463. LZ_NO.append(i[3])
  1464. # data.append({"A_LZ_DD": i[0], "A_CUS_NO": i[1]})
  1465. data.append({"A_LZ_DD":str(i[0]),"A_CUS_NO":i[1],"C_NAME":i[2],"A_LZ_NO":i[3],
  1466. "A_INV_NO":i[4],"A_AMT":float(i[5]),"A_AMTN_NET":float(i[6]),"A_TAX":float(i[7]),"A_TAX_ID":i[8],
  1467. "A_ZHANG_ID":i[9],"B_PS_NO":i[10],"B_QTY":float(i[11]),"B_UP":float(i[12]),"B_AMT":float(i[13]),"B_TAX_RTO":float(i[14]),"OK":i[15].strip()})
  1468. for i in LZ_NO:
  1469. cursor.execute("""UPDATE MF_LZ1_Z01 SET OK='Y' WHERE A_LZ_NO=%s""", [i])
  1470. context = {
  1471. "data":data,
  1472. "errmsg": "进货开票数据回传app成功",
  1473. "code":200
  1474. }
  1475. return http.JsonResponse(context)
  1476. #回传销货票
  1477. class SaInvoice(View):
  1478. def post(self, request):
  1479. with connection.cursor() as cursor:
  1480. # 判断表是否存在
  1481. is_table=cursor.execute("""SELECT table_name FROM information_schema.TABLES WHERE table_name ='MF_LZ_Z01'""", []).fetchall()
  1482. if len(is_table)==0:
  1483. return http.HttpResponseForbidden("MF_LZ1_Z01,此表不存在请先创建此表")
  1484. #判断表中是否存在数据
  1485. sa_count=cursor.execute("""SELECT COUNT(*) FROM MF_LZ_Z01""", []).fetchall()[0][0]
  1486. if sa_count==0:
  1487. return http.HttpResponseForbidden("表数据为空请先增加数据")
  1488. # 查询未被拉取的数据
  1489. sa_date = cursor.execute("""SELECT ISNULL(A_LZ_DD,'') AS A_LZ_DD,ISNULL(A_CUS_NO,'') AS A_CUS_NO,ISNULL(C_NAME,'') AS C_NAME,ISNULL(A_LZ_NO,'') AS A_LZ_NO,ISNULL(A_INV_NO,'') AS A_INV_NO,
  1490. ISNULL(A_AMT,0) AS A_AMT,ISNULL(A_AMTN_NET,0) AS A_AMTN_NET,ISNULL(A_TAX,0) AS A_TAX,ISNULL(A_TAX_ID,'') AS A_TAX_ID,ISNULL(A_ZHANG_ID,'') AS A_ZHANG_ID,
  1491. ISNULL(B_CK_NO,'') AS B_CK_NO,ISNULL(B_QTY,0) AS B_QTY,ISNULL(B_UP,0) AS B_UP,ISNULL(B_AMT,0) AS B_AMT,ISNULL(B_TAX_RTO,0) AS B_TAX_RTO,OK FROM MF_LZ_Z01 WHERE OK ='N'""",[]).fetchall()
  1492. if len(sa_date)==0:
  1493. return http.HttpResponseForbidden("没有需要拉取的数据")
  1494. data = []
  1495. LZ_NO = []
  1496. for i in sa_date:
  1497. # print(1111)
  1498. LZ_NO.append(i[3])
  1499. # data.append({"A_LZ_DD": i[0], "A_CUS_NO": i[1]})
  1500. data.append({"A_LZ_DD": str(i[0]), "A_CUS_NO": i[1], "C_NAME": i[2], "A_LZ_NO": i[3],
  1501. "A_INV_NO": i[4], "A_AMT": float(i[5]), "A_AMTN_NET": float(i[6]), "A_TAX": float(i[7]),
  1502. "A_TAX_ID": i[8],"A_ZHANG_ID": i[9], "B_CK_NO": i[10], "B_QTY": float(i[11]), "B_UP": float(i[12]),
  1503. "B_AMT": float(i[13]), "B_TAX_RTO": float(i[14]), "OK": i[15].strip()})
  1504. for i in LZ_NO:
  1505. cursor.execute("""UPDATE MF_LZ_Z01 SET OK='Y' WHERE A_LZ_NO=%s""", [i])
  1506. context = {
  1507. "data": data,
  1508. "errmsg": "销货开票数据回传app成功",
  1509. "code": 200
  1510. }
  1511. return http.JsonResponse(context)
  1512. #客户预收冲应收
  1513. # SELECT ISNULL(C_CUS_NO,'') AS C_CUS_NO,ISNULL(D_NAME,'') AS D_NAME,ISNULL(C_RP_DD,'') AS C_RP_DD,
  1514. # ISNULL(C_RP_NO,'') AS C_RP_NO,ISNULL(B_BIL_NO,'') AS B_BIL_NO,ISNULL(A_AMTN_CLS,0)AS A_AMTN_CLS,
  1515. # ISNULL(OK,'') AS OK,ISNULL(IRP_NO,'') AS IRP_NO,ISNULL(AMTN_IRP,0) AS AMTN_IRP,ISNULL(B_BIL_ID,'') AS B_BIL_ID
  1516. # FROM TC_MON_PC WHERE C_RP_ID=1 AND ISNULL(IRP_NO,'')<>''
  1517. class yrt(View):
  1518. def post(self, request):
  1519. with connection.cursor() as cursor:
  1520. # 判断表是否存在
  1521. is_table=cursor.execute("""SELECT table_name FROM information_schema.TABLES WHERE table_name ='TC_MON_PC'""", []).fetchall()
  1522. if len(is_table)==0:
  1523. return http.HttpResponseForbidden("TC_MON_PC,此表不存在请先创建此表")
  1524. #判断表中是否存在数据
  1525. sa_count=cursor.execute("""SELECT COUNT(*) FROM TC_MON_PC""", []).fetchall()[0][0]
  1526. if sa_count==0:
  1527. return http.HttpResponseForbidden("表数据为空请先增加数据")
  1528. # 查询未被拉取的数据
  1529. sa_date = cursor.execute("""SELECT ISNULL(C_CUS_NO,'') AS C_CUS_NO,ISNULL(D_NAME,'') AS D_NAME,ISNULL(C_RP_DD,'') AS C_RP_DD,
  1530. ISNULL(C_RP_NO,'') AS C_RP_NO,ISNULL(B_BIL_NO,'') AS B_BIL_NO,ISNULL(A_AMTN_CLS,0)AS A_AMTN_CLS,
  1531. ISNULL(OK,'') AS OK,ISNULL(IRP_NO,'') AS IRP_NO,ISNULL(AMTN_IRP,0) AS AMTN_IRP,ISNULL(B_BIL_ID,'') AS B_BIL_ID
  1532. FROM TC_MON_PC WHERE C_RP_ID=1 AND ISNULL(IRP_NO,'')<>'' AND OK='N'""",[]).fetchall()
  1533. if len(sa_date)==0:
  1534. return http.HttpResponseForbidden("没有需要拉取的数据")
  1535. data = []
  1536. RT_NO = []
  1537. for i in sa_date:
  1538. # print(1111)
  1539. RT_NO.append(i[3])
  1540. data.append({"C_CUS_NO": i[0], "D_NAME": i[1], "C_RP_DD": i[2], "C_RP_NO": str(i[3]),
  1541. "B_BIL_NO": i[4], "A_AMTN_CLS": i[5], "OK": i[6], "IRP_NO": i[7].strip(),
  1542. "AMTN_IRP": i[8], "B_BIL_ID": i[9]})
  1543. for i in RT_NO:
  1544. cursor.execute("""UPDATE TC_MON_PC SET OK='Y' WHERE C_RP_NO=%s""", [i])
  1545. context = {
  1546. "data": data,
  1547. "errmsg": "客户预收冲应收数据回传app成功",
  1548. "code": 200
  1549. }
  1550. return http.JsonResponse(context)
  1551. #客户收款单
  1552. # SELECT ISNULL(C_CUS_NO,'') AS C_CUS_NO,ISNULL(D_NAME,'') AS D_NAME,ISNULL(C_RP_DD,'') AS C_RP_DD,
  1553. # ISNULL(C_CACC_NO,'') AS C_CACC_NO,ISNULL(C_AMTN_BC,0) AS C_AMTN_BC,ISNULL(C_RP_NO,'') AS C_RP_NO,
  1554. # ISNULL(B_BIL_NO,'') AS B_BIL_NO,ISNULL(B_BIL_ID,'') AS B_BIL_ID,ISNULL(A_AMTN_CLS,0)AS A_AMTN_CLS,
  1555. # ISNULL(OK,'') AS OK
  1556. # FROM TC_MON_PC WHERE C_RP_ID=1 AND ISNULL(B_BIL_ID,'')<>'' AND ISNULL(IRP_NO,'')=''
  1557. class rt(View):
  1558. def post(self, request):
  1559. with connection.cursor() as cursor:
  1560. # 判断表是否存在
  1561. is_table=cursor.execute("""SELECT table_name FROM information_schema.TABLES WHERE table_name ='TC_MON_PC'""", []).fetchall()
  1562. if len(is_table)==0:
  1563. return http.HttpResponseForbidden("TC_MON_PC,此表不存在请先创建此表")
  1564. #判断表中是否存在数据
  1565. sa_count=cursor.execute("""SELECT COUNT(*) FROM TC_MON_PC""", []).fetchall()[0][0]
  1566. if sa_count==0:
  1567. return http.HttpResponseForbidden("表数据为空请先增加数据")
  1568. # 查询未被拉取的数据
  1569. sa_date = cursor.execute("""SELECT ISNULL(C_CUS_NO,'') AS C_CUS_NO,ISNULL(D_NAME,'') AS D_NAME,ISNULL(C_RP_DD,'') AS C_RP_DD,
  1570. ISNULL(C_CACC_NO,'') AS C_CACC_NO,ISNULL(C_AMTN_BC,0) AS C_AMTN_BC,ISNULL(C_RP_NO,'') AS C_RP_NO,
  1571. ISNULL(B_BIL_NO,'') AS B_BIL_NO,ISNULL(B_BIL_ID,'') AS B_BIL_ID,ISNULL(A_AMTN_CLS,0)AS A_AMTN_CLS,
  1572. ISNULL(OK,'') AS OK FROM TC_MON_PC WHERE C_RP_ID=1 AND ISNULL(B_BIL_ID,'')<>'' AND ISNULL(IRP_NO,'')='' AND OK='N'""",[]).fetchall()
  1573. if len(sa_date) == 0:
  1574. return http.HttpResponseForbidden("没有需要拉取的数据")
  1575. data = []
  1576. RT_NO = []
  1577. for i in sa_date:
  1578. # print(1111)
  1579. RT_NO.append(i[5])
  1580. data.append({"C_CUS_NO": i[0], "D_NAME": i[1], "C_RP_DD": i[2], "C_CACC_NO": str(i[3]),
  1581. "C_AMTN_BC": float(i[4]), "C_RP_NO": i[5], "B_BIL_NO": i[6], "B_BIL_ID": i[7].strip(),
  1582. "A_AMTN_CLS": float(i[8]), "OK": i[9]})
  1583. for i in RT_NO:
  1584. cursor.execute("""UPDATE TC_MON_PC SET OK='Y' WHERE C_RP_NO=%s""", [i])
  1585. context = {
  1586. "data": data,
  1587. "errmsg": "客户收款单数据回传app成功",
  1588. "code": 200
  1589. }
  1590. return http.JsonResponse(context)
  1591. # 厂商付款单
  1592. # SELECT ISNULL(C_CUS_NO,'') AS C_CUS_NO,ISNULL(D_NAME,'') AS D_NAME,ISNULL(C_RP_DD,'') AS C_RP_DD,
  1593. # ISNULL(C_CACC_NO,'') AS C_CACC_NO,ISNULL(C_AMTN_BC,0) AS C_AMTN_BC,ISNULL(C_RP_NO,'') AS C_RP_NO,
  1594. # ISNULL(B_BIL_NO,'') AS B_BIL_NO,ISNULL(B_BIL_ID,'') AS B_BIL_ID,ISNULL(A_AMTN_CLS,0)AS A_AMTN_CLS,
  1595. # ISNULL(OK,'') AS OK
  1596. # FROM TC_MON_PC WHERE C_RP_ID=2 AND ISNULL(B_BIL_ID,'')<>'' AND ISNULL(IRP_NO,'')=''
  1597. class pt(View):
  1598. def post(self, request):
  1599. with connection.cursor() as cursor:
  1600. # 判断表是否存在
  1601. is_table=cursor.execute("""SELECT table_name FROM information_schema.TABLES WHERE table_name ='TC_MON_PC'""", []).fetchall()
  1602. if len(is_table)==0:
  1603. return http.HttpResponseForbidden("TC_MON_PC,此表不存在请先创建此表")
  1604. #判断表中是否存在数据
  1605. sa_count=cursor.execute("""SELECT COUNT(*) FROM TC_MON_PC""", []).fetchall()[0][0]
  1606. if sa_count==0:
  1607. return http.HttpResponseForbidden("表数据为空请先增加数据")
  1608. # 查询未被拉取的数据
  1609. sa_date = cursor.execute("""SELECT ISNULL(C_CUS_NO,'') AS C_CUS_NO,ISNULL(D_NAME,'') AS D_NAME,ISNULL(C_RP_DD,'') AS C_RP_DD,
  1610. ISNULL(C_CACC_NO,'') AS C_CACC_NO,ISNULL(C_AMTN_BC,0) AS C_AMTN_BC,ISNULL(C_RP_NO,'') AS C_RP_NO,
  1611. ISNULL(B_BIL_NO,'') AS B_BIL_NO,ISNULL(B_BIL_ID,'') AS B_BIL_ID,ISNULL(A_AMTN_CLS,0)AS A_AMTN_CLS,
  1612. ISNULL(OK,'') AS OK FROM TC_MON_PC WHERE C_RP_ID=2 AND ISNULL(B_BIL_ID,'')<>'' AND ISNULL(IRP_NO,'')='' AND OK='N'""",[]).fetchall()
  1613. if len(sa_date) == 0:
  1614. return http.HttpResponseForbidden("没有需要拉取的数据")
  1615. data = []
  1616. RT_NO = []
  1617. for i in sa_date:
  1618. # print(1111)
  1619. RT_NO.append(i[5])
  1620. data.append({"C_CUS_NO": i[0], "D_NAME": i[1], "C_RP_DD": i[2], "C_CACC_NO": str(i[3]),
  1621. "C_AMTN_BC": float(i[4]), "C_RP_NO": i[5], "B_BIL_NO": i[6], "B_BIL_ID": i[7].strip(),
  1622. "A_AMTN_CLS": float(i[8]), "OK": i[9]})
  1623. for i in RT_NO:
  1624. cursor.execute("""UPDATE TC_MON_PC SET OK='Y' WHERE C_RP_NO=%s""", [i])
  1625. context = {
  1626. "data": data,
  1627. "errmsg": "客户收款单数据回传app成功",
  1628. "code": 200
  1629. }
  1630. return http.JsonResponse(context)
  1631. # 渲染order.html模板
  1632. class index(View):
  1633. def get(self, request):
  1634. return render(request, 'order.html')
  1635. # order.html模板模板功数据
  1636. class listtb(View):
  1637. def get(self, request):
  1638. # req_data = json.loads(request.body.decode())["params"]
  1639. # print(req_data)
  1640. st_time = request.GET["st_time"] # 开始时间
  1641. sh_time = request.GET['sh_time']
  1642. cus_no = request.GET['cus_no']
  1643. cls_id = request.GET['cls_id']
  1644. PMC_REM = request.GET['pmc_ok']
  1645. sort = request.GET['sort']
  1646. th_time = datetime.datetime.now().strftime('%Y-%m') # 获取本月时间
  1647. page = settings.PAGE_SIZE
  1648. print(page)
  1649. # 处理客户代号
  1650. if cus_no:
  1651. cus_no = ' AND '+ 'A.CUS_NO='+"'"+cus_no+"'"
  1652. print(cus_no)
  1653. # 处理结案否
  1654. if cls_id:
  1655. if cls_id =='1':
  1656. cls_id = ''
  1657. elif cls_id == '2':
  1658. cls_id = 'T'
  1659. cls_id = ' AND '+ 'A.CLS_ID ='+"'"+cls_id+"'"
  1660. else:
  1661. cls_id = ' AND ' + 'A.CLS_ID !=' + "'" + 'T' + "'"
  1662. # 处理是否回复
  1663. if PMC_REM:
  1664. if PMC_REM =='1':
  1665. PMC_REM = ''
  1666. elif PMC_REM == '2':
  1667. PMC_REM = ' AND '+ "ISNULL(C.PMC_REM,'') != ''"
  1668. else:
  1669. PMC_REM = ' AND ' + "ISNULL(C.PMC_REM,'') = ''"
  1670. if sort:
  1671. # F.SPC_NO
  1672. if sort == '1':
  1673. sort = ' ORDER BY F.SPC_NO DESC'
  1674. if sort == '2':
  1675. sort = ' ORDER BY A.CUS_NO DESC'
  1676. else:
  1677. sort = ' ORDER BY C.PMC_REM DESC'
  1678. if st_time =='':
  1679. conditional = ' ORDER BY A.OS_NO DESC'
  1680. else:
  1681. conditional = ' AND ' + 'left(Convert(varchar(100), A.OS_DD, 23), 11) >=' + "'" + st_time + "'" + ' AND ' + 'left(Convert(varchar(100), A.OS_DD, 23), 11) <=' + "'" + sh_time + "'" + cus_no + cls_id + PMC_REM + sort
  1682. # 定义sql语句
  1683. sql = """SELECT TOP 1000 CASE WHEN F.NAME LIKE '%%返工%%' THEN '返工' ELSE '订单' END AS ORDER0 ,ISNULL(B.OS_DD,'') AS OS_DD,
  1684. ISNULL(D.SNM,'') AS CUS_SNM,B.OS_NO AS OS_NO,B.PRD_NO AS PRD_NO,ISNULL(E.DZRL,'') AS DZRL,'' AS RQ,ISNULL(E.YSSL,'') AS YSSL,'' AS YMXH,
  1685. ISNULL(B.QTY,0) AS QTY,ISNULL(E.YSSL *B.QTY,0) AS GZSL,B.EST_DD AS EST_DD,'' AS PD_DEP,ISNULL(B.REM,'') AS REM,CONVERT(CHAR(10), C.PMC_REM, 23) AS PMC_DD, C.WH_REM AS WH_REM,
  1686. B.ITM AS ITM FROM MF_POS A
  1687. LEFT JOIN TF_POS B ON A.OS_NO=B.OS_NO
  1688. LEFT JOIN TF_POS_Z C ON B.OS_NO=C.OS_NO AND B.ITM=C.ITM
  1689. LEFT JOIN CUST D ON A.CUS_NO=D.CUS_NO
  1690. LEFT JOIN PRDT_Z E ON B.PRD_NO=E.PRD_NO
  1691. LEFT JOIN BIL_SPC F ON A.BIL_TYPE=F.SPC_NO AND F.BIL_ID='SA'
  1692. WHERE A.OS_ID='SO' AND B.OS_ID=A.OS_ID AND C.OS_ID=A.OS_ID {0}""".format(conditional)
  1693. with connection.cursor() as cursor:
  1694. no_data = cursor.execute(sql,[]).fetchall()
  1695. data = [
  1696. {"ORDER0": "类别", "OS_DD": '下单日期', "CUS_SNM": "客户名称",
  1697. "OS_NO":"计划单号","PRD_NO":"产品编码","DZRL":"容量(ML)",
  1698. "QY":"容器","YSSL":"套装颜色数","YMXH":"研磨品类型",
  1699. "QTY":"订单数量","GZSL":"灌装数量","EST_DD":"业务交期",
  1700. "PD_DEP":"生产部门","REM":"备注","PMC_DD":"PMC回复交期","WH_REM":"大货备注",
  1701. "operation":"操作","ITM":"项次"},
  1702. ]
  1703. # OS_NO = [] 啊啊撒打算梵蒂冈git add .
  1704. for i in no_data:
  1705. # print(1111)
  1706. # OS_NO.append(i[5])
  1707. data.append({"ORDER0": i[0], "OS_DD": str(i[1])[:10] , "CUS_SNM": i[2], "OS_NO": str(i[3]),
  1708. "PRD_NO": i[4], "DZRL": i[5], "QY": i[6], "YSSL": i[7],
  1709. "YMXH": i[8], "QTY": float(i[9]),"GZSL": float(i[10]),"EST_DD": str(i[11])[:10],
  1710. "PD_DEP": i[12],"REM":i[13],"PMC_DD": str(i[14]),"WH_REM": i[15],"operation": "保存","ITM":i[16]})
  1711. # print(data)
  1712. context = {
  1713. "data": data,
  1714. "errmsg": "一览表获取成功",
  1715. "code": 200
  1716. }
  1717. return http.JsonResponse(context)
  1718. def put(self, request):
  1719. # req_data = json.loads(request.body.decode())
  1720. try:
  1721. eq_data = json.loads(request.body.decode())["params"]
  1722. except Exception:
  1723. return http.HttpResponseForbidden('参数不全')
  1724. req_data = json.loads(request.body.decode())["params"]
  1725. OS_NO = req_data.get("OS_NO")
  1726. PMC_DD = req_data.get("PMC_DD",'')
  1727. WH_REM = req_data.get("WH_REM",'')
  1728. ITM = req_data.get("ITM")
  1729. with connection.cursor() as cursor:
  1730. cursor.execute(
  1731. """UPDATE TF_POS_Z SET PMC_REM=%s,WH_REM=%s WHERE OS_ID='SO' AND OS_NO=%s AND ITM=%s """,
  1732. [PMC_DD,WH_REM,OS_NO,ITM])
  1733. print(OS_NO)
  1734. print(PMC_DD)
  1735. print(WH_REM)
  1736. print(ITM)
  1737. context = {
  1738. "errmsg": "保存成功",
  1739. "code": 200
  1740. }
  1741. return http.JsonResponse(context)
  1742. # 渲染dep_ps.html模板
  1743. class depps(View):
  1744. def get(self, request):
  1745. return render(request, 'dep_ps.html')
  1746. # return render(request, 'xx.html')
  1747. # 获取部门数据
  1748. class dept(View):
  1749. def get(self, request):
  1750. with connection.cursor() as cursor:
  1751. dep_data = cursor.execute("""SELECT DEP,NAME FROM DEPT""",[]).fetchall()
  1752. # print(dep_data)
  1753. data = []
  1754. # print(dep_data)
  1755. for i in dep_data:
  1756. # print(1111)
  1757. data.append({"DEP": i[0], "DEP_NAME": i[1]})
  1758. # print(data)
  1759. context = {
  1760. "data": data,
  1761. "errmsg": "获取部门成功",
  1762. "code": 200
  1763. }
  1764. return http.JsonResponse(context)
  1765. # 查询单号
  1766. class oddNo(View):
  1767. def get(self, request):
  1768. sql = ("SELECT TOP 5 MO_NO FROM MF_MO ")
  1769. result = executeQuery(sql)
  1770. context = {
  1771. "data": result,
  1772. "errmsg": "获取单号成功",
  1773. "code": 200
  1774. }
  1775. return http.JsonResponse(context)
  1776. #获取客户信息
  1777. class Cust(View):
  1778. def get(self, request):
  1779. sql = ("SELECT CUS_NO,NAME FROM CUST WHERE OBJ_ID ='1' OR OBJ_ID = '3'")
  1780. result = executeQuery(sql)
  1781. context = {
  1782. "data": result,
  1783. "errmsg": "获取部门成功",
  1784. "code": 200
  1785. }
  1786. return http.JsonResponse(context)
  1787. # 生成月度产能评估表单号
  1788. class monthly(View):
  1789. def get(self, request):
  1790. monthly_odd_old='20200219009'
  1791. monthly_odd_new = monthly_odd(monthly_odd_old)
  1792. # data = {"monthly_odd_new":monthly_odd_new}
  1793. context = {
  1794. "data": monthly_odd_new,
  1795. "errmsg": "获取部门成功",
  1796. "code": 200
  1797. }
  1798. return http.JsonResponse(context)
  1799. # 测试
  1800. class text(View):
  1801. def get(self, request):
  1802. return render(request, 'text.html')