views.py 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. # coding=utf-8
  2. import json
  3. import traceback
  4. from django.utils import timezone
  5. from django.views.decorators.csrf import csrf_exempt
  6. from apps.customer.models import Customer
  7. from apps.order.models import GoodsDeliverDetail,SaleOrderDetail
  8. from apps.purchase.models import PurchaseInvoiceImage
  9. from libs.http import JSONResponse
  10. from apps.account.decorators import permission_required, token_required
  11. from libs import utils
  12. from libs.http import DataGridJSONResponse, JSONResponse, JSONError
  13. from apps.goods.models import Goods
  14. from apps.account.models import User
  15. from apps.warehouse.models import WarehouseAdmin
  16. from biz import *
  17. from apps.material.models import DeliverDetail
  18. from apps.plan.models import SalePlanDetail
  19. from apps.office.models import Notice,NoticeBrowseRecord
  20. @csrf_exempt
  21. @token_required
  22. def home_data(request):
  23. department_ids = request.user.getSubDepartmentIds()
  24. user_ids = request.user.getSubEmployeeIds()
  25. data, unchecks_total_count = get_unchecks(request.user,department_ids,user_ids)
  26. children = request.user.getSubDepartmentIds()
  27. children.append(request.user.department.id)
  28. rows = Notice.objects.filter(dendline__gte=timezone.now(), department__in=children)
  29. browsed_ids = NoticeBrowseRecord.objects.filter(browse_user_id=request.user).values_list('notice_id', flat=True)
  30. not_notices = rows.filter(~Q(id__in=browsed_ids))
  31. result = {
  32. 'data':data,
  33. 'unchecks_total_count':unchecks_total_count,
  34. 'notice_unread':not_notices.count(),
  35. }
  36. return JSONResponse(result)
  37. @csrf_exempt
  38. @token_required
  39. def material_data(request):
  40. department_ids = request.user.getSubDepartmentIds()
  41. user_ids = request.user.getSubEmployeeIds()
  42. warehouses_ids = Warehouse.getManagerWarehouses(request.user)
  43. data = get_material_data(request.user, user_ids, department_ids, warehouses_ids)
  44. return JSONResponse(data)
  45. @csrf_exempt
  46. @token_required
  47. def consumable_data(request):
  48. department_ids = request.user.getSubDepartmentIds()
  49. user_ids = request.user.getSubEmployeeIds()
  50. warehouses_ids = Warehouse.getManagerWarehouses(request.user)
  51. data = get_consumable_data(request.user, user_ids, department_ids, warehouses_ids)
  52. return JSONResponse(data)
  53. @csrf_exempt
  54. @token_required
  55. def goods_data(request):
  56. department_ids = request.user.getSubDepartmentIds()
  57. user_ids = request.user.getSubEmployeeIds()
  58. warehouses_ids = Warehouse.getManagerWarehouses(request.user)
  59. data = get_goods_data(request.user, user_ids, department_ids, warehouses_ids)
  60. return JSONResponse(data)
  61. @csrf_exempt
  62. @token_required
  63. def material_deliver_options(request):
  64. type = request.GET.get('type')
  65. users = User.objects.filter(status=User.INSERVICE).values('id', 'name')
  66. data = {
  67. 'users': [],
  68. 'goods': [],
  69. 'warehouses': [],
  70. }
  71. for row in users:
  72. data['users'].append(
  73. {'value':row['id'], 'label':row['name']}
  74. )
  75. goods = Goods.objects.filter(product_base__enabled=True)
  76. for row in goods:
  77. data['goods'].append({
  78. 'value': row.id,
  79. 'label': row.product_base.name
  80. })
  81. try:
  82. type = Warehouse.getValidType(type)
  83. warehouses = WarehouseAdmin.objects.filter(user=request.user, warehouse__type=type,warehouse__enabled=True).order_by('-warehouse__is_default','-warehouse_id').values('warehouse_id', 'warehouse__name')
  84. for row in warehouses:
  85. data['warehouses'].append({
  86. 'value': row['warehouse_id'],
  87. 'label': row['warehouse__name']
  88. })
  89. except Exception, e:
  90. traceback.print_exc()
  91. return JSONResponse(data)
  92. @csrf_exempt
  93. @token_required
  94. def goods_deliver_options(request):
  95. users = User.objects.filter(status=User.INSERVICE).values('id', 'name')
  96. data = {
  97. 'agent_users': [],
  98. 'customers': [],
  99. 'warehouses': [],
  100. 'sale_orders': [],
  101. }
  102. for row in users:
  103. data['agent_users'].append(
  104. {'value':row['id'], 'label':row['name']}
  105. )
  106. customers = Customer.objects.filter()
  107. for row in customers:
  108. data['customers'].append({
  109. 'value': row.id,
  110. 'label': row.name
  111. })
  112. saleorders = SaleOrder.objects.filter()
  113. for row in saleorders:
  114. data['sale_orders'].append({
  115. 'value': row.id,
  116. 'label': row.no
  117. })
  118. try:
  119. warehouses = WarehouseAdmin.objects.filter(user=request.user, warehouse__type=2,warehouse__enabled=True).order_by('-warehouse__is_default','-warehouse_id').values('warehouse_id', 'warehouse__name')
  120. for row in warehouses:
  121. data['warehouses'].append({
  122. 'value': row['warehouse_id'],
  123. 'label': row['warehouse__name']
  124. })
  125. except Exception, e:
  126. traceback.print_exc()
  127. return JSONResponse(data)
  128. @token_required
  129. def material_delete_details(request):
  130. id = request.GET.get('detail_id')
  131. try:
  132. with transaction.atomic():
  133. detail = DeliverDetail.objects.get(id=id)
  134. main = Deliver.objects.get(id=detail.main_id)
  135. detail.delete()
  136. main.update_total()
  137. except Exception, e:
  138. traceback.print_exc()
  139. return JSONError(u'删除失败!')
  140. return JSONResponse()
  141. @token_required
  142. def goods_delete_details(request):
  143. id = request.GET.get('detail_id')
  144. try:
  145. with transaction.atomic():
  146. detail = GoodsDeliverDetail.objects.get(id=id)
  147. main = GoodsDeliver.objects.get(id=detail.main_id)
  148. detail.delete()
  149. main.update_total()
  150. except Exception, e:
  151. traceback.print_exc()
  152. return JSONError(u'删除失败!')
  153. return JSONResponse()
  154. @token_required
  155. def table_touch(request):
  156. id = request.GET.get('id')
  157. data = get_plan_data(id)
  158. return JSONResponse(data)
  159. @token_required
  160. def payment_detail(request):
  161. id = request.GET.get('id')
  162. data = get_payment_data(id)
  163. return JSONResponse(data)
  164. @token_required
  165. def invoice_detail(request):
  166. id = request.GET.get('id')
  167. purchase_order = PurchaseOrderDetail.objects.filter(id=id).first()
  168. main_data = {
  169. 'id': purchase_order.id,
  170. 'no': purchase_order.main.no,
  171. 'name': purchase_order.product.name,
  172. 'model': purchase_order.product.model,
  173. 'supplier_text': purchase_order.main.supplier and purchase_order.main.supplier.name or '',
  174. 'amount': Formater.formatAmountShow(purchase_order.amount),
  175. 'invoice_no': purchase_order.invoice_no,
  176. 'invoice_amount': Formater.formatAmountShow(purchase_order.invoice_amount),
  177. 'invoice_date': Formater.formatStrTime(purchase_order.invoice_date),
  178. 'check_user': purchase_order.check_user and purchase_order.check_user.name or '',
  179. 'check_status': purchase_order.check_status,
  180. 'check_time': Formater.formatStrTime(purchase_order.check_time),
  181. 'create_user': purchase_order.create_user and purchase_order.create_user.name or '',
  182. 'create_time': Formater.formatStrTime(purchase_order.create_time),
  183. }
  184. data = {
  185. 'main_data':main_data,
  186. 'image_data':[]
  187. }
  188. images = PurchaseInvoiceImage.objects.filter(order_detail_id=id)
  189. for image in images:
  190. item = {
  191. 'id': image.id,
  192. 'url': image.invoice_image.url
  193. }
  194. data['image_data'].append(item)
  195. return JSONResponse(data)
  196. @csrf_exempt
  197. @token_required
  198. def customer_select(request):
  199. rows = Customer.objects.filter().values('id','name','mobile')
  200. data = {
  201. 'customers': [],
  202. }
  203. for row in rows:
  204. data['customers'].append(
  205. {'value':row['id'], 'label':u'{0}-{1}'.format(row['name'],row['mobile'])}
  206. )
  207. return JSONResponse(data)
  208. @token_required
  209. def plan_delete_details(request):
  210. id = request.GET.get('detail_id')
  211. try:
  212. with transaction.atomic():
  213. detail = SalePlanDetail.objects.get(id=id)
  214. main = SalePlan.objects.get(id=detail.main_id)
  215. detail.delete()
  216. main.update_total()
  217. except Exception, e:
  218. traceback.print_exc()
  219. return JSONError(u'删除失败!')
  220. return JSONResponse()
  221. @token_required
  222. def order_delete_details(request):
  223. id = request.GET.get('detail_id')
  224. try:
  225. with transaction.atomic():
  226. SaleOrderDetail.objects.filter(id=id).delete()
  227. detail = SaleOrderDetail.objects.get(id=id)
  228. main = SaleOrder.objects.get(id=detail.main_id)
  229. detail.delete()
  230. main.updateAmount()
  231. except Exception, e:
  232. traceback.print_exc()
  233. return JSONError(u'删除失败!')
  234. return JSONResponse()
  235. @token_required
  236. def stock_options(request):
  237. type = request.GET.get('type')
  238. type = Warehouse.getValidType(type)
  239. data = {
  240. 'warehouse_place':[]
  241. }
  242. rows = Warehouse.objects.filter(type=type)
  243. for row in rows:
  244. item = {
  245. 'id': row.id,
  246. 'name': row.name
  247. }
  248. data['warehouse_place'].append(item)
  249. if type == 2:
  250. data['empty'] = [{'id': 1,'name': '是'},
  251. {'id': 0,'name': '否'}]
  252. else:
  253. data['empty'] = [{'id': 1, 'name': '有库存'},
  254. {'id': 0, 'name': '零库存'},
  255. {'id': 2, 'name': '超储'},
  256. {'id': 3, 'name': '短缺'},
  257. {'id': 4, 'name': '负库存'}]
  258. return JSONResponse(data)