@argusoft/medplat-product-management 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/{BrandsPage-BE3kn-8b.js → BrandsPage-DM5ZRz8L.js} +7 -6
  2. package/dist/{BrandsPage-BE3kn-8b.js.map → BrandsPage-DM5ZRz8L.js.map} +1 -1
  3. package/dist/{CategoriesPage-COqi3pMi.js → CategoriesPage-v7vz_i2N.js} +7 -6
  4. package/dist/{CategoriesPage-COqi3pMi.js.map → CategoriesPage-v7vz_i2N.js.map} +1 -1
  5. package/dist/{DashboardPage-C_H1Jrey.js → DashboardPage-CW77OzUg.js} +3 -3
  6. package/dist/{DashboardPage-C_H1Jrey.js.map → DashboardPage-CW77OzUg.js.map} +1 -1
  7. package/dist/{FacilityPicker-Diq2hnYg.js → FacilityPicker-C2drWyqo.js} +2 -2
  8. package/dist/{FacilityPicker-Diq2hnYg.js.map → FacilityPicker-C2drWyqo.js.map} +1 -1
  9. package/dist/InventoryPage-_VWlqD2e.js +686 -0
  10. package/dist/InventoryPage-_VWlqD2e.js.map +1 -0
  11. package/dist/{MemberProfileCard-BLUVRILO.js → MemberProfileCard-D9jepThR.js} +3 -3
  12. package/dist/{MemberProfileCard-BLUVRILO.js.map → MemberProfileCard-D9jepThR.js.map} +1 -1
  13. package/dist/{PaymentCreatePage-B5VOgTx9.js → PaymentCreatePage-DAUWv5RO.js} +7 -7
  14. package/dist/{PaymentCreatePage-B5VOgTx9.js.map → PaymentCreatePage-DAUWv5RO.js.map} +1 -1
  15. package/dist/{PaymentsPage-DY6BclkN.js → PaymentsPage-B6Fs2xey.js} +4 -4
  16. package/dist/{PaymentsPage-DY6BclkN.js.map → PaymentsPage-B6Fs2xey.js.map} +1 -1
  17. package/dist/{PickupCreatePage-CCSiyFQF.js → PickupCreatePage-4ffB1_yq.js} +4 -4
  18. package/dist/{PickupCreatePage-CCSiyFQF.js.map → PickupCreatePage-4ffB1_yq.js.map} +1 -1
  19. package/dist/{PickupsPage-DGi6T5Of.js → PickupsPage-C-21LwTf.js} +7 -7
  20. package/dist/{PickupsPage-DGi6T5Of.js.map → PickupsPage-C-21LwTf.js.map} +1 -1
  21. package/dist/{PmGuard-C90yhpsN.js → PmGuard-DrbbysnW.js} +3 -3
  22. package/dist/{PmGuard-C90yhpsN.js.map → PmGuard-DrbbysnW.js.map} +1 -1
  23. package/dist/{PmTable-BkK65bJQ.js → PmTable-BMFiuHdG.js} +2 -2
  24. package/dist/{PmTable-BkK65bJQ.js.map → PmTable-BMFiuHdG.js.map} +1 -1
  25. package/dist/{ProductEditPage-CQj9egzW.js → ProductEditPage-BinNxjlB.js} +174 -116
  26. package/dist/ProductEditPage-BinNxjlB.js.map +1 -0
  27. package/dist/{ProductsPage-i8QVw_Jm.js → ProductsPage-DFgK9-13.js} +5 -5
  28. package/dist/{ProductsPage-i8QVw_Jm.js.map → ProductsPage-DFgK9-13.js.map} +1 -1
  29. package/dist/{PurchaseCreatePage-Bp6bl9n8.js → PurchaseCreatePage-B1eV15aS.js} +9 -9
  30. package/dist/{PurchaseCreatePage-Bp6bl9n8.js.map → PurchaseCreatePage-B1eV15aS.js.map} +1 -1
  31. package/dist/{PurchaseRequestDetailPage-CNAqIFef.js → PurchaseRequestDetailPage-52S6Nf7a.js} +6 -5
  32. package/dist/{PurchaseRequestDetailPage-CNAqIFef.js.map → PurchaseRequestDetailPage-52S6Nf7a.js.map} +1 -1
  33. package/dist/{PurchaseRequestsPage-BJqDlNrc.js → PurchaseRequestsPage-DNNUnXy4.js} +4 -4
  34. package/dist/{PurchaseRequestsPage-BJqDlNrc.js.map → PurchaseRequestsPage-DNNUnXy4.js.map} +1 -1
  35. package/dist/{PurchasesPage-BQEToymQ.js → PurchasesPage-Bsrqxvb1.js} +4 -4
  36. package/dist/{PurchasesPage-BQEToymQ.js.map → PurchasesPage-Bsrqxvb1.js.map} +1 -1
  37. package/dist/SaleCreatePage-CPyVj3Dh.js +544 -0
  38. package/dist/SaleCreatePage-CPyVj3Dh.js.map +1 -0
  39. package/dist/{SalesPage-CTBJMxZe.js → SalesPage-BWpgPKz_.js} +4 -4
  40. package/dist/{SalesPage-CTBJMxZe.js.map → SalesPage-BWpgPKz_.js.map} +1 -1
  41. package/dist/{SettingsPage-CiwVmzM3.js → SettingsPage-Ch-37E5R.js} +4 -4
  42. package/dist/{SettingsPage-CiwVmzM3.js.map → SettingsPage-Ch-37E5R.js.map} +1 -1
  43. package/dist/{StorageUnitsPage-BV7nK_iE.js → StorageUnitsPage-DF0MC356.js} +7 -7
  44. package/dist/{StorageUnitsPage-BV7nK_iE.js.map → StorageUnitsPage-DF0MC356.js.map} +1 -1
  45. package/dist/{TransactionsPage-Cocn4901.js → TransactionsPage-DQBjCHoN.js} +18 -18
  46. package/dist/{TransactionsPage-Cocn4901.js.map → TransactionsPage-DQBjCHoN.js.map} +1 -1
  47. package/dist/{TransferCreatePage-DbjcjuOg.js → TransferCreatePage-DdVExUif.js} +4 -4
  48. package/dist/{TransferCreatePage-DbjcjuOg.js.map → TransferCreatePage-DdVExUif.js.map} +1 -1
  49. package/dist/{TransfersPage-BFVF7Xvc.js → TransfersPage-C1qS9kNL.js} +5 -5
  50. package/dist/{TransfersPage-BFVF7Xvc.js.map → TransfersPage-C1qS9kNL.js.map} +1 -1
  51. package/dist/{VialsPage-BNzYTLVd.js → VialsPage-rTAYlXGZ.js} +8 -8
  52. package/dist/{VialsPage-BNzYTLVd.js.map → VialsPage-rTAYlXGZ.js.map} +1 -1
  53. package/dist/{constants-5ZCZo-Zm.js → constants-CdzV0PxZ.js} +25 -12
  54. package/dist/constants-CdzV0PxZ.js.map +1 -0
  55. package/dist/format-UOyOu75i.js.map +1 -1
  56. package/dist/index.js +5 -5
  57. package/dist/index.js.map +1 -1
  58. package/dist/{settingsStore-KW217unV.js → settingsStore-GLCtI-tv.js} +17 -14
  59. package/dist/{settingsStore-KW217unV.js.map → settingsStore-GLCtI-tv.js.map} +1 -1
  60. package/dist/{validation-Ba7puFIO.js → validation-BkUPqrdA.js} +11 -12
  61. package/dist/{validation-Ba7puFIO.js.map → validation-BkUPqrdA.js.map} +1 -1
  62. package/package.json +1 -1
  63. package/dist/InventoryPage-Bjpw6vTz.js +0 -508
  64. package/dist/InventoryPage-Bjpw6vTz.js.map +0 -1
  65. package/dist/ProductEditPage-CQj9egzW.js.map +0 -1
  66. package/dist/SaleCreatePage-DbfBK4PH.js +0 -523
  67. package/dist/SaleCreatePage-DbfBK4PH.js.map +0 -1
  68. package/dist/constants-5ZCZo-Zm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PickupCreatePage-CCSiyFQF.js","names":[],"sources":["../../node_modules/dayjs/dayjs.min.js","../src/views/PickupCreatePage.jsx"],"sourcesContent":["!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),Y=_.prototype;return O.prototype=Y,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){Y[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","import { useMemo, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { v4 as uuidv4 } from 'uuid';\nimport {\n Alert,\n Autocomplete,\n Box,\n Button,\n Card,\n CardContent,\n Chip,\n Grid,\n Stack,\n TextField,\n} from '@mui/material';\nimport { DateTimePicker, LocalizationProvider } from '@mui/x-date-pickers';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport dayjs from 'dayjs';\nimport SaveRoundedIcon from '@mui/icons-material/SaveRounded';\nimport { showToast } from '@/common/toaster/toaster';\nimport PmPageShell from '@pm/components/PmPageShell';\nimport PmNav from '@pm/components/PmNav';\nimport PmGuard from '@pm/components/PmGuard';\nimport { usePermissionedEffect } from '@pm/utils/permissions';\nimport { PmFormSection, PmSelect } from '@pm/components/PmTable';\nimport {\n listBatches,\n listFacilities,\n listMyOpenPickups,\n recordPickup,\n} from '@pm/services/pmApi';\nimport { formatDate } from '@pm/utils/format';\n\n// Only facility-owned, in-stock, non-quarantined, non-terminal batches are\n// candidates for pickup. The backend enforces the same rules; filtering here\n// keeps the dropdown free of unactionable rows.\nfunction isPickable(batch) {\n if (batch.ownerType !== 'FACILITY') return false;\n if (Number(batch.qtyRemaining ?? 0) <= 0) return false;\n if (batch.status === 'EXPIRED' || batch.status === 'EXHAUSTED' || batch.status === 'QUARANTINED') return false;\n return true;\n}\n\nexport default function PickupCreatePage() {\n const navigate = useNavigate();\n const [facilities, setFacilities] = useState([]);\n const [batches, setBatches] = useState([]);\n // OPEN pickups already on this user — one-session-per-user rule means\n // any open session blocks a new pickup. The user has to end the session\n // or top it up instead.\n const [openSessions, setOpenSessions] = useState([]);\n const [loading, setLoading] = useState(true);\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState('');\n const [form, setForm] = useState({\n id: uuidv4(),\n personalBatchId: uuidv4(),\n facilityId: '',\n sourceBatchId: '',\n pickedQty: 1,\n notes: '',\n // Outreach session metadata.\n sessionName: '',\n sessionDescription: '',\n sessionStartTime: dayjs(),\n sessionExpectedEndTime: null,\n sessionSite: '',\n });\n\n usePermissionedEffect('update.manage.productManagement.pickup', () => {\n async function load() {\n try {\n const [f, b, open] = await Promise.all([\n listFacilities(),\n listBatches(),\n listMyOpenPickups().catch(() => []),\n ]);\n setFacilities(f);\n setBatches(b);\n setOpenSessions(open);\n } catch (err) {\n setError(err?.response?.data?.message ?? err?.message ?? 'Failed to load reference data');\n } finally {\n setLoading(false);\n }\n }\n void load();\n }, []);\n\n const hasOpenSession = openSessions.length > 0;\n\n // Batches limited to the picked facility (when one is selected). Reset\n // when the facility changes so the user can't carry over a stale batch.\n const eligibleBatches = useMemo(() => {\n if (!form.facilityId) return [];\n return batches.filter(isPickable).filter((b) => b.ownerId === form.facilityId);\n }, [batches, form.facilityId]);\n\n const selectedBatch = useMemo(\n () => batches.find((b) => b.id === form.sourceBatchId) ?? null,\n [batches, form.sourceBatchId],\n );\n\n function patch(k, v) {\n setForm((f) => ({ ...f, [k]: v }));\n }\n\n function patchFacility(id) {\n setForm((f) => ({ ...f, facilityId: id, sourceBatchId: '' }));\n }\n\n const qty = Number(form.pickedQty);\n const remaining = Number(selectedBatch?.qtyRemaining ?? 0);\n const qtyError = !selectedBatch\n ? ''\n : !Number.isInteger(qty) || qty <= 0\n ? 'Enter a whole number greater than 0.'\n : qty > remaining\n ? `Only ${remaining} available in this batch.`\n : '';\n const sessionNameError = form.sessionName.trim() ? '' : 'Session name is required.';\n // Start time can't be in the past. A small grace (5 min) tolerates the lag\n // between the prefilled \"now\" and submission; the backend re-checks against\n // server time so a tampered client clock can't bypass it.\n const startValid = form.sessionStartTime && dayjs.isDayjs(form.sessionStartTime) && form.sessionStartTime.isValid();\n const sessionStartError = !startValid\n ? 'Start time is required.'\n : form.sessionStartTime.valueOf() < Date.now() - 5 * 60 * 1000\n ? 'Start time cannot be in the past.'\n : '';\n // End time is required and must be after the start.\n const endValid = form.sessionExpectedEndTime && dayjs.isDayjs(form.sessionExpectedEndTime) && form.sessionExpectedEndTime.isValid();\n const sessionEndError = !endValid\n ? 'Expected end time is required.'\n : (startValid && !form.sessionExpectedEndTime.isAfter(form.sessionStartTime))\n ? 'Expected end must be after the start time.'\n : '';\n const formIsValid = !!form.facilityId && !!form.sourceBatchId && !qtyError && !hasOpenSession\n && !sessionNameError && !sessionStartError && !sessionEndError;\n\n async function save() {\n if (!formIsValid) return;\n setSubmitting(true);\n setError('');\n try {\n await recordPickup({\n id: form.id,\n personalBatchId: form.personalBatchId,\n sourceBatchId: form.sourceBatchId,\n pickedQty: qty,\n notes: form.notes || null,\n sessionName: form.sessionName.trim(),\n sessionDescription: form.sessionDescription.trim() || null,\n sessionStartTime: startValid ? form.sessionStartTime.toISOString() : null,\n sessionExpectedEndTime: endValid ? form.sessionExpectedEndTime.toISOString() : null,\n sessionSite: form.sessionSite.trim() || null,\n });\n showToast({ message: 'Pickup recorded successfully', type: 'success' });\n navigate('/ui/medplat/manage/pm/pickups');\n } catch (err) {\n setError(err?.response?.data?.message ?? err?.message ?? 'Failed to record pickup');\n } finally {\n setSubmitting(false);\n }\n }\n\n return (\n <Box>\n <PmNav />\n <PmGuard perm={'update.manage.productManagement.pickup'} title=\"You don’t have permission to record pickups\">\n <PmPageShell\n title=\"Record Pickup\"\n subtitle=\"Check out stock from a facility for your field work. Record returns and wastage when you bring stock back.\"\n actions={\n <Stack direction=\"row\" spacing={1}>\n <Button variant=\"outlined\" onClick={() => navigate('/ui/medplat/manage/pm/pickups')}>Cancel</Button>\n <Button variant=\"contained\" startIcon={<SaveRoundedIcon />}\n disabled={!formIsValid || submitting}\n onClick={() => void save()}>\n {submitting ? 'Recording…' : 'Record Pickup'}\n </Button>\n </Stack>\n }\n >\n {error ? <Alert severity=\"error\" sx={{ mb: 2 }}>{error}</Alert> : null}\n\n {hasOpenSession ? (\n <Alert\n severity=\"warning\"\n sx={{ mb: 2 }}\n action={\n <Button color=\"inherit\" size=\"small\"\n onClick={() => navigate('/ui/medplat/manage/pm/pickups')}>\n Go to Pickups\n </Button>\n }\n >\n You already have <strong>{openSessions.length}</strong> open outreach session{openSessions.length === 1 ? '' : 's'}.\n End the active session{openSessions.length === 1 ? '' : 's'} before starting a new pickup,\n or use <strong>Top Up</strong> on the Pickups page to add more stock to an active session.\n </Alert>\n ) : null}\n\n <Card sx={{ borderRadius: 1.5, mb: 2, border: '1px solid', borderColor: 'divider', boxShadow: '0 12px 32px rgba(15, 23, 42, 0.045)' }}>\n <CardContent sx={{ p: 2.5 }}>\n <PmFormSection\n eyebrow=\"Step 1\"\n title=\"Source\"\n hint=\"Select a facility and then the batch to pick up.\"\n sx={{ mb: 2 }}\n />\n <Grid container spacing={2}>\n <Grid item xs={12} md={5}>\n <Autocomplete\n size=\"small\"\n options={facilities}\n getOptionLabel={(f) => f?.name ?? ''}\n isOptionEqualToValue={(a, b) => a?.id === b?.id}\n value={facilities.find((f) => f.id === form.facilityId) ?? null}\n onChange={(_, next) => patchFacility(next?.id ?? '')}\n loading={loading}\n renderInput={(params) => (\n <TextField {...params} required label=\"Source Facility\" placeholder=\"Pick a facility you're assigned to\" />\n )}\n />\n </Grid>\n <Grid item xs={12} md={7}>\n <PmSelect\n label=\"Source Batch\"\n required\n disabled={!form.facilityId}\n value={form.sourceBatchId}\n onChange={(v) => patch('sourceBatchId', v)}\n options={eligibleBatches.map((b) => ({\n value: b.id,\n label: `${b.productName} · qty ${b.qtyRemaining}`\n + `${b.lotNumber ? ` · ${b.lotNumber}` : ''}`\n + `${b.expiryDate ? ` · exp ${formatDate(b.expiryDate)}` : ''}`,\n }))}\n noOptionsText=\"No pickable stock in this facility\"\n helperText={!form.facilityId\n ? 'Pick a facility first.'\n : eligibleBatches.length === 0\n ? 'This facility has no in-stock batches you can pick up right now.'\n : 'Active facility batches only — quarantined / expired / exhausted stock is hidden.'}\n />\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n\n <Card sx={{ borderRadius: 1.5, mb: 2, border: '1px solid', borderColor: 'divider', boxShadow: '0 12px 32px rgba(15, 23, 42, 0.045)' }}>\n <CardContent sx={{ p: 2.5 }}>\n <PmFormSection\n eyebrow=\"Session\"\n title=\"Outreach session details\"\n hint=\"Records the purpose, timing and location of this outreach session. Shown when administering from this stock.\"\n sx={{ mb: 2 }}\n />\n <Grid container spacing={2}>\n <Grid item xs={12} md={6}>\n <TextField\n required fullWidth size=\"small\"\n label=\"Session name\"\n inputProps={{ maxLength: 150 }}\n value={form.sessionName}\n onChange={(e) => patch('sessionName', e.target.value)}\n error={!!sessionNameError && form.sessionName !== ''}\n helperText={form.sessionName === '' ? 'e.g. Anganwadi camp – Ward 4' : sessionNameError}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextField\n fullWidth size=\"small\"\n label=\"Session site (optional)\"\n placeholder=\"Location / site reference\"\n inputProps={{ maxLength: 200 }}\n value={form.sessionSite}\n onChange={(e) => patch('sessionSite', e.target.value)}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale=\"en\">\n <DateTimePicker\n label=\"Start time\"\n value={form.sessionStartTime}\n onChange={(newVal) => patch('sessionStartTime', newVal)}\n ampm={false}\n minDateTime={dayjs().subtract(5, 'minute')}\n slotProps={{\n actionBar: { actions: ['clear'] },\n textField: {\n size: 'small',\n fullWidth: true,\n required: true,\n error: !!sessionStartError && form.sessionStartTime !== null,\n helperText: (form.sessionStartTime !== null && sessionStartError) || 'Cannot be in the past. (5 minutes buffer allowed)',\n },\n }}\n />\n </LocalizationProvider>\n </Grid>\n <Grid item xs={12} md={6}>\n <LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale=\"en\">\n <DateTimePicker\n label=\"Expected End Time\"\n value={form.sessionExpectedEndTime}\n onChange={(newVal) => patch('sessionExpectedEndTime', newVal)}\n ampm={false}\n minDateTime={startValid ? form.sessionStartTime : undefined}\n slotProps={{\n actionBar: { actions: ['clear'] },\n textField: {\n size: 'small',\n fullWidth: true,\n required: true,\n error: !!sessionEndError && form.sessionExpectedEndTime !== null,\n helperText: (form.sessionExpectedEndTime !== null && sessionEndError) || 'When the session is expected to end.',\n },\n }}\n />\n </LocalizationProvider>\n </Grid>\n <Grid item xs={12}>\n <TextField\n fullWidth size=\"small\" multiline minRows={2}\n label=\"Purpose / description (optional)\"\n value={form.sessionDescription}\n onChange={(e) => patch('sessionDescription', e.target.value)}\n />\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n\n {selectedBatch ? (\n <Card sx={{ borderRadius: 1.5, mb: 2, border: '1px solid', borderColor: 'divider', boxShadow: '0 12px 32px rgba(15, 23, 42, 0.045)' }}>\n <CardContent sx={{ p: 2.5 }}>\n <PmFormSection\n eyebrow=\"Step 2\"\n title=\"Quantity\"\n hint={`Available: ${remaining}. You can pick up to this amount.`}\n sx={{ mb: 2 }}\n />\n <Grid container spacing={2}>\n <Grid item xs={12} md={4}>\n <TextField\n required fullWidth size=\"small\" type=\"number\"\n label=\"Pick Quantity\"\n inputProps={{ min: 1, max: remaining }}\n value={form.pickedQty}\n onChange={(e) => patch('pickedQty', e.target.value)}\n error={!!qtyError}\n helperText={qtyError || `Out of ${remaining} available`}\n />\n </Grid>\n <Grid item xs={12} md={8}>\n <TextField\n fullWidth size=\"small\"\n label=\"Notes (optional)\"\n placeholder=\"Anything worth recording about this pickup\"\n value={form.notes}\n onChange={(e) => patch('notes', e.target.value)}\n />\n </Grid>\n </Grid>\n <Stack direction=\"row\" spacing={1} sx={{ mt: 2 }} flexWrap=\"wrap\" useFlexGap>\n <Chip size=\"small\" label={`Product · ${selectedBatch.productName}`} />\n {selectedBatch.lotNumber ? <Chip size=\"small\" label={`Lot · ${selectedBatch.lotNumber}`} /> : null}\n {selectedBatch.expiryDate ? <Chip size=\"small\" label={`Expiry · ${formatDate(selectedBatch.expiryDate)}`} /> : null}\n {selectedBatch.storageUnitName ? <Chip size=\"small\" label={`From · ${selectedBatch.storageUnitName}`} /> : null}\n </Stack>\n </CardContent>\n </Card>\n ) : null}\n </PmPageShell>\n </PmGuard>\n </Box>\n );\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"PickupCreatePage-4ffB1_yq.js","names":[],"sources":["../../node_modules/dayjs/dayjs.min.js","../src/views/PickupCreatePage.jsx"],"sourcesContent":["!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),Y=_.prototype;return O.prototype=Y,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){Y[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","import { useMemo, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { v4 as uuidv4 } from 'uuid';\nimport {\n Alert,\n Autocomplete,\n Box,\n Button,\n Card,\n CardContent,\n Chip,\n Grid,\n Stack,\n TextField,\n} from '@mui/material';\nimport { DateTimePicker, LocalizationProvider } from '@mui/x-date-pickers';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport dayjs from 'dayjs';\nimport SaveRoundedIcon from '@mui/icons-material/SaveRounded';\nimport { showToast } from '@/common/toaster/toaster';\nimport PmPageShell from '@pm/components/PmPageShell';\nimport PmNav from '@pm/components/PmNav';\nimport PmGuard from '@pm/components/PmGuard';\nimport { usePermissionedEffect } from '@pm/utils/permissions';\nimport { PmFormSection, PmSelect } from '@pm/components/PmTable';\nimport {\n listBatches,\n listFacilities,\n listMyOpenPickups,\n recordPickup,\n} from '@pm/services/pmApi';\nimport { formatDate } from '@pm/utils/format';\n\n// Only facility-owned, in-stock, non-quarantined, non-terminal batches are\n// candidates for pickup. The backend enforces the same rules; filtering here\n// keeps the dropdown free of unactionable rows.\nfunction isPickable(batch) {\n if (batch.ownerType !== 'FACILITY') return false;\n if (Number(batch.qtyRemaining ?? 0) <= 0) return false;\n if (batch.status === 'EXPIRED' || batch.status === 'EXHAUSTED' || batch.status === 'QUARANTINED') return false;\n return true;\n}\n\nexport default function PickupCreatePage() {\n const navigate = useNavigate();\n const [facilities, setFacilities] = useState([]);\n const [batches, setBatches] = useState([]);\n // OPEN pickups already on this user — one-session-per-user rule means\n // any open session blocks a new pickup. The user has to end the session\n // or top it up instead.\n const [openSessions, setOpenSessions] = useState([]);\n const [loading, setLoading] = useState(true);\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState('');\n const [form, setForm] = useState({\n id: uuidv4(),\n personalBatchId: uuidv4(),\n facilityId: '',\n sourceBatchId: '',\n pickedQty: 1,\n notes: '',\n // Outreach session metadata.\n sessionName: '',\n sessionDescription: '',\n sessionStartTime: dayjs(),\n sessionExpectedEndTime: null,\n sessionSite: '',\n });\n\n usePermissionedEffect('update.manage.productManagement.pickup', () => {\n async function load() {\n try {\n const [f, b, open] = await Promise.all([\n listFacilities(),\n listBatches(),\n listMyOpenPickups().catch(() => []),\n ]);\n setFacilities(f);\n setBatches(b);\n setOpenSessions(open);\n } catch (err) {\n setError(err?.response?.data?.message ?? err?.message ?? 'Failed to load reference data');\n } finally {\n setLoading(false);\n }\n }\n void load();\n }, []);\n\n const hasOpenSession = openSessions.length > 0;\n\n // Batches limited to the picked facility (when one is selected). Reset\n // when the facility changes so the user can't carry over a stale batch.\n const eligibleBatches = useMemo(() => {\n if (!form.facilityId) return [];\n return batches.filter(isPickable).filter((b) => b.ownerId === form.facilityId);\n }, [batches, form.facilityId]);\n\n const selectedBatch = useMemo(\n () => batches.find((b) => b.id === form.sourceBatchId) ?? null,\n [batches, form.sourceBatchId],\n );\n\n function patch(k, v) {\n setForm((f) => ({ ...f, [k]: v }));\n }\n\n function patchFacility(id) {\n setForm((f) => ({ ...f, facilityId: id, sourceBatchId: '' }));\n }\n\n const qty = Number(form.pickedQty);\n const remaining = Number(selectedBatch?.qtyRemaining ?? 0);\n const qtyError = !selectedBatch\n ? ''\n : !Number.isInteger(qty) || qty <= 0\n ? 'Enter a whole number greater than 0.'\n : qty > remaining\n ? `Only ${remaining} available in this batch.`\n : '';\n const sessionNameError = form.sessionName.trim() ? '' : 'Session name is required.';\n // Start time can't be in the past. A small grace (5 min) tolerates the lag\n // between the prefilled \"now\" and submission; the backend re-checks against\n // server time so a tampered client clock can't bypass it.\n const startValid = form.sessionStartTime && dayjs.isDayjs(form.sessionStartTime) && form.sessionStartTime.isValid();\n const sessionStartError = !startValid\n ? 'Start time is required.'\n : form.sessionStartTime.valueOf() < Date.now() - 5 * 60 * 1000\n ? 'Start time cannot be in the past.'\n : '';\n // End time is required and must be after the start.\n const endValid = form.sessionExpectedEndTime && dayjs.isDayjs(form.sessionExpectedEndTime) && form.sessionExpectedEndTime.isValid();\n const sessionEndError = !endValid\n ? 'Expected end time is required.'\n : (startValid && !form.sessionExpectedEndTime.isAfter(form.sessionStartTime))\n ? 'Expected end must be after the start time.'\n : '';\n const formIsValid = !!form.facilityId && !!form.sourceBatchId && !qtyError && !hasOpenSession\n && !sessionNameError && !sessionStartError && !sessionEndError;\n\n async function save() {\n if (!formIsValid) return;\n setSubmitting(true);\n setError('');\n try {\n await recordPickup({\n id: form.id,\n personalBatchId: form.personalBatchId,\n sourceBatchId: form.sourceBatchId,\n pickedQty: qty,\n notes: form.notes || null,\n sessionName: form.sessionName.trim(),\n sessionDescription: form.sessionDescription.trim() || null,\n sessionStartTime: startValid ? form.sessionStartTime.toISOString() : null,\n sessionExpectedEndTime: endValid ? form.sessionExpectedEndTime.toISOString() : null,\n sessionSite: form.sessionSite.trim() || null,\n });\n showToast({ message: 'Pickup recorded successfully', type: 'success' });\n navigate('/ui/medplat/manage/pm/pickups');\n } catch (err) {\n setError(err?.response?.data?.message ?? err?.message ?? 'Failed to record pickup');\n } finally {\n setSubmitting(false);\n }\n }\n\n return (\n <Box>\n <PmNav />\n <PmGuard perm={'update.manage.productManagement.pickup'} title=\"You don’t have permission to record pickups\">\n <PmPageShell\n title=\"Record Pickup\"\n subtitle=\"Check out stock from a facility for your field work. Record returns and wastage when you bring stock back.\"\n actions={\n <Stack direction=\"row\" spacing={1}>\n <Button variant=\"outlined\" onClick={() => navigate('/ui/medplat/manage/pm/pickups')}>Cancel</Button>\n <Button variant=\"contained\" startIcon={<SaveRoundedIcon />}\n disabled={!formIsValid || submitting}\n onClick={() => void save()}>\n {submitting ? 'Recording…' : 'Record Pickup'}\n </Button>\n </Stack>\n }\n >\n {error ? <Alert severity=\"error\" sx={{ mb: 2 }}>{error}</Alert> : null}\n\n {hasOpenSession ? (\n <Alert\n severity=\"warning\"\n sx={{ mb: 2 }}\n action={\n <Button color=\"inherit\" size=\"small\"\n onClick={() => navigate('/ui/medplat/manage/pm/pickups')}>\n Go to Pickups\n </Button>\n }\n >\n You already have <strong>{openSessions.length}</strong> open outreach session{openSessions.length === 1 ? '' : 's'}.\n End the active session{openSessions.length === 1 ? '' : 's'} before starting a new pickup,\n or use <strong>Top Up</strong> on the Pickups page to add more stock to an active session.\n </Alert>\n ) : null}\n\n <Card sx={{ borderRadius: 1.5, mb: 2, border: '1px solid', borderColor: 'divider', boxShadow: '0 12px 32px rgba(15, 23, 42, 0.045)' }}>\n <CardContent sx={{ p: 2.5 }}>\n <PmFormSection\n eyebrow=\"Step 1\"\n title=\"Source\"\n hint=\"Select a facility and then the batch to pick up.\"\n sx={{ mb: 2 }}\n />\n <Grid container spacing={2}>\n <Grid item xs={12} md={5}>\n <Autocomplete\n size=\"small\"\n options={facilities}\n getOptionLabel={(f) => f?.name ?? ''}\n isOptionEqualToValue={(a, b) => a?.id === b?.id}\n value={facilities.find((f) => f.id === form.facilityId) ?? null}\n onChange={(_, next) => patchFacility(next?.id ?? '')}\n loading={loading}\n renderInput={(params) => (\n <TextField {...params} required label=\"Source Facility\" placeholder=\"Pick a facility you're assigned to\" />\n )}\n />\n </Grid>\n <Grid item xs={12} md={7}>\n <PmSelect\n label=\"Source Batch\"\n required\n disabled={!form.facilityId}\n value={form.sourceBatchId}\n onChange={(v) => patch('sourceBatchId', v)}\n options={eligibleBatches.map((b) => ({\n value: b.id,\n label: `${b.productName} · qty ${b.qtyRemaining}`\n + `${b.lotNumber ? ` · ${b.lotNumber}` : ''}`\n + `${b.expiryDate ? ` · exp ${formatDate(b.expiryDate)}` : ''}`,\n }))}\n noOptionsText=\"No pickable stock in this facility\"\n helperText={!form.facilityId\n ? 'Pick a facility first.'\n : eligibleBatches.length === 0\n ? 'This facility has no in-stock batches you can pick up right now.'\n : 'Active facility batches only — quarantined / expired / exhausted stock is hidden.'}\n />\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n\n <Card sx={{ borderRadius: 1.5, mb: 2, border: '1px solid', borderColor: 'divider', boxShadow: '0 12px 32px rgba(15, 23, 42, 0.045)' }}>\n <CardContent sx={{ p: 2.5 }}>\n <PmFormSection\n eyebrow=\"Session\"\n title=\"Outreach session details\"\n hint=\"Records the purpose, timing and location of this outreach session. Shown when administering from this stock.\"\n sx={{ mb: 2 }}\n />\n <Grid container spacing={2}>\n <Grid item xs={12} md={6}>\n <TextField\n required fullWidth size=\"small\"\n label=\"Session name\"\n inputProps={{ maxLength: 150 }}\n value={form.sessionName}\n onChange={(e) => patch('sessionName', e.target.value)}\n error={!!sessionNameError && form.sessionName !== ''}\n helperText={form.sessionName === '' ? 'e.g. Anganwadi camp – Ward 4' : sessionNameError}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextField\n fullWidth size=\"small\"\n label=\"Session site (optional)\"\n placeholder=\"Location / site reference\"\n inputProps={{ maxLength: 200 }}\n value={form.sessionSite}\n onChange={(e) => patch('sessionSite', e.target.value)}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale=\"en\">\n <DateTimePicker\n label=\"Start time\"\n value={form.sessionStartTime}\n onChange={(newVal) => patch('sessionStartTime', newVal)}\n ampm={false}\n minDateTime={dayjs().subtract(5, 'minute')}\n slotProps={{\n actionBar: { actions: ['clear'] },\n textField: {\n size: 'small',\n fullWidth: true,\n required: true,\n error: !!sessionStartError && form.sessionStartTime !== null,\n helperText: (form.sessionStartTime !== null && sessionStartError) || 'Cannot be in the past. (5 minutes buffer allowed)',\n },\n }}\n />\n </LocalizationProvider>\n </Grid>\n <Grid item xs={12} md={6}>\n <LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale=\"en\">\n <DateTimePicker\n label=\"Expected End Time\"\n value={form.sessionExpectedEndTime}\n onChange={(newVal) => patch('sessionExpectedEndTime', newVal)}\n ampm={false}\n minDateTime={startValid ? form.sessionStartTime : undefined}\n slotProps={{\n actionBar: { actions: ['clear'] },\n textField: {\n size: 'small',\n fullWidth: true,\n required: true,\n error: !!sessionEndError && form.sessionExpectedEndTime !== null,\n helperText: (form.sessionExpectedEndTime !== null && sessionEndError) || 'When the session is expected to end.',\n },\n }}\n />\n </LocalizationProvider>\n </Grid>\n <Grid item xs={12}>\n <TextField\n fullWidth size=\"small\" multiline minRows={2}\n label=\"Purpose / description (optional)\"\n value={form.sessionDescription}\n onChange={(e) => patch('sessionDescription', e.target.value)}\n />\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n\n {selectedBatch ? (\n <Card sx={{ borderRadius: 1.5, mb: 2, border: '1px solid', borderColor: 'divider', boxShadow: '0 12px 32px rgba(15, 23, 42, 0.045)' }}>\n <CardContent sx={{ p: 2.5 }}>\n <PmFormSection\n eyebrow=\"Step 2\"\n title=\"Quantity\"\n hint={`Available: ${remaining}. You can pick up to this amount.`}\n sx={{ mb: 2 }}\n />\n <Grid container spacing={2}>\n <Grid item xs={12} md={4}>\n <TextField\n required fullWidth size=\"small\" type=\"number\"\n label=\"Pick Quantity\"\n inputProps={{ min: 1, max: remaining }}\n value={form.pickedQty}\n onChange={(e) => patch('pickedQty', e.target.value)}\n error={!!qtyError}\n helperText={qtyError || `Out of ${remaining} available`}\n />\n </Grid>\n <Grid item xs={12} md={8}>\n <TextField\n fullWidth size=\"small\"\n label=\"Notes (optional)\"\n placeholder=\"Anything worth recording about this pickup\"\n value={form.notes}\n onChange={(e) => patch('notes', e.target.value)}\n />\n </Grid>\n </Grid>\n <Stack direction=\"row\" spacing={1} sx={{ mt: 2 }} flexWrap=\"wrap\" useFlexGap>\n <Chip size=\"small\" label={`Product · ${selectedBatch.productName}`} />\n {selectedBatch.lotNumber ? <Chip size=\"small\" label={`Lot · ${selectedBatch.lotNumber}`} /> : null}\n {selectedBatch.expiryDate ? <Chip size=\"small\" label={`Expiry · ${formatDate(selectedBatch.expiryDate)}`} /> : null}\n {selectedBatch.storageUnitName ? <Chip size=\"small\" label={`From · ${selectedBatch.storageUnitName}`} /> : null}\n </Stack>\n </CardContent>\n </Card>\n ) : null}\n </PmPageShell>\n </PmGuard>\n </Box>\n );\n}\n"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;CAAA,CAAC,SAAS,GAAE,GAAE;EAAC,AAAU,OAAO,KAAjB,YAA8C,MAApB,SAA2B,EAAO,UAAQ,EAAE,IAAc,OAAO,UAAnB,cAA2B,OAAO,MAAI,OAAO,CAAC,IAAE,CAAC,IAAe,OAAO,aAApB,MAA+B,aAAW,KAAG,KAAA,CAAM,QAAM,EAAE;CAAC,EAAA,CAAC,IAAO,WAAU;EAAc,IAAI,IAAE,KAAI,IAAE,KAAI,IAAE,MAAK,IAAE,eAAc,IAAE,UAAS,IAAE,UAAS,IAAE,QAAO,IAAE,OAAM,IAAE,QAAO,IAAE,SAAQ,IAAE,WAAU,IAAE,QAAO,IAAE,QAAO,IAAE,gBAAe,IAAE,8FAA6F,IAAE,wFAAuF,IAAE;GAAC,MAAK;GAAK,UAAS,2DAA2D,MAAM,GAAG;GAAE,QAAO,wFAAwF,MAAM,GAAG;GAAE,SAAQ,SAAS,GAAE;IAAC,IAAI,IAAE;KAAC;KAAK;KAAK;KAAK;IAAI,GAAE,IAAE,IAAE;IAAI,OAAM,MAAI,KAAG,GAAG,IAAE,MAAI,OAAK,EAAE,MAAI,EAAE,MAAI;GAAG;EAAC,GAAE,IAAE,SAAS,GAAE,GAAE,GAAE;GAAC,IAAI,IAAE,OAAO,CAAC;GAAE,OAAM,CAAC,KAAG,EAAE,UAAQ,IAAE,IAAE,KAAG,MAAM,IAAE,IAAE,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAE;EAAC,GAAE,IAAE;GAAC,GAAE;GAAE,GAAE,SAAS,GAAE;IAAC,IAAI,IAAE,CAAC,EAAE,UAAU,GAAE,IAAE,KAAK,IAAI,CAAC,GAAE,IAAE,KAAK,MAAM,IAAE,EAAE,GAAE,IAAE,IAAE;IAAG,QAAO,KAAG,IAAE,MAAI,OAAK,EAAE,GAAE,GAAE,GAAG,IAAE,MAAI,EAAE,GAAE,GAAE,GAAG;GAAC;GAAE,GAAE,SAAS,EAAE,GAAE,GAAE;IAAC,IAAG,EAAE,KAAK,IAAE,EAAE,KAAK,GAAE,OAAM,CAAC,EAAE,GAAE,CAAC;IAAE,IAAI,IAAE,MAAI,EAAE,KAAK,IAAE,EAAE,KAAK,MAAI,EAAE,MAAM,IAAE,EAAE,MAAM,IAAG,IAAE,EAAE,MAAM,CAAC,CAAC,IAAI,GAAE,CAAC,GAAE,IAAE,IAAE,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,CAAC,IAAI,KAAG,IAAE,KAAG,IAAG,CAAC;IAAE,OAAM,EAAE,EAAE,KAAG,IAAE,MAAI,IAAE,IAAE,IAAE,IAAE,OAAK;GAAE;GAAE,GAAE,SAAS,GAAE;IAAC,OAAO,IAAE,IAAE,KAAK,KAAK,CAAC,KAAG,IAAE,KAAK,MAAM,CAAC;GAAC;GAAE,GAAE,SAAS,GAAE;IAAC,OAAM;KAAC,GAAE;KAAE,GAAE;KAAE,GAAE;KAAE,GAAE;KAAE,GAAE;KAAE,GAAE;KAAE,GAAE;KAAE,GAAE;KAAE,IAAG;KAAE,GAAE;IAAC,EAAE,MAAI,OAAO,KAAG,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,QAAQ,MAAK,EAAE;GAAC;GAAE,GAAE,SAAS,GAAE;IAAC,OAAgB,MAAT,KAAK;GAAK;EAAC,GAAE,IAAE,MAAK,IAAE,CAAC;EAAE,EAAE,KAAG;EAAE,IAAI,IAAE,kBAAiB,IAAE,SAAS,GAAE;GAAC,OAAO,aAAa,KAAG,EAAE,CAAC,KAAG,CAAC,EAAE;EAAG,GAAE,IAAE,SAAS,EAAE,GAAE,GAAE,GAAE;GAAC,IAAI;GAAE,IAAG,CAAC,GAAE,OAAO;GAAE,IAAa,OAAO,KAAjB,UAAmB;IAAC,IAAI,IAAE,EAAE,YAAY;IAAE,EAAE,OAAK,IAAE,IAAG,MAAI,EAAE,KAAG,GAAE,IAAE;IAAG,IAAI,IAAE,EAAE,MAAM,GAAG;IAAE,IAAG,CAAC,KAAG,EAAE,SAAO,GAAE,OAAO,EAAE,EAAE,EAAE;GAAC,OAAK;IAAC,IAAI,IAAE,EAAE;IAAK,EAAE,KAAG,GAAE,IAAE;GAAC;GAAC,OAAM,CAAC,KAAG,MAAI,IAAE,IAAG,KAAG,CAAC,KAAG;EAAC,GAAE,IAAE,SAAS,GAAE,GAAE;GAAC,IAAG,EAAE,CAAC,GAAE,OAAO,EAAE,MAAM;GAAE,IAAI,IAAY,OAAO,KAAjB,WAAmB,IAAE,CAAC;GAAE,OAAO,EAAE,OAAK,GAAE,EAAE,OAAK,WAAU,IAAI,EAAE,CAAC;EAAC,GAAE,IAAE;EAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,SAAS,GAAE,GAAE;GAAC,OAAO,EAAE,GAAE;IAAC,QAAO,EAAE;IAAG,KAAI,EAAE;IAAG,GAAE,EAAE;IAAG,SAAQ,EAAE;GAAO,CAAC;EAAC;EAAE,IAAI,IAAE,WAAU;GAAC,SAAS,EAAE,GAAE;IAAC,KAAK,KAAG,EAAE,EAAE,QAAO,MAAK,CAAC,CAAC,GAAE,KAAK,MAAM,CAAC,GAAE,KAAK,KAAG,KAAK,MAAI,EAAE,KAAG,CAAC,GAAE,KAAK,KAAG,CAAC;GAAC;GAAC,IAAI,IAAE,EAAE;GAAU,OAAO,EAAE,QAAM,SAAS,GAAE;IAAC,KAAK,KAAG,SAAS,GAAE;KAAC,IAAI,IAAE,EAAE,MAAK,IAAE,EAAE;KAAI,IAAU,MAAP,MAAS,uBAAO,IAAI,KAAK,GAAG;KAAE,IAAG,EAAE,EAAE,CAAC,GAAE,uBAAO,IAAI,KAAG;KAAE,IAAG,aAAa,MAAK,OAAO,IAAI,KAAK,CAAC;KAAE,IAAa,OAAO,KAAjB,YAAoB,CAAC,MAAM,KAAK,CAAC,GAAE;MAAC,IAAI,IAAE,EAAE,MAAM,CAAC;MAAE,IAAG,GAAE;OAAC,IAAI,IAAE,EAAE,KAAG,KAAG,GAAE,KAAG,EAAE,MAAI,IAAA,CAAK,UAAU,GAAE,CAAC;OAAE,OAAO,IAAE,IAAI,KAAK,KAAK,IAAI,EAAE,IAAG,GAAE,EAAE,MAAI,GAAE,EAAE,MAAI,GAAE,EAAE,MAAI,GAAE,EAAE,MAAI,GAAE,CAAC,CAAC,IAAE,IAAI,KAAK,EAAE,IAAG,GAAE,EAAE,MAAI,GAAE,EAAE,MAAI,GAAE,EAAE,MAAI,GAAE,EAAE,MAAI,GAAE,CAAC;MAAC;KAAC;KAAC,OAAO,IAAI,KAAK,CAAC;IAAC,EAAE,CAAC,GAAE,KAAK,KAAK;GAAC,GAAE,EAAE,OAAK,WAAU;IAAC,IAAI,IAAE,KAAK;IAAG,KAAK,KAAG,EAAE,YAAY,GAAE,KAAK,KAAG,EAAE,SAAS,GAAE,KAAK,KAAG,EAAE,QAAQ,GAAE,KAAK,KAAG,EAAE,OAAO,GAAE,KAAK,KAAG,EAAE,SAAS,GAAE,KAAK,KAAG,EAAE,WAAW,GAAE,KAAK,KAAG,EAAE,WAAW,GAAE,KAAK,MAAI,EAAE,gBAAgB;GAAC,GAAE,EAAE,SAAO,WAAU;IAAC,OAAO;GAAC,GAAE,EAAE,UAAQ,WAAU;IAAC,OAAQ,KAAK,GAAG,SAAS,MAAI;GAAE,GAAE,EAAE,SAAO,SAAS,GAAE,GAAE;IAAC,IAAI,IAAE,EAAE,CAAC;IAAE,OAAO,KAAK,QAAQ,CAAC,KAAG,KAAG,KAAG,KAAK,MAAM,CAAC;GAAC,GAAE,EAAE,UAAQ,SAAS,GAAE,GAAE;IAAC,OAAO,EAAE,CAAC,IAAE,KAAK,QAAQ,CAAC;GAAC,GAAE,EAAE,WAAS,SAAS,GAAE,GAAE;IAAC,OAAO,KAAK,MAAM,CAAC,IAAE,EAAE,CAAC;GAAC,GAAE,EAAE,KAAG,SAAS,GAAE,GAAE,GAAE;IAAC,OAAO,EAAE,EAAE,CAAC,IAAE,KAAK,KAAG,KAAK,IAAI,GAAE,CAAC;GAAC,GAAE,EAAE,OAAK,WAAU;IAAC,OAAO,KAAK,MAAM,KAAK,QAAQ,IAAE,GAAG;GAAC,GAAE,EAAE,UAAQ,WAAU;IAAC,OAAO,KAAK,GAAG,QAAQ;GAAC,GAAE,EAAE,UAAQ,SAAS,GAAE,GAAE;IAAC,IAAI,IAAE,MAAK,IAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAG,GAAE,IAAE,EAAE,EAAE,CAAC,GAAE,IAAE,SAAS,GAAE,GAAE;KAAC,IAAI,IAAE,EAAE,EAAE,EAAE,KAAG,KAAK,IAAI,EAAE,IAAG,GAAE,CAAC,IAAE,IAAI,KAAK,EAAE,IAAG,GAAE,CAAC,GAAE,CAAC;KAAE,OAAO,IAAE,IAAE,EAAE,MAAM,CAAC;IAAC,GAAE,IAAE,SAAS,GAAE,GAAE;KAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,GAAG,IAAG,IAAE;MAAC;MAAE;MAAE;MAAE;KAAC,IAAE;MAAC;MAAG;MAAG;MAAG;KAAG,EAAA,CAAG,MAAM,CAAC,CAAC,GAAE,CAAC;IAAC,GAAE,IAAE,KAAK,IAAG,IAAE,KAAK,IAAG,IAAE,KAAK,IAAG,IAAE,SAAO,KAAK,KAAG,QAAM;IAAI,QAAO,GAAP;KAAU,KAAK,GAAE,OAAO,IAAE,EAAE,GAAE,CAAC,IAAE,EAAE,IAAG,EAAE;KAAE,KAAK,GAAE,OAAO,IAAE,EAAE,GAAE,CAAC,IAAE,EAAE,GAAE,IAAE,CAAC;KAAE,KAAK;MAAE,IAAI,IAAE,KAAK,QAAQ,CAAC,CAAC,aAAW,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,KAAG;MAAE,OAAO,EAAE,IAAE,IAAE,IAAE,KAAG,IAAE,IAAG,CAAC;KAAE,KAAK;KAAE,KAAK,GAAE,OAAO,EAAE,IAAE,SAAQ,CAAC;KAAE,KAAK,GAAE,OAAO,EAAE,IAAE,WAAU,CAAC;KAAE,KAAK,GAAE,OAAO,EAAE,IAAE,WAAU,CAAC;KAAE,KAAK,GAAE,OAAO,EAAE,IAAE,gBAAe,CAAC;KAAE,SAAQ,OAAO,KAAK,MAAM;IAAC;GAAC,GAAE,EAAE,QAAM,SAAS,GAAE;IAAC,OAAO,KAAK,QAAQ,GAAE,CAAC,CAAC;GAAC,GAAE,EAAE,OAAK,SAAS,GAAE,GAAE;IAAC,IAAI,GAAE,IAAE,EAAE,EAAE,CAAC,GAAE,IAAE,SAAO,KAAK,KAAG,QAAM,KAAI,KAAG,IAAE,CAAC,GAAE,EAAE,KAAG,IAAE,QAAO,EAAE,KAAG,IAAE,QAAO,EAAE,KAAG,IAAE,SAAQ,EAAE,KAAG,IAAE,YAAW,EAAE,KAAG,IAAE,SAAQ,EAAE,KAAG,IAAE,WAAU,EAAE,KAAG,IAAE,WAAU,EAAE,KAAG,IAAE,gBAAe,EAAA,CAAG,IAAG,IAAE,MAAI,IAAE,KAAK,MAAI,IAAE,KAAK,MAAI;IAAE,IAAG,MAAI,KAAG,MAAI,GAAE;KAAC,IAAI,IAAE,KAAK,MAAM,CAAC,CAAC,IAAI,GAAE,CAAC;KAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,KAAK,KAAG,EAAE,IAAI,GAAE,KAAK,IAAI,KAAK,IAAG,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAAE,OAAM,KAAG,KAAK,GAAG,EAAE,CAAC,CAAC;IAAE,OAAO,KAAK,KAAK,GAAE;GAAI,GAAE,EAAE,MAAI,SAAS,GAAE,GAAE;IAAC,OAAO,KAAK,MAAM,CAAC,CAAC,KAAK,GAAE,CAAC;GAAC,GAAE,EAAE,MAAI,SAAS,GAAE;IAAC,OAAO,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;GAAC,GAAE,EAAE,MAAI,SAAS,GAAE,GAAE;IAAC,IAAI,GAAE,IAAE;IAAK,IAAE,OAAO,CAAC;IAAE,IAAI,IAAE,EAAE,EAAE,CAAC,GAAE,IAAE,SAAS,GAAE;KAAC,IAAI,IAAE,EAAE,CAAC;KAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAE,KAAK,MAAM,IAAE,CAAC,CAAC,GAAE,CAAC;IAAC;IAAE,IAAG,MAAI,GAAE,OAAO,KAAK,IAAI,GAAE,KAAK,KAAG,CAAC;IAAE,IAAG,MAAI,GAAE,OAAO,KAAK,IAAI,GAAE,KAAK,KAAG,CAAC;IAAE,IAAG,MAAI,GAAE,OAAO,EAAE,CAAC;IAAE,IAAG,MAAI,GAAE,OAAO,EAAE,CAAC;IAAE,IAAI,KAAG,IAAE,CAAC,GAAE,EAAE,KAAG,GAAE,EAAE,KAAG,GAAE,EAAE,KAAG,GAAE,EAAA,CAAG,MAAI,GAAE,IAAE,KAAK,GAAG,QAAQ,IAAE,IAAE;IAAE,OAAO,EAAE,EAAE,GAAE,IAAI;GAAC,GAAE,EAAE,WAAS,SAAS,GAAE,GAAE;IAAC,OAAO,KAAK,IAAI,KAAG,GAAE,CAAC;GAAC,GAAE,EAAE,SAAO,SAAS,GAAE;IAAC,IAAI,IAAE,MAAK,IAAE,KAAK,QAAQ;IAAE,IAAG,CAAC,KAAK,QAAQ,GAAE,OAAO,EAAE,eAAa;IAAE,IAAI,IAAE,KAAG,wBAAuB,IAAE,EAAE,EAAE,IAAI,GAAE,IAAE,KAAK,IAAG,IAAE,KAAK,IAAG,IAAE,KAAK,IAAG,IAAE,EAAE,UAAS,IAAE,EAAE,QAAO,IAAE,EAAE,UAAS,IAAE,SAAS,GAAE,GAAE,GAAE,GAAE;KAAC,OAAO,MAAI,EAAE,MAAI,EAAE,GAAE,CAAC,MAAI,EAAE,EAAE,CAAC,MAAM,GAAE,CAAC;IAAC,GAAE,IAAE,SAAS,GAAE;KAAC,OAAO,EAAE,EAAE,IAAE,MAAI,IAAG,GAAE,GAAG;IAAC,GAAE,IAAE,KAAG,SAAS,GAAE,GAAE,GAAE;KAAC,IAAI,IAAE,IAAE,KAAG,OAAK;KAAK,OAAO,IAAE,EAAE,YAAY,IAAE;IAAC;IAAE,OAAO,EAAE,QAAQ,IAAG,SAAS,GAAE,GAAE;KAAC,OAAO,KAAG,SAAS,GAAE;MAAC,QAAO,GAAP;OAAU,KAAI,MAAK,OAAO,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;OAAE,KAAI,QAAO,OAAO,EAAE,EAAE,EAAE,IAAG,GAAE,GAAG;OAAE,KAAI,KAAI,OAAO,IAAE;OAAE,KAAI,MAAK,OAAO,EAAE,EAAE,IAAE,GAAE,GAAE,GAAG;OAAE,KAAI,OAAM,OAAO,EAAE,EAAE,aAAY,GAAE,GAAE,CAAC;OAAE,KAAI,QAAO,OAAO,EAAE,GAAE,CAAC;OAAE,KAAI,KAAI,OAAO,EAAE;OAAG,KAAI,MAAK,OAAO,EAAE,EAAE,EAAE,IAAG,GAAE,GAAG;OAAE,KAAI,KAAI,OAAO,OAAO,EAAE,EAAE;OAAE,KAAI,MAAK,OAAO,EAAE,EAAE,aAAY,EAAE,IAAG,GAAE,CAAC;OAAE,KAAI,OAAM,OAAO,EAAE,EAAE,eAAc,EAAE,IAAG,GAAE,CAAC;OAAE,KAAI,QAAO,OAAO,EAAE,EAAE;OAAI,KAAI,KAAI,OAAO,OAAO,CAAC;OAAE,KAAI,MAAK,OAAO,EAAE,EAAE,GAAE,GAAE,GAAG;OAAE,KAAI,KAAI,OAAO,EAAE,CAAC;OAAE,KAAI,MAAK,OAAO,EAAE,CAAC;OAAE,KAAI,KAAI,OAAO,EAAE,GAAE,GAAE,CAAC,CAAC;OAAE,KAAI,KAAI,OAAO,EAAE,GAAE,GAAE,CAAC,CAAC;OAAE,KAAI,KAAI,OAAO,OAAO,CAAC;OAAE,KAAI,MAAK,OAAO,EAAE,EAAE,GAAE,GAAE,GAAG;OAAE,KAAI,KAAI,OAAO,OAAO,EAAE,EAAE;OAAE,KAAI,MAAK,OAAO,EAAE,EAAE,EAAE,IAAG,GAAE,GAAG;OAAE,KAAI,OAAM,OAAO,EAAE,EAAE,EAAE,KAAI,GAAE,GAAG;OAAE,KAAI,KAAI,OAAO;MAAC;MAAC,OAAO;KAAI,EAAE,CAAC,KAAG,EAAE,QAAQ,KAAI,EAAE;IAAC,EAAE;GAAC,GAAE,EAAE,YAAU,WAAU;IAAC,OAAO,KAAG,CAAC,KAAK,MAAM,KAAK,GAAG,kBAAkB,IAAE,EAAE;GAAC,GAAE,EAAE,OAAK,SAAS,GAAE,GAAE,GAAE;IAAC,IAAI,GAAE,IAAE,MAAK,IAAE,EAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,KAAG,EAAE,UAAU,IAAE,KAAK,UAAU,KAAG,GAAE,IAAE,OAAK,GAAE,IAAE,WAAU;KAAC,OAAO,EAAE,EAAE,GAAE,CAAC;IAAC;IAAE,QAAO,GAAP;KAAU,KAAK;MAAE,IAAE,EAAE,IAAE;MAAG;KAAM,KAAK;MAAE,IAAE,EAAE;MAAE;KAAM,KAAK;MAAE,IAAE,EAAE,IAAE;MAAE;KAAM,KAAK;MAAE,KAAG,IAAE,KAAG;MAAO;KAAM,KAAK;MAAE,KAAG,IAAE,KAAG;MAAM;KAAM,KAAK;MAAE,IAAE,IAAE;MAAE;KAAM,KAAK;MAAE,IAAE,IAAE;MAAE;KAAM,KAAK;MAAE,IAAE,IAAE;MAAE;KAAM,SAAQ,IAAE;IAAC;IAAC,OAAO,IAAE,IAAE,EAAE,EAAE,CAAC;GAAC,GAAE,EAAE,cAAY,WAAU;IAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC;GAAE,GAAE,EAAE,UAAQ,WAAU;IAAC,OAAO,EAAE,KAAK;GAAG,GAAE,EAAE,SAAO,SAAS,GAAE,GAAE;IAAC,IAAG,CAAC,GAAE,OAAO,KAAK;IAAG,IAAI,IAAE,KAAK,MAAM,GAAE,IAAE,EAAE,GAAE,GAAE,CAAC,CAAC;IAAE,OAAO,MAAI,EAAE,KAAG,IAAG;GAAC,GAAE,EAAE,QAAM,WAAU;IAAC,OAAO,EAAE,EAAE,KAAK,IAAG,IAAI;GAAC,GAAE,EAAE,SAAO,WAAU;IAAC,OAAO,IAAI,KAAK,KAAK,QAAQ,CAAC;GAAC,GAAE,EAAE,SAAO,WAAU;IAAC,OAAO,KAAK,QAAQ,IAAE,KAAK,YAAY,IAAE;GAAI,GAAE,EAAE,cAAY,WAAU;IAAC,OAAO,KAAK,GAAG,YAAY;GAAC,GAAE,EAAE,WAAS,WAAU;IAAC,OAAO,KAAK,GAAG,YAAY;GAAC,GAAE;EAAC,EAAE,GAAE,IAAE,EAAE;EAAU,OAAO,EAAE,YAAU,GAAE;GAAC,CAAC,OAAM,CAAC;GAAE,CAAC,MAAK,CAAC;GAAE,CAAC,MAAK,CAAC;GAAE,CAAC,MAAK,CAAC;GAAE,CAAC,MAAK,CAAC;GAAE,CAAC,MAAK,CAAC;GAAE,CAAC,MAAK,CAAC;GAAE,CAAC,MAAK,CAAC;EAAC,CAAC,CAAC,SAAS,SAAS,GAAE;GAAC,EAAE,EAAE,MAAI,SAAS,GAAE;IAAC,OAAO,KAAK,GAAG,GAAE,EAAE,IAAG,EAAE,EAAE;GAAC;EAAC,EAAE,GAAE,EAAE,SAAO,SAAS,GAAE,GAAE;GAAC,OAAO,AAAgB,EAAE,QAAX,EAAE,GAAE,GAAE,CAAC,GAAO,CAAC,IAAG;EAAC,GAAE,EAAE,SAAO,GAAE,EAAE,UAAQ,GAAE,EAAE,OAAK,SAAS,GAAE;GAAC,OAAO,EAAE,MAAI,CAAC;EAAC,GAAE,EAAE,KAAG,EAAE,IAAG,EAAE,KAAG,GAAE,EAAE,IAAE,CAAC,GAAE;CAAC,EAAE;;ACoCv/N,SAAS,GAAW,GAAO;CAIzB,OADA,EAFI,EAAM,cAAc,cACpB,OAAO,EAAM,gBAAgB,CAAC,KAAK,KACnC,EAAM,WAAW,aAAa,EAAM,WAAW,eAAe,EAAM,WAAW;AAErF;AAEA,SAAwB,KAAmB;CACzC,IAAM,IAAW,EAAY,GACvB,CAAC,GAAY,KAAiB,EAAS,CAAC,CAAC,GACzC,CAAC,GAAS,KAAc,EAAS,CAAC,CAAC,GAInC,CAAC,GAAc,MAAmB,EAAS,CAAC,CAAC,GAC7C,CAAC,IAAS,MAAc,EAAS,EAAI,GACrC,CAAC,IAAY,MAAiB,EAAS,EAAK,GAC5C,CAAC,GAAO,KAAY,EAAS,EAAE,GAC/B,CAAC,GAAM,KAAW,EAAS;EAC/B,IAAI,EAAO;EACX,iBAAiB,EAAO;EACxB,YAAY;EACZ,eAAe;EACf,WAAW;EACX,OAAO;EAEP,aAAa;EACb,oBAAoB;EACpB,mBAAA,GAAA,EAAA,QAAA,CAAwB;EACxB,wBAAwB;EACxB,aAAa;CACf,CAAC;CAED,EAAsB,gDAAgD;EACpE,eAAe,IAAO;GACpB,IAAI;IACF,IAAM,CAAC,GAAG,GAAG,KAAQ,MAAM,QAAQ,IAAI;KACrC,EAAe;KACf,EAAY;KACZ,EAAkB,CAAC,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAGD,AAFA,EAAc,CAAC,GACf,EAAW,CAAC,GACZ,GAAgB,CAAI;GACtB,SAAS,GAAK;IACZ,EAAS,GAAK,UAAU,MAAM,WAAW,GAAK,WAAW,+BAA+B;GAC1F,UAAU;IACR,GAAW,EAAK;GAClB;EACF;EACA,EAAU;CACZ,GAAG,CAAC,CAAC;CAEL,IAAM,IAAiB,EAAa,SAAS,GAIvC,IAAkB,QACjB,EAAK,aACH,EAAQ,OAAO,EAAU,CAAC,CAAC,QAAQ,MAAM,EAAE,YAAY,EAAK,UAAU,IADhD,CAAC,GAE7B,CAAC,GAAS,EAAK,UAAU,CAAC,GAEvB,IAAgB,QACd,EAAQ,MAAM,MAAM,EAAE,OAAO,EAAK,aAAa,KAAK,MAC1D,CAAC,GAAS,EAAK,aAAa,CAC9B;CAEA,SAAS,EAAM,GAAG,GAAG;EACnB,GAAS,OAAO;GAAE,GAAG;IAAI,IAAI;EAAE,EAAE;CACnC;CAEA,SAAS,GAAc,GAAI;EACzB,GAAS,OAAO;GAAE,GAAG;GAAG,YAAY;GAAI,eAAe;EAAG,EAAE;CAC9D;CAEA,IAAM,IAAM,OAAO,EAAK,SAAS,GAC3B,IAAY,OAAO,GAAe,gBAAgB,CAAC,GACnD,IAAY,IAEd,CAAC,OAAO,UAAU,CAAG,KAAK,KAAO,IAC/B,yCACA,IAAM,IACJ,QAAQ,EAAU,6BAClB,KALJ,IAME,IAAmB,EAAK,YAAY,KAAK,IAAI,KAAK,6BAIlD,IAAa,EAAK,oBAAoB,EAAA,QAAM,QAAQ,EAAK,gBAAgB,KAAK,EAAK,iBAAiB,QAAQ,GAC5G,IAAqB,IAEvB,EAAK,iBAAiB,QAAQ,IAAI,KAAK,IAAI,IAAI,MAAS,MACtD,sCACA,KAHF,2BAKE,IAAW,EAAK,0BAA0B,EAAA,QAAM,QAAQ,EAAK,sBAAsB,KAAK,EAAK,uBAAuB,QAAQ,GAC5H,IAAmB,IAEpB,KAAc,CAAC,EAAK,uBAAuB,QAAQ,EAAK,gBAAgB,IACvE,+CACA,KAHF,kCAIE,KAAc,CAAC,CAAC,EAAK,cAAc,CAAC,CAAC,EAAK,iBAAiB,CAAC,KAAY,CAAC,KAC1E,CAAC,KAAoB,CAAC,KAAqB,CAAC;CAEjD,eAAe,KAAO;EACf,QAEL;GADA,GAAc,EAAI,GAClB,EAAS,EAAE;GACX,IAAI;IAcF,AAbA,MAAM,EAAa;KACjB,IAAI,EAAK;KACT,iBAAiB,EAAK;KACtB,eAAe,EAAK;KACpB,WAAW;KACX,OAAO,EAAK,SAAS;KACrB,aAAa,EAAK,YAAY,KAAK;KACnC,oBAAoB,EAAK,mBAAmB,KAAK,KAAK;KACtD,kBAAkB,IAAa,EAAK,iBAAiB,YAAY,IAAI;KACrE,wBAAwB,IAAW,EAAK,uBAAuB,YAAY,IAAI;KAC/E,aAAa,EAAK,YAAY,KAAK,KAAK;IAC1C,CAAC,GACD,EAAU;KAAE,SAAS;KAAgC,MAAM;IAAU,CAAC,GACtE,EAAS,+BAA+B;GAC1C,SAAS,GAAK;IACZ,EAAS,GAAK,UAAU,MAAM,WAAW,GAAK,WAAW,yBAAyB;GACpF,UAAU;IACR,GAAc,EAAK;GACrB;EApBW;CAqBb;CAEA,OACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,CAAQ,CAAA,GACR,kBAAC,GAAD;EAAS,MAAM;EAA0C,OAAM;YAC7D,kBAAC,GAAD;GACE,OAAM;GACN,UAAS;GACT,SACE,kBAAC,GAAD;IAAO,WAAU;IAAM,SAAS;cAAhC,CACE,kBAAC,GAAD;KAAQ,SAAQ;KAAW,eAAe,EAAS,+BAA+B;eAAG;IAAc,CAAA,GACnG,kBAAC,GAAD;KAAQ,SAAQ;KAAY,WAAW,kBAAC,IAAD,CAAkB,CAAA;KACvD,UAAU,CAAC,MAAe;KAC1B,eAAe,KAAK,GAAK;eACxB,KAAa,eAAe;IACvB,CAAA,CACH;;aAXX;IAcG,IAAQ,kBAAC,GAAD;KAAO,UAAS;KAAQ,IAAI,EAAE,IAAI,EAAE;eAAI;IAAa,CAAA,IAAI;IAEjE,IACC,kBAAC,GAAD;KACE,UAAS;KACT,IAAI,EAAE,IAAI,EAAE;KACZ,QACE,kBAAC,GAAD;MAAQ,OAAM;MAAU,MAAK;MAC3B,eAAe,EAAS,+BAA+B;gBAAG;KAEpD,CAAA;eAPZ;MASC;MACkB,kBAAC,UAAD,EAAA,UAAS,EAAa,OAAe,CAAA;MAAC;MAAuB,EAAa,WAAW,IAAI,KAAK;MAAI;MAC5F,EAAa,WAAW,IAAI,KAAK;MAAI;MACrD,kBAAC,UAAD,EAAA,UAAQ,SAAc,CAAA;MAAC;KACzB;SACL;IAEJ,kBAAC,GAAD;KAAM,IAAI;MAAE,cAAc;MAAK,IAAI;MAAG,QAAQ;MAAa,aAAa;MAAW,WAAW;KAAsC;eAClI,kBAAC,GAAD;MAAa,IAAI,EAAE,GAAG,IAAI;gBAA1B,CACE,kBAAC,GAAD;OACE,SAAQ;OACR,OAAM;OACN,MAAK;OACL,IAAI,EAAE,IAAI,EAAE;MACb,CAAA,GACD,kBAAC,GAAD;OAAM,WAAA;OAAU,SAAS;iBAAzB,CACE,kBAAC,GAAD;QAAM,MAAA;QAAK,IAAI;QAAI,IAAI;kBACrB,kBAAC,GAAD;SACE,MAAK;SACL,SAAS;SACT,iBAAiB,MAAM,GAAG,QAAQ;SAClC,uBAAuB,GAAG,MAAM,GAAG,OAAO,GAAG;SAC7C,OAAO,EAAW,MAAM,MAAM,EAAE,OAAO,EAAK,UAAU,KAAK;SAC3D,WAAW,GAAG,MAAS,GAAc,GAAM,MAAM,EAAE;SAC1C;SACT,cAAc,MACZ,kBAAC,GAAD;UAAW,GAAI;UAAQ,UAAA;UAAS,OAAM;UAAkB,aAAY;SAAsC,CAAA;QAE7G,CAAA;OACG,CAAA,GACN,kBAAC,GAAD;QAAM,MAAA;QAAK,IAAI;QAAI,IAAI;kBACrB,kBAAC,GAAD;SACE,OAAM;SACN,UAAA;SACA,UAAU,CAAC,EAAK;SAChB,OAAO,EAAK;SACZ,WAAW,MAAM,EAAM,iBAAiB,CAAC;SACzC,SAAS,EAAgB,KAAK,OAAO;UACnC,OAAO,EAAE;UACT,OAAO,GAAG,EAAE,YAAY,SAAS,EAAE,eAC5B,EAAE,YAAY,MAAM,EAAE,cAAc,KACpC,EAAE,aAAa,UAAU,EAAW,EAAE,UAAU,MAAM;SAC/D,EAAE;SACF,eAAc;SACd,YAAa,EAAK,aAEd,EAAgB,WAAW,IACzB,qEACA,sFAHF;QAIL,CAAA;OACG,CAAA,CACF;QACK;;IACT,CAAA;IAEN,kBAAC,GAAD;KAAM,IAAI;MAAE,cAAc;MAAK,IAAI;MAAG,QAAQ;MAAa,aAAa;MAAW,WAAW;KAAsC;eAClI,kBAAC,GAAD;MAAa,IAAI,EAAE,GAAG,IAAI;gBAA1B,CACE,kBAAC,GAAD;OACE,SAAQ;OACR,OAAM;OACN,MAAK;OACL,IAAI,EAAE,IAAI,EAAE;MACb,CAAA,GACD,kBAAC,GAAD;OAAM,WAAA;OAAU,SAAS;iBAAzB;QACE,kBAAC,GAAD;SAAM,MAAA;SAAK,IAAI;SAAI,IAAI;mBACrB,kBAAC,GAAD;UACE,UAAA;UAAS,WAAA;UAAU,MAAK;UACxB,OAAM;UACN,YAAY,EAAE,WAAW,IAAI;UAC7B,OAAO,EAAK;UACZ,WAAW,MAAM,EAAM,eAAe,EAAE,OAAO,KAAK;UACpD,OAAO,CAAC,CAAC,KAAoB,EAAK,gBAAgB;UAClD,YAAY,EAAK,gBAAgB,KAAK,iCAAiC;SACxE,CAAA;QACG,CAAA;QACN,kBAAC,GAAD;SAAM,MAAA;SAAK,IAAI;SAAI,IAAI;mBACrB,kBAAC,GAAD;UACE,WAAA;UAAU,MAAK;UACf,OAAM;UACN,aAAY;UACZ,YAAY,EAAE,WAAW,IAAI;UAC7B,OAAO,EAAK;UACZ,WAAW,MAAM,EAAM,eAAe,EAAE,OAAO,KAAK;SACrD,CAAA;QACG,CAAA;QACN,kBAAC,GAAD;SAAM,MAAA;SAAK,IAAI;SAAI,IAAI;mBACrB,kBAAC,GAAD;UAAsB,aAAa;UAAc,eAAc;oBAC7D,kBAAC,GAAD;WACE,OAAM;WACN,OAAO,EAAK;WACZ,WAAW,MAAW,EAAM,oBAAoB,CAAM;WACtD,MAAM;WACN,cAAA,GAAA,EAAA,QAAA,CAAmB,CAAC,CAAC,SAAS,GAAG,QAAQ;WACzC,WAAW;YACT,WAAW,EAAE,SAAS,CAAC,OAAO,EAAE;YAChC,WAAW;aACT,MAAM;aACN,WAAW;aACX,UAAU;aACV,OAAO,CAAC,CAAC,KAAqB,EAAK,qBAAqB;aACxD,YAAa,EAAK,qBAAqB,QAAQ,KAAsB;YACvE;WACF;UACD,CAAA;SACmB,CAAA;QAClB,CAAA;QACN,kBAAC,GAAD;SAAM,MAAA;SAAK,IAAI;SAAI,IAAI;mBACrB,kBAAC,GAAD;UAAsB,aAAa;UAAc,eAAc;oBAC7D,kBAAC,GAAD;WACE,OAAM;WACN,OAAO,EAAK;WACZ,WAAW,MAAW,EAAM,0BAA0B,CAAM;WAC5D,MAAM;WACN,aAAa,IAAa,EAAK,mBAAmB,KAAA;WAClD,WAAW;YACT,WAAW,EAAE,SAAS,CAAC,OAAO,EAAE;YAChC,WAAW;aACT,MAAM;aACN,WAAW;aACX,UAAU;aACV,OAAO,CAAC,CAAC,KAAmB,EAAK,2BAA2B;aAC5D,YAAa,EAAK,2BAA2B,QAAQ,KAAoB;YAC3E;WACF;UACD,CAAA;SACmB,CAAA;QAClB,CAAA;QACN,kBAAC,GAAD;SAAM,MAAA;SAAK,IAAI;mBACb,kBAAC,GAAD;UACE,WAAA;UAAU,MAAK;UAAQ,WAAA;UAAU,SAAS;UAC1C,OAAM;UACN,OAAO,EAAK;UACZ,WAAW,MAAM,EAAM,sBAAsB,EAAE,OAAO,KAAK;SAC5D,CAAA;QACG,CAAA;OACF;QACK;;IACT,CAAA;IAEL,IACC,kBAAC,GAAD;KAAM,IAAI;MAAE,cAAc;MAAK,IAAI;MAAG,QAAQ;MAAa,aAAa;MAAW,WAAW;KAAsC;eAClI,kBAAC,GAAD;MAAa,IAAI,EAAE,GAAG,IAAI;gBAA1B;OACE,kBAAC,GAAD;QACE,SAAQ;QACR,OAAM;QACN,MAAM,cAAc,EAAU;QAC9B,IAAI,EAAE,IAAI,EAAE;OACb,CAAA;OACD,kBAAC,GAAD;QAAM,WAAA;QAAU,SAAS;kBAAzB,CACE,kBAAC,GAAD;SAAM,MAAA;SAAK,IAAI;SAAI,IAAI;mBACrB,kBAAC,GAAD;UACE,UAAA;UAAS,WAAA;UAAU,MAAK;UAAQ,MAAK;UACrC,OAAM;UACN,YAAY;WAAE,KAAK;WAAG,KAAK;UAAU;UACrC,OAAO,EAAK;UACZ,WAAW,MAAM,EAAM,aAAa,EAAE,OAAO,KAAK;UAClD,OAAO,CAAC,CAAC;UACT,YAAY,KAAY,UAAU,EAAU;SAC7C,CAAA;QACG,CAAA,GACN,kBAAC,GAAD;SAAM,MAAA;SAAK,IAAI;SAAI,IAAI;mBACrB,kBAAC,GAAD;UACE,WAAA;UAAU,MAAK;UACf,OAAM;UACN,aAAY;UACZ,OAAO,EAAK;UACZ,WAAW,MAAM,EAAM,SAAS,EAAE,OAAO,KAAK;SAC/C,CAAA;QACG,CAAA,CACF;;OACN,kBAAC,GAAD;QAAO,WAAU;QAAM,SAAS;QAAG,IAAI,EAAE,IAAI,EAAE;QAAG,UAAS;QAAO,YAAA;kBAAlE;SACE,kBAAC,GAAD;UAAM,MAAK;UAAQ,OAAO,aAAa,EAAc;SAAgB,CAAA;SACpE,EAAc,YAAY,kBAAC,GAAD;UAAM,MAAK;UAAQ,OAAO,SAAS,EAAc;SAAc,CAAA,IAAI;SAC7F,EAAc,aAAa,kBAAC,GAAD;UAAM,MAAK;UAAQ,OAAO,YAAY,EAAW,EAAc,UAAU;SAAM,CAAA,IAAI;SAC9G,EAAc,kBAAkB,kBAAC,GAAD;UAAM,MAAK;UAAQ,OAAO,UAAU,EAAc;SAAoB,CAAA,IAAI;QACtG;;MACI;;IACT,CAAA,IACJ;GACO;;CACN,CAAA,CACN,EAAA,CAAA;AAET"}
@@ -1,8 +1,8 @@
1
- import { K as e, P as t, q as ee } from "./settingsStore-KW217unV.js";
2
- import { a as te, c as ne, o as re, s as ie, t as ae } from "./PmTable-BkK65bJQ.js";
3
- import { f as oe, p as se, r as ce } from "./constants-5ZCZo-Zm.js";
1
+ import { K as e, P as t, q as ee } from "./settingsStore-GLCtI-tv.js";
2
+ import { a as te, c as ne, o as re, s as ie, t as ae } from "./PmTable-BMFiuHdG.js";
3
+ import { m as oe, p as se, r as ce } from "./constants-CdzV0PxZ.js";
4
4
  import { n, t as le } from "./format-UOyOu75i.js";
5
- import { a as ue, i as de, n as fe, r as pe, t as me } from "./PmGuard-C90yhpsN.js";
5
+ import { a as ue, i as de, n as fe, r as pe, t as me } from "./PmGuard-DrbbysnW.js";
6
6
  import { useMemo as he, useState as r } from "react";
7
7
  import { jsx as i, jsxs as a } from "react/jsx-runtime";
8
8
  import { Alert as o, Box as s, Button as c, Chip as l, Dialog as u, DialogActions as d, DialogContent as f, DialogTitle as p, InputAdornment as ge, Skeleton as _e, Stack as m, TableBody as ve, TableCell as h, TableHead as ye, TableRow as g, TextField as _, Tooltip as be, Typography as v } from "@mui/material";
@@ -297,7 +297,7 @@ function S() {
297
297
  color: "error"
298
298
  }) : /* @__PURE__ */ i(l, {
299
299
  size: "small",
300
- label: se(ce, e.status),
300
+ label: oe(ce, e.status),
301
301
  color: De(e.status)
302
302
  }) }),
