| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- #block
- /*
- {
- "result": true,
- "message": "",
- "task": {
- "id": "weeek/2026-01-01",
- "title": "Переоценка м001",
- "dep": "001",
- "comment": "коммент",
- "items": [
- {
- "id": "Артикул/Цвет/Документ",
- "product_id": "Артикул/Цвет/Документ",
- "article": "123-091",
- "color": "цвет",
- "size": "размер",
- "sector": "сектор",
- "group": "группа",
- "image": "https://.../112209-0.jpg",
- "title": "ТАПОЧКИ",
- "base_price": 1000,
- "price": 800,
- "disc": "20%",
- "label_color": "Белый | Красный",
- "rest": 4,
- "qty": null,
- "done": false,
- "done_updated": "2026-01-01 12:21:11"
- }
- ]
- }
- }
- */
- #endblock
- #proc create_tables
- #src ct
- #r
- create table if not EXISTS [const_pereocenka_report] (
- `ССЫЛКА` INT UNSIGNED NOT NULL AUTO_INCREMENT,
- `ДОКУМЕНТ` INT UNSIGNED NOT NULL,
- `АРТИКУЛ` VARCHAR(50) NOT NULL,
- `ЦВЕТ` VARCHAR(50) NOT NULL,
- `ЦЕНА` INT NOT NULL,
- `ДатаИзменения` datetime default NULL,
- PRIMARY KEY (`ССЫЛКА`),
- KEY (`ДОКУМЕНТ`),
- KEY (`АРТИКУЛ`),
- KEY (`ЦВЕТ`),
- KEY (`ЦЕНА`),
- KEY (`ДатаИзменения`),
- UNIQUE KEY (`ДОКУМЕНТ`,`АРТИКУЛ`,`ЦВЕТ`,`ЦЕНА`)
- ) ENGINE=InnoDB CHARACTER SET cp1251;
- #query
- #endsrc
-
- #if !@{select 1 from information_schema.columns where table_schema=schema() and table_name='const_pereocenka_report' and column_name='ДатаИзменения'}@
- @{alter table [const_pereocenka_report] add ДатаИзменения datetime default NULL;}@
- #endif
- #endproc
- #proc init_params
- #include_module price_module
- #se const_pereocenka_report=const_pereocenka_report
- #globalobjs_get Dep.Код
- #se Подразделение.код=[dep.код]
-
- #se DateTo=@{SELECT Date_format(NOW(), '%Y.%m.%d 23:59:59')}@
- #if [task_id]=week
- #se DateFrom=@{SELECT Date_format(DATE_SUB('[DateTo]', INTERVAL 7 DAY), '%Y.%m.%d 00:00:00')}@
- #else
- #if [task_id]=daily
- #se DateFrom=@{SELECT Date_format(DATE_SUB('[DateTo]', INTERVAL 1 DAY), '%Y.%m.%d 00:00:00')}@
- #else
- #se DateFrom=@{SELECT Date_format('[task_id]', '%Y.%m.%d 00:00:00')}@
- #se DateTo=@{SELECT Date_format('[task_id]', '%Y.%m.%d 23:59:59')}@
- #endif
- #endif
-
- ;#se DF=@{select Date_format(DATE_ADD('[DateFrom]', INTERVAL -1 DAY), '%Y.%m.%d 16:00:00')}@
- ;#se DT=@{select Date_format('[DateTo]', '%Y.%m.%d 23:59:59')}@
-
- ;#se user_ref=[user_ref]
- #se user_ref=@{select ссылка from spravochniki_sotrudniki where ref=@'[j:body.access_payload.sp_ref]'@ }@
- #se store_id=@{select MAX(ссылка) from spravochniki_tara where наименование like '%торговый%зал%'}@
- #se tara_t=[store_id]
- #se PlanPriceType=@{select Ссылка from spravochniki_tipicen as tp where Наименование='РозницаПлан'}@
-
-
- #endproc
- #proc mshop_reprice.sql_query
-
- #call init_params
- #call create_tables
- #se report_ref=@{SELECT UUID_SHORT();}@
- #se SELECT_QUERY=@!,concat('https://media.saticogroup.com/dm/goodpics/marmalato?good_id=',if(c_name.Наименование is null,substring_index((select min(Код) from @<Справочники.ХарактеристикиНоменклатуры>@ as xar where xar.Владелец=nom.Ссылка),',',1),substring_index(xar.Код,',',1))) as Фото_link ,s_name.Наименование AS 'Размер'!@
- #include_module reprice_sql
- [#reprice_sql.build_query]
-
- #endproc
- #proc mshop_reprice.get.list
- /*не актуальный*/
- #src stats
- #r
- select count(distinct IF(IFNULL(LENGTH(`Подтоварить`),0)>0 AND `Дата подтоварки`>date(date_sub(now(),interval 6 hour)),Характеристика,NULL)) as items_done,
- count(distinct IF(IFNULL(LENGTH(`Подтоварить`),0)=0 OR `Дата подтоварки`>date(date_sub(now(),interval 6 hour)),Характеристика,NULL)) as items
- from ([#mshop_reprice.sql_query]) as qq
- #query
- #endsrc
-
- #se j:result={{"result":true,"message":""}}
-
- #v j:task={{}}
- #v j:task.id="torg_zal"
- #v j:task.title="ПОДТОВАРКА ТЗ"
- #v j:task.created="[$f::now]"
- #v j:task.comment="Подтоварка торгового зала"
-
- #if {stats}
- #v j:task.items_count={stats.items}
- #v j:task.items_done={stats.items_done}
- #else
- #v j:task.items_count=0
- #v j:task.items_done=0
- #endif
-
- #se j:result.tasks=[[ [j:task] ]]
-
- #endproc
-
- #proc mshop_reprice.get.task
-
- #se task_id=[j:query.task_id]
-
- #src items_sql
- #r
- [#mshop_reprice.sql_query]
- #query
- #endsrc
-
- #se j:result={{"result":true,"message":""}}
-
- #v DF=@{select Date_format('[DateFrom]', '%d.%m.%Y')}@
- #v DT=@{select Date_format('[DateTo]', '%d.%m.%Y')}@
-
- #v j:task={{}}
- #v j:task.id="[task_id]"
- #v j:task.title="Переоценка м[Подразделение.код]"
- #v j:task.dep="[Подразделение.код]"
- #v j:task.comment="За период с [DF] по [DT]"
-
- #v j:items=[[ ]]
- #foreach items_sql
- #v j:item={{}}
-
- #v j:item.id="{items_sql.pos_id}"
- #v j:item.product_id="{items_sql.Коды}"
- #v j:item.article="{items_sql.Артикул}"
- #v j:item.color="{items_sql.Цвет}"
- #v j:item.size="{items_sql.Размер}"
- #v j:item.sector="{items_sql.Сектор}"
- #v j:item.group="{items_sql.Группа}"
- #v j:item.image="{items_sql.Фото_link}"
- #v j:item.title="{items_sql.Наименование}"
- #v j:item.base_price="{items_sql.Цена план}"
- #v j:item.price="{items_sql.Цена новая}"
- #v j:item.disc="{items_sql.Скидка, %}"
- #v j:item.label_color="{items_sql.Ценник}"
- #v j:item.rest={items_sql.Остаток (арт.+цвет)}
- #v j:item.qty={items_sql.Остаток (арт.+цвет)}
- #v j:item.done=[$f::if({items_sql.done},true,false)]
- #v j:item.done_updated="{items_sql.done_updated}"
- #v j:items[[]]=$j:item
- #endfor
-
- #v j:task.items=$j:items
- #se j:result.task=$j:task
-
- #endproc
-
- #proc mshop_reprice.post.update_item
-
- #se const_pereocenka_report=const_pereocenka_report
- #v tov_id=[j:query.item_id]
- #v done=[j:body.done]
- #v user_ref=@{select ссылка from spravochniki_sotrudniki where ref=@'[j:body.access_payload.sp_ref]'@ }@
- #v j:result={{}}
-
- #if !$tov_id
- #v j:result.result=false
- #v j:result.message="Не указан код товара"
- #se j:result=$j:result
- #exit
- #endif
- #v (artikul,color,doc,price)=@{SELECT CONCAT_WS(',', SUBSTRING_INDEX('[tov_id]', '/', 1), SUBSTRING_INDEX(SUBSTRING_INDEX('[tov_id]', '/', 2), '/', -1), SUBSTRING_INDEX(SUBSTRING_INDEX('[tov_id]', '/', 3), '/', -1), SUBSTRING_INDEX('[tov_id]', '/', -1))}@
-
-
- ;#v tov_exist=@{SELECT 1 FROM INNER JOIN WHERE = AND }@
- ;TODO проверка существования товара по артикул + цвет
- #v lst_upd=[$f::now()]
- #if [done]=true
- @{INSERT INTO [const_pereocenka_report] (ДОКУМЕНТ, АРТИКУЛ, ЦВЕТ, ЦЕНА, ДатаИзменения) VALUES('[doc]','[artikul]','[color]','[price]', NOW()) ON DUPLICATE KEY UPDATE ДатаИзменения = VALUES(ДатаИзменения)}@
- #else
- #se nl=@{DELETE FROM [const_pereocenka_report] WHERE ДОКУМЕНТ='[doc]' AND АРТИКУЛ='[artikul]' AND ЦВЕТ='[color]' AND ЦЕНА='[price]'}@
- #endif
-
- #v j:update_item={{}}
- #v j:update_item.id="[tov_id]"
- #v j:update_item.done=[done]
- #v j:update_item.done_updated="[lst_upd]"
-
- #v j:items_update=[[ ]]
- #v j:items_update[[]]=$j:update_item
-
- #v j:update={{}}
- #v j:update.items=$j:items_update
-
- #v j:result.result=true
- #v j:result.message=""
- #v j:result.update=$j:update
-
- #se j:result=$j:result
- #endproc
- #proc mshop_reprice.post.close_task
- /*TODO переписать для reprice*/
- #exit
- #v user_ref=@{select ссылка from spravochniki_sotrudniki where ref=@'[j:body.access_payload.sp_ref]'@ }@
-
- #src items_sql
- #r
- [#mshop_reprice.sql_query]
- #query
- #endsrc
-
- #foreach items_sql
-
- #if [$f::if({items_sql.done},true,false)]=false
- #call mshop_refill.set_done('{items_sql.Характеристика}',true,$user_ref)
- ;TODO заполнять j:result.update как в mshop_refill.post.update_item
- #endif
-
- #endfor
-
- #se j:result={{"result":true,"message":"Все позиции подтоварены"}}
- #endproc
- #proc mshop_reprice.get.find_item
- #se code=[j:query.code]
- #globalobjs_get Dep.Код
- #src price_col
- #r
- Select tc.ссылка as 'Тип_цены_ссылка', IFNULL(tc.БАЗОВЫЙТИПЦЕН, 0) as 'Тип_цены_базовый_ссылка'
- From @<Справочники.Подразделения>@ as podr inner join @<Справочники.ТипыЦен>@ as tc on tc.ссылка = podr.ТИПЦЕН
- Where podr.КОД='[Dep.Код]'
- #query
- #endsrc
-
- #src find_sql
- #r
- SELECT
- CONCAT(nom.АРТИКУЛ, '/', IFNULL(c_name.Наименование, '*'), '/', pr.ДОКУМЕНТ, '/', ROUND(pr.ЦЕНА)) AS 'pos_id'
- FROM @<Таблицы.Прайсы>@ as pr
- INNER JOIN @<Документы.УстановкаЦенНоменклатуры>@ as uc ON uc.ССЫЛКА = pr.ДОКУМЕНТ
- INNER JOIN @<Справочники.Номенклатура>@ as nom ON nom.ссылка = pr.НОМЕНКЛАТУРА
- LEFT JOIN @<Справочники.ХарактеристикиНоменклатуры>@ as xar ON xar.ссылка = pr.ХАРАКТЕРИСТИКА
-
- LEFT JOIN @<таблицы.значениясвойств>@ as ssv_c ON ssv_c.объект = pr.ХАРАКТЕРИСТИКА AND ssv_c.свойство = (Select MAX(ссылка) From @<Справочники.НаименованияСвойств>@ Where наименование = 'Цвет')
- LEFT JOIN @<Справочники.ЗначенияСвойств>@ as c_name ON c_name.Ссылка = ssv_c.Значение
-
- LEFT JOIN @<Таблицы.ОстаткиТовараВТаре>@ as dv ON dv.ХАРАКТЕРИСТИКА = pr.ХАРАКТЕРИСТИКА AND dv.КАЧЕСТВО = 'НОВЫЙ' AND dv.ТАРА = [tara_t]
- LEFT JOIN @<Справочники.ШтрихКодаТоваров>@ as sht ON sht.Характеристика = xar.ссылка
- LEFT JOIN @<Справочники.ШтрихКода>@ as sh ON sh.Ссылка = sht.Ссылка
- LEFT JOIN const_marking_values as mark on mark.Характеристика=xar.Ссылка
-
- WHERE pr.ТИПЦЕНЫ IN ({price_col.Тип_цены_ссылка}, {price_col.Тип_цены_базовый_ссылка})
- AND pr.КАЧЕСТВО = 'НОВЫЙ'
- AND (
- nom.АРТИКУЛ ='[code]'
- OR xar.КОД ='[code]'
- OR nom.НАИМЕНОВАНИЕ LIKE '%[code]%'
- OR xar.ссылка ='[code]'
- OR sh.ШтрихКод ='[code]'
- OR mark.Серийныйномер='[code]'
- OR mark.Кодмаркировки='[code]'
- )
- GROUP BY pr.НОМЕНКЛАТУРА, IFNULL(c_name.Наименование, '*'), ROUND(pr.ЦЕНА)
- HAVING IFNULL(SUM(dv.КОЛИЧЕСТВО), 0) > 0
- LIMIT 1
- #query
- #endsrc
-
- #if {find_sql.pos_id}
- #se j:result={{"result":true,"message":"Найден","item_id":"{find_sql.pos_id}"}}
- #else
- ;#if {find_sql.}
- ; #se j:result={{"result":false,"message":"Код не опознан","item_id":""}}
- ;#else
- #se j:result={{"result":false,"message":"Товар не входит в текущее задание","item_id":""}}
- #endif
- #endproc
|