From 197a4d0b1e09736e425814d2d59ef7e07c35b506 Mon Sep 17 00:00:00 2001 From: Macbook Date: Wed, 10 Dec 2025 08:30:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=81=D0=BE=20=D1=81=D0=BA=D0=BB=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=D0=BA=D0=B0=D1=80?= =?UTF-8?q?=D1=82=D0=BE=D1=87=D0=BA=D1=83=20=D0=B8=D0=BD=D1=81=D1=82=D1=80?= =?UTF-8?q?=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/stocks.cpython-313.pyc | Bin 5509 -> 5783 bytes .../__pycache__/toolkit.cpython-313.pyc | Bin 2418 -> 3064 bytes api/routers/stocks.py | 15 +++++--- api/routers/toolkit.py | 11 ++++++ api/static/js/index.js | 32 ++++++++++++++++-- 5 files changed, 52 insertions(+), 6 deletions(-) diff --git a/api/routers/__pycache__/stocks.cpython-313.pyc b/api/routers/__pycache__/stocks.cpython-313.pyc index e75b5515f1d123370774f07cdef0d92be1f0ec56..d2f120b81657707b917ddb8edc3fa5396dc9c027 100644 GIT binary patch delta 750 zcmb7AO=uHA7@gVOB)gm0Np|zMsj*q9)c#lz#fojE3bwY*(yFCa&80ypgleiugEt!r z9`w?~cc>TfBIvQ6EPAlurGJ!NBBX}mNl#u9Q!Rp^v$gT=!1s9bzW2TPn1}5P9kiw> zGGfQ%&!j#6SMElHq?oo%wp57r0R!QZy0yETZ8BR(V$atYWA6N!%KR z_w*N+Z-Y-X0u>z87md8iLJVukdTrSA_9I5#Sc?X{^TnE!Y%}X+i33L%l=*aKrtHd2 z=QFp;uF2cesTug@`-p$ThCd^0hof82tsYZqJQr~nMt0mt4LVAjf2Js!OjX^5!HOIC zWAI#Up4}FeEuxo5%qFoXSBvCuiL}_H<)vOECrYH#CY_59ilo0phHNsl(p@CuEJBi5 zte5`(pjWPXT#{TNNRn$lQE>}}zKRB2TCVjRMkG)e{?UtQV4G<3iN^`6;llFu<%Bgd zVWsX`6Zb4V`+?+ONqajxj-@cI#!!3!S2>YUor}||C^cw5b4m6|a|3PW0lab)o2szV zah|fvYBx3m!fHdV2wh{jqJpFh!eb?~r`NlQ zyI{Z<#f(}aDz39sSY}!FPx7~LItr)4yT@Ao^3Bysxl~cu7L7-Zca2w#ExX#-v}>RGUY>zP2Al23(r7X>!AG=pmO5+jRKF zqC+QKnzd>6^^8N$xU^`~qP6PKi`BViI1cyK6e#MElTBi{BxaM?lL?0$a7oH0sf{}h z8Fk5+O~y8_I^?uV3N|TNafd8)cr0DQJEGJL2qAwp-zG4kt;jPds8x$Ur;(yTU3+_X z0ZWF`iJ?RRcQ}#hJ}#kjL@B2JUb)O(R4e$+IJQJ=Mg&Vb>iHBlHNnaqWL{5TQy1#V zQRdqen^9pqlJPu;&3<8fT4(-A!yfe>qdoR}ET)ZC00jLTUV>kGZSVxfT2nQ?^PY5h O#9e0_d0u8;i2ed0wWQeq diff --git a/api/routers/__pycache__/toolkit.cpython-313.pyc b/api/routers/__pycache__/toolkit.cpython-313.pyc index f6e933b8e0cc472b53f9098e62ce2c6accfa12c3..660a310e33ec8389cf5eb0f14d3651b31b037de3 100644 GIT binary patch delta 1224 zcmb7C%}*0S6rb7cw%hG)ziEpgR=#Qt5Qu`7LKEd+4d1Mrn5Z!*l~izxyG#6vsnHu3 zAR86qLAYUziN=dZ4IGq{D;lu}WAq>3D@Ke5-)#M8z?k@w`OWXm{N}wkZ)Vl|HRxOu z1P+0nz_B!Mf9yPk9X4=pz*rlzJh_6slzxKV9^n{RIZ1U22suy~$#&T$I_i(mn zEc~SV=rcGP((hVsaXB_~K~5NuN&T>{>?aA8yO2T8_#LDNeHQ0*Ko6NhZPOEJLYFYE;k-CW1ry22CxHa zMx^Ct9H?kM}JEk05Vo zxkh)fp=>us&gNAf+3PGuGEdk5` delta 623 zcmaKp&ubGw6vyApCi`?K7aV;&aKPXLXAPB3JrmZXsUK5i-wcY4$dXS=m zp1dgo9z03GLvM4e&2ldI}3AcA6cn^Y3hLM z(ZuZ9TlsyeK@1t~Gu(r`^kIuwH0$Zp;2Bdi(0nNaHyZ$f&U=#mME6({K@YA{Y`6l$ zH!l2@(8O779KhE+bDqvqLHfFv5`EGHh@^-XQQ!XPrNyjF0P2~446>)<^r0z=88PD< z;)~j1oSJUNkwy&t_ljB*z<@FEET4Fp_|lhNR&<}70~KzNB}av&Pq?=uItCF9lvS9O zR*5srHTf0ak0ESR9p) zDi!K5URR35=FgQgd{-GyFg)Wwloi84A>JU`CVWo)#mm~=iG4P6sDo+0*y^#uo5dcR zc~{(LrQO!&gB=i-_RT5w1Y8lN}iHM3QRwd~&o;KQf@vA#9 szzU&w=L7ZHM!UJW-l~L``D^3)Xn|zETO+?E>;nnt3h7gn;U#4M00;Pcz5oCK diff --git a/api/routers/stocks.py b/api/routers/stocks.py index 8a9d990..a5cb75c 100644 --- a/api/routers/stocks.py +++ b/api/routers/stocks.py @@ -49,14 +49,20 @@ async def post_requests( action = request_data.get("body").get("action").get("operation") logger.info(f"Получение запроса на перемещение ({action}) инструмента") userId = request_data.get("body").get("userData").get("id") - sourceTollboxId = ( + sourceTollboxId = int( request_data.get("body").get("action").get("selectedItem").get("toolboxId") ) - toolkitId = request_data.get("body").get("action").get("selectedItem").get("id") + toolkitId = int( + request_data.get("body").get("action").get("selectedItem").get("id") + ) quantity = request_data.get("body").get("action").get("quantity") price = round( - request_data.get("body").get("action").get("selectedItem").get("totalCost") - / request_data.get("body").get("action").get("selectedItem").get("available"), + float( + request_data.get("body").get("action").get("selectedItem").get("totalCost") + ) + / int( + request_data.get("body").get("action").get("selectedItem").get("available") + ), 2, ) reason = request_data.get("body").get("action").get("comment") @@ -78,6 +84,7 @@ async def post_requests( if result: resonse["status"] = "ok" case "get": + logger.info(f"Получение инструмента {toolkitId} из ящика {sourceTollboxId}") targetTollboxId = await ToolboxHandler.getIdByOwner(userId) result = await StocksActions.takeToolkit( sourceTollboxId, diff --git a/api/routers/toolkit.py b/api/routers/toolkit.py index b3cf6e5..a519130 100644 --- a/api/routers/toolkit.py +++ b/api/routers/toolkit.py @@ -28,6 +28,7 @@ async def toolkit_request( if not toolboxes: return response toolboxesTitles = {toolbox["id"]: toolbox["title"] for toolbox in toolboxes} + toolboxesOwners = {toolbox["id"]: toolbox["owner_id"] for toolbox in toolboxes} stocksData = {"count": 0, "toolboxes": {}} for stock in stocks: toolboxTitle = toolboxesTitles.get(stock["toolbox_id"], None) @@ -39,8 +40,18 @@ async def toolkit_request( "count": stock["quantity"], "placement": stock["placement"], } + logger.info(stock.keys()) + if not toolboxesOwners.get(stock["toolbox_id"]): + stocksData["toolboxes"][toolboxTitle]["id"] = stock["toolbox_id"] + stocksData["toolboxes"][toolboxTitle]["totalCost"] = ( + stock["price"] * stock["quantity"] + ) else: stocksData["toolboxes"][toolboxTitle]["count"] += stock["quantity"] + if not toolboxesOwners.get(stock["toolbox_id"]): + stocksData["toolboxes"][toolboxTitle]["totalCost"] += ( + stock["price"] * stock["quantity"] + ) response["status"] = "ok" response["data"] = stocksData return response diff --git a/api/static/js/index.js b/api/static/js/index.js index c21c8e5..4f61fea 100644 --- a/api/static/js/index.js +++ b/api/static/js/index.js @@ -1732,7 +1732,15 @@ async function showToolkitDetailsModal(item) { ${Object.entries(toolkitStocks.toolboxes).map(([key, value]) => ` ${key}: - ${value.count} шт. + ${value.count} шт.${value.id && accessData.available_own_toolbox ? ` + + ` : ''} + ${value.placement || ''} `).join('')} @@ -1754,6 +1762,24 @@ async function showToolkitDetailsModal(item) { `; + // Добавляем обработчики для кнопок в строке + modal.querySelectorAll('button[data-action]').forEach(button => { + button.addEventListener('click', async (e) => { + e.stopPropagation(); + const action = e.currentTarget.dataset.action; + const id = e.currentTarget.dataset.id; + const toolboxId = e.currentTarget.dataset.toolbox_id; + const available = e.currentTarget.dataset.available; + const totalQuantity = available; + const title = item.title; + const totalCost = e.currentTarget.dataset.totalcost; + const skipRefresh = true; + const selectedItem = { id, toolboxId, available, totalQuantity, title, totalCost, skipRefresh }; + await showOperationModal(action, selectedItem); + modal.querySelector('button[data-bs-dismiss="modal"]').click(); + }); + }); + document.body.appendChild(modal); const bsModal = new bootstrap.Modal(modal); @@ -1874,7 +1900,9 @@ async function showOperationModal(operation, selectedItem) { if (success) { bsModal.hide(); showInfo(`Запрос на ${operationTitles[operation]} успешно создан`, 'success'); - await loadToolboxContent(selectedItem.toolboxId); + if (!selectedItem.skipRefresh) { + await loadToolboxContent(selectedItem.toolboxId); + } } else { showError('Ошибка выполнения операции'); resetButton();