Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

mshop_refill_module.spm 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. #block
  2. /*
  3. {
  4. "result": true,
  5. "message": "",
  6. "task": {
  7. "id": "task_id",
  8. "title": "Подтоварка м001",
  9. "dep": "001",
  10. "comment": "коммент",
  11. "items": [
  12. {
  13. "id": "xar.Ссылка", (нужно тк фреймворк берет это поле и отдает для update_item)
  14. "product_id": "xar.Ссылка",
  15. "article": "123-091",
  16. "color": "цвет",
  17. "size": "размер",
  18. "sector": "сектор",
  19. "group": "группа",
  20. "image": "https://.../112209-0.jpg",
  21. "title": "ТАПОЧКИ",
  22. "base_price": 1000,
  23. "price": 800,
  24. "disc": "20%",
  25. "label_color": "Белый | Красный",
  26. "rest": 4,
  27. "qty": 3,
  28. "done": false
  29. "done_updated":"2026-01-01 yyyy-mm-dd"
  30. }
  31. ]
  32. }
  33. }
  34. */
  35. #endblock
  36. #proc mshop_refill.sql_query
  37. #se form_date=[$f::now()]
  38. #se DateTo=@{SELECT Date_format('[form_date]', '%Y.%m.%d 23:59:59')}@
  39. #se min_date=@{select DATE_SUB('[DateTo]', interval 7 day )}@
  40. #se DateFrom=@{SELECT Date_format(DATE_SUB('[DateTo]', INTERVAL 1 DAY), '%Y.%m.%d 00:00:00')}@
  41. #if !$report_ref
  42. #se report_ref=@{SELECT UUID_SHORT();}@
  43. #endif
  44. #globalobjs_get Dep.Код
  45. #se Подразделение.код=[dep.код]
  46. #se PriceType=@{select tp.ссылка from spravochniki_tipicen as tp inner join spravochniki_podrazdeleniya as dep on dep.ТипЦен=tp.ссылка where dep.Код='[Подразделение.Код]'}@
  47. #se BasePriceType=@{select IFNULL(БазовыйТипЦен,0) from spravochniki_tipicen as tp inner join spravochniki_podrazdeleniya as dep on dep.ТипЦен=tp.ссылка where dep.Код='[Подразделение.Код]'}@
  48. #se PlanPriceType=@{select Ссылка from spravochniki_tipicen as tp where Наименование='РозницаПлан'}@
  49. #se OPT_SELECT_FIELDS=@!!@
  50. #se EXTRA_WHERE=AND ((rozdv.ДАТА >= pod.ДатаПодтоварки OR pod.ДатаПодтоварки IS NULL) OR (pod.ДатаПодтоварки >= DATE_SUB(NOW(), INTERVAL 24 HOUR)))
  51. #se HAVING_FILTER=
  52. #if $filter_sql
  53. #if [filter_sql]=by_sales
  54. #se HAVING_FILTER=HAVING ДатаПродажи IS NOT NULL
  55. #endif
  56. #if [filter_sql]=by_incoming
  57. #se HAVING_FILTER=HAVING ДатаПоступления IS NOT NULL
  58. #endif
  59. #endif
  60. #include_module refill_sql
  61. [#refill_sql.build_query]
  62. #endproc
  63. #proc mshop_refill.get.list
  64. /*не актуально*/
  65. #src stats
  66. #r
  67. select count(distinct IF(IFNULL(LENGTH(`Подтоварить`),0)>0 AND `Дата подтоварки`>date(date_sub(now(),interval 6 hour)),Характеристика,NULL)) as items_done,
  68. count(distinct IF(IFNULL(LENGTH(`Подтоварить`),0)=0 OR `Дата подтоварки`>date(date_sub(now(),interval 6 hour)),Характеристика,NULL)) as items
  69. from ([#mshop_refill.sql_query]) as qq
  70. #query
  71. #endsrc
  72. #se j:result={{"result":true,"message":""}}
  73. #v j:task={{}}
  74. #v j:task.id="torg_zal"
  75. #v j:task.title="ПОДТОВАРКА ТЗ"
  76. #v j:task.created="[$f::now]"
  77. #v j:task.comment="Подтоварка торгового зала"
  78. #if {stats}
  79. #v j:task.items_count={stats.items}
  80. #v j:task.items_done={stats.items_done}
  81. #else
  82. #v j:task.items_count=0
  83. #v j:task.items_done=0
  84. #endif
  85. #se j:result.tasks=[[ [j:task] ]]
  86. #endproc
  87. #block
  88. /*
  89. {
  90. result: true,
  91. message: '',
  92. task: {
  93. id: 'task_id',
  94. title: 'ПРЕОЦЕНКА м001',
  95. created: '01.01.2020',
  96. number: '012-022',
  97. dep: '001',
  98. price_type: 'тип цены',
  99. label_color: '#',
  100. comment: 'коммент',
  101. items: [
  102. {
  103. id: 1,
  104. article: '123-091',
  105. color: 'цвет',
  106. size: 'размер',
  107. group: 'группа1',
  108. image: 'https://.../112209-0.jpg',
  109. title: 'ТАПОЧКИ',
  110. price: 1290,
  111. qty: 3,
  112. done: false
  113. },
  114. ]
  115. }
  116. }
  117. */
  118. #endblock
  119. #proc mshop_refill.get.task(task_id)
  120. #se filter_sql=[?j:query.filter_mod]
  121. #src items_sql
  122. #r
  123. [#mshop_refill.sql_query]
  124. #query
  125. #endsrc
  126. #globalobjs_get Dep.Код
  127. #se j:result={{"result":true,"message":""}}
  128. #v DF=@{select Date_format('[DateFrom]', '%d.%m.%Y')}@
  129. #v DT=@{select Date_format('[DateTo]', '%d.%m.%Y')}@
  130. #v j:task={{}}
  131. #v j:task.id="torg_zal"
  132. #v j:task.title="ПОДТОВАРКА [dep.код]"
  133. #v j:task.dep="[dep.код]"
  134. #v j:task.comment="За период с [DF] по [DT]"
  135. #v j:items=[[ ]]
  136. #foreach items_sql
  137. #v j:item={{}}
  138. #v j:item.id="{items_sql.tov_id}"
  139. #v j:item.product_id="{items_sql.product_id}"
  140. #v j:item.article="{items_sql.Артикул}"
  141. #v j:item.color="{items_sql.Цвет}"
  142. #v j:item.size="{items_sql.Размер}"
  143. #v j:item.sector="{items_sql.Сектор}"
  144. #v j:item.group="{items_sql.Группа}"
  145. #v j:item.image="{items_sql.Фото}"
  146. #v j:item.title="{items_sql.Наименование}"
  147. #v j:item.base_price="{items_sql.Цена план}"
  148. #v j:item.price="{items_sql.Цена (текущая)}"
  149. #v j:item.disc="{items_sql.Скидка}"
  150. #v j:item.label_color="{items_sql.Ценник}"
  151. #v j:item.rest={items_sql.Остаток}
  152. #v j:item.qty={items_sql.Нужно подтоварить}
  153. #v j:item.done=[$f::if({items_sql.Выполнено},true,false)]
  154. #v j:item.done_updated="{items_sql.Дата подтоварки}"
  155. #v j:items[[]]=$j:item
  156. #endfor
  157. #v j:task.items=$j:items
  158. #se j:result.task=$j:task
  159. #endproc
  160. #proc mshop_refill.get.update_item(task_id)
  161. ;#v user_ref=@{select ссылка from spravochniki_sotrudniki where ref=@'[j:body.access_payload.sp_ref]'@ }@
  162. #endproc
  163. #proc mshop_refill.set_done(Характеристика,done,user_ref)
  164. #v DateTo=@{SELECT Date_format(NOW(), '%Y.%m.%d 23:59:59')}@
  165. #v DateFrom=@{SELECT Date_format(DATE_SUB('[DateTo]', INTERVAL 1 DAY), '%Y.%m.%d 00:00:00')}@
  166. #src nom_data
  167. #r
  168. SELECT
  169. nom.Ссылка AS Номенклатура,
  170. sznsv.Наименование AS цвет
  171. FROM @<Справочники.ХарактеристикиНоменклатуры>@ AS xar
  172. INNER JOIN @<Справочники.Номенклатура>@ AS nom ON nom.Ссылка=xar.Владелец
  173. left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=xar.Ссылка and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
  174. left join @<Справочники.ЗначенияСвойств>@ sznsv on sznsv.Ссылка=znsv.Значение
  175. WHERE xar.Ссылка=[Характеристика]
  176. #query
  177. #endsrc
  178. #se set_result=не изменен
  179. #if @{select count(*) from const_podtovarka where Номенклатура={nom_data.Номенклатура} and Датаврем >= DATE_SUB(NOW(), INTERVAL 24 HOUR) and Цвет='{nom_data.цвет}'}@
  180. #if [done]=true
  181. @{
  182. update const_podtovarka set Дата=date(Now()), Датаврем=Now(),Ответственный='[user_ref]' where Номенклатура={nom_data.Номенклатура} and Дата BETWEEN '[DateFrom]' AND '[DateTo]' AND Цвет='{nom_data.цвет}'
  183. }@
  184. #se set_result=обновили
  185. #else
  186. /*отменить подтоварку*/
  187. @{
  188. delete from const_podtovarka where Номенклатура={nom_data.Номенклатура} and Дата BETWEEN '[DateFrom]' AND '[DateTo]' AND Цвет='{nom_data.цвет}'
  189. }@
  190. #se set_result=удалили
  191. #endif
  192. #else
  193. #if [done]=true
  194. @{
  195. insert into const_podtovarka (`Дата`, `Датаврем`,`Номенклатура`,`Характеристика`,Ответственный,Цвет)
  196. values (date(NOW()), NOW(), {nom_data.Номенклатура}, [Характеристика], '[user_ref]', '{nom_data.цвет}')
  197. }@
  198. #se set_result=создали
  199. #endif
  200. #endif
  201. #endproc
  202. #proc mshop_refill.post.update_item
  203. #v Характеристика=@'[j:query.item_id]'@
  204. #v done=[j:body.done]
  205. #v user_ref=@{select ссылка from spravochniki_sotrudniki where ref=@'[j:body.access_payload.sp_ref]'@ }@
  206. #v j:result={{}}
  207. #if !$Характеристика
  208. #v j:result.result=false
  209. #v j:result.message="Не указан item_id"
  210. #se j:result=$j:result
  211. #exit
  212. #endif
  213. #call mshop_refill.set_done($Характеристика,$done,$user_ref)
  214. #if [set_result]=не изменен
  215. #v j:result.result=false
  216. #v j:result.message="товар недоступен для редактирования"
  217. #se j:result=$j:result
  218. #else
  219. #v lst_upd=@{select max(podtv.ДатаВрем) from const_podtovarka as podtv where podtv.Характеристика=[Характеристика]}@
  220. #if !$lst_upd
  221. #v lst_upd=[$f::now()]
  222. #endif
  223. #v j:update_item={{}}
  224. #v j:update_item.id=[Характеристика]
  225. #v j:update_item.done=[done]
  226. #v j:update_item.done_updated="[lst_upd]"
  227. #v j:items_update=[[ ]]
  228. #v j:items_update[[]]=$j:update_item
  229. #v j:update={{}}
  230. #v j:update.items=$j:items_update
  231. #v j:result.result=true
  232. #v j:result.message=""
  233. #v j:result.update=$j:update
  234. #se j:result=$j:result
  235. #endif
  236. #endproc
  237. #proc mshop_refill.post.close_task
  238. #v user_ref=@{select ссылка from spravochniki_sotrudniki where ref=@'[j:body.access_payload.sp_ref]'@ }@
  239. #src items
  240. #r
  241. [#mshop_refill.sql_query]
  242. #query
  243. #endsrc
  244. #foreach items
  245. #if [$f::if({items.done},true,false)]=false
  246. #call mshop_refill.set_done('{items.Характеристика}',true,$user_ref)
  247. ;TODO заполнять j:result.update как в mshop_refill.post.update_item
  248. #endif
  249. #endfor
  250. #se j:result={{"result":true,"message":"Все позиции подтоварены"}}
  251. #endproc
  252. #proc mshop_refill.get.find_item
  253. #se code=[j:query.code]
  254. #src find_and_validate
  255. #r
  256. SELECT
  257. xar.Ссылка as item_id
  258. FROM spravochniki_xarakteristikinomenklaturi xar
  259. INNER JOIN spravochniki_nomenklatura nom ON nom.ссылка = xar.Владелец
  260. LEFT JOIN spravochniki_shtrixkodatovarov sht ON sht.Характеристика = xar.Ссылка
  261. LEFT JOIN spravochniki_shtrixkoda shk ON shk.Ссылка = sht.Ссылка
  262. INNER JOIN @<Таблицы.ОстаткиТовараВТаре>@ ost ON ost.Характеристика = xar.Ссылка
  263. LEFT JOIN @<Справочники.Номенклатура>@ nnom ON nnom.Ссылка = nom.Родитель
  264. LEFT JOIN @<Справочники.Номенклатура>@ nnnom ON nnnom.Ссылка = nnom.Родитель
  265. LEFT JOIN @<Справочники.Номенклатура>@ nnnnom ON nnnnom.Ссылка = nnnom.Родитель
  266. LEFT JOIN const_marking_values as mark on mark.Характеристика=xar.Ссылка
  267. WHERE (
  268. IFNULL(ШтрихКод,'null123')='[code]'
  269. OR nom.Артикул ='[code]'
  270. OR xar.Код='[code]'
  271. or nom.Артикул='[code]'
  272. OR nom.наименование like '%[code]%'
  273. or xar.Ссылка='[code]'
  274. OR mark.Серийныйномер='[code]'
  275. OR mark.Кодмаркировки='[code]'
  276. )
  277. AND ost.Количество >= 1
  278. AND ost.Тара = @{select ссылка from @<Справочники.Тара>@ where Наименование like 'Торговый%' limit 1}@
  279. AND EXISTS (
  280. SELECT 1 FROM @<Таблицы.ДвижениеТовара>@ dv
  281. INNER JOIN @<Справочники.Тара>@ tt ON tt.Ссылка = dv.Тара
  282. WHERE dv.Характеристика = xar.Ссылка
  283. AND dv.Количество < 0
  284. AND dv.Дата BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE()
  285. AND tt.Наименование = 'ТорговыйЗал'
  286. LIMIT 1
  287. )
  288. AND nom.МинимальныйОстаток > 0
  289. AND nnnnom.Наименование NOT IN ('СЕРТИФИКАТЫ','БИЖУТЕРИЯ','УПАКОВОЧНЫЕ ПАКЕТЫ')
  290. LIMIT 1
  291. #query
  292. #endsrc
  293. #if !{find_and_validate}
  294. #se j:result={{"result":false,"message":"код не опознан","item_id":""}}
  295. #exitproc
  296. #endif
  297. #foreach find_and_validate
  298. #v item_id={find_and_validate.item_id}
  299. #endfor
  300. #se j:result={{"result":true,"message":"","item_id":"[item_id]"}}
  301. #endproc