303
303
  /* @__PURE__ */ i(h, {
@@ -468,7 +468,7 @@ function S() {
468
468
  ...t,
469
469
  wastageReason: e
470
470
  })),
471
- options: oe,
471
+ options: se,
472
472
  helperText: Q || (Z ? "Required — same reason covers both unaccounted sealed units and any open-vial remaining volume." : "Not needed — nothing being wasted.")
473
473
  }),
474
474
  /* @__PURE__ */ i(_, {
@@ -601,4 +601,4 @@ function S() {
601
601
  //#endregion
602
602
  export { S as default };
603
603
 
604
- //# sourceMappingURL=PickupsPage-DGi6T5Of.js.map
604
+ //# sourceMappingURL=PickupsPage-C-21LwTf.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PickupsPage-DGi6T5Of.js","names":[],"sources":["../src/views/PickupsPage.jsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n Alert,\n Box,\n Button,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n InputAdornment,\n Skeleton,\n Stack,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n TextField,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport { alpha } from '@mui/material/styles';\nimport AddRoundedIcon from '@mui/icons-material/AddRounded';\nimport RefreshRoundedIcon from '@mui/icons-material/RefreshRounded';\nimport SearchRoundedIcon from '@mui/icons-material/SearchRounded';\nimport MoveDownRoundedIcon from '@mui/icons-material/MoveDownRounded';\nimport AssignmentReturnRoundedIcon from '@mui/icons-material/AssignmentReturnRounded';\nimport { showToast } from '@/common/toaster/toaster';\nimport PmPageShell from '@pm/components/PmPageShell';\nimport PmNav from '@pm/components/PmNav';\nimport PmGuard from '@pm/components/PmGuard';\nimport { usePermissionedEffect, usePmPermissions } from '@pm/utils/permissions';\nimport {\n PmEmptyRow,\n PmRef,\n PmSelect,\n PmTable,\n PmTableCard,\n} from '@pm/components/PmTable';\nimport { v4 as uuidv4 } from 'uuid';\nimport {\n listPickups,\n recordPickupReturn,\n recordPickupTopup,\n} from '@pm/services/pmApi';\nimport { formatDate, formatDateTime } from '@pm/utils/format';\nimport { PICKUP_STATUSES, WASTAGE_REASONS, labelOf } from '@pm/utils/constants';\n\nfunction statusChipColor(status) {\n switch (status) {\n case 'OPEN': return 'info';\n case 'RETURNED': return 'success';\n case 'CANCELLED': return 'default';\n default: return 'default';\n }\n}\n\nexport default function PickupsPage() {\n const navigate = useNavigate();\n const perms = usePmPermissions();\n const canCreate = perms.has('update.manage.productManagement.pickup');\n const [rows, setRows] = useState([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState('');\n const [search, setSearch] = useState('');\n const [returnDialog, setReturnDialog] = useState({ open: false, pickup: null });\n const [returnForm, setReturnForm] = useState({ returnedQty: '', wastageReason: '', notes: '' });\n const [topupDialog, setTopupDialog] = useState({ open: false, pickup: null });\n const [topupForm, setTopupForm] = useState({ additionalQty: '', notes: '' });\n const [submitting, setSubmitting] = useState(false);\n\n async function load() {\n setLoading(true);\n setError('');\n try {\n setRows(await listPickups());\n } catch (err) {\n const message = err?.response?.data?.message ?? err?.message ?? 'Failed to load pickups';\n setError(message);\n showToast({ message, type: 'error' });\n } finally {\n setLoading(false);\n }\n }\n\n usePermissionedEffect('view.manage.productManagement.pickup', () => { void load(); }, []);\n\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n if (!q) return rows;\n return rows.filter((r) => {\n const hay = `${r.sessionName ?? ''} ${r.sessionSite ?? ''} ${r.productName ?? ''} ${r.facilityName ?? ''} ${r.userName ?? ''} ${r.lotNumber ?? ''} ${r.notes ?? ''}`.toLowerCase();\n return hay.includes(q);\n });\n }, [rows, search]);\n\n function openReturn(p) {\n const expected = p.expectedRemainingQty ?? 0;\n setReturnForm({\n // Default to \"return everything that's expected to remain\" — no wastage.\n returnedQty: String(expected),\n wastageReason: '',\n notes: '',\n });\n setReturnDialog({ open: true, pickup: p });\n }\n\n function closeReturn() {\n if (submitting) return;\n setReturnDialog({ open: false, pickup: null });\n }\n\n function openTopup(p) {\n setTopupForm({ additionalQty: '1', notes: '' });\n setTopupDialog({ open: true, pickup: p });\n }\n\n function closeTopup() {\n if (submitting) return;\n setTopupDialog({ open: false, pickup: null });\n }\n\n // Ceiling for a top-up is whatever the source (facility) batch still has —\n // the backend rejects more than this, so cap it here for a friendly UX.\n const topupSourceAvailable = topupDialog.pickup?.sourceBatchQtyRemaining ?? null;\n const topupAdditionalQty = Number(topupForm.additionalQty);\n const topupQtyError = !Number.isInteger(topupAdditionalQty) || topupAdditionalQty <= 0\n ? 'Enter a whole number greater than 0.'\n : (topupSourceAvailable != null && topupAdditionalQty > topupSourceAvailable)\n ? `Only ${topupSourceAvailable} available at the source facility.`\n : '';\n\n async function submitTopup() {\n if (topupQtyError || !topupDialog.pickup) return;\n setSubmitting(true);\n try {\n await recordPickupTopup(topupDialog.pickup.id, {\n id: uuidv4(),\n additionalQty: topupAdditionalQty,\n notes: topupForm.notes || null,\n });\n showToast({\n message: `Topped up ${topupAdditionalQty} unit${topupAdditionalQty === 1 ? '' : 's'}.`,\n type: 'success',\n });\n closeTopup();\n await load();\n } catch (err) {\n const message = err?.response?.data?.message ?? err?.message ?? 'Failed to top up';\n showToast({ message, type: 'error' });\n } finally {\n setSubmitting(false);\n }\n }\n\n const expectedRemaining = returnDialog.pickup?.expectedRemainingQty ?? 0;\n const returnedQty = Number(returnForm.returnedQty);\n const wastedQty = Number.isFinite(returnedQty) && returnedQty >= 0 && returnedQty <= expectedRemaining\n ? expectedRemaining - returnedQty\n : null;\n const returnedQtyError = !Number.isInteger(returnedQty) || returnedQty < 0\n ? 'Enter a whole number from 0 to the expected remaining.'\n : returnedQty > expectedRemaining\n ? `At most ${expectedRemaining} can be returned.`\n : '';\n // Reason is required whenever ANY wastage will be written — either the\n // sealed-units gap is > 0, or there are open vials to close (their\n // remaining volume becomes wastage).\n const reasonRequired = (wastedQty != null && wastedQty > 0)\n || ((returnDialog.pickup?.openVials ?? []).length > 0);\n const reasonError = reasonRequired && !returnForm.wastageReason\n ? 'A reason is required for the wastage being recorded.'\n : '';\n const returnFormValid = !returnedQtyError && !reasonError;\n\n async function submitReturn() {\n if (!returnFormValid || !returnDialog.pickup) return;\n setSubmitting(true);\n try {\n await recordPickupReturn(returnDialog.pickup.id, {\n returnedQty,\n wastageReason: reasonRequired ? returnForm.wastageReason : null,\n notes: returnForm.notes || null,\n });\n showToast({\n message: wastedQty > 0\n ? `Returned ${returnedQty}, wasted ${wastedQty}.`\n : `Returned ${returnedQty} unit${returnedQty === 1 ? '' : 's'}.`,\n type: 'success',\n });\n closeReturn();\n await load();\n } catch (err) {\n const message = err?.response?.data?.message ?? err?.message ?? 'Failed to record return';\n showToast({ message, type: 'error' });\n } finally {\n setSubmitting(false);\n }\n }\n\n return (\n <Box>\n <PmNav />\n <PmGuard perm={'view.manage.productManagement.pickup'}>\n <PmPageShell\n title=\"Stock Pickups\"\n subtitle=\"Stock you're carrying for field work. Record returns and any items lost or used.\"\n actions={\n <Stack direction=\"row\" spacing={1}>\n <Button variant=\"outlined\" startIcon={<RefreshRoundedIcon />} onClick={() => void load()}>Refresh</Button>\n {canCreate ? (\n <Button variant=\"contained\" startIcon={<AddRoundedIcon />}\n onClick={() => navigate('/ui/medplat/manage/pm/pickups/new')}>\n New Pickup\n </Button>\n ) : null}\n </Stack>\n }\n >\n {error ? <Alert severity=\"error\" sx={{ mb: 2 }}>{error}</Alert> : null}\n\n <PmTableCard\n eyebrow=\"Operations\"\n title=\"Pickups\"\n subtitle={loading ? 'Loading…' : `${filtered.length} ${filtered.length === 1 ? 'pickup' : 'pickups'}`}\n >\n <Stack direction={{ xs: 'column', md: 'row' }} spacing={1.5} sx={{ mb: 2 }}>\n <TextField\n size=\"small\" fullWidth\n placeholder=\"Search by product, facility, user, lot, notes…\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n InputProps={{\n startAdornment: <InputAdornment position=\"start\"><SearchRoundedIcon fontSize=\"small\" /></InputAdornment>,\n }}\n />\n </Stack>\n\n <PmTable dense>\n <TableHead>\n <TableRow>\n <TableCell>Ref</TableCell>\n <TableCell>Session</TableCell>\n <TableCell>Product</TableCell>\n <TableCell>Facility</TableCell>\n <TableCell>User</TableCell>\n <TableCell align=\"right\">Qty</TableCell>\n <TableCell>Picked</TableCell>\n <TableCell>Status</TableCell>\n <TableCell align=\"right\">Action</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {loading ? (\n Array.from({ length: 4 }).map((_, i) => (\n <TableRow key={i}>\n {Array.from({ length: 9 }).map((__, j) => (\n <TableCell key={j}><Skeleton height={22} /></TableCell>\n ))}\n </TableRow>\n ))\n ) : filtered.length === 0 ? (\n <PmEmptyRow\n colSpan={9}\n icon={MoveDownRoundedIcon}\n title={search.trim() !== '' ? 'No pickups match your search' : 'No pickups yet'}\n hint=\"Check out stock from a facility to use in the field.\"\n action={canCreate ? (\n <Button variant=\"contained\" size=\"small\" startIcon={<AddRoundedIcon />}\n onClick={() => navigate('/ui/medplat/manage/pm/pickups/new')}>\n Record first pickup\n </Button>\n ) : null}\n />\n ) : filtered.map((r) => (\n <TableRow key={r.id} hover>\n <TableCell><PmRef id={r.serialId} /></TableCell>\n <TableCell sx={{ maxWidth: 220 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 700, wordBreak: 'break-word' }}>\n {r.sessionName ?? '—'}\n </Typography>\n {r.sessionSite ? (\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block', wordBreak: 'break-word' }}>\n {r.sessionSite}\n </Typography>\n ) : null}\n {r.sessionStartTime ? (\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block', fontVariantNumeric: 'tabular-nums' }}>\n {formatDateTime(r.sessionStartTime)}\n {r.sessionExpectedEndTime ? ` → ${formatDateTime(r.sessionExpectedEndTime)}` : ''}\n </Typography>\n ) : null}\n </TableCell>\n <TableCell>\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }}>{r.productName ?? '—'}</Typography>\n {r.lotNumber ? (\n <Typography variant=\"caption\" sx={{ fontFamily: 'monospace', color: 'text.secondary' }}>\n {r.lotNumber}\n </Typography>\n ) : null}\n </TableCell>\n <TableCell>{r.facilityName ?? '—'}</TableCell>\n <TableCell>{r.userName ?? '—'}</TableCell>\n <TableCell align=\"right\">\n <Typography sx={{ fontWeight: 700, fontVariantNumeric: 'tabular-nums' }}>{r.pickedQty}</Typography>\n {r.status === 'OPEN' && r.expectedRemainingQty != null ? (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {r.expectedRemainingQty} left on user\n </Typography>\n ) : r.status === 'RETURNED' ? (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {r.returnedQty} returned{r.wastedQty > 0 ? ` · ${r.wastedQty} wasted` : ''}\n </Typography>\n ) : null}\n </TableCell>\n <TableCell>\n <Typography variant=\"body2\">{formatDate(r.pickedOn)}</Typography>\n </TableCell>\n <TableCell>\n {r.status === 'OPEN' && r.sessionExpectedEndTime\n && new Date(r.sessionExpectedEndTime).getTime() < Date.now() ? (\n <Chip size=\"small\" label=\"Overdue\" color=\"error\" />\n ) : (\n <Chip size=\"small\" label={labelOf(PICKUP_STATUSES, r.status)} color={statusChipColor(r.status)} />\n )}\n </TableCell>\n <TableCell align=\"right\">\n {r.status === 'OPEN' && canCreate ? (\n <Stack direction=\"row\" spacing={1} justifyContent=\"flex-end\">\n <Tooltip title={(r.sourceBatchQtyRemaining ?? 0) <= 0\n ? 'No stock left in the source lot to top up from'\n : ''}>\n <span>\n <Button size=\"small\" variant=\"outlined\" startIcon={<AddRoundedIcon />}\n disabled={(r.sourceBatchQtyRemaining ?? 0) <= 0}\n onClick={() => openTopup(r)}>\n Top Up\n </Button>\n </span>\n </Tooltip>\n <Button size=\"small\" variant=\"outlined\" startIcon={<AssignmentReturnRoundedIcon />}\n onClick={() => openReturn(r)}>\n End Session\n </Button>\n </Stack>\n ) : (\n <Typography variant=\"caption\" color=\"text.disabled\">—</Typography>\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </PmTable>\n </PmTableCard>\n </PmPageShell>\n </PmGuard>\n\n {/* ---------- End Outreach Session dialog ---------- */}\n <Dialog open={returnDialog.open} onClose={closeReturn} maxWidth=\"sm\" fullWidth>\n <DialogTitle>End outreach session #{returnDialog.pickup?.serialId}</DialogTitle>\n <DialogContent>\n {returnDialog.pickup ? (\n <Stack spacing={2} sx={{ mt: 1 }}>\n <Box sx={(t) => ({\n p: 1.5, borderRadius: 1.5,\n bgcolor: alpha(t.palette.primary.main, 0.04),\n border: `1px solid ${alpha(t.palette.primary.main, 0.12)}`,\n })}>\n <Typography variant=\"body2\"><strong>{returnDialog.pickup.productName}</strong></Typography>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block' }}>\n Picked {returnDialog.pickup.pickedQty} on {formatDateTime(returnDialog.pickup.pickedOn)} from {returnDialog.pickup.facilityName}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block', mt: 0.5 }}>\n Sealed units expected on user: <strong>{expectedRemaining}</strong>\n {' '}({(returnDialog.pickup.pickedQty ?? 0) - expectedRemaining - ((returnDialog.pickup.openVials ?? []).length)} already administered / wasted during the day)\n </Typography>\n </Box>\n\n <TextField\n required size=\"small\" type=\"number\"\n label=\"Sealed Units Returned\"\n inputProps={{ min: 0, max: expectedRemaining }}\n value={returnForm.returnedQty}\n onChange={(e) => setReturnForm((f) => ({ ...f, returnedQty: e.target.value }))}\n error={!!returnedQtyError}\n helperText={returnedQtyError || `Out of ${expectedRemaining} sealed units expected to remain`}\n />\n\n {wastedQty != null && wastedQty > 0 ? (\n <Alert severity=\"warning\" variant=\"outlined\">\n <strong>{wastedQty}</strong> sealed {wastedQty === 1 ? 'unit' : 'units'} unaccounted for — will be marked as wastage.\n </Alert>\n ) : null}\n\n {/* Open-vial wastage preview. Any vial opened during outreach\n does not return to the facility — it's closed with wastage\n as part of this end-session action. Volume shown so the\n operator knows what's being written off. */}\n {(returnDialog.pickup.openVials ?? []).length > 0 ? (\n <Alert severity=\"info\" variant=\"outlined\">\n <Typography variant=\"body2\" sx={{ fontWeight: 700, mb: 0.5 }}>\n {returnDialog.pickup.openVials.length} open vial{returnDialog.pickup.openVials.length === 1 ? '' : 's'} on you will be closed with wastage\n </Typography>\n <Stack spacing={0.25} sx={{ mt: 0.5 }}>\n {returnDialog.pickup.openVials.map((v) => (\n <Typography key={v.id} variant=\"caption\" color=\"text.secondary\">\n Lot {v.lotNumber || '—'} · {Number(v.volumeRemainingMl ?? 0).toFixed(2)} ml remaining\n </Typography>\n ))}\n </Stack>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block', mt: 0.75 }}>\n These volumes will be recorded as wastage using the reason picked below.\n </Typography>\n </Alert>\n ) : null}\n\n <PmSelect\n label={`Wastage Reason${reasonRequired ? ' *' : ''}`}\n disabled={!reasonRequired}\n error={!!reasonError}\n value={returnForm.wastageReason}\n onChange={(v) => setReturnForm((f) => ({ ...f, wastageReason: v }))}\n options={WASTAGE_REASONS}\n helperText={reasonError\n || (reasonRequired\n ? 'Required — same reason covers both unaccounted sealed units and any open-vial remaining volume.'\n : 'Not needed — nothing being wasted.')}\n />\n\n <TextField\n size=\"small\" multiline minRows={2}\n label=\"Notes (optional)\"\n value={returnForm.notes}\n onChange={(e) => setReturnForm((f) => ({ ...f, notes: e.target.value }))}\n />\n </Stack>\n ) : null}\n </DialogContent>\n <DialogActions>\n <Button onClick={closeReturn} disabled={submitting}>Cancel</Button>\n <Button variant=\"contained\" onClick={() => void submitReturn()}\n disabled={!returnFormValid || submitting}>\n {submitting ? 'Submitting…' : 'End Session'}\n </Button>\n </DialogActions>\n </Dialog>\n\n {/* ---------- Top Up dialog ---------- */}\n <Dialog open={topupDialog.open} onClose={closeTopup} maxWidth=\"xs\" fullWidth>\n <DialogTitle>Top up session #{topupDialog.pickup?.serialId}</DialogTitle>\n <DialogContent>\n {topupDialog.pickup ? (\n <Stack spacing={2} sx={{ mt: 1 }}>\n <Box sx={(t) => ({\n p: 1.5, borderRadius: 1.5,\n bgcolor: alpha(t.palette.primary.main, 0.04),\n border: `1px solid ${alpha(t.palette.primary.main, 0.12)}`,\n })}>\n <Typography variant=\"body2\"><strong>{topupDialog.pickup.productName}</strong></Typography>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block' }}>\n Source: {topupDialog.pickup.facilityName} · Lot {topupDialog.pickup.lotNumber || '—'}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block' }}>\n Currently picked: {topupDialog.pickup.pickedQty} · remaining sealed on user: {topupDialog.pickup.expectedRemainingQty ?? 0}\n </Typography>\n {topupSourceAvailable != null ? (\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block' }}>\n Available at source: <strong>{topupSourceAvailable}</strong>\n </Typography>\n ) : null}\n </Box>\n\n <Alert severity=\"info\" variant=\"outlined\">\n Top-ups come from the same source batch as the original pickup so lot / expiry stays consistent. To pick from a different batch, end this session first.\n </Alert>\n\n <TextField\n required size=\"small\" type=\"number\"\n label=\"Additional Quantity\"\n inputProps={{ min: 1, max: topupSourceAvailable ?? undefined }}\n value={topupForm.additionalQty}\n onChange={(e) => setTopupForm((f) => ({ ...f, additionalQty: e.target.value }))}\n error={!!topupQtyError}\n helperText={topupQtyError\n || (topupSourceAvailable != null\n ? `Sealed units to add. Up to ${topupSourceAvailable} available at the source.`\n : 'Sealed units to add to this session.')}\n />\n\n <TextField\n size=\"small\" multiline minRows={2}\n label=\"Notes (optional)\"\n value={topupForm.notes}\n onChange={(e) => setTopupForm((f) => ({ ...f, notes: e.target.value }))}\n />\n </Stack>\n ) : null}\n </DialogContent>\n <DialogActions>\n <Button onClick={closeTopup} disabled={submitting}>Cancel</Button>\n <Button variant=\"contained\" onClick={() => void submitTopup()}\n disabled={!!topupQtyError || submitting}>\n {submitting ? 'Submitting…' : 'Top Up'}\n </Button>\n </DialogActions>\n </Dialog>\n </Box>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"PickupsPage-C-21LwTf.js","names":[],"sources":["../src/views/PickupsPage.jsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n Alert,\n Box,\n Button,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n InputAdornment,\n Skeleton,\n Stack,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n TextField,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport { alpha } from '@mui/material/styles';\nimport AddRoundedIcon from '@mui/icons-material/AddRounded';\nimport RefreshRoundedIcon from '@mui/icons-material/RefreshRounded';\nimport SearchRoundedIcon from '@mui/icons-material/SearchRounded';\nimport MoveDownRoundedIcon from '@mui/icons-material/MoveDownRounded';\nimport AssignmentReturnRoundedIcon from '@mui/icons-material/AssignmentReturnRounded';\nimport { showToast } from '@/common/toaster/toaster';\nimport PmPageShell from '@pm/components/PmPageShell';\nimport PmNav from '@pm/components/PmNav';\nimport PmGuard from '@pm/components/PmGuard';\nimport { usePermissionedEffect, usePmPermissions } from '@pm/utils/permissions';\nimport {\n PmEmptyRow,\n PmRef,\n PmSelect,\n PmTable,\n PmTableCard,\n} from '@pm/components/PmTable';\nimport { v4 as uuidv4 } from 'uuid';\nimport {\n listPickups,\n recordPickupReturn,\n recordPickupTopup,\n} from '@pm/services/pmApi';\nimport { formatDate, formatDateTime } from '@pm/utils/format';\nimport { PICKUP_STATUSES, WASTAGE_REASONS, labelOf } from '@pm/utils/constants';\n\nfunction statusChipColor(status) {\n switch (status) {\n case 'OPEN': return 'info';\n case 'RETURNED': return 'success';\n case 'CANCELLED': return 'default';\n default: return 'default';\n }\n}\n\nexport default function PickupsPage() {\n const navigate = useNavigate();\n const perms = usePmPermissions();\n const canCreate = perms.has('update.manage.productManagement.pickup');\n const [rows, setRows] = useState([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState('');\n const [search, setSearch] = useState('');\n const [returnDialog, setReturnDialog] = useState({ open: false, pickup: null });\n const [returnForm, setReturnForm] = useState({ returnedQty: '', wastageReason: '', notes: '' });\n const [topupDialog, setTopupDialog] = useState({ open: false, pickup: null });\n const [topupForm, setTopupForm] = useState({ additionalQty: '', notes: '' });\n const [submitting, setSubmitting] = useState(false);\n\n async function load() {\n setLoading(true);\n setError('');\n try {\n setRows(await listPickups());\n } catch (err) {\n const message = err?.response?.data?.message ?? err?.message ?? 'Failed to load pickups';\n setError(message);\n showToast({ message, type: 'error' });\n } finally {\n setLoading(false);\n }\n }\n\n usePermissionedEffect('view.manage.productManagement.pickup', () => { void load(); }, []);\n\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n if (!q) return rows;\n return rows.filter((r) => {\n const hay = `${r.sessionName ?? ''} ${r.sessionSite ?? ''} ${r.productName ?? ''} ${r.facilityName ?? ''} ${r.userName ?? ''} ${r.lotNumber ?? ''} ${r.notes ?? ''}`.toLowerCase();\n return hay.includes(q);\n });\n }, [rows, search]);\n\n function openReturn(p) {\n const expected = p.expectedRemainingQty ?? 0;\n setReturnForm({\n // Default to \"return everything that's expected to remain\" — no wastage.\n returnedQty: String(expected),\n wastageReason: '',\n notes: '',\n });\n setReturnDialog({ open: true, pickup: p });\n }\n\n function closeReturn() {\n if (submitting) return;\n setReturnDialog({ open: false, pickup: null });\n }\n\n function openTopup(p) {\n setTopupForm({ additionalQty: '1', notes: '' });\n setTopupDialog({ open: true, pickup: p });\n }\n\n function closeTopup() {\n if (submitting) return;\n setTopupDialog({ open: false, pickup: null });\n }\n\n // Ceiling for a top-up is whatever the source (facility) batch still has —\n // the backend rejects more than this, so cap it here for a friendly UX.\n const topupSourceAvailable = topupDialog.pickup?.sourceBatchQtyRemaining ?? null;\n const topupAdditionalQty = Number(topupForm.additionalQty);\n const topupQtyError = !Number.isInteger(topupAdditionalQty) || topupAdditionalQty <= 0\n ? 'Enter a whole number greater than 0.'\n : (topupSourceAvailable != null && topupAdditionalQty > topupSourceAvailable)\n ? `Only ${topupSourceAvailable} available at the source facility.`\n : '';\n\n async function submitTopup() {\n if (topupQtyError || !topupDialog.pickup) return;\n setSubmitting(true);\n try {\n await recordPickupTopup(topupDialog.pickup.id, {\n id: uuidv4(),\n additionalQty: topupAdditionalQty,\n notes: topupForm.notes || null,\n });\n showToast({\n message: `Topped up ${topupAdditionalQty} unit${topupAdditionalQty === 1 ? '' : 's'}.`,\n type: 'success',\n });\n closeTopup();\n await load();\n } catch (err) {\n const message = err?.response?.data?.message ?? err?.message ?? 'Failed to top up';\n showToast({ message, type: 'error' });\n } finally {\n setSubmitting(false);\n }\n }\n\n const expectedRemaining = returnDialog.pickup?.expectedRemainingQty ?? 0;\n const returnedQty = Number(returnForm.returnedQty);\n const wastedQty = Number.isFinite(returnedQty) && returnedQty >= 0 && returnedQty <= expectedRemaining\n ? expectedRemaining - returnedQty\n : null;\n const returnedQtyError = !Number.isInteger(returnedQty) || returnedQty < 0\n ? 'Enter a whole number from 0 to the expected remaining.'\n : returnedQty > expectedRemaining\n ? `At most ${expectedRemaining} can be returned.`\n : '';\n // Reason is required whenever ANY wastage will be written — either the\n // sealed-units gap is > 0, or there are open vials to close (their\n // remaining volume becomes wastage).\n const reasonRequired = (wastedQty != null && wastedQty > 0)\n || ((returnDialog.pickup?.openVials ?? []).length > 0);\n const reasonError = reasonRequired && !returnForm.wastageReason\n ? 'A reason is required for the wastage being recorded.'\n : '';\n const returnFormValid = !returnedQtyError && !reasonError;\n\n async function submitReturn() {\n if (!returnFormValid || !returnDialog.pickup) return;\n setSubmitting(true);\n try {\n await recordPickupReturn(returnDialog.pickup.id, {\n returnedQty,\n wastageReason: reasonRequired ? returnForm.wastageReason : null,\n notes: returnForm.notes || null,\n });\n showToast({\n message: wastedQty > 0\n ? `Returned ${returnedQty}, wasted ${wastedQty}.`\n : `Returned ${returnedQty} unit${returnedQty === 1 ? '' : 's'}.`,\n type: 'success',\n });\n closeReturn();\n await load();\n } catch (err) {\n const message = err?.response?.data?.message ?? err?.message ?? 'Failed to record return';\n showToast({ message, type: 'error' });\n } finally {\n setSubmitting(false);\n }\n }\n\n return (\n <Box>\n <PmNav />\n <PmGuard perm={'view.manage.productManagement.pickup'}>\n <PmPageShell\n title=\"Stock Pickups\"\n subtitle=\"Stock you're carrying for field work. Record returns and any items lost or used.\"\n actions={\n <Stack direction=\"row\" spacing={1}>\n <Button variant=\"outlined\" startIcon={<RefreshRoundedIcon />} onClick={() => void load()}>Refresh</Button>\n {canCreate ? (\n <Button variant=\"contained\" startIcon={<AddRoundedIcon />}\n onClick={() => navigate('/ui/medplat/manage/pm/pickups/new')}>\n New Pickup\n </Button>\n ) : null}\n </Stack>\n }\n >\n {error ? <Alert severity=\"error\" sx={{ mb: 2 }}>{error}</Alert> : null}\n\n <PmTableCard\n eyebrow=\"Operations\"\n title=\"Pickups\"\n subtitle={loading ? 'Loading…' : `${filtered.length} ${filtered.length === 1 ? 'pickup' : 'pickups'}`}\n >\n <Stack direction={{ xs: 'column', md: 'row' }} spacing={1.5} sx={{ mb: 2 }}>\n <TextField\n size=\"small\" fullWidth\n placeholder=\"Search by product, facility, user, lot, notes…\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n InputProps={{\n startAdornment: <InputAdornment position=\"start\"><SearchRoundedIcon fontSize=\"small\" /></InputAdornment>,\n }}\n />\n </Stack>\n\n <PmTable dense>\n <TableHead>\n <TableRow>\n <TableCell>Ref</TableCell>\n <TableCell>Session</TableCell>\n <TableCell>Product</TableCell>\n <TableCell>Facility</TableCell>\n <TableCell>User</TableCell>\n <TableCell align=\"right\">Qty</TableCell>\n <TableCell>Picked</TableCell>\n <TableCell>Status</TableCell>\n <TableCell align=\"right\">Action</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {loading ? (\n Array.from({ length: 4 }).map((_, i) => (\n <TableRow key={i}>\n {Array.from({ length: 9 }).map((__, j) => (\n <TableCell key={j}><Skeleton height={22} /></TableCell>\n ))}\n </TableRow>\n ))\n ) : filtered.length === 0 ? (\n <PmEmptyRow\n colSpan={9}\n icon={MoveDownRoundedIcon}\n title={search.trim() !== '' ? 'No pickups match your search' : 'No pickups yet'}\n hint=\"Check out stock from a facility to use in the field.\"\n action={canCreate ? (\n <Button variant=\"contained\" size=\"small\" startIcon={<AddRoundedIcon />}\n onClick={() => navigate('/ui/medplat/manage/pm/pickups/new')}>\n Record first pickup\n </Button>\n ) : null}\n />\n ) : filtered.map((r) => (\n <TableRow key={r.id} hover>\n <TableCell><PmRef id={r.serialId} /></TableCell>\n <TableCell sx={{ maxWidth: 220 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 700, wordBreak: 'break-word' }}>\n {r.sessionName ?? '—'}\n </Typography>\n {r.sessionSite ? (\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block', wordBreak: 'break-word' }}>\n {r.sessionSite}\n </Typography>\n ) : null}\n {r.sessionStartTime ? (\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block', fontVariantNumeric: 'tabular-nums' }}>\n {formatDateTime(r.sessionStartTime)}\n {r.sessionExpectedEndTime ? ` → ${formatDateTime(r.sessionExpectedEndTime)}` : ''}\n </Typography>\n ) : null}\n </TableCell>\n <TableCell>\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }}>{r.productName ?? '—'}</Typography>\n {r.lotNumber ? (\n <Typography variant=\"caption\" sx={{ fontFamily: 'monospace', color: 'text.secondary' }}>\n {r.lotNumber}\n </Typography>\n ) : null}\n </TableCell>\n <TableCell>{r.facilityName ?? '—'}</TableCell>\n <TableCell>{r.userName ?? '—'}</TableCell>\n <TableCell align=\"right\">\n <Typography sx={{ fontWeight: 700, fontVariantNumeric: 'tabular-nums' }}>{r.pickedQty}</Typography>\n {r.status === 'OPEN' && r.expectedRemainingQty != null ? (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {r.expectedRemainingQty} left on user\n </Typography>\n ) : r.status === 'RETURNED' ? (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {r.returnedQty} returned{r.wastedQty > 0 ? ` · ${r.wastedQty} wasted` : ''}\n </Typography>\n ) : null}\n </TableCell>\n <TableCell>\n <Typography variant=\"body2\">{formatDate(r.pickedOn)}</Typography>\n </TableCell>\n <TableCell>\n {r.status === 'OPEN' && r.sessionExpectedEndTime\n && new Date(r.sessionExpectedEndTime).getTime() < Date.now() ? (\n <Chip size=\"small\" label=\"Overdue\" color=\"error\" />\n ) : (\n <Chip size=\"small\" label={labelOf(PICKUP_STATUSES, r.status)} color={statusChipColor(r.status)} />\n )}\n </TableCell>\n <TableCell align=\"right\">\n {r.status === 'OPEN' && canCreate ? (\n <Stack direction=\"row\" spacing={1} justifyContent=\"flex-end\">\n <Tooltip title={(r.sourceBatchQtyRemaining ?? 0) <= 0\n ? 'No stock left in the source lot to top up from'\n : ''}>\n <span>\n <Button size=\"small\" variant=\"outlined\" startIcon={<AddRoundedIcon />}\n disabled={(r.sourceBatchQtyRemaining ?? 0) <= 0}\n onClick={() => openTopup(r)}>\n Top Up\n </Button>\n </span>\n </Tooltip>\n <Button size=\"small\" variant=\"outlined\" startIcon={<AssignmentReturnRoundedIcon />}\n onClick={() => openReturn(r)}>\n End Session\n </Button>\n </Stack>\n ) : (\n <Typography variant=\"caption\" color=\"text.disabled\">—</Typography>\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </PmTable>\n </PmTableCard>\n </PmPageShell>\n </PmGuard>\n\n {/* ---------- End Outreach Session dialog ---------- */}\n <Dialog open={returnDialog.open} onClose={closeReturn} maxWidth=\"sm\" fullWidth>\n <DialogTitle>End outreach session #{returnDialog.pickup?.serialId}</DialogTitle>\n <DialogContent>\n {returnDialog.pickup ? (\n <Stack spacing={2} sx={{ mt: 1 }}>\n <Box sx={(t) => ({\n p: 1.5, borderRadius: 1.5,\n bgcolor: alpha(t.palette.primary.main, 0.04),\n border: `1px solid ${alpha(t.palette.primary.main, 0.12)}`,\n })}>\n <Typography variant=\"body2\"><strong>{returnDialog.pickup.productName}</strong></Typography>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block' }}>\n Picked {returnDialog.pickup.pickedQty} on {formatDateTime(returnDialog.pickup.pickedOn)} from {returnDialog.pickup.facilityName}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block', mt: 0.5 }}>\n Sealed units expected on user: <strong>{expectedRemaining}</strong>\n {' '}({(returnDialog.pickup.pickedQty ?? 0) - expectedRemaining - ((returnDialog.pickup.openVials ?? []).length)} already administered / wasted during the day)\n </Typography>\n </Box>\n\n <TextField\n required size=\"small\" type=\"number\"\n label=\"Sealed Units Returned\"\n inputProps={{ min: 0, max: expectedRemaining }}\n value={returnForm.returnedQty}\n onChange={(e) => setReturnForm((f) => ({ ...f, returnedQty: e.target.value }))}\n error={!!returnedQtyError}\n helperText={returnedQtyError || `Out of ${expectedRemaining} sealed units expected to remain`}\n />\n\n {wastedQty != null && wastedQty > 0 ? (\n <Alert severity=\"warning\" variant=\"outlined\">\n <strong>{wastedQty}</strong> sealed {wastedQty === 1 ? 'unit' : 'units'} unaccounted for — will be marked as wastage.\n </Alert>\n ) : null}\n\n {/* Open-vial wastage preview. Any vial opened during outreach\n does not return to the facility — it's closed with wastage\n as part of this end-session action. Volume shown so the\n operator knows what's being written off. */}\n {(returnDialog.pickup.openVials ?? []).length > 0 ? (\n <Alert severity=\"info\" variant=\"outlined\">\n <Typography variant=\"body2\" sx={{ fontWeight: 700, mb: 0.5 }}>\n {returnDialog.pickup.openVials.length} open vial{returnDialog.pickup.openVials.length === 1 ? '' : 's'} on you will be closed with wastage\n </Typography>\n <Stack spacing={0.25} sx={{ mt: 0.5 }}>\n {returnDialog.pickup.openVials.map((v) => (\n <Typography key={v.id} variant=\"caption\" color=\"text.secondary\">\n Lot {v.lotNumber || '—'} · {Number(v.volumeRemainingMl ?? 0).toFixed(2)} ml remaining\n </Typography>\n ))}\n </Stack>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block', mt: 0.75 }}>\n These volumes will be recorded as wastage using the reason picked below.\n </Typography>\n </Alert>\n ) : null}\n\n <PmSelect\n label={`Wastage Reason${reasonRequired ? ' *' : ''}`}\n disabled={!reasonRequired}\n error={!!reasonError}\n value={returnForm.wastageReason}\n onChange={(v) => setReturnForm((f) => ({ ...f, wastageReason: v }))}\n options={WASTAGE_REASONS}\n helperText={reasonError\n || (reasonRequired\n ? 'Required — same reason covers both unaccounted sealed units and any open-vial remaining volume.'\n : 'Not needed — nothing being wasted.')}\n />\n\n <TextField\n size=\"small\" multiline minRows={2}\n label=\"Notes (optional)\"\n value={returnForm.notes}\n onChange={(e) => setReturnForm((f) => ({ ...f, notes: e.target.value }))}\n />\n </Stack>\n ) : null}\n </DialogContent>\n <DialogActions>\n <Button onClick={closeReturn} disabled={submitting}>Cancel</Button>\n <Button variant=\"contained\" onClick={() => void submitReturn()}\n disabled={!returnFormValid || submitting}>\n {submitting ? 'Submitting…' : 'End Session'}\n </Button>\n </DialogActions>\n </Dialog>\n\n {/* ---------- Top Up dialog ---------- */}\n <Dialog open={topupDialog.open} onClose={closeTopup} maxWidth=\"xs\" fullWidth>\n <DialogTitle>Top up session #{topupDialog.pickup?.serialId}</DialogTitle>\n <DialogContent>\n {topupDialog.pickup ? (\n <Stack spacing={2} sx={{ mt: 1 }}>\n <Box sx={(t) => ({\n p: 1.5, borderRadius: 1.5,\n bgcolor: alpha(t.palette.primary.main, 0.04),\n border: `1px solid ${alpha(t.palette.primary.main, 0.12)}`,\n })}>\n <Typography variant=\"body2\"><strong>{topupDialog.pickup.productName}</strong></Typography>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block' }}>\n Source: {topupDialog.pickup.facilityName} · Lot {topupDialog.pickup.lotNumber || '—'}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block' }}>\n Currently picked: {topupDialog.pickup.pickedQty} · remaining sealed on user: {topupDialog.pickup.expectedRemainingQty ?? 0}\n </Typography>\n {topupSourceAvailable != null ? (\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block' }}>\n Available at source: <strong>{topupSourceAvailable}</strong>\n </Typography>\n ) : null}\n </Box>\n\n <Alert severity=\"info\" variant=\"outlined\">\n Top-ups come from the same source batch as the original pickup so lot / expiry stays consistent. To pick from a different batch, end this session first.\n </Alert>\n\n <TextField\n required size=\"small\" type=\"number\"\n label=\"Additional Quantity\"\n inputProps={{ min: 1, max: topupSourceAvailable ?? undefined }}\n value={topupForm.additionalQty}\n onChange={(e) => setTopupForm((f) => ({ ...f, additionalQty: e.target.value }))}\n error={!!topupQtyError}\n helperText={topupQtyError\n || (topupSourceAvailable != null\n ? `Sealed units to add. Up to ${topupSourceAvailable} available at the source.`\n : 'Sealed units to add to this session.')}\n />\n\n <TextField\n size=\"small\" multiline minRows={2}\n label=\"Notes (optional)\"\n value={topupForm.notes}\n onChange={(e) => setTopupForm((f) => ({ ...f, notes: e.target.value }))}\n />\n </Stack>\n ) : null}\n </DialogContent>\n <DialogActions>\n <Button onClick={closeTopup} disabled={submitting}>Cancel</Button>\n <Button variant=\"contained\" onClick={() => void submitTopup()}\n disabled={!!topupQtyError || submitting}>\n {submitting ? 'Submitting…' : 'Top Up'}\n </Button>\n </DialogActions>\n </Dialog>\n </Box>\n );\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { r as e, t } from "./settingsStore-KW217unV.js";
1
+ import { r as e, t } from "./settingsStore-GLCtI-tv.js";
2
2
  import { useEffect as n, useMemo as r } from "react";
3
3
  import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
4
4
  import s from "prop-types";
@@ -509,7 +509,7 @@ function Z() {
509
509
  border: `1px solid ${y(w.accent, .12)}`
510
510
  },
511
511
  children: /* @__PURE__ */ a(g, {
512
- value: E === -1 ? !1 : E,
512
+ value: E !== -1 && E,
513
513
  onChange: (e, n) => t(w.items[n].path),
514
514
  variant: "scrollable",
515
515
  scrollButtons: "auto",
@@ -589,4 +589,4 @@ function Q({ perm: e, anyOf: t, children: n, title: r = "You don’t have access
589
589
  //#endregion
590
590
  export { q as a, X as i, Z as n, W as o, Y as r, Q as t };
591
591
 
592
- //# sourceMappingURL=PmGuard-C90yhpsN.js.map
592
+ //# sourceMappingURL=PmGuard-DrbbysnW.js.map