{"version":3,"sources":["utils/utils.js","graphql/inbound/custom-mutations.js","graphql/reloadyard/custom-mutations.js","components/common/BoundedSelectInput.js","components/common/BoundedTextInput.js","components/common/AddressInput.js","../node_modules/@aws-amplify/ui-components/dist/esm-es5 lazy /^/.//.*/.entry/.js$/ include: //.entry/.js$/ exclude: //.system/.entry/.js$/ groupOptions: {} namespace object","serviceWorker.js","dataProvider/dataProvider.js","components/common/ForceTitle.js","adminApp/resources/registrations/SetupList.js","components/Logout.js","components/Pagination.js","components/common/BackButton.js","adminApp/resources/announcements/EmailAnnouncement.js","graphql/report-queries.js","components/common/CrewCard.js","components/common/InventoryPhotos.js","crewApp/pages/inventorySearch/timeline/InventoryTimeline.js","components/common/AccountNameRenderer.js","components/common/AccountDropDown.js","managerApp/reports/InventoryActivityReport.js","adminApp/layout/adminRoutes.js","ThemeStateProvider.js","adminApp/layout/AdminMenu.js","components/common/AppBarHeader.js","components/common/HelpWPSearchButton.js","adminApp/layout/AdminLayout.js","graphql/list-id-queries.js","graphql/admin-queries.js","adminApp/layout/AdminUtils.js","adminApp/layout/AdminDashboard.js","managerApp/reports/Title.js","managerApp/reports/InboundCarsByMonth.js","adminApp/resources/reloadYards/ReloadYardPeak.js","components/common/SearchField.js","dataProvider/useSearchableList.js","components/common/ra-customizable-datagrid/SelectionDialog.js","components/common/ra-customizable-datagrid/LocalStorage.js","components/common/ra-customizable-datagrid/CustomizableDatagrid.js","components/common/ra-customizable-datagrid/index.js","adminApp/resources/reloadYards/ReloadYardList.js","components/common/NotesTab.js","managerApp/resources/reloadYard/ContactInfo.js","managerApp/resources/reloadYard/AccessInput.js","managerApp/resources/reloadYard/Capabilities.js","components/common/ToolTipIcon.js","managerApp/resources/reloadYard/Commodities.js","components/common/FeatureBadges.js","managerApp/resources/reloadYard/SettingsTab.js","managerApp/resources/reloadYard/ReloadYardShow.js","components/common/HelpViewer/MarkdownListItem.js","components/common/HelpViewer/MarkdownLink.js","components/common/HelpViewer/MarkdownList.js","components/common/YTVideoModal.js","components/common/HelpViewer/HelpViewer.js","components/common/HelpButton.js","adminApp/resources/reloadYards/Subscription.js","managerApp/resources/reloadYard/ReloadYardHelpComponents.js","managerApp/resources/reloadYard/ReloadYardHelp.js","managerApp/resources/reloadYard/layout/LayoutTab.js","managerApp/resources/reloadYard/ReloadYardEdit.js","adminApp/resources/registrations/SetupShow.js","utils/useForm.js","adminApp/resources/registrations/newYardData/context.js","adminApp/resources/registrations/newYardData/YardInfo.js","adminApp/resources/registrations/newYardData/reducer.js","adminApp/resources/registrations/newYardData/AccessAndCapacity.js","adminApp/resources/registrations/newYardData/Note.js","adminApp/resources/registrations/newYardData/Subscription.js","adminApp/resources/registrations/SetupEdit.js","adminApp/resources/registrations/emailApprovedHTML.js","adminApp/resources/registrations/emailRejectedHTML.js","adminApp/resources/logs/TenantField.js","adminApp/resources/logs/LogList.js","adminApp/resources/logs/LogShow.js","adminApp/resources/logs/LogEdit.js","components/common/Empty.js","managerApp/resources/users/UserStatusIcon.js","managerApp/resources/users/UserList.js","managerApp/resources/users/UserHelp.js","managerApp/resources/users/DeepDeleteButton.js","managerApp/resources/users/emailAccountDeletionHTML.js","managerApp/resources/users/userUtils.js","managerApp/resources/users/UserAside.js","managerApp/resources/users/UserEdit.js","managerApp/resources/users/UserShow.js","adminApp/resources/announcements/UserHelp.js","adminApp/resources/announcements/AnnouncementForm.js","adminApp/resources/announcements/AnnouncementCreate.js","adminApp/resources/announcements/AnnouncementList.js","adminApp/resources/announcements/AnnouncementEdit.js","adminApp/resources/announcements/AnnouncementShow.js","adminApp/resources/commoditys/CommodityList.js","adminApp/resources/commoditys/CommodityForm.js","adminApp/resources/commoditys/DialogSaveButton.js","adminApp/resources/commoditys/DeepDeleteButton.js","adminApp/resources/commoditys/CommodityEdit.js","adminApp/resources/commoditys/CommodityCreate.js","adminApp/resources/helpPages/HelpList.js","adminApp/resources/helpPages/HelpForm.js","adminApp/resources/helpPages/HelpCreate.js","adminApp/resources/helpPages/DeepDeleteButton.js","adminApp/resources/helpPages/HelpEdit.js","adminApp/AdminApp.js","crewApp/pages/inventorySearch/reducer.js","crewApp/pages/inventorySearch/context.js","reducer.js","components/ErrorCard.js","crewApp/pages/myTasks/MyTasks.js","graphql/audit/custom-queries.js","crewApp/pages/audit/AuditSummary.js","crewApp/pages/audit/YardLocations.js","crewApp/pages/audit/OperatorsList.js","components/common/LocationCapacity.js","crewApp/pages/audit/AuditItem.js","crewApp/pages/audit/InventoryList.js","crewApp/pages/audit/LocationsMap.js","crewApp/pages/audit/ViewAudit.js","crewApp/pages/audit/AuditCard.js","crewApp/pages/audit/AuditList.js","crewApp/pages/audit/Audit.js","crewApp/pages/inboundShipments/reducer.js","crewApp/pages/inboundShipments/context.js","graphql/outbound/custom-mutations.js","components/common/ProductLinkIcon.js","managerApp/resources/outboundShipments/POS/OutboundPOSBody.js","managerApp/resources/outboundShipments/POS/LumberPOSBody.js","managerApp/resources/outboundShipments/POS/POSBody.js","managerApp/resources/outboundShipments/OutboundUtils.js","managerApp/resources/outboundShipments/lineItem/PickListItemUtils.js","crewApp/pages/inboundShipments/InboundInventoryItems.js","crewApp/pages/inboundShipments/StructuredInboundAisle.js","components/common/QrBarcodeScanner/QrBarcodeScanner.js","crewApp/pages/inboundShipments/BarcodeScanDialog.js","crewApp/pages/inboundShipments/StructuredAisleControl.js","components/common/SearchInput.js","crewApp/pages/inboundShipments/TrackAisleControl.js","crewApp/pages/trackManagement/TrackLocation.js","crewApp/pages/inboundShipments/BulkInboundAisle.js","crewApp/pages/inboundShipments/BulkAisleControl.js","crewApp/pages/inboundShipments/UnstructuredAisleControl.js","crewApp/pages/inboundShipments/InboundAisleMap.js","crewApp/pages/inboundShipments/ShipmentItem.js","components/common/ChecklistDialog.js","crewApp/pages/inboundShipments/Seals/SealsCreate.js","crewApp/pages/inboundShipments/Seals/SealsList.js","crewApp/pages/inboundShipments/Seals/SealsDialog.js","managerApp/resources/inboundShipments/CatalogSearchDialog.js","managerApp/resources/inboundShipments/ManifestUploadDialog.js","managerApp/resources/inventory/InventoryUitls.js","managerApp/resources/inboundShipments/POD/InboundPODBody.js","managerApp/resources/inboundShipments/POD/LumberPODBody.js","managerApp/resources/inboundShipments/POD/PODBody.js","managerApp/resources/inboundShipments/InboundUtils.js","crewApp/pages/inboundShipments/ProcessShipmentsCard.js","utils/stickyState.js","crewApp/pages/inboundShipments/ProcessShipments.js","crewApp/pages/outboundShipments/reducer.js","crewApp/pages/outboundShipments/context.js","crewApp/pages/outboundShipments/ScanSealsDialog.js","crewApp/pages/outboundShipments/ApplySealsDialog.js","crewApp/pages/outboundShipments/utils.js","crewApp/pages/outboundShipments/BreakSealDialog.js","crewApp/pages/outboundShipments/ShipmentItem.js","crewApp/pages/outboundShipments/Seals/SealsCreate.js","crewApp/pages/outboundShipments/Seals/SealsList.js","crewApp/pages/outboundShipments/Seals/SealsDialog.js","crewApp/pages/outboundShipments/ProcessShipmentsCard.js","crewApp/pages/outboundShipments/ProcessOutboundShipmentItem.js","crewApp/pages/outboundShipments/ProcessOutboundShipmentList.js","utils/useMounted.js","crewApp/pages/outboundShipments/ProcessOutboundShipments.js","crewApp/pages/inventorySearch/relocate/AisleControl.js","crewApp/pages/inventorySearch/relocate/StructuredAisle.js","crewApp/pages/inventorySearch/relocate/AisleMap.js","crewApp/pages/inventorySearch/relocate/InventoryRelocateCard.js","crewApp/pages/inventorySearch/InventorySearchCard.js","crewApp/pages/inventorySearch/InventorySearch.js","managerApp/resources/inboundShipments/InboundDemurrageList.js","managerApp/resources/outboundShipments/OutboundDemurrageList.js","managerApp/resources/inventory/LowInventoryList.js","managerApp/resources/invoices/InvoicePeak.js","managerApp/resources/invoices/InvoiceStatusIcon.js","managerApp/reports/InvoiceAuditReport.js","managerApp/reports/AvgInventoryTurnsByAccount.js","managerApp/reports/AvgInventoryTurnsByMonth.js","managerApp/reports/AvgInboundCarsByAccount.js","components/common/InventoryCard.js","crewApp/pages/locationSearch/Locations.js","crewApp/pages/yardMap/Maps.js","managerApp/reports/OutboundCarsByMonth.js","managerApp/reports/DailyInbounds.js","managerApp/reports/DailyOutbounds.js","managerApp/reports/Reports.js","crewApp/pages/utilization/LocationInventories.js","crewApp/pages/utilization/StructuredAisle.js","authenticatorApp/UserContext.js","crewApp/pages/utilization/YardUtilization.js","crewApp/pages/documents/Documents.js","components/NetworkError.js","managerApp/resources/tracks/TrackManagementAdmin.js","managerApp/reports/ReportsUtils.js","managerApp/reports/InboundInvoiceReport.js","managerApp/reports/OutboundInvoiceReport.js","managerApp/reports/TotalInOutReport.js","managerApp/reports/InventoryByLoadType.js","managerApp/reports/InventoryStorageReport.js","managerApp/reports/InventoryRecallReport.js","managerApp/reports/DailyRevenueReport.js","routes.js","components/DefaultError.js","components/common/AppInfoDialog.js","components/MenuItemClickable.js","customerApp/layout/CustomerMenu.js","components/common/ConditionalConfirm.js","components/common/Announcements.js","customerApp/layout/CustomerAppBar.js","customerApp/layout/CustomerLayout.js","customerApp/layout/CustomerDashboard.js","managerApp/resources/invoices/common.js","managerApp/resources/invoices/InvoiceUtils.js","customerApp/resources/invoices/InvoiceList.js","managerApp/resources/invoices/Ledger.js","managerApp/resources/invoices/InvoiceShowInboundBlock.js","managerApp/resources/invoices/InvoiceShowOutboundBlock.js","customerApp/resources/invoices/InvoiceShow.js","components/common/ExportButton.js","managerApp/resources/inboundShipments/InboundStateIcon.js","customerApp/resources/inbounds/InboundList.js","components/common/ShowButton.js","components/common/SendPOSDialogButton.js","customerApp/resources/inbounds/InboundAside.js","customerApp/resources/inbounds/InboundShow.js","components/common/QuickFilter.js","customerApp/resources/outbounds/AdviceStatusIcon.js","customerApp/resources/outbounds/OutboundList.js","components/common/scheduler/SchedulerUtils.js","components/common/scheduler/Scheduler.js","customerApp/resources/outbounds/OutboundHelp.js","customerApp/resources/outbounds/ValidateCreateButton.js","customerApp/resources/outbounds/OutboundAdviceCreate.js","managerApp/resources/outboundShipments/DeepDeleteButton.js","customerApp/resources/outbounds/DialogSaveButton.js","customerApp/resources/outbounds/OutboundAdviceAside.js","customerApp/resources/outbounds/OutboundShow.js","customerApp/resources/outbounds/OutboundAdviceEdit.js","components/common/LowInventoryIcon.js","managerApp/resources/inventory/TurnDaysIcon.js","customerApp/resources/inventory/InventoryList.js","managerApp/resources/inventory/InventoryStatusIcon.js","customerApp/resources/inventory/InventoryAside.js","customerApp/resources/inventory/InventoryShow.js","components/common/HistoryTab.js","managerApp/resources/inventory/inventoryItems/InventoryItemUtils.js","managerApp/resources/inventory/inventoryItems/InventoryItemShow.js","managerApp/resources/products/ProductHelp.js","managerApp/resources/products/ProductForm.js","managerApp/resources/products/ProductUtils.js","managerApp/resources/products/ValidateCreateButton.js","managerApp/resources/products/ProductCreate.js","managerApp/resources/products/ProductEditAside.js","managerApp/resources/products/DeleteInactivateButton.js","managerApp/resources/products/ProductEdit.js","managerApp/resources/tasks/TaskList.js","graphql/audit/custom-mutations.js","managerApp/resources/tasks/TaskHelp.js","managerApp/resources/tasks/TaskAside.js","managerApp/resources/tasks/TaskCreate.js","managerApp/resources/tasks/DeepDeleteButton.js","managerApp/resources/tasks/TaskEdit.js","customerApp/resources/customers/CustomerList.js","customerApp/resources/customers/CustomerAside.js","customerApp/resources/customers/CustomerShow.js","managerApp/resources/customers/customerUtils.js","customerApp/resources/customers/ValidateSaveButton.js","customerApp/resources/customers/emailDeleteHTML.js","customerApp/resources/customers/DeepDeleteButton.js","customerApp/resources/customers/CustomerEdit.js","customerApp/CustomerApp.js","crewApp/layout/CrewMenu.js","managerApp/layout/ManagerAppBar.js","components/SubMenu.js","managerApp/layout/ManagerMenu.js","managerApp/layout/ManagerLayout.js","managerApp/layout/ManagerDashboard.js","managerApp/resources/services/ServiceStatusIcon.js","managerApp/resources/services/ServicesPeak.js","managerApp/resources/accounts/AccountList.js","managerApp/resources/accounts/AccountHelpComponents.js","managerApp/resources/accounts/AccountHelp.js","managerApp/resources/accounts/CatalogUpload.js","managerApp/resources/accounts/AccountContactTab.js","managerApp/resources/accounts/AccountUtils.js","managerApp/resources/accounts/ValidateCreateButton.js","components/common/CustomFieldsInput.js","managerApp/resources/accounts/ChecklistPanel.js","managerApp/resources/accounts/AddressBook.js","managerApp/resources/accounts/AccountSettingsTab.js","managerApp/resources/accounts/AccountCreate.js","managerApp/resources/products/ProductArrayList.js","managerApp/resources/accounts/DeepDeleteButton.js","managerApp/resources/accounts/ArchiveRestoreButton.js","managerApp/resources/accounts/DialogSaveButton.js","managerApp/resources/accounts/AccountEdit.js","managerApp/resources/accounts/AccountShow.js","managerApp/resources/audits/AuditProgressBar.js","managerApp/resources/audits/AuditList.js","managerApp/resources/audits/AuditHelp.js","managerApp/resources/audits/AuditCreate.js","managerApp/resources/audits/AuditSummary.js","managerApp/resources/audits/AuditEditAside.js","managerApp/resources/audits/DeepDeleteButton.js","managerApp/resources/audits/AuditReconcileTab.js","managerApp/resources/audits/AuditReportTab.js","managerApp/resources/audits/AuditEdit.js","managerApp/resources/invoices/customLogic.js","managerApp/resources/invoices/MarkPaidButtons.js","managerApp/resources/invoices/InvoiceList.js","managerApp/resources/invoices/InvoiceHelpComponents.js","managerApp/resources/invoices/InvoiceHelp.js","managerApp/resources/invoices/ChargesTab.js","managerApp/resources/invoices/ValidateCreateButton.js","managerApp/resources/invoices/InvoiceCreate.js","managerApp/resources/invoices/DeepDeleteButton.js","managerApp/resources/invoices/ReopenButton.js","managerApp/resources/invoices/InvoiceEditAside.js","managerApp/resources/invoices/InvoiceEdit.js","managerApp/resources/invoices/InvoiceShow.js","managerApp/resources/inboundShipments/CreateInvoiceButton.js","managerApp/resources/inboundShipments/AdvanceButton.js","components/common/ListDatePicker.js","components/common/ExportDropDown.js","utils/exportsUtils.js","managerApp/resources/inboundShipments/InboundExports.js","managerApp/resources/inboundShipments/InboundList.js","components/common/Checklist.js","managerApp/resources/inboundShipments/SealNumbersDialog.js","managerApp/resources/inboundShipments/ValidateCreateButton.js","managerApp/resources/inboundShipments/InboundHelpComponents.js","managerApp/resources/inboundShipments/InboundHelp.js","managerApp/resources/inboundShipments/InboundCreate.js","managerApp/resources/inboundShipments/InboundAside.js","managerApp/resources/inboundShipments/DialogSaveButton.js","managerApp/resources/inboundShipments/DeepDeleteButton.js","managerApp/resources/inboundShipments/InboundEditActions.js","managerApp/resources/inboundShipments/ChecklistForm.js","managerApp/resources/inboundShipments/InboundEdit.js","managerApp/resources/inboundShipments/InboundShow.js","managerApp/resources/outboundShipments/CreateInvoiceButton.js","managerApp/resources/outboundShipments/AdvanceButton.js","managerApp/resources/outboundShipments/OutboundExports.js","managerApp/resources/outboundShipments/OutboundList.js","components/common/EventsCalendar.js","managerApp/resources/outboundShipments/OutboundHelpComponents.js","managerApp/resources/outboundShipments/OutboundHelp.js","managerApp/resources/outboundShipments/InventorySearchDialog.js","managerApp/resources/outboundShipments/ValidaateCreateButton.js","managerApp/resources/outboundShipments/OutboundCreate.js","managerApp/resources/outboundShipments/DialogSaveButton.js","managerApp/resources/outboundShipments/AdviceApproveRejectButton.js","managerApp/resources/outboundShipments/emailAdviceApprovedHTML.js","managerApp/resources/outboundShipments/emailAdviceRejecteddHTML.js","managerApp/resources/outboundShipments/OutboundAside.js","managerApp/resources/outboundShipments/SealNumberDialog.js","managerApp/resources/outboundShipments/Signature.js","managerApp/resources/outboundShipments/OutboundSignatures.js","managerApp/resources/outboundShipments/OutboundEditActions.js","managerApp/resources/outboundShipments/OutboundEdit.js","managerApp/resources/outboundShipments/OutboundShow.js","managerApp/resources/outboundShipments/lineItem/DialogSaveButton.js","managerApp/resources/outboundShipments/lineItem/DeepDeleteButton.js","managerApp/resources/outboundShipments/lineItem/PickListItemAside.js","managerApp/resources/outboundShipments/lineItem/PickListHelp.js","managerApp/resources/outboundShipments/lineItem/PickListInventoryItem.js","managerApp/resources/outboundShipments/lineItem/PickListInventoryItems.js","managerApp/resources/outboundShipments/lineItem/PickLineItemTab.js","managerApp/resources/outboundShipments/lineItem/PickListItemEdit.js","managerApp/resources/inventory/inventoryItems/OpenInventoryItemButton.js","managerApp/resources/inventory/inventoryItems/LocationsPeak.js","managerApp/resources/inventory/InventoriesExports.js","managerApp/resources/inventory/InventoryList.js","components/common/TrackLocationView.js","components/common/LocationPicker.js","managerApp/resources/inventory/DialogSaveButton.js","managerApp/resources/inventory/AuditStatusIcon.js","managerApp/resources/inventory/DeepDeleteButton.js","managerApp/resources/inventory/ValidateRequiredIcon.js","managerApp/resources/inventory/InventoryAside.js","managerApp/resources/inventory/LinkProductDialog.js","managerApp/resources/inventory/inventoryItems/CreateInventoryItemButton.js","managerApp/resources/inventory/inventoryItems/DeepDeleteButton.js","managerApp/resources/inventory/InventoryHelpComponents.js","managerApp/resources/inventory/InventoryHelp.js","managerApp/resources/inventory/InventoryEditActions.js","managerApp/resources/inventory/InventoryEdit.js","managerApp/resources/inventory/InventoryShow.js","managerApp/resources/inventory/inventoryItems/InventoryItemHelp.js","managerApp/resources/inventory/inventoryItems/InventoryItemCreate.js","managerApp/resources/inventory/inventoryItems/InventoryItemEdit.js","managerApp/resources/users/emailInviteHTML.js","managerApp/resources/users/emailWelcomeBackHTML.js","managerApp/resources/users/ValidateSaveButton.js","managerApp/resources/users/UserCreate.js","managerApp/resources/customers/CustomerList.js","managerApp/resources/customers/CustomerHelp.js","managerApp/resources/customers/emailInviteHTML.js","managerApp/resources/customers/DialogCreateButton.js","managerApp/resources/customers/emailCustomerInviteHTML.js","managerApp/resources/customers/CustomerCreate.js","managerApp/resources/customers/emailDeleteHTML.js","managerApp/resources/customers/DeepDeleteButton.js","managerApp/resources/customers/ValidateSaveButton.js","managerApp/resources/customers/CustomerAside.js","managerApp/resources/customers/CustomerEdit.js","managerApp/resources/files/FileHelp.js","managerApp/resources/files/CreateCategory.js","managerApp/resources/files/FileSetupTab.js","managerApp/resources/files/FileCreate.js","managerApp/resources/files/DeepDeleteButton.js","managerApp/resources/files/FileEdit.js","managerApp/resources/files/BulkDeepDeleteButton.js","managerApp/resources/files/FileList.js","managerApp/resources/services/ServiceHelp.js","managerApp/resources/services/DeepDeleteButton.js","managerApp/resources/services/ServiceEdit.js","managerApp/resources/services/ServiceCreate.js","managerApp/resources/assetTypes/AssetTypeCreateDialog.js","managerApp/resources/reloadYard/ReloadYardUtils.js","managerApp/resources/eventTypes/EventTypeForm.js","managerApp/resources/eventTypes/EventTypeCreate.js","managerApp/resources/eventTypes/DeleteEventTypeButton.js","managerApp/resources/eventTypes/EventTypeEdit.js","managerApp/resources/checklists/ChecklistForm.js","managerApp/resources/checklists/ChecklistCreate.js","managerApp/resources/checklists/DeleteChecklistButton.js","managerApp/resources/checklists/ChecklistEdit.js","managerApp/resources/assetTypes/AssetTypeForm.js","managerApp/resources/assetTypes/AssetTypeCreate.js","managerApp/resources/assetTypes/DeepDeleteAssetTypeButton.js","managerApp/resources/assetTypes/AssetTypeUtils.js","managerApp/resources/assetTypes/AssetTypeEdit.js","managerApp/ManagerApp.js","crewApp/pages/dashboard/CrewDashboard.js","crewApp/layout/CrewRoutes.js","crewApp/layout/CrewAppBar.js","crewApp/layout/CrewLayout.js","crewApp/CrewApp.js","utils/useToast.js","registrationApp/context.js","registrationApp/YardInfo.js","registrationApp/AccessAndCapacity.js","registrationApp/reducer.js","registrationApp/emailYardInfoHTML.js","registrationApp/Setup.js","images/stripe-payment.png","registrationApp/NewYard.js","images/logo_transloads_blue.svg","authenticatorApp/Authenticator.js","images/transloadsLogo57.png","App.js","index.js","components/common/CopyToClipboardButton.js","managerApp/resources/eventTypes/EventTypeUtils.js","utils/locationUtils.js","components/common/ImageField.js","utils/loadTypeUtils.js","utils/fileUtils.js","components/common/AntSwitch.js","utils/constants.js","aws-exports.js","components/common/CustomFields.js","graphql/queries.js","graphql/mutations.js","graphql/reloadyard/custom-queries.js","graphql/inventory/custom-queries.js","graphql/outbound/custom-queries.js","graphql/inbound/custom-queries.js","components/common/FileField.js","graphql/account/custom-queries.js","components/common/index.js","withRoot.js","utils/appUtils.js","graphql/inventory/custom-mutations.js"],"names":["getInventoryQuantity","location","currentInventory","inventoryLoadType","reloadYardCommodity","commodity","locationLoadType","locationLoad","capacityUsed","quantity","capacity","name","getUnitName","inventoryUnits","deepRedirect","history","redirectPath","currentPath","backPath","state","redirectTo","backState","Array","isArray","pop","push","parsePath","getBackPath","props","basePath","getFormTab","tabIdx","exec","pathname","length","getHoursMinutesDuration","label","startdate","endDate","hours","Math","abs","Date","valueOf","minutes","floor","getInventoryPrimaryField","account","inventory","lineItemInventoryItem","inventoryPrimaryField","primaryField","value","getCustomFieldById","customFields","inventoryItem","container","selected","productName","lotNumber","getLogState","getReplyToAddress","reloadYard","currentYard","window","appUser","email","isEmptyAddress","address","street","city","zipCode","country","isFullAddress","updateExceptionQuantity","toUpdateInventory","difference","inventoryItems","items","reduce","total","itm","quantityOnHand","quantityShipped","isDamaged","overShipment","underShipment","otherException","hasException","overShipmentQuantity","underShipmentQuantity","getInitQuantityOnHand","selectedAisle","isBulkCommodity","quantityDelivered","trimDecimal","isUnmanagedAisle","handleNumberFieldKeyDown","event","key","keyCode","which","test","preventDefault","getTaskStatusText","id","TaskStatus","find","getTaskPriorityText","Priorities","historyAutoGen","form","data","ignoreList","includeArrayList","includeObjectList","formState","getState","newHistory","dirtyFields","Object","keys","dirtyCustomFields","filter","startsWith","includeArrayMap","map","obj","parsed","split","forEach","includes","fieldSata","getFieldState","initState","parseCustomField","initial","newState","newNote","text","type","NoteType","GENERIC","date","by","fullName","customKey","customFieldSata","customInitState","customNewState","fieldName","inflection","transform","fieldState","initArray","newArray","deltaDate","added","x","item","keyValue","replaceAll","initValue","newValue","initialValues","values","err","logError","exportCustomField","field","target","customHeaderMap","fieldValues","has","get","columnId","getCustomFieldId","set","splitEmails","emailString","separator","trim","truncateText","maxLength","substring","quantityRenderer","units","formattedValue","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","format","variant","align","piecesRenderer","record","pcs","product","Number","totalPiecesRenderer","console","log","exceptionRenderer","position","filled","title","originOfDamage","isRecalled","barcodeException","barcodeExceptionNote","otherExceptionNote","unsafeShipment","brokenSeal","arrow","placement","join","style","color","orange","getBarcodesString","sealItems","seal","barcode","parseTime","timeStr","match","hourStr","minuteStr","hour","parseInt","minute","isPM","toLowerCase","generateTimeInterval","start","end","disableValue","times","intervals","h","m","a","i","startTime","endTime","error","fullDayTimes","constrainedTimes","timeObj","currentMinutes","number","decimalPlaces","round","getDateTimeFromTimeslot","timeslot","time","modifier","year","month","day","getTimeSlotsForDateTime","API","graphql","graphqlOperation","timeslotByEventTypeByDateByTime","eventTypeId","yearMonthDayTime","beginsWith","resonse","areTimeslotsEqual","timeslot1","timeslot2","week","validateAppointment","timeslots","eventType","numberOfResources","createLambdaAppointment","inboundId","outboundId","accountId","accountName","timeslotInput","uuidv4","owner","transactType","updateLambdaAppointment","deleteLambdaAppointment","timeslotId","getInboundCurrentStepName","currentShipment","isRailToTrack","areaId","trackId","InboundState","PROCESS_SHIPMENT","APPROVE_SHIPMENT","InboundTrackSteps","PROCESS_INVENTORY","APPROVE_INVENTORY","extractCounter","pickupNumber","parts","cleanUrlLink","url","urlObj","URL","path","queryParams","searchParams","segments","segment","uuidPattern","transformedSegments","decodeURIComponent","findFirstHrefFromChildren","children","child","href","getLastValueFromUrl","part","lastPart","indexOf","audioContext","getAudioContext","AudioContext","beep","vol","freq","duration","oscillator","createOscillator","gain","createGain","connect","frequency","destination","currentTime","stop","defaultNumberFormat","isChildNull","React","isValidElement","renderedOutput","formatDate","includeTime","useUTC","String","getUTCDate","padStart","getDate","getUTCMonth","getMonth","getUTCFullYear","getFullYear","formattedDate","getUTCHours","getHours","getUTCMinutes","getMinutes","period","getYardLogo","logoImage","getPhotoUrl","getReloadYardAddress","fax","phone","timeZone","yardLogo","yardName","yardAddress1","yardAddress2","yardPhoneNo","yardURL","website","formatCurrency","amount","toLocaleString","getDayRange","startOfDay","setHours","endOfDay","toISOString","isSameDay","day1","day2","getFormattedStartAndEndDate","inputStartDate","inputEndDate","minDate","maxDate","dates","acc","dateValue","parsedDate","isNaN","min","max","getLeastAndGreatestDate","getUTCDay","startDate","today","localStartDate","localEndDate","similarDates","formattedStartDate","formattedEndDate","areAllSealsValid","advisedSeals","enteredSeals","updatedSeals","el","validated","arr1","arr2","sortedArr1","sort","sortedArr2","every","index","arraysEqualIgnoreOrder","isShipmentUnits","uom","Unit","CAR","TL","updateInboundShipmentMini","updateInboundShipment","createInboundShipmentId","updateSetupData","updateCustomerMini","updateUserMini","updateReloadYard","updateReloadYardMini","createCustomerReloadYardAccountMini","updateCustomerReloadYardAccountMini","BoundedSelectInput","translate","useTranslate","useInput","input","meta","touched","isRequired","allowEmpty","disabled","fullWidth","errorMessage","message","args","undefined","getMessage","choices","TextField","select","margin","helperText","required","MenuItem","BoundedTextInput","onChange","rest","inputProps","getValueFromSource","source","allValues","arrayKey","objectKey","validateAddress","sourceValue","validateState","minLength","validateZip","AddressInput","showBusinessName","truncatedSource","endsWith","slice","useState","setIsRequired","useEffect","Grid","direction","spacing","xs","validate","md","textTransform","CountryList","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","module","exports","Boolean","hostname","newQueries","queries","getReloadYard","getInboundShipment","getInvoice","getOutboundShipment","getInventorie","getInventoryItem","getAccount","accountByActiveByName","inventoryByStatusByAccountByProductByLot","inboundShipmentByReloadYardByStatusByDates","inboundShipmentByAccountByStatusByDates","invoiceByStatusByDateByAccount","invoiceByAccountByStatusByDate","outboundShipmentByReloadYardByStatusByDates","outboundShipmentByAccountByStatusByDates","searchAccounts","searchInventorys","searchInboundShipments","searchOutboundShipments","getShipmentLineItem","newMutations","mutations","createInventoryItem","dataProvider","buildDataProvider","myDataProvider","getList","resource","params","getOne","ForceTitle","titleElm","document","getElementById","nodes","childNodes","titleSpan","createElement","innerText","appendChild","firstChild","tabs","NewCustomerStatusOptions","ListActions","TopToolbar","FilterButton","RefreshButton","SetupDataGrid","tabValue","setTabValue","Tabs","indicatorColor","textColor","sessionStorage","setItem","idx","Tab","Divider","SetupGrid","isSmall","useMediaQuery","theme","breakpoints","down","SimpleList","primaryText","businessName","secondaryText","Typography","firstName","lastName","tertiaryText","submitDate","linkType","Datagrid","rowClick","DateField","showTime","SetupList","getItem","initFilterValues","setupDataByStatusBySubmitDate","status","List","order","filters","TextInput","resettable","alwaysOn","actions","bulkActionButtons","Logout","setTimeout","Auth","signOut","emptyArray","Pagination","memo","loading","page","perPage","rowsPerPageOptions","setPage","setPerPage","limit","handlePageChange","useCallback","stopPropagation","ceil","handlePerPageChange","labelDisplayedRows","from","to","count","TablePagination","rowsPerPage","onChangePage","component","sanitizeListRestProps","onChangeRowsPerPage","ActionsComponent","labelRowsPerPage","defaultProps","PaginationActions","PaginationLimit","BackButton","search","useHistory","Button","onClick","returnPath","ListButton","icon","useStyles","makeStyles","card","display","flexDirection","flex","width","paddingRight","paddingLeft","padding","cardHeader","PaginationToolbar","listContext","useListContext","alignItems","selectedIds","EmailAnnouncement","classes","notify","useNotify","sending","setSanding","reloadYards","setReloadYards","users","setUsers","getYardData","active","response","reloadYardByName","listUsers","sendEmails","clear","yardList","yard","some","f","promiseList","cc","subject","ccList","user","reloadYardId","UserStatus","APPROVED","post","body","bcc","template","htmlContent","allSettled","results","errors","res","useList","loaded","CreateToolbar","useForm","Toolbar","SimpleForm","submitOnEnter","toolbar","Card","className","CardHeader","avatar","Avatar","action","CardContent","sm","multiline","minRows","ListContextProvider","hasBulkActions","listAccountNames","root","overflow","justifyContent","minHeight","paddingBottom","cardMobile","cardAvatar","palette","getContrastText","primary","main","backgroundColor","height","marginTop","divider","marginBottom","InnerCard","showDivider","subheader","CrewCard","addMargin","actionAreaContainer","actionArea","buttonProgress","secondary","top","left","red","marginLeft","grey","deleteEnabledAvatar","deepOrange","deleteDisabledAvatar","imgAvatarWrap","flexWrap","imgAvatar","imgAvatarSelected","border","imgAvatarLoading","media","borderRadius","objectFit","InventoryPhotos","saveModel","photos","maxSize","imgRef","disableButton","disableDelete","hideActions","s3Type","S3ObjectType","SHIPMENT","thumbNailSize","handleLoading","collapsed","inventoryPhotos","setInventoryPhotos","setLoading","setError","selectedPhotoIdx","setSelectedPhotoIdx","photoDisplay","setPhotoDisplay","photo","setPhoto","open","setOpen","collapse","setCollapse","clientWidth","current","innerWidth","isXSmall","getPhoto","handlePhoto","photoFiles","files","file","size","MAX_PHOTO_SIZE","MAX_PHOTO_SIZE_MSG","newPhotos","tempPhoto","getFileKey","Storage","put","level","handleDelete","remove","handleClose","handlePhotoDisplay","scrollTo","getThumbnailClassName","src","alt","Box","CircularProgress","handleSelectPhoto","accept","multiple","htmlFor","startIcon","cursor","Dialog","onClose","DialogTitle","DialogContent","DialogContentText","DialogActions","autoFocus","backdrop","zIndex","paper","timeLineItem","maxWidth","timeLineItemMobile","historyButton","marginRight","link","textDecoration","InventoryTimeline","headerData","setHeaderData","handleCancel","goBack","fontSize","IconButton","edge","inventoryId","CardActions","InventoryTimelineCard","setCurrentInventory","inboundShipment","setInboundShipment","lineItems","setLineItems","dialogData","setDialogData","dialogTitle","setDialogTitle","isInventoryExceptionsOpen","setIsInventoryExceptionsOpen","isInboundExceptionsOpen","setIsInboundExceptionsOpen","invalidIdError","setInvalidIdError","useRef","getInventory","getInventorieTimeline","dbInventory","shipmentLineItems","lineItemMap","outboundShipmentId","getOutboundShipmentTimeline","all","outboundShipment","b","dateA","createDateTime","dateB","localeCompare","showHistory","historyType","showNotes","noteType","lineItem","notes","hideHistory","getQuantityText","qty","isNotesDisabled","isHistoryDisabled","getInventoryView","deliveryDateTime","productCode","lotType","area","zone","quantityCommitted","CustomFields","recordFields","mt","mb","Paper","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","locationFullName","getInventoryActions","ref","getInboundView","placedDateTime","releaseDateTime","poNumber","shipFrom","originCarrier","railCarNumber","getOutboundActions","getOutboundView","totalQuantity","departureDateTime","carrier","shipmentItem","quantityToPick","transfer","transferToAccountName","Backdrop","gutterBottom","Timeline","TimelineItem","TimelineOppositeContent","TimelineSeparator","TimelineDot","TimelineConnector","TimelineContent","UserType","CREW","createdAt","scroll","FormControl","FormGroup","FormControlLabel","control","Checkbox","checked","ListItem","ListItemText","accountNameRenderer","displayName","corporateAccount","getAccounts","setAccounts","accountByActiveByNameDropDown","activeBusinessName","AccountDropDown","onAccountChange","accounts","AutocompleteInput","clearable","optionText","selectedAccount","handleAccountChange","submitButton","bottom","finalData","setAccountId","yearMonth","setYearMonth","searchTerm","setSearchTerm","getInventoryActivity","utils","DateFnsUtils","DatePicker","inputVariant","disableToolbar","disableFuture","autoOk","views","openTo","maxDateMessage","evt","inventories","inventoriesForExport","totalOutbound","inventoryForExport","inboundShipmentId","inboundPoNumber","quantityReceived","outbounds","outbound","totalQuantityToPick","ShipmentId","shippedDateTime","ShipmentLineItemStatus","SHIPPED","totalQuantityOutbound","jsonExport","rename","csv","downloadCSV","exporter","InventoryActivityReport","setFinalData","startOfMonth","addMonths","searchInput","eq","and","gte","lte","or","matchPhrasePrefix","wildcard","inventorys","nextToken","result","splice","outboundIdMap","inv","InventoryGrid","expand","NumberField","InventoryPeak","isLoaded","adminRoutes","exact","render","ThemeContext","createContext","ThemeStateProvider","localStorage","setPalette","Provider","toggleTheme","newPalette","useThemeState","useContext","paddingTop","Menu","onMenuClick","dense","useSelector","admin","ui","sidebarOpen","DashboardMenuItem","sidebarIsOpen","MenuItemLink","leftIcon","AppBarHeader","slideIn","animation","slideOut","fontWeight","borderColor","outline","opacity","searchButton","HelpWPSearchButton","isVisible","setIsVisible","isAnimating","setIsAnimating","searchValue","setSearchValue","inputRef","handleClickOutside","contains","addEventListener","removeEventListener","toggleSearchInputVisibility","redirectToPage","screenWidth","screen","screenHeight","windowFeatures","newWindow","moveTo","resizeTo","openFullSizeWindow","encodeURIComponent","htmlColor","placeholder","onKeyDown","onMouseDown","themeLink","themeIcon","env","dev","background","hotfix","prod","AdminMenu","UserMenu","Tooltip","AdminAppBar","getEnv","AppBar","userMenu","Fragment","AdminLayout","Layout","appBar","menu","MyMenu","notification","Notification","listInventoryIds","listShipmentLineItemIds","listLocationIds","searchInventorysBackfill","inventoryByStatusByLot","locationBySortKey","inventoryItemByAisleByStatusAudit","outboundShipmentByStatusDeleteMe","listInventoryItemsDeleteMe","inboundShipmentByReloadYardByAccount","drawer","resourceOptions","elapsedTime","parentCount","prodCount","timeDelta","seconds","toFixed","estimatedProdExecutionTime","parseFloat","getYards","resp","yardData","saveInventoryItem","toUpdateInventoryItem","aisle","updatedAt","saveInventory","toUpdateRecord","inventoryMutations","saveShipmentLineItem","shipmentLineItem","saveShipmentLineItemInventoryItem","ShipmentLineItemInventoryItem","updateResource","recordToUpdate","entries","update","runDBIndexRegen","queryTerms","totalRecords","rejectedCount","hasMoredData","MAX_INVENTORY_QUERY_LIMIT","pagination","auditInbounds","inboundMap","inboundQueries","inboundList","inbound","zombieInventoryCount","totalInventories","adminQueries","inventoryList","auditOutbounds","outboundMap","emptyOutboundCount","totalOutbounds","outboundList","outboundShipmentByStatus","inventoryMap","zombieLineItemCount","totalLineItems","listIdQueries","lineItemList","listShipmentLineItems","auditLocations","areas","listAreas","areaMap","zones","listZones","zoneMap","aisles","listAisles","aisleMap","locations","listLocations","zoneId","aisleId","auditInvItemLocations","locationList","locationMap","concat","locationId","statusLotNumber","InventoryStatus","STORED","updateAccuntRecords","records","newRecord","changeId","scheduledDateTime","billToAccountId","toAccount","productId","fromAccount","runAccountChange","inbounds","auditCapacityUsed","fixCapacityUsed","reportOnly","structuredOnly","LocationType","STRUCTURED","other","totalErrors","inventoryItemList","IN_TRANSIT","inventoryItemByAisleByStatus","UNLOADED","inventoryItemMap","allocatedCount","allocatedUnits","usedCount","usedUnits","localInventoryItems","load","itemProductId","toUpdateLocation","hasErrors","capacityAllocated","getLocationFullName","reason","auditInventoryQuantity","fixInventoryQty","totalReceived","remainingOnHand","totalCommitted","totalShipped","totalInventoryItems","totalInvItemOnHand","totalInvItemCommitted","qtyToPick","invItem","actualReceived","ARRIVED","isTrack","InboundStatus","RELEASED","ARCHIVED","COMPLETED","totalUnits","deleteReloadYard","HandlerDialog","dialogOpen","handleDialogClose","onSubmit","handlerName","setQueryTerms","minWidth","IndexRegenDialogContent","AccountChangeDialogContent","setResults","handleYandChange","handleInboundSearch","hasInvoiceItems","invoice","hasProducts","ArrayField","BooleanField","leftLabel","rightLabel","setChecked","_","require","helpPageButtonText","getHelpPageButtonText","MismatchIcon","quantityAvailable","totalInventoryQuantity","AdminDashboard","permissions","useDataProvider","setDialogOpen","handler","setHandler","setHandlerName","handleDialogOpen","addDefaultScheduleToYard","defaultSchedule","workdays","holidays","minNoticeHours","maxDaysIntoFuture","schedule","handleSubmit","auditProducts","reportData","groupBy","objs","sum","runSortKeyBackfill","listInboundShipments","sortKey","listOutboundShipments","resetAisleSortKey","aisleByActiveBySortKey","SORTKEY_BUFFER","UNSTRUCTURED","bays","levels","positions","inventory_invItem_backfill","failedRecords","latitude","longitude","locationToUpdate","doCreateInventoryItems","toCreateInvItem","groups","remainingCount","qtyShipped","createInventoryItems","process","performance","now","inventoryCount","aisleList","promises","hdmCreateInventoryItem","hdmFixInventoryItems","promise","processInventoryMerge","groupedInventories","keptInventories","updatePromises","deletePromises","JSON","stringify","invGroup","keepInventory","aisleIdMap","mergedHistory","mergedNotes","oldestInventoryCreatedEntry","hist","note","lastShipDateTime","turnDays","unshift","sortKeyIndex","mergeInventories","inbbund","processShipmentLineItemMerge","groupedLineItems","keptLineItems","lineItemGroup","keepLineItem","oldestLineItemCreatedEntry","shipmentLineItemId","mergeShipmentLineItems","devInventoryItemCleanout","missingInventory","missingLineItems","missingInvItemss","listInventories","lineItemInvItemList","listShipmentLineItemInventoryItems","lineItemInvItem","listInventoryItems","zeroAccountPhotos","accountList","listAccounts","inboundPhotos","outboundPhotos","products","services","billingAddress","reasonMap","inventoryItemAddAccount","getUnloadedBy","unloadedBy","unloadedHistory","getUnloadedDateTime","unloadedDateTime","backfillLineItems","toUpdateLineItem","OutboundStatus","doBackfilOutbound","toUpdateOutbound","reloadYardCommodityId","seals","backfillOutboundShipment","backfillProductDimensions","totalProductsUpdated","failedProducts","reloadYardQueries","yardResponse","yardCommodities","productList","listProducts","productIds","isLumber","isLumberCommodity","isPanelsCommodity","updatedProduct","pcsHeight","pcsWidth","pcsLength","responses","successfulUpdates","failedUpdates","devDeleteEmptyOutbounds","devDeleteEmptyInbounds","resetLineItems","fixAisleList","setInventoryAisleList","devFixLocations","matchingArea","matchingZone","matchingAisle","matchingLocation","invoices_Backfill_Numbers","invoices","invoiceToUpdate","run_Aisle_Location_Backfill","totalCapacityUsed","bay","pallet","box","superSack","totalLocations","aisleToUpdate","helpPagesMigration","numberRowsCreate","numberRowsUpdate","fixInventoryDateTime","fixNegativeInvQty","totalInv","totalPromises","inventoryNeedsUpdate","historyNotes","expectedQuantityOnHand","expectedQuantityCommitted","itemQuantityCommitted","sliInventoryItems","sliInvItem","inventoryItemId","addBillingBusinessName","accountsToUpdate","updatedAccount","updateAccount","warn","addUserACL","userList","usersToUpdate","isEligibleType","SUPERVISOR","hasNoOutboundSignACL","acl","AclType","OUTBOUND_SIGN","isActive","updatedUser","userId","updateUser","dataIntegridyAudit","inventoryIds","Set","inboundIds","add","shipmentLineItemsList","fixProductCode","performUpdates","productsToUpdate","productsToMerge","alteredCodes","Map","atsYardId","filteredAccounts","filteredProducts","baseProductCode","accountAlteredCodes","baseProductId","table","updateInventories","updateProductCode","deleteProduct","oldProductId","oldProductCode","newProductId","newProductCode","backfillTimeslotIds","updatedCount","timeslotList","listTimeslots","updatePromise","fixProductCounts","productsData","allInventories","inventoryQuery","productIdStatus","nextInvToken","inventoryInput","inventoryByProductByStatus","totalQty","lowInventoryThreshold","lowInventoryAlert","APP_VERSION","column","Title","CustomizedLabel","y","fill","dy","fontFamily","textAnchor","InboundCarsByMonth","average","setAverage","setData","getInboundCarsData","sub","months","tempData","queryList","yardId","newDate","nextDate","monthName","options","barDate","toLocaleDateString","amt","countInboundShipments","lt","promiseResults","totalAmt","avg","ResponsiveContainer","BarChart","right","CartesianGrid","strokeDasharray","XAxis","dataKey","tickSize","YAxis","content","payload","ReferenceLine","stroke","strokeWidth","Bar","stackId","entry","Cell","listStyle","chip","fixedHeightPaper","Separator","pt","ReloadYardPeak","commodities","setCommodities","getData","reloadYardCommodityByActiveBySortKey","activeSortKey","reloadYardCapabilityByReloadYard","orderBy","userByActiveByLastName","Loading","Show","SimpleShowLayout","railHighway","Chip","capabilityId","searchField","iconButton","SearchField","handleSearch","onKeyUp","InputProps","endAdornment","InputAdornment","disableRipple","resourceNameMap","useSearchableList","defaultSearchFilter","defaultFilter","defaultPerPage","defaultSort","version","useVersion","setPayload","useQueryWithStore","newError","sortQuery","parse","keyQueryFetch","filterValues","refetch","currentSort","isEmpty","searchableFetch","queryBy","sortBy","string","charAt","toUpperCase","keyBy","finalIds","SelectionDialog","onColumnClicked","columnName","this","columns","selection","FieldTitle","Component","STORAGE_KEY","getRootValue","LocalStorage","oldValue","setRootValue","arrayToSelection","CustomizableDatagrid","listSwitch","defaultColumns","storage","storageProp","getInitialSelection","previousSelection","setSelection","modalOpened","setModalOpened","mini","newSelection","updateStorage","selectedSource","cloneElement","renderChild","ReloadYardSearchField","displayedFilters","setFilters","SubscriptionStatusField","useRecordContext","subscription","gap","SubscriptionStatus","ACTIVE","CANCELED","TRIALING","ReloadYardList","defaultTitle","getSortBy","up","ListToolbar","sortable","FunctionField","validateRequired","NotesTab","ArrayInput","SimpleFormIterator","disableReordering","FormDataConsumer","formData","scopedFormData","getSource","public","BooleanInput","NotesTabShow","hidePrivate","notesRecord","Labeled","ContactInfo","ContactInfoForm","mr","v","SelectInput","optionValue","ContactInfoSHow","addField","addButton","AccessInput","access","setAccess","accessName","setAccessName","locationRef","isDuplicate","val","duplicateValue","addAccess","focus","inputContainer","clickable","onDelete","textAlign","adorment","Capabilities","AccessForm","doSetAccess","registerField","change","dirty","valid","NumberInput","AccessShow","selectedAccess","option","CapabilitiesForm","capabilities","setCapabilities","handleChange","handleValueChange","selectedItm","saveFlag","Switch","capability","requiredValue","handleCapabilityChange","replace","onBlur","InputLabelProps","shrink","disableUnderline","ToolTipIcon","ml","middle","Hidden","sxDown","sx","verticalAlign","Commodities","handleCommodityChange","handleUnitChange","getCommodityUnits","description","BetaBadge","useTheme","HIDE_FEATURE_BADGES","shape","lineHeight","NewBadge","AssetTypePanel","lazy","BrandingPanel","ChecklistPanel","DocumentsPanel","EventsTypePanel","InvoicingPanel","SchedulePanel","ZapierPanel","borderRight","tabsContainer","flexGrow","hiddenTab","visibleTab","TabPanel","role","fallback","SettingsTab","useLocation","tabIndex","URLSearchParams","orientation","isAuthorized","INVOICES","MyYardShowActions","MyYardShow","useShowController","isComponentMounted","TabbedShowLayout","getAisleFullName","isAdmin","ICONS","video","tour","custom","default","listItem","listItemIcon","MarkdownListItem","getIcon","ListItemIcon","MarkdownLink","callBack","setVideoId","mode","setMode","param","setParam","Link","underline","Produktly","startTour","tourId","MarkdownList","disablePadding","videoContainer","iframe","YTVideoModal","videoId","embedUrl","allow","allowFullScreen","MarkdownViewer","hasChildren","components","ul","li","h1","h2","h3","h4","h5","HelpViewer","setState","ComingSoon","help","helpHeader","helpHeaderMobile","helpMobile","drawerPaper","drawerMobile","line","borderTop","getHelpPageByUrl","isLive","helpPageByUrl","helpPageData","HelpButton","helpClasses","dynamicContentComponent","helpPage","setHelpPage","tabNumber","memoizeGetHelpPage","fetchedHelpPage","cleanedUrl","anchorEl","setAnchorEl","isEmptyChildren","currentTarget","Drawer","anchor","anchorOrigin","vertical","horizontal","PaperProps","ModalProps","BackdropProps","invisible","transformOrigin","HelpIconButton","Subscription","SubscriptionStatusChoices","FileInput","ACCEPTED_FILES","maxFiles","MAX_FILES","handleFileChange","FileField","AttachmentsHelp","BusinessInformationHelp","CommoditiesHelp","AccessAndCapacityHelp","LocationsHelp","ReloadYardHelp","tabNames","Areas","Zones","Aisles","tabContent","updateAppAreas","appType","AppType","ADMIN","LayoutTab","setAreas","setAisles","areaBySortKey","areaRsponse","aisleResponse","MyYardEdit","Edit","mutationMode","TabbedFormContainer","useEditController","setIsLoaded","getCommCapaData","toUpdateCommodity","updateReloadYardCommodity","yardCommodity","newCommodities","commodityMap","activeYardCommodities","yardCommodityMap","toUpdateCapability","updateReloadYardCapability","yardCapability","newCapabilities","TabbedForm","FormTab","YardEditActions","MyYardEditToolbar","redirect","useRedirect","removeImageFile","saveTransformImage","dir","getDirFileKey","rawFile","contentType","s3Object","bucket","_options","aws_user_files_s3_bucket","region","aws_user_files_s3_bucket_region","FilePaths","LOGO","MAPS","saveRemoveFile","RELOADYARD","saveRemoveFiles","reject","fileCategories","invoiceNumberPrefix","element","documents","mapAreaId","eventTypes","checklists","SaveButton","onSuccess","setupLocationMaps","setupCommodityMaps","onFailure","pristine","SetupShowActions","SetupShow","dispatch","propertyName","newValues","EMAIL_REGEX","URL_REGEX","validateYard","userPhone","phoneNumber","zip","lotCapacityAcres","trackCapacity","warehouseCapacity","validateSubscription","trialPeriod","yardInfo","accessToRailHighway","forkLiftMaxCapacity","validators","tosAccept","customerId","priceList","activeStep","addInput","YardInfo","SetupContext","useField","handleRecordChange","handleBlur","userEmail","faxNumber","InputLabel","OutlinedInput","FormHelperText","reducer","AccessAndCapacity","newAcess","setNewAcess","servingCarrier","alert","Note","cognitoId","ip","setProducts","prices","setPrices","setPriceList","newPices","price","productPrices","nickname","unit_amount","currency","recurring","interval","SetupEditActions","SaveWithSetupDataButton","setSaving","getSetupData","createStripeCustomer","setupData","customer","line1","line2","postal_code","handleApprove","groupName","substr","toUpdateSetupData","toName","toEmail","handleReject","setupDataJson","NewCustomerStatus","REJECTED","approveButton","SetupEditToolbar","saving","NEW","PENDING_APPROVAL","DeleteButton","SetupEdit","useReducer","setupReducer","TenantField","tenantId","ReferenceField","reference","TenantInput","defaultValue","ReferenceInput","LogSearchField","appVersion","exception","AppVersionFilter","isCurrentVersion","setIsCurrentVersion","ne","refreshEnabled","BulkListActions","onUnselectItems","BulkDeleteButton","LogList","LogStatus","BulkActionsToolbar","DateInput","onKeyPress","on","LogShowActions","LogShow","RichTextField","LogEdit","RadioButtonGroupInput","LogStatuses","Empty","isSubscriptionDisabled","CreateButton","scrollToTop","useMemo","_scrollToTop","UserStatusIcon","PENDING_REG","green","SUSPENDED","statusIcon","renderName","UserSearchField","getListFilters","gteMedium","UserTypeOptions","UserList","lteMedium","activeLastName","sessionPerPage","setDefaultPerPage","hasKey","hasFilterValues","StaffGrid","rightIcon","UserCreateHelp","UserEditHelp","deleteButton","alpha","DeepDeleteButton","taskByAssignedToByStatusByDueDate","assignedTo","tasks","task","deleteTask","deleteUser","userToUpdate","fromName","emailContent","MANAGER","isDeleteDisabled","classnames","Confirm","isOpen","onConfirm","getUserTypeDescription","userType","userTypeOption","getUserTypeOptions","userRecord","disableUserOptions","UserAside","SelectField","UserStatuses","validatePhone","regex","REGEX_PHONE","UserEditForm","getUserTypeAcls","aclList","setAclList","handleUserTypeChange","newAclList","row","CheckboxGroupInput","UserEdit","UserEditActions","UserEditToolbar","aside","UserShowActions","AddressField","addLabel","UserTitle","AclDisplayField","displayAcl","UserAclOptions","aclOption","listStyleType","UserShowGrid","CUSTOMER","lg","UserShow","radioButton","validateMessage","ActiveTrueOrFalse","AnnouncementForm","isRefresh","setIsRefresh","UrgencyOptions","initialValue","AnnouncementCreate","CreateActions","Create","messageRender","BooleanStringField","looseValue","AnnouncementList","justify","AnnouncementEdit","EditActions","EditToolbar","ShowActions","AnnouncementShow","nultiline","CommodityList","syncWithLocation","defaultUnits","validateQtyRequired","minValue","CommodityForm","UnitOptions","unitOptionRenderer","LocationLoadTypeOptions","InventoryFieldOptions","DialogSaveButton","setMessage","handleSave","invalid","VALIDATION_MSG","undoable","handleSubmitWithRedirect","delete","previousData","CommodityEdit","savingProps","CommodityCreate","HelpSearchField","topic","HelpList","HelpTopicOptions","formContainer","markdownViewer","overflowY","booleanInput","liveInput","textWithToolTip","HelpForm","clone","markdown","setMarkdown","onSave","HelpCreate","cloneRecord","initValues","DeleteButtonWithConfirm","handleUpdate","CloneButton","HelpEdit","AdminApp","adminHistory","Admin","disableTelemetry","dashboard","authGroups","customRoutes","layout","darkTheme","Resource","create","list","edit","show","inventorySearchReducer","dbInventories","searchInventories","scannedBarcode","allAccounts","selectedArea","selectedZone","selectedLocation","bayList","showCapacityDisplay","inventoryItemBayList","selectedInventoryItem","originalLocation","originalInventoryItem","selectedSearchAisleId","disableRelocateValidation","selectedLocationInventories","searchInventoryItemsMap","showInventoryQuantity","searchAisles","noSearch","SELECT_AN_ACCOUNT","NO_ACCOUNT","origInventoryItem","InventorySearchContext","InventorySearchProvider","useInventorySearchContext","announcements","showAnnouncements","fetchTimestamp","searchState","announcementList","isConfirmOpen","isLoading","trackRedirect","lastSelectedAisle","ErrorCard","taskSwitch","notFound","amber","inputField","topActions","Tasks","hideTitle","showAllTasks","setShowAllTasks","setTasks","getTasks","allTasks","statusDueDate","tasksResponse","toggleChecked","refresh","TaskList","getAvatarClassName","priority","labelPlacement","ListItemAvatar","ListItemSecondaryAction","handleClick","TaskItem","setTask","selectedTask","handleComplete","completedDate","saveTask","updateTask","formatDistanceToNow","dueDate","listHeader","lateDate","attachments","auditByStatusByDateOptions","auditButtonCenter","AuditSummary","currentAudit","finishAudit","isCompleted","audit","setAudit","matchCount","noMatchCount","itemsNotFound","processedItems","quantityPhysical","locationContainer","locationItem","locationAvatar","blueGrey","locationSelectedAvatar","boarder","locationCompletedAvatar","locationButtonCenter","unprocessedItem","backToInventory","selectAccount","YardLocations","buttonLabel","handleLocation","disableAccounts","setValue","inputValue","setInputValue","setAllAccounts","accountLocations","setAccountLocations","acct","getNextItem","processedLocations","completed","setSelectedAccount","listAuditInventoriesByAccount","statusAccountNameProductNameLotNumber","accountInventories","locationValues","Autocomplete","onInputChange","newInputValue","renderInput","selectLocation","OperatorsList","nextItems","operators","locationIdx","StructuredLocationCapacity","updateFn","refreshFn","showName","currentLocation","setCurrentLocation","marks","handleLocationChange","getLocation","handlePercentageChange","handlePercentageChangeCommit","updateLocation","Slider","step","onChangeCommitted","LocationCapacity","disableAisleChange","currentAisle","setCurrentAisle","handleAisleChange","getAisle","toUpdateAisle","updateAisle","getCapacityUsed","usedCapacity","isBulkArea","bulkCapacity","skipButton","boxShadow","borderBottom","expanded","errorButton","successButton","AuditItem","handleSkip","setListMode","setCurrenInventory","oldQuantityPhysical","setNote","setCompleted","completeServeyItem","AUDIT","quantityMismatch","getNoteText","getLocationViewName","selectedIdx","accountFields","outboundCustomFields","Accordion","AccordionSummary","expandIcon","heading","AccordionDetails","reverse","button","listRoot","headerText","listAuditProgress","InventoryList","handleBack","handleNext","disableBack","returnToAudit","completedLocations","setLocationMode","listMode","findIndex","skippedItems","handleSelect","closeMenuFlag","keepMounted","LinearProgress","SplitButton","selectedItem","setSelectedItem","anchorRef","handleMenuItemClick","ButtonGroup","prevOpen","Popper","transition","disablePortal","TransitionProps","Grow","ClickAwayListener","onClickAway","MenuList","locationInProgressAvatar","getColor","LocationsMap","settings","inventoryCardAvatar","AuditHelp","ViewAudit","setViewState","setCurrentAudit","setLocations","setCompletedLocations","setIndex","getSelectedAudit","inProgressAudit","getAudit","setCurrentAuditData","computeCompleted","completedCount","AuditStatus","setNextItem","progress","AuditContainer","setInventories","completedFlag","setCompletedFlag","locationMode","viewState","init","nextItem","false","setNextItems","k","saveAuditData","startDateTime","saveAudit","updatedAudit","auditId","updateAuditInventorie","newInventory","handleCompletedLocation","skipped","newInventories","PENDING_REVIEW","endDateTime","handleAddSkipped","AuditList","audits","setAudits","setSelectedAudit","getAudits","sortDirection","statusCreateDateTime","IN_PROGRESS","auditResponse","auditByStatusByDate","shipment","toUpdateAudit","updateAudit","updatedAuditRes","Audit","inboundReducer","placedShipments","newNotes","selectedOutbound","newShipmentNotes","disableSelection","displayState","inventoryItemsMap","InboundContext","InboundProvider","getAisles","aisleByActiveByZoneBySortKey","aislesResponse","filterAisles","updateInventorieInboundMini","getShipments","inboundShipmentByStateByRailcarReduced","stateRailCarNumber","inboundShipmentByStateByRailcar","PROCESS_INVENTORY_REVIEW","getShipment","getInboundShipmentMobile","saveShipment","toUpdateShipment","useInboundContext","updateOutboundShipmentMini","updateOutboundShipment","ProductLinkIcon","HeaderBlock","logoURL","maxHeight","InfoBlock","CustomFieldsDisplay","POS","shipTo","carrierType","CarrierType","RAIL","arrivalDateTime","getCustomFieldsTable","LineItemsBlock","inventoryCustomFields","posPickList","showProductCodeColumn","parseCustomFieldValue","cf","TotalsBlock","totalPCS","allMissingPCS","somePCSNull","UNIT","AttachmentsBlock","bol","bolFile","getFilePublicURL","getKeyFilename","PhotosBlock","photosRows","SealsBlock","trackOutboundSeals","sealBarCodes","colSpan","rows","renderSeals","NotesBlock","filteredNotes","OutboundPOSBody","enclosePhotos","encloseDocs","elevation","showPCSColumn","pcsColumnName","showFootageColumn","footage","footageUOM","totalMBF","allMissingMBF","someMBFNull","totalSF","allMissingSF","someSFNull","MBF","SF","LumberPOSBody","loadType","calculateMbf","calculateSqf","getOutboundPOSBody","POSComponent","ReactDOMServer","renderToString","actionButtons","reorderButtons","icons","formValidate","validatePoNumberUnicity","countOutboundShipments","autoHideDuration","validatePickupNumberUnicity","generatePickupNumber","validateOutboundUnicity","duplicateNumbers","poNumberQuery","pickupNumberQuery","poNumberResponse","pickupNumberResponse","poNumberOutbounds","pickupNumberOutbounds","handleSendPOS","ccEmail","emailPOS","historyNote","outboundHistoryToUpdate","updateOutboundClient","statusRenderer","OutboundStatusLabels","OutboundState","LOADED","ADVICE_PENDING","ADVICE_REJECTED","copyInventoryData","weight","weightUnits","setAllInventories","setLoaded","inventoryData","getAllInventories","query","statusAccountIdProductNameLotNumber","inventoryByStatusByAccountIdByProductByLot","filteredInventories","ShipmentItemEditActionButtons","ShipmentItemCreateActionButtons","RemoveInventoryButton","IconButtonWithTooltip","EditShipmentLineItemButton","toPath","confirmOpen","setConfirmOpen","ReorderButtons","handleReorder","sourceIndex","destinationIndex","reorderedValue","removed","RemoveItemButton","rowIndex","newInventoryItems","locIndex","newTotal","loc","InventoryItemsEditGridInput","getQuantityToPickLabel","InventoryItemsArrayInput","inventoryIdx","handleQuantityChange","locationIndex","calcMaxQtyOutbound","maxValue","InventoryItemsDataGrid","validateBillQty","billUnits","isBillQtyRequired","calcBillingQuantity","setCalcError","billQty","billQuantity","shippedQty","unitValue","convertUnits","calcTotalQuantity","pickList","calcNetWeight","setWeightError","totalWeight","hasWeights","inventoryWeightUnits","unitsSet","next","getInventoryWeightUnits","toUnits","convert","netWeight","getMustTarpDefaultValue","mustTarp","htmlDoc","emailBody","attachPDF","getInfoBubble","infoBubble","billRate","unit","setupAccountDetails","billToAccount","transferToAcct","setBillToAccount","sourceAccount","outboundBillingUnits","outboundInstructions","outboundSkipSignature","handlePickListQty","handlePickListWeight","hasBlanks","getWeightUnits","hasAllProducts","retVal","updateLambdaInventory","pickListItem","isAdvance","updateDateTime","quantityToPickOrig","qtyCommitedOrig","differenceInDays","createLambdaShipmentLineItem","isTransfer","shipmentLineItemInput","__typename","INVENTORY","PENDING","ADVICE_ALL","createLambdaShipmentLineItemInventoryItem","createLambdaInventoryItem","lineIteminvItem","inventoryItemInput","updateLambdaInventoryItem","updateMode","isBulkLocation","resetCapacityUsed","isOtherLoadType","BULK","createLambdaInboundTransfer","lotTypes","lotNumbers","inboundCreateInput","LotType","CARLOT","TRUCK","notifyDateTime","createLambdaInventoryTransfer","createInventoryInput","verificationRequired","updateLambdaInventoryTransfer","transferInventory","newQuantityOnHand","updateInventoryInput","updateLambdaAddressBook","addressBook","toUpdateAccount","updateLambdaOutbound","isRollback","accountUpdateinput","saveAddress","transformLambdaPickList","shipmentLineItemCreateList","shipmentLineItemUpdateList","shipmentItemInventoryItemCreateList","shipmentItemInventoryItemUpdateList","inventoryItemUpdateList","locationUpdateList","inventoryUpdateList","getActualWeight","isWeightUnits","tareWeight","ladenWeight","inventoryWeight","locationUpdateMap","actualWeight","shipmentLineItemToCreate","lineItemInventoryItemToCreate","shipmentLineItemToUpdate","updateLambdaShipmentLineItem","lineItemInventoryItemToUpdate","shipmentLineItemInventoryItem","shipmentLineItemInventoryItemInput","updateLambdaShipmentLineItemInventoryItem","inventoryItemToUpdate","isManagedLocation","previousStatus","newStatus","VERIFIED","resetLambdaCapacityUsed","inventoryToUpdate","getAddressBook","selectedAddress","handleShipToSelect","getOptionLabel","getSaveAddressControl","array","objectToFind","objectAsString","objectExistsInArray","autogenPickupNumber","incrementBOLCounter","counter","lotNumberPrefix","getBOLCounter","bolCounter","deleteLambdaPickListItem","shipmentLineItemDeleteList","shipmentItemInventoryItemDeleteList","shipmentIteminventoryItemInput","updateOutboundQuantity","initQty","newQty","outboundRecord","updateLambdaPickListItem","initPickListItem","inventoryUpdateInput","outboundUpdateInput","initInventoryItems","outboundNotes","shipmentLineItemInventoryInput","initQtyToPick","newQtyToPick","delta","initQtyCommitted","getNestedValue","dialogActions","actionButton","InventoryItemsToolbar","handleAddInventoryItem","componennt","ASSIGN_LOCATION","isTruckToRail","InboundInventoryItems","handleAdd","handleOpenInventoryItem","AGGREGATED","primaryTypographyProps","mapContainer","popvover","mapContainerMobile","bayContainer","alignContent","levelContainer","whiteSpace","locationUsedAvatar","locationUsedAvailableAvatar","selectedLocationAvatar","locationAvailableAvatar","redCircle","borderStyle","badge","StructuredInboundAisle","handleSelectLocation","getTotalItemsPlaced","getTotalItemsInLocation","totalInAisle","totalInAisleUom","handleInfoClick","Popover","p","bayIdx","Location","avatarClassName","available","isLocationAvailable","sameInventory","getFullName","getCapcityUsedText","Badge","badgeContent","QrBarcodeScanner","onScanSuccess","onScanFailure","scanner","setScanner","Html5Qrcode","useBarCodeDetectorIfSupported","cleanup","getCameras","cameras","qrboxFunction","viewfinderWidth","viewfinderHeight","minEdgeSize","qrboxSize","facingMode","fps","qrbox","decodedText","newMode","BarcodeScanDialog","setBarcode","actionButtonText","isScanned","setIsScanned","isSaveDisabled","StructuredAisleControl","handleDeleteButtonClick","scanDialogOpen","setScanDialogOpen","handleSaveBarcode","isSaveButtonDisabled","xl","isQuantityInUnits","isQuantityDisabled","newInventoryItem","setQuantity","setIsDamaged","originDamageList","searchFieldMobile","clearButton","SearchInput","term","setTerm","termLength","disableFocusRipple","TrackAisleControl","setOutbounds","getOutboundData","isCollected","searchOutboundShipmentsDropDown","doHandleSave","getQuantity","handleOutboundChange","getOutboundLocation","trackContainer","trackLocation","trackLocationCompleted","trackLocationReleased","trackLocationCurrent","carName","greenIcon","redIcon","greyIcon","whiteIcon","trackControlContainer","TrackLocation","processedCars","setProcessedCars","newCars","setNewCars","setOutboundMap","selectedShipment","setSelectedShipment","tracks","setTracks","selectedTrack","setSelectedTrack","deleteOpen","setDeleteOpen","confirmMsg","setConfirmMsg","selectedShipmentIdx","setSelectedShipmentIdx","currentLineItem","isValidated","setIsValidated","readonly","defaultShipmentId","areaType","AreaType","TRACK","aisleByActiveByAreaBySortKeyLocations","aisleByActiveByAreaBySortKey","workingTrack","PLACED","inboundPromise","outboundPromise","inboundResponse","outboundResponse","newCarsList","processedCarsList","processedOutbounds","sortLinkedCars","shipmentCar","processInboundInventories","previousShipmentStatus","processInboundInventory","processOutboundInventories","isOutbound","addItem","previousCar","topShipment","bottomShipment","processShipment","saveOutbound","lotNumberOverride","PERPETUAL","autogenLotNumber","saveInbound","removeFromTrack","toRemoveShipment","bottomCar","deleteItem","toDeleteShipment","collectedDateTime","canAdd","canDelete","getShipmentClassName","getShipmentIcon","getIconClassName","isTrackDisabled","handleTrackChange","isCarsDisabled","iconText","draggable","onDragStart","dataTransfer","drag","onDragOver","allowDrop","onDrop","toIdx","fromIdx","dragShipment","dragBottomShipment","dropShipment","dropBottomShipment","drop","openShipment","handleDeleteConfirm","TrackControl","track","useStylesLegend","greenCircle","greyCircle","whiteCircle","legendContainer","legendContainerMobile","legendBox","TrackLegend","TrackViewReadonly","setRailCarNumber","validateError","setValidateError","getTrackLocationContent","verifyInboundRailCar","toLocaleUpperCase","TrackLocationContainer","updateInventorie","updateInventoryItemMini","placedAt","BulkInboundAisle","getLocationCapcityUsedText","bulkUnits","getLocationBulkCapacityText","isBulkLocationAvailable","BulkAisleControl","UnstructuredAisleControl","InboundAisleMap","locationInventories","setLocationInventories","isDeleteInventoryItemOpen","setIsDeleteInventoryItemOpen","showInventories","setShowInventories","isLocationInventoryLoading","setIsLocationInventoryLoading","dispatchRa","useDispatch","setInventoryItemLocation","showLocationInventories","getLocationInventories","locationByAisleBySortKey","setupAisle","getShowQuantity","capacityTypeMap","showRadio","setLocationCapacity","removeFlag","isUnmanagedLocation","toLocation","capacityToRemove","capacityToAdd","promiseSetCapacityUsed","oldStatus","oldQuantityOnHand","totalQuantityOnHand","addHistory","historyText","itemHistory","doUpdateInventoryItem","doCreateInventoryItem","resError","updateInventoryItem","toCreateInventoryItem","toDelete","deleteInventoryItemMini","inventoryItemByLocationByStatusInbound","REVIEW","inventoryItemsList","inventoryItemByLocationByStatus","accountNameCompare","productNameNameCompare","searchAisleInventories","matchPhrase","searchInventorysInbound","setupAisleInventoryItems","aisleInventoryItems","clearSearchResults","showValue","handleDisplayChange","setShowQuantity","getSwitchLabel","getLocationCapacity","showAisleSearch","mx","getSelectedLocationText","isShipmentInventoryItem","InventoriesDialog","fullScreen","locationInventory","getLocationProductName","exceptionContainer","ShipmentItemCard","isExceptionDialogOpen","setIsExceptionDialogOpen","getInventorieInbound","isBulkOrContainer","itemStatus","sortByLocation","isBulkShipment","isShippingContainer","updateInventorieInbound","updatedInventory","handleInventoryPhotos","handleModelPhotos","model","saveFn","maxNumOfPhotos","MAX_PHOTO_NUM_INVENTORY","setNextState","goToShipment","isValidQuantity","refreshInventory","getErrorMessage","showQuantityShipped","getLeftButtonText","isMarkStoredDisabled","getRightButtonText","handleSaveExceptions","ExceptionDialog","setOverShipment","overShipmentNote","setOverShipmentNote","setUnderShipment","underShipmentNote","setUnderShipmentNote","setOtherException","setOtherExceptionNote","otherExceptionNoteError","setOtherExceptionNoteError","isValid","formControl","FormLabel","checkIcon","ChecklistDialog","stepName","showAllSteps","checklistItems","setCheklistItems","showAll","setShowAll","checklist","RadioGroup","Radio","checklistItem","completedBy","completedAt","SealsCreate","cancel","saveSeal","sealsNumbers","addedSeals","isScannerOpen","setIsScannerOpen","sealBarCode","setSealBarCode","setNotes","sealError","setSealError","alreadyAddedDialogOpen","setAlreadyAddedDialogOpen","notInSealsNumberDialogOpen","setNotInSealsNumberDialogOpen","save","handleAlreadyAddedDialogClose","handleNotInSealsNumberDialogClose","handleSaveAnyway","iconContainer","inValid","primaryColor","ConfirmDialog","styles","SealsList","close","onPressAddSeal","sealsList","confirmDialogOpen","setConfirmDialogOpen","selectedSeal","setSelectedSeal","getAvatarClass","clsx","getListItem","createdBy","sealInput","referenceId","referenceName","createSeal","deleteSealById","sealId","deleteInput","deleteSeal","modes","SealDialog","setIsSealDialogOpen","sealsBarCodes","updatedHistory","shipmentToUpdate","sealNumbers","dialogContent","ListFilter","allProducts","setSelectedYardCommodity","Filter","choice","newProducts","category","CatalogSearchDialog","setIsOpen","handleAddSelected","selectedYardCommodity","fixedFilter","onSelect","disableTypography","loadTypeFilter","dividers","CatalogGrid","customGridFields","savedRecord","csv2arr","str","ret","quote","cur","cellIsEmpty","processCSV","delim","setColumns","setCSVData","setCSVErrors","lengthError","headers","head","hlen","MAX_ROWS_UPLOAD","eachObject","header","ManifestUploadDialog","handleAddUpload","csvData","csvErrors","fieldMap","setFieldMap","csvArray","poColumn","productCodeColumn","productNameColumn","quantityColumn","weightColumn","missingCodeName","invalidCodeName","invalidQty","invalidWeight","poNoMatch","validateCSV","ManifestUpload","fields","defaultWeightUnits","handleCSVFile","MAX_FILE_SIZE","MAX_FILE_SIZE_MSG","fileState","reader","FileReader","onload","fetch","r","blob","readAsText","handleColumnChange","col","showWeight","hasWeight","handleInventoryDelete","promiseDeleteInventoryItem","promiseResetCapacityUsed","updateInboundQuantity","inboundRecord","resetLocation","deleteInventoryItem","inboundCustomFields","POD","podInventories","receipt","receiptFile","trackInboundSeals","cells","j","InboundPODBody","encloseAttachments","LumberPODBody","getInboundPODBody","PODComponent","validateRailCarNumberUnicity","validateInboundUnicity","railCarNumberQuery","lotNumberQuery","railCarNumberResponse","lotNumberResponse","poNumberInbounds","railCarNumberInbounds","lotNumberInbounds","validateRailcarRelease","hasInventoryRemaining","hasInventoryCommitted","AddCatalogUploadButtons","setHasAllProducts","isSearchOpen","setIsSearchOpen","uploadOpen","setUploadOpen","setAllProducts","allProductsMap","setAllProductsMap","inventoryFieldState","hasInventory","getProducts","activeName","productByAccountByActiveByName","productData","productMap","NEW_INVENTORY","isAddDisabled","isCatalogDisabled","inventoriesState","formInventories","selectedProducts","selectedId","getCustomFieldsToSave","scaleWeightUnits","inboundBillingUnits","inventoryRecords","customField","customColumn","newField","productWeight","handleInventoriesQty","poNo","CARLOT_PO_NO_CHARS","getPerpetualDate","tallySheet","handleInventoriesWeight","emailPOD","getLotNumberPrefix","setYardCommodity","yardComm","getYardCommodity","filterAreas","updateStripeUsage","billingScheme","plan","usage_type","retrieveStripeSubscription","billing_scheme","runUpdateStripeUsage","subscriptionItemId","timestamp","stripeBillingDateTime","getTime","shipmentId","transformLambdaSeals","sealUpdateList","inValidSeals","sealObject","lambdaSaveInbound","transformLamdaInventories","transData","transDataSeal","stripeUsageInput","inventoryItemDeleteList","updateDate","toUpdateLocationMap","toUpdateAggregateItemMap","aggregateInventory","getInventorieAggregate","aggregateInventoryId","toDeleteInventoryItem","aggregateItem","toUpdateAggregateItem","updatedLocation","aggregateItemUpdateList","updateInboundClient","resetShipmentExceptions","unsafeShipmentNote","brokenSealNote","handleSendPOD","QontoConnector","withStyles","alternativeLabel","borderTopWidth","StepConnector","ProcessInboundShipmentCard","getbyProductNameKey","getbyProductIdKey","QUANTITY_PLACEHOLDER","PlacedShipmentCard","photosErrorMsg","setPhotosErrorMsg","isSpeedDialgOpen","setIsSpeedDialgOpen","isSealDialogOpen","isSealsConfirmationOpen","setIsSealsConfirmationOpen","isChecklistDialogOpen","setIsChecklistDialogOpen","clonableInventoriesByProductName","setClonableInventoriesByProductName","clonableInventoriesByProductId","setClonableInventoriesByProductId","noteErrorMsg","setNoteErrorMsg","setActions","getClonableInventories","handleSpeedDialAction","colanableInventoriesByProductName","colanableInventoriesByProductId","byProductNameKey","byProductIdKey","clonableInventoryItem","getSteps","steps","InboundSteps","secondaryReview","getActiveStep","handleShipmentPhotos","MAX_PHOTO_NUM_INBOUND","handleClone","toCloneInventoryItem","toCloneInventory","validateChecklist","complete","uncompletedSteps","inboundSteps","currentShipmentStepMap","stepsMap","validateForm","isSealsConfirmed","clearForm","skip","previousState","nextState","inboundUpdateInput","handleAggregateInventories","podEmail","podPhotos","podAttachments","processOutboundShipment","shipmentInventory","inventoryByAreaByProductByStatus","aggregateInventoryItem","shipmentInventoryItem","processOutboundInventory","doCreateShipmentLineItem","createShipmentLineItem","doCreateShipmentLineItemInventoryItem","toCreateShipmentLineItemInventoryItem","createShipmentLineItemInventoryItem","lineItemInput","APPROVE_INVENTORY_REVIEW","reviewedBy","isCompleteDisabled","handleSpeedDialClose","actionFn","msg","getSealConfirmMessage","completeFlag","photoErrorSection","Stepper","connector","stepProps","labelProps","isStepFailed","isStepCompleted","Step","StepLabel","instructions","isVerificationDisabled","SpeedDial","ariaLabel","speedDial","SpeedDialIcon","onOpen","SpeedDialAction","tooltipTitle","fab","speedDialAction","tooltipOpen","setSearchInventories","qtyText","searchResult","toString","getPossiblePlacementLocations","possibleLocations","getLisItemAction","isPlaceable","handleOpen","OPEN_OPTION","ShipmentListItemMenu","setOptions","setOtherExceptionError","prop","SealsConfirmationDialog","useStickyState","stickyValue","inventoriesSection","ProcessShipments","PlacedShipmentList","searchShipments","setSearchShipments","showAccepted","setShowAccepted","getShipmentSecondaryText","carLabel","showAcceptedShipment","visibleShipments","pl","outboundReducer","outboundShipments","yardSignatureKey","carrierSignatureKey","isCarValidated","yardSignatureImg","carrierSignatureImg","OutboundContext","OutboundProvider","useOutboundContext","closeButton","emptyMessage","ScanSealsDialog","setApplySealOpen","revalidateSeal","setDeactivatedSeal","setBreakSealOpen","s","sealsToBeBroken","reValidated","brokenAt","brokenBy","isValidating","sealsError","setSealsError","onReValidate","applyNewSeal","br","gridGap","isNew","isBroken","isRevalidated","isNotRevalidated","LinkOff","ApplySealsDialog","deActivateSeal","updatedInbound","scanned","modifySeal","updatedSeal","updateSeal","updateInboundShipmentRequest","modifySealAction","updateSealData","actionType","actionText","inboundShipmentToUpdate","inboundShipmentToDispatch","breakSeal","createSealRequest","createNewSeal","SealStatus","toBeBrokenSeal","BreakSealsDialog","breakSealRequest","locationToPickAvatar","InventoryItemCard","setBayList","isMedium","scanSealOpen","setScanSealOpen","applySealOpen","breakSealOpen","deactivatedSeal","isBarcodeScanned","setIsBarcodeScanned","exceptionDialogOpen","setExceptionDialogOpen","setBarcodeExceptionNote","isHasException","setIsHasException","chooseBarcodeDamage","expectedBarcode","isValidBarcode","exceptionInputChoices","barcodeExceptionsChoices","getShipmentLineItemInventoryItemMobile","getShipmentLineItemInventoryItem","getShipmentLineItemLookup","getOutboundShipmentMobile","getInboundShipmentSeals","getLineItemAisle","locationResponse","saveLineItem","updateShipmentLineItem","skipValidation","route","invalidSeals","shipmentLineItemByInventoryForValidation","shipmentLineItemByInventory","newSeals","doSaveShipment","saveLineItemInventoryItem","lineItemInventoryItemInput","lineItemInventoryItemResponse","updateShipmentLineItemInventoryItem","handleScanBarcode","handleRemoveException","handleCreateException","exceptionNote","barcodeExceptions","MISMATCH","updatedShipment","exceptionValue","responseOutbound","shipmentHasExceptions","operations","LocationLoadType","OTHER","getLocationAvatarClassname","getRailCar","handleManagerCancelClick","trackInventorySeals","isSealValidationRequired","stopLoadingFn","getBullLocationView","isFlat","getLocationView","isCapacitySliderVisible","OUTBOUND_VERIFY","ProcessOutboundShipmentCard","OutboundShipmentCard","signatureType","setSignatureType","setCarrierSignatureImg","setYardSignatureImg","sigPad","setSigPad","invalidSigMsg","setInvalidSigMsg","goToOutbound","sortShipmentItemByLocation","getSignature","fn","download","processS3Sig","Body","readAsDataURL","onloadend","base64data","MAX_PHOTO_NUM_OUTBOUND","toUpdateShipmentItem","updateShipmentHistory","isPickListVerified","validateSignature","hasRejectedItems","skipSignature","validatePhotos","skipSealsValidation","hasRejected","isUploadEnabled","handleClickOpen","sigType","addSignature","dataUrl","toDataURL","base64Img","binaryImg","base64ToBlob","endIcon","noWrap","getNetWeight","onEntered","sigContainer","penColor","canvasProps","sigPadMobile","fromDataURL","setSignaturePad","lineItm","getListDisplay","ProcessOutboundShipmentItem","secondaryTypographyProps","ProcessOutboundShipmentList","mounted","useMounted","arrivedResponse","loadedResponse","summaryContainer","photoContainer","shipmentFilter","finishButton","ProcessOutboundShipments","AisleControl","handleAreaChange","handleZoneChange","isDisabled","setIsDisabled","canRelocateFrom","getRelocateText","borderWidth","StructuredAisle","getLocationAvatarClassName","canRelocate","spacer","AisleMap","mapLoading","setMapLoading","getInventories","loadingFlag","setOriginalLocationBayList","aisleInventories","capacityList","getFromAisleComponent","scope","a11yProps","InventoryRelocateCard","doGetInventoryItem","filterZones","inventoryArea","getZoneAisles","getInventorieAiles","updateInventorySearch","moveHistoryText","similarInventoryItem","doDeleteInventoryItem","remaingQuantity","toUpdateOriginalInventoryItem","totalCapacity","LotTypeNames","SelectProps","native","disableGutters","hidden","InventorySearchCard","isRelocateDisable","getPrimaryFieldTypgraphy","menuSelection","InventorySearch","InventorySearchContainer","narrowSearchMsg","setNarrowSearchMsg","getInventoriesByInventoryItemBarCode","andConditions","aName","bName","searchInventoryItems","invItm","inboundsForExport","inboundForExport","timeOnClock","daysOnDemurrageClock","InboundSearchField","BulkExportButton","InboundDemurrageList","ShipmentGrid","outboundsForExport","outboundForExport","OutboundSearchField","OutboundDemurrageList","InventorySearchField","LowInventoryList","exists","dedupData","filteredData","totals","InvoicePeak","setServices","formatter","getServices","serviceByAccountByStatusByName","statusName","ServiceStatus","AVAILABLE","serviceData","serviceId","subtotal","tax","InvoiceStatusIcon","bulkActionsDisplayed","transitions","InvoiceStatus","PAID","handleUndefined","getServiceName","getServiceDate","serviceDate","invoicesForExport","paymentTerms","invoiceForExport","InvoiceNo","invoiceNumber","Customer","InvoiceDate","DueDate","Terms","PaymentTerms","Memo","GoodsServices","Description","serviceNote","Quantity","Rate","unitCost","ItemAmount","ItemTaxCode","taxRate","taxCode","ItemTaxAmount","itemTax","Currency","ServiceDate","InvoiceSearchField","InvoiceAuditReport","emptyText","setTotals","mdDown","InvoiceGrid","totalAmount","AvgInventoryTurnsByAccount","setHeight","getInventoryTurnsData","days","accumulator","cumSum","cumCount","barCategoryGap","AvgInventoryTurnsByMonth","dataMap","innerHeight","getInventoryData","elementMonth","avgDays","LineChart","Line","activeDot","AvgInboundCarsByAccount","getInboundsData","cars","cardItemLeft","cardItemRight","searchContainer","InventoryCard","locationEmptyAvatar","inventoryCard","MyYardLocations","InventoryMapContent","setAuditAccount","setLocation","setAuditLocations","setAisleMap","setSelectedAisle","inventoryByStatusByAccount","LocationMap","ailses","AuditMap","LocationSearch","Maps","mapImage","MapContent","photoSize","getMap","fullSizeUrl","CardMedia","image","OutboundCarsByMonth","getOutboundCarsData","DailyInbounds","addDays","dayName","DailyOutbounds","fixedHeight","report","Reports","LocationInventories","setAisle","uomMap","setUomMap","utilization","setUtilization","portalType","getAisleUtilization","aisleUtilzation","getAisleInventories","inventoryItemByAisleByStatusLookup","PortalType","AisleContent","setInventoryItems","setCapacityUsed","setSelectedLocation","openDialog","setOpenDialog","saveLocationCapacity","getLocationCapcity","handleCapacityChange","UomQuantityTable","StructuredCapacitySlider","setMarks","uniqueCapacities","loadTypeName","tickSet","currentCapacity","canAddMore","ticks","UserContext","UserProvider","setAppUserInternal","permission","permissionList","isMultiTenant","reloadYardAccounts","setAppUser","newUser","useUser","YardUtilization","capacityArray","Utilization","UtilizationView","setSelectedArea","areaUtilization","setAreaUtilization","setSearchResult","capacitySearchTerm","setCapacitySearchTerm","capacitySearchOperator","setCapacitySearchOperator","showTotalCapacity","getAreaUtilization","currentArea","getBulkAreaUtilization","getNonBulkAreaUtilization","areaUtilzation","locationByAreaBySortKey","areaIdSortKey","bulkLocations","doSearch","searchItems","percentage","pb","UtilizationResults","LocationCard","getAisleTypeText","getBulkContent","getNonBulkContent","isLocationCapacityDisabled","getLocationInventoriesDialogTitle","Documents","docs","setDocs","getDocs","visibility","UserFileVisibility","rawFileName","searchFiles","contentDate","go","NetworkError","originalPathname","resetErrorBoundary","errorInfo","locationTitle","ListSearchField","setFoundCarMap","foundCars","foundCarMap","TrackGrid","processedCarsMap","setProcessedCarsMap","deleteConfirmMessage","setDeleteConfirmMessage","getTracks","handleDeleteItem","carsOnTrack","getShipmentColor","getShipmentRadius","deleteIcon","TrackManagementAdmin","car","setAccount","monthSlider","YearSelect","setYear","yearList","startYear","currentYear","generateYearArray","MonthRangeSlider","maxMonths","monthRnage","setMontRange","maxRange","valueLabelDisplay","createDateRangeParams","getReportData","reportForExport","shipmentForExport","inboundDate","carTrlNumber","qtyReceived","UOM","invoiceTotal","service","InboundInvoiceReport","setInvoicetotal","invoiceRunningTotal","inboundSearchInput","ReportGrid","getInOutTotalsData","shipmentsForExport","outboundDate","OutboundInvoiceReport","outboundSearchInput","loadTypes","setLoadType","setUnits","shipmentType","shipmentDate","TotalInOutReport","inboundTotal","setInboundTotal","outboundTotal","setOutboundTotal","inboundRunningTotal","outboundRunningTotal","globalError","getProduct","convertError","conversion","totalData","InventoryByLoadType","PieChart","Legend","Pie","nameKey","innerRadius","outerRadius","paddingAngle","colorsDark","colorsLight","reportFrequencyOptions","accrualOptions","UnitColumnsOptions","UnitToColumn","csvGenerate","accrual","Received","totalFees","billableItems","billable","Weight","Days","billableDays","Shipped","dateShipped","Fee","fees","fileExporter","dateString","Blob","File","getServiceRates","rates","rate","getServiceHelperText","serviceRates","setupFilters","selectAreas","handleInvoiceCreate","unitTotals","reportFile","dateRange","getReportDates","setAreaId","setZoneId","setService","setServiceRates","setFrequency","setAccrual","clearReportData","setZones","reportFrequency","activeServices","areaZones","handleServiceChange","handleFrequencyChange","handleAccrualChange","downloadExporter","getTotalFee","billableItem","getStorageFees","rateInfo","billablePeriods","conversionResult","convertedRate","getBillableDays","receivedDate","shippedDate","freeDays","inventoryStorageThreshold","firtBillingDay","billingStartDate","isAfter","billingEndDate","processReportData","setUnitTotals","setHasWeight","runningTotalFees","runningUnitTotals","billableUom","totalDaysStored","billableDaysTotal","InventoryStorageReport","setStartDate","setEndDate","currentDayOfMonth","startOfLastMonth","middleOfLastMonth","startOfThisMonth","middleOfThisMonth","startOfWeek","addWeeks","weekStartsOn","calculatePeriodDates","lastMonthEnd","endOfMonth","subDays","gt","BillableItemsDataGrid","totalElements","totalsArray","sumTotal","InventoryRecallReport","DailyRevenueReport","searchInvoicesInput","searchInvoices","aggregatedData","getColumns","Routes","Locations","DefaultError","componentStack","AppInfoDialog","ThemeProvider","rel","isTWA","reload","MenuItemClickable","clickHandler","handleMenuTap","closed","formControlOpen","formControlClosed","CustomerMenu","INVOICES_VIEW","USERS","confirmPrimary","confirmWarning","ConditionalConfirm","confirm","confirmColor","ConfirmIcon","OKIcon","CloseIcon","CancelIcon","translateOptions","handleConfirm","annpuncment","Announcements","lastAnnouncmentCheck","lastCheck","getAnnouncements","lastAnnouncmentTimestamp","announcementsByUrgencyByDate","announcementTimestamp","urgency","textOverflow","logo","selector","CustomerUserMenu","toggleAppInfoOpen","profilePath","CustomerLayout","appInfoOpen","setAppInfoOpen","svgLogo","CustomerAppBar","cardActions","centerLogo","CustomerDashboard","ReloadYardCard","ImageField","thumbWidth","thumbHeight","scaleThumb","ReloadYardsCard","handleYardChange","reloadYardAccountId","accountPromise","getCustomerReloadYardAccountMini","reloadYardPromise","accountResponse","reloadYardResponse","reloadYardAccount","getCustomerReloadYardAccount","InboundCard","rolling","notified","placed","summary","setSummary","rollingCount","notifiedCount","placedCount","OutboundCard","pending","arrived","pendingCount","arrivedCount","loadedCount","getPrice","billUnit","foundUnit","setupShipmentInvoice","addBusinessDays","PaymentTermsType","contact","billingContacts","getArea","WAREHOUSE","ServiceType","INSIDE_HANDLING","OUTSIDE_HANDLING","getServiceNote","setupStorageInvoice","createObjectURL","createTransform","prefix","accum","curr","adjustment","discount","taxTotal","calcTaxTotal","balance","createLambdaTransform","createLambdaInvoiceServices","invoiceServiceList","invoiceId","updateLambdaInbound","invoiceData","updateLambdaTransform","exportDate","invoiceUpdateList","invoiceUpdateInput","getMemo","enteringScreen","bulkActions","showSmall","Item","ItemDescription","ItemQuantity","ItemRate","InvoiceList","sessionTab","getSessionTab","setStateTabValue","accountIdStatusDueDate","setDefaultFilter","setDefaultSearchFilter","InvoiceTabs","ServiceRow","serviceName","Ledger","break","pageBreakBefore","fullwidth","InvoiceShowInboundBlock","InvoiceShowOutboundBlock","FromToBlock","toAddress","getTerms","LedgerBlock","invoiceCustomFields","FooterBlock","PrintableInvoiceBlock","EmailInvoiceBody","PrintableInvoice","PureComponent","InvoiceActions","invRef","billingEmail","setEmail","isEmailValid","setIsEmailValid","setCC","invoiceAttachments","setEncloseAttachments","emailOpen","setEmailOpen","setSending","validateEmail","REGEX_MULTI_EMAIL","trigger","documentTitle","emailInput","handleEmailSending","sendInvoice","InvoiceShow","BaseExport","maxResults","customExporter","disabledProp","renderView","exporterFromContext","useResourceContext","runningTotal","combinedFilter","fetchRelatedRecords","ExportMenuItem","ExportButton","InboundStateIcon","sortOrder","getVisibleTabs","tab","isTabEnabled","isAdviceEnabled","INBOUND_ADVICE","inboundAdviceInputs","tabId","dateReceived","pieces","visibleTabs","getSortOrder","InboundList","setVisibleTabs","setTabIndex","statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime","setSort","ShipmentTabs","adjustedValue","ShowButton","idSource","SendPOSDialogButton","enclosePhotosDefault","encloseDocsDefault","handleSend","useRefresh","setToEmail","setCcEmail","setEnclosePhotos","setEncloseDocs","useAsideStyles","exceptionButton","tableIcon","photoButton","mediaFull","InboundAside","exceptions","selectedPhoto","setSelectedPhoto","linkBackPath","handleMagnifyPhoto","InboundStatuses","InboundStates","alignRight","QuantityWithUnitsRenderer","ShipmentSetupTab","CarrierTypes","LotTypes","TallySheetTab","customColumns","jsonRecord","jsonObject","headerClassName","cellClassName","grossRender","ShipmentTraceTab","InboundShow","useQuickFilterStyles","QuickFilter","AdviceStatusIcon","OUTBOUND_ADVICE","outboundAdviceInputs","getRowClickAction","exportlineItem","quantityOutbound","didTarp","bolNumber","OutboundList","statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime","renderActionButtons","isDateAfterMaxSchedulingDay","evtType","maxScheduleDay","isDateBeforeMinSchedulingDay","minScheduleDay","isBefore","isHoliday","shouldDisableDate","override","workday","getDay","isWorkday","isYardHoliday","calculateHolidays","dList","usHolidays","holidayYear","holidayDate","lastDayOfMonth","setDay","getHolidayDate","getWorkdayStartTime","workDay","startDayTime","ampm","milliseconds","getWorkdayEndTime","endDayTime","generateDayTimeslots","setValidationError","startDateTimeList","startHour","startAmPm","startMinutes","getStartDate","bufferTime","endDateTimeList","endHour","endMinutes","endAmPm","getEndDate","slot","overflowX","dialogCloseIcon","selectedDateAvatar","blue","dateAvatar","selectedTimeslot","initializedEventType","provisional","nowWorkDay","dayStart","dayEnd","nextDay","nextWorkDay","newWorkDay","getMinScheduleDay","schedulingData","getTitle","YARD","resourceName","getTimeslotsForDate","setUnavailableTimeSlots","timeslotMap","unavailableTimeSlots","Scheduler","setSelectedTimeslot","setEvtType","setEventTypes","setSchedulingData","setTimeslots","validationError","setOverride","fetchEventTypes","defaultEventType","handleEventTypeChange","handleDateChange","selectedEventType","et","handleSelection","property","handleCreateAppointment","tempTimeslot","EventType","RESERVED","getWeek","handleMonthChange","isTimeslotDisabled","displayEmpty","todayTextColor","selectedDayBackgroundColor","disablePast","onMonthChange","allowKeyboardControl","renderDay","selectedDate","dayInCurrentMonth","dayComponent","OutboundCreateHelp","OutboundEditHelp","ValidateCreateButton","isSaving","setIsSaving","confirmMessage","setConfirmMessage","handleValidateSave","transferToAccountId","advisedBy","OUTBOUND","timeslotCreateInput","fetchData","setEventType","accountData","eventTypeData","outboundEventTypeId","getEventType","setSelectedAddress","CarrierTypesReversed","isSchedulerOpen","setIsSchedulerOpen","getSpacing","handleSchedulerOpen","ignoreEvent","handleTimeslot","scheduledDate","DateTimeInput","readOnly","TrueOrFalse","OutboundCreateActions","OutboundCreateToolbar","OutboundAdviceCreate","isDeleting","setIsDeleting","outboundDeleteInput","tempMsg","statusNote","customFieldSelect","searchArea","OutboundAdviceAside","PickListTab","posEmail","posPhotos","posAttachments","OutboundShow","fetchEventType","mdUp","isCalendarOpen","setIsCalendarOpen","OutboundAdviceEdit","LowInventoryIcon","TurnDaysIcon","daysDIff","carTralNumber","setTotal","totalsMap","totalString","InventoryStatusIcon","centerAlign","InventoryAside","InventoryStatuses","recallNote","InventorySetupTab","isOnHand","getAreaName","getZoneName","InventoryShow","HistoryTab","setExceptions","isQtyDisabled","damageExceptionNoteError","setDamageExceptionError","tempExceptions","setTempExceptinos","prevExceptions","updateIventory","isAllocatable","getInventoryItemStatus","putawayQuantity","promiseCreateInventoryItem","promiseSetCapacityAllocated","allocateCapacity","InventoryItemForm","maxPutawayQty","minPutawayQty","InventoryItemShow","initQtyAllocated","ProductCreateHelp","ProductEditHelp","validateRequiredNumber","validateNumber","getCalculateButton","isPanels","isLengthDisabled","ProductForm","loadTypeValidUOM","validUom","getValidUOM","unitEntries","handleLoadTypeChange","getUnitLabel","validateUOM","inputMode","isPieceDimensionsVisible","isInventoryFieldVisible","InventoryField","WIDTH","LENGTH","validateProductCodeUnicity","productByAccountByActiveByProductCode","activeProductCode","ProductCreate","ProductEditAside","ACCOUNTS","DeleteInactivateButton","productToUpdate","updateProduct","productUpdateInput","ProductEdit","InboundListFilter","getUsers","newFilter","taskByStatusByAssignedTo","statusAssignedToName","filterDefaultValues","ApproveButton","resolvedDate","TaskGrid","isMedkum","assignedToName","TaskTypes","updateAuditAssignee","TaskCreateHelp","TaskEditHelp","asideStyles","TaskAside","isTodayOrFutureDate","isToday","isFuture","validateCreate","due","late","TaskCreateForm","setLink","userOptions","referenceOptions","setReferenceOptions","setCategory","placedShipmentsRes","shipmentsOptions","getOutboundShipments","outboundShipmentByStatusOptions","activeAudits","auditOptions","TaskType","ACCEPT_SHIPMENT","PROCESS_OUTBOUND_SHIPMENT","CAPACITY_UTILIZATION","referencedObject","taskName","TaskCreate","setUserOptions","TaskCreateActions","TaskCreateToolbar","toUpdateInboundShippment","toUpdateOutboundShippment","TASKS","allowReassign","defaultValues","hasDependency","getInboundShipmentForUpdate","TaskEdit","TaskLinkField","TaskForm","validateDueDate","validateLateDate","formClassName","fullWidthCol","accountField","CustomerSearchField","CustomerList","canEditProfile","rowClickHandler","CustomerGrid","context","transformedData","transformedIds","newContext","CustomerAside","CustomerShow","generateEmailContent","reloadYardName","doCreateReloadYardAccount","toCreateRecord","doUpdateReloadYardAccount","ValidateSaveButton","emailDeleteHTML","fromEmail","DeleteYardButton","selectedYardId","setSelectedRYardId","newReloadYardAccounts","DeleteAccountButton","CustomerEditForm","CustomerEditActions","CustomerEditToolbar","CustomerEdit","CustomerApp","customReducers","CrewMenu","showTrackManagement","hasTracks","handleMenuClick","sidebarIsClosed","SubMenu","ExpandMore","Collapse","in","timeout","unmountOnExit","ManagerMenu","handleSubscriptions","cusomerId","return_url","session","MY_YARD","isStripeSubscriptinoLinkVisible","ManagerUserMenu","setPortalType","selectedApp","setSelectedApp","handleAppChange","ManagerLayout","storedPortal","getDefaultPortal","ManagerAppBar","ManagerDashboard","ServiceStatusIcon","UN_AVAILABLE","ServicesPeak","filteredRec","setFilteredRec","getAccountData","newAccount","unitsWithRates","accountsForExport","accountForExport","contacts","addressState","bolTemplate","AccountSearchField","AccountList","AccountTabStatus","AccountStatus","AccountsTab","AccountGrid","ARCHIVE","getSecondaryText","ContactInfoHelp","HistoryHelp","CustomSettings","BillingSetupHelp","ProductHelpEdit","ProductHelpCreate","ServiceRatesHelp","AccountCreateHelp","AccountEditHelp","missingCode","missingUnits","invalidUnits","missingCmmodity","invalidCmmodity","missingUnitValue","invalidConverts","invalidLowAlert","negativeLowAlert","dupCodes","countBy","dup","ryCommodity","comm","rowUnits","UnitConversionColumns","unitVal","low","setCustomHeaders","columnCount","headerColumns","customHeaders","CatalogHeaderMap","newHeader","preview","ErrorTextField","CatalogUpload","arrayInput","boolean","validateAccountEmail","validateLotNoPrefix","validateOptEmail","validateOptPhone","validateWebsite","REGEX_URL","isCreateForm","ContactTab","handleCorporateAccount","smDown","customHeadersToInventoryFields","inventoryFieldMap","hid","MOBILE","TALLYSHEET","validateLotPrefixUnicity","lotNoErrorrs","getCustomHeaders","allColumns","mapColumns","validateEmailUnicity","accountByEmail","accountByLotPrefix","warnings","handleDialogCconfirm","ACCOUNT","productFile","servicesState","catalogState","attachmentsState","bolState","receiptState","receiptTemplate","createService","createProduct","checkbox","DeepRemoveButton","n","lastIndexOf","handleRemove","AddButtonDefault","displayValues","CustomFieldsInput","displayOptions","CustomFieldsDisplayOptions","removeButton","allFields","validateUnicity","handleNameChange","curentPath","resourceId","allowCopy","sortField","SortedArrayField","sortedList","modifiedRecord","EditButton","handleEdit","AddressBook","GridEdit","indexedAddressBook","ListActionButtons","originalAddress","setOriginalAddress","updatedAddressBook","blur","InlineEdit","AddAddressButton","newIndex","setNewIndex","newEntryIndex","checkbodInput","validateMultiEmail","initFieldOptions","inboundPhotoOptions","num","outboundPhotoOptions","inventoryPhotoOptions","AccountSettingsTab","fieldOptions","setFieldOptions","handleTabChange","OutboundAdviceInputOptions","handleOutboundAdviceChange","handlePickupNumber","UnitWeightOptions","validatePrice","validateAlerts","BillingSetupTab","copyContactInfo","setCopyContactInfo","setBillingAddress","setBillingEmail","send1099","handleCopyContactInfoChange","handleBillingEmailChange","newAddress","handleBillingStreetChange","handleBillingCityChange","handleBillingStateChange","handleBillingZipChange","handleBillingCountryChange","fileInput","ServicesTab","taxRateOptions","taxRates","rateRender","RemoveButton","ACCESSORIAL_CHARGES","startAdornment","CatalogTab","AccountCreateActions","AccountCreateToolbar","AccountCreate","OUTSIDE_STORAGE","INSIDE_STORAGE","validateAccountCreate","ProductSearchField","openConfirm","hasCreate","productsForExport","productExport","exportList","ProductArrayList","confirmState","setConfirmState","hasDependencies","setHasDependencies","getInboundShipments","inboundCount","invoiceByAccount","invoiceCount","removeFile","deleteService","countInventories","ArchiveRestoreButton","handleArchive","newActiveState","validateUnsavedChanges","allMessages","setAllMessages","confirmMessageIdx","setConfirmMessageIdx","newMessages","unsavedWarning","emailWarning","ServiceRatesDatagrid","ServiceEditButton","confirmTitle","setConfirmTitle","confirmContent","setConfirmContent","handleConfirmRedirect","ServiceAddButton","handleCatalogUpload","oldProductMap","oldProduct","commodityCateory","updatedProductMap","newProductList","AccountEditToolbar","AccountEditActions","AccountEdit","AccountShow","EmailField","AuditProgressBar","AuditTabGrid","AuditGrid","AuditCreateHelp","AuditEditHelp","AuditCreateForm","auditAccount","setOrder","locationOpen","setLocationOpen","oldAccount","setOldAccount","oldLocations","setOldLocations","handleOrder","newWorldOrder","AuditCreateActions","AuditCreate","AuditCreateToolbar","formatDistanceStrict","AuditEditAside","AuditStatuses","taskByReference","tasksResp","idsToDelete","deleteMany","LinkEditButton","parsedAudit","NoNotesIcon","AuditReconcileTab","valueLabelTrue","TrueIcon","MoreIcon","valueLabelFalse","FalseIcon","selectField","ReportBySelect","reportBy","setReportBy","AuditReportTab","reconciledQuantityOnHand","reconciledQuantityPhysical","saveButton","AuditStatusTab","AuditEditActions","AuditEdit","setParsedAudit","seeNotes","reconcileList","parseAuditData","completeTransform","AuditEditToolbar","americanTransloadingSolutions","isButtonDisabled","customLogic","MarkPaidButton","saveInvoice","paidDate","updateInvoice","nativeEvent","stopImmediatePropagation","BulkMarkPaidButton","updateInvoices","handlePendingUpdate","setinvoices","invoiceLineItem","statusDueDateAccountName","InvoiceSetupCreateHelp","InvoiceSetupEditHelp","ChargesCreateHelp","ChargesEditHelp","HistoryEditHelp","InvoiceCreateHelp","InvoiceEditHelp","validateService","validateQuantity","InvoiceTotals","isSentOrPaid","taxAmount","calcTotals","ChargesTab","calcItemTax","taxCodeRate","getUnitOptions","cost","disableAdd","disableRemove","PCS","itemAmount","pricePerUnit","handleUnitCostChange","handleTaxChange","formDataProps","validateInvoiceUnicity","resultsMap","getInboundShipmentForValidate","getOutboundShipmentForValidate","countInvoices","duplicateInvoices","messages","getInvoiceCounter","invoiceCounter","INVOICE","lineItemsState","invoiceServiceCreateMap","inboundUpdateMap","outboundUpdateMap","invoiceServiceInputs","InvoiceSetupTab","selectedDueDate","setSelectedDueDate","selectedServiceDate","setSelectedServiceDate","isPreLoaded","setContacts","getAccountHelperText","handleDueDateChange","handleServiceDateChange","c","validateCreation","InvoiceCreate","INVOICE_DUE_DAYS","setInitialValues","initInvoice","deleteInvoiceService","removeFiles","ReopenButton","InvoiceEditAside","InvoiceStatuses","exportCSV","validateEdit","updateInvoiceService","createInvoiceService","InvoiceEdit","setIsSentOrPaid","sentDate","remittanceAddress","isInvoicable","unitOpt","CreateInvoiceButton","BulkCreateInvoiceButton","accountMap","handleCreate","invoiceCreateList","reloadYardUpdateInput","invoiceInput","updateInboundStatus","setDrawerOpen","newLotNumber","ConfirmationDrawer","DrawerToolbar","DateTimePicker","AdvanceButton","isDrawerOpen","setAdvanceRecord","setAdvanceStatus","buttonIcon","handleAdvance","remainingInventory","ListDatePicker","onDateChange","onMount","onUnmount","filterField","setDateValue","newFilterValues","newDisplayedFilters","ExportDropDown","exporterPdf","pdfLoading","setPdfLoading","gteValue","lteValue","handleExportPdf","_1","_2","_3","sortedData","aValue","bValue","isNumeric","buildHeader","inboundExportPdf","orderNumber","carNumber","amountBilled","showAmounts","showReceivedColumn","totalAmountBilled","fileName","generateFileName","ext","downloadName","includeDate","footer","templateKey","TEMPLATES_PDF","TEMPLATE_REPORT","outputFileKey","generateAndDownloadPdf","metaData","Orientations","PORTRAIT","currentDate","inboundExportCsv","listWithDrawer","advanceRecord","advanceStatus","Checklist","workFlowSteps","arraySeals","tableCellIcon","BarcodeInput","arrayValue","BooleanIconField","SealNumbersDialog","SetAllSealsValid","validSeals","setValidSeals","setInValidSeals","inValidSealNumber","setInValidSealNumber","getInvalidSealnumbers","sealsObjectItems","sealsFromObject","arraysEqual","objectEqual","handlevalidation","sealsFrominvalidObject","SealNumbersCreateDialog","messageFragment","weghtUnits","workflowType","WorkflowType","ACCEPT_STORE","INBOUND","manifestFile","inventoryState","inventoryCreateList","EditHistoryLogHelp","EditInboundSetupHelp","receiptData","EditTallySheetLogHelp","EditDispatchLogHelp","EditNoteLogHelp","CreateInboundSetupHelp","CreateTallySheetHelp","CreateNotesHelp","toSource","parent","DocData","InboundCreateHelp","InboundEditHelp","arrayInputHeader","validatePoNo","validatePieces","setShipFrom","setLotNumber","setArea","magnifiedUrl","setMagnifiedUrl","areaPromise","areaByActiveBySortKey","areaResponse","inboundInstructions","newArea","handleImageChange","photosState","lowsrc","getSealNumberButtonLabel","handlePoNumberChange","handleLotTypeChange","handleLotNoManualChange","ImageInput","fullSize","RemoveCopyButtons","newRow","calcError","selectedFields","setSelectedFields","selectedCustomFields","DispatchTab","showTodayButton","InboundCreateActions","InboundCreate","validateInboundCreate","InboundCreateToolbar","ChecklistTab","processName","handleChecklistChange","InboundStepsChoices","rejectButton","validateTallySheetSaved","validateTallyQty","setAccept","isStatusRollback","oldState","validateRollback","setOnConfirm","handleDialogConfirm","acceptTransform","rejectTransform","saveTransform","resetTrackLayout","allAccepted","allSealsValidated","notesMaxIndex","handleValidateAccept","handleValidateReject","inboundDeleteInput","inventoryDeleteList","hasInventories","allSealsValid","InboundEditActions","setReceiptFile","setReceiptNumber","getReceiptData","receiptNumber","shipDate","grossWeight","docData","arrivalDate","arrivalTime","carrierName","releaseDate","releaseTime","scaleWeightUom","scaleWeightUomName","uomName","weightUom","weightUomName","getCustomFieldIdCleansed","billingUnits","unitQty","getProductData","ppu","mbf","sf","generateReceipt","getReceiptCounter","receiptCounter","_type","transloadsLogo","TEMPLATES","TRANSLOADS_LOGO","templatePath","getTemplatePath","outputPath","downloadFile","success","ChecklistForm","validateLadenWeight","validateLoadedMinNum","isTareWeightRequired","validateTareWeight","validateRailCarNumber","isRailcarNumberRequired","validateOriginCarrier","isROriginCarrierRequired","validateTallyRowQty","qtyWarning","netReceived","isQuantityDeliveredRequired","validateTallySheetRow","gridRef","setThumbWidth","offsetWidth","EditRemoveButton","gerYardCommodityId","createInventorie","newLineItem","weightError","estNetWeight","setEstNetWeight","getActualGross","getReleaseDateTimeHelperText","handleNotifyTime","minDateMessage","handlePlaceTime","handleScaleUnitsChange","handleStartTime","handleEndTime","InboundEdit","validateInboundEdit","billingAccountId","getOutboundShipmentForInvoice","updateOutboundStatus","catch","outboundExportPdf","consignee","showShipDateColumn","outboundExportCsv","borderColorDark","borderColorLight","getShadedBackground","wd","navigationContainer","dayHeaderContainer","borderLeft","eventsContainer","monthButton","getEventsByYard","uniqueWeekPairs","queryPromises","pair","timeslotByYearByWeek","yearWeek","events","flatMap","createDateFromTime","rawHour","rawMinuteAmpm","createDateFromTimeForDay","getComputedWeekDays","weekStartDate","yardSchedule","eventDay","dayIndex","w","scheduleForDay","compareTime","EventsCalendar","disableClick","allEvents","setAllEvents","selectedEvent","setSelectedEvent","isDark","CalendarLayout","TODAY_VIEW","setWeekStartDate","setWorkdays","computedWeekDays","setComputedWeekDays","minStartTimeStr","maxEndTimeStr","businessStart","businessEnd","slotHeight","hourlySlots","currentHour","dayColumnHeight","fetchEvents","initScheduled","getEventsForDay","sorted","currentGroup","currentGroupEnd","eventStart","durationMinutes","eventEnd","groupStart","groupEnd","groupOverlappingEvents","eventDate","changeWeek","initToday","weekDay","wordWrap","groupedEvents","Navigation","disableElevation","DayHeader","Events","dayBusinessStart","group","differenceInMinutes","groupHeight","SingleEvent","inPopover","borderLeftColor","EventGroup","getBoundingClientRect","closest","pr","EventsCalendarDialog","dialogContentRef","dialogContentHeight","setDialogContentHeight","clientHeight","OutboundSetupHelpCreate","OutboundPickListHelpCreate","OutboundNotesHelpCreate","OutboundSetupHelpEdit","bolData","OutboundPickListHelpEdit","OutboundDispatchHelpEdit","OutboundNotesHelpEdit","OutboundHistoryHelpEdit","textRight","textLeft","getTotalWeight","searchLot","setSearchLot","searchAreaId","setSearchAreaId","byLocation","setSearch","handleInventorySearch","ListSwitch","setByLocation","InventorySearchDialog","updateShipment","allInventoriesMap","setAllInventoriesMap","selectedInventoryIds","setSelectedInventoryIds","selectedInventoryItemIds","setSelectedInventoryItemIds","allInventoryItemMap","processInventories","qtyMap","weightMap","wuom","inventoryListContext","shipmentItems","newShipmentItems","shipmentItemsState","newLineItemInventoryItems","newPickListItem","unionShipmentItems","uniqueLocations","uniqueLocation","currentSelectedIds","newSelectedInventoryIds","newSelectedInventoryItemIds","handleToggle","allItemsOfInventory","onToggleItem","LocationGrid","itemId","InventoryItemGrid","selectedItemIds","TransferType","INTERNAL","transformOutbound","transformTransfer","pickListState","logPath","inventoryItemCreateList","toCreateShipmentLineItem","toCreateInventory","toCreateshipmentLineItemInventoryItem","getTransferOptions","TransferOptions","getTransferToAccounts","EXTERNAL","setToAccount","setShipmentLineItems","accountIndex","setAccountIndex","acctIdx","not_available","isFinite","handleTransferToAccountChange","handleBillToAccountChange","handleTransferChange","updateShipmentLineItems","getSchedulerHelperText","onClickCapture","OutboundCreate","oldStartDate","newStartDate","AdviceApproveRejectButton","transformApprove","transformReject","appointmentDetails","weekday","emailAdviceApprovedHTML","emailAdviceRejecteddHTML","OutboundAside","Signature","invalidSignatureMessage","clearSignature","signatureRef","signatureImg","setImage","signatureBinaryImage64Img","signatureBinaryImage","updateShipmentSignature","signatureKey","storeSignature","binaryImage","OutboundSignature","isCarrierSignatureModalOpen","setCarrierSignatureModalOpen","invalidYardSignatureMessage","setInvalidYardSignatureMessage","carrierSignatureRef","isYardSignatureModalOpen","setYardSignatureModalOpen","invalidCarrierSignatureMessage","setInvalidCarrierSignatureMessage","yardSignatureRef","generateSignatureKey","s3Res","toggleCarrierSignatureModal","prev","toggleYardSignatureModal","OutboundEditActions","setBolFile","setBolNumber","getBOLData","bolProduct","generateBOL","carrierSignature","yardSignature","validateEmptyMinNum","validateLadenGreaterThanTare","validateCarrierName","isCarrierNameRequired","accounId","getToAccountHelperText","RenderExceptionIcon","AdviceDispatchTab","ShipmentDispatchTab","openSeals","setOpenSeal","click","idRequired","validateOutboundEdit","validatePickListRow","OutboundEdit","setTitle","qtyState","validateNotes","PickListItemAside","hasExceptionTemp","barcodeExceptionTemp","pickupPhoto","ShipmentLineItemStatuses","PickListEditHelp","ExceptionRenderer","barcodeExceptionSource","barcodeExceptionNoteSource","hasExceptionSource","PickListInventoryItem","committedElsewhere","PickListInventoryItems","setAddOpen","AddButton","PickLineItemTab","addOpen","setQuantityAvailable","sourcePath","sourceState","newQtyCommitted","newFieldPath","inventoryItemsState","qtyComm","qtyAvail","setOutbound","PickListItemEdit","OpenInventoryItemButton","isEditable","LocationsPeak","getLocationData","inventoryItemByInventoryByStatusMini","inventoryItemByInventoryByStatus","sortedItems","lentch","ResourceContextProvider","inventoryExportPdf","_inputStartDate","_inputEndDate","totalPieces","showPPU","showFootage","cleanCustomFields","parseCustomFieldToObject","inventoryExportCsv","totalOnHand","damaged","uomRenderer","spinner","carContainer","shipmentCurrent","inboundCompleted","released","carIndex","shipmentText","TrackLocationView","lteSmall","InboundCar","classNames","getCarClassName","getIconStyles","OutboundCar","locationAvatarDisabled","locationAvatarSelected","locationAvatarOriginal","locationAvatarAllocated","switchInput","AreaZonePicker","areaLabel","zoneLabel","showOutbounds","getAreas","setupAreasZones","filteredAreas","filteredZones","getOutbound","LocationPicker","locationInventoryItemMap","isMaxQuantity","locationName","setLocationName","getZone","setShowOutbounds","setupStructuredAisle","filteredLocations","allocatedInventoryItems","AislePicker","BulkSelector","getUtilizationQuantity","utilizationQuantity","setUtilizationQuantity","getLocationContent","locationCapacity","returnClass","isLocationUsed","showUtilizationQuantity","xsDown","TrackDisplay","OutboundSelector","outboundsFiltered","handleOutboundSelect","outboundCar","aisleName","getOutboundOptionText","StructuredLocationSelector","levelIdx","ViewInventoryButton","ViewInventoryDialog","accountComparison","productComparison","CombinedFlag","updateReconcileAudit","updateProcessedItems","reconcileAudit","validateQty","getAcceptLabel","newFormState","transformAccpet","qtyCheck","handleValidateSaveAccept","AuditStatusIcon","ValidateRequiredIcon","LinkProductDialog","setProduct","renameOpen","setRenameOpen","linkMessage","nameMessage","CreateInventoryItemButton","inList","otherDamaged","InventorySetupHelp","NotesHelp","InventoryHelp","quantityAdvised","InventoryEditActions","setProductIsOpen","validateDimensions","qtyShippedState","qtyDeliveredState","qtyOnHandState","qtyPhysicalState","qtyShippedChanged","qtyDeliveredChanged","qtyOnHandChanged","qtyPhysicalChanged","productIsOpen","setQuantityAdvised","shallowInventory","handleProductLink","customFieldsToUpdate","canAssignLocations","getQtyLablel","renderUnits","handleQuantityAdvisedChange","getWeightHelperText","HEIGHT","getInboundData","setInbound","InventoryEdit","InventoryItemHelp","maxQty","maxCapacity","locationType","inventoryItemsArray","flat","InventoryItemCreate","setLocationType","setPutawayQuantity","setLocationInventoryItemMap","updateExceptions","newExceptions","newPutawayQuantity","getLocationHelperText","Infinity","setMaxCapacity","isMinQuantity","availableCapacity","updatedBayList","structuredAllocation","handleAreaZoneLocation","handlePutawayQuantity","newQtyAllocated","handleAddStructured","newIntentoryItem","isRemoveDisabled","isFloorLoaded","locationBay","locationAbove","handleRemoveStructured","locationItems","getPutawayQuantityInput","isStructured","isAddRemoveVisible","infinity","validateMinQuantity","ExceptionsContext","ExceptionsProvider","initialExceptions","quantityLabel","InventoryItemEdit","handleOverUnderQuantity","shipmentDifference","setOriginalLocation","minOvershipmentQty","minQty","obj1","obj2","compareObjects","overUnderQuantities","updatedExceptions","getQuantityValidator","emailInviteHTML","emailWelcomeBackHTML","fetchDuplicateRecords","customerByEmailMini","userByEmailMini","customerResponse","userResponse","handleDuplicateUser","dbUser","toUpdateUser","validateEmailUniqueness","duplicateCustomer","customerByEmail","userByEmail","isReactivated","emailSubject","replyTo","UserCreateForm","UserCreateActions","UserCreateToolbar","UserCreate","activeAccountNameLastName","CustomerCreateHelp","CustomerEditHelp","customerPromise","userPromise","DialogCreateButton","duplicateUser","setDuplicateUser","ContactList","selectedContact","setSelectedContact","CustomerCreate","acls","setAcls","Help","FileHelp","CreateCategory","setCategoryOptions","useCreateSuggestionContext","onCancel","onCreate","newCategory","newCategories","validateFileUnicity","filesByRawName","FileSetupTab","categoryOptions","nameState","createLabel","FileVisibilityOptions","FileCreateActions","FileCreate","DOCUMENTS","lastModifiedDate","FileCreateToolbar","FileEditActions","FileEdit","FileEditToolbar","BulkDeepDeleteButton","deleteFiles","fileId","deleteFile","FileSearchField","FileList","categoryRender","FileGrid","ServiceHelp","invoiceServiceByService","updateService","validateRate","ServiceEditToolbar","taxState","ServiceEditActions","ServiceEdit","ServiceSetupTab","ServiceStatuses","ServiceCreateToolbar","ServiceCreateActions","ServiceCreate","AssetTypeCreateDialog","assets","setAssets","setSelectedAsset","setName","maxBookings","setMaxBookings","newlyCreatedAsset","setNewlyCreatedAsset","assetInput","maxConcurrentBookings","createAssetType","newAsset","updatedAssets","fetchAreas","searchQuery","fetchedAreas","fetchAssetTypes","setAssetTypes","assetTypeByActiveByName","fetchedAssets","getItemLabel","isYardDayDisabled","yardDay","assetTypeOptionRenderer","padEnd","EventTypeForm","assetTypes","assetType","selectedAssetType","setSelectedAssetType","previewOpen","setPreviewOpen","handleAssetTypeChange","selectedAssetTypeId","nweAssetType","maxDays","validatePositiveNumber","validateDurationAndBuffer","handlePreview","timeIntervals","validateStartTime","validateEndTime","EventTypeCreate","assetTypeId","getTimeSlotsForEvent","setHasEvents","setHasFutureEvents","futurePromise","allTimePromise","futureResponse","allTimeResponse","hasFutureEvents","hasEvents","DeleteEventTypeButton","deleteEventType","eventTypeToUpdate","updateEventType","EventTypeEdit","setChecklists","selectedChecklist","setSelectedChecklist","setChoices","getChecklists","checklistByResourceByProcess","handleProcessChange","showCopyChecklist","handleCopy","processNames","ChecklistCreate","DeleteChecklistButton","deleteChecklist","ChecklistEdit","AssetTypeForm","minConcurrentBookings","setMinConcurrentBookings","minResources","AssetTypeCreate","CreateSaveButton","DeepDeleteAssetTypeButton","deleteAssetType","setEvents","activeAssetTypeId","eventTypeByActiveByAssetType","linkedEvents","AssetTypeEdit","ManagerApp","ShowGuesser","CrewDashboard","routes","appBarTheme","overrides","RaAppBar","menuItemLink","menuItemIcon","menuItemLabel","CrewUserMenu","CrewLayout","CrewAppBar","CrewApp","CrewRoutes","useToast","enqueueSnackbar","useSnackbar","ERROR_MSG","zoneType","usTimeZoneOptions","emailYardInfoHTML","finishContainer","teal","marginRignt","stepAvatar","mardinRight","mardinLeft","getStepContent","stepKeys","useStepStyles","stepRoot","circle","alighItems","StepIcon","Setup","completeSetup","setActiveStep","showToast","validator","prevActiveStep","handleCloseSetup","StepIconComponent","menuButton","site","containerMobile","setupButton","cardTitle","logout","NewSetupContent","newYardData","setNewYardData","setSetupMode","handleTosAccept","acceptTimeStamp","userAgent","navigator","json","ok","ferror","statusText","tosSignature","PendingSetupApprovalContent","BillingPanel","paid","setPaid","processing","setProcessing","setDisabled","setPrice","stripe","useStripe","elements","useElements","displayError","empty","createPaymentMethod","billing_details","createSubscription","paymentMethodId","paymentMethod","priceId","trialDate","billingDate","trial_end","billing_cycle_anchor","proration_behavior","handlePaymentThatRequiresCustomerAction","handleRequiresPaymentMethod","onSubscriptionComplete","isRetry","paymentIntent","payment_intent","latest_invoice","confirmCardPayment","client_secret","payment_method","subscriptionId","handlePaySubmit","getElement","CardElement","StripeLogo","base","fontSmoothing","iconColor","thickness","ApprovedSetupContent","createYard","showDialog","setShowDialog","setHeader","showProgress","setShowProgress","doCreateYard","stripePromise","loadStripe","NewYardRooted","withRoot","setupMode","setAreaMap","getNewYardData","setupDataByCognitoIdByStatus","createSetupData","createAreas","createZones","doCreateUser","doCreateCommodities","doCreateCapabilities","commoditiesByActiveBySortKey","commodityId","verified","createReloadYardCommodity","capabilitiesByActiveBySortKey","createReloadYardCapability","areaList","createArea","origAreaIdsMap","zonePromiseList","createZone","dbZones","ReloadYardStatus","IN_NETWORK","lotCapacity","createReloadYard","createUser","logoSection","copyrightSection","downloadLogo","Authenticator","querySelector","setAttribute","usernameAlias","initialAuthState","AuthState","SignUp","SignIn","hideSignUp","submitButtonText","formFields","vendor","opera","MSStream","isIosBrowser","AppStoreDrawer","removeItem","protocol","host","Hub","listen","doGetReloadYard","setupCustomerData","authData","getPortalType","username","setupUserData","updateUserAttributes","setupAdminData","getUserByEmail","activeAccounts","Alert","authState","setAuthState","handleOffline","handleOnline","onAuthUIStateChange","nextAuthState","SignedIn","attributes","REGISTRATION","Snackbar","severity","maxSnack","Amplify","configure","awsExports","createHistory","basename","ReactDOM","StrictMode","serviceWorker","ready","registration","unregister","clipboardButton","copyToClipboard","clipboard","writeText","ClipboardTextField","CopyToClipboardButton","activeAreaId","eventTypeByActiveByArea","startEventTime","endEventTime","selectedDays","shortestDay","shortest","startWorkTime","endWorkTime","availableMinutes","tags","getBayNumber","locationObj","execludeAreaType","isBulk","isNotExecluded","isNotBulk","yardCommodityId","matchesYardCommodity","matchesAccount","aisleOrLocation","topDownPickOrder","qtyToPlace","toLocationLoadType","CONTAINER","checkFloorLoaded","locationBelow","fromValidation","requiredSpace","toLocationBay","fromLocation","inventoryItemBay","firstCar","outputList","previousCarMap","currentCar","forPicking","itemA","itemB","locationA","locationB","shipmentlineItems","updateInventorieId","updteinbound","updateOutbound","createAggregateInventory","inventoryPromise","productPromise","getLocationProduct","inventoryResponse","productResponse","existingInventory","createAggregateInventoryItem","getWeight","createInboundShipment","inventoryCreateInput","createInventorieId","createInventoryItemId","deAggregateInventory","inventoryByAreaByProductByStatusMax","locationInventoryItem","imgSrc","fullSizeSrc","getKeySource","sanitizeFieldRestProps","fileTitleValue","srcValue","titleValue","getCommodity","DRY_BULK","LIQUID_BULK","fromQty","fromUnits","fromRate","toRate","converstion","UnitConversion","UnitMap","unitName","commodityObject","unitOption","getInventoryFields","inventoryFields","addModelPhotos","allPhotos","b64Data","sliceSize","byteCharacters","atob","byteArrays","offset","byteNumbers","charCodeAt","byteArray","Uint8Array","fakeLink","filename","msSaveOrOpenBlob","restEndpoint","aws_cloud_logic_custom","endpoint","awsconfig","imageRequest","edits","resize","fit","encodedString","Buffer","CLOUD_FRONT_URL","filesState","MAX_FILEs_MSG","deleteList","uploadList","newFiles","TEMPLATE_BOL","TEMPLATE_RECEIPT","dateSuffix","AntSwitch","switchBase","common","white","thumb","SwitchOnOff","wrap","AreaTypeOptions","WEEK_VIEW","TEMPLATE_INBOUND","TEMPLATE_OUTBOUND","TEMPLATE_INVENTORY","OVERDUE","BOX","PALLET","SUPERSACK","BULK_MOBILE","CLEARED","COD","NET_7","NET_10","NET_14","NET_30","NET_60","OUT_OF_NETWORK","LF","SQM","GAL","L","LBS","TN","CWT","KG","MT","Name","roles","Juneteenth","Christmas","ACCEPTED","CANCELLED","LANDSCAPE","INELIGIBLE","MISSING","awsmobile","token","parsedField","CustomInput","finalSource","CustomField","getSourcePath","sourceRecord","fieldIndex","parseCustomFieldId","fieldId","fieldById","toSaveFields","mergeFields","visible","parsedFieldMap","showHeader","inline","CustomFieldsMobile","CustomFieldsTallySheet","CustomFieldsButton","setSelected","initSelection","accountCustomFields","recordCustomFields","customFieldChunks","renderCustomFieldTable","chunk","getApiKey","listApiKeys","getBarcode","listBarcodes","getCustomer","listCustomers","listCustomerReloadYardAccounts","listSetupDatas","getTask","listTasks","listAudits","getChecklist","listChecklists","listInvoices","getInvoiceService","listInvoiceServices","getService","listServices","listReloadYards","getZapierHook","listZapierHooks","getZapierAction","listZapierActions","getAssetType","listAssetTypes","listEventTypes","getTimeslot","getReloadYardCapability","listReloadYardCapabilitys","getCapability","listCapabilitys","getTag","listTags","getLocationTag","listLocationTags","getReloadYardCommodity","listReloadYardCommoditys","listCommoditys","getAnnouncement","listAnnouncements","getHelpPage","listHelpPages","getLog","listLogs","getFile","listFiles","getSeal","listSeals","getUser","apiKeyByKeyId","apiKeyByActiveByName","barcodeByInventoryItemByActiveByValue","barcodeByActiveByValue","reloadYardAccountByCustomer","customerByReloadYardByActiveByAccountNameByName","customerByAccountByActiveByName","inventoryByInboundShipmentBySortKey","inventoryByInboundShipmentByProduct","inventoryItemByAreaByStatus","inventoryItemByZoneByStatus","shipmentLineItemByInventoryItem","inventoryItemByShipmentLineItem","auditByDate","shipmentLineItemByOutboundShipmentBySortKey","outboundShipmentByStatusByActive","invoiceByReloadYard","invoiceByDueDate","invoiceServiceByInvoice","serviceByAccountByActiveByName","serviceByActiveByName","zoneBySortKey","zoneByAreaBySortKey","locationByZoneBySortKey","locationByProductBySortKey","locationByAisleByActiveBySortKey","zapByActiveByEvent","actionByActiveByEvent","reloadYardCapabilityByCapability","TagsByName","locationTagByLocationId","locationTagByTagId","reloadYardCommodityByCommodity","logByDateByUser","logByDateByTenant","filesByName","sealByReferenceId","searchCustomerReloadYardAccounts","searchProducts","searchReloadYards","searchAssetTypes","searchEventTypes","searchTimeslots","searchHelpPages","searchLogs","searchSeals","searchUsers","createAccount","deleteAccount","createApiKey","updateApiKey","deleteApiKey","createBarcode","updateBarcode","deleteBarcode","createCustomer","updateCustomer","deleteCustomer","createCustomerReloadYardAccount","updateCustomerReloadYardAccount","deleteCustomerReloadYardAccount","deleteInboundShipment","deleteSetupData","createTask","deleteInventorie","deleteShipmentLineItemInventoryItem","createAudit","deleteAudit","createChecklist","updateChecklist","deleteShipmentLineItem","createOutboundShipment","deleteOutboundShipment","createInvoice","deleteInvoice","updateArea","deleteArea","updateZone","deleteZone","createAisle","deleteAisle","createLocation","deleteLocation","createZapierHook","updateZapierHook","deleteZapierHook","createZapierAction","updateZapierAction","deleteZapierAction","updateAssetType","createEventType","createTimeslot","updateTimeslot","deleteTimeslot","deleteReloadYardCapability","createCapability","updateCapability","deleteCapability","createTag","updateTag","deleteTag","createLocationTag","updateLocationTag","deleteLocationTag","deleteReloadYardCommodity","createCommodity","updateCommodity","deleteCommodity","createAnnouncement","updateAnnouncement","deleteAnnouncement","createHelpPage","updateHelpPage","deleteHelpPage","createLog","updateLog","deleteLog","createFile","updateFile","inventoryItemByAisleByStatusForUpdate","inventoryItemByLocationByStatusMini","inventoryItemByAisleByStatusMini","inventoryItemByZoneByStatusMini","inventoryItemByAreaByStatusMini","linkText","getFileFromStorage","setSourceValue","setTitleValue","setStatus","ping","setKeyValue","sourceData","fileSourceValue","productByAccountByActiveByNameDropDown","MyDateField","createTheme","hover","typography","useNextVariants","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","errorObj","serializeError","isNetwork","subsciptionId","deleteInventorieMini"],"mappings":"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","file":"static/js/main.90191777.chunk.js","sourcesContent":["import inflection from \"inflection\";\nimport React from \"react\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { timeslotByEventTypeByDateByTime } from \"../graphql/queries\";\nimport { createTimeslot } from \"../graphql/mutations\";\n\nimport { Tooltip, Typography } from \"@material-ui/core\";\nimport { orange } from \"@material-ui/core/colors\";\n\nimport { ExceptionIcon, WarningIcon } from \"../components/common\";\nimport {\n getCustomFieldById,\n getCustomFieldId,\n parseCustomField,\n} from \"../components/common/CustomFields\";\nimport { parsePath } from \"history\";\n\nimport { logError } from \"./appUtils\";\nimport {\n NoteType,\n Priorities,\n TaskStatus,\n InventoryStatus,\n InboundTrackSteps,\n InboundState,\n Unit,\n} from \"./constants\";\nimport { isRailToTrack, isUnmanagedAisle } from \"./locationUtils\";\nimport { getUnitName, isBulkCommodity } from \"./loadTypeUtils\";\nimport { getPhotoUrl } from \"./fileUtils\";\n\nexport const getInventoryQuantity = (location, currentInventory) => {\n const inventoryLoadType =\n currentInventory.reloadYardCommodity.commodity.locationLoadType;\n const locationLoadType = location.locationLoad[inventoryLoadType];\n if (!location.capacityUsed) location.capacityUsed = 0;\n const quantity = location.capacityUsed / locationLoadType.capacity;\n return {\n quantity,\n name: `${quantity} ${getUnitName(currentInventory.inventoryUnits)}`,\n };\n};\n\n// Utility function to split an array into chunks of a given size\nexport const chunkArray = (array, size) => {\n const chunks = [];\n for (let i = 0; i < array.length; i += size) {\n chunks.push(array.slice(i, i + size));\n }\n return chunks;\n};\n\n/**\n * Handles deep redirection while maintaining a history of previous paths.\n *\n * This function updates the navigation history by redirecting to a new path while\n * preserving the state of previous navigation paths. It ensures that users can\n * navigate back through a maintained breadcrumb-like history.\n *\n * @param {object} history - The history object used for navigation (e.g., from React Router).\n * @param {string | string[]} redirectPath - The target path(s) to redirect to.\n * If an array is provided, the last element is used as the redirect destination,\n * and the remaining paths are stored as back history.\n * @param {string} [currentPath] - The current path before redirection. If provided,\n * it is added to the `backPath` stack to enable proper back navigation.\n * @param {string[]} [backPath] - The stack of previously visited paths. If `currentPath` is provided,\n * it gets pushed into this stack for back navigation tracking.\n * @param {object} [state] - The navigation state object, which can be used to pass additional\n * data along with the redirection. If provided, it is updated with `backPath` to store\n * the breadcrumb history.\n *\n * @returns {void} - This function does not return a value; it updates the `history` object\n * to trigger the redirection.\n *\n * @example\n * // Redirect to '/dashboard' while maintaining back navigation\n * deepRedirect(history, '/dashboard', '/home', ['/'], { userId: 123 });\n *\n * @example\n * // Redirect using an array of paths, keeping track of previous paths\n * deepRedirect(history, '/step5', '/current', ['/step1', '/step2', '/step3']);\n */\nexport const deepRedirect = (\n history,\n redirectPath,\n currentPath,\n backPath,\n state\n) => {\n let redirectTo = redirectPath;\n let backState = state;\n if (Array.isArray(redirectPath)) {\n redirectTo = redirectPath.pop();\n backPath = redirectPath;\n } else if (currentPath) {\n if (backPath) backPath.push(currentPath);\n else backPath = [currentPath];\n }\n\n if (backState) backState.backPath = backPath;\n else if (backPath) backState = { backPath: backPath };\n\n history.push({\n ...parsePath(redirectTo),\n state: backState,\n });\n};\n\nexport const getBackPath = (props) => {\n let backPath = props.location?.state?.backPath;\n return backPath ? backPath : [props.basePath];\n};\n\nexport const getFormTab = (props) => {\n var { location } = props;\n var tabIdx = /[^/]*$/.exec(location.pathname)[0];\n var tab = tabIdx.length === 1 ? tabIdx : \"0\";\n return tab;\n};\n\nexport const getHoursMinutesDuration = (label, startdate, endDate) => {\n if (startdate && endDate) {\n let diffTime = Math.abs(\n new Date(endDate).valueOf() - new Date(startdate).valueOf()\n );\n let hours = diffTime / (60 * 60 * 1000);\n let minutes = (hours % 1) * 60;\n [hours, minutes] = [Math.floor(hours), Math.floor(minutes)];\n\n if (hours > 0) return `${label} ${hours} hours, ${minutes} minutes`;\n else return `${label} ${minutes} minutes`;\n } else return false;\n};\n\nexport const getIndexISODate = (date) => {\n if (date) return new Date(date).toISOString();\n return \"\";\n};\n\nexport const getInventoryPrimaryField = (\n account,\n inventory,\n lineItemInventoryItem\n) => {\n if (account.inventoryPrimaryField) {\n let primaryField = inventory[account.inventoryPrimaryField];\n if (primaryField) {\n if (account.inventoryPrimaryField === \"lotNumber\")\n return { label: \"Lot Number\", value: primaryField };\n if (account.inventoryPrimaryField === \"poNumber\")\n return { label: \"PO Number\", value: primaryField };\n } else {\n primaryField = getCustomFieldById(\n inventory.customFields,\n account.inventoryPrimaryField\n );\n if (primaryField?.value) {\n return { label: primaryField.name, value: primaryField.value };\n }\n }\n }\n if (\n lineItemInventoryItem?.inventoryItem.location.locationLoad?.container\n .selected\n ) {\n return { label: \"Container\", value: inventory.productName };\n }\n return { label: \"Lot Number\", value: inventory.lotNumber };\n};\n\nexport const getLogState = (state) => {\n return state ? `| state: ${state}` : \"\";\n};\n\n// getReplyToAddress to be used if sending emails from customer's SMTP email account\nexport const getReplyToAddress = (reloadYard) => {\n const currentYard = reloadYard ? reloadYard : window.appUser.reloadYard;\n return currentYard?.email;\n};\n\nexport const isEmptyAddress = (address) => {\n // Check if address is undefined, null, or if all relevant fields are falsy\n return (\n !address ||\n (!address.name &&\n !address.street &&\n !address.city &&\n !address?.state &&\n !address.zipCode &&\n !address.country)\n );\n};\n\nexport function isFullAddress(address) {\n return (\n address?.name &&\n address?.street &&\n address?.city &&\n address?.state &&\n address?.zipCode &&\n address?.country\n );\n}\n\nexport const updateExceptionQuantity = (toUpdateInventory) => {\n const totalQuantityOnHand = toUpdateInventory.inventoryItems.items.reduce(\n (total, itm) => (total += itm.quantityOnHand),\n 0\n );\n const difference = totalQuantityOnHand - toUpdateInventory.quantityShipped;\n if (\n toUpdateInventory.isDamaged ||\n toUpdateInventory.overShipment ||\n toUpdateInventory.underShipment ||\n toUpdateInventory.otherException\n ) {\n toUpdateInventory.hasException = true;\n } else {\n toUpdateInventory.hasException = false;\n }\n if (toUpdateInventory.overShipment && difference > 0) {\n toUpdateInventory.overShipmentQuantity = difference;\n } else if (toUpdateInventory.underShipment && difference < 0) {\n toUpdateInventory.underShipmentQuantity = Math.abs(difference);\n }\n};\n\nexport const getInitQuantityOnHand = (\n inventory,\n inventoryItem,\n selectedAisle\n) => {\n let quantityOnHand = \"\";\n if (!inventory || !selectedAisle) return quantityOnHand;\n if (isBulkCommodity(inventory.reloadYardCommodity?.commodity)) {\n if (inventoryItem.quantityOnHand) return inventoryItem.quantityOnHand;\n let quantityOnHand =\n inventory.quantityShipped - (inventory.quantityDelivered || 0);\n quantityOnHand = trimDecimal(quantityOnHand);\n if (quantityOnHand < 0) quantityOnHand = \"\";\n return quantityOnHand;\n }\n\n if (isUnmanagedAisle(selectedAisle)) {\n if (inventoryItem.quantityOnHand)\n quantityOnHand = inventoryItem.quantityOnHand;\n return quantityOnHand;\n }\n return 1;\n};\n\nexport const handleNumberFieldKeyDown = (event) => {\n const key = event.key;\n const keyCode = event.keyCode || event.which; // Handle different browser behaviors\n // Allow digits, backspace (8), and delete (46)\n if (\n !/^\\d$/.test(key) &&\n keyCode !== 8 &&\n keyCode !== 46 &&\n keyCode !== 37 &&\n keyCode !== 39\n ) {\n event.preventDefault();\n return;\n }\n};\n\nexport const getTaskStatusText = (id) => {\n return TaskStatus.find((itm) => itm.id === id)?.name;\n};\n\nexport const getTaskPriorityText = (id) => {\n return Priorities.find((itm) => itm.id === id)?.name;\n};\n\nexport const historyAutoGen = (\n form,\n data,\n ignoreList = [],\n includeArrayList = [],\n includeObjectList = []\n) => {\n const formState = form.getState();\n const newHistory = [];\n const dirtyFields = Object.keys(formState.dirtyFields);\n const dirtyCustomFields = dirtyFields.filter((itm) =>\n itm.startsWith(\"customFields\")\n );\n const includeArrayMap = includeArrayList.reduce(function (map, obj) {\n const parsed = obj.split(\".\");\n map[parsed[0]] = parsed[1];\n return map;\n }, {});\n\n debugger;\n try {\n dirtyFields.forEach((key) => {\n if (!ignoreList.includes(key)) {\n if (\n key.startsWith(\"customFields\") &&\n includeArrayList.includes(\"customFields\")\n ) {\n const fieldSata = form.getFieldState(key);\n const initState = parseCustomField(fieldSata.initial);\n const newState = parseCustomField(fieldSata.value);\n\n if (initState.name === newState.name) {\n if (newState.value !== initState.value) {\n const text = initState.value\n ? `${initState.name} changed from ${initState.value} to ${newState.value}`\n : `${initState.name} set to ${newState.value}`;\n const newNote = {\n text: text,\n type: NoteType.GENERIC,\n date: new Date(),\n by: window.appUser?.fullName,\n };\n newHistory.push(newNote);\n }\n } else {\n dirtyCustomFields.forEach((customKey) => {\n if (customKey !== key) {\n const customFieldSata = form.getFieldState(key);\n const customInitState = parseCustomField(\n customFieldSata.initial\n );\n const customNewState = parseCustomField(customFieldSata.value);\n\n if (customInitState.name === customNewState.name) {\n if (newState.value !== initState.value) {\n const text = customInitState.value\n ? `${customInitState.name} changed from ${customInitState.value} to ${customNewState.value}`\n : `${customInitState.name} set to ${customNewState.value}`;\n const newNote = {\n text: text,\n type: NoteType.GENERIC,\n date: new Date(),\n by: window.appUser?.fullName,\n };\n newHistory.push(newNote);\n }\n }\n }\n });\n }\n } else if (includeArrayMap[key]) {\n // Array\n const fieldName = includeArrayMap[key];\n const fullName = key + \" \" + fieldName;\n const label = inflection.transform(fullName, [\n \"underscore\",\n \"humanize\",\n ]);\n const fieldState = form.getFieldState(key);\n const initArray = fieldState.initial || [];\n const newArray = fieldState.value || [];\n const deltaDate = new Date();\n\n // added or edited\n const added = newArray.filter((x) => !initArray.includes(x));\n\n // deleted or edited\n const deleted = initArray.filter((x) => !newArray.includes(x));\n\n deleted.forEach((item) => {\n const newNote = {\n text: `${item[fieldName]} removed from ${label}`,\n type: NoteType.GENERIC,\n date: deltaDate,\n by: window.appUser?.fullName,\n };\n newHistory.push(newNote);\n });\n\n added.forEach((item) => {\n const newNote = {\n text: `${item[fieldName]} added to ${label}`,\n type: NoteType.GENERIC,\n date: deltaDate,\n by: window.appUser?.fullName,\n };\n newHistory.push(newNote);\n });\n } else if (key.includes(\".\") && !key.includes(\"]\")) {\n // Object\n const keyValue = key.split(\".\")[0];\n if (includeObjectList.includes(keyValue)) {\n const fieldName = key.replaceAll(\".\", \" \");\n const label = inflection.transform(fieldName, [\n \"underscore\",\n \"humanize\",\n ]);\n const fieldState = form.getFieldState(key);\n const initValue = fieldState.initial;\n const newValue = fieldState.value;\n debugger;\n\n if (newValue !== initValue) {\n const text = initValue\n ? `${label} changed from ${initValue} to ${newValue}`\n : `${label} set to ${newValue}`;\n const newNote = {\n text: text,\n type: NoteType.GENERIC,\n date: new Date(),\n by: window.appUser?.fullName,\n };\n newHistory.push(newNote);\n }\n }\n } else {\n // Sting\n const label = inflection.transform(key, [\"underscore\", \"humanize\"]);\n const initValue = formState.initialValues[key];\n const newValue = formState.values[key];\n\n if (\n typeof initValue === \"string\" ||\n typeof initValue === \"number\" ||\n typeof newValue === \"string\" ||\n typeof newValue === \"number\" ||\n typeof newValue === \"boolean\" ||\n typeof newValue === \"boolean\"\n ) {\n const text = initValue\n ? `${label} changed from ${initValue} to ${newValue}`\n : `${label} set to ${newValue}`;\n const newNote = {\n text: text,\n type: NoteType.GENERIC,\n date: new Date(),\n by: window.appUser?.fullName,\n };\n newHistory.push(newNote);\n }\n }\n }\n });\n } catch (err) {\n logError(\"admin:utils:utils:historyAutoGen\", err, false);\n }\n\n if (newHistory?.length > 0) {\n if (data.history) data.history = [...data.history, ...newHistory];\n else data.history = newHistory;\n }\n return data.history;\n};\n\nexport const exportCustomField = (field, target, customHeaderMap) => {\n const fieldValues = parseCustomField(field);\n const fieldName = fieldValues.name;\n\n if (customHeaderMap.has(fieldName)) {\n target[customHeaderMap.get(fieldName)] = fieldValues.value;\n } else {\n const columnId = getCustomFieldId(fieldName);\n customHeaderMap.set(fieldName, columnId);\n target[columnId] = fieldValues.value;\n }\n};\n\nexport const splitEmails = (emailString, separator = /[,;\\s]+/) => {\n if (emailString)\n return emailString\n .split(separator)\n .map((email) => email.trim())\n .filter((email) => email !== \"\");\n return null;\n};\n\nexport function truncateText(text, maxLength = 32) {\n if (text.length > maxLength) {\n return text.substring(0, maxLength) + \"...\";\n }\n return text;\n}\n\nexport const getInventoryItemStausLabel = (inventoryItem) => {\n return inventoryItem.status === InventoryStatus.IN_TRANSIT\n ? \"Allocated\"\n : \"Stored\";\n};\n\nexport const quantityRenderer = (value, units) => {\n // Return null if value is null, undefined, or an empty string\n if (value == null || value === \"\") return \"\";\n\n // Format number with commas and always show two decimal places if there are any decimals\n const formattedValue = new Intl.NumberFormat(\"en-US\", {\n minimumFractionDigits: value % 1 !== 0 ? 2 : 0,\n maximumFractionDigits: 2,\n }).format(value);\n\n return (\n \n {`${formattedValue} ${units ? units : \"\"}`}\n \n );\n};\n\nexport const piecesRenderer = (record) => {\n const pcs = record?.pcs || record?.product?.pcs;\n if (pcs != null) return quantityRenderer(Number(pcs));\n return \"\";\n};\n\nexport const totalPiecesRenderer = (record) => {\n const pcs = record?.pcs || record?.product?.pcs;\n if (pcs == null || pcs === \"\") return \"\";\n\n const total = Number(pcs) * record.quantityOnHand;\n console.log(\"totalPiecesRenderer\", pcs, pcs == null || pcs === \"\", total);\n\n return quantityRenderer(total);\n};\n\n// TODO: USE OBJECT IN PARAMS AND DESTRUCTURING IT\nexport const exceptionRenderer = (\n record,\n position = \"left\",\n filled = false\n) => {\n const title = [];\n\n // Inventory Exceptinos\n if (record.overShipment)\n title.push(`Overshipment: ${record.overShipmentQuantity}`);\n if (record.underShipment)\n title.push(`Undershipment: ${record.underShipmentQuantity}`);\n if (record.isDamaged)\n title.push(\n record.originOfDamage ? `Damaged by ${record.originOfDamage}` : \"Damaged\"\n );\n if (record.isRecalled) title.push(`Recalled`);\n if (record.otherException) title.push(`Other Exception`);\n if (record?.barcodeException) {\n title.push(record?.barcodeExceptionNote);\n }\n if (record?.otherExceptionNote) {\n title.push(record?.otherExceptionNote);\n }\n\n // Shipment Exceptions\n if (record.unsafeShipment) title.push(`Unsafe Shipment`);\n if (record.brokenSeal) title.push(`Broken Seal`);\n\n if (record.hasException)\n return (\n \n {filled ? (\n \n ) : (\n \n )}\n \n );\n return null;\n};\n\nexport const getBarcodesString = (sealItems) => {\n if (!sealItems || sealItems?.length === 0) return null;\n const barcodes = sealItems.map((seal) => seal.barcode).join(\",\");\n return barcodes;\n};\n\n// Parse time helper function, used for events scheduling\nexport const parseTime = (timeStr) => {\n if (!timeStr || typeof timeStr !== \"string\") return null; // Prevents parsing errors\n\n const match = timeStr.match(/\\d+/g);\n if (!match || match.length < 2) return null; // Ensure valid format\n\n let [hourStr, minuteStr] = match;\n let hour = parseInt(hourStr, 10);\n const minute = parseInt(minuteStr, 10);\n const isPM = timeStr.toLowerCase().includes(\"pm\");\n\n if (isPM && hour !== 12) hour += 12;\n if (!isPM && hour === 12) hour = 0;\n\n return { hour, minute };\n};\n\nexport const generateTimeInterval = (\n start = null,\n end = null,\n disableValue = null\n) => {\n let times = [];\n const intervals = 4; // 15-minute intervals per hour\n let h = 12;\n let m = 0;\n let a = \"am\";\n\n // **(1) Default: Generate full 24-hour intervals**\n if (!start || !end) {\n for (let i = 0; i < intervals * 24; i++) {\n if (i % 4 === 0 && i > 3) h++;\n m = (i % 4) * 15;\n if (i === 48) a = \"pm\";\n if (h > 12) h = 1;\n\n times.push({\n id: `${h}:${m === 0 ? \"00\" : m}${a}`,\n name: `${h}:${m === 0 ? \"00\" : m}${a}`,\n });\n }\n return times;\n }\n\n // **(2) If start & end are defined, validate & parse them**\n const startTime = parseTime(start);\n const endTime = parseTime(end);\n if (!startTime || !endTime) {\n console.error(\"generateTimeInterval: Invalid time format.\", { start, end });\n return [];\n }\n\n let fullDayTimes = [];\n let constrainedTimes = [];\n\n h = 12;\n m = 0;\n a = \"am\";\n\n // **(3) Generate full 24-hour times (needed if disableValue is set)**\n for (let i = 0; i < intervals * 24; i++) {\n if (i % 4 === 0 && i > 3) h++;\n m = (i % 4) * 15;\n if (i === 48) a = \"pm\";\n if (h > 12) h = 1;\n\n const timeObj = {\n id: `${h}:${m === 0 ? \"00\" : m}${a}`,\n name: `${h}:${m === 0 ? \"00\" : m}${a}`,\n [disableValue]: false, // Default to available\n };\n\n const currentMinutes = ((h % 12) + (a === \"pm\" ? 12 : 0)) * 60 + m;\n\n // **(1) Constrain valid range (INCLUSIVE) if disableValue is NOT set**\n if (!disableValue) {\n if (\n currentMinutes >= startTime.hour * 60 + startTime.minute &&\n currentMinutes <= endTime.hour * 60 + endTime.minute\n ) {\n constrainedTimes.push(timeObj); // Fully available range\n }\n }\n\n // **(2) Apply `disableValue` EXCLUSIVELY INSIDE the range (EXCLUSIVE)**\n if (\n disableValue &&\n currentMinutes > startTime.hour * 60 + startTime.minute && // Greater than start\n currentMinutes < endTime.hour * 60 + endTime.minute // Less than end\n ) {\n timeObj[disableValue] = true; // Inside range: mark as \"not_available\"\n }\n\n fullDayTimes.push(timeObj);\n }\n\n // **(4) Return the correct output**\n return disableValue ? fullDayTimes : constrainedTimes;\n};\n\n/**\n * Rounds and Trims a decimal from zero to the max of specified number of digits after decimal.\n *\n * @param {number} number - The number to be rounded.\n * @param {number} [decimalPlaces=2] - The max number of decimal places to keep after rounding (default: 2).\n *\n * @returns {number} The rounded number as a float.\n */\nexport const trimDecimal = (number, decimalPlaces = 2) => {\n return Math.round(number * 10 ** decimalPlaces) / 10 ** decimalPlaces;\n};\n\nexport function getDateTimeFromTimeslot(timeslot) {\n // Parsing hour and minute from the time string\n const timeString = timeslot.time;\n let [time, modifier] = timeString.split(/(am|pm)/i); // split by 'am' or 'pm'\n let [hour, minute] = time.split(\":\");\n\n // Adjust hour for 12-hour AM/PM format\n hour = parseInt(hour, 10);\n minute = parseInt(minute, 10);\n\n if (modifier.toLowerCase() === \"pm\" && hour < 12) {\n hour += 12;\n } else if (modifier.toLowerCase() === \"am\" && hour === 12) {\n hour = 0; // Midnight case\n }\n\n // Create date object\n const date = new Date(\n timeslot.year,\n timeslot.month,\n timeslot.day,\n hour,\n minute\n );\n return date;\n}\n\nexport const getTimeSlotsForDateTime = async (timeslot) => {\n const resonse = await API.graphql(\n graphqlOperation(timeslotByEventTypeByDateByTime, {\n eventTypeId: timeslot.eventTypeId,\n yearMonthDayTime: {\n beginsWith: {\n year: timeslot.year,\n month: timeslot.month,\n day: timeslot.day,\n time: timeslot.time,\n },\n },\n })\n );\n return resonse.data.timeslotByEventTypeByDateByTime.items;\n};\n\nexport const areTimeslotsEqual = (timeslot1, timeslot2) => {\n if (!timeslot1 || !timeslot2) return false;\n\n return (\n timeslot1.year === timeslot2.year &&\n timeslot1.month === timeslot2.month &&\n timeslot1.week === timeslot2.week &&\n timeslot1.day === timeslot2.day &&\n timeslot1.time === timeslot2.time\n );\n};\n\nexport const validateAppointment = async (timeslot) => {\n if (timeslot) {\n const timeslots = await getTimeSlotsForDateTime(timeslot);\n return timeslots.length >= timeslot.eventType.numberOfResources;\n }\n return false;\n};\n\nexport const createLambdaAppointment = (\n timeslot,\n inboundId,\n outboundId,\n accountId,\n accountName\n) => {\n debugger;\n const timeslotInput = {\n ...timeslot,\n id: uuidv4(),\n owner: window.appUser.owner,\n inboundId,\n outboundId,\n accountId,\n accountName,\n transactType: \"create\",\n };\n delete timeslotInput.eventType;\n return timeslotInput;\n};\n\nexport const createAppointment = (\n timeslot,\n inboundId,\n outboundId,\n accountId,\n accountName\n) => {\n debugger;\n const timeslotInput = {\n ...timeslot,\n inboundId,\n outboundId,\n accountId,\n accountName,\n };\n delete timeslotInput.eventType;\n\n return API.graphql(\n graphqlOperation(createTimeslot, { input: timeslotInput })\n );\n};\n\nexport const updateLambdaAppointment = (timeslot) => {\n const timeslotInput = {\n ...timeslot,\n transactType: \"update\",\n };\n delete timeslotInput.eventType;\n return timeslotInput;\n};\n\nexport const deleteLambdaAppointment = (timeslotId) => {\n const timeslotInput = {\n id: timeslotId,\n transactType: \"delete\",\n };\n return timeslotInput;\n};\n\nexport const getInboundCurrentStepName = (currentShipment) => {\n if (isRailToTrack(currentShipment.areaId, currentShipment)) {\n if (!currentShipment.trackId) return InboundTrackSteps[1];\n if (\n currentShipment.state === InboundState.PROCESS_SHIPMENT ||\n currentShipment.state === InboundState.APPROVE_SHIPMENT\n ) {\n return InboundTrackSteps[1];\n }\n if (\n currentShipment.state === InboundState.PROCESS_INVENTORY ||\n currentShipment.state === InboundState.APPROVE_INVENTORY\n ) {\n return InboundTrackSteps[2];\n }\n return InboundTrackSteps[3];\n } else {\n if (\n currentShipment.state === InboundState.PROCESS_SHIPMENT ||\n currentShipment.state === InboundState.APPROVE_SHIPMENT\n ) {\n return InboundTrackSteps[1];\n }\n if (\n currentShipment.state === InboundState.PROCESS_INVENTORY ||\n currentShipment.state === InboundState.APPROVE_INVENTORY\n ) {\n return InboundTrackSteps[2];\n }\n return InboundTrackSteps[3];\n }\n};\n\nexport function extractCounter(pickupNumber) {\n // Split the string by dash '-'\n const parts = pickupNumber.split(\"-\");\n // The counter is the last element in the array\n const counter = parts[parts.length - 1];\n return counter;\n}\n\nexport const cleanUrlLink = (url) => {\n if (!url) return url;\n\n // Parse the URL with a dummy base URL to handle relative URLs\n // The dummy base URL ensures the URL constructor can parse relative URLs correctly\n const urlObj = new URL(url, \"https://dummy\");\n const path = urlObj.pathname; // Extract the pathname from the URL\n const queryParams = urlObj.searchParams; // Extract the search parameters from the URL\n\n // Split the path into segments and filter out empty segments\n const segments = path.split(\"/\").filter((segment) => segment);\n\n // Regular expression pattern to match UUIDs\n const uuidPattern =\n /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;\n\n // Transform segments, replacing UUIDs with '{id}' and decoding URI components\n const transformedSegments = segments.map((segment) => {\n if (uuidPattern.test(segment)) {\n return \"{id}\";\n }\n return decodeURIComponent(segment); // Decode URI component\n });\n\n // Add query parameter values to the transformed segments after decoding\n for (const value of queryParams.values()) {\n transformedSegments.push(decodeURIComponent(value));\n }\n\n // Join the transformed segments to form the cleaned URL\n const cleanUrl = \"/\" + transformedSegments.join(\"/\");\n return cleanUrl;\n};\n\nexport const findFirstHrefFromChildren = (children) => {\n if (Array.isArray(children) && children.length >= 1) {\n return children.find((child) => child?.props?.href)?.props?.href;\n }\n return null;\n};\n\nexport function isBarcodeRequired(account, inventory) {\n return inventory.product.isBarcodeRequired || account.isBarcodeRequired;\n}\n\nexport function getLastValueFromUrl(url) {\n const parts = url.split(\"/\").filter((part) => part !== \"\");\n let lastPart = parts[parts.length - 1];\n if (lastPart.includes(\"?\"))\n lastPart = lastPart.substring(0, lastPart.indexOf(\"?\"));\n return lastPart;\n}\n\nlet audioContext = null;\n\nexport const getAudioContext = () => {\n if (!audioContext) {\n audioContext = new AudioContext();\n }\n return audioContext;\n};\n\nexport function beep(vol, freq, duration) {\n const audioContext = getAudioContext();\n const oscillator = audioContext.createOscillator();\n const gain = audioContext.createGain();\n oscillator.connect(gain);\n oscillator.frequency.value = freq;\n oscillator.type = \"square\";\n gain.connect(audioContext.destination);\n gain.gain.value = vol * 0.01;\n oscillator.start(audioContext.currentTime);\n oscillator.stop(audioContext.currentTime + duration * 0.001);\n}\n\nexport const defaultNumberFormat = new Intl.NumberFormat(\"en-US\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n});\n\nexport const isChildNull = (children) => {\n if (!children) return true;\n if (React.isValidElement(children)) {\n const { type, props } = children;\n if (typeof type === \"function\") {\n const renderedOutput = type(props);\n return (\n renderedOutput === null ||\n renderedOutput === false ||\n (renderedOutput &&\n renderedOutput.props &&\n Object.keys(renderedOutput.props).length === 0)\n );\n }\n return type === \"div\" && Object.keys(props).length === 0;\n }\n return false;\n};\n\nexport const formatDate = (date, includeTime = false, useUTC = true) => {\n const day = useUTC\n ? String(date.getUTCDate()).padStart(2, \"0\")\n : String(date.getDate()).padStart(2, \"0\");\n const month = useUTC\n ? String(date.getUTCMonth() + 1).padStart(2, \"0\")\n : String(date.getMonth() + 1).padStart(2, \"0\");\n const year = useUTC ? date.getUTCFullYear() : date.getFullYear();\n\n let formattedDate = `${month}/${day}/${year}`;\n\n if (includeTime) {\n let hours = useUTC ? date.getUTCHours() : date.getHours();\n const minutes = useUTC\n ? String(date.getUTCMinutes()).padStart(2, \"0\")\n : String(date.getMinutes()).padStart(2, \"0\");\n const period = hours >= 12 ? \"PM\" : \"AM\";\n hours = hours % 12 || 12;\n hours = String(hours).padStart(2, \"0\");\n\n formattedDate += ` ${hours}:${minutes} ${period}`;\n }\n\n return formattedDate;\n};\n\nexport const getYardLogo = () =>\n !window?.appUser?.reloadYard?.logoImage\n ? \"\"\n : getPhotoUrl(window.appUser.reloadYard.logoImage.key);\n\nexport const getReloadYardAddress = () => ({\n city: window?.appUser?.reloadYard?.city || \"\",\n country: window?.appUser?.reloadYard?.country || \"\",\n fax: window?.appUser?.reloadYard?.fax || \"\",\n phone: window?.appUser?.reloadYard?.phone || \"\",\n state: window?.appUser?.reloadYard?.state || \"\",\n street: window?.appUser?.reloadYard?.street || \"\",\n timeZone: window?.appUser?.reloadYard?.timeZone || \"\",\n zipCode: window?.appUser?.reloadYard?.zipCode || \"\",\n yardLogo: getYardLogo(),\n yardName: window?.appUser?.reloadYard?.name,\n yardAddress1: `${window?.appUser?.reloadYard?.state}, ${window?.appUser?.reloadYard?.city}, ${window?.appUser?.reloadYard?.street}, ${window?.appUser?.reloadYard?.zipCode}`,\n yardAddress2: \"N/A\",\n yardPhoneNo: window?.appUser?.reloadYard?.phone,\n yardURL: window?.appUser?.reloadYard?.website,\n});\n\nexport const formatCurrency = (amount) => {\n return `$${amount.toLocaleString(\"en-US\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}`;\n};\n\nexport const getDayRange = (date) => {\n const startOfDay = new Date(date);\n startOfDay.setHours(0, 0, 0, 0);\n const endOfDay = new Date(date);\n endOfDay.setHours(23, 59, 59, 999);\n return [startOfDay.toISOString(), endOfDay.toISOString()];\n};\n\nexport const getLeastAndGreatestDate = (data, key) => {\n if (!Array.isArray(data) || data.length === 0)\n return { minDate: null, maxDate: null };\n\n const dates = data.reduce((acc, item) => {\n const dateValue = item[key];\n if (dateValue) {\n const parsedDate = new Date(dateValue);\n if (!isNaN(parsedDate)) {\n acc.push(parsedDate);\n }\n }\n return acc;\n }, []);\n\n const minDate = new Date(Math.min(...dates));\n const maxDate = new Date(Math.max(...dates));\n\n return { minDate, maxDate };\n};\n\nexport const isSameDay = (day1, day2) => {\n if (!day1 || !day2) return false;\n return (\n day1.getFullYear() === day2.getFullYear() &&\n day1.getMonth() === day2.getMonth() &&\n day1.getDate() === day2.getDate()\n );\n};\n\nexport const getFormattedStartAndEndDate = (\n data,\n inputStartDate,\n inputEndDate,\n key\n) => {\n if (!inputStartDate || !inputEndDate) {\n const { minDate, maxDate } = getLeastAndGreatestDate(data, key);\n inputStartDate = inputStartDate || minDate;\n inputEndDate = inputEndDate || maxDate;\n }\n\n if (\n isNaN(new Date(inputStartDate)?.getUTCDay()) &&\n isNaN(new Date(inputEndDate)?.getUTCDay())\n ) {\n inputStartDate = new Date();\n inputEndDate = new Date();\n }\n\n let startDate = new Date(inputStartDate);\n let endDate = new Date(inputEndDate);\n let today = new Date();\n\n const localStartDate = startDate;\n const localEndDate = endDate;\n\n const similarDates = isSameDay(localStartDate, localEndDate);\n const isToday = isSameDay(localStartDate, today);\n\n const formattedStartDate = isToday\n ? formatDate(today, true, false)\n : formatDate(localStartDate);\n const formattedEndDate = similarDates ? \"\" : formatDate(localEndDate);\n\n return { formattedStartDate, formattedEndDate };\n};\n\nexport const areAllSealsValid = (advisedSeals, enteredSeals) => {\n if (!advisedSeals && !enteredSeals) {\n return true;\n }\n const updatedSeals = enteredSeals\n .filter((el) => el.validated)\n .map((el) => el.barcode);\n function arraysEqualIgnoreOrder(arr1, arr2) {\n if (arr1?.length !== arr2?.length) return false;\n\n // Sort the arrays\n const sortedArr1 = [...arr1].sort();\n const sortedArr2 = [...arr2].sort();\n\n // Compare the sorted arrays\n return sortedArr1.every((value, index) => value === sortedArr2[index]);\n }\n if (\n updatedSeals.length === enteredSeals.length &&\n arraysEqualIgnoreOrder(updatedSeals, advisedSeals)\n ) {\n return true;\n } else {\n return false;\n }\n};\n\nexport const isShipmentUnits = (uom) => {\n return [Unit.CAR, Unit.TL].includes(uom);\n};\n","export const updateInboundShipmentMini = /* GraphQL */ `\n mutation UpdateInboundShipment(\n $input: UpdateInboundShipmentInput!\n $condition: ModelInboundShipmentConditionInput\n ) {\n updateInboundShipment(input: $input, condition: $condition) {\n id\n }\n }\n`;\n\nexport const updateInboundShipment = /* GraphQL */ `\n mutation UpdateInboundShipment(\n $input: UpdateInboundShipmentInput!\n $condition: ModelInboundShipmentConditionInput\n ) {\n updateInboundShipment(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n stepName\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n sealNumbers\n seals {\n items {\n id\n active\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n createdAt\n createdBy\n brokenAt\n brokenBy\n validated\n description\n updatedAt\n }\n }\n instructions\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n accountNumber\n lotNumberPrefix\n businessName\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n history {\n type\n date\n by\n text\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n inboundPhotos\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n inventoryCustomFields {\n id\n name\n type\n display\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n secondaryReview\n services {\n nextToken\n }\n products {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n otherException\n otherExceptionNote\n status\n unloadedBy\n unloadedDateTime\n history {\n type\n date\n by\n text\n }\n areaId\n zoneId\n aisleId\n locationId\n location {\n id\n name\n type\n area {\n name\n prefix\n areaType\n }\n zone {\n name\n prefix\n accountId\n }\n aisle {\n id\n name\n type\n bays\n levels\n capacityUsed\n length\n width\n }\n bay\n level\n position\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n }\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n invoiceId\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n zoneType\n sortKey\n areaId\n createdAt\n updatedAt\n }\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createInboundShipmentId = /* GraphQL */ `\n mutation CreateInboundShipment(\n $input: CreateInboundShipmentInput!\n $condition: ModelInboundShipmentConditionInput\n ) {\n createInboundShipment(input: $input, condition: $condition) {\n id\n }\n }\n`;\n\nexport const deleteInboundShipmentMini = /* GraphQL */ `\n mutation DeleteInboundShipment(\n $input: DeleteInboundShipmentInput!\n $condition: ModelInboundShipmentConditionInput\n ) {\n deleteInboundShipment(input: $input, condition: $condition) {\n id\n }\n }\n`;\n","export const updateSetupData = /* GraphQL */ `\n mutation UpdateSetupData(\n $input: UpdateSetupDataInput!\n $condition: ModelSetupDataConditionInput\n ) {\n updateSetupData(input: $input, condition: $condition) {\n id\n groups\n status\n cognitoId\n }\n }\n`;\n\nexport const updateLocationMini = /* GraphQL */ `\n mutation UpdateLocation(\n $input: UpdateLocationInput!\n $condition: ModelLocationConditionInput\n ) {\n updateLocation(input: $input, condition: $condition) {\n id\n updatedAt\n }\n }\n`;\n\nexport const updateCustomerMini = /* GraphQL */ `\n mutation UpdateCustomer(\n $input: UpdateCustomerInput!\n $condition: ModelCustomerConditionInput\n ) {\n updateCustomer(input: $input, condition: $condition) {\n id\n updatedAt\n }\n }\n`;\n\nexport const updateUserMini = /* GraphQL */ `\n mutation UpdateUser(\n $input: UpdateUserInput!\n $condition: ModelUserConditionInput\n ) {\n updateUser(input: $input, condition: $condition) {\n id\n }\n }\n`;\n\nexport const updateReloadYard = /* GraphQL */ `\n mutation UpdateReloadYard(\n $input: UpdateReloadYardInput!\n $condition: ModelReloadYardConditionInput\n ) {\n updateReloadYard(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n timeZone\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n # documents {\n # items {\n # id\n # owner\n # groups\n # active\n # reloadYardId\n # accountId\n # displayName\n # rawFileName\n # description\n # contentDate\n # category\n # createdAt\n # updatedAt\n # }\n # nextToken\n # }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n }\n logoImage {\n bucket\n region\n key\n }\n areas {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n zoneType\n sortKey\n }\n nextToken\n }\n }\n nextToken\n }\n zones {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n zoneType\n sortKey\n }\n nextToken\n }\n aisles {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n areaId\n zoneId\n capacityUsed\n type\n bays\n levels\n length\n width\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n yardCommodities {\n items {\n id\n active\n reloadYardId\n commodityId\n units\n sortKey\n commodity {\n id\n name\n }\n }\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n schedule {\n workdays {\n id\n name\n startDayTime\n endDayTime\n selected\n }\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n eventTypes {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n schedule {\n workdays {\n id\n name\n startDayTime\n endDayTime\n selected\n }\n holidays\n minNoticeHours\n maxDaysIntoFuture\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const updateReloadYardMini = /* GraphQL */ `\n mutation UpdateReloadYard(\n $input: UpdateReloadYardInput!\n $condition: ModelReloadYardConditionInput\n ) {\n updateReloadYard(input: $input, condition: $condition) {\n id\n updatedAt\n }\n }\n`;\n\nexport const createCustomerReloadYardAccountMini = /* GraphQL */ `\n mutation CreateCustomerReloadYardAccount(\n $input: CreateCustomerReloadYardAccountInput!\n $condition: ModelCustomerReloadYardAccountConditionInput\n ) {\n createCustomerReloadYardAccount(input: $input, condition: $condition) {\n id\n updatedAt\n }\n }\n`;\n\nexport const updateCustomerReloadYardAccountMini = /* GraphQL */ `\n mutation UpdateCustomerReloadYardAccount(\n $input: UpdateCustomerReloadYardAccountInput!\n $condition: ModelCustomerReloadYardAccountConditionInput\n ) {\n updateCustomerReloadYardAccount(input: $input, condition: $condition) {\n id\n updatedAt\n }\n }\n`;\n","import * as React from \"react\";\n\nimport { TextField, MenuItem } from \"@material-ui/core\";\nimport { useInput } from \"react-admin\";\nimport { useTranslate } from \"react-admin\";\n\nconst getMessage = (error) =>\n error && typeof error === \"string\"\n ? { message: error, args: undefined }\n : error && error.args\n ? { message: error.message, args: error.args }\n : { message: \"\", args: undefined };\n\nconst BoundedSelectInput = (props) => {\n const translate = useTranslate();\n const {\n input,\n meta: { touched, error },\n isRequired,\n } = useInput(props);\n const { allowEmpty, disabled, fullWidth, variant } = props;\n const errorMessage = getMessage(error);\n const message = translate(errorMessage.message, errorMessage.args);\n const choices = allowEmpty\n ? [{ id: undefined, name: undefined }, ...props.choices]\n : props.choices;\n\n return (\n \n {choices?.map((itm) => (\n \n {itm.name ? itm.name :  }\n \n ))}\n \n );\n};\n\nexport default BoundedSelectInput;\n","import * as React from \"react\";\n\nimport { TextField } from \"@material-ui/core\";\nimport { useInput } from \"react-admin\";\nimport { useTranslate } from \"react-admin\";\n\nconst getMessage = (error) =>\n error && typeof error === \"string\"\n ? { message: error, args: undefined }\n : error && error.args\n ? { message: error.message, args: error.args }\n : { message: \"\", args: undefined };\n\nconst BoundedTextInput = (props) => {\n const translate = useTranslate();\n const {\n input: { name, onChange, ...rest },\n meta: { touched, error },\n isRequired,\n } = useInput(props);\n const { disabled, fullWidth, variant, inputProps } = props;\n const errorMessage = getMessage(error);\n const message = translate(errorMessage.message, errorMessage.args);\n\n return (\n \n );\n};\n\nexport default BoundedTextInput;\n","import React, { useEffect, useState } from \"react\";\n\nimport { minLength, maxLength } from \"react-admin\";\n\nimport { Grid } from \"@material-ui/core\";\n\nimport { CountryList } from \"../../utils/constants\";\nimport BoundedSelectInput from \"./BoundedSelectInput\";\nimport BoundedTextInput from \"./BoundedTextInput\";\nimport { isEmptyAddress } from \"../../utils/utils\";\n\n// Function to access nested property or array index based on the source\nconst getValueFromSource = (source, allValues) => {\n if (source.includes(\"[\")) {\n // Handle array-style source like addressBook[1]\n const arrayKey = source.match(/[^[\\]]+/g); // Extract parts of the path\n if (arrayKey && arrayKey.length >= 2) {\n const objectKey = arrayKey[0]; // 'addressBook'\n const index = parseInt(arrayKey[1], 10); // Index, e.g., '1'\n return allValues[objectKey]?.[index]; // Safely access the array item\n }\n } else {\n // Handle direct property access like account.address\n return allValues[source];\n }\n return undefined;\n};\n\nconst validateAddress = (value, allValues, source, required) => {\n // Get the corresponding value from allValues based on the source\n const sourceValue = getValueFromSource(source, allValues);\n\n // Perform validation\n const retval =\n (!isEmptyAddress(sourceValue) && !value) || (required && !value)\n ? \"Required\"\n : undefined;\n return retval;\n};\n\nconst validateState = (source, required) => [\n minLength(2, \"2 Letter\"),\n maxLength(2),\n (value, allValues) => validateAddress(value, allValues, source, required),\n];\nconst validateZip = (source, required) => [\n minLength(5),\n (value, allValues) => validateAddress(value, allValues, source, required),\n];\n\nexport const AddressInput = (props) => {\n const {\n source,\n allValues,\n showBusinessName = false,\n required,\n ...rest\n } = props;\n const truncatedSource = source.endsWith(\".\") ? source.slice(0, -1) : source;\n const sourceValue = getValueFromSource(truncatedSource, allValues);\n\n const [isRequired, setIsRequired] = useState(\n !isEmptyAddress(sourceValue) || required\n );\n\n useEffect(() => {\n setIsRequired(!isEmptyAddress(sourceValue) || required);\n }, [sourceValue]);\n\n return (\n \n {showBusinessName && (\n \n \n validateAddress(value, allValues, truncatedSource, required)\n }\n isRequired={isRequired}\n {...rest}\n />\n \n )}\n \n \n validateAddress(value, allValues, truncatedSource, required)\n }\n isRequired={isRequired}\n {...rest}\n />\n \n \n \n validateAddress(value, allValues, truncatedSource, required)\n }\n isRequired={isRequired}\n {...rest}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n validateAddress(value, allValues, truncatedSource, required)\n }\n {...rest}\n />\n \n \n );\n};\n","var map = {\n\t\"./amplify-amazon-button_5.entry.js\": [\n\t\t1323,\n\t\t28\n\t],\n\t\"./amplify-auth-container.entry.js\": [\n\t\t1324,\n\t\t29\n\t],\n\t\"./amplify-auth-fields_9.entry.js\": [\n\t\t1325,\n\t\t30\n\t],\n\t\"./amplify-authenticator.entry.js\": [\n\t\t1326,\n\t\t12\n\t],\n\t\"./amplify-button_3.entry.js\": [\n\t\t1327,\n\t\t31\n\t],\n\t\"./amplify-chatbot.entry.js\": [\n\t\t1350,\n\t\t5\n\t],\n\t\"./amplify-checkbox.entry.js\": [\n\t\t1328,\n\t\t32\n\t],\n\t\"./amplify-confirm-sign-in_7.entry.js\": [\n\t\t1329,\n\t\t13\n\t],\n\t\"./amplify-container.entry.js\": [\n\t\t1330,\n\t\t33\n\t],\n\t\"./amplify-federated-buttons_2.entry.js\": [\n\t\t1331,\n\t\t34\n\t],\n\t\"./amplify-federated-sign-in.entry.js\": [\n\t\t1332,\n\t\t35\n\t],\n\t\"./amplify-form-field_4.entry.js\": [\n\t\t1333,\n\t\t36\n\t],\n\t\"./amplify-greetings.entry.js\": [\n\t\t1334,\n\t\t37\n\t],\n\t\"./amplify-icon-button.entry.js\": [\n\t\t1335,\n\t\t38\n\t],\n\t\"./amplify-icon.entry.js\": [\n\t\t1336,\n\t\t14\n\t],\n\t\"./amplify-link.entry.js\": [\n\t\t1337,\n\t\t39\n\t],\n\t\"./amplify-nav_2.entry.js\": [\n\t\t1338,\n\t\t40\n\t],\n\t\"./amplify-photo-picker.entry.js\": [\n\t\t1339,\n\t\t41\n\t],\n\t\"./amplify-picker.entry.js\": [\n\t\t1340,\n\t\t42\n\t],\n\t\"./amplify-radio-button_3.entry.js\": [\n\t\t1341,\n\t\t15\n\t],\n\t\"./amplify-s3-album.entry.js\": [\n\t\t1342,\n\t\t16\n\t],\n\t\"./amplify-s3-image-picker.entry.js\": [\n\t\t1343,\n\t\t17\n\t],\n\t\"./amplify-s3-image.entry.js\": [\n\t\t1344,\n\t\t18\n\t],\n\t\"./amplify-s3-text-picker.entry.js\": [\n\t\t1345,\n\t\t19\n\t],\n\t\"./amplify-s3-text.entry.js\": [\n\t\t1346,\n\t\t20\n\t],\n\t\"./amplify-select-mfa-type.entry.js\": [\n\t\t1347,\n\t\t43\n\t],\n\t\"./amplify-sign-in-button.entry.js\": [\n\t\t1348,\n\t\t21\n\t],\n\t\"./amplify-tooltip.entry.js\": [\n\t\t1349,\n\t\t44\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 1272;\nmodule.exports = webpackAsyncContext;","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n \"This web app is being served cache-first by a service \" +\n \"worker. To learn more, visit https://bit.ly/CRA-PWA\"\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker === null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n \"New content is available and will be used when all \" +\n \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\"\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\");\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { \"Service-Worker\": \"script\" },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get(\"content-type\");\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n \"No internet connection found. App is running in offline mode.\"\n );\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","import {\n buildDataProvider,\n // AmplifyFilter\n} from \"react-admin-amplify\";\n\nimport * as mutations from \"../graphql/mutations\";\nimport { createInventoryItem } from \"../graphql/inventory/custom-mutations\";\nimport { updateReloadYard } from \"../graphql/reloadyard/custom-mutations\";\n\nimport * as queries from \"../graphql/queries\";\n\nimport {\n getAccount,\n accountByActiveByName,\n getInvoice,\n invoiceByStatusByDateByAccount,\n invoiceByAccountByStatusByDate,\n searchAccounts,\n} from \"../graphql/account/custom-queries\";\nimport {\n getInboundShipment,\n inboundShipmentByReloadYardByStatusByDates,\n inboundShipmentByAccountByStatusByDates,\n searchInboundShipments,\n} from \"../graphql/inbound/custom-queries\";\nimport {\n getInventorie,\n inventoryByStatusByAccountByProductByLot,\n searchInventorys,\n getInventoryItem,\n} from \"../graphql/inventory/custom-queries\";\nimport {\n getOutboundShipment,\n outboundShipmentByReloadYardByStatusByDates,\n outboundShipmentByAccountByStatusByDates,\n searchOutboundShipments,\n getShipmentLineItem,\n} from \"../graphql/outbound/custom-queries\";\nimport { getReloadYard } from \"../graphql/reloadyard/custom-queries\";\n\nconst newQueries = {\n ...queries,\n getReloadYard,\n getInboundShipment,\n getInvoice,\n getOutboundShipment,\n getInventorie,\n getInventoryItem,\n getAccount,\n accountByActiveByName,\n inventoryByStatusByAccountByProductByLot,\n inboundShipmentByReloadYardByStatusByDates,\n inboundShipmentByAccountByStatusByDates,\n invoiceByStatusByDateByAccount,\n invoiceByAccountByStatusByDate,\n outboundShipmentByReloadYardByStatusByDates,\n outboundShipmentByAccountByStatusByDates,\n searchAccounts,\n searchInventorys,\n searchInboundShipments,\n searchOutboundShipments,\n getShipmentLineItem,\n};\n\nconst newMutations = {\n ...mutations,\n updateReloadYard,\n createInventoryItem,\n};\n\nconst dataProvider = buildDataProvider({\n queries: newQueries,\n mutations: newMutations,\n});\n\nexport const myDataProvider = {\n ...dataProvider,\n getList: async (resource, params) => {\n debugger;\n const data = dataProvider.getList(resource, params);\n return data;\n },\n getOne: async (resource, params) => {\n debugger;\n const data = dataProvider.getOne(resource, params);\n return data;\n },\n};\n","import { useEffect } from \"react\";\nimport { logError } from \"../../utils/appUtils\";\n\nexport const ForceTitle = ({ title }) => {\n useEffect(() => {\n try {\n const titleElm = document.getElementById(\"react-admin-title\");\n const nodes = titleElm.childNodes;\n if (nodes.length === 0) {\n const titleSpan = document.createElement(\"span\");\n titleSpan.innerText = title;\n titleElm.appendChild(titleSpan);\n } else if (nodes.length === 2) {\n titleElm.firstChild.innerText = \"\";\n }\n } catch (err) {\n logError(\"commong:ForceTitle\", err, false);\n }\n });\n\n return title;\n};\n","import React, { useState } from \"react\";\nimport {\n DateField,\n Datagrid,\n FilterButton,\n List,\n RefreshButton,\n SimpleList,\n TextField,\n TextInput,\n TopToolbar,\n} from \"react-admin\";\n\nimport {\n useMediaQuery,\n Divider,\n Tab,\n Tabs,\n Typography,\n} from \"@material-ui/core\";\n\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { NewCustomerStatusOptions } from \"../../../utils/constants\";\n\nconst tabs = NewCustomerStatusOptions;\n\nconst getListFilters = () => [\n ,\n ,\n];\n\nconst ListActions = (props) => {\n return (\n \n \n \n \n );\n};\n\nconst SetupList = (props) => {\n const [tabValue, setTabValue] = useState(\n sessionStorage.getItem(\"SetupDataTab\")\n ? sessionStorage.getItem(\"SetupDataTab\")\n : 1\n );\n\n const initFilterValues = {\n setupDataByStatusBySubmitDate: {\n status: tabs[tabValue].id,\n },\n };\n\n return (\n }\n filter={initFilterValues}\n sort={{ field: \"submitDate\", order: \"DESC\" }}\n filters={getListFilters()}\n actions={}\n bulkActionButtons={false}\n >\n \n \n );\n};\n\nconst SetupDataGrid = ({ tabValue, setTabValue, ...props }) => {\n const handleChange = (event, value) => {\n sessionStorage.setItem(\"SetupDataTab\", value);\n setTabValue(value);\n };\n\n return (\n <>\n \n {tabs.map((itm, idx) => (\n \n ))}\n \n \n {tabs.map(\n (itm) =>\n itm.id === tabs[tabValue].id && (\n \n )\n )}\n \n );\n};\n\nconst SetupGrid = ({ tabValue, ...props }) => {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n debugger;\n return isXSmall ? (\n record.businessName}\n secondaryText={(record) => (\n {`${record.firstName} ${record.lastName}`}\n )}\n tertiaryText={(record) => record.submitDate}\n // rightIcon={() => }\n linkType=\"edit\"\n />\n ) : isSmall ? (\n \n \n \n \n \n \n ) : (\n \n \n \n \n \n \n \n );\n};\n\nexport default SetupList;\n","import React from \"react\";\nimport { Auth } from \"aws-amplify\";\nimport { logError } from \"../utils/appUtils\";\n\nconst Logout = () => {\n debugger;\n\n try {\n setTimeout(() => Auth.signOut(), 1);\n } catch (err) {\n logError(\"src:components:Logout\", err, false);\n }\n return <>;\n};\n\nexport default Logout;\n","import React, { useCallback, useEffect } from \"react\";\nimport { sanitizeListRestProps, useTranslate } from \"ra-core\";\nimport { PaginationActions, PaginationLimit } from \"react-admin\";\nimport { TablePagination, Toolbar, useMediaQuery } from \"@material-ui/core\";\n\nconst emptyArray = [];\n\nexport const Pagination = React.memo(\n ({\n loading,\n page,\n perPage,\n rowsPerPageOptions,\n total,\n setPage,\n setPerPage,\n actions,\n limit,\n ...rest\n }) => {\n useEffect(() => {\n if (page < 1 || isNaN(page)) {\n setPage(1);\n }\n }, [page, setPage]);\n\n const translate = useTranslate();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n const getNbPages = () => Math.ceil(total / perPage) || 1;\n\n /**\n * Warning: material-ui's page is 0-based\n */\n const handlePageChange = useCallback(\n (event, page) => {\n event && event.stopPropagation();\n\n if (page < 0 || page > getNbPages() - 1) {\n throw new Error(\n translate(\"ra.navigation.page_out_of_boundaries\", {\n page: page + 1,\n })\n );\n }\n setPage(page + 1);\n },\n [total, perPage, setPage, translate] // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const handlePerPageChange = useCallback(\n (event) => {\n setPerPage(event.target.value);\n },\n [setPerPage]\n );\n\n const labelDisplayedRows = ({ from, to, count }) => \"\";\n\n if (total === 0) {\n // return loading ? : limit;\n return loading ? : <>;\n }\n\n if (isSmall) {\n return (\n \n );\n }\n\n return (\n \n );\n }\n);\n\nPagination.defaultProps = {\n rowsPerPageOptions: [10, 25, 50, 100],\n actions: PaginationActions,\n limit: ,\n};\n","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { Button, ListButton } from \"react-admin\";\nimport { ChevronLeftIcon } from \"./\";\nimport { parsePath } from \"history\";\n\nexport const BackButton = ({ basePath, backPath, state, search, ...props }) => {\n const history = useHistory();\n\n const handleRedirect = () => {\n // history.goBack(); can't use it - will bring you back to child item that was saved rather back to parent / list\n const returnPath = backPath.pop();\n history.push({\n ...parsePath(returnPath),\n state: {\n ...state,\n backPath: backPath,\n },\n });\n };\n\n return backPath?.length > 0 ? (\n \n ) : (\n } />\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport * as queries from \"../../../graphql/queries\";\n\nimport {\n Avatar,\n Card,\n CardContent,\n CardHeader,\n Grid,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n Button,\n Datagrid,\n ListContextProvider,\n SimpleForm,\n TextField,\n TextInput,\n Title,\n Toolbar,\n useList,\n useListContext,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { EmailIcon } from \"../../../components/common\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { UserStatus } from \"../../../utils/constants\";\n\nconst useStyles = makeStyles((theme) => ({\n card: {\n display: \"flex\",\n flexDirection: \"column\",\n flex: \"1\",\n width: \"100%\",\n paddingRight: theme.spacing(0),\n paddingLeft: theme.spacing(0),\n \"& > *\": {\n margin: theme.spacing(0),\n padding: theme.spacing(0),\n },\n },\n cardHeader: {\n margin: theme.spacing(2),\n },\n}));\n\n// const ln2br = (text) => text.replace(/(?:\\r\\n|\\r|\\n)/g, '
');\n\nconst PaginationToolbar = (props) => {\n const listContext = useListContext(props);\n\n return (\n \n \n \n {listContext?.selectedIds?.length > 0 ? (\n `${listContext.selectedIds.length} selected`\n ) : (\n <> \n )}\n \n \n \n \n \n \n );\n};\n\nconst sendEmail = (to, cc, subject, message) => {\n return API.post(\"transREST\", \"/sendEmail\", {\n body: {\n to: to,\n cc: cc,\n bcc: \"support@transloads.co\",\n subject: subject,\n template: \"emailTemplate.html\",\n htmlContent: `
\n ${message}\n
`,\n },\n });\n};\n\nexport const EmailAnnouncement = (props) => {\n const classes = useStyles();\n const notify = useNotify();\n const [sending, setSanding] = useState(false);\n const [reloadYards, setReloadYards] = useState([]);\n const [users, setUsers] = useState([]);\n const defaultSort = { field: \"name\", order: \"ASC\" };\n const defaultPerPage = 25;\n\n useEffect(() => {\n getYardData();\n }, []);\n\n const getYardData = async () => {\n try {\n debugger;\n const input = { active: \"true\", limit: 1000 };\n let response = await API.graphql(\n graphqlOperation(queries.reloadYardByName, input)\n );\n let data = response.data.reloadYardByName.items;\n setReloadYards(data);\n\n response = await API.graphql(graphqlOperation(queries.listUsers, input));\n data = response.data.listUsers.items;\n setUsers(data);\n debugger;\n } catch (error) {\n logError(\"EmailAnnouncement:getYards\", error, notify);\n }\n };\n\n const sendEmails = async (form, listContext) => {\n console.clear();\n setSanding(true);\n const formState = form.getState();\n let yardList = reloadYards;\n debugger;\n\n try {\n if (listContext?.selectedIds?.length > 0) {\n yardList = reloadYards.filter((yard) => {\n return listContext.selectedIds.some((f) => {\n return f === yard.id;\n });\n });\n }\n\n const promiseList = [];\n yardList.forEach((yard) => {\n const userList = users.filter((user) => {\n return (\n user.reloadYardId === yard.id &&\n user.active === \"true\" &&\n user.status === UserStatus.APPROVED\n );\n });\n const ccList = userList.map((user) => user.email);\n\n promiseList.push(\n sendEmail(\n yard.email,\n ccList,\n formState.values.subject,\n formState.values.message\n )\n );\n });\n\n const results = await Promise.allSettled(promiseList);\n const errors = results.filter(\n (res) => res.status === \"rejected\" || res.value?.error\n );\n if (errors.length > 0)\n logError(\"EmailAnnouncement:sendEmails\", errors, notify);\n else notify(`Emails sent successfully.`);\n } catch (error) {\n logError(\"EmailAnnouncement:sendEmails\", error, notify);\n } finally {\n setSanding(false);\n }\n };\n\n const listContext = useList({\n ...props,\n data: reloadYards || [],\n ids: reloadYards?.map(({ id }) => id) || [],\n loaded: true,\n sort: defaultSort,\n perPage: defaultPerPage,\n basePath: \"/reloadYards\",\n resource: \"reloadYards\",\n });\n\n const CreateToolbar = (props) => {\n const form = useForm();\n\n return (\n \n sendEmails(form, listContext)}\n />\n \n );\n };\n\n return (\n }\n >\n } />\n <Card className={classes.card}>\n <CardHeader\n title={<Typography variant=\"h6\">Email Announcement</Typography>}\n avatar={\n <Avatar>\n <EmailIcon />\n </Avatar>\n }\n action={<BackButton basePath=\"/announcements\" />}\n className={classes.cardHeader}\n />\n <CardContent className={classes.card}>\n <Grid container direction=\"row\" spacing={1} fullWidth>\n <Grid item xs={12} sm={6}>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <TextInput\n source=\"subject\"\n label=\"Subject\"\n variant=\"outlined\"\n fullWidth\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n source=\"message\"\n label=\"Message\"\n variant=\"outlined\"\n multiline\n minRows=\"10\"\n fullWidth\n />\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} sm={6}>\n <ListContextProvider value={listContext}>\n <Datagrid\n rowClick={false}\n basePath=\"/reloadYards\"\n hasBulkActions={true}\n >\n <TextField source=\"name\" label=\"Name\" />,\n </Datagrid>\n <PaginationToolbar {...props} />\n </ListContextProvider>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n </SimpleForm>\n );\n};\n","// https://github.com/aws-amplify/amplify-cli/issues/2420\n\n//###############################################\n// Inventory By Load Type /reportInventoryByLoadType\n//###############################################\nexport const countInventoryByCommodity = /* GraphQL */ `\n query SearchInventorys(\n $filter: SearchableInventoryFilterInput\n $sort: SearchableInventorySortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInventorys(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n inboundShipmentId\n reloadYardCommodity {\n commodity {\n id\n name\n }\n }\n }\n total\n }\n }\n`;\n\n//###############################################\n// TotalInOutReport /reportTotalInOut\n//###############################################\nexport const searchInboundTotal = /* GraphQL */ `\n query SearchInboundShipments(\n $filter: SearchableInboundShipmentFilterInput\n $sort: SearchableInboundShipmentSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInboundShipments(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n status\n state\n accountName\n poNumber\n lotNumber\n notifyDateTime\n placedDateTime\n releaseDateTime\n inventories {\n items {\n id\n status\n productId\n productName\n productCode\n quantityShipped\n quantityDelivered\n inventoryUnits\n reloadYardCommodityId\n }\n }\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n }\n nextToken\n total\n }\n }\n`;\n\nexport const searchOutboundTotal = /* GraphQL */ `\n query SearchOutboundShipments(\n $filter: SearchableOutboundShipmentFilterInput\n $sort: SearchableOutboundShipmentSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchOutboundShipments(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n active\n status\n accountName\n transfer\n poNumber\n arrivalDateTime\n departureDateTime\n totalQuantity\n totalUnits\n tareWeight\n ladenWeight\n netWeight\n weightUnits\n billQuantity\n billUnits\n shipmentLineItems {\n items {\n id\n status\n totalQuantityToPick\n inventoryId\n inventory {\n id\n productId\n productCode\n productName\n inventoryUnits\n reloadYardCommodityId\n }\n }\n }\n }\n nextToken\n total\n }\n }\n`;\n\n//###############################################\n// InventoryActivityReport /reportInventoryActivity\n//###############################################\nexport const searchInventorysActivity = /* GraphQL */ `\n query SearchInventorys(\n $filter: SearchableInventoryFilterInput\n $sort: SearchableInventorySortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInventorys(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n status\n lotNumber\n poNumber\n quantityDelivered\n quantityOnHand\n quantityCommitted\n inventoryUnits\n deliveryDateTime\n lastShipDateTime\n productName\n productCode\n locationFullName\n inboundShipmentId\n shipmentLineItems {\n items {\n id\n status\n totalQuantityToPick\n outboundShipmentId\n }\n }\n }\n nextToken\n total\n }\n }\n`;\n\nexport const getOutboundShipmentActivity = /* GraphQL */ `\n query GetOutboundShipment($id: ID!) {\n getOutboundShipment(id: $id) {\n id\n status\n state\n transfer\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n }\n carrier\n railCarNumber\n arrivalDateTime\n departureDateTime\n collectedDateTime\n tareWeight\n ladenWeight\n weightUnits\n scaleWeightUnits\n totalQuantity\n totalUnits\n shipmentLineItems {\n items {\n id\n totalQuantityToPick\n outboundShipmentId\n inventoryId\n sortKey\n inventory {\n id\n productName\n productCode\n weight\n weightUnits\n inventoryUnits\n }\n }\n nextToken\n }\n reloadYardCommodityId\n }\n }\n`;\n\n//###############################################\n// InboundInvoiceReport /reportInboundInvoices\n//###############################################\nexport const searchInboundInvoices = /* GraphQL */ `\n query SearchInboundShipments(\n $filter: SearchableInboundShipmentFilterInput\n $sort: SearchableInboundShipmentSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInboundShipments(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n status\n state\n poNumber\n lotNumber\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n placedDateTime\n accountName\n invoiceId\n invoice {\n status\n invoiceNumber\n poNumber\n sentDate\n paidDate\n subtotal\n tax\n total\n balance\n inboundShipmentId\n outboundShipmentId\n lineItems {\n items {\n service {\n name\n description\n }\n quantity\n units\n unitCost\n amount\n itemTax\n serviceNote\n }\n nextToken\n }\n createdAt\n }\n customFields\n }\n nextToken\n total\n }\n }\n`;\n\n//###############################################\n// OutboundInvoiceReport /reportOutboundInvoices\n//###############################################\nexport const searchOutboundInvoices = /* GraphQL */ `\n query SearchOutboundShipments(\n $filter: SearchableOutboundShipmentFilterInput\n $sort: SearchableOutboundShipmentSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchOutboundShipments(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n status\n state\n transfer\n transferToAccountName\n poNumber\n pickupNumber\n bolNumber\n railCarNumber\n departureDateTime\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n accountName\n invoiceId\n invoice {\n status\n invoiceNumber\n poNumber\n sentDate\n paidDate\n subtotal\n tax\n total\n balance\n inboundShipmentId\n outboundShipmentId\n lineItems {\n items {\n service {\n name\n description\n }\n quantity\n units\n unitCost\n amount\n itemTax\n serviceNote\n }\n nextToken\n }\n createdAt\n }\n customFields\n createdAt\n }\n nextToken\n total\n }\n }\n`;\n\n//###############################################\n// InventoryStorageReport /reportInventoryStorage\n//###############################################\nexport const searchInventoryStorage = /* GraphQL */ `\n query SearchInventorys(\n $filter: SearchableInventoryFilterInput\n $sort: SearchableInventorySortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInventorys(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n status\n poNumber\n railCarNumber\n quantityDelivered\n quantityOnHand\n inventoryUnits\n weight\n weightUnits\n deliveryDateTime\n lastShipDateTime\n turnDays\n productName\n productCode\n product {\n defaultUnits\n defaultWeightUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n }\n shipmentLineItems {\n items {\n id\n status\n totalQuantityToPick\n updatedAt\n }\n }\n }\n nextToken\n total\n }\n }\n`;\n\n//###############################################\n// AvgInboundCarsByAccount /reportCarsByAccount\n//###############################################\nexport const listAccountNames = /* GraphQL */ `\n query AccountByActiveByName(\n $reloadYardId: ID\n $activeBusinessName: ModelAccountAccountByActiveByNameCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAccountFilterInput\n $limit: Int\n $nextToken: String\n ) {\n accountByActiveByName(\n reloadYardId: $reloadYardId\n activeBusinessName: $activeBusinessName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n businessName\n }\n nextToken\n }\n }\n`;\n\n//###############################################\n// AvgInventoryTurns\n//###############################################\nexport const searchInventorys = /* GraphQL */ `\n query SearchInventorys(\n $filter: SearchableInventoryFilterInput\n $sort: SearchableInventorySortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInventorys(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n status\n lastShipDateTime\n turnDays\n }\n nextToken\n total\n }\n }\n`;\n\n//###############################################\n// AvgInventoryTurnsByAccount /reportTurnoverByAccount\n//###############################################\nexport const countInventoryTurns = /* GraphQL */ `\n query SearchInventorys(\n $filter: SearchableInventoryFilterInput\n $sort: SearchableInventorySortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInventorys(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n turnDays\n }\n total\n }\n }\n`;\n\n//###############################################\n// InventoryRecallReport /reportInventoryRecall\n//###############################################\nexport const searchInventorysRecall = /* GraphQL */ `\n query SearchInventorys(\n $filter: SearchableInventoryFilterInput\n $sort: SearchableInventorySortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInventorys(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n status\n lotNumber\n poNumber\n railCarNumber\n quantityDelivered\n quantityOnHand\n inventoryUnits\n deliveryDateTime\n productName\n productCode\n locationFullName\n customFields\n inboundShipmentId\n inboundShipment {\n customFields\n }\n shipmentLineItems {\n items {\n id\n totalQuantityToPick\n outboundShipmentId\n outboundShipment {\n status\n transfer\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrier\n railCarNumber\n departureDateTime\n customFields\n }\n }\n }\n }\n nextToken\n total\n }\n }\n`;\n\nexport const searchInvoicesForReport = /* GraphQL */ `\n query SearchInvoices(\n $filter: SearchableInvoiceFilterInput\n $sort: SearchableInvoiceSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInvoices(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n active\n status\n invoiceNumber\n poNumber\n dueDate\n serviceDate\n sentDate\n paidDate\n settledDateTime\n total\n balance\n accountName\n accountId\n inboundShipmentId\n outboundShipmentId\n }\n nextToken\n total\n }\n }\n`;\n","import React from \"react\";\nimport {\n Card,\n CardHeader,\n useMediaQuery,\n Typography,\n Avatar,\n Divider,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n overflow: \"auto\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n width: \"100%\",\n \"& > *\": {\n margin: theme.spacing(1),\n },\n },\n card: {\n minHeight: 150,\n display: \"flex\",\n flexDirection: \"column\",\n flex: \"1\",\n paddingRight: theme.spacing(1),\n paddingLeft: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n },\n cardMobile: {\n minHeight: 150,\n display: \"flex\",\n flexDirection: \"column\",\n flex: \"1\",\n },\n cardAvatar: {\n color: theme.palette.getContrastText(theme.palette.primary.main),\n backgroundColor: theme.palette.primary.main,\n width: theme.spacing(6),\n height: theme.spacing(6),\n },\n cardHeader: {\n marginTop: theme.spacing(1),\n },\n divider: {\n marginBottom: theme.spacing(2),\n },\n}));\n\nconst CrewCard = ({\n children,\n title,\n icon,\n showDivider = true,\n action,\n subheader,\n addMargin = true,\n}) => {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const classes = useStyles();\n\n return addMargin ? (\n <div className={classes.root}>\n <InnerCard\n classes={classes}\n isSmall={isSmall}\n title={title}\n icon={icon}\n showDivider={showDivider}\n action={action}\n subheader={subheader}\n >\n {children}\n </InnerCard>\n </div>\n ) : (\n <InnerCard\n classes={classes}\n isSmall={isSmall}\n title={title}\n icon={icon}\n showDivider={showDivider}\n action={action}\n subheader={subheader}\n >\n {children}\n </InnerCard>\n );\n};\n\nconst InnerCard = ({\n classes,\n isSmall,\n children,\n title,\n icon,\n showDivider = true,\n action,\n subheader,\n}) => {\n return (\n <Card\n className={isSmall ? classes.cardMobile : classes.card}\n variant=\"outlined\"\n >\n <CardHeader\n action={action}\n subheader={subheader}\n className={classes.cardHeader}\n title={<Typography variant=\"h5\">{title}</Typography>}\n avatar={\n icon ? <Avatar className={classes.cardAvatar}>{icon}</Avatar> : null\n }\n />\n {showDivider && <Divider className={classes.divider} />}\n {children}\n </Card>\n );\n};\n\nexport default CrewCard;\n","import React, { useState, useEffect } from \"react\";\nimport { Storage } from \"aws-amplify\";\nimport {\n CircularProgress,\n Avatar,\n Button,\n Typography,\n Box,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n Grid,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport AddAPhotoOutlinedIcon from \"@material-ui/icons/AddAPhotoOutlined\";\nimport VisibilityOffIcon from \"@material-ui/icons/VisibilityOff\";\nimport VisibilityIcon from \"@material-ui/icons/Visibility\";\nimport ExpandLessIcon from \"@material-ui/icons/ExpandLess\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport { grey, red, deepOrange } from \"@material-ui/core/colors\";\nimport CloudUploadIcon from \"@material-ui/icons/CloudUpload\";\nimport { logError } from \"../../utils/appUtils\";\nimport { getFileKey, getPhoto, getPhotoUrl } from \"../../utils/fileUtils\";\nimport { useNotify } from \"react-admin\";\nimport {\n MAX_PHOTO_SIZE,\n MAX_PHOTO_SIZE_MSG,\n S3ObjectType,\n} from \"../../utils/constants\";\nimport { ExpandMoreIcon } from \".\";\n\nconst useStyles = makeStyles((theme) => ({\n actionAreaContainer: {\n display: \"flex\",\n marginTop: theme.spacing(4),\n },\n actionArea: {\n display: \"flex\",\n },\n buttonProgress: {\n color: theme.palette.secondary.main,\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n marginTop: theme.spacing(-1.5),\n },\n error: {\n color: red[500],\n },\n avatar: {\n marginLeft: theme.spacing(2),\n color: theme.palette.getContrastText(grey[300]),\n backgroundColor: grey[300],\n },\n deleteEnabledAvatar: {\n marginLeft: theme.spacing(2),\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n },\n deleteDisabledAvatar: {\n marginLeft: theme.spacing(2),\n color: theme.palette.getContrastText(grey[500]),\n backgroundColor: grey[500],\n },\n imgAvatarWrap: {\n flexWrap: \"wrap\",\n },\n imgAvatar: {\n color: theme.palette.getContrastText(theme.palette.secondary.main),\n margin: theme.spacing(1),\n width: theme.spacing(10),\n height: theme.spacing(10),\n },\n imgAvatarSelected: {\n color: theme.palette.getContrastText(theme.palette.secondary.main),\n margin: theme.spacing(1),\n width: theme.spacing(10),\n height: theme.spacing(10),\n border: \"4px solid orange\",\n },\n imgAvatarLoading: {\n color: theme.palette.getContrastText(theme.palette.secondary.main),\n backgroundColor: grey[400],\n margin: theme.spacing(1),\n width: theme.spacing(10),\n height: theme.spacing(10),\n },\n media: {\n margin: \"0 auto 0\",\n display: \"flex\",\n justifyContent: \"center\",\n borderRadius: \"4px\",\n objectFit: \"contain\",\n width: \"100%\",\n },\n}));\n\nexport default function InventoryPhotos({\n id,\n saveModel,\n photos = [],\n maxSize,\n imgRef,\n disableButton,\n disableDelete = false,\n hideActions = false,\n s3Type = S3ObjectType.SHIPMENT,\n thumbNailSize = 96,\n handleLoading,\n collapsed = false,\n}) {\n const [inventoryPhotos, setInventoryPhotos] = useState();\n const classes = useStyles();\n const notify = useNotify();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState();\n const [selectedPhotoIdx, setSelectedPhotoIdx] = useState(\n photos ? photos.length - 1 : -1\n );\n const [photoDisplay, setPhotoDisplay] = useState(\"none\");\n const [photo, setPhoto] = useState();\n const [open, setOpen] = useState(false);\n const [collapse, setCollapse] = useState(collapsed);\n const clientWidth = imgRef?.current?.clientWidth || window.innerWidth;\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n useEffect(() => {\n if (loading || selectedPhotoIdx >= photos?.length) return;\n setInventoryPhotos(photos);\n if (selectedPhotoIdx >= 0 && imgRef.current) {\n getPhoto(photos[selectedPhotoIdx].key, setPhoto, clientWidth);\n } else if (selectedPhotoIdx === -1 && photos?.length > 0) {\n setSelectedPhotoIdx(0);\n } else {\n setPhoto(null);\n }\n }, [loading, photos, imgRef, selectedPhotoIdx]);\n\n const handlePhoto = async (event) => {\n const photoFiles = event.target.files;\n if (!photoFiles) return;\n debugger;\n const numOfPhotos = photos.length + photoFiles.length;\n if (numOfPhotos > maxSize) {\n notify(\n `Exceeded max number of photos, only ${maxSize} photos allowed.`,\n \"error\"\n );\n return;\n }\n for (let file of photoFiles) {\n const size = file.size;\n if (size > MAX_PHOTO_SIZE) {\n notify(MAX_PHOTO_SIZE_MSG, \"warning\");\n return;\n }\n }\n setCollapse(false);\n if (handleLoading) {\n handleLoading(true);\n } else {\n setLoading(true);\n }\n const newPhotos = [];\n const promiseList = [];\n let idx = selectedPhotoIdx;\n try {\n for (let file of photoFiles) {\n debugger;\n const tempPhoto = { key: \"PHOTO_LOADING\" };\n setInventoryPhotos([...photos, tempPhoto]);\n getPhoto(tempPhoto.key, setPhoto, clientWidth);\n idx++;\n setSelectedPhotoIdx(idx);\n const key = getFileKey(file, id);\n promiseList.push(Storage.put(key, file, { level: \"public\" }));\n newPhotos.push(key);\n }\n await Promise.allSettled(promiseList);\n await saveModel(newPhotos, idx);\n } catch (err) {\n logError(\"components:common:inventoryPhotos:handlePhoto\", err, notify);\n setError(err.message);\n } finally {\n if (handleLoading) {\n handleLoading(false);\n } else {\n setLoading(false);\n }\n event.target.value = null;\n }\n };\n\n const handleSelectPhoto = (idx) => {\n debugger;\n try {\n if (handleLoading) {\n handleLoading(true);\n } else {\n setLoading(true);\n }\n getPhoto(photos[idx].key, setPhoto, clientWidth);\n setSelectedPhotoIdx(idx);\n setPhotoDisplay(\"block\");\n } catch (err) {\n logError(\n \"components:common:inventoryPhotos:handleSelectPhoto\",\n err,\n notify\n );\n setError(err.message);\n } finally {\n if (handleLoading) {\n handleLoading(false);\n } else {\n setLoading(false);\n }\n }\n };\n\n const handleDelete = async (idx) => {\n debugger;\n setLoading(false);\n try {\n debugger;\n if (handleLoading) {\n handleLoading(true);\n } else {\n setLoading(true);\n }\n const key = photos[idx].key;\n await Storage.remove(key);\n saveModel(null, selectedPhotoIdx);\n setSelectedPhotoIdx(photos.length - 1);\n handleClose();\n } catch (err) {\n logError(\"components:common:inventoryPhotos:handleDelete\", err, notify);\n setError(err.message);\n } finally {\n setLoading(false);\n if (handleLoading) {\n handleLoading(false);\n } else {\n setLoading(false);\n }\n }\n };\n\n const handlePhotoDisplay = () => {\n if (photos?.length === 0 || collapse) return;\n if (photoDisplay === \"block\") {\n setPhotoDisplay(\"none\");\n } else {\n setPhotoDisplay(\"block\");\n }\n window.scrollTo(0, 0);\n };\n\n const handleClickOpen = () => {\n debugger;\n if (disableDelete || loading || photos?.length === 0) return;\n if (collapse) return;\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const getThumbnailClassName = (idx) => {\n return selectedPhotoIdx === idx\n ? classes.imgAvatarSelected\n : classes.imgAvatar;\n };\n\n const handleCollapse = () => {\n if (photos?.length === 0) return;\n setPhotoDisplay(\"none\");\n setCollapse(!collapse);\n };\n\n const getDeleteAvatarClassName = () => {\n const className =\n disableDelete || photos?.length === 0\n ? classes.deleteDisabledAvatar\n : classes.deleteEnabledAvatar;\n return className;\n };\n\n return (\n <>\n {!collapse && photo && (\n <Grid container>\n <Grid item xs={12}>\n <img\n className={classes.media}\n style={{ height: clientWidth / 2, display: photoDisplay }}\n src={photo}\n alt=\"\"\n onClick={handlePhotoDisplay}\n />\n </Grid>\n <Grid item xs={12}>\n <Box\n display=\"flex\"\n justifyContent=\"center\"\n className={classes.imgAvatarWrap}\n >\n {inventoryPhotos?.length > 0 &&\n inventoryPhotos.map((itm, idx) =>\n itm.key === \"PHOTO_LOADING\" ? (\n <Avatar\n className={classes.imgAvatarLoading}\n key={itm.key}\n variant=\"rounded\"\n alt=\"img\"\n >\n <CircularProgress color=\"inherit\" />\n </Avatar>\n ) : (\n <Avatar\n className={\n selectedPhotoIdx === idx\n ? classes.imgAvatarSelected\n : classes.imgAvatar\n }\n key={itm.key}\n variant=\"rounded\"\n alt=\"img\"\n src={getPhotoUrl(itm.key, thumbNailSize)}\n onClick={() => handleSelectPhoto(idx)}\n color={getThumbnailClassName(idx)}\n />\n )\n )}\n </Box>\n </Grid>\n </Grid>\n )}\n {\n <div className={classes.actionAreaContainer}>\n {!hideActions && (\n <span className={classes.actionArea}>\n <span>\n <input\n type=\"file\"\n accept=\"image/*\"\n id=\"upload-photo\"\n style={{ display: \"none\" }}\n onChange={handlePhoto}\n disabled={\n loading || disableButton || photos?.length === maxSize\n }\n multiple={photos?.length < maxSize}\n />\n <label htmlFor=\"upload-photo\">\n <Button\n variant=\"outlined\"\n disabled={\n loading || disableButton || photos?.length === maxSize\n }\n size=\"large\"\n component=\"span\"\n startIcon={\n isXSmall ? null : loading ? (\n <CloudUploadIcon color=\"secondary\" />\n ) : (\n <AddAPhotoOutlinedIcon />\n )\n }\n >\n {isXSmall ? \"Photo\" : \"Add photo\"}\n {loading && (\n <CircularProgress\n size={24}\n className={classes.buttonProgress}\n color=\"inherit\"\n />\n )}\n </Button>\n </label>\n </span>\n <Avatar\n className={getDeleteAvatarClassName()}\n onClick={handleClickOpen}\n style={{ cursor: \"pointer\" }}\n >\n <DeleteIcon />\n </Avatar>\n <Dialog open={open} onClose={handleClose}>\n <DialogTitle style={{ cursor: \"move\" }}>\n Delete Photo\n </DialogTitle>\n <DialogContent>\n <DialogContentText>\n Are you sure you want to delete this image?\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button autoFocus onClick={handleClose}>\n Cancel\n </Button>\n <Button\n onClick={() => handleDelete(selectedPhotoIdx)}\n color=\"primary\"\n >\n Delete\n </Button>\n </DialogActions>\n </Dialog>\n </span>\n )}\n <Avatar\n style={{ cursor: \"pointer\" }}\n className={classes.avatar}\n onClick={handlePhotoDisplay}\n >\n {photoDisplay === \"block\" ? (\n <VisibilityOffIcon />\n ) : (\n <VisibilityIcon />\n )}\n </Avatar>\n <Avatar\n style={{ cursor: \"pointer\" }}\n className={classes.avatar}\n onClick={handleCollapse}\n >\n {collapse ? <ExpandMoreIcon /> : <ExpandLessIcon />}\n </Avatar>\n <div>\n {error && (\n <Typography className={classes.error}>{error}</Typography>\n )}\n </div>\n </div>\n }\n </>\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useNotify } from \"react-admin\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getInventorieTimeline } from \"../../../../graphql/inventory/custom-queries\";\nimport { getOutboundShipmentTimeline } from \"../../../../graphql/outbound/custom-queries\";\nimport { Link } from \"react-router-dom\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n Button,\n CardActions,\n Divider,\n IconButton,\n CircularProgress,\n Box,\n Paper,\n Typography,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Grid,\n useMediaQuery,\n List,\n ListItem,\n ListItemText,\n TableContainer,\n Table,\n TableHead,\n TableRow,\n TableCell,\n TableBody,\n Backdrop,\n FormControl,\n FormGroup,\n FormControlLabel,\n Checkbox,\n CardContent,\n} from \"@material-ui/core\";\nimport Timeline from \"@material-ui/lab/Timeline\";\nimport TimelineItem from \"@material-ui/lab/TimelineItem\";\nimport TimelineSeparator from \"@material-ui/lab/TimelineSeparator\";\nimport TimelineConnector from \"@material-ui/lab/TimelineConnector\";\nimport TimelineContent from \"@material-ui/lab/TimelineContent\";\nimport TimelineOppositeContent from \"@material-ui/lab/TimelineOppositeContent\";\nimport TimelineDot from \"@material-ui/lab/TimelineDot\";\nimport HighlightOffIcon from \"@material-ui/icons/HighlightOff\";\nimport NoteOutlinedIcon from \"@material-ui/icons/NoteOutlined\";\nimport CheckBoxOutlineBlankIcon from \"@material-ui/icons/CheckBoxOutlineBlank\";\nimport HistoryIcon from \"@material-ui/icons/History\";\nimport {\n ExceptionIcon,\n InboundIcon,\n OutboundIcon,\n} from \"../../../../components/common\";\nimport { format } from \"date-fns\";\nimport CheckBoxOutlineBlankOutlinedIcon from \"@material-ui/icons/CheckBoxOutlineBlankOutlined\";\nimport { logError } from \"../../../../utils/appUtils\";\nimport CrewCard from \"../../../../components/common/CrewCard\";\nimport InventoryPhotos from \"../../../../components/common/InventoryPhotos\";\nimport { CustomFieldsMobile } from \"../../../../components/common/CustomFields\";\nimport { UserType } from \"../../../../utils/constants\";\nimport { getUnitName } from \"../../../../utils/loadTypeUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: 90001,\n },\n paper: {\n display: \"flex\",\n flexDirection: \"column\",\n padding: theme.spacing(2),\n marginBottom: theme.spacing(2),\n },\n timeLineItem: {\n maxWidth: theme.spacing(16),\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n },\n timeLineItemMobile: {\n maxWidth: theme.spacing(10),\n paddingLeft: theme.spacing(0),\n paddingRight: theme.spacing(0.5),\n },\n historyButton: {\n maxWidth: theme.spacing(16),\n marginLeft: theme.spacing(-1),\n marginRight: theme.spacing(2),\n },\n link: {\n color: \"inherit\",\n textDecoration: \"inherit\",\n },\n}));\n\nexport const InventoryTimeline = ({ history, match }) => {\n const [headerData, setHeaderData] = useState();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n const handleCancel = () => {\n history.goBack();\n };\n\n return (\n <CrewCard\n title={headerData?.productName}\n icon={\n isSmall ? null : <CheckBoxOutlineBlankOutlinedIcon fontSize=\"large\" />\n }\n subheader={headerData?.accountName}\n action={\n <IconButton edge=\"start\" onClick={handleCancel}>\n <HighlightOffIcon fontSize=\"large\" />\n </IconButton>\n }\n showDivider={false}\n >\n <CardContent>\n <InventoryTimelineCard\n inventoryId={match?.params?.id}\n setHeaderData={setHeaderData}\n />\n </CardContent>\n <CardActions>\n <Button onClick={handleCancel} size=\"large\">\n Close\n </Button>\n </CardActions>\n </CrewCard>\n );\n};\n\nexport const InventoryTimelineCard = ({ inventoryId, setHeaderData }) => {\n const [currentInventory, setCurrentInventory] = useState();\n const [inboundShipment, setInboundShipment] = useState();\n const [lineItems, setLineItems] = useState([]);\n const [open, setOpen] = useState(false);\n const [dialogData, setDialogData] = useState([]);\n const [dialogTitle, setDialogTitle] = useState();\n const [isInventoryExceptionsOpen, setIsInventoryExceptionsOpen] =\n useState(false);\n const [isInboundExceptionsOpen, setIsInboundExceptionsOpen] = useState(false);\n const [invalidIdError, setInvalidIdError] = useState();\n const [loading, setLoading] = useState();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const classes = useStyles();\n const notify = useNotify();\n const imgRef = useRef();\n\n useEffect(() => {\n getInventory();\n }, []);\n\n const getInventory = async () => {\n setLoading(true);\n try {\n debugger;\n let response = await API.graphql(\n graphqlOperation(getInventorieTimeline, { id: inventoryId })\n );\n let dbInventory = response.data.getInventorie;\n if (!dbInventory) {\n setInvalidIdError(`Inventory ID ${inventoryId} doesn't exist.`);\n return;\n }\n setHeaderData &&\n setHeaderData({\n productName: dbInventory.productName,\n accountName: dbInventory.accountName,\n });\n setCurrentInventory(dbInventory);\n setInboundShipment(dbInventory.inboundShipment);\n const lineItems = dbInventory.shipmentLineItems.items;\n const lineItemMap = {};\n lineItems.forEach((itm) => (lineItemMap[itm.outboundShipmentId] = itm));\n debugger;\n const promiseList = [];\n Object.keys(lineItemMap).forEach((outboundShipmentId) => {\n promiseList.push(\n API.graphql(\n graphqlOperation(getOutboundShipmentTimeline, {\n id: outboundShipmentId,\n })\n )\n );\n });\n response = await Promise.all(promiseList);\n response.forEach(\n (itm) =>\n (lineItemMap[itm.data.getOutboundShipment.id].outboundShipment =\n itm.data.getOutboundShipment)\n );\n lineItems.sort((a, b) => {\n const dateA = a.outboundShipment?.createDateTime;\n const dateB = b.outboundShipment?.createDateTime;\n\n if (dateA && dateB) {\n return dateA.localeCompare(dateB);\n } else if (dateA) {\n return 1; // `a` comes after `b`\n } else if (dateB) {\n return -1; // `a` comes before `b`\n } else {\n return 0; // both dates are undefined\n }\n });\n setLineItems(lineItems);\n } catch (err) {\n logError(\"InventoryTimelineCard:getInventory\", err, notify);\n } finally {\n setLoading(false);\n }\n };\n\n const showHistory = (historyType, item) => {\n debugger;\n setOpen(true);\n if (historyType === \"inbound\") {\n setDialogTitle(\"Inbound History\");\n setDialogData(inboundShipment.history);\n } else if (historyType === \"outbound\") {\n setDialogTitle(\"Outbound History\");\n setDialogData(item.outboundShipment.history);\n } else if (historyType === \"inventory\") {\n setDialogTitle(\"Inventory History\");\n setDialogData(currentInventory.history);\n } else if (historyType === \"inventoryItem\") {\n setDialogTitle(\"Inventory Item History\");\n setDialogData(item.history);\n } else if (historyType === \"lineItem\") {\n setDialogTitle(\"Shipment Line Item History\");\n setDialogData(item.history);\n }\n };\n\n const showNotes = (noteType, lineItem) => {\n debugger;\n setOpen(true);\n if (noteType === \"inbound\") {\n setDialogTitle(\"Inbound Notes\");\n setDialogData(inboundShipment.notes ? inboundShipment.notes : []);\n } else if (noteType === \"outbound\") {\n setDialogTitle(\"Outbound Notes\");\n setDialogData(\n lineItem.outboundShipment.notes ? lineItem.outboundShipment.notes : []\n );\n } else if (noteType === \"shipment\") {\n setDialogTitle(\"Line Item Notes\");\n setDialogData(lineItem.notes ? lineItem.notes : []);\n } else if (noteType === \"inventory\") {\n setDialogTitle(\"Inventory Notes\");\n setDialogData(currentInventory.notes ? currentInventory.notes : []);\n }\n };\n\n const hideHistory = () => {\n setOpen(false);\n };\n\n const getQuantityText = (quantity) => {\n if (!quantity) return \"N/A\";\n const qty = Number(quantity || 0).toLocaleString(\"en-US\", {\n maximumFractionDigits: 2,\n });\n return isSmall\n ? qty\n : `${qty} ${getUnitName(currentInventory?.inventoryUnits)}`;\n };\n\n const formatDate = (date) => {\n if (!date) return \"N/A\";\n return format(new Date(date), \"MM/dd/yyyy\");\n };\n\n const isNotesDisabled = (itm) => !itm || !itm.notes || itm.length === 0;\n const isHistoryDisabled = (itm) => !itm || !itm.history || itm.length === 0;\n\n if (invalidIdError)\n return (\n <CardContent>\n <Typography color=\"error\">{invalidIdError}</Typography>\n </CardContent>\n );\n\n const getInventoryView = () => {\n return (\n <Grid container spacing={1}>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Date Received:{\" \"}\n {formatDate(\n currentInventory?.deliveryDateTime,\n \"MM/dd/yyyy hh:mm a\"\n )}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Load Type: {currentInventory?.reloadYardCommodity?.commodity?.name}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Account: {currentInventory?.accountName}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Exception: {currentInventory?.hasException ? \"Yes\" : \"No\"}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Product: {currentInventory?.productName}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Product Code:{\" \"}\n {currentInventory?.productCode\n ? currentInventory.productCode\n : \"N/A\"}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Lot No: {currentInventory?.lotNumber}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Lot Type: {currentInventory?.lotType}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Area: {currentInventory?.area.name}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Zone: {inboundShipment?.zone?.name}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Qty Received: {getQuantityText(currentInventory?.quantityDelivered)}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Qty Onhand: {getQuantityText(currentInventory?.quantityOnHand)}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Qty Committed:{\" \"}\n {getQuantityText(currentInventory?.quantityCommitted)}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Qty Available:{\" \"}\n {getQuantityText(\n currentInventory?.quantityOnHand -\n currentInventory?.quantityCommitted\n )}\n </Typography>\n </Grid>\n {currentInventory?.customFields && (\n <Grid item xs={12} md={6}>\n <CustomFieldsMobile\n recordFields={currentInventory?.customFields}\n width={6}\n variant=\"body2\"\n color=\"textSecondary\"\n />\n </Grid>\n )}\n\n <Grid item xs={12}>\n <Box mt={2} mb={2}>\n <Paper variant=\"outlined\">\n <TableContainer>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Location</TableCell>\n <TableCell>Qty Onhand</TableCell>\n <TableCell>Qty Committed</TableCell>\n {!isSmall && (\n <>\n <TableCell>Is Damaged</TableCell>\n <TableCell>History</TableCell>\n </>\n )}\n </TableRow>\n </TableHead>\n <TableBody>\n {currentInventory?.inventoryItems.items.map((itm) => (\n <TableRow key={itm.id}>\n <TableCell>{itm.locationFullName}</TableCell>\n <TableCell>\n {getQuantityText(itm.quantityOnHand)}\n </TableCell>\n <TableCell>\n {getQuantityText(itm.quantityCommitted)}\n </TableCell>\n {!isSmall && (\n <>\n <TableCell>\n {itm.isDamaged ? <ExceptionIcon /> : \"No\"}\n </TableCell>\n <TableCell>\n <IconButton\n onClick={() =>\n showHistory(\"inventoryItem\", itm)\n }\n className={classes.historyButton}\n disabled={isHistoryDisabled(currentInventory)}\n >\n <HistoryIcon />\n </IconButton>\n </TableCell>\n </>\n )}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </Paper>\n </Box>\n </Grid>\n {getInventoryActions()}\n <Grid item xs={12}>\n <div ref={imgRef}></div>\n </Grid>\n {currentInventory?.photos?.length > 0 && (\n <Grid item xs={12}>\n <InventoryPhotos\n id={currentInventory.id}\n maxSize={2}\n photos={currentInventory.photos}\n hideActions={true}\n imgRef={imgRef}\n justifyContent=\"start\"\n />\n </Grid>\n )}\n </Grid>\n );\n };\n\n const getInventoryActions = () => {\n return isSmall ? (\n <Grid item xs={12}>\n <IconButton\n onClick={() => showHistory(\"inventory\")}\n className={classes.historyButton}\n disabled={isHistoryDisabled(currentInventory)}\n >\n <HistoryIcon />\n </IconButton>\n <IconButton\n onClick={() => showNotes(\"inventory\")}\n className={classes.historyButton}\n disabled={isNotesDisabled(currentInventory)}\n >\n <NoteOutlinedIcon />\n </IconButton>\n <IconButton\n onClick={() => setIsInventoryExceptionsOpen(true)}\n className={classes.historyButton}\n disabled={!currentInventory?.hasException}\n >\n <ExceptionIcon />\n </IconButton>\n </Grid>\n ) : (\n <Grid item xs={12}>\n <Button\n onClick={() => showHistory(\"inventory\")}\n startIcon={<HistoryIcon />}\n size=\"medium\"\n className={classes.historyButton}\n disabled={isHistoryDisabled(currentInventory)}\n >\n History\n </Button>\n <Button\n onClick={() => showNotes(\"inventory\")}\n startIcon={<NoteOutlinedIcon />}\n size=\"medium\"\n className={classes.historyButton}\n disabled={isNotesDisabled(currentInventory)}\n >\n Notes\n </Button>\n <Button\n onClick={() => setIsInventoryExceptionsOpen(true)}\n startIcon={<ExceptionIcon />}\n size=\"medium\"\n className={classes.historyButton}\n disabled={!currentInventory?.hasException}\n >\n Exceptions\n </Button>\n </Grid>\n );\n };\n\n const getInboundView = () => {\n return (\n <Grid container spacing={1}>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Place Date:{\" \"}\n {formatDate(inboundShipment?.placedDateTime, \"MM/dd/yyyy hh:mm a\")}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Release Date:{\" \"}\n {formatDate(inboundShipment?.releaseDateTime, \"MM/dd/yyyy hh:mm a\")}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n PO Number: {inboundShipment?.poNumber}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n PO Number: {inboundShipment?.poNumber}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Lot Number: {inboundShipment?.lotNumber}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Ship From: {inboundShipment?.shipFrom}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Carrier: {inboundShipment?.originCarrier}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Rail Car/Trailer No: {inboundShipment?.railCarNumber}\n </Typography>\n </Grid>\n {inboundShipment?.customFields && (\n <Grid item xs={12}>\n <CustomFieldsMobile\n recordFields={inboundShipment?.customFields}\n width={6}\n variant=\"body2\"\n color=\"textSecondary\"\n />\n </Grid>\n )}\n\n <Grid item xs={12}>\n <Button\n onClick={() => showHistory(\"inbound\")}\n startIcon={<HistoryIcon />}\n size=\"medium\"\n className={classes?.historyButton}\n disabled={isHistoryDisabled(inboundShipment)}\n >\n History\n </Button>\n <Button\n onClick={() => showNotes(\"inbound\")}\n startIcon={<NoteOutlinedIcon />}\n size=\"medium\"\n className={classes.historyButton}\n disabled={isNotesDisabled(inboundShipment)}\n >\n Notes\n </Button>\n <Button\n onClick={() => setIsInboundExceptionsOpen(true)}\n startIcon={<ExceptionIcon />}\n size=\"medium\"\n className={classes.historyButton}\n disabled={!inboundShipment?.hasException}\n >\n Exceptions\n </Button>\n </Grid>\n <Grid item xs={12}>\n <div ref={imgRef}></div>\n </Grid>\n {inboundShipment?.photos?.length > 0 && (\n <Grid item xs={12}>\n <InventoryPhotos\n id={inboundShipment.id}\n maxSize={2}\n photos={inboundShipment.photos}\n hideActions={true}\n imgRef={imgRef}\n justifyContent=\"start\"\n />\n </Grid>\n )}\n </Grid>\n );\n };\n\n const getOutboundActions = (itm) => {\n return isSmall ? (\n <Grid item xs={12}>\n <IconButton\n onClick={() => showHistory(\"outbound\", itm)}\n className={classes.historyButton}\n disabled={isHistoryDisabled(itm.outboundShipment)}\n >\n <HistoryIcon />\n </IconButton>\n <IconButton\n onClick={() => showNotes(\"outbound\", itm)}\n className={classes.historyButton}\n disabled={isNotesDisabled(itm.outboundShipment)}\n >\n <NoteOutlinedIcon />\n </IconButton>\n </Grid>\n ) : (\n <Grid item xs={12}>\n <Button\n onClick={() => showHistory(\"outbound\", itm)}\n startIcon={<HistoryIcon />}\n size=\"medium\"\n className={classes.historyButton}\n disabled={isHistoryDisabled(itm.outboundShipment)}\n >\n History\n </Button>\n <Button\n onClick={() => showNotes(\"outbound\", itm)}\n startIcon={<NoteOutlinedIcon />}\n size=\"medium\"\n className={classes.historyButton}\n disabled={isNotesDisabled(itm.outboundShipment)}\n >\n Notes\n </Button>\n </Grid>\n );\n };\n\n const getOutboundView = (itm) => {\n return (\n <Grid container spacing={1}>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n PO Number:{\" \"}\n {itm.outboundShipment.poNumber\n ? itm.outboundShipment.poNumber\n : \"N/A\"}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Pickup Number:{\" \"}\n {itm.outboundShipment.pickupNumber\n ? itm.outboundShipment.pickupNumber\n : \"N/A\"}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Status: {itm.outboundShipment.status}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Qty: {getQuantityText(itm.outboundShipment.totalQuantity)}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Departure Date:{\" \"}\n {formatDate(\n itm.outboundShipment.departureDateTime,\n \"MM/dd/yyyy hh:mm a\"\n )}\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Carrier: {itm.outboundShipment.carrier}\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <Box mt={2} mb={2}>\n <Paper variant=\"outlined\">\n <TableContainer>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Location</TableCell>\n <TableCell>Quantity</TableCell>\n {!isSmall && (\n <>\n <TableCell>History</TableCell>\n <TableCell>Notes</TableCell>\n </>\n )}\n </TableRow>\n </TableHead>\n <TableBody>\n {itm.inventoryItems.items.map((shipmentItem) => (\n <TableRow key={itm.id}>\n <TableCell>\n {shipmentItem.inventoryItem.locationFullName}\n </TableCell>\n <TableCell>\n {getQuantityText(shipmentItem.quantityToPick)}\n </TableCell>\n {!isSmall && (\n <>\n <TableCell>\n <IconButton\n onClick={() => showHistory(\"lineItem\", itm)}\n size=\"small\"\n disabled={isHistoryDisabled(itm)}\n >\n <HistoryIcon />\n </IconButton>\n </TableCell>\n <TableCell>\n <IconButton\n onClick={() =>\n showNotes(\"shipment\", shipmentItem)\n }\n size=\"small\"\n disabled={isNotesDisabled(itm)}\n >\n <NoteOutlinedIcon />\n </IconButton>\n </TableCell>\n </>\n )}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </Paper>\n </Box>\n </Grid>\n {itm.outboundShipment.transfer && (\n <>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Is Transfer: true\n </Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Transfer Account Name:{\" \"}\n {itm.outboundShipment.transferToAccountName}\n </Typography>\n </Grid>\n </>\n )}\n <Grid item xs={12} md={6}></Grid>\n {itm.outboundShipment.customFields && (\n <Grid item xs={12}>\n <CustomFieldsMobile\n recordFields={itm.outboundShipment.customFields}\n width={6}\n variant=\"body2\"\n color=\"textSecondary\"\n />\n </Grid>\n )}\n {getOutboundActions(itm)}\n <Grid item xs={12}>\n <div ref={imgRef}></div>\n </Grid>\n {itm.outboundShipment?.photos?.length > 0 && (\n <Grid item xs={12}>\n <InventoryPhotos\n id={inboundShipment?.id}\n maxSize={2}\n photos={itm.outboundShipment.photos}\n hideActions={true}\n imgRef={imgRef}\n justifyContent=\"start\"\n />\n </Grid>\n )}\n </Grid>\n );\n };\n\n const getSmallView = () => {\n return (\n <>\n <Paper variant=\"outlined\" className={classes.paper}>\n <Typography variant=\"h6\" gutterBottom>\n Inventory\n </Typography>\n {getInventoryView()}\n </Paper>\n <Paper variant=\"outlined\" className={classes.paper}>\n <Typography variant=\"h6\" gutterBottom>\n Inbound\n </Typography>\n {getInboundView()}\n </Paper>\n {lineItems?.map((itm) => (\n <Paper variant=\"outlined\" className={classes.paper}>\n <Typography variant=\"h6\" gutterBottom>\n Outbound\n </Typography>\n {getOutboundView(itm)}\n </Paper>\n ))}\n </>\n );\n };\n\n const getLargeView = () => {\n return (\n <Timeline>\n <TimelineItem>\n <TimelineOppositeContent className={classes.timeLineItem}>\n <Box mt={1.5}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {formatDate(\n inboundShipment?.placedDateTime,\n \"MM/dd/yyyy hh:mm a\"\n )}\n </Typography>\n </Box>\n </TimelineOppositeContent>\n <TimelineSeparator>\n <TimelineDot color=\"primary\">\n <CheckBoxOutlineBlankIcon />\n </TimelineDot>\n <TimelineConnector />\n </TimelineSeparator>\n <TimelineContent>\n <Paper variant=\"outlined\" className={classes.paper}>\n {window.appUser.type === UserType.CREW ? (\n <Typography variant=\"h6\" gutterBottom>\n Inventory\n </Typography>\n ) : (\n <Typography variant=\"h6\" color=\"secondary\" gutterBottom>\n <Link\n className={classes.link}\n to={\"/inventories/\" + currentInventory?.id}\n >\n Inventory\n </Link>\n </Typography>\n )}\n {getInventoryView()}\n </Paper>\n </TimelineContent>\n </TimelineItem>\n <TimelineItem>\n <TimelineOppositeContent className={classes.timeLineItem}>\n <Box mt={1.5}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {formatDate(\n inboundShipment?.placedDateTime,\n \"MM/dd/yyyy hh:mm a\"\n )}\n </Typography>\n </Box>\n </TimelineOppositeContent>\n <TimelineSeparator>\n <TimelineDot color=\"primary\">\n <InboundIcon />\n </TimelineDot>\n <TimelineConnector />\n </TimelineSeparator>\n <TimelineContent>\n <Paper variant=\"outlined\" className={classes.paper}>\n {window.appUser.type === UserType.CREW ? (\n <Typography variant=\"h6\" gutterBottom>\n Inbound\n </Typography>\n ) : (\n <Typography variant=\"h6\" color=\"secondary\" gutterBottom>\n <Link\n className={classes.link}\n to={\"/inboundShipments/\" + inboundShipment?.id}\n >\n Inbound\n </Link>\n </Typography>\n )}\n {getInboundView()}\n </Paper>\n </TimelineContent>\n </TimelineItem>\n {lineItems?.map((itm) => (\n <TimelineItem key={itm.id}>\n <TimelineOppositeContent\n className={\n isSmall ? classes.timeLineItemMobile : classes.timeLineItem\n }\n >\n <Box mt={1.5}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {formatDate(\n itm.outboundShipment.createdAt,\n \"MM/dd/yyyy hh:mm a\"\n )}\n </Typography>\n </Box>\n </TimelineOppositeContent>\n <TimelineSeparator>\n <TimelineDot color=\"primary\">\n <OutboundIcon />\n </TimelineDot>\n <TimelineConnector />\n </TimelineSeparator>\n <TimelineContent>\n <Paper variant=\"outlined\" className={classes.paper}>\n {window.appUser.type === UserType.CREW ? (\n <Typography variant=\"h6\" gutterBottom>\n Outbound\n </Typography>\n ) : (\n <Typography variant=\"h6\" color=\"secondary\" gutterBottom>\n <Link\n className={classes.link}\n to={\"/outboundShipments/\" + itm.outboundShipment.id}\n >\n Outbound\n </Link>\n </Typography>\n )}\n {getOutboundView(itm)}\n </Paper>\n </TimelineContent>\n </TimelineItem>\n ))}\n </Timeline>\n );\n };\n\n return (\n <>\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Grid container>\n <Grid item xs={12}>\n {isSmall ? getSmallView() : getLargeView()}\n <Dialog\n open={isInventoryExceptionsOpen}\n onClose={() => setIsInventoryExceptionsOpen(false)}\n scroll={\"paper\"}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>Inventory Exceptions</DialogTitle>\n <DialogContent>\n <FormControl component=\"fieldset\">\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={currentInventory?.overShipment}\n disabled\n />\n }\n label=\"Over Shipment\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={currentInventory?.underShipment}\n disabled\n />\n }\n label=\"Under Shipment\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={currentInventory?.isDamaged}\n disabled\n />\n }\n label=\"Is Damaged\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={currentInventory?.otherException}\n disabled\n />\n }\n label=\"Other Exception\"\n />\n </FormGroup>\n </FormControl>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setIsInventoryExceptionsOpen(false)}>\n Close\n </Button>\n </DialogActions>\n </Dialog>\n <Dialog\n open={isInboundExceptionsOpen}\n onClose={() => setIsInboundExceptionsOpen(false)}\n scroll={\"paper\"}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>Inbound Exceptions</DialogTitle>\n <DialogContent>\n <FormControl component=\"fieldset\">\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={inboundShipment?.unsafeShipment}\n disabled\n />\n }\n label=\"Unsafe Shipment\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={inboundShipment?.brokenSeal}\n disabled\n />\n }\n label=\"Broken Seal\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={inboundShipment?.otherException}\n disabled\n />\n }\n label=\"Other Exception\"\n />\n </FormGroup>\n </FormControl>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setIsInboundExceptionsOpen(false)}>\n Close\n </Button>\n </DialogActions>\n </Dialog>\n <Dialog\n open={open}\n onClose={hideHistory}\n scroll={\"paper\"}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>{dialogTitle}</DialogTitle>\n <DialogContent>\n <List>\n {dialogData?.map((itm) => (\n <>\n <Divider />\n <ListItem key={itm.date + itm.text}>\n <ListItemText\n primary={`${formatDate(\n itm.date,\n \"MM/dd/yyyy hh:mm a\"\n )} - ${itm.by}`}\n secondary={itm.text}\n />\n </ListItem>\n </>\n ))}\n </List>\n </DialogContent>\n <Divider />\n <DialogActions>\n <Button onClick={hideHistory}>Close</Button>\n </DialogActions>\n </Dialog>\n </Grid>\n </Grid>\n </>\n );\n};\n","export const accountNameRenderer = (record) => {\n const accountName = record?.displayName || record?.businessName || \"\";\n if (record?.corporateAccount) {\n return `${accountName} \\u{1F3EC}`;\n }\n\n return accountName;\n};\n","import React, { useEffect, useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { accountByActiveByNameDropDown } from \"../../graphql/account/custom-queries\";\nimport { AutocompleteInput, useNotify } from \"react-admin\";\nimport { logError } from \"../../utils/appUtils\";\nimport { accountNameRenderer } from \"./AccountNameRenderer\";\n\nconst getAccounts = async (setAccounts, notify, setLoading) => {\n try {\n const response = await API.graphql(\n graphqlOperation(accountByActiveByNameDropDown, {\n reloadYardId: window.appUser?.reloadYardId,\n activeBusinessName: { beginsWith: { active: \"true\" } },\n limit: 1000,\n })\n );\n setAccounts(response.data.accountByActiveByName.items);\n setLoading(false);\n } catch (err) {\n logError(\"common:AccountDropDown:getAccounts\", err, notify);\n }\n};\n\nexport const AccountDropDown = ({\n source,\n label,\n onAccountChange,\n helperText,\n validate,\n allowEmpty = true,\n alwaysOn = true,\n}) => {\n const notify = useNotify();\n const [accounts, setAccounts] = useState([]);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n getAccounts(setAccounts, notify, setLoading);\n }, [notify]);\n\n const handleAccountChange = (value) => {\n if (onAccountChange) {\n let selectedAccount = null;\n if (value) {\n selectedAccount = accounts.find((itm) => itm.id === value);\n }\n onAccountChange(selectedAccount);\n }\n };\n\n return (\n <>\n <AutocompleteInput\n source={source}\n label={label}\n variant=\"outlined\"\n fullWidth\n allowEmpty={allowEmpty}\n resettable\n clearable\n alwaysOn={alwaysOn}\n validate={validate}\n choices={accounts}\n optionText={accountNameRenderer}\n onChange={(value) => {\n handleAccountChange(value);\n }}\n loading={loading}\n loaded={!loading}\n helperText={helperText || false}\n />\n </>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport jsonExport from \"jsonexport/dist\";\n\nimport DateFnsUtils from \"@date-io/date-fns\";\nimport { addMonths, format, startOfMonth } from \"date-fns\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n getOutboundShipmentActivity,\n searchInventorysActivity,\n} from \"../../graphql/report-queries\";\n\nimport {\n Card,\n Grid,\n MenuItem,\n TextField as FilterField,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { MuiPickersUtilsProvider, DatePicker } from \"@material-ui/pickers\";\n\nimport {\n Button,\n Datagrid,\n DateField,\n downloadCSV,\n ListContextProvider,\n NumberField,\n SimpleForm,\n TextField,\n Title,\n TopToolbar,\n useList,\n useListContext,\n useNotify,\n} from \"react-admin\";\n\nimport { ExportIcon } from \"../../components/common\";\nimport { BackButton } from \"../../components/common/BackButton\";\nimport { ForceTitle } from \"../../components/common/ForceTitle\";\nimport { Pagination } from \"../../components/Pagination\";\nimport { logError } from \"../../utils/appUtils\";\nimport { InventoryTimelineCard } from \"../../crewApp/pages/inventorySearch/timeline/InventoryTimeline\";\nimport { ShipmentLineItemStatus } from \"../../utils/constants\";\nimport { AccountDropDown } from \"../../components/common/AccountDropDown\";\n\nconst useStyles = makeStyles((theme) => ({\n submitButton: {\n position: \"absolute\",\n bottom: theme.spacing(2),\n },\n}));\n\nconst exporter = (inventories, searchTerm) => {\n debugger;\n const inventoriesForExport = inventories.map((inventory) => {\n let totalOutbound = 0;\n\n const inventoryForExport = {\n inventoryId: inventory.id,\n productCode: inventory.productCode,\n productName: inventory.productName,\n locationFullName: inventory.locationFullName,\n lotNumber: inventory.lotNumber,\n inboundShipmentId: inventory.inboundShipmentId,\n inboundPoNumber: inventory.poNumber,\n deliveryDateTime: inventory.deliveryDateTime,\n inventoryUnits: inventory.inventoryUnits,\n status: inventory.status,\n quantityReceived: `${inventory.quantityDelivered}`,\n quantityCommitted: `${inventory.quantityCommitted}`,\n quantityOnHand: `${inventory.quantityOnHand}`,\n };\n\n if (inventory.shipmentLineItems?.items.length > 0) {\n inventoryForExport.outbounds = inventory.shipmentLineItems?.items.map(\n (itm) => {\n const outbound = {\n quantityShipped: `${itm.totalQuantityToPick}`,\n ShipmentId: itm.outboundShipmentId,\n poNumber: itm.outboundShipment.poNumber,\n status: itm.status,\n shippedDateTime: itm.outboundShipment.departureDateTime,\n };\n totalOutbound +=\n itm.status === ShipmentLineItemStatus.SHIPPED\n ? itm.totalQuantityToPick\n : 0;\n return outbound;\n }\n );\n }\n\n inventoryForExport.totalQuantityOutbound = `${totalOutbound}`;\n totalOutbound = 0;\n\n return inventoryForExport;\n });\n\n jsonExport(\n inventoriesForExport,\n {\n rename: [\n // \"Customer\", \"Product Code\", \"Product\", \"Inventory Qty\", \"UOM\"\n ],\n },\n (err, csv) => {\n downloadCSV(csv, `${searchTerm}`); // download as 'searchTerm.csv` file\n }\n );\n};\n\nconst ListActions = (props) => {\n const classes = useStyles();\n const {\n finalData,\n setAccountId,\n yearMonth,\n setYearMonth,\n searchTerm,\n setSearchTerm,\n getInventoryActivity,\n } = props;\n\n return (\n <TopToolbar>\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item container xs={8} spacing={1}>\n <Grid item xs={12} md={6}>\n <AccountDropDown\n source=\"accountId\"\n label=\"Account\"\n onAccountChange={(value) => setAccountId(value?.id)}\n allowEmpty={false}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <DatePicker\n label=\"Year / Month\"\n variant=\"inline\"\n inputVariant=\"outlined\"\n margin=\"dense\"\n fullWidth\n disableToolbar\n disableFuture\n autoOk\n required\n views={[\"year\", \"month\"]}\n openTo=\"year\"\n // format=\"MM/dd/yyyy\"\n minDate={new Date(window.appUser?.reloadYard.createdAt)}\n maxDate={new Date()}\n maxDateMessage=\"Max. 1 month range.\"\n value={yearMonth}\n onChange={setYearMonth}\n />\n </Grid>\n </Grid>\n <Grid item container xs={8} spacing={1}>\n <Grid item xs={12} md={6}>\n <FilterField\n id=\"search\"\n label=\"Product Name / Code\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n alwaysOn\n value={searchTerm}\n onChange={(evt) => setSearchTerm(evt?.target?.value)}\n />\n </Grid>\n </Grid>\n <Grid item xs={4}>\n <Button\n label=\"Run\"\n variant=\"contained\"\n color=\"default\"\n alwaysOn\n className={classes.submitButton}\n onClick={getInventoryActivity}\n disabled={!yearMonth}\n />\n </Grid>\n </Grid>\n </MuiPickersUtilsProvider>\n <Button\n label=\"Export\"\n disabled={finalData?.length === 0}\n onClick={() => exporter(finalData, searchTerm)}\n >\n <ExportIcon />\n </Button>\n <BackButton basePath=\"/reports\" />\n </TopToolbar>\n );\n};\n\n// /reportInventoryActivity\nexport const InventoryActivityReport = (props) => {\n const notify = useNotify();\n const reloadYardId = window.appUser?.reloadYardId\n ? window.appUser.reloadYardId\n : props.history?.location?.state?.reloadYardId;\n\n const [accountId, setAccountId] = useState(\"\");\n const [yearMonth, setYearMonth] = useState(null);\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const [finalData, setFinalData] = useState([]);\n const [loading, setLoading] = useState(false);\n\n const getInventoryActivity = async () => {\n try {\n setLoading(true);\n debugger;\n const startDate = format(startOfMonth(yearMonth), \"yyyy-MM\");\n const endDate = format(startOfMonth(addMonths(yearMonth, 1)), \"yyyy-MM\");\n const limit = 1000;\n\n const searchInput = {\n sort: { field: \"deliveryDateTime\", direction: \"asc\" },\n filter: {\n reloadYardId: { eq: reloadYardId },\n and: [\n { deliveryDateTime: { gte: `${startDate}` } },\n { deliveryDateTime: { lte: `${endDate}` } },\n ],\n },\n limit,\n };\n if (accountId) {\n searchInput.filter.accountId = { eq: `${accountId}` };\n }\n if (searchTerm) {\n searchInput.filter.or = [\n { productCode: { matchPhrasePrefix: `${searchTerm}` } },\n { productCode: { wildcard: `*${searchTerm}*` } },\n { productName: { matchPhrasePrefix: `${searchTerm}` } },\n { productName: { wildcard: `*${searchTerm}*` } },\n { customFields: { matchPhrasePrefix: `${searchTerm}` } },\n { customFields: { wildcard: `*${searchTerm}*` } },\n ];\n }\n\n let inventorys = [];\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { ...searchInput, nextToken };\n const result = await API.graphql(\n graphqlOperation(searchInventorysActivity, input)\n );\n inventorys.splice(-1, 0, ...result.data.searchInventorys.items);\n if (result.data.searchInventorys.items.length < limit) break;\n nextToken = result.data.searchInventorys.nextToken;\n }\n // inventorys = inventorys.filter(itm => itm.shipmentLineItems.items.length > 0 );\n\n const outboundIdMap = {};\n const promiseList = [];\n inventorys.forEach((inv) => {\n inv.shipmentLineItems.items.forEach((itm) => {\n if (!outboundIdMap[itm.outboundShipmentId]) {\n outboundIdMap[itm.outboundShipmentId] = true;\n promiseList.push(\n API.graphql(\n graphqlOperation(getOutboundShipmentActivity, {\n id: itm.outboundShipmentId,\n })\n )\n );\n }\n });\n });\n\n const results = await Promise.all(promiseList);\n results.forEach((res) => {\n outboundIdMap[res.data.getOutboundShipment.id] =\n res.data.getOutboundShipment;\n });\n\n inventorys.forEach((inv) => {\n inv.shipmentLineItems.items.forEach((itm) => {\n itm.outboundShipment = outboundIdMap[itm.outboundShipmentId];\n });\n });\n\n setFinalData(inventorys);\n } catch (err) {\n logError(\"InventoryActivityList:getInventoryActivity\", err, notify);\n setFinalData([]);\n } finally {\n setLoading(false);\n }\n };\n\n const fixedFilter = \"\"; // {\"lowInventoryAlert\": true};\n const defaultSort = { field: \"deliveryDateTime\", order: \"ASC\" };\n const defaultPerPage = 25;\n\n const listContext = useList({\n ...props,\n data: finalData,\n ids: finalData.map(({ id }) => id),\n loading,\n loaded: !loading,\n filter: fixedFilter,\n sort: defaultSort,\n perPage: defaultPerPage,\n });\n\n return (\n <SimpleForm toolbar={false}>\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Inventory Activity\" />} />\n <ListActions\n {...props}\n finalData={finalData}\n setAccountId={setAccountId}\n yearMonth={yearMonth}\n setYearMonth={setYearMonth}\n searchTerm={searchTerm}\n setSearchTerm={setSearchTerm}\n getInventoryActivity={getInventoryActivity}\n />\n <Card>\n <InventoryGrid />\n <Pagination {...listContext} />\n </Card>\n </ListContextProvider>\n </SimpleForm>\n );\n};\n\nconst InventoryGrid = (props) => {\n const listContext = useListContext(props);\n listContext.basePath = \"/inventories\";\n listContext.resource = \"inventories\";\n // const redirectToTimeline = inventoryId => redirect(`/search/timeline/${inventoryId}`)\n\n return (\n // <Datagrid rowClick={redirectToTimeline} >\n <Datagrid rowClick=\"expand\" expand={<InventoryPeak />} {...listContext}>\n <TextField source=\"productCode\" label=\"Product Code\" />\n <TextField source=\"productName\" label=\"Product Name\" />\n <TextField source=\"poNumber\" label=\"PO Number\" />\n <DateField source=\"deliveryDateTime\" label=\"Delivered\" />\n <NumberField source=\"quantityDelivered\" label=\"Qty. Received\" />\n <NumberField source=\"quantityOnHand\" label=\"Qty. OnHand\" />\n <NumberField source=\"quantityCommitted\" label=\"Qty. Committed\" />\n <TextField source=\"inventoryUnits\" label=\"UOM\" />\n </Datagrid>\n );\n};\n\nconst InventoryPeak = ({ record, ...props }) => (\n <InventoryTimelineCard inventoryId={record.id} isLoaded={false} />\n);\n","import * as React from \"react\";\nimport { Route } from \"react-router-dom\";\n\nimport SetupList from \"../resources/registrations/SetupList\";\nimport Logout from \"../../components/Logout\";\n\nimport { EmailAnnouncement } from \"../../adminApp/resources/announcements/EmailAnnouncement\";\nimport { InventoryActivityReport } from \"../../managerApp/reports/InventoryActivityReport\";\n\nconst adminRoutes = [\n <Route exact path=\"/logout\" render={() => <Logout />} />,\n <Route path=\"/newYard\" render={(props) => <SetupList {...props} />} />,\n <Route\n path=\"/emailAnnouncement\"\n render={(props) => <EmailAnnouncement {...props} />}\n />,\n <Route\n path=\"/reportInventoryActivity\"\n render={(props) => (\n <InventoryActivityReport\n resource=\"inventories\"\n basePath=\"/inventories\"\n {...props}\n />\n )}\n />,\n];\n\nexport default adminRoutes;\n","import React from \"react\";\nimport { logError } from \"./utils/appUtils\";\n\nconst ThemeContext = React.createContext();\n\nexport const ThemeStateProvider = (props) => {\n const [palette, setPalette] = React.useState(localStorage.getItem(\"theme\"));\n\n const toggleTheme = () => {\n const newPalette = palette === \"light\" ? \"dark\" : \"light\";\n try {\n localStorage.setItem(\"theme\", newPalette);\n setPalette(newPalette);\n } catch (err) {\n logError(\"ThemeStateProvider:toggleTheme\", err, false);\n }\n };\n\n return (\n <ThemeContext.Provider\n value={{\n palette,\n toggleTheme,\n }}\n >\n {props.children}\n </ThemeContext.Provider>\n );\n};\n\nexport const useThemeState = () => React.useContext(ThemeContext);\n","import * as React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { DashboardMenuItem, MenuItemLink } from \"react-admin\";\nimport { useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n AnnouncementsIcon,\n CustomersIcon,\n HelpIcon,\n LogoutIcon,\n LogsIcon,\n YardSetupIcon,\n} from \"../../components/common\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n paddingTop: theme.spacing(2),\n },\n}));\n\nconst Menu = ({ onMenuClick, dense }) => {\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const open = useSelector((state) => state.admin.ui.sidebarOpen);\n useSelector((state) => state.theme);\n\n return (\n <div className={classes.root}>\n {\" \"}\n <DashboardMenuItem onClick={onMenuClick} sidebarIsOpen={open} />\n <MenuItemLink\n to={`/setupDatas`}\n primaryText=\"Registrations\"\n leftIcon={<YardSetupIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n <MenuItemLink\n to={`/reloadYards`}\n primaryText=\"Reload Yards\"\n leftIcon={<CustomersIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n <MenuItemLink\n to={`/announcements`}\n primaryText=\"Announcements\"\n leftIcon={<AnnouncementsIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n <MenuItemLink\n to={`/commoditys`}\n primaryText=\"Commodities\"\n leftIcon={<CustomersIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n <MenuItemLink\n to={`/helpPages`}\n primaryText=\"Help Pages\"\n leftIcon={<HelpIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n <MenuItemLink\n to={`/logs`}\n primaryText=\"Logs\"\n leftIcon={<LogsIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n {isXSmall && (\n <MenuItemLink\n to=\"/logout\"\n primaryText=\"Logout\"\n leftIcon={<LogoutIcon />}\n />\n )}\n </div>\n );\n};\n\nexport default Menu;\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n margin: \"0 auto\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n}));\n\nexport const AppBarHeader = ({ children }) => {\n const classes = useStyles();\n return <div className={classes.container}>{children}</div>;\n};\n","import React, { useState, useRef, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { HelpIcon, SearchIcon } from \"./index\";\nimport { IconButton } from \"@material-ui/core\";\n\nconst useStyles = makeStyles({\n container: {\n display: \"flex\",\n alignItems: \"center\",\n },\n slideIn: {\n display: \"flex\",\n borderRadius: \"5px\",\n animation: \"$slideIn 0.5s ease-in-out\",\n overflow: \"hidden\",\n },\n slideOut: {\n display: \"flex\",\n borderRadius: \"5px\",\n animation: \"$slideOut 0.5s ease-in-out\",\n overflow: \"hidden\",\n },\n input: {\n border: \"1px solid #ddd\",\n padding: \"6px 10px\",\n borderRadius: \"5px\",\n fontSize: \"17px\",\n fontWeight: \"600\",\n color: \"#fff\",\n backgroundColor: \"transparent\",\n \"&::placeholder\": {\n color: \"#eee\",\n },\n \"&:focus\": {\n borderColor: \"#fff\",\n outline: \"none\",\n },\n },\n \"@keyframes slideIn\": {\n from: {\n width: \"0\",\n opacity: 0,\n },\n to: {\n width: \"250px\",\n opacity: 1,\n },\n },\n \"@keyframes slideOut\": {\n from: {\n width: \"250px\",\n opacity: 1,\n },\n to: {\n width: \"0\",\n opacity: 0,\n },\n },\n searchButton: {},\n});\n\nexport const HelpWPSearchButton = () => {\n const classes = useStyles();\n const [isVisible, setIsVisible] = useState(false);\n const [isAnimating, setIsAnimating] = useState(false);\n const [searchValue, setSearchValue] = useState(\"\");\n const inputRef = useRef(null);\n\n useEffect(() => {\n const handleClickOutside = (event) => {\n if (inputRef.current && !inputRef.current.contains(event.target)) {\n setIsAnimating(true);\n setTimeout(() => {\n setIsAnimating(false);\n setIsVisible(false);\n }, 500);\n }\n };\n\n if (isVisible) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n } else {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isVisible]);\n\n const toggleSearchInputVisibility = () => {\n if (isVisible) {\n setIsAnimating(true);\n setTimeout(() => {\n setIsAnimating(false);\n setIsVisible(false);\n }, 500);\n } else {\n setIsVisible(true);\n }\n };\n\n const onChange = (e) => setSearchValue(e.target.value);\n\n const redirectToPage = () => {\n if (!searchValue.trim()) {\n return;\n }\n const url = `https://transloads.co/?s=${encodeURIComponent(\n searchValue.trim()\n )}&post_type=article&ignore_sticky_posts=1&order_by=relevance`;\n function openFullSizeWindow(url) {\n const screenWidth = window.screen.width / 2;\n const screenHeight = window.screen.height;\n const windowFeatures = `\n width=${screenWidth},\n height=${screenHeight},\n left=${screenWidth},\n top=0,\n toolbar=no,\n menubar=no,\n scrollbars=no,\n resizable=yes,\n location=no,\n status=no\n `;\n\n const newWindow = window.open(url, \"_blank\", windowFeatures);\n\n if (newWindow) {\n newWindow.moveTo(screenWidth, 0);\n newWindow.resizeTo(screenWidth, screenHeight);\n }\n }\n openFullSizeWindow(url);\n toggleSearchInputVisibility();\n };\n\n const handleKeyDown = (e) => {\n if (e.key === \"Enter\") {\n redirectToPage();\n }\n };\n\n return (\n <div className={classes.container}>\n <IconButton onClick={toggleSearchInputVisibility}>\n {isVisible ? \"\" : <HelpIcon htmlColor=\"#fff\" fontSize=\"medium\" />}\n </IconButton>\n {(isVisible || isAnimating) && (\n <div\n ref={inputRef}\n className={isAnimating ? classes.slideOut : classes.slideIn}\n >\n <input\n autoFocus\n variant=\"outlined\"\n size=\"small\"\n color=\"secondary\"\n placeholder=\"Search...\"\n className={classes.input}\n onChange={onChange}\n onKeyDown={handleKeyDown}\n />\n <IconButton\n className={classes.searchButton}\n onMouseDown={(e) => e.preventDefault()}\n onClick={redirectToPage}\n >\n <SearchIcon htmlColor=\"#fff\" fontSize=\"medium\" />\n </IconButton>\n </div>\n )}\n </div>\n );\n};\n","import React, { Fragment } from \"react\";\nimport { Layout, AppBar, Notification } from \"react-admin\";\nimport { UserMenu, MenuItemLink } from \"react-admin\";\n\nimport {\n FormControlLabel,\n Tooltip,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport MoreVertIcon from \"@material-ui/icons/MoreVert\";\n\nimport {\n LogoutIcon,\n ProfileIcon,\n ThemeToggleIcon,\n} from \"../../components/common\";\nimport { useThemeState } from \"../../ThemeStateProvider\";\nimport { getEnv } from \"../../utils/appUtils\";\nimport MyMenu from \"./AdminMenu\";\nimport { AppBarHeader } from \"../../components/common/AppBarHeader\";\nimport { HelpWPSearchButton } from \"../../components/common/HelpWPSearchButton\";\n\nconst useStyles = makeStyles((theme) => ({\n themeLink: {\n paddingLeft: theme.spacing(3.3),\n },\n themeIcon: {\n marginRight: theme.spacing(2),\n },\n env: {\n margin: \"auto\",\n paddingTop: theme.spacing(0),\n position: \"absolute\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n },\n dev: {\n background: \"#2fbb2f\",\n },\n hotfix: {\n background: \"#FF9900\",\n },\n prod: {\n background: \"#ee2f2f\",\n },\n}));\n\nconst AdminMenu = (props) => {\n const classes = useStyles();\n const { toggleTheme } = useThemeState();\n\n return (\n <UserMenu label=\"USER\" icon={<MoreVertIcon />}>\n <Tooltip title=\"Change Theme\" placement=\"right\">\n <div>\n <FormControlLabel\n control={\n <ThemeToggleIcon\n fontSize=\"medium\"\n className={classes.themeIcon}\n />\n }\n label=\"Theme\"\n onClick={toggleTheme}\n className={classes.themeLink}\n />\n </div>\n </Tooltip>\n\n <MenuItemLink\n to={false}\n primaryText={window.appUser?.fullName}\n leftIcon={<ProfileIcon />}\n />\n <MenuItemLink\n to=\"/logout\"\n primaryText=\"Logout\"\n leftIcon={<LogoutIcon />}\n />\n </UserMenu>\n );\n};\n\nconst AdminAppBar = (props) => {\n const classes = useStyles();\n const env = getEnv();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n return (\n <AppBar\n {...props}\n color={\"transparent\"}\n className={\n env === \"dev\"\n ? classes.dev\n : env === \"hotfix\"\n ? classes.hotfix\n : classes.prod\n }\n userMenu={<AdminMenu />}\n container={Fragment}\n >\n <AppBarHeader>\n <Typography variant=\"h4\" className={classes.env}>\n {env}\n </Typography>\n </AppBarHeader>\n {!isSmall && <HelpWPSearchButton />}\n </AppBar>\n );\n};\n\nexport const AdminLayout = (props) => (\n <Layout\n {...props}\n appBar={AdminAppBar}\n menu={MyMenu}\n notification={Notification}\n />\n);\n","// List IDs queries - FOR BULK DELETE\n// ##########################################\nexport const listAccountIds = /* GraphQL */ `\n query ListAccounts(\n $filter: ModelAccountFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listAccounts(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n }\n nextToken\n }\n }\n`;\nexport const listUserIds = /* GraphQL */ `\n query ListUsers(\n $filter: ModelUserFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listUsers(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n email\n reloadYardId\n }\n nextToken\n }\n }\n`;\nexport const listInboundShipmentIds = /* GraphQL */ `\n query ListInboundShipments(\n $filter: ModelInboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listInboundShipments(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n accountId\n reloadYardId\n }\n nextToken\n }\n }\n`;\nexport const listSetupDataIds = /* GraphQL */ `\n query ListSetupDatas(\n $filter: ModelSetupDataFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listSetupDatas(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n }\n nextToken\n }\n }\n`;\nexport const listTaskIds = /* GraphQL */ `\n query ListTasks(\n $filter: ModelTaskFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listTasks(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n reloadYardId\n }\n nextToken\n }\n }\n`;\nexport const listInventoryIds = /* GraphQL */ `\n query ListInventories(\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listInventories(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n reloadYardId\n accountId\n productId\n inboundShipmentId\n outboundShipmentId\n areaId\n zoneId\n reloadYardCommodityId\n aggregateInventoryId\n }\n nextToken\n }\n }\n`;\nexport const listAuditIds = /* GraphQL */ `\n query ListAudits(\n $filter: ModelAuditFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listAudits(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n reloadYardId\n }\n nextToken\n }\n }\n`;\nexport const listShipmentLineItemIds = /* GraphQL */ `\n query ListShipmentLineItems(\n $filter: ModelShipmentLineItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listShipmentLineItems(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n reloadYardId\n accountId\n outboundShipmentId\n inventoryId\n }\n nextToken\n }\n }\n`;\nexport const listOutboundShipmentIds = /* GraphQL */ `\n query ListOutboundShipments(\n $filter: ModelOutboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listOutboundShipments(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n reloadYardId\n accountId\n }\n nextToken\n }\n }\n`;\nexport const listInvoiceIds = /* GraphQL */ `\n query ListInvoices(\n $filter: ModelInvoiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listInvoices(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n }\n nextToken\n }\n }\n`;\nexport const listInvoiceServiceIds = /* GraphQL */ `\n query ListInvoiceServices(\n $filter: ModelInvoiceServiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listInvoiceServices(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n }\n nextToken\n }\n }\n`;\nexport const listServiceIds = /* GraphQL */ `\n query ListServices(\n $filter: ModelServiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listServices(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n reloadYardId\n accountId\n }\n nextToken\n }\n }\n`;\nexport const listReloadYardIds = /* GraphQL */ `\n query ListReloadYards(\n $filter: ModelReloadYardFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listReloadYards(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n }\n nextToken\n }\n }\n`;\nexport const listReloadYardCapabilityIds = /* GraphQL */ `\n query ListReloadYardCapabilitys(\n $filter: ModelReloadYardCapabilityFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listReloadYardCapabilitys(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n reloadYardId\n capabilityId\n }\n nextToken\n }\n }\n`;\nexport const listCapabilityIds = /* GraphQL */ `\n query ListCapabilitys(\n $filter: ModelCapabilityFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listCapabilitys(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n }\n nextToken\n }\n }\n`;\nexport const listReloadYardCommodityIds = /* GraphQL */ `\n query ListReloadYardCommoditys(\n $filter: ModelReloadYardCommodityFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listReloadYardCommoditys(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n reloadYardId\n commodityId\n }\n nextToken\n }\n }\n`;\nexport const listCommodityIds = /* GraphQL */ `\n query ListCommoditys(\n $filter: ModelCommodityFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listCommoditys(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n }\n nextToken\n }\n }\n`;\nexport const listAisleIds = /* GraphQL */ `\n query ListAisles(\n $filter: ModelAisleFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listAisles(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n reloadYardId\n areaId\n zoneId\n }\n nextToken\n }\n }\n`;\nexport const listLocationIds = /* GraphQL */ `\n query ListLocations(\n $filter: ModelLocationFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listLocations(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n reloadYardId\n areaId\n zoneId\n aisleId\n }\n nextToken\n }\n }\n`;\nexport const listLogIds = /* GraphQL */ `\n query ListLogs(\n $filter: ModelLogFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listLogs(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n }\n nextToken\n }\n }\n`;\n\nexport const listProductIds = /* GraphQL */ `\n query ListProducts(\n $filter: ModelProductFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listProducts(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n accountId\n reloadYardId\n productCode\n reloadYardCommodityId\n }\n nextToken\n }\n }\n`;\n","// https://github.com/aws-amplify/amplify-cli/issues/2420\n\n//###############################################\n// runAccountChange\n//###############################################\nexport const searchInboundShipments = /* GraphQL */ `\n query SearchInboundShipments(\n $filter: SearchableInboundShipmentFilterInput\n $sort: SearchableInboundShipmentSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInboundShipments(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n active\n status\n state\n poNumber\n lotNumber\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n daysOnDemurrageClock\n accountName\n accountId\n reloadYardId\n inventories {\n items {\n id\n active\n status\n lotNumber\n poNumber\n deliveryDateTime\n lastShipDateTime\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n productName\n productCode\n productId\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n status\n areaId\n zoneId\n aisleId\n locationId\n inboundShipmentId\n outboundShipmentId\n locationFullName\n }\n }\n shipmentLineItems {\n items {\n id\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n outboundShipmentId\n accountId\n reloadYardId\n inventoryId\n }\n nextToken\n }\n customFields\n sortKey\n }\n nextToken\n }\n invoiceId\n invoice {\n id\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n items {\n id\n }\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n }\n }\n nextToken\n total\n }\n }\n`;\n\nexport const searchOutboundShipments = /* GraphQL */ `\n query SearchOutboundShipments(\n $filter: SearchableOutboundShipmentFilterInput\n $sort: SearchableOutboundShipmentSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchOutboundShipments(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n invoice {\n id\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n items {\n id\n }\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n }\n shipmentLineItems {\n items {\n id\n active\n status\n lotNumber\n poNumber\n totalQuantityToPick\n outboundShipmentId\n reloadYardId\n sortKey\n inventoryId\n inventory {\n id\n # productId\n # productCode\n # productName\n # inventoryUnits\n reloadYardCommodityId\n quantityOnHand\n quantityCommitted\n }\n inventoryItems {\n items {\n inventoryItem {\n id\n quantityOnHand\n quantityCommitted\n status\n locationFullName\n }\n quantityToPick\n status\n }\n nextToken\n }\n }\n }\n customFields\n }\n nextToken\n total\n }\n }\n`;\n\n//###############################################\n// run_Inventory_backfill\n//###############################################\nexport const searchInventorysBackfill = /* GraphQL */ `\n query SearchInventorys(\n $filter: SearchableInventoryFilterInput\n $sort: SearchableInventorySortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInventorys(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n lotType\n accountId\n accountName\n poNumber\n railCarNumber\n productId\n productCode\n productName\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n overShipmentQuantity\n underShipmentQuantity\n otherException\n areaId\n area {\n areaType\n }\n zoneId\n aisleList\n sortKey\n reloadYardId\n inboundShipmentId\n inboundShipment {\n status\n state\n totalUnits\n }\n history {\n type\n date\n by\n text\n }\n reloadYardCommodityId\n reloadYardCommodity {\n commodity {\n name\n locationLoadType\n }\n }\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n status\n areaId\n zoneId\n aisleId\n locationId\n inboundShipmentId\n outboundShipmentId\n locationFullName\n location {\n id\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n aisleId\n productId\n sortKey\n }\n }\n }\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n totalQuantityToPick\n outboundShipmentId\n reloadYardId\n sortKey\n inventoryId\n inventoryItems {\n items {\n id\n shipmentLineItemId\n inventoryItemId\n quantityToPick\n status\n }\n }\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\n\nexport const inventoryByStatusByLot = /* GraphQL */ `\n query InventoryByStatusByLot(\n $reloadYardId: ID\n $statusLotNumber: ModelInventoryInventoryByStatusByLotCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryByStatusByLot(\n reloadYardId: $reloadYardId\n statusLotNumber: $statusLotNumber\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n lotType\n accountId\n accountName\n poNumber\n railCarNumber\n productName\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n overShipmentQuantity\n underShipmentQuantity\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n # location {\n # id\n # owner\n # groups\n # active\n # reloadYardId\n # name\n # type\n # locationLoad {\n # other {\n # selected\n # capacity\n # }\n # pallet {\n # selected\n # capacity\n # }\n # box {\n # selected\n # capacity\n # }\n # container {\n # selected\n # capacity\n # }\n # superSack {\n # selected\n # capacity\n # }\n # }\n # areaId\n # area {\n # id\n # owner\n # groups\n # active\n # reloadYardId\n # name\n # prefix\n # areaType\n # sortKey\n # }\n # zoneId\n # zone {\n # id\n # owner\n # groups\n # active\n # reloadYardId\n # name\n # prefix\n # accountId\n # areaId\n # zoneType\n # sortKey\n # }\n # aisleId\n # aisle {\n # id\n # owner\n # groups\n # active\n # reloadYardId\n # name\n # type\n # areaId\n # zoneId\n # bays\n # levels\n # positions\n # capacityUsed\n # sortKey\n # topDownPickOrder\n # }\n # bay\n # level\n # position\n # capacityAllocated\n # capacityUsed\n # length\n # width\n # sortKey\n # }\n outboundShipmentId\n sortKey\n reloadYardId\n inboundShipmentId\n history {\n type\n date\n by\n text\n }\n reloadYardCommodityId\n reloadYardCommodity {\n commodity {\n name\n locationLoadType\n }\n }\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n status\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n locationFullName\n }\n }\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n totalQuantityToPick\n outboundShipmentId\n reloadYardId\n sortKey\n inventoryId\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\n\nexport const listInventories = /* GraphQL */ `\n query ListInventories(\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listInventories(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n lotType\n accountId\n accountName\n poNumber\n railCarNumber\n productId\n productCode\n productName\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n outboundShipmentId\n sortKey\n reloadYardId\n inboundShipmentId\n hasException\n inboundShipment {\n id\n status\n state\n totalUnits\n }\n history {\n type\n date\n by\n text\n }\n reloadYardCommodityId\n reloadYardCommodity {\n commodity {\n name\n locationLoadType\n }\n }\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n status\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n locationFullName\n hasException\n }\n }\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n totalQuantityToPick\n outboundShipmentId\n reloadYardId\n sortKey\n inventoryId\n inventoryItems {\n items {\n id\n shipmentLineItemId\n inventoryItemId\n quantityToPick\n status\n inventoryItem {\n id\n quantityOnHand\n quantityCommitted\n status\n hasException\n }\n }\n }\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\n\n//###############################################\n// runLocationAudit\n//###############################################\nexport const listLocations = /* GraphQL */ `\n query ListLocations(\n $filter: ModelLocationFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listLocations(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n active\n name\n type\n bay\n level\n position\n capacityAllocated\n capacityUsed\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n }\n nextToken\n }\n }\n`;\n\nexport const locationBySortKey = /* GraphQL */ `\n query LocationBySortKey(\n $reloadYardId: ID\n $sortKey: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelLocationFilterInput\n $limit: Int\n $nextToken: String\n ) {\n locationBySortKey(\n reloadYardId: $reloadYardId\n sortKey: $sortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n active\n reloadYardId\n name\n prefix\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n zoneType\n sortKey\n }\n aisleId\n aisle {\n id\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n capacityUsed\n sortKey\n topDownPickOrder\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n productId\n sortKey\n }\n nextToken\n }\n }\n`;\n\nexport const inventoryItemByAisleByStatusAudit = /* GraphQL */ `\n query InventoryItemByAisleByStatus(\n $aisleId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByAisleByStatus(\n aisleId: $aisleId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n quantityOnHand\n unloadedBy\n unloadedDateTime\n aisleId\n locationId\n status\n inventory {\n productId\n inventoryUnits\n reloadYardCommodity {\n commodity {\n id\n name\n description\n locationLoadType\n }\n }\n }\n }\n nextToken\n }\n }\n`;\n\n//###############################################\n// InboundInvoiceReport /reportInboundInvoices\n//###############################################\nexport const searchInboundInvoices = /* GraphQL */ `\n query SearchInboundShipments(\n $filter: SearchableInboundShipmentFilterInput\n $sort: SearchableInboundShipmentSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInboundShipments(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n status\n state\n poNumber\n lotNumber\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n placedDateTime\n accountId\n accountName\n invoiceId\n invoice {\n status\n invoiceNumber\n poNumber\n sentDate\n paidDate\n subtotal\n tax\n total\n balance\n inboundShipmentId\n outboundShipmentId\n lineItems {\n items {\n service {\n name\n description\n }\n quantity\n units\n unitCost\n amount\n itemTax\n serviceNote\n }\n nextToken\n }\n createdAt\n }\n customFields\n }\n nextToken\n total\n }\n }\n`;\n\n//###############################################\n// OutboundInvoiceReport /reportOutboundInvoices\n//###############################################\nexport const searchOutboundInvoices = /* GraphQL */ `\n query SearchOutboundShipments(\n $filter: SearchableOutboundShipmentFilterInput\n $sort: SearchableOutboundShipmentSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchOutboundShipments(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n status\n state\n transfer\n transferToAccountName\n poNumber\n pickupNumber\n bolNumber\n railCarNumber\n departureDateTime\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n accountName\n invoiceId\n invoice {\n status\n invoiceNumber\n poNumber\n sentDate\n paidDate\n subtotal\n tax\n total\n balance\n inboundShipmentId\n outboundShipmentId\n lineItems {\n items {\n service {\n name\n description\n }\n quantity\n units\n unitCost\n amount\n itemTax\n serviceNote\n }\n nextToken\n }\n createdAt\n }\n customFields\n createdAt\n }\n nextToken\n total\n }\n }\n`;\n\n//###############################################\n// InventoryStorageReport /reportInventoryStorage\n//###############################################\nexport const inventoryByStatusByAccountIdByProductByLot = /* GraphQL */ `\n query InventoryByStatusByAccountIdByProductByLot(\n $reloadYardId: ID\n $statusAccountIdProductNameLotNumber: ModelInventoryInventoryByStatusByAccountIdByProductByLotCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryByStatusByAccountIdByProductByLot(\n reloadYardId: $reloadYardId\n statusAccountIdProductNameLotNumber: $statusAccountIdProductNameLotNumber\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n quantityOnHand\n quantityPhysical\n inventoryUnits\n weight\n weightUnits\n areaId\n zoneId\n productName\n productCode\n productId\n accountId\n }\n nextToken\n }\n }\n`;\n\n//###############################################\n// AvgInventoryTurnsByAccount /reportTurnoverByAccount\n//###############################################\nexport const countInventoryTurns = /* GraphQL */ `\n query SearchInventorys(\n $filter: SearchableInventoryFilterInput\n $sort: SearchableInventorySortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInventorys(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n turnDays\n }\n total\n }\n }\n`;\n\nexport const outboundShipmentByStatusDeleteMe = /* GraphQL */ `\n query OutboundShipmentByStatus(\n $reloadYardId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelOutboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n outboundShipmentByStatus(\n reloadYardId: $reloadYardId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n state\n poNumber\n accountName\n accountId\n billToAccountId\n reloadYardId\n scheduledDateTime\n arrivalDateTime\n endDateTime\n createDateTime\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n totalQuantityToPick\n outboundShipmentId\n reloadYardId\n sortKey\n inventoryId\n inventory {\n id\n active\n groups\n reloadYardId\n status\n outboundShipmentId\n productName\n productCode\n productId\n lotType\n lotNumber\n poNumber\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n status\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n locationFullName\n latitude\n longitude\n }\n }\n }\n inventoryItems {\n items {\n id\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryItemId\n quantityToPick\n status\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\n\nexport const listInventoryItemsIds = /* GraphQL */ `\n query ListInventoryItems(\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listInventoryItems(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n inventoryId\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n reloadYardId\n }\n nextToken\n }\n }\n`;\n\nexport const listInventoryItemsDeleteMe = /* GraphQL */ `\n query ListInventoryItems(\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listInventoryItems(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n status\n inventoryId\n inventory {\n id\n accountId\n inboundShipmentId\n quantityCommitted\n locationId\n outboundShipmentId\n deliveryDateTime\n history {\n type\n date\n by\n text\n }\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityUsed\n capacityAllocated\n length\n width\n sortKey\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n reloadYardId\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\n\nexport const listShipmentLineItemInventoryItemsDeleteMe = /* GraphQL */ `\n query ListShipmentLineItemInventoryItems(\n $filter: ModelShipmentLineItemInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listShipmentLineItemInventoryItems(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryId\n inventoryItemId\n quantityToPick\n status\n createdAt\n updatedAt\n inventoryItem {\n id\n inventory {\n id\n locationId\n }\n }\n }\n nextToken\n }\n }\n`;\n\n//###############################################\n// devDeleteEmptyInbounds\n//###############################################\nexport const inboundShipmentByReloadYardByAccount = /* GraphQL */ `\n query InboundShipmentByReloadYardByAccount(\n $reloadYardId: ID\n $accountId: ModelIDKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inboundShipmentByReloadYardByAccount(\n reloadYardId: $reloadYardId\n accountId: $accountId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n active\n status\n state\n accountId\n reloadYardId\n inventories {\n items {\n id\n status\n accountId\n accountName\n inboundShipmentId\n reloadYardId\n deliveryDateTime\n lastShipDateTime\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n aisleId\n locationId\n aisleList\n productName\n productCode\n productId\n lotNumber\n lotType\n customFields\n sortKey\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n status\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n locationFullName\n latitude\n longitude\n unloadedBy\n unloadedDateTime\n }\n }\n shipmentLineItems {\n items {\n id\n groups\n active\n status\n lotNumber\n poNumber\n totalQuantityToPick\n outboundShipmentId\n reloadYardId\n inventoryId\n inventoryItems {\n items {\n id\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryId\n inventoryItemId\n quantityToPick\n status\n }\n nextToken\n }\n }\n nextToken\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n }\n nextToken\n }\n }\n nextToken\n }\n }\n`;\n\n//###############################################\n// fixMissingLocationNames\n//###############################################\nexport const inventoryItemByLocationByStatus = /* GraphQL */ `\n query InventoryItemByLocationByStatus(\n $locationId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByLocationByStatus(\n locationId: $locationId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n aisleList\n outboundShipmentId\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n history {\n type\n date\n by\n text\n }\n }\n barcode\n areaId\n zoneId\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n }\n aisleId\n aisle {\n id\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n capacityUsed\n sortKey\n topDownPickOrder\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n history {\n type\n date\n by\n text\n }\n }\n nextToken\n }\n }\n`;\n\nexport const listProducts = /* GraphQL */ `\n query ListProducts(\n $filter: ModelProductFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listProducts(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n active\n accountId\n reloadYardId\n productCode\n reloadYardCommodityId\n name\n customFields\n }\n nextToken\n }\n }\n`;\n","import React, { useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport * as queries from \"../../graphql/queries\";\nimport * as mutations from \"../../graphql/mutations\";\nimport * as accountQueries from \"../../graphql/account/custom-queries\";\nimport * as inboundQueries from \"../../graphql/inbound/custom-queries\";\nimport * as listIdQueries from \"../../graphql/list-id-queries\";\nimport * as adminQueries from \"../../graphql/admin-queries\";\nimport * as inventoryMutations from \"../../graphql/inventory/custom-mutations\";\n\nimport {\n Backdrop,\n Button,\n CircularProgress,\n DialogActions,\n DialogContent,\n DialogTitle,\n Dialog,\n Grid,\n MenuItem,\n TextField as TextInput,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { ArrayField, Datagrid, TextField, BooleanField } from \"react-admin\";\n\nimport { logError } from \"../../utils/appUtils\";\nimport {\n InboundState,\n InboundStatus,\n InventoryStatus,\n LocationType,\n MAX_INVENTORY_QUERY_LIMIT,\n ShipmentLineItemStatus,\n} from \"../../utils/constants\";\nimport { getLocationFullName, isTrack } from \"../../utils/locationUtils\";\nimport { trimDecimal } from \"../../utils/utils\";\nimport SwitchOnOff from \"../../components/common/AntSwitch\";\n\nconst useStyles = makeStyles((theme) => ({\n card: {\n marginTop: theme.spacing(2),\n overflow: \"auto\",\n },\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: \"#fff\",\n },\n}));\n\nconst resourceOptions = [\n { id: \"accounts\", name: \"Account\" },\n { id: \"announcements\", name: \"Announcement\" },\n { id: \"aisles\", name: \"Aisle\" },\n { id: \"areas\", name: \"Area\" },\n { id: \"audits\", name: \"Audit\" },\n { id: \"capabilitys\", name: \"Capability\" },\n { id: \"checklists\", name: \"Checklist\" },\n { id: \"commoditys\", name: \"Commodity\" },\n { id: \"customerReloadYardAccounts\", name: \"CustomerReloadYardAccount\" },\n { id: \"eventTypes\", name: \"EventType\" },\n { id: \"files\", name: \"File\" },\n { id: \"helpPages\", name: \"HelpPage\" },\n { id: \"inboundShipments\", name: \"InboundShipment\" },\n { id: \"inventories\", name: \"Inventory\" },\n { id: \"inventoryItems\", name: \"InventoryItem\" },\n { id: \"invoices\", name: \"Invoice\" },\n { id: \"invoiceServices\", name: \"InvoiceService\" },\n { id: \"locations\", name: \"Location\" },\n { id: \"locationTags\", name: \"LocationTag\" },\n // { id: \"logs\", name: \"Log\" },\n { id: \"outboundShipments\", name: \"OutboundShipment\" },\n { id: \"products\", name: \"Product\" },\n { id: \"reloadYards\", name: \"ReloadYard\" },\n { id: \"reloadYardCapabilitys\", name: \"ReloadYardCapability\" },\n { id: \"reloadYardCommoditys\", name: \"ReloadYardCommodity\" },\n { id: \"seals\", name: \"Seal\" },\n { id: \"services\", name: \"Service\" },\n { id: \"setupDatas\", name: \"SetupData\" },\n { id: \"shipmentLineItems\", name: \"ShipmentLineItem\" },\n {\n id: \"shipmentLineItemInventoryItems\",\n name: \"ShipmentLineItemInventoryItem\",\n },\n // { id: \"tags\", name: \"Tag\" },\n { id: \"tasks\", name: \"Task\" },\n { id: \"timeslots\", name: \"Timeslot\" },\n { id: \"users\", name: \"User\" },\n { id: \"zones\", name: \"Zone\" },\n];\n\nexport const elapsedTime = (startTime, endTime, parentCount, prodCount) => {\n const timeDelta = endTime - startTime;\n // Convert milliseconds to minutes and seconds\n const minutes = Math.floor(timeDelta / 60000);\n const seconds = ((timeDelta % 60000) / 1000).toFixed(2);\n\n const perParentExecutionTime =\n (minutes * 60 + parseFloat(seconds)) / parentCount;\n const estimatedProdExecutionTime = perParentExecutionTime * prodCount;\n\n console.log(`Execution time: ${minutes} minutes and ${seconds} seconds`);\n console.log(\n `Production execution time: ${Math.floor(\n estimatedProdExecutionTime / 60\n )} minutes and ${(estimatedProdExecutionTime % 60).toFixed(2)} seconds`\n );\n};\n\nexport const getYards = async (setReloadYards, notify) => {\n try {\n debugger;\n const input = { active: \"true\", limit: 100 };\n let resp = await API.graphql(\n graphqlOperation(queries.reloadYardByName, input)\n );\n let yardData = resp.data.reloadYardByName.items;\n setReloadYards(yardData);\n } catch (error) {\n logError(\"AdminDashboard:getYards\", error, notify);\n }\n};\n\n// ################################################################\n// ################################################################\n// ################################################################\n// ################################################################\n// ################################################################\n// ################################################################\n\nexport const saveInventoryItem = (inventoryItem) => {\n debugger;\n const toUpdateInventoryItem = {\n ...inventoryItem,\n };\n delete toUpdateInventoryItem.area;\n delete toUpdateInventoryItem.zone;\n delete toUpdateInventoryItem.aisle;\n delete toUpdateInventoryItem.location;\n delete toUpdateInventoryItem.inventory;\n delete toUpdateInventoryItem.createdAt;\n delete toUpdateInventoryItem.updatedAt;\n\n // console.log(\"toUpdateInventoryItem\", toUpdateInventoryItem);\n return API.graphql(\n graphqlOperation(mutations.updateInventoryItem, {\n input: toUpdateInventoryItem,\n })\n );\n};\n\nexport const saveInventory = (inventory) => {\n const toUpdateRecord = { ...inventory };\n\n delete toUpdateRecord.account;\n delete toUpdateRecord.area;\n delete toUpdateRecord.createdAt;\n delete toUpdateRecord.inboundShipment;\n delete toUpdateRecord.inventoryItems;\n delete toUpdateRecord.location;\n delete toUpdateRecord.outboundShipment;\n delete toUpdateRecord.product;\n delete toUpdateRecord.reloadYardCommodity;\n delete toUpdateRecord.shipmentLineItems;\n delete toUpdateRecord.updatedAt;\n\n // console.log(\"toUpdateInventory\", toUpdateRecord)\n\n return API.graphql(\n graphqlOperation(inventoryMutations.updateAuditInventorie, {\n input: toUpdateRecord,\n })\n );\n};\n\nexport const removeInventory = (inventory) => {\n const input = { id: inventory.id };\n return API.graphql(graphqlOperation(mutations.deleteInventorie, { input }));\n};\n\nexport const saveProduct = (product) => {\n const toUpdateRecord = { ...product };\n\n delete toUpdateRecord.account;\n delete toUpdateRecord.createdAt;\n delete toUpdateRecord.updatedAt;\n\n // console.log(\"toUpdateProduct\", toUpdateRecord)\n\n return API.graphql(\n graphqlOperation(mutations.updateProduct, { input: toUpdateRecord })\n );\n};\n\nexport const saveShipmentLineItem = (shipmentLineItem) => {\n const toUpdateRecord = { ...shipmentLineItem };\n\n delete toUpdateRecord.inventory;\n delete toUpdateRecord.inventoryItems;\n delete toUpdateRecord.outboundShipment;\n delete toUpdateRecord.createdAt;\n delete toUpdateRecord.updatedAt;\n return API.graphql(\n graphqlOperation(mutations.updateShipmentLineItem, {\n input: toUpdateRecord,\n })\n );\n};\n\nexport const removeShipmentLineItem = (shipmentLineItem) => {\n const input = { id: shipmentLineItem.id };\n return API.graphql(\n graphqlOperation(mutations.deleteShipmentLineItem, { input })\n );\n};\n\nexport const saveShipmentLineItemInventoryItem = (\n ShipmentLineItemInventoryItem\n) => {\n const toUpdateRecord = { ...ShipmentLineItemInventoryItem };\n\n delete toUpdateRecord.inventoryItems;\n delete toUpdateRecord.createdAt;\n delete toUpdateRecord.updatedAt;\n return API.graphql(\n graphqlOperation(mutations.updateShipmentLineItemInventoryItem, {\n input: toUpdateRecord,\n })\n );\n};\n\nexport const saveLocation = (location) => {\n const toUpdateRecord = { ...location };\n\n delete toUpdateRecord.area;\n delete toUpdateRecord.zone;\n delete toUpdateRecord.aisle;\n delete toUpdateRecord.tags;\n delete toUpdateRecord.createdAt;\n delete toUpdateRecord.updatedAt;\n return API.graphql(\n graphqlOperation(mutations.updateLocation, { input: toUpdateRecord })\n );\n};\n\n// ################################################################\n// ################################################################\n// ################################################################\n// ################################################################\n// ################################################################\n// ################################################################\n\nconst updateResource = (dataProvider, resource, record) => {\n const recordToUpdate = { ...record };\n Object.entries(recordToUpdate).forEach(([key, value]) => {\n if (\n !key.endsWith(\"DateTime\") &&\n !key.endsWith(\"Id\") &&\n (typeof value === \"object\" || Array.isArray(value))\n ) {\n delete recordToUpdate[key];\n }\n });\n\n return dataProvider.update(resource, { data: recordToUpdate });\n};\n\nexport const runDBIndexRegen = async (queryTerms, notify, dataProvider) => {\n console.clear();\n let totalRecords = 0;\n let rejectedCount = 0;\n debugger;\n\n try {\n let hasMoredData = true;\n let page = 1;\n let perPage = MAX_INVENTORY_QUERY_LIMIT;\n while (hasMoredData) {\n const response = await dataProvider.getList(queryTerms?.resource, {\n filter: {},\n pagination: { page, perPage },\n sort: { field: \"id\", order: \"ASC\" },\n });\n const data = response.data;\n console.log(\"data:\", data);\n totalRecords += data.length;\n debugger;\n\n let promiseList = [];\n data.forEach((record) => {\n promiseList.push(\n updateResource(dataProvider, queryTerms.resource, record)\n );\n });\n\n const results = await Promise.allSettled(promiseList);\n for (const resp of results) {\n if (resp.status === \"rejected\") {\n rejectedCount++;\n console.log(\"REJECTED: \", resp);\n }\n }\n const total = page * perPage;\n if (response.total > total) {\n page++;\n } else {\n hasMoredData = false;\n }\n debugger;\n }\n\n console.log(\"done\");\n notify(\"All done\");\n } catch (error) {\n logError(\"AdminDashboard:runDBIndexRegen\", error, notify);\n } finally {\n console.log(\"totalRecords: \", totalRecords);\n if (rejectedCount) console.log(\"rejectedCount\", rejectedCount);\n }\n};\n\n// export const inventoryQuantityAudit = async (queryTerms, notify) => {\n// \tconsole.clear();\n// \tconsole.log(queryTerms.reloadYardId);\n// \tdebugger;\n// \t// check if inventory qty onHand & committed is correct based on shipmentLineItems shipped count.\n\n// \ttry {\n// \t\tconst searchInput = {\n// \t\t\tsort: {field: \"createdAt\", direction: \"desc\"},\n// \t\t\tfilter: {\n// \t\t\t\treloadYardId: {eq: queryTerms.reloadYardId},\n// \t\t\t\t// status: {ne: InventoryStatus.IN_TRANSIT},\n// \t\t\t},\n// \t\t\tlimit: 100\n// \t\t}\n// \t\tlet nextToken = true;\n// \t\twhile (nextToken) {\n// \t\t\tconst input = nextToken === true ? searchInput : {nextToken, ...searchInput};\n// \t\t\tlet result = await API.graphql(graphqlOperation(adminQueries.searchInventorysBackfill, input));\n// \t\t\tconst inventoryList = result.data.searchInventorys.items;\n// \t\t\tnextToken = result.data.searchInventorys.nextToken;\n\n// \t\t\tinventoryList.forEach(inventory => {\n// \t\t\t\tlet remainingOnHand = (inventory.quantityDelivered || 0); // quantityDelivered - qty shipped oubtound\n// \t\t\t\tlet totalInvItemOnHand = 0;\n// \t\t\t\tlet totalInvItemCommitted = 0;\n// \t\t\t\tlet totalCommitted = 0;\n// \t\t\t\tlet totalInventoryItems = 0\n\n// \t\t\t\t// if (inventory.shipmentLineItems?.items?.length > 0) {\n// \t\t\t\t// \tfor (const lineItem of inventory.shipmentLineItems.items) {\n// \t\t\t\t// \t\tconst qtyToPick = lineItem.totalQuantityToPick;\n// \t\t\t\t// \t\tif (lineItem.status === ShipmentLineItemStatus.SHIPPED) {\n// \t\t\t\t// \t\t\tremainingOnHand -= qtyToPick;\n// \t\t\t\t// \t\t} else {\n// \t\t\t\t// \t\t\ttotalCommitted += qtyToPick;\n// \t\t\t\t// \t\t}\n// \t\t\t\t// \t}\n// \t\t\t\t// }\n\n// \t\t\t\t// if (inventory.inventoryItems?.items?.length > 0) {\n// \t\t\t\t// \ttotalInventoryItems = inventory.inventoryItems?.items?.length;\n\n// \t\t\t\t// \tfor (const invItem of inventory.inventoryItems.items) {\n// \t\t\t\t// \t\ttotalInvItemOnHand += invItem.quantityOnHand;\n// \t\t\t\t// \t\ttotalInvItemCommitted += invItem.quantityCommitted;\n// \t\t\t\t// \t}\n// \t\t\t\t// }\n\n// \t\t\t\t// if (inventory.status === InventoryStatus.UNLOADED && inventory.quantityDelivered !== totalInvItemOnHand) {\n// \t\t\t\t// \tconsole.log(\"UNLOADED Quantity OnHand mismatch:\", inventory, inventory.id, inventory.quantityDelivered, totalInvItemOnHand);\n// \t\t\t\t// }\n// \t\t\t\t// if (inventory.status === InventoryStatus.STORED && (remainingOnHand !== inventory.quantityOnHand || inventory.quantityOnHand !== totalInvItemOnHand)) {\n// \t\t\t\t// \tconsole.log(\"Quantity OnHand mismatch:\", inventory, inventory.id, inventory.quantityOnHand, remainingOnHand, totalInvItemOnHand);\n// \t\t\t\t// }\n// \t\t\t\t// if ((inventory.status === InventoryStatus.SHIPPED && inventory.quantityOnHand > 0) ||\n// \t\t\t\t// \t(inventory.quantityOnHand === 0 && inventory.locationId && inventory.status !== InventoryStatus.SHIPPED)\n// \t\t\t\t// ) {\n// \t\t\t\t// \tconsole.log(\"status mismatch:\", inventory, inventory.id, inventory.quantityOnHand, inventory.status);\n// \t\t\t\t// }\n// \t\t\t\tconst totalDelivered = inventory.quantityShipped + (inventory.overShipmentQuantity || 0) - (inventory.underShipmentQuantity || 0);\n// \t\t\t\tif (inventory.status !== InventoryStatus.IN_TRANSIT && inventory.status !== InventoryStatus.ARRIVED &&\n// \t\t\t\t\t(inventory.quantityDelivered || 0) !== totalDelivered\n// \t\t\t\t) {\n// \t\t\t\t\tconsole.log(\"Over/Under mismatch:\", inventory, inventory.id, inventory.quantityDelivered, remainingOnHand, inventory.overShipmentQuantity, inventory.underShipmentQuantity)\n// \t\t\t\t}\n// \t\t\t\tif (totalCommitted !== inventory.quantityCommitted || totalCommitted !== totalInvItemCommitted) {\n// \t\t\t\t\tconsole.log(\"Quantity Committed mismatch:\", inventory, inventory.id, inventory.quantityCommitted, totalCommitted, totalInvItemCommitted);\n// \t\t\t\t}\n// \t\t\t\t// if (inventory.status !== InventoryStatus.IN_TRANSIT && inventory.status !== InventoryStatus.ARRIVED && totalInventoryItems === 0) {\n// \t\t\t\t// \tconsole.log(\"missing inventoryItem:\", inventory, inventory.id)\n// \t\t\t\t// }\n// \t\t\t});\n// \t\t}\n// \t} catch (err) {\n// \t\tlogError(\"AdminDashboard:checkInvQuantity\", err, notify);\n// \t}\n// \tnotify(\"All done\");\n// }\n\nexport const auditInbounds = async (queryTerms, notify) => {\n console.clear();\n console.log(queryTerms.reloadYardId);\n debugger;\n\n try {\n let nextToken = true;\n let searchInput = {\n reloadYardId: queryTerms.reloadYardId,\n limit: 500,\n };\n const inboundMap = {};\n\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(\n inboundQueries.inboundShipmentByReloadYardByAccount,\n input\n )\n );\n const inboundList =\n result.data.inboundShipmentByReloadYardByAccount.items;\n console.log(\"inboundList\", inboundList);\n nextToken = result.data.inboundShipmentByReloadYardByAccount.nextToken;\n let count = 0;\n\n for (const inbound of inboundList) {\n inboundMap[inbound.id] = inbound;\n // if (outbound.id === \"05bd3ef9-6363-48fa-bd60-8b940147b906\") debugger;\n if (\n (!inbound.inventories || inbound.inventories?.items?.length === 0) &&\n inbound.status === \"RELEASED\"\n ) {\n console.log(\"empty inbound\", inbound.id);\n count++;\n }\n }\n\n console.log(\n \"empty inbounds\",\n count,\n \"good inbounds\",\n inboundList.length - count\n );\n\n // #####################################################\n nextToken = true;\n let zombieInventoryCount = 0;\n let totalInventories = 0;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(adminQueries.inventoryByStatusByLot, input)\n );\n const inventoryList = result.data.inventoryByStatusByLot.items;\n nextToken = result.data.inventoryByStatusByLot.nextToken;\n console.log(\"inventoryList\", inventoryList);\n totalInventories += inventoryList.length;\n\n for (const inventory of inventoryList) {\n if (!inboundMap[inventory.inboundShipmentId]) {\n console.log(\"zombie inventory\", inventory, inventory.id);\n zombieInventoryCount++;\n }\n }\n }\n console.log(\n \"zombie inventories\",\n zombieInventoryCount,\n \"good inventories\",\n totalInventories - zombieInventoryCount\n );\n }\n } catch (err) {\n logError(\"AdminDashboard:runInboundsAudit\", err, notify);\n }\n notify(\"All done\");\n};\n\nexport const auditOutbounds = async (queryTerms, notify) => {\n console.clear();\n console.log(queryTerms.reloadYardId);\n debugger;\n\n try {\n let nextToken = true;\n let searchInput = {\n reloadYardId: queryTerms.reloadYardId,\n limit: 500,\n };\n const outboundMap = {};\n let emptyOutboundCount = 0;\n let totalOutbounds = 0;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(adminQueries.outboundShipmentByStatusDeleteMe, input)\n );\n const outboundList = result.data.outboundShipmentByStatus.items;\n console.log(\"outboundList\", outboundList);\n nextToken = result.data.outboundShipmentByStatus.nextToken;\n totalOutbounds += outboundList.length;\n\n for (const outbound of outboundList) {\n outboundMap[outbound.id] = outbound;\n if (\n (!outbound.shipmentLineItems ||\n outbound.shipmentLineItems?.items?.length === 0) &&\n outbound.status === \"RELEASED\"\n ) {\n console.log(\n \"empty outbound\",\n outbound.id,\n outbound.createdAt,\n outbound.status\n );\n emptyOutboundCount++;\n }\n }\n }\n console.log(\n \"empty outbounds\",\n emptyOutboundCount,\n \"good outbounds\",\n totalOutbounds - emptyOutboundCount\n );\n\n nextToken = true;\n let inventoryMap = {};\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(adminQueries.inventoryByStatusByLot, input)\n );\n const inventoryList = result.data.inventoryByStatusByLot.items;\n nextToken = result.data.inventoryByStatusByLot.nextToken;\n console.log(\"inventoryList\", inventoryList);\n inventoryList.forEach((itm) => (inventoryMap[itm.id] = itm));\n }\n\n searchInput = { limit: 500 };\n nextToken = true;\n let zombieLineItemCount = 0;\n let totalLineItems = 0;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(listIdQueries.listShipmentLineItemIds, input)\n );\n const lineItemList = result.data.listShipmentLineItems.items.filter(\n (itm) => itm.reloadYardId === queryTerms.reloadYardId\n );\n nextToken = result.data.listShipmentLineItems.nextToken;\n console.log(\"lineItemList\", lineItemList);\n totalLineItems += lineItemList.length;\n\n for (const lineItem of lineItemList) {\n if (!outboundMap[lineItem.outboundShipmentId]) {\n console.log(\n \"zombie line item\",\n lineItem.id,\n inventoryMap[lineItem.inventoryId]\n );\n zombieLineItemCount++;\n }\n }\n }\n console.log(\n \"zombie line items\",\n zombieLineItemCount,\n \"good line items\",\n totalLineItems - zombieLineItemCount\n );\n } catch (err) {\n logError(\"AdminDashboard:runOutboundsAudit\", err, notify);\n }\n notify(\"All done\");\n};\n\nexport const auditLocations = async (queryTerms, notify) => {\n console.clear();\n console.log(queryTerms.reloadYardId);\n // check location integrity to see if locations have corresponding area, zone, aisle\n\n try {\n let results = await API.graphql(\n graphqlOperation(queries.listAreas, { limit: 1000 })\n );\n const areas = results.data.listAreas.items.filter(\n (itm) => itm.reloadYardId === queryTerms.reloadYardId\n );\n console.log(\"areas:\", areas);\n const areaMap = areas.reduce((acc, obj) => {\n acc[obj.id] = obj;\n return acc;\n }, {});\n\n results = await API.graphql(\n graphqlOperation(queries.listZones, { limit: 1000 })\n );\n const zones = results.data.listZones.items.filter(\n (itm) => itm.reloadYardId === queryTerms.reloadYardId\n );\n console.log(\"zones:\", zones);\n const zoneMap = zones.reduce((acc, obj) => {\n acc[obj.id] = obj;\n return acc;\n }, {});\n\n results = await API.graphql(\n graphqlOperation(listIdQueries.listAisleIds, { limit: 1000 })\n );\n const aisles = results.data.listAisles.items.filter(\n (itm) => itm.reloadYardId === queryTerms.reloadYardId\n );\n console.log(\"aisles:\", aisles);\n const aisleMap = aisles.reduce((acc, obj) => {\n acc[obj.id] = obj;\n return acc;\n }, {});\n\n results = await API.graphql(\n graphqlOperation(listIdQueries.listLocationIds, { limit: 1000 })\n );\n let locations = results.data.listLocations.items.filter(\n (itm) => itm.reloadYardId === queryTerms.reloadYardId\n );\n console.log(\"Locations:\", locations);\n\n for (const zone of zones) {\n let area = areaMap[zone.areaId];\n\n if (!area) {\n console.log(\"zone missing area:\", zone, zone.id, \"areaId\", zone.areaId);\n delete zoneMap[zone.id];\n }\n }\n\n for (const aisle of aisles) {\n let area = areaMap[aisle.areaId];\n let zone = zoneMap[aisle.zoneId];\n\n if (!area) {\n console.log(\n \"aisle missing area:\",\n aisle,\n aisle.id,\n \"areaId\",\n aisle.areaId\n );\n delete aisleMap[aisle.id];\n }\n if (!zone) {\n console.log(\n \"aisle missing zone:\",\n aisle,\n aisle.id,\n \"zoneId\",\n aisle.zoneId\n );\n delete aisleMap[aisle.id];\n }\n }\n\n for (const location of locations) {\n let area = areaMap[location.areaId];\n let zone = zoneMap[location.zoneId];\n let aisle = aisleMap[location.aisleId];\n\n if (!area) {\n console.log(\n \"location missing area:\",\n location,\n location.id,\n \"areaId\",\n location.areaId\n );\n }\n if (!zone) {\n console.log(\n \"location missing zone:\",\n location,\n location.id,\n \"zoneId\",\n location.zoneId\n );\n }\n if (!aisle) {\n console.log(\n \"location missing aizle:\",\n location,\n location.id,\n \"aisleId\",\n location.aisleId\n );\n }\n }\n\n console.log(\"done\");\n notify(\"All done\");\n } catch (error) {\n logError(\"AdminDashboard:runLocationsAudit\", error, notify);\n }\n};\n\nexport const auditInvItemLocations = async (queryTerms, notify) => {\n console.clear();\n console.log(queryTerms.reloadYardId);\n // check location integrity to see if locations have corresponding area, zone, aisle\n\n try {\n let locationList = [];\n const areaMap = {};\n const zoneMap = {};\n const aisleMap = {};\n const locationMap = {};\n\n let searchInput = {\n reloadYardId: queryTerms.reloadYardId,\n limit: 1000,\n };\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(adminQueries.locationBySortKey, input)\n );\n locationList = locationList.concat(result.data.locationBySortKey.items);\n nextToken = result.data.locationBySortKey.nextToken;\n }\n console.log(\"locationList\", locationList);\n\n locationList.forEach((location) => {\n const areaId = location.areaId;\n const area = location.area;\n if (!areaMap[areaId]) areaMap[areaId] = [];\n areaMap[areaId].push(area);\n\n const zoneId = location.zoneId;\n const zone = location.zone;\n if (!zoneMap[zoneId]) zoneMap[zoneId] = [];\n zoneMap[zoneId].push(zone);\n\n const aisleId = location.aisleId;\n const aisle = location.aisle;\n if (!aisleMap[aisleId]) aisleMap[aisleId] = [];\n aisleMap[aisleId].push(aisle);\n\n const locationId = location.id;\n locationMap[locationId] = location;\n });\n\n searchInput = {\n reloadYardId: queryTerms.reloadYardId,\n statusLotNumber: {\n beginsWith: { status: InventoryStatus.STORED },\n },\n limit: 500,\n };\n nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(adminQueries.inventoryByStatusByLot, input)\n );\n const inventoryList = result.data.inventoryByStatusByLot.items.filter(\n (itm) => {\n // keep if has aisleId and locationId for location check\n return itm.locationId && itm.aisleId;\n }\n );\n nextToken = result.data.inventoryByStatusByLot.nextToken;\n console.log(\"inventoryList\", inventoryList);\n\n inventoryList.forEach((inventory) => {\n let area = areaMap[inventory.areaId];\n let zone = zoneMap[inventory.zoneId];\n let aisle = aisleMap[inventory.aisleId];\n let location = locationMap[inventory.locationId];\n\n if (!area) {\n debugger;\n console.log(\n \"inventory missing area:\",\n inventory,\n inventory.id,\n \"areaId\",\n inventory.areaId\n );\n }\n if (!zone) {\n console.log(\n \"inventory missing zone:\",\n inventory,\n inventory.id,\n \"zoneId\",\n inventory.zoneId\n );\n }\n if (!aisle) {\n console.log(\n \"inventory missing aizle:\",\n inventory,\n inventory.id,\n \"aisleId\",\n inventory.aisleId\n );\n }\n if (!location) {\n console.log(\n \"inventory missing location:\",\n inventory,\n inventory.id,\n \"locationId\",\n inventory.locationId\n );\n }\n\n // console.log(\"inventoryItemList\", inventoryItemList);\n // const inventoryItemMap = {};\n // inventoryItemList.forEach(item => {\n // \tconst locationId = item.locationId;\n // \tif (locationId) {\n // \t\tif (!inventoryItemMap[locationId]) {\n // \t\t\tinventoryItemMap[locationId] = [];\n // \t\t}\n // \t\tinventoryItemMap[locationId].push(item);\n // \t}\n // });\n });\n }\n\n console.log(\"done\");\n notify(\"All done\");\n } catch (error) {\n logError(\"AdminDashboard:runInvLocationsAudit\", error, notify);\n }\n};\n\n// ################################################################\n// ################################################################\n// ################################################################\n// ################################################################\n// ################################################################\n// ################################################################\n\nexport const updateAccuntRecords = async (\n dataProvider,\n resource,\n records,\n queryTerms\n) => {\n let promiseList = [];\n console.log(\"resource, records\", resource, records);\n debugger;\n\n records.forEach((record) => {\n const newRecord = { ...record };\n if (queryTerms.changeId) {\n // change accountId and accountName if needed.\n if (resource === \"inboundShipments\" && !newRecord.scheduledDateTime) {\n newRecord.scheduledDateTime = null;\n } else if (resource === \"outboundShipments\") {\n if (!newRecord.scheduledDateTime) {\n newRecord.scheduledDateTime = null;\n }\n if (newRecord.accountId === newRecord.billToAccountId) {\n newRecord.billToAccountId = queryTerms.toAccount.id;\n }\n }\n\n // applies to all resourves\n newRecord.accountId = queryTerms.toAccount.id;\n\n if (newRecord.accountName)\n newRecord.accountName = queryTerms.toAccount.businessName;\n else delete newRecord.accountName; // applies to shipmentLineItems\n\n // applies to inventory records only\n if (newRecord.productId) newRecord.productId = null;\n if (newRecord.productCode) newRecord.productCode = null;\n } else {\n // reset account Name only - do not change accountId\n if (newRecord.accountName)\n newRecord.accountName = queryTerms.fromAccount.businessName;\n else delete newRecord.accountName; // applies to shipmentLineItems\n }\n\n promiseList.push(updateResource(dataProvider, resource, newRecord));\n });\n\n const results = await Promise.allSettled(promiseList);\n results.forEach((resp) => {\n if (resp.status === \"rejected\") console.log(\"REJECTED: \", resp);\n });\n};\n\nexport const runAccountChange = async (queryTerms, notify, dataProvider) => {\n console.clear();\n // change accountId and name for all records (inbound, inventory, outbound, lineItems, invoices)\n debugger;\n\n try {\n let searchInput = {\n filter: {\n reloadYardId: { eq: queryTerms.reloadYardId },\n accountId: { eq: queryTerms.fromAccount.id },\n },\n limit: 1000,\n };\n if (queryTerms.searchTerm) {\n const value = queryTerms.searchTerm;\n searchInput.filter.or = [\n { id: { eq: `${value}` } },\n { poNumber: { matchPhrasePrefix: `${value}` } },\n { poNumber: { wildcard: `*${value}*` } },\n { railCarNumber: { matchPhrasePrefix: `${value}` } },\n { railCarNumber: { wildcard: `*${value}*` } },\n { lotNumber: { matchPhrasePrefix: `${value}` } },\n { lotNumber: { wildcard: `*${value}*` } },\n { customFields: { matchPhrasePrefix: `${value}` } },\n { customFields: { wildcard: `*${value}*` } },\n ];\n }\n let response = await API.graphql(\n graphqlOperation(adminQueries.searchInboundShipments, searchInput)\n );\n const inbounds = response.data.searchInboundShipments.items;\n console.log(\"inbounds:\", inbounds, inbounds.length);\n await updateAccuntRecords(\n dataProvider,\n \"inboundShipments\",\n inbounds,\n queryTerms\n );\n\n // const invoices = inbounds.filter(({ invoice }) => invoice).map(({ invoice }) => invoice);\n // console.log(\"invoices:\", invoices, invoices.length);\n // await updateAccuntRecords(dataProvider, \"invoices\", invoices, queryTerms);\n\n const inventories = [].concat(\n ...inbounds.map(({ inventories: { items } }) => items)\n );\n console.log(\"inventories:\", inventories, inventories.length);\n await updateAccuntRecords(\n dataProvider,\n \"inventories\",\n inventories,\n queryTerms\n );\n\n const inventoryItems = [].concat(\n ...inventories\n .filter(({ inventoryItems }) => inventoryItems && inventoryItems.items)\n .map(({ inventoryItems: { items } }) => items)\n );\n console.log(\"inventoryItems:\", inventoryItems, inventoryItems.length);\n await updateAccuntRecords(\n dataProvider,\n \"inventoryItems\",\n inventoryItems,\n queryTerms\n );\n\n const shipmentLineItems = [].concat(\n ...inventories\n .filter(\n ({ shipmentLineItems }) =>\n shipmentLineItems && shipmentLineItems.items\n )\n .map(({ shipmentLineItems: { items } }) => items)\n );\n console.log(\n \"shipmentLineItems:\",\n shipmentLineItems,\n shipmentLineItems.length\n );\n await updateAccuntRecords(\n dataProvider,\n \"shipmentLineItems\",\n shipmentLineItems,\n queryTerms\n );\n const outboundMap = {};\n shipmentLineItems.forEach(\n (itm) => (outboundMap[itm.outboundShipmentId] = true)\n );\n // shipmentLineItemsInberntoryItem does not have accountId - no need to process.\n\n debugger;\n if (queryTerms.searchTerm) {\n const value = queryTerms.searchTerm;\n searchInput.filter.or = [\n { poNumber: { matchPhrasePrefix: `${value}` } },\n { poNumber: { wildcard: `*${value}*` } },\n { railCarNumber: { matchPhrasePrefix: `${value}` } },\n { railCarNumber: { wildcard: `*${value}*` } },\n { customFields: { matchPhrasePrefix: `${value}` } },\n { customFields: { wildcard: `*${value}*` } },\n ];\n }\n response = await API.graphql(\n graphqlOperation(adminQueries.searchOutboundShipments, searchInput)\n );\n let outbounds = response.data.searchOutboundShipments.items;\n outbounds = outbounds.filter((itm) => outboundMap[itm.id]);\n console.log(\"outbounds:\", outbounds, outbounds.length);\n await updateAccuntRecords(\n dataProvider,\n \"outboundShipments\",\n outbounds,\n queryTerms\n );\n\n // const outInvoices = outbounds.filter(({ invoice }) => invoice).map(({ invoice }) => invoice);\n // console.log(\"outInvoices:\", outInvoices, outInvoices.length);\n // await updateAccuntRecords(dataProvider, \"invoices\", outInvoices, queryTerms);\n\n console.log(\"done\");\n notify(\"All done\");\n } catch (error) {\n logError(\"AdminDashboard:runAccountChange\", error, notify);\n }\n};\n\nexport const auditCapacityUsed = async (queryTerms, notify, dataProvider) => {\n await fixCapacityUsed(queryTerms, notify, dataProvider, true);\n};\n\nexport const fixCapacityUsed = async (\n queryTerms,\n notify,\n dataProvider,\n reportOnly\n) => {\n console.clear();\n console.log(queryTerms.reloadYardId);\n debugger;\n\n try {\n const promiseList = [];\n let locationList = [];\n const aisleMap = {};\n let searchInput = {\n reloadYardId: queryTerms.reloadYardId,\n limit: 1000,\n };\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(adminQueries.locationBySortKey, input)\n );\n // handle bulk in the future by bulk area\n const structuredOnly = result.data.locationBySortKey.items.filter(\n (location) =>\n location.active === \"true\" &&\n location.type === LocationType.STRUCTURED &&\n !location.locationLoad.other.selected\n );\n locationList = locationList.concat(structuredOnly);\n nextToken = result.data.locationBySortKey.nextToken;\n }\n console.log(\"locationList\", locationList);\n\n // create aisleMap to query by aisle\n locationList.forEach((location) => {\n const aisleId = location.aisleId;\n if (!aisleMap[aisleId]) {\n aisleMap[aisleId] = [];\n }\n aisleMap[aisleId].push(location);\n });\n\n let totalErrors = 0;\n for (const aisleId of Object.keys(aisleMap)) {\n // query inventoryItems by aisle\n let inventoryItemList = [];\n // query assigned / allocated inventoryItems\n searchInput = {\n aisleId: aisleId,\n status: { beginsWith: InventoryStatus.IN_TRANSIT },\n limit: 1000,\n };\n nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const result = await API.graphql(\n graphqlOperation(\n adminQueries.inventoryItemByAisleByStatusAudit,\n input\n )\n );\n inventoryItemList = inventoryItemList.concat(\n result.data.inventoryItemByAisleByStatus.items\n );\n nextToken = result.data.inventoryItemByAisleByStatus.nextToken;\n }\n // query stored inventoryItems\n searchInput = {\n aisleId: aisleId,\n status: { beginsWith: InventoryStatus.UNLOADED },\n limit: 1000,\n };\n nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const result = await API.graphql(\n graphqlOperation(\n adminQueries.inventoryItemByAisleByStatusAudit,\n input\n )\n );\n inventoryItemList = inventoryItemList.concat(\n result.data.inventoryItemByAisleByStatus.items\n );\n nextToken = result.data.inventoryItemByAisleByStatus.nextToken;\n }\n searchInput = {\n aisleId: aisleId,\n status: { beginsWith: InventoryStatus.STORED },\n limit: 1000,\n };\n nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const result = await API.graphql(\n graphqlOperation(\n adminQueries.inventoryItemByAisleByStatusAudit,\n input\n )\n );\n inventoryItemList = inventoryItemList.concat(\n result.data.inventoryItemByAisleByStatus.items\n );\n nextToken = result.data.inventoryItemByAisleByStatus.nextToken;\n }\n // location.area.type === \"BULK\"\n // handle bulk here in the future.\n // location.qtyCount += invItem.quantityOnHand;\n // console.log(\"inventoryItemList\", inventoryItemList);\n\n // inventory Items by location ID\n const inventoryItemMap = {};\n inventoryItemList.forEach((item) => {\n const locationId = item.locationId;\n if (locationId) {\n if (!inventoryItemMap[locationId]) {\n inventoryItemMap[locationId] = [];\n }\n inventoryItemMap[locationId].push(item);\n }\n });\n // console.log(\"inventoryItemMap\", inventoryItemMap);\n\n const locations = aisleMap[aisleId];\n for (const location of locations) {\n location.allocatedCount = 0;\n location.allocatedUnits = 0;\n location.usedCount = 0;\n location.usedUnits = 0;\n const localInventoryItems = inventoryItemMap[location.id] || [];\n // console.log(\"localInventoryItems\", localInventoryItems);\n\n for (const inventoryItem of localInventoryItems) {\n const inventoryLoadType =\n inventoryItem.inventory.reloadYardCommodity.commodity\n .locationLoadType;\n if (!inventoryLoadType) {\n console.log(\n \"inventoryLoadType missing (inv, invItm)\",\n inventoryItem.inventoryId,\n inventoryItem.id\n );\n } else if (inventoryLoadType.includes(\"Bulk\")) {\n continue;\n } else {\n // assuming 1 inventoryItem = 1 capacity load regardless of units\n const load = location.locationLoad[inventoryLoadType];\n if (inventoryItem.status === InventoryStatus.IN_TRANSIT) {\n location.allocatedCount += load.capacity;\n location.allocatedUnits++;\n } else {\n // UNLOADED || STORED\n location.usedCount += load.capacity;\n location.usedUnits++;\n }\n location.itemProductId = inventoryItem.inventory.productId;\n }\n }\n\n let toUpdateLocation = { ...location };\n let hasErrors = false;\n\n if ((location.capacityAllocated || 0) !== location.allocatedCount) {\n console.log(\n \"Allocated\",\n location.id,\n getLocationFullName(location),\n \"allocated\",\n location.capacityAllocated,\n \"calc\",\n location.allocatedCount,\n \"items\",\n location.allocatedUnits\n );\n toUpdateLocation.capacityAllocated = location.allocatedCount;\n hasErrors = true;\n totalErrors++;\n }\n\n if ((location.capacityUsed || 0) !== location.usedCount) {\n console.log(\n \" Used\",\n location.id,\n getLocationFullName(location),\n \"used\",\n location.capacityUsed,\n \"calc\",\n location.usedCount,\n \"items\",\n location.usedUnits\n );\n toUpdateLocation.capacityUsed = location.usedCount;\n hasErrors = true;\n totalErrors++;\n }\n\n if (\n location.productId &&\n location.productId !== location.itemProductId\n ) {\n console.log(\n \" product\",\n location.id,\n getLocationFullName(location),\n \"loc product\",\n location.productId,\n \"inv product\",\n location.itemProductId\n );\n toUpdateLocation.productId = location.itemProductId || \"\";\n hasErrors = true;\n totalErrors++;\n }\n\n if (hasErrors && !reportOnly) {\n delete toUpdateLocation.area;\n delete toUpdateLocation.zone;\n delete toUpdateLocation.aisle;\n delete toUpdateLocation.locationLoad;\n\n delete toUpdateLocation.itemProductId;\n delete toUpdateLocation.allocatedCount;\n delete toUpdateLocation.allocatedUnits;\n delete toUpdateLocation.usedCount;\n delete toUpdateLocation.usedUnits;\n\n console.log(\"toUpdateLocation\", toUpdateLocation);\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.updateLocation, {\n input: toUpdateLocation,\n })\n )\n );\n }\n }\n\n let results = await Promise.allSettled(promiseList);\n results.forEach((resp) => {\n if (resp.status === \"rejected\") console.log(\"rejected\", resp.reason);\n });\n debugger;\n }\n\n console.log(\"Total Errors\", totalErrors);\n console.log(\"done\");\n notify(\"All done\");\n } catch (error) {\n logError(\"AdminDashboard:fixCapacityUsed\", error, notify);\n }\n};\n\nexport const auditInventoryQuantity = async (\n queryTerms,\n notify,\n dataProvider\n) => {\n await fixInventoryQty(queryTerms, notify, dataProvider, true);\n};\n\nexport const fixInventoryQty = async (\n queryTerms,\n notify,\n dataProvider,\n reportOnly\n) => {\n console.clear();\n // fix Qty OnHand, Qty Committed, Status, Units based on shipmentLineItems shipped count.\n // --- ignore other exception inventories\n // --- ignore bulk zeroed out ???\n\n debugger;\n try {\n // TODO\n // add logic if reloadYardId is NOT passed - run all inventories\n // const searchInput = { limit: 250 };\n // let nextToken = true;\n // while (nextToken) {\n // \tconst input = nextToken === true ? searchInput : {nextToken, ...searchInput};\n // \tlet result = await API.graphql(graphqlOperation(adminQueries.listInventoriesAudit, input));\n // \tconst inventoryList = result.data.listInventories.items;\n // \tnextToken = result.data.listInventories.nextToken;\n\n const searchInput = {\n filter: {\n reloadYardId: { eq: queryTerms.reloadYardId },\n },\n limit: 250,\n };\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const result = await API.graphql(\n graphqlOperation(adminQueries.searchInventorysBackfill, input)\n );\n const inventoryList = result.data.searchInventorys.items;\n nextToken = result.data.searchInventorys.nextToken;\n console.log(\"inventoryList\", inventoryList);\n\n const promiseList = [];\n for (const inventory of inventoryList) {\n let totalReceived = inventory.quantityDelivered || 0;\n let remainingOnHand = totalReceived;\n let totalCommitted = 0;\n let totalShipped = 0;\n let totalInventoryItems = 0;\n let totalInvItemOnHand = 0;\n let totalInvItemCommitted = 0;\n let hasErrors = false;\n\n if (inventory.shipmentLineItems?.items?.length > 0) {\n for (const lineItem of inventory.shipmentLineItems.items) {\n const qtyToPick = lineItem.totalQuantityToPick;\n if (lineItem.status === ShipmentLineItemStatus.SHIPPED) {\n remainingOnHand = trimDecimal(remainingOnHand - qtyToPick);\n totalShipped = trimDecimal(totalShipped + qtyToPick);\n } else totalCommitted = trimDecimal(totalCommitted + qtyToPick);\n }\n }\n\n if (inventory.inventoryItems?.items?.length > 0) {\n totalInventoryItems = inventory.inventoryItems?.items?.length;\n for (const invItem of inventory.inventoryItems.items) {\n totalInvItemOnHand = trimDecimal(\n totalInvItemOnHand + invItem.quantityOnHand\n );\n totalInvItemCommitted = trimDecimal(\n totalInvItemCommitted + invItem.quantityCommitted\n );\n }\n }\n\n // check quantityDelivered\n if (\n inventory.status === InventoryStatus.UNLOADED &&\n inventory.quantityDelivered !== totalInvItemOnHand &&\n inventory.otherException !== true\n ) {\n console.log(\n \"quantityDelivered !== totalInvItemOnHand\",\n inventory.id,\n inventory.quantityDelivered,\n totalInvItemOnHand\n );\n inventory.quantityDelivered = totalInvItemOnHand;\n hasErrors = true;\n }\n\n // Check over/under shipment\n const actualReceived =\n inventory.quantityShipped +\n (inventory.overShipmentQuantity || 0) -\n (inventory.underShipmentQuantity || 0);\n if (\n inventory.status !== InventoryStatus.IN_TRANSIT &&\n inventory.status !== InventoryStatus.ARRIVED &&\n (inventory.quantityDelivered || 0) !== actualReceived &&\n inventory.otherException !== true\n ) {\n console.log(\n \"quantityDelivered !== quantityShipped + Over/Under\",\n inventory.id,\n inventory.quantityDelivered,\n remainingOnHand,\n inventory.overShipmentQuantity,\n inventory.underShipmentQuantity\n );\n // TODO\n // Decide on an appropriate fix - wait for prod issue to understand potential causes\n }\n\n // check quantityOnHand\n if (\n inventory.status !== InventoryStatus.IN_TRANSIT &&\n inventory.status !== InventoryStatus.ARRIVED &&\n inventory.status !== InventoryStatus.UNLOADED &&\n !(\n isTrack(inventory.area) &&\n inventory.inboundShipment.status === InboundStatus.RELEASED\n ) && // can release bulk with qtyOnHand > 0\n inventory.otherException !== true\n ) {\n if (\n inventory.quantityOnHand !== remainingOnHand ||\n inventory.quantityOnHand !== totalInvItemOnHand\n ) {\n console.log(\n \"quantityOnHand !== remainingOnHand !== totalInvItemOnHand\",\n inventory.id,\n inventory.quantityOnHand,\n remainingOnHand,\n totalInvItemOnHand\n );\n if (remainingOnHand !== totalInvItemOnHand) {\n console.log(\n \" remainingOnHand !== totalInvItemOnHand\",\n remainingOnHand,\n totalInvItemOnHand\n );\n // remainingOnHand = totalInvItemOnHand;\n } else {\n inventory.quantityOnHand = remainingOnHand;\n hasErrors = true;\n }\n }\n }\n\n if (\n inventory.quantityCommitted !== totalCommitted ||\n inventory.quantityCommitted !== totalInvItemCommitted\n ) {\n console.log(\n \"quantityCommitted !== totalCommitted\",\n inventory.id,\n inventory.quantityCommitted,\n totalCommitted\n );\n if (totalCommitted !== totalInvItemCommitted) {\n console.log(\n \" quantityCommitted !== totalInvItemCommitted\",\n inventory.quantityCommitted,\n totalInvItemCommitted\n );\n // totalCommitted = totalInvItemCommitted;\n } else {\n inventory.quantityCommitted = totalCommitted;\n hasErrors = true;\n }\n }\n\n // checks STATUS after qty On Hand and Committed are corrected.\n if (\n inventory.status !== InventoryStatus.IN_TRANSIT &&\n inventory.status !== InventoryStatus.ARRIVED &&\n inventory.status !== InventoryStatus.ARCHIVED &&\n inventory.status !== InventoryStatus.SHIPPED\n ) {\n if (\n totalShipped > 0 &&\n totalReceived > 0 &&\n inventory.quantityOnHand === 0\n ) {\n console.log(\n \"quantityOnHand = 0 status !== SHIPPED\",\n inventory.id,\n totalReceived,\n inventory.quantityOnHand,\n totalShipped,\n inventory.status\n );\n inventory.quantityOnHand = 0;\n inventory.status = \"SHIPPED\";\n hasErrors = true;\n }\n } else if (\n inventory.quantityOnHand > 0 &&\n inventory.status === InventoryStatus.SHIPPED &&\n !(\n isTrack(inventory.area) &&\n inventory.inboundShipment.status === InboundStatus.RELEASED\n ) // can release bulk with qtyOnHand > 0\n ) {\n console.log(\n \"quantityOnHand > 0 status === SHIPPED\",\n inventory.id,\n inventory.quantityOnHand,\n totalReceived,\n inventory.status,\n inventory.inboundShipment.status\n );\n inventory.status =\n inventory.inboundShipment.state === InboundState.COMPLETED\n ? InventoryStatus.STORED\n : InventoryStatus.UNLOADED;\n hasErrors = true;\n } else if (\n (inventory.quantityOnHand > 0 ||\n (totalShipped > 0 && totalShipped < totalReceived)) &&\n inventory.status !== InventoryStatus.STORED &&\n !(\n isTrack(inventory.area) &&\n inventory.inboundShipment.status === InboundStatus.RELEASED\n ) // can release bulk with qtyOnHand > 0\n ) {\n console.log(\n \"quantityOnHand > 0 status !== STORED\",\n inventory.id,\n inventory.quantityOnHand,\n totalShipped,\n inventory.status,\n inventory.inboundShipment.status\n );\n inventory.status = InventoryStatus.STORED;\n hasErrors = true;\n }\n\n if (!inventory.inventoryUnits) {\n console.log(\"missing inventoryUnits\", inventory.id);\n inventory.inventoryUnits =\n inventory.inboundShipment.totalUnits || \"UNIT\";\n hasErrors = true;\n }\n\n if (\n inventory.status !== InventoryStatus.IN_TRANSIT &&\n inventory.status !== InventoryStatus.ARRIVED &&\n totalInventoryItems === 0\n ) {\n console.log(\"missing inventoryItem:\", inventory.id);\n }\n\n if (hasErrors && !reportOnly) {\n promiseList.push(saveInventory(inventory));\n }\n }\n\n debugger;\n const response = await Promise.allSettled(promiseList);\n response.forEach((resp) => {\n if (resp.status === \"rejected\") console.log(\"REJECTED: \", resp);\n });\n }\n } catch (err) {\n logError(\"AdminDashboard:fixInventoryQty\", err, notify);\n }\n notify(\"All done\");\n};\n\n// ################################################################\n// ################################################################\n// ################################################################\n// ################################################################\n// ################################################################\n// ################################################################\n\nexport const deleteReloadYard = async (queryTerms, notify) => {\n console.clear();\n console.log(\"reload yard:\", queryTerms.reloadYardId);\n\n try {\n const promiseList = [];\n\n const response = await Promise.allSettled(promiseList);\n debugger;\n response.forEach((resp) => {\n if (resp.status === \"rejected\") console.log(\"REJECTED: \", resp);\n });\n } catch (err) {\n logError(\"AdminDashboard:deleteReloadYard\", err, notify);\n }\n notify(\"All done\");\n};\n\nexport const HandlerDialog = ({\n dialogOpen,\n handleDialogClose,\n onSubmit,\n handlerName,\n loading,\n reloadYards,\n queryTerms,\n setQueryTerms,\n}) => {\n const classes = useStyles();\n\n return (\n <Dialog open={dialogOpen} onClose={handleDialogClose} maxWidth=\"lg\">\n <DialogTitle id=\"alert-dialog-title\">\n <Typography variant=\"h5\">{handlerName}</Typography>\n </DialogTitle>\n <DialogContent>\n {loading && (\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n )}\n {handlerName === \"runDBIndexRegen\" ? (\n <IndexRegenDialogContent\n queryTerms={queryTerms}\n setQueryTerms={setQueryTerms}\n />\n ) : handlerName === \"runAccountChange\" ? (\n <AccountChangeDialogContent\n reloadYards={reloadYards}\n queryTerms={queryTerms}\n setQueryTerms={setQueryTerms}\n />\n ) : (\n <TextInput\n select\n id=\"yardId\"\n label=\"Yard ID\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n required\n value={queryTerms.reloadYardId}\n onChange={(e) =>\n setQueryTerms({ ...queryTerms, reloadYardId: e.target.value })\n }\n style={{ minWidth: \"32rem\" }}\n >\n {reloadYards.map((itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {\" \"}\n {itm.name} - {itm.id}{\" \"}\n </MenuItem>\n ))}\n </TextInput>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={handleDialogClose}>Cancel</Button>\n <Button color=\"primary\" onClick={() => onSubmit(queryTerms)}>\n Execute\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport const IndexRegenDialogContent = ({ queryTerms, setQueryTerms }) => {\n return (\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <TextInput\n select\n id=\"table\"\n label=\"Table Name\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n required\n value={queryTerms.resource}\n onChange={(e) =>\n setQueryTerms({ ...queryTerms, resource: e.target.value })\n }\n style={{ minWidth: \"32rem\" }}\n >\n {resourceOptions.map((itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {\" \"}\n {itm.name}{\" \"}\n </MenuItem>\n ))}\n </TextInput>\n </Grid>\n </Grid>\n );\n};\n\nexport const AccountChangeDialogContent = ({\n reloadYards,\n queryTerms,\n setQueryTerms,\n}) => {\n const [accounts, setAccounts] = useState([]);\n const [results, setResults] = useState([]);\n\n const handleYandChange = async (reloadYardId) => {\n setQueryTerms({ ...queryTerms, reloadYardId: reloadYardId });\n\n let response = await API.graphql(\n graphqlOperation(queries.accountByActiveByName, {\n reloadYardId: reloadYardId,\n })\n );\n const accounts = response.data.accountByActiveByName.items;\n debugger;\n setAccounts(accounts);\n };\n\n const handleInboundSearch = async () => {\n let searchInput = {\n filter: {\n reloadYardId: { eq: queryTerms.reloadYardId },\n accountId: { eq: queryTerms.fromAccount.id },\n },\n limit: 10,\n };\n if (queryTerms.searchTerm) {\n const value = queryTerms.searchTerm;\n searchInput.filter.or = [\n { id: { eq: `${value}` } },\n { poNumber: { matchPhrasePrefix: `${value}` } },\n { poNumber: { wildcard: `*${value}*` } },\n { railCarNumber: { matchPhrasePrefix: `${value}` } },\n { railCarNumber: { wildcard: `*${value}*` } },\n { lotNumber: { matchPhrasePrefix: `${value}` } },\n { lotNumber: { wildcard: `*${value}*` } },\n { customFields: { matchPhrasePrefix: `${value}` } },\n { customFields: { wildcard: `*${value}*` } },\n ];\n }\n let response = await API.graphql(\n graphqlOperation(adminQueries.searchInboundShipments, searchInput)\n );\n const inbounds = response.data.searchInboundShipments;\n\n debugger;\n inbounds.items = inbounds.items.map((inbound) => {\n let hasInvoiceItems = inbound?.invoice?.lineItems?.items?.length > 0;\n let hasProducts = false;\n if (inbound.inventories && inbound.inventories.items) {\n for (let item of inbound.inventories.items) {\n if (item.productId) {\n hasProducts = true;\n break;\n }\n }\n }\n return { ...inbound, hasInvoiceItems, hasProducts };\n });\n\n setResults(inbounds);\n };\n\n return (\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"h5\">\n DO NOT RUN IF INBOUNDS / OUTBOUNDS HAVE BEEN INVOICED WITH SERVICE\n ITEMS\n </Typography>\n <Typography variant=\"h5\">INVENTORY PRODUCT ID WILL RESET</Typography>\n </Grid>\n <Grid item xs={12}>\n <TextInput\n select\n id=\"yardId\"\n label=\"Yard ID\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n required\n value={queryTerms.reloadYardId}\n onChange={(e) => handleYandChange(e.target.value)}\n style={{ minWidth: \"32rem\" }}\n >\n {reloadYards.map((itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {\" \"}\n {itm.name} - {itm.id}{\" \"}\n </MenuItem>\n ))}\n </TextInput>\n </Grid>\n <Grid item xs={12}>\n <TextInput\n select\n id=\"fromAccount\"\n label=\"From Account\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n required\n value={queryTerms.fromAccount}\n onChange={(e) =>\n setQueryTerms({ ...queryTerms, fromAccount: e.target.value })\n }\n style={{ minWidth: \"32rem\" }}\n >\n {accounts.map((itm) => (\n <MenuItem key={itm.id} value={itm}>\n {\" \"}\n {itm.businessName} - {itm.id}{\" \"}\n </MenuItem>\n ))}\n </TextInput>\n </Grid>\n <Grid item xs={12}>\n <TextInput\n id=\"searchTerm\"\n label=\"Search Term\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n value={queryTerms.searchTerm}\n onChange={(e) =>\n setQueryTerms({ ...queryTerms, searchTerm: e.target.value })\n }\n style={{ minWidth: \"32rem\" }}\n helperText=\"inbound ID, poNumber, railCarNumber, lotNumber, customFields\"\n />\n </Grid>\n <Grid item xs={12}>\n <Button\n variant=\"contained\"\n disabled={!queryTerms.reloadYardId || !queryTerms.fromAccount?.id}\n onClick={handleInboundSearch}\n >\n Search\n </Button>\n </Grid>\n {results?.items?.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"h5\">SAMPLE 10 ROWS</Typography>\n <ArrayField source=\"items\" record={results}>\n <Datagrid>\n <TextField source=\"id\" />\n <TextField source=\"poNumber\" />\n <TextField source=\"railCarNumber\" />\n <TextField source=\"lotNumber\" />\n <BooleanField source=\"hasProducts\" />\n <BooleanField source=\"hasInvoiceItems\" />\n </Datagrid>\n </ArrayField>\n </Grid>\n )}\n <Grid item xs={12}>\n <SwitchOnOff\n leftLabel=\"Refresh Account Name\"\n rightLabel=\"Change Account ID\"\n checked={queryTerms.changeId}\n // onChange={() => setQueryTerms({ ...queryTerms, changeId: !queryTerms.changeId })}\n setChecked={() =>\n setQueryTerms({ ...queryTerms, changeId: !queryTerms.changeId })\n }\n />\n {/*\n\t\t\t\t\tif change-id == TRUE, change both accoundId and accountName\n\t\t\t\t\tif change-id == FALSE, only refresh accountName\n\t\t\t\t*/}\n </Grid>\n {queryTerms?.changeId && (\n <Grid item xs={12}>\n <TextInput\n select\n id=\"toAccount\"\n label=\"To Account\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n required\n value={queryTerms.toAccount}\n onChange={(e) =>\n setQueryTerms({ ...queryTerms, toAccount: e.target.value })\n }\n style={{ minWidth: \"32rem\" }}\n >\n {accounts.map((itm) => (\n <MenuItem key={itm.id} value={itm}>\n {\" \"}\n {itm.businessName} - {itm.id}{\" \"}\n </MenuItem>\n ))}\n </TextInput>\n </Grid>\n )}\n </Grid>\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport * as queries from \"../../graphql/queries\";\nimport * as mutations from \"../../graphql/mutations\";\nimport * as reloadYardQueries from \"../../graphql/reloadyard/custom-queries\";\nimport * as listIdQueries from \"../../graphql/list-id-queries\";\nimport * as adminQueries from \"../../graphql/admin-queries\";\nimport * as inventoryMutations from \"../../graphql/inventory/custom-mutations\";\n\nimport {\n Button,\n Card,\n CardContent,\n CardHeader,\n Grid,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n useDataProvider,\n useMutation,\n useNotify,\n ArrayField,\n Datagrid,\n TextField,\n} from \"react-admin\";\n\nimport { getEnv, logError } from \"../../utils/appUtils\";\nimport {\n APP_VERSION,\n AclType,\n InboundStatus,\n InventoryStatus,\n LocationType,\n MAX_INVENTORY_QUERY_LIMIT,\n OutboundStatus,\n SORTKEY_BUFFER,\n ShipmentLineItemStatus,\n UserType,\n workdays,\n} from \"../../utils/constants\";\nimport { CheckIcon, XIcon } from \"../../components/common\";\nimport {\n getLocationFullName,\n setInventoryAisleList,\n} from \"../../utils/locationUtils\";\n\nimport * as utils from \"./AdminUtils\";\nimport {\n updateReloadYardMini,\n updateUserMini,\n} from \"../../graphql/reloadyard/custom-mutations\";\nimport {\n isLumberCommodity,\n isPanelsCommodity,\n} from \"../../utils/loadTypeUtils\";\nimport { trimDecimal } from \"../../utils/utils\";\n\nconst _ = require(\"lodash\");\n\nconst getVersion = () => `Version: ${APP_VERSION}`;\n\nconst useStyles = makeStyles((theme) => ({\n card: {\n marginTop: theme.spacing(2),\n overflow: \"auto\",\n },\n}));\n\nconst getHelpPageButtonText = (env) => {\n switch (env) {\n case \"prod\":\n return \"Pull Hotfix Help Pages\";\n case \"hotfix\":\n return \"Pull Dev Help Pages\";\n default:\n return null;\n }\n};\n\nconst helpPageButtonText = getHelpPageButtonText(getEnv());\n\nconst MismatchIcon = ({ record, ...props }) =>\n record?.quantityAvailable === record.totalInventoryQuantity ? (\n <CheckIcon />\n ) : (\n <XIcon />\n );\n\nexport const AdminDashboard = ({ permissions }) => {\n const classes = useStyles();\n const notify = useNotify();\n const dataProvider = useDataProvider();\n\n const [reloadYards, setReloadYards] = useState([]);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [handler, setHandler] = useState();\n const [handlerName, setHandlerName] = useState();\n const [queryTerms, setQueryTerms] = useState({});\n const [results, setResults] = useState();\n const [loading, setLoading] = useState(false);\n const [apiKey, setApiKey] = useState(\"\");\n\n useEffect(() => {\n utils.getYards(setReloadYards, notify);\n }, []);\n\n let appUser = window.appUser;\n\n // ################################################################\n // ################################################################\n // ################################################################\n const handleDialogOpen = (handler, handlerName) => {\n debugger;\n setHandler(() => handler);\n setHandlerName(handlerName);\n setDialogOpen(true);\n };\n\n const handleDialogClose = (_, reason) => {\n if (reason !== \"backdropClick\") {\n setDialogOpen(false);\n setQueryTerms({});\n setResults(null);\n }\n };\n\n const addDefaultScheduleToYard = async () => {\n const defaultSchedule = {\n workdays,\n holidays: [],\n minNoticeHours: 24,\n maxDaysIntoFuture: 60,\n };\n\n try {\n const promiseList = [];\n const toUpdateYards = reloadYards.filter((itm) => !itm.schedule);\n toUpdateYards.forEach((itm) => {\n promiseList.push(\n API.graphql(\n graphqlOperation(updateReloadYardMini, {\n input: {\n id: itm.id,\n active: itm.active,\n name: itm.name,\n schedule: defaultSchedule,\n },\n })\n )\n );\n });\n const result = Promise.all(promiseList);\n console.log(result);\n console.log(\"done\");\n debugger;\n } catch (err) {\n console.log(err);\n }\n };\n\n const handleSubmit = async (queryTerms) => {\n setLoading(true);\n await handler(queryTerms, notify, dataProvider);\n setDialogOpen(false);\n setQueryTerms({});\n setResults(null);\n setLoading(false);\n };\n\n // ################################################################\n // ################################################################\n // ################################################################\n // ################################################################\n // ################################################################\n // ################################################################\n\n const auditProducts = async (queryTerms) => {\n console.clear();\n try {\n debugger;\n const result = await API.graphql(\n graphqlOperation(queries.inventoryByStatusByLot, {\n reloadYardId: queryTerms.reloadYardId,\n statusLotNumber: {\n beginsWith: { status: InventoryStatus.STORED },\n },\n limit: 1000,\n })\n );\n let data = result.data.inventoryByStatusByLot.items;\n console.log(\"reloadYardId:\", queryTerms.reloadYardId);\n console.log(\"inventories:\", data);\n debugger;\n\n data = data.filter((itm) => itm.productCode);\n\n let reportData = _(data)\n .groupBy(\"productId\")\n .map((objs, key) => ({\n id: objs[0].id,\n accountName: objs[0].accountName,\n productId: key,\n productCode: objs[0].productCode,\n productName: objs[0].productName,\n quantityOnHand: objs.reduce(function (sum, record) {\n return sum + record.quantityOnHand;\n }, 0),\n quantityCommitted: objs.reduce(function (sum, record) {\n return sum + record.quantityCommitted;\n }, 0),\n quantityAvailable: objs.reduce(function (sum, record) {\n return sum + (record.quantityOnHand - record.quantityCommitted);\n }, 0),\n totalInventoryQuantity: objs[0].product?.totalInventoryQuantity,\n }))\n .value();\n\n if (\n reportData.some(\n (itm) => itm.quantityAvailable !== itm.totalInventoryQuantity\n )\n )\n console.log(\"Qty. Mismatch !!!\");\n debugger;\n\n reportData = {\n id: new Date(),\n items: [...reportData],\n };\n\n setResults(reportData);\n notify(\"All done\");\n } catch (error) {\n logError(\"AdminDashboard:auditProducts\", error, notify);\n }\n };\n\n // ################################################################\n // ################################################################\n // ################################################################\n // ################################################################\n // ################################################################\n // ################################################################\n\n const runSortKeyBackfill = async (queryTerms) => {\n console.clear();\n console.log(\"reload yard:\", queryTerms.reloadYardId);\n\n try {\n let result = await API.graphql(\n graphqlOperation(queries.listInboundShipments, { limit: 1000 })\n );\n let data = result.data.listInboundShipments.items.filter(\n (itm) => itm.reloadYardId === queryTerms.reloadYardId\n );\n console.log(\"Inbound data:\", data);\n debugger;\n\n for (const inbound of data) {\n let index = 10001;\n\n const resp = await API.graphql(\n graphqlOperation(queries.getInboundShipment, { id: inbound.id })\n );\n const inventories = resp.data.getInboundShipment.inventories.items;\n console.log(\"inventories data:\", inventories?.length);\n\n for (const inventory of inventories) {\n const recordToUpdate = {\n ...inventory,\n sortKey: inventory.sortKey ? inventory.sortKey : index,\n };\n index = index + 1;\n\n debugger;\n delete recordToUpdate.account;\n delete recordToUpdate.area;\n delete recordToUpdate.zone;\n delete recordToUpdate.location;\n delete recordToUpdate.product;\n delete recordToUpdate.reloadYardCommodity;\n delete recordToUpdate.shipmentLineItems;\n delete recordToUpdate.createdAt;\n delete recordToUpdate.updatedAt;\n\n console.log(\n recordToUpdate.lotNumber,\n recordToUpdate.productName,\n recordToUpdate.sortKey\n );\n await dataProvider.update(\"inventories\", { data: recordToUpdate });\n }\n }\n\n result = await API.graphql(\n graphqlOperation(queries.listOutboundShipments, { limit: 1000 })\n );\n data = result.data.listOutboundShipments.items.filter(\n (itm) => itm.reloadYardId === queryTerms.reloadYardId\n );\n console.log(\"Outbound data:\", data);\n debugger;\n\n for (const outbound of data) {\n let index = 10001;\n\n const resp = await API.graphql(\n graphqlOperation(queries.getOutboundShipment, { id: outbound.id })\n );\n const lineItems = resp.data.getOutboundShipment.shipmentLineItems.items;\n console.log(\"Line Items data:\", lineItems?.length);\n\n for (const lineItem of lineItems) {\n const recordToUpdate = {\n ...lineItem,\n sortKey: lineItem.sortKey ? lineItem.sortKey : index,\n };\n index = index + 1;\n debugger;\n delete recordToUpdate.inventory;\n delete recordToUpdate.createdAt;\n delete recordToUpdate.updatedAt;\n\n console.log(recordToUpdate.lotNumber, recordToUpdate.sortKey);\n await dataProvider.update(\"shipmentLineItems\", {\n data: recordToUpdate,\n });\n }\n }\n\n console.log(\"done\");\n notify(\"All done\");\n } catch (error) {\n logError(\"AdminDashboard:runCustomFiledID\", error, notify);\n }\n };\n\n // resetAislesLocations\n const resetAisleSortKey = async (queryTerms) => {\n console.clear();\n console.log(queryTerms.reloadYardId);\n\n try {\n debugger;\n const resp = await API.graphql(\n graphqlOperation(queries.aisleByActiveBySortKey, {\n reloadYardId: queryTerms.reloadYardId,\n })\n );\n const aisles = resp.data.aisleByActiveBySortKey.items;\n console.log(aisles);\n\n let index = 0;\n for (const itm of aisles) {\n let input = {\n ...itm,\n sortKey: index + SORTKEY_BUFFER,\n };\n index++;\n\n if (itm.type === LocationType.UNSTRUCTURED) {\n delete input.bays;\n delete input.levels;\n delete input.positions;\n }\n delete input.area;\n delete input.zone;\n delete input.createdAt;\n delete input.updatedAt;\n delete input.accountId;\n delete input.locations;\n\n await API.graphql(graphqlOperation(mutations.updateAisle, { input }));\n }\n } catch (err) {\n console.log(err);\n }\n\n console.log(\"all done\");\n notify(\"All done\");\n };\n\n const inventory_invItem_backfill = async (queryTerms) => {\n console.clear();\n let totalRecords = 0;\n let failedRecords = 0;\n debugger;\n\n try {\n const searchInput = {\n filter: {\n reloadYardId: { eq: queryTerms.reloadYardId },\n },\n limit: 100,\n };\n\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const result = await API.graphql(\n graphqlOperation(adminQueries.searchInventorysBackfill, input)\n );\n const inventoryList = result.data.searchInventorys.items;\n nextToken = result.data.searchInventorys.nextToken;\n console.log(\"inventoryList\", inventoryList);\n\n let promiseList = [];\n const locationMap = {};\n inventoryList.forEach((inventory) => {\n const toUpdateInventory = {\n ...inventory,\n aisleId: null,\n locationId: null,\n locationFullName: null,\n outboundShipmentId: null,\n latitude: null,\n longitude: null,\n // quantityAdvised: inventory.quantityShipped,\n // quantityShipped: null,\n };\n // if (inventory.quantityDelivered !== null && inventory.quantityDelivered !== undefined) {\n // \ttoUpdateInventory.quantityReceived = inventory.quantityDelivered;\n // \ttoUpdateInventory.quantityDelivered = null;\n // }\n // if (inventory.deliveryDateTime !== null && inventory.deliveryDateTime !== undefined) {\n // \ttoUpdateInventory.receivedDateTime = inventory.deliveryDateTime;\n // \ttoUpdateInventory.deliveryDateTime = null;\n // }\n\n // console.log(\"toUpdateInventory\", toUpdateInventory)\n promiseList.push(utils.saveInventory(toUpdateInventory));\n\n // update locations with productId for STORED inventories\n if (\n inventory.productId &&\n inventory.status !== InventoryStatus.SHIPPED\n ) {\n if (inventory.inventoryItems?.items) {\n inventory.inventoryItems.items.forEach((item) => {\n if (\n item.status !== InventoryStatus.SHIPPED &&\n !locationMap[item.locationId]\n ) {\n locationMap[item.locationId] = true;\n\n const locationToUpdate = {\n ...item.location,\n productId: toUpdateInventory.productId,\n productName: toUpdateInventory.productName,\n };\n\n delete locationToUpdate.area;\n delete locationToUpdate.zone;\n delete locationToUpdate.aisle;\n delete locationToUpdate.locationLoad;\n // console.log(\"locationToUpdate\", locationToUpdate)\n\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.updateLocation, {\n input: locationToUpdate,\n })\n )\n );\n }\n });\n }\n }\n });\n\n promiseList = promiseList.filter((itm) => itm);\n totalRecords += promiseList.length;\n\n const results = await Promise.allSettled(promiseList);\n for (const resp of results) {\n if (resp.status === \"rejected\") {\n console.log(\"REJECTED: \", resp);\n failedRecords++;\n }\n }\n }\n } catch (err) {\n logError(\"AdminDashboard:run_Inventory_backfill\", err, notify);\n } finally {\n console.log(\"Total: \", totalRecords);\n console.log(\"Failed: \", failedRecords);\n }\n\n notify(\"All done\");\n };\n\n const doCreateInventoryItems = (currentInventory) => {\n const promiseList = [];\n const toCreateInvItem = {\n groups: currentInventory.groups,\n owner: currentInventory.owner,\n status: currentInventory.status,\n inventoryId: currentInventory.id,\n reloadYardId: currentInventory.reloadYardId,\n areaId: currentInventory.areaId,\n zoneId: currentInventory.zoneId,\n aisleId: currentInventory.aisleId,\n locationId: currentInventory.locationId,\n inboundShipmentId: currentInventory.inboundShipmentId,\n outboundShipmentId: currentInventory.outboundShipmentId || \"\",\n locationFullName:\n currentInventory.locationFullName?.length > 0\n ? currentInventory.locationFullName\n : getLocationFullName(currentInventory.location),\n };\n // if (currentInventory.id === \"5ad3378b-7964-4517-ac37-d0d798ca52c1\") debugger;\n if (\n !toCreateInvItem.locationFullName ||\n toCreateInvItem.locationFullName === \"\"\n ) {\n debugger;\n console.log(\n \"inventory missing location\",\n currentInventory,\n currentInventory.id,\n currentInventory.locationId\n );\n }\n\n let remainingCount = currentInventory.quantityDelivered; // quantityDelivered - qty shipped outbound\n if (\n currentInventory.inventoryUnits === \"UNIT\" &&\n currentInventory.location.type === LocationType.STRUCTURED &&\n !currentInventory.location.locationLoad?.other.selected\n ) {\n if (currentInventory.shipmentLineItems?.items?.length > 0) {\n for (const lineItem of currentInventory.shipmentLineItems.items) {\n const qtyShipped = lineItem.totalQuantityToPick;\n if (lineItem.status === ShipmentLineItemStatus.SHIPPED) {\n for (let i = 1; i <= qtyShipped; i++) {\n toCreateInvItem.status = InventoryStatus.SHIPPED;\n toCreateInvItem.quantityOnHand = 0;\n toCreateInvItem.quantityCommitted = 0;\n toCreateInvItem.history = currentInventory.history;\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.createInventoryItem, {\n input: { ...toCreateInvItem },\n })\n )\n );\n remainingCount--;\n }\n } else {\n for (let i = 1; i <= qtyShipped; i++) {\n toCreateInvItem.status = currentInventory.status;\n toCreateInvItem.quantityOnHand = 1;\n toCreateInvItem.quantityCommitted = 1;\n toCreateInvItem.history = currentInventory.history;\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.createInventoryItem, {\n input: { ...toCreateInvItem },\n })\n )\n );\n remainingCount--;\n }\n }\n }\n }\n\n for (let i = 1; i <= remainingCount; i++) {\n toCreateInvItem.status = currentInventory.status;\n toCreateInvItem.quantityOnHand = 1;\n toCreateInvItem.quantityCommitted = 0;\n toCreateInvItem.history = currentInventory.history;\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.createInventoryItem, {\n input: { ...toCreateInvItem },\n })\n )\n );\n }\n } else {\n // inventoryUnits !== \"UNIT\" || loadType === OTHER\n if (\n currentInventory.quantityOnHand === null ||\n currentInventory.quantityCommitted === null\n ) {\n if (currentInventory.shipmentLineItems?.items?.length > 0) {\n let totalShipped = 0;\n let totalCommitted = 0;\n for (const lineItem of currentInventory.shipmentLineItems.items) {\n if (lineItem.status === ShipmentLineItemStatus.SHIPPED) {\n toCreateInvItem.status = InventoryStatus.SHIPPED;\n totalShipped += lineItem.totalQuantityToPick;\n } else {\n toCreateInvItem.status = currentInventory.status;\n totalCommitted += lineItem.totalQuantityToPick;\n }\n }\n toCreateInvItem.quantityOnHand =\n currentInventory.quantityDelivered - totalShipped;\n toCreateInvItem.quantityCommitted = totalCommitted;\n } else {\n toCreateInvItem.status = currentInventory.status;\n toCreateInvItem.quantityOnHand = currentInventory.quantityDelivered;\n toCreateInvItem.quantityCommitted =\n currentInventory.quantityCommitted;\n }\n } else {\n toCreateInvItem.status = currentInventory.status;\n toCreateInvItem.quantityOnHand = currentInventory.quantityOnHand;\n toCreateInvItem.quantityCommitted = currentInventory.quantityCommitted;\n }\n\n toCreateInvItem.history = currentInventory.history;\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.createInventoryItem, {\n input: { ...toCreateInvItem },\n })\n )\n );\n }\n return promiseList;\n };\n\n const createInventoryItems = async (queryTerms) => {\n console.clear();\n console.log(queryTerms.reloadYardId);\n console.log(\"env\", process.env.NODE_ENV);\n debugger;\n // create inventory items from inventory for inventoryItem release conversion\n\n const startTime = performance.now();\n let inventoryCount = 0;\n\n try {\n const searchInput = {\n reloadYardId: queryTerms.reloadYardId,\n limit: 20,\n };\n\n let nextToken = true;\n while (nextToken) {\n let promiseList = [];\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(adminQueries.inventoryByStatusByLot, input)\n );\n const inventoryList = result.data.inventoryByStatusByLot.items.filter(\n (itm) => {\n // keep if has no aisleList, and has aisleId and locationId\n return (\n (!itm.aisleList || itm.aisleList?.length === 0) &&\n itm.locationId &&\n itm.aisleId\n );\n }\n );\n console.log(\"inventoryList\", inventoryList);\n nextToken = result.data.inventoryByStatusByLot.nextToken;\n\n for (const inventory of inventoryList) {\n // if (inventory.id === \"5ad3378b-7964-4517-ac37-d0d798ca52c1\") debugger;\n if (\n !inventory.aisleList ||\n !inventory.inventoryItems ||\n inventory.inventoryItems.items.length === 0\n ) {\n const promises = doCreateInventoryItems(inventory);\n promiseList = promiseList.concat(promises);\n\n inventory.aisleList = [inventory.aisleId];\n promiseList.push(utils.saveInventory(inventory));\n inventoryCount += 1;\n } else {\n console.log(\"manually created\", inventory, inventory.id);\n }\n }\n\n console.log(\"promiseList\", promiseList.length);\n const response = await Promise.allSettled(promiseList);\n\n response.some((resp) => {\n if (resp.status === \"rejected\") {\n console.log(\"REJECTED: \", resp.reason);\n // return true; // Stops the iteration\n }\n return false;\n });\n }\n } catch (err) {\n logError(\"AdminDashboard:createInventoryItems\", err, notify);\n }\n\n const endTime = performance.now();\n utils.elapsedTime(startTime, endTime, inventoryCount, 16300);\n\n notify(\"All done\");\n };\n\n const hdmCreateInventoryItem = (inventory) => {\n const promiseList = [];\n const toCreateInvItem = {\n groups: inventory.groups,\n owner: inventory.owner,\n status: inventory.status,\n inventoryId: inventory.id,\n reloadYardId: inventory.reloadYardId,\n areaId: inventory.areaId,\n zoneId: inventory.zoneId,\n aisleId: \"67aa47c5-68c5-4546-ba7f-dcf806db64d6\",\n locationId: \"9f9efa58-e1c7-4396-a70a-4808ef263690\",\n inboundShipmentId: inventory.inboundShipmentId,\n outboundShipmentId: inventory.outboundShipmentId || \"\",\n locationFullName: \"TTR-1\",\n };\n\n toCreateInvItem.quantityOnHand = inventory.quantityOnHand;\n toCreateInvItem.quantityCommitted = inventory.quantityCommitted;\n\n toCreateInvItem.history = [\n {\n by: \"Jonathan MacGregor\",\n date: inventory.updatedAt,\n text:\n \"Allocated \" +\n inventory.quantityOnHand +\n \" \" +\n inventory.inventoryUnits +\n \" to TTR-1\",\n type: \"INVENTORY\",\n },\n ];\n console.log(\"toCreateInvItem\", toCreateInvItem);\n\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.createInventoryItem, {\n input: { ...toCreateInvItem },\n })\n )\n );\n return promiseList;\n };\n\n const hdmFixInventoryItems = async () => {\n console.clear();\n // create missing inventory items from inventory and fix status\n debugger;\n\n try {\n let searchInput = {\n filter: {\n reloadYardId: { eq: \"3404db3b-775d-44a9-a445-2551f04a5eb6\" },\n status: { eq: \"STORED\" },\n },\n limit: 500,\n };\n\n let nextToken = true;\n while (nextToken) {\n let promiseList = [];\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const result = await API.graphql(\n graphqlOperation(adminQueries.searchInventorysBackfill, input)\n );\n const inventoryList = result.data.searchInventorys.items;\n console.log(\"inventoryList\", inventoryList);\n nextToken = result.data.searchInventorys.nextToken;\n\n for (const inventory of inventoryList) {\n if (\n !inventory.inventoryItems ||\n inventory.inventoryItems.items.length === 0\n ) {\n const promises = hdmCreateInventoryItem(inventory);\n promiseList = promiseList.concat(promises);\n inventory.aisleList = [\"67aa47c5-68c5-4546-ba7f-dcf806db64d6\"];\n promiseList.push(utils.saveInventory(inventory));\n } else {\n for (const inventoryItem of inventory.inventoryItems.items) {\n if (\n inventoryItem.status !== inventory.status ||\n inventoryItem.inboundShipmentId !== inventory.inboundShipmentId\n ) {\n if (inventoryItem.status !== inventory.status) {\n console.log(\"status\", inventoryItem.status, inventory.status);\n }\n if (\n inventoryItem.inboundShipmentId !==\n inventory.inboundShipmentId\n ) {\n console.log(\n \"inboundShipmentId\",\n inventoryItem.inboundShipmentId,\n inventory.inboundShipmentId\n );\n }\n inventoryItem.status = inventory.status;\n inventoryItem.inboundShipmentId = inventory.inboundShipmentId;\n const promise = utils.saveInventoryItem(inventoryItem);\n promiseList = promiseList.concat(promise);\n }\n }\n }\n }\n\n console.log(\"promiseList\", promiseList.length);\n const response = await Promise.allSettled(promiseList);\n\n response.some((resp) => {\n if (resp.status === \"rejected\") {\n console.log(\"REJECTED: \", resp.reason);\n }\n return false;\n });\n }\n } catch (err) {\n logError(\"AdminDashboard:hdmFixInventoryItems\", err, notify);\n }\n\n notify(\"All done\");\n };\n\n function processInventoryMerge(inventories) {\n // Grouping inventories by their equality criteria\n let groupedInventories = {};\n let keptInventories = []; // List to keep track of inventories that are retained\n let updatePromises = [];\n let deletePromises = [];\n\n inventories.forEach((inv) => {\n let key = `${inv.productName}||${\n inv.productId || \"productId\"\n }|${JSON.stringify(inv.customFields)}`;\n if (!groupedInventories[key]) {\n groupedInventories[key] = [];\n }\n groupedInventories[key].push(inv);\n });\n console.log(\"groupedInventories\", groupedInventories);\n\n // Process each inventyory group array\n Object.values(groupedInventories).forEach((invGroup) => {\n debugger;\n // Find the first 'STORED' inventory if there's a mix of statuses, otherwise keep the first one\n // only dealing with STORED and SHIPPED inventories.\n let keepInventory =\n invGroup.find((inv) => inv.status === \"STORED\") || invGroup[0];\n const aisleIdMap = {};\n let mergedHistory = [];\n let mergedNotes = [];\n let oldestInventoryCreatedEntry = null;\n\n // Merge logic\n invGroup.forEach((inv) => {\n // Merge histories\n inv.history.forEach((hist) => {\n debugger;\n if (\n hist.text.startsWith(\"Inventory Created\") ||\n hist.text.startsWith(\"Created Inventory\")\n ) {\n if (\n !oldestInventoryCreatedEntry ||\n new Date(hist.date) < new Date(oldestInventoryCreatedEntry.date)\n ) {\n oldestInventoryCreatedEntry = hist; // Keep the oldest 'Inventory Created' entry\n }\n // Skip the addition of 'Inventory Created' entry here as it will be added later if it's the oldest\n } else if (hist.text === \"Location re-named from to \") {\n // skip all blank \"location re-named\" history\n } else if (hist.text === \"Location changed to \") {\n // skip all blank \"Location changed\" history\n } else if (\n inv.id !== keepInventory.id &&\n !hist.text.startsWith(\"Location changed\")\n ) {\n // Add the history entry from a deleted inventory if it's not\n //\t'Inventory Created' || \"Location changed\"\n mergedHistory.push(hist);\n } else if (inv.id === keepInventory.id) {\n // keep all other history from keepInventory\n mergedHistory.push(hist);\n }\n });\n\n // merge notes\n inv.notes?.forEach((note) => {\n mergedNotes.push(note);\n });\n\n if (inv.id === keepInventory.id) {\n // keep ailes from kept inventoryItems\n inv.inventoryItems.items.forEach((item) => {\n aisleIdMap[item.aisleId] = true;\n });\n } else {\n // Update inventoryItems of the duplicate inventories and sum their quantities\n inv.inventoryItems.items.forEach((item) => {\n item.inventoryId = keepInventory.id;\n /////////////////////////////////////////////////////\n updatePromises.push(utils.saveInventoryItem(item));\n\n // if SHIPPED qtyOnHand = 0 ...\n keepInventory.quantityOnHand += item.quantityOnHand;\n keepInventory.quantityCommitted += item.quantityCommitted;\n aisleIdMap[item.aisleId] = true;\n });\n\n // Sum quantities from deleted inventories\n // if SHIPPED qtyOnHand = 0 ...\n keepInventory.quantityShipped += inv.quantityShipped;\n keepInventory.quantityDelivered += inv.quantityDelivered;\n keepInventory.lastShipDateTime =\n keepInventory.lastShipDateTime > inv.lastShipDateTime\n ? keepInventory.lastShipDateTime\n : inv.lastShipDateTime;\n keepInventory.turnDays =\n keepInventory.turnDays > inv.turnDays\n ? keepInventory.turnDays\n : inv.turnDays;\n\n // Update shipmentLineItems for each inventory\n inv.shipmentLineItems.items.forEach((shipmentLineItem) => {\n shipmentLineItem.inventoryId = keepInventory.id;\n /////////////////////////////////////////////////////\n updatePromises.push(utils.saveShipmentLineItem(shipmentLineItem));\n\n // Update shipmentLineItemInventoryItems for each shipment line item\n shipmentLineItem.inventoryItems.items.forEach((inventoryItem) => {\n inventoryItem.inventoryId = keepInventory.id;\n /////////////////////////////////////////////////////\n updatePromises.push(\n utils.saveShipmentLineItemInventoryItem(inventoryItem)\n );\n });\n });\n\n /////////////////////////////////////////////////////\n deletePromises.push(utils.removeInventory(inv));\n }\n });\n\n // update aisle list for kept inventory\n keepInventory.aisleList = Object.keys(aisleIdMap);\n\n // Sort the merged history by date\n mergedHistory.sort((a, b) => new Date(a.date) - new Date(b.date));\n\n // If the oldest 'Inventory Created' entry exists, ensure it's the first entry\n if (oldestInventoryCreatedEntry) {\n mergedHistory.unshift(oldestInventoryCreatedEntry);\n }\n\n keepInventory.history = mergedHistory;\n\n if (mergedNotes.length > 0) {\n mergedNotes.sort((a, b) => new Date(a.date) - new Date(b.date));\n keepInventory.notes = mergedNotes;\n }\n\n // Keep track of the retained inventory\n keptInventories.push(keepInventory);\n });\n\n // Update sortKey of all kept inventories\n let sortKeyIndex = 10001;\n keptInventories.forEach((keepInventory) => {\n keepInventory.sortKey = sortKeyIndex++;\n /////////////////////////////////////////////////////\n updatePromises.push(utils.saveInventory(keepInventory));\n });\n\n return [...updatePromises, ...deletePromises];\n }\n\n const mergeInventories = async (queryTerms) => {\n console.clear();\n console.log(queryTerms.reloadYardId);\n debugger;\n // merge inventories with same inbound, product name, custom fields, units. Move inventoryItems\n\n try {\n let nextToken = true;\n let searchInput = {\n reloadYardId: queryTerms.reloadYardId,\n limit: 10,\n };\n\n while (nextToken) {\n let promiseList = [];\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(\n adminQueries.inboundShipmentByReloadYardByAccount,\n input\n )\n );\n const inboundList =\n result.data.inboundShipmentByReloadYardByAccount.items.filter(\n (itm) => itm.status === \"RELEASED\"\n );\n console.log(\"inboundList\", inboundList);\n nextToken = result.data.inboundShipmentByReloadYardByAccount.nextToken;\n\n for (const inbbund of inboundList) {\n const inventoryList = inbbund.inventories.items.sort(\n (a, b) => a.sortKey - b.sortKey\n );\n console.log(\"inventoryList\", inventoryList);\n promiseList = processInventoryMerge(inventoryList);\n }\n\n console.log(\"promiseList\", promiseList.length);\n const response = await Promise.allSettled(promiseList);\n\n response.some((resp) => {\n if (resp.status === \"rejected\") {\n console.log(\"REJECTED: \", resp.reason);\n return true; // Stops the iteration\n }\n return false;\n });\n }\n } catch (err) {\n logError(\"AdminDashboard:mergeInventories\", err, notify);\n }\n\n notify(\"All done\");\n };\n\n function processShipmentLineItemMerge(lineItems) {\n // Grouping lineItems by their equality criteria\n let groupedLineItems = {};\n let keptLineItems = []; // List to keep track of LineItems that are retained\n let updatePromises = [];\n let deletePromises = [];\n\n lineItems.forEach((item) => {\n let key = `${item.inventoryId}||${item.outboundShipmentId}||${item.status}`;\n if (!groupedLineItems[key]) {\n groupedLineItems[key] = [];\n }\n groupedLineItems[key].push(item);\n });\n console.log(\"groupedLineItems\", groupedLineItems);\n\n // Process each inventyory group array\n Object.values(groupedLineItems).forEach((lineItemGroup) => {\n debugger;\n // keep the first one\n let keepLineItem = lineItemGroup[0];\n let mergedHistory = [];\n let mergedNotes = [];\n let oldestLineItemCreatedEntry = null;\n console.log(\"keepLineItem\", keepLineItem);\n\n // Merge logic\n lineItemGroup.forEach((lineItem) => {\n // Merge histories\n lineItem.history.forEach((hist) => {\n debugger;\n if (\n hist.text.startsWith(\"Pick List item created\") ||\n hist.text.startsWith(\"Committed Qty. of\")\n ) {\n if (\n !oldestLineItemCreatedEntry ||\n new Date(hist.date) < new Date(oldestLineItemCreatedEntry.date)\n ) {\n oldestLineItemCreatedEntry = hist; // Keep the oldest 'Pick List item Created' entry\n }\n // Skip the addition of 'Inventory Created' entry here as it will be added later if it's the oldest\n } else {\n // keep all other history from keepLineItem && deleted lineItems\n mergedHistory.push(hist);\n }\n });\n console.log(\"mergedHistory\", mergedHistory);\n\n // merge notes\n lineItem.notes?.forEach((note) => {\n mergedNotes.push(note);\n });\n\n if (lineItem.id !== keepLineItem.id) {\n // Update shipmentLineItemInventoryItems of the duplicate lineItems\n lineItem.inventoryItems.items.forEach((inventoryItem) => {\n inventoryItem.shipmentLineItemId = keepLineItem.id;\n inventoryItem.inventoryId = keepLineItem.inventoryId;\n /////////////////////////////////////////////////////\n updatePromises.push(\n utils.saveShipmentLineItemInventoryItem(inventoryItem)\n );\n console.log(\n \"saveShipmentLineItemInventoryItem(inventoryItem)\",\n inventoryItem\n );\n });\n\n // Sum quantities from deleted lineItems\n keepLineItem.totalQuantityToPick += lineItem.totalQuantityToPick;\n\n /////////////////////////////////////////////////////\n deletePromises.push(utils.removeShipmentLineItem(lineItem));\n console.log(\"removeInventory(inv)\", lineItem);\n }\n });\n\n // Sort the merged history by date\n mergedHistory.sort((a, b) => new Date(a.date) - new Date(b.date));\n\n // If the oldest 'PlicList Item Created' entry exists, ensure it's the first entry\n if (oldestLineItemCreatedEntry) {\n mergedHistory.unshift(oldestLineItemCreatedEntry);\n }\n\n keepLineItem.history = mergedHistory;\n\n if (mergedNotes.length > 0) {\n mergedNotes.sort((a, b) => new Date(a.date) - new Date(b.date));\n keepLineItem.notes = mergedNotes;\n }\n\n // Keep track of the retained inventory\n keptLineItems.push(keepLineItem);\n });\n\n // Update sortKey of all kept inventories\n let sortKeyIndex = 10001;\n keptLineItems.forEach((keepLineItem) => {\n keepLineItem.sortKey = sortKeyIndex++;\n /////////////////////////////////////////////////////\n updatePromises.push(utils.saveShipmentLineItem(keepLineItem));\n console.log(\"saveShipmentLineItem(shipmentLineItem)\", keepLineItem);\n });\n\n return [...updatePromises, ...deletePromises];\n }\n\n const mergeShipmentLineItems = async (queryTerms) => {\n console.clear();\n console.log(queryTerms.reloadYardId);\n debugger;\n // merge inventories with same inbound, product name, custom fields, units. Move inventoryItems\n\n try {\n let nextToken = true;\n let searchInput = {\n reloadYardId: queryTerms.reloadYardId,\n limit: 10,\n };\n\n while (nextToken) {\n let promiseList = [];\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(adminQueries.inventoryByStatusByLot, input)\n );\n const inventoryList = result.data.inventoryByStatusByLot.items;\n console.log(\"inventoryList\", inventoryList);\n nextToken = result.data.inventoryByStatusByLot.nextToken;\n // nextToken = null;\n\n for (const inventory of inventoryList) {\n const lineItemList = inventory.shipmentLineItems.items.sort(\n (a, b) => a.sortKey - b.sortKey\n );\n // if (lineItemList.length > 5) {\n console.log(\"lineItemList\", lineItemList);\n promiseList = processShipmentLineItemMerge(lineItemList);\n // }\n }\n\n console.log(\"promiseList\", promiseList.length);\n const response = await Promise.allSettled(promiseList);\n\n response.some((resp) => {\n if (resp.status === \"rejected\") {\n console.log(\"REJECTED: \", resp.reason);\n return true; // Stops the iteration\n }\n return false;\n });\n }\n } catch (err) {\n logError(\"AdminDashboard:mergeShipmentLineItems\", err, notify);\n }\n\n notify(\"All done\");\n };\n\n const devInventoryItemCleanout = async () => {\n console.clear();\n debugger;\n\n try {\n let missingInventory = 0;\n let missingLineItems = 0;\n let missingInvItemss = 0;\n const promiseList = [];\n let inventoryItemMap = {};\n let nextToken = true;\n\n let result = await API.graphql(\n graphqlOperation(listIdQueries.listInventoryIds, { limit: 1000 })\n );\n const inventoryList = result.data.listInventories.items; //.filter(itm => itm !== null);\n console.log(\"inventoryList\", inventoryList);\n const inventoryMap = inventoryList.reduce((acc, obj) => {\n acc[obj.id] = obj;\n return acc;\n }, {});\n\n // ##############################################################################################################\n result = await API.graphql(\n graphqlOperation(listIdQueries.listShipmentLineItemIds, {\n limit: 1000,\n })\n );\n const lineItemList = result.data.listShipmentLineItems.items; //.filter(itm => itm !== null);\n console.log(\"lineItemList\", lineItemList);\n const lineItemMap = lineItemList.reduce((acc, obj) => {\n acc[obj.id] = obj;\n return acc;\n }, {});\n\n result = await API.graphql(\n graphqlOperation(\n adminQueries.listShipmentLineItemInventoryItemsDeleteMe,\n { limit: 1000 }\n )\n );\n const lineItemInvItemList =\n result.data.listShipmentLineItemInventoryItems.items; //.filter(itm => itm !== null);\n console.log(\"lineItemInvItemList\", lineItemInvItemList);\n for (const lineItemInvItem of lineItemInvItemList) {\n let lineItem = lineItemMap[lineItemInvItem.shipmentLineItemId];\n let inventoryItem = lineItemInvItem.inventoryItem;\n let inventory =\n inventoryMap[lineItemInvItem.inventoryId] ||\n lineItemInvItem?.inventoryItem?.inventory;\n\n if (!lineItem) {\n console.log(\n \"lineItemInventoryItem missing lineItem\",\n lineItemInvItem\n );\n missingLineItems++;\n const input = { id: lineItemInvItem.id };\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.deleteShipmentLineItemInventoryItem, {\n input,\n })\n )\n );\n } else if (!inventoryItem) {\n console.log(\n \"lineItemInventoryItem missing inventoryItem\",\n lineItemInvItem\n );\n missingInvItemss++;\n const input = { id: lineItemInvItem.id };\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.deleteShipmentLineItemInventoryItem, {\n input,\n })\n )\n );\n } else if (!inventory) {\n console.log(\n \"lineItemInventoryItem missing inventory\",\n lineItemInvItem\n );\n missingInventory++;\n const input = { id: lineItemInvItem.id };\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.deleteShipmentLineItemInventoryItem, {\n input,\n })\n )\n );\n } else {\n // } if (location) {\n // delete ShipmentLineItemInventoryItem for old, pre-existing inventories\n // all ShipmentLineItemInventoryItem will be re-created with CreateLineItemInventoryItem\n const input = { id: lineItemInvItem.id };\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.deleteShipmentLineItemInventoryItem, {\n input,\n })\n )\n );\n }\n }\n\n // ##############################################################################################################\n nextToken = true;\n const searchInput = { limit: 500 };\n while (nextToken) {\n try {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(adminQueries.listInventoryItemsDeleteMe, input)\n );\n const inventoryItemList = result.data.listInventoryItems.items; //.filter(itm => itm !== null);\n nextToken = result.data.listInventoryItems.nextToken;\n console.log(\"inventoryItemList\", inventoryItemList);\n\n for (const inventoryItem of inventoryItemList) {\n let inventory =\n inventoryMap[inventoryItem.inventoryId] ||\n inventoryItem.inventory;\n inventoryItemMap[inventoryItem.id] = inventoryItem;\n\n if (!inventory) {\n // delete inventoryItems if they are missing inventory for some reason\n console.log(\n \"inventoryItem missing inventory\",\n inventoryItem,\n inventoryItem.id,\n inventoryItem.inventoryId\n );\n missingInventory++;\n const input = { id: inventoryItem.id };\n promiseList.push(\n API.graphql(\n graphqlOperation(inventoryMutations.deleteInventoryItemMini, {\n input,\n })\n )\n );\n } else if (inventory.locationId) {\n // delete inventoryItems for old, pre-existing Inventories with location\n const input = { id: inventoryItem.id };\n promiseList.push(\n API.graphql(\n graphqlOperation(inventoryMutations.deleteInventoryItemMini, {\n input,\n })\n )\n );\n }\n }\n } catch (err) {\n logError(\"AdminDashboard:devInventoryCleanup:loop\", err, notify);\n }\n }\n\n console.log(\"total inventory missing:\", missingInventory);\n console.log(\"total lineItem missing:\", missingLineItems);\n console.log(\"total invItem missing:\", missingInvItemss);\n\n debugger;\n const response = await Promise.allSettled(promiseList);\n response.forEach((resp) => {\n if (resp.status === \"rejected\") {\n console.log(\"REJECTED: \", resp.reason);\n }\n });\n } catch (err) {\n logError(\"AdminDashboard:devInventoryCleanup\", err, notify);\n }\n notify(\"All done\");\n };\n\n const zeroAccountPhotos = async () => {\n console.clear();\n debugger;\n // set all inbound / outbound / inventoryPhotos to 0 if not present\n\n try {\n const promiseList = [];\n\n let result = await API.graphql(\n graphqlOperation(queries.listAccounts, { limit: 1000 })\n );\n const accountList = result.data.listAccounts.items;\n console.log(\"accountList\", accountList);\n\n for (const account of accountList) {\n const input = {\n ...account,\n inboundPhotos: account.inboundPhotos || 0,\n outboundPhotos: account.outboundPhotos || 0,\n inventoryPhotos: account.inventoryPhotos || 0,\n };\n\n delete input.products;\n delete input.services;\n delete input.updatedAt;\n delete input.createdAt;\n delete input.billingAddress;\n delete input.history;\n\n promiseList.push(\n API.graphql(graphqlOperation(mutations.updateAccount, { input }))\n );\n }\n\n debugger;\n const response = await Promise.allSettled(promiseList);\n const reasonMap = {};\n response.forEach((resp) => {\n if (resp.status === \"rejected\") {\n if (!reasonMap[resp.reason.errors[0].message]) {\n reasonMap[resp.reason.errors[0].message] =\n resp.reason.errors[0].message;\n console.log(\"REJECTED: \", resp);\n }\n }\n });\n } catch (err) {\n logError(\"AdminDashboard:zeroAccountPhotos\", err, notify);\n }\n notify(\"All done\");\n };\n\n const inventoryItemAddAccount = async () => {\n console.clear();\n debugger;\n // set accountId if missing on all inventoryItems\n\n const getUnloadedBy = (inventory, inventoryItem) => {\n if (inventoryItem.unloadedBy) return inventoryItem.unloadedBy;\n const unloadedHistory = inventory.history.find((itm) =>\n itm.text.includes(\"status: UNLOADED\")\n );\n if (unloadedHistory) return unloadedHistory.by;\n return undefined;\n };\n\n const getUnloadedDateTime = (inventory, inventoryItem) => {\n if (inventoryItem.unloadedDateTime) return inventoryItem.unloadedDateTime;\n const unloadedHistory = inventory.history.find((itm) =>\n itm.text.includes(\"status: UNLOADED\")\n );\n if (unloadedHistory) return unloadedHistory.date;\n if (inventory.deliveryDateTime) return inventory.deliveryDateTime;\n return undefined;\n };\n\n try {\n let nextToken = true;\n const searchInput = { limit: 500 };\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(adminQueries.listInventoryItemsDeleteMe, input)\n );\n const inventoryItemList = result.data.listInventoryItems.items;\n nextToken = result.data.listInventoryItems.nextToken;\n console.log(\"inventoryItemList\", inventoryItemList);\n\n const promiseList = [];\n for (const inventoryItem of inventoryItemList) {\n const inventory = inventoryItem.inventory;\n\n const input = {\n ...inventoryItem,\n accountId: inventoryItem.accountId\n ? inventoryItem.accountId\n : inventory.accountId,\n unloadedBy: getUnloadedBy(inventory, inventoryItem),\n unloadedDateTime: getUnloadedDateTime(inventory, inventoryItem),\n };\n\n promiseList.push(utils.saveInventoryItem(input));\n }\n\n debugger;\n const response = await Promise.allSettled(promiseList);\n const reasonMap = {};\n response.forEach((resp) => {\n if (resp.status === \"rejected\") {\n if (!reasonMap[resp.reason.errors[0].message]) {\n reasonMap[resp.reason.errors[0].message] =\n resp.reason.errors[0].message;\n console.log(\"REJECTED: \", resp);\n }\n }\n });\n }\n } catch (err) {\n logError(\"AdminDashboard:inventoryItemAddAccount\", err, notify);\n }\n notify(\"All done\");\n };\n\n const backfillLineItems = (outbound) => {\n debugger;\n const promiseList = [];\n if (outbound.shipmentLineItems?.items?.length > 0) {\n for (const lineItem of outbound.shipmentLineItems.items) {\n const toUpdateLineItem = {\n ...lineItem,\n poNumber: outbound.poNumber,\n status:\n outbound.status === OutboundStatus.RELEASED\n ? ShipmentLineItemStatus.SHIPPED\n : lineItem.status,\n };\n delete toUpdateLineItem.inventory;\n delete toUpdateLineItem.inventoryItems;\n delete toUpdateLineItem.createdAt;\n delete toUpdateLineItem.updatedAt;\n // console.log(\"toUpdateLineItem\", toUpdateLineItem)\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.updateShipmentLineItem, {\n input: toUpdateLineItem,\n })\n )\n );\n }\n }\n\n return promiseList;\n };\n\n const doBackfilOutbound = (outbound) => {\n debugger;\n const toUpdateOutbound = {\n ...outbound,\n areaId: outbound.shipmentLineItems?.items[0]?.inventory.areaId,\n zoneId: outbound.shipmentLineItems?.items[0]?.inventory.zoneId,\n reloadYardCommodityId:\n outbound.shipmentLineItems?.items[0]?.inventory.reloadYardCommodityId,\n scheduledDateTime: outbound.scheduledDateTime\n ? outbound.scheduledDateTime\n : null,\n };\n\n delete toUpdateOutbound.account;\n delete toUpdateOutbound.area;\n delete toUpdateOutbound.createdAt;\n delete toUpdateOutbound.reloadYardCommodity;\n delete toUpdateOutbound.seals;\n delete toUpdateOutbound.shipmentLineItems;\n delete toUpdateOutbound.updatedAt;\n\n // console.log(\"toUpdateOutbound\", toUpdateOutbound);\n return API.graphql(\n graphqlOperation(mutations.updateOutboundShipment, {\n input: toUpdateOutbound,\n })\n );\n };\n\n const backfillOutboundShipment = async (queryTerms) => {\n console.clear();\n console.log(queryTerms.reloadYardId);\n debugger;\n\n try {\n let nextToken = true;\n let searchInput = {\n reloadYardId: queryTerms.reloadYardId,\n limit: 50,\n };\n\n while (nextToken) {\n let promiseList = [];\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(adminQueries.outboundShipmentByStatusDeleteMe, input)\n );\n const outboundList = result.data.outboundShipmentByStatus.items;\n console.log(\"outboundList\", outboundList);\n nextToken = result.data.outboundShipmentByStatus.nextToken;\n\n for (const outbound of outboundList) {\n const promises = backfillLineItems(outbound);\n promiseList = promiseList.concat(promises);\n\n if (\n !outbound.areaId ||\n !outbound.zoneId ||\n !outbound.reloadYardCommodityId ||\n outbound.scheduledDateTime\n ) {\n promiseList.push(doBackfilOutbound(outbound));\n }\n }\n\n console.log(\"promiseList\", promiseList.length);\n const response = await Promise.allSettled(promiseList);\n debugger;\n response.forEach((resp) => {\n if (resp.status === \"rejected\") console.log(\"REJECTED: \", resp);\n });\n }\n } catch (err) {\n logError(\"AdminDashboard:backfillOutboundShipment\", err, notify);\n }\n\n notify(\"All done\");\n };\n\n const backfillProductDimensions = async (queryTerms) => {\n console.clear();\n console.log(queryTerms.reloadYardId);\n\n try {\n let nextToken = true;\n let searchInput = {\n limit: 500,\n };\n\n let totalProductsUpdated = 0;\n let failedProducts = 0;\n\n const yardResponse = await API.graphql(\n graphqlOperation(reloadYardQueries.getReloadYard, {\n id: queryTerms.reloadYardId,\n })\n );\n const yardCommodities =\n yardResponse.data.getReloadYard.yardCommodities.items;\n // console.log(\"yardCommodities\", yardCommodities)\n\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const result = await API.graphql(\n graphqlOperation(queries.listProducts, input)\n );\n\n const productList = result.data.listProducts.items;\n nextToken = result.data.listProducts.nextToken;\n\n let promiseList = [];\n let productIds = [];\n\n for (const product of productList) {\n if (product.reloadYardId === queryTerms.reloadYardId) {\n const commodity = yardCommodities.find(\n (itm) => itm.id === product.reloadYardCommodityId\n ).commodity;\n const isLumber =\n isLumberCommodity(commodity) || isPanelsCommodity(commodity);\n console.log(\"product\", product);\n console.log(\"commodity\", commodity, isLumber);\n\n if (\n isLumber &&\n (product.height || product.width || product.length)\n ) {\n const updatedProduct = {\n id: product.id,\n pcsHeight: product.height,\n pcsWidth: product.width,\n pcsLength: product.length,\n };\n\n console.log(\"updatedProduct\", updatedProduct);\n\n const promise = API.graphql(\n graphqlOperation(mutations.updateProduct, {\n input: updatedProduct,\n })\n );\n promiseList.push(promise);\n productIds.push(product.id);\n }\n }\n }\n\n const responses = await Promise.allSettled(promiseList);\n\n // **Use a regular for loop instead of responses.forEach**\n let successfulUpdates = 0;\n let failedUpdates = 0;\n\n for (let index = 0; index < responses.length; index++) {\n const resp = responses[index];\n if (resp.status === \"fulfilled\") {\n successfulUpdates++;\n } else {\n console.error(\n `Failed to update product ${productIds[index]}: `,\n resp.reason\n );\n failedUpdates++;\n }\n }\n\n totalProductsUpdated += successfulUpdates;\n failedProducts += failedUpdates;\n }\n\n console.log(\"Total Products Updated:\", totalProductsUpdated);\n console.log(\"Failed Products:\", failedProducts);\n } catch (err) {\n logError(\"AdminDashboard:backfillProductDimensions\", err, notify);\n }\n\n notify(\"All done\");\n };\n\n const devDeleteEmptyOutbounds = async (queryTerms) => {\n console.clear();\n console.log(queryTerms.reloadYardId);\n debugger;\n\n try {\n let nextToken = true;\n let searchInput = {\n reloadYardId: queryTerms.reloadYardId,\n limit: 500,\n };\n const outboundMap = {};\n\n while (nextToken) {\n let promiseList = [];\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(adminQueries.outboundShipmentByStatusDeleteMe, input)\n );\n const outboundList = result.data.outboundShipmentByStatus.items;\n console.log(\"outboundList\", outboundList);\n nextToken = result.data.outboundShipmentByStatus.nextToken;\n let count = 0;\n\n for (const outbound of outboundList) {\n outboundMap[outbound.id] = outbound;\n // if (outbound.id === \"05bd3ef9-6363-48fa-bd60-8b940147b906\") debugger;\n if (\n (!outbound.shipmentLineItems ||\n outbound.shipmentLineItems?.items?.length === 0) &&\n outbound.status === \"RELEASED\"\n ) {\n console.log(\"empty outbound\", outbound.id);\n const input = { id: outbound.id };\n count++;\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.deleteOutboundShipment, { input })\n )\n );\n }\n }\n\n console.log(\n \"empty outbounds\",\n count,\n \"good outbounds\",\n outboundList.length - count\n );\n console.log(\"promiseList\", promiseList.length);\n const response = await Promise.allSettled(promiseList);\n debugger;\n response.forEach((resp) => {\n if (resp.status === \"rejected\") console.log(\"REJECTED: \", resp);\n });\n }\n\n let promiseList = [];\n let result = await API.graphql(\n graphqlOperation(listIdQueries.listShipmentLineItemIds, {\n limit: 1000,\n })\n );\n const lineItemList = result.data.listShipmentLineItems.items.filter(\n (itm) => itm.reloadYardId === queryTerms.reloadYardId\n );\n console.log(\"lineItemList\", lineItemList);\n let count = 0;\n\n result = await API.graphql(\n graphqlOperation(listIdQueries.listInventoryIds, { limit: 1000 })\n );\n const inventoryList = result.data.listInventories.items.filter(\n (itm) => itm.reloadYardId === queryTerms.reloadYardId\n );\n console.log(\"inventoryList\", inventoryList);\n const inventoryMap = inventoryList.reduce((acc, obj) => {\n acc[obj.id] = obj;\n return acc;\n }, {});\n\n for (const lineItem of lineItemList) {\n if (!outboundMap[lineItem.outboundShipmentId]) {\n console.log(\n \"zombie line item\",\n lineItem.id,\n inventoryMap[lineItem.inventoryId]\n );\n count++;\n if (!inventoryMap[lineItem.inventoryId]) {\n const input = { id: lineItem.id };\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.deleteShipmentLineItem, { input })\n )\n );\n }\n }\n }\n\n console.log(\n \"zombie line items\",\n count,\n \"good line items\",\n lineItemList.length - count\n );\n console.log(\"promiseList\", promiseList.length);\n const response = await Promise.allSettled(promiseList);\n\n response.forEach((resp) => {\n if (resp.status === \"rejected\") console.log(\"REJECTED: \", resp);\n });\n } catch (err) {\n logError(\"AdminDashboard:deleteEmptyOutbounds\", err, notify);\n }\n notify(\"All done\");\n };\n\n const devDeleteEmptyInbounds = async (queryTerms) => {\n console.clear();\n console.log(queryTerms.reloadYardId);\n debugger;\n\n try {\n let nextToken = true;\n let searchInput = {\n reloadYardId: queryTerms.reloadYardId,\n limit: 500,\n };\n const inboundMap = {};\n\n while (nextToken) {\n let promiseList = [];\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(\n adminQueries.inboundShipmentByReloadYardByAccount,\n input\n )\n );\n const inboundList =\n result.data.inboundShipmentByReloadYardByAccount.items;\n console.log(\"inboundList\", inboundList);\n nextToken = result.data.inboundShipmentByReloadYardByAccount.nextToken;\n let count = 0;\n\n for (const inbound of inboundList) {\n inboundMap[inbound.id] = inbound;\n if (inbound.id === \"f561a451-f3ab-4357-a6cf-f61947a03194\") debugger;\n if (\n (!inbound.inventories ||\n inbound.inventories?.items?.length === 0) &&\n inbound.status === InboundStatus.RELEASED\n ) {\n console.log(\"empty inbound\", inbound.id);\n const input = { id: inbound.id };\n count++;\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.deleteInboundShipment, { input })\n )\n );\n }\n }\n\n console.log(\n \"empty inbounds\",\n count,\n \"good inbounds\",\n inboundList.length - count\n );\n console.log(\"promiseList\", promiseList.length);\n const response = await Promise.allSettled(promiseList);\n debugger;\n response.forEach((resp) => {\n if (resp.status === \"rejected\") console.log(\"REJECTED: \", resp);\n });\n }\n } catch (err) {\n logError(\"AdminDashboard:deleteEmptyOutbounds\", err, notify);\n }\n notify(\"All done\");\n };\n\n const resetLineItems = async (queryTerms) => {\n console.clear();\n console.log(queryTerms.reloadYardId);\n // no longer needed - reset quanttiy from totalQtyToPcik\n debugger;\n\n try {\n const searchInput = {\n reloadYardId: queryTerms.reloadYardId,\n limit: 1000,\n };\n let nextToken = true;\n while (nextToken) {\n let promiseList = [];\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(adminQueries.outboundShipmentByStatusDeleteMe, input)\n );\n const outboundList = result.data.outboundShipmentByStatus.items; //.filter(itm => itm !== null);\n console.log(\"outboundList\", outboundList);\n nextToken = result.data.outboundShipmentByStatus.nextToken;\n\n for (const outbound of outboundList) {\n const promiseList = [];\n if (outbound.shipmentLineItems?.items?.length > 0) {\n for (const lineItem of outbound.shipmentLineItems.items) {\n if (\n lineItem.totalQuantityToPick !== null &&\n lineItem.totalQuantityToPick !== undefined\n ) {\n const toUpdateLineItem = {\n ...lineItem,\n // quantity: lineItem.totalQuantityToPick,\n };\n delete toUpdateLineItem.inventory;\n delete toUpdateLineItem.inventoryItems;\n delete toUpdateLineItem.createdAt;\n delete toUpdateLineItem.updatedAt;\n\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.updateShipmentLineItem, {\n input: toUpdateLineItem,\n })\n )\n );\n }\n }\n }\n }\n\n const response = await Promise.allSettled(promiseList);\n debugger;\n response.forEach((resp) => {\n if (resp.status === \"rejected\") console.log(\"REJECTED: \", resp);\n });\n }\n } catch (err) {\n logError(\"AdminDashboard:resetLineItems\", err, notify);\n }\n notify(\"All done\");\n };\n\n const fixAisleList = async (queryTerms) => {\n console.clear();\n console.log(queryTerms.reloadYardId);\n debugger;\n // reset inventory.aisleList from inventoryItems\n\n try {\n let searchInput = {\n filter: {\n reloadYardId: { eq: queryTerms.reloadYardId },\n },\n limit: 250,\n };\n\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const result = await API.graphql(\n graphqlOperation(adminQueries.searchInventorysBackfill, input)\n );\n const inventoryList = result.data.searchInventorys.items;\n nextToken = result.data.searchInventorys.nextToken;\n console.log(\"inventoryList\", inventoryList);\n\n let promiseList = inventoryList.map((inventory) => {\n const toUpdateInventory = {\n id: inventory.id,\n aisleList: setInventoryAisleList(inventory),\n };\n // console.log(\"toUpdateInventory\", toUpdateInventory);\n return API.graphql(\n graphqlOperation(inventoryMutations.updateAuditInventorie, {\n input: toUpdateInventory,\n })\n );\n });\n\n console.log(\"promiseList\", promiseList.length);\n const response = await Promise.allSettled(promiseList);\n debugger;\n response.forEach((resp) => {\n if (resp.status === \"rejected\") console.log(\"REJECTED: \", resp);\n });\n }\n } catch (err) {\n logError(\"AdminDashboard:fixAisleList\", err, notify);\n }\n notify(\"All done\");\n };\n\n const devFixLocations = async (queryTerms) => {\n console.clear();\n try {\n let promiseList = [];\n\n let results = await API.graphql(\n graphqlOperation(queries.listAreas, { limit: 1000 })\n );\n const areas = results.data.listAreas.items;\n console.log(\"areas:\", areas);\n\n results = await API.graphql(\n graphqlOperation(queries.listZones, { limit: 1000 })\n );\n const zones = results.data.listZones.items;\n console.log(\"zones:\", zones);\n\n results = await API.graphql(\n graphqlOperation(queries.listAisles, { limit: 1000 })\n );\n const aisles = results.data.listAisles.items;\n console.log(\"aisles:\", aisles);\n\n results = await API.graphql(\n graphqlOperation(listIdQueries.listLocationIds, { limit: 1000 })\n );\n let locations = results.data.listLocations.items;\n console.log(\"Locations:\", locations);\n\n // for (const location of locations) {\n // \tlet area = areas.find(itm => itm.id === location.areaId);\n // \tlet zone = zones.find(itm => itm.id === location.zoneId);\n // \tlet aisle = aisles.find(itm => itm.id === location.aisleId);\n\n // \tif (!area) {\n // \t\tconst recordToDelete = {\n // \t\t\t...location\n // \t\t};\n // \t\tconsole.log(\"missing area:\", recordToDelete, recordToDelete.id);\n // \t\t// promiseList.push(dataProvider.delete(\"locations\", { data: recordToDelete }));\n // \t}\n // \tif (!zone) {\n // \t\tconst recordToDelete = {\n // \t\t\t...location\n // \t\t};\n // \t\tconsole.log(\"missing zone:\", recordToDelete, recordToDelete.id);\n // \t\t// promiseList.push(dataProvider.delete(\"locations\", { data: recordToDelete }));\n // \t}\n // \tif (!aisle) {\n // \t\tconst recordToDelete = {\n // \t\t\t...location\n // \t\t};\n // \t\tconsole.log(\"missing aisle:\", recordToDelete, recordToDelete.id);\n // \t\t// promiseList.push(dataProvider.delete(\"locations\", { data: recordToDelete }));\n // \t}\n // }\n\n results = await API.graphql(\n graphqlOperation(listIdQueries.listInventoryIds, { limit: 1000 })\n );\n const inventories = results.data.listInventories.items.filter(\n (itm) => itm.locationId\n );\n console.log(\"inventories:\", inventories);\n const inventoryMap = inventories.reduce((acc, obj) => {\n acc[obj.id] = obj;\n return acc;\n }, {});\n\n results = await API.graphql(\n graphqlOperation(queries.listLocations, { limit: 1000 })\n );\n locations = results.data.listLocations.items;\n console.log(\"Locations:\", locations);\n\n for (const inv of inventories) {\n let inventory = inventoryMap[inv.id];\n\n let area = areas.find(\n (itm) =>\n itm.id === inventory.areaId &&\n itm.reloadYardId === inventory.reloadYardId\n );\n let location = locations.find(\n (itm) =>\n itm.id === inventory.locationId &&\n itm.reloadYardId === inventory.reloadYardId\n );\n\n if (!area) {\n console.log(\"missing area:\", inventory, inventory.id);\n const matchingArea = areas.find(\n (area) => area.reloadYardId === inventory.reloadYardId\n );\n\n if (matchingArea) {\n try {\n const record = await dataProvider.getOne(\"inventories\", {\n id: inventory.id,\n });\n\n const input = {\n ...record.data,\n areaId: matchingArea.id,\n };\n\n await utils.saveInventory(input);\n inventoryMap[inv.id] = input;\n inventory = input;\n } catch (error) {\n console.error(\n \"There was an error fetching the inventory:\",\n error.errors\n );\n if (error.errors.length > 1) {\n console.log(\"deleting inventory:\", inventory, inventory.id);\n const input = { id: inventory.id };\n await API.graphql(\n graphqlOperation(inventoryMutations.deleteInventorieMini, {\n input,\n })\n );\n }\n }\n }\n }\n\n let zone = zones.find(\n (itm) =>\n itm.id === inventory.zoneId &&\n itm.reloadYardId === inventory.reloadYardId\n );\n let matchingZone = null;\n\n if (!zone || zone.areaId !== inventory.areaId) {\n console.log(\"missing zone:\", inventory, inventory.id);\n if (!location)\n matchingZone = zones.find(\n (itm) =>\n itm.reloadYardId === inventory.reloadYardId &&\n itm.areaId === inventory.areaId\n );\n else matchingZone = location.zone;\n }\n // else if () {\n // \tconsole.log(\"zone area mismatch:\", inventory, inventory.id);\n // \tmatchingZone = zones.find(zone => zone.reloadYardId === inventory.reloadYardId && zone.areaId === inventory.areaId);\n // }\n\n if (matchingZone !== null && matchingZone?.id) {\n try {\n const record = await dataProvider.getOne(\"inventories\", {\n id: inventory.id,\n });\n\n const input = {\n ...record.data,\n areaId: matchingZone.areaId,\n zoneId: matchingZone.id,\n };\n\n console.log(\"updateing zone\", input);\n await utils.saveInventory(input);\n inventoryMap[inv.id] = input;\n inventory = input;\n } catch (error) {\n console.error(\n \"There was an error fetching the inventory:\",\n error.errors\n );\n if (error.errors.length > 1) {\n console.log(\"deleting inventory:\", inventory, inventory.id);\n const input = { id: inventory.id };\n // await API.graphql(graphqlOperation(inventoryMutations.deleteInventorieMini, { input }));\n }\n }\n } else if (matchingZone !== null) console.log(\"no zone match found.\");\n\n if (inventory.aisleId || inventory.locationId) {\n let aisle = aisles.find(\n (itm) =>\n itm.id === inventory.aisleId &&\n itm.reloadYardId === inventory.reloadYardId\n );\n let matchingAisle = null;\n\n if (\n !aisle ||\n aisle.areaId !== inventory.areaId ||\n aisle.zoneId !== inventory.zoneId ||\n aisle.areaId !== inventory.areaId\n ) {\n debugger;\n console.log(\"missing aisle:\", inventory, inventory.id);\n if (!location) {\n matchingAisle = aisles.find(\n (itm) =>\n itm.reloadYardId === inventory.reloadYardId &&\n itm.areaId === inventory.areaId &&\n itm.zoneId === inventory.zoneId\n );\n } else matchingAisle = location.aisle;\n }\n // else if (aisle.areaId !== inventory.areaId || aisle.zoneId !== inventory.zoneId || aisle.areaId !== inventory.areaId) {\n // \tconsole.log(\"aisle zone area mismatch:\", inventory, inventory.id);\n // \tmatchingAisle = aisles.find(aisle => aisle.reloadYardId === inventory.reloadYardId && aisle.areaId === inventory.areaId && aisle.zoneId === inventory.zoneId);\n // }\n\n if (matchingAisle !== null && matchingAisle?.id) {\n try {\n const record = await dataProvider.getOne(\"inventories\", {\n id: inventory.id,\n });\n\n const input = {\n ...record.data,\n areaId: matchingAisle.areaId,\n zoneId: matchingAisle.zoneId,\n aisleId: matchingAisle.id,\n };\n\n console.log(\"updateing aisle\", input);\n await utils.saveInventory(input);\n inventoryMap[inv.id] = input;\n inventory = input;\n } catch (error) {\n console.error(\n \"There was an error fetching the inventory:\",\n error.errors\n );\n if (error.errors.length > 1) {\n console.log(\"deleting inventory:\", inventory, inventory.id);\n const input = { id: inventory.id };\n // await API.graphql(graphqlOperation(inventoryMutations.deleteInventorieMini, { input }));\n }\n }\n } else if (matchingZone !== null) {\n console.log(\"no aisle match found - delete inventory\");\n const input = { id: inventory.id };\n // await API.graphql(graphqlOperation(inventoryMutations.deleteInventorieMini, { input }));\n }\n\n let matchingLocation = null;\n\n if (\n !location ||\n location.areaId !== inventory.areaId ||\n location.zoneId !== inventory.zoneId ||\n location.aisleId !== inventory.aisleId\n ) {\n debugger;\n console.log(\"missing location:\", inventory, inventory.id);\n matchingLocation = locations.find(\n (itm) =>\n itm.reloadYardId === inventory.reloadYardId &&\n itm.areaId !== inventory.areaId &&\n itm.zoneId !== inventory.zoneId &&\n itm.aisleId !== inventory.aisleId\n );\n }\n // else if (location.areaId !== inventory.areaId || location.zoneId !== inventory.zoneId || location.aisleId !== inventory.aisleId) {\n // \tconsole.log(\"location aisle zone area mismatch:\", inventory, inventory.id);\n // \tmatchingLocation = locations.find(itm => itm.reloadYardId === inventory.reloadYardId && itm.areaId === inventory.areaId && itm.zoneId === inventory.zoneId && itm.aisleId === inventory.aisleId);\n // }\n\n if (matchingLocation !== null && matchingLocation?.id) {\n try {\n const record = await dataProvider.getOne(\"inventories\", {\n id: inventory.id,\n });\n\n const input = {\n ...record.data,\n areaId: matchingLocation.areaId,\n zoneId: matchingLocation.zoneId,\n aisleId: matchingLocation.aisleId,\n locationId: matchingLocation.id,\n locationFullName: getLocationFullName(matchingLocation),\n };\n\n console.log(\"updateing location\", input);\n await utils.saveInventory(input);\n inventoryMap[inv.id] = input;\n inventory = input;\n } catch (error) {\n console.error(\n \"There was an error fetching the inventory:\",\n error.errors\n );\n if (error.errors.length > 1) {\n console.log(\"deleting inventory:\", inventory, inventory.id);\n const input = { id: inventory.id };\n // await API.graphql(graphqlOperation(inventoryMutations.deleteInventorieMini, { input }));\n }\n }\n } else if (matchingLocation !== null) {\n console.log(\"no location match found - delete inventory\");\n const input = { id: inventory.id };\n // await API.graphql(graphqlOperation(inventoryMutations.deleteInventorieMini, { input }));\n }\n }\n }\n\n results = await Promise.allSettled(promiseList);\n results.forEach((resp) => {\n if (resp.status === \"rejected\") console.log(resp.reason);\n });\n debugger;\n\n console.log(\"done\");\n notify(\"All done\");\n } catch (error) {\n logError(\"AdminDashboard:devDeleteInvalidLocations\", error, notify);\n }\n };\n\n const invoices_Backfill_Numbers = async (queryTerms) => {\n console.clear();\n try {\n let response = await dataProvider.getList(\"invoices\", {\n filter: {},\n // filter: {reloadYardId: {eq: queryTerms.reloadYardId}},\n pagination: { page: 1, perPage: 1000 },\n sort: { field: \"id\", order: \"ASC\" },\n });\n const invoices = response.data;\n console.log(\"invoices:\", invoices);\n\n let promiseList = [];\n invoices.forEach((record, idx) => {\n const invoiceToUpdate = {\n ...record,\n railCarNumber:\n record.inboundShipment?.railCarNumber ||\n record.outboundShipment?.railCarNumber,\n pickupNumber: record.outboundShipment?.pickupNumber,\n };\n delete invoiceToUpdate.account;\n delete invoiceToUpdate.lineItems;\n delete invoiceToUpdate.reloadYard;\n delete invoiceToUpdate.inboundShipment;\n delete invoiceToUpdate.outboundShipment;\n\n promiseList.push(\n dataProvider.update(\"invoices\", { data: invoiceToUpdate })\n );\n });\n\n const results = await Promise.allSettled(promiseList);\n debugger;\n results.forEach((resp) => {\n if (resp.status === \"rejected\") console.log(\"ERROR:\", resp);\n });\n\n console.log(\"done\");\n notify(\"All done\");\n } catch (error) {\n logError(\"AdminDashboard:invoices_Backfill_Numbers\", error, notify);\n }\n };\n\n const run_Aisle_Location_Backfill = async (queryTerms) => {\n // convert UNSTRUCTURED to STRUCUTED.other + calc aisle.capacityUsed\n console.clear();\n try {\n let locationList = [];\n const aisleMap = {};\n let searchInput = {\n reloadYardId: queryTerms.reloadYardId,\n limit: 1000,\n };\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(adminQueries.locationBySortKey, input)\n );\n const locations = result.data.locationBySortKey.items;\n locationList = locationList.concat(locations);\n nextToken = result.data.locationBySortKey.nextToken;\n }\n console.log(\"locationList\", locationList);\n\n debugger;\n let promiseList = [];\n locationList.forEach((location) => {\n const aisle = aisleMap[location.aisleId];\n if (aisle) {\n aisle.count = aisle.count + 1;\n aisle.totalCapacityUsed =\n aisle.totalCapacityUsed + location.capacityUsed;\n } else {\n aisleMap[location.aisleId] = location.aisle;\n }\n\n if (location.type === LocationType.UNSTRUCTURED) {\n const locationToUpdate = {\n ...location,\n bay: 1,\n level: 1,\n position: 1,\n locationLoad: {\n other: { selected: true },\n pallet: { selected: false },\n box: { selected: false },\n container: { selected: false },\n superSack: { selected: false },\n },\n // productId: ???\n };\n promiseList.push(\n dataProvider.update(\"locations\", { data: locationToUpdate })\n );\n }\n });\n\n const aisleList = Object.values(aisleMap);\n aisleList.forEach((aisle) => {\n const totalLocations = aisle.count;\n const totalCapacityUsed = aisle.totalCapacityUsed;\n const capacityUsed = totalCapacityUsed / totalLocations;\n\n const aisleToUpdate = {\n ...aisle,\n totalLocations: totalLocations,\n capacityUsed: capacityUsed,\n };\n promiseList.push(\n dataProvider.update(\"aisles\", { data: aisleToUpdate })\n );\n });\n const results = await Promise.allSettled(promiseList);\n results.forEach((resp) => {\n if (resp.status === \"rejected\") console.log(resp);\n });\n debugger;\n console.log(\"done\");\n notify(\"All done\");\n } catch (error) {\n logError(\"AdminDashboard:run_Aisle_Location_Backfill\", error, notify);\n }\n };\n\n const helpPagesMigration = async () => {\n try {\n const res = await API.post(\"transREST\", \"/importHelpPages\");\n notify(\n `Help Pages Imported, created ${res.numberRowsCreate} new help pages and updated ${res.numberRowsUpdate} help pages`\n );\n console.log(`Created ${res.numberRowsCreate} new help pages`);\n console.log(`Updated ${res.numberRowsUpdate} help pages`);\n } catch (err) {\n logError(\"AdminDashboard:helpPagesMigration\", err, notify);\n }\n };\n\n const fixInventoryDateTime = async (queryTerms) => {\n console.clear();\n // fix deliveryDateTime = \"\"\n // update query : comment out deliveryDateTime\n debugger;\n\n try {\n // update query : comment out deliveryDateTime\n let searchInput = {\n reloadYardId: queryTerms.reloadYardId,\n statusLotNumber: {\n beginsWith: { status: InventoryStatus.IN_TRANSIT },\n },\n limit: 250,\n };\n\n let nextToken = true;\n while (nextToken) {\n let promiseList = [];\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n\n // update query : comment out deliveryDateTime\n const result = await API.graphql(\n graphqlOperation(queries.inventoryByStatusByLot, input)\n );\n let inventoryList = result.data.inventoryByStatusByLot.items;\n console.log(\"inventoryList\", inventoryList);\n nextToken = result.data.inventoryByStatusByLot.nextToken;\n\n for (const inventory of inventoryList) {\n if (!inventory.deliveryDateTime) {\n inventory.deliveryDateTime = null;\n promiseList.push(utils.saveInventory(inventory));\n }\n }\n\n console.log(\"promiseList\", promiseList.length);\n const response = await Promise.allSettled(promiseList);\n\n response.some((resp) => {\n if (resp.status === \"rejected\") {\n console.log(\"REJECTED: \", resp.reason);\n }\n return false;\n });\n }\n } catch (err) {\n logError(\"AdminDashboard:fixInventoryDatTime\", err, notify);\n }\n\n notify(\"All done\");\n };\n\n const fixNegativeInvQty = async () => {\n console.clear();\n // fix incorrect inv + invItm qtys\n debugger;\n let totalInv = 0;\n let totalPromises = 0;\n\n try {\n const searchInput = { limit: 100 };\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(adminQueries.listInventories, input)\n );\n const inventoryList = result.data.listInventories.items;\n nextToken = result.data.listInventories.nextToken;\n // console.log(\"inventoryList\", inventoryList.length);\n totalInv += inventoryList.length;\n\n // Initialize the promise list inside the loop to handle batches\n let promiseList = [];\n\n for (const inventory of inventoryList) {\n if (\n !inventory.hasException &&\n (inventory.status === \"STORED\" ||\n inventory.inboundShipment.status === \"RELEASED\") &&\n inventory.status !== \"AGGREGATED\" &&\n inventory.reloadYardId !== \"1229f609-e391-4641-9c5c-53e73f4d0c6d\" && // mdyard\n inventory.reloadYardId !== \"3404db3b-775d-44a9-a445-2551f04a5eb6\" // HDM\n ) {\n let totalShipped = 0;\n let totalCommitted = 0;\n\n // Flag to check if inventory needs updating\n let inventoryNeedsUpdate = false;\n\n // **Iterate over inventory.history to check for specific pattern**\n const historyNotes = inventory.history || [];\n for (const note of historyNotes) {\n const text = note.text || \"\";\n // Regular expression to match \"Qty. OnHand Changed from * to *\"\n const regex = /Qty\\. OnHand Changed from\\s*(.+)\\s*to\\s*(.+)/;\n const match = regex.exec(text);\n if (match && !inventory.hasException) {\n console.log(\"Add Exception\", inventory.id, text);\n inventory.hasException = true;\n inventory.otherException = true;\n inventory.otherExceptionNote = text;\n inventoryNeedsUpdate = true;\n }\n }\n\n // Process ShipmentLineItems for the current inventory\n const shipmentLineItems = inventory.shipmentLineItems?.items || [];\n\n if (!inventory.hasException) {\n for (const shipmentLineItem of shipmentLineItems) {\n if (shipmentLineItem.status === \"SHIPPED\") {\n totalShipped += shipmentLineItem.totalQuantityToPick || 0;\n } else {\n totalCommitted += shipmentLineItem.totalQuantityToPick || 0;\n }\n }\n\n // Calculate expected quantities\n const expectedQuantityOnHand = trimDecimal(\n (inventory.quantityDelivered || 0) - totalShipped\n );\n const expectedQuantityCommitted = totalCommitted;\n\n // Update inventory.quantityOnHand if there's a discrepancy\n if (\n inventory.quantityOnHand !== expectedQuantityOnHand &&\n expectedQuantityOnHand >= 0\n ) {\n console.log(\n \"saveInventory onHand\",\n inventory.id,\n inventory.quantityOnHand,\n expectedQuantityOnHand\n );\n inventory.quantityOnHand = expectedQuantityOnHand;\n if (inventory.quantityOnHand === 0) {\n inventory.status = \"SHIPPED\";\n }\n inventoryNeedsUpdate = true;\n }\n\n // Update inventory.quantityCommitted if there's a discrepancy\n if (\n inventory.quantityCommitted !== expectedQuantityCommitted &&\n expectedQuantityCommitted >= 0\n ) {\n console.log(\n \"saveInventory committed\",\n inventory.id,\n inventory.quantityCommitted,\n expectedQuantityCommitted\n );\n inventory.quantityCommitted = trimDecimal(\n expectedQuantityCommitted\n );\n inventoryNeedsUpdate = true;\n }\n }\n\n // If updates are needed, save the inventory\n if (inventoryNeedsUpdate) {\n totalPromises++;\n promiseList.push(utils.saveInventory(inventory));\n }\n\n // Process InventoryItems for the current inventory\n const inventoryItems = inventory.inventoryItems?.items || [];\n for (const inventoryItem of inventoryItems) {\n if (\n !inventoryItem.hasException &&\n inventoryItem.quantityCommitted !== null\n ) {\n let itemQuantityCommitted = 0;\n\n // For each ShipmentLineItem, find matching ShipmentLineItemInventoryItems\n for (const shipmentLineItem of shipmentLineItems) {\n const sliInventoryItems =\n shipmentLineItem.inventoryItems?.items || [];\n for (const sliInvItem of sliInventoryItems) {\n if (\n sliInvItem.inventoryItemId === inventoryItem.id &&\n sliInvItem.status !== \"SHIPPED\"\n ) {\n itemQuantityCommitted += sliInvItem.quantityToPick || 0;\n }\n }\n }\n\n // Update inventoryItem.quantityCommitted if there's a discrepancy\n if (\n inventoryItem.quantityCommitted !== itemQuantityCommitted &&\n itemQuantityCommitted >= 0\n ) {\n console.log(\n \"saveInventoryItem\",\n inventoryItem.id,\n inventoryItem.quantityCommitted,\n itemQuantityCommitted\n );\n inventoryItem.quantityCommitted = trimDecimal(\n itemQuantityCommitted\n );\n totalPromises++;\n promiseList.push(utils.saveInventoryItem(inventoryItem));\n }\n }\n }\n }\n }\n\n // console.log(\"promiseList\", promiseList.length);\n const response = await Promise.allSettled(promiseList);\n\n response.forEach((resp) => {\n if (resp.status === \"rejected\") {\n console.log(\"REJECTED: \", resp.reason);\n }\n });\n }\n\n console.log(\"totalInv\", totalInv);\n console.log(\"totalPromises\", totalPromises);\n } catch (err) {\n logError(\"AdminDashboard:fixInventoryDatTime\", err, notify);\n }\n\n notify(\"All done\");\n };\n\n const addBillingBusinessName = async () => {\n console.clear();\n debugger;\n\n try {\n const searchInput = { limit: 100 };\n let nextToken = true;\n\n while (nextToken) {\n // Prepare input for the GraphQL query\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n\n // Fetch a batch of acceounts\n let result = await API.graphql(\n graphqlOperation(queries.listAccounts, input)\n );\n const accountList = result.data.listAccounts.items;\n nextToken = result.data.listAccounts.nextToken;\n console.log(\"Fetched acceounts:\", accountList.length);\n\n // Initialize the promise list and acceounts to update list for the current batch\n let promiseList = [];\n let accountsToUpdate = [];\n\n for (const account of accountList) {\n const updatedAccount = {\n id: account.id,\n billingAddress: {\n ...account.billingAddress,\n name: account.businessName,\n },\n };\n delete updatedAccount.createdAt;\n delete updatedAccount.updatedAt;\n\n // Push the mutation promise to the list\n promiseList.push(\n API.graphql(\n graphqlOperation(mutations.updateAccount, {\n input: updatedAccount,\n })\n )\n );\n accountsToUpdate.push(account); // Keep track of which acceounts corresponds to which promise\n }\n\n console.log(\"Accounts to Update:\", promiseList.length);\n\n if (promiseList.length > 0) {\n // Execute all update mutations for the current batch\n const responses = await Promise.allSettled(promiseList);\n\n const failedUpdates = [];\n\n responses.forEach((resp, index) => {\n const account = accountsToUpdate[index];\n if (resp.status === \"rejected\") {\n console.error(\n `Failed to update account ${account.id}:`,\n resp.reason\n );\n failedUpdates.push({\n accountId: account.id,\n reason: resp.reason,\n });\n } else {\n // Assuming the mutation returns the updated acceount in resp.value.data.updateAccount\n console.log(\n `Successfully updated account ${resp.value.data.updateAccount}`\n );\n }\n });\n\n if (failedUpdates.length > 0) {\n console.warn(\"Some account updates failed:\", failedUpdates);\n // Optionally, implement retry logic or notify administrators\n // Example: await retryFailedUpdates(failedUpdates);\n }\n }\n }\n\n console.log(\"All account processed.\");\n } catch (err) {\n logError(\"AdminDashboard:addBillingBusinessName\", err, notify);\n }\n\n notify(\"All done\");\n };\n\n const addUserACL = async () => {\n console.clear();\n // Add OUTBOUND_SIGN ACL to eligible users\n debugger;\n\n try {\n const searchInput = { limit: 100 };\n let nextToken = true;\n\n while (nextToken) {\n // Prepare input for the GraphQL query\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n\n // Fetch a batch of users\n let result = await API.graphql(\n graphqlOperation(queries.listUsers, input)\n );\n const userList = result.data.listUsers.items;\n nextToken = result.data.listUsers.nextToken;\n console.log(\"Fetched Users:\", userList.length);\n\n // Initialize the promise list and users to update list for the current batch\n let promiseList = [];\n let usersToUpdate = [];\n\n for (const user of userList) {\n const isEligibleType =\n user.type === UserType.SUPERVISOR || user.type === UserType.CREW;\n const hasNoOutboundSignACL =\n !Array.isArray(user.acl) ||\n !user.acl.includes(AclType.OUTBOUND_SIGN);\n const isActive = user.active === \"true\";\n\n if (isEligibleType && hasNoOutboundSignACL && isActive) {\n // Create a new user object with updated ACL\n const updatedUser = {\n ...user,\n acl: Array.isArray(user.acl)\n ? [...user.acl, AclType.OUTBOUND_SIGN]\n : [AclType.OUTBOUND_SIGN],\n // Include necessary fields for the mutation\n id: user.id,\n // If using optimistic locking with versions, include the 'version' field\n // version: user.version,\n };\n delete updatedUser.createdAt;\n delete updatedUser.updatedAt;\n\n // Push the mutation promise to the list\n promiseList.push(\n API.graphql(\n graphqlOperation(updateUserMini, { input: updatedUser })\n )\n );\n usersToUpdate.push(user); // Keep track of which user corresponds to which promise\n }\n }\n\n console.log(\"Users to Update:\", promiseList.length);\n\n if (promiseList.length > 0) {\n // Execute all update mutations for the current batch\n const responses = await Promise.allSettled(promiseList);\n\n const failedUpdates = [];\n\n responses.forEach((resp, index) => {\n const user = usersToUpdate[index];\n if (resp.status === \"rejected\") {\n console.error(`Failed to update user ${user.id}:`, resp.reason);\n failedUpdates.push({\n userId: user.id,\n reason: resp.reason,\n });\n } else {\n // Assuming the mutation returns the updated user in resp.value.data.updateUser\n console.log(\n `Successfully updated user ${resp.value.data.updateUser}`\n );\n }\n });\n\n if (failedUpdates.length > 0) {\n console.warn(\"Some user updates failed:\", failedUpdates);\n // Optionally, implement retry logic or notify administrators\n // Example: await retryFailedUpdates(failedUpdates);\n }\n }\n }\n\n console.log(\"All users processed.\");\n } catch (err) {\n logError(\"AdminDashboard:addUserACL\", err, notify);\n }\n\n notify(\"All done\");\n };\n\n const dataIntegridyAudit = async () => {\n console.clear();\n\n try {\n const inventoryIds = new Set(); // Initialize a new Set to store inventory IDs\n let inboundIds = new Set(); // Initialize a new Set to store inventory IDs\n\n let searchInput = { limit: 500 };\n let nextToken = true;\n\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const result = await API.graphql(\n graphqlOperation(listIdQueries.listInboundShipmentIds, input)\n );\n const inboundList = result.data.listInboundShipments.items;\n nextToken = result.data.listInboundShipments.nextToken;\n console.log(\"inboundList\", inboundList.length);\n\n for (let i = 0; i < inboundList.length; i++) {\n const id = inboundList[i].id;\n inboundIds.add(id);\n }\n }\n\n searchInput = { limit: 250 };\n nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const result = await API.graphql(\n graphqlOperation(listIdQueries.listInventoryIds, input)\n );\n const inventoryList = result.data.listInventories.items;\n nextToken = result.data.listInventories.nextToken;\n console.log(\"inventoryList\", inventoryList.length);\n\n for (let i = 0; i < inventoryList.length; i++) {\n const id = inventoryList[i].id;\n inventoryIds.add(id);\n\n const inboundId = inventoryList[i].inboundShipmentId;\n if (!inboundIds.has(inboundId)) {\n console.log(\n \"missing inbound - inventoryId:\",\n id,\n \"inboundId:\",\n inboundId\n );\n }\n }\n }\n inboundIds = null; // clear memeory\n\n searchInput = { limit: 500 };\n nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const result = await API.graphql(\n graphqlOperation(listIdQueries.listShipmentLineItemIds, input)\n );\n const shipmentLineItemsList = result.data.listShipmentLineItems.items;\n nextToken = result.data.listShipmentLineItems.nextToken;\n // console.log(\"shipmentLineItemsList\", shipmentLineItemsList.length);\n\n for (let i = 0; i < shipmentLineItemsList.length; i++) {\n const id = shipmentLineItemsList[i].id;\n const inventoryId = shipmentLineItemsList[i].inventoryId;\n if (!inventoryIds.has(inventoryId)) {\n console.log(\n \"missing inventory - shipmentLineItemId:\",\n id,\n \"inventoryId:\",\n inventoryId\n );\n }\n }\n }\n\n console.log(\"done\");\n notify(\"All done\");\n } catch (error) {\n logError(\"AdminDashboard:dataIntegridyAudit\", error, notify);\n }\n };\n\n const fixProductCode = async () => {\n console.clear();\n\n try {\n const performUpdates = false; // Flag to control whether updates should be performed\n const accountList = [];\n const productList = [];\n const productsToUpdate = []; // Products needing product code updates only\n const productsToMerge = []; // Products requiring merging\n const alteredCodes = new Map(); // Map to track base product codes by accountId\n const atsYardId = \"18567be7-5e38-4a33-b947-f380620326c1\";\n\n // Stage 1: Fetch Accounts\n console.log(\"Fetching accounts...\");\n let searchInput = { limit: 500 };\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const result = await API.graphql(\n graphqlOperation(queries.listAccounts, input)\n );\n\n const filteredAccounts = result.data.listAccounts.items.filter(\n (itm) => itm.reloadYardId === atsYardId\n );\n accountList.push(...filteredAccounts);\n nextToken = result.data.listAccounts.nextToken;\n }\n console.log(\"Accounts fetched:\", accountList.length);\n\n // Stage 2: Fetch and Evaluate Products\n console.log(\"Fetching and evaluating products...\");\n searchInput = { limit: 500 };\n nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const result = await API.graphql(\n graphqlOperation(adminQueries.listProducts, input)\n );\n console.log(\"products fetched:\", result.data.listProducts.items.length);\n\n const filteredProducts = result.data.listProducts.items.filter(\n (itm) => itm.reloadYardId === atsYardId && itm.active === \"true\"\n );\n productList.push(...filteredProducts);\n nextToken = result.data.listProducts.nextToken;\n console.log(\"filtered products\", filteredProducts.length);\n\n for (const product of filteredProducts) {\n const { id, active, productCode, name, accountId, customFields } =\n product;\n const accountName = accountList.find(\n (itm) => itm.id === accountId\n )?.businessName;\n\n const match = productCode.match(/^(.*?)(?=-[a-zA-Z]+$)/);\n const baseProductCode = match ? match[1] : null;\n\n // Ensure alteredCodes map is account-specific\n if (!alteredCodes.has(accountId)) {\n alteredCodes.set(accountId, new Map());\n }\n const accountAlteredCodes = alteredCodes.get(accountId);\n\n if (baseProductCode) {\n if (accountAlteredCodes.has(baseProductCode)) {\n // A duplicate would be created within the same account\n const baseProductId = accountAlteredCodes.get(baseProductCode);\n // console.log(\n // `Merge detected: ${id} ${productCode} to ${baseProductId} ${baseProductCode} in ${accountName}`\n // );\n // console.log(\"customFields\", customFields);\n productsToMerge.push({\n accountName,\n accountId,\n id,\n active,\n productCode,\n baseProductId, // new product\n baseProductCode, // new product\n name,\n customFields: customFields?.length > 0 ? customFields[0] : null,\n });\n } else {\n // Track the base product code and add to update list\n accountAlteredCodes.set(baseProductCode, id);\n productsToUpdate.push({\n accountName,\n accountId,\n id,\n active,\n productCode,\n baseProductId: id,\n baseProductCode,\n name,\n customFields: customFields?.length > 0 ? customFields[0] : null,\n });\n }\n } else {\n // No suffix, no updates needed\n accountAlteredCodes.set(productCode, id);\n }\n }\n }\n\n console.log(\"Products evaluated:\");\n\n // Display alteredCodes in a legible format\n // console.log(\"Altered Codes Map:\");\n // alteredCodes.forEach((codesMap, accountId) => {\n // console.log(`Account ID: ${accountId}`);\n // console.table(\n // Array.from(codesMap.entries()).map(\n // ([baseProductCode, productId]) => ({\n // baseProductCode,\n // productId,\n // })\n // )\n // );\n // });\n\n console.log(\n \"Products to update (no merge required):\",\n productsToUpdate.length\n );\n console.log(\"Products to merge:\", productsToMerge.length);\n\n // Stage 3: Display Duplicates and Prepare Updates\n if (productsToMerge.length > 0) {\n console.log(\"Products requiring merging:\");\n console.table(productsToMerge);\n }\n if (productsToUpdate.length > 0) {\n console.log(\"Products requiring code updates:\");\n console.table(productsToUpdate);\n }\n\n if (!performUpdates) {\n console.log(\n \"Updates skipped. Set `performUpdates = true` to enable updates.\"\n );\n return;\n }\n\n // Stage 4: Execute Updates\n console.log(\"Executing updates...\");\n\n // Step 1: Update product codes for products without merging\n for (const product of productsToUpdate) {\n await updateInventories(\n product.id, // old product\n product.productCode,\n product.id, // new product\n product.baseProductCode\n );\n\n // update the old product\n await updateProductCode(product);\n }\n\n console.log(\"# # # # # # # # # # # # # # # # # # # #\");\n console.log(\"...\");\n console.log(\"Executing merges...\");\n console.log(\"...\");\n console.log(\"# # # # # # # # # # # # # # # # # # # #\");\n\n // Step 2: Handle merges for duplicate products\n for (const product of productsToMerge) {\n const { id, productCode, baseProductId, baseProductCode } = product;\n\n // Link inventories to the new product\n await updateInventories(\n id, // old product\n productCode,\n baseProductId, // new product\n baseProductCode\n );\n\n // update the new product\n await updateProductCode(product);\n\n // Delete the duplicate old product\n await deleteProduct(\n id, // old product\n productCode\n );\n }\n\n console.log(\"Products and inventories updated successfully.\");\n notify(\"All done\");\n } catch (error) {\n logError(\"AdminDashboard:dataIntegrityAudit\", error, notify);\n }\n };\n\n // Helper function to update inventories linked to a product\n const updateInventories = async (\n oldProductId,\n oldProductCode,\n newProductId,\n newProductCode\n ) => {\n try {\n // console.log(\n // \"updateInventories:\",\n // oldProductId,\n // oldProductCode,\n // newProductId,\n // newProductCode\n // );\n\n const searchInput = {\n filter: { productId: { eq: oldProductId } },\n limit: 250,\n };\n let nextToken = true;\n\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const result = await API.graphql(\n graphqlOperation(adminQueries.searchInventorysBackfill, input)\n );\n const inventoryList = result.data.searchInventorys.items;\n nextToken = result.data.searchInventorys.nextToken;\n\n console.log(\"inventoryList:\", inventoryList);\n\n let updatePromises = [];\n updatePromises = inventoryList.map((inventory) => {\n console.log(\n `Update Inventory from old product ID ${inventory.productId}, ${inventory.productCode} to new ${newProductId} ${newProductCode}`\n );\n\n inventory.productId = newProductId;\n inventory.productCode = newProductCode;\n return utils.saveInventory(inventory); // Save updated inventory\n });\n\n // inventoryList.forEach((inventory) => {\n // console.log(\n // `Update Inventory from old product ID ${inventory.productId}, ${inventory.productCode} to new ${newProductId} ${newProductCode}`\n // );\n // inventory.productId = newProductId;\n // inventory.productCode = newProductCode;\n // });\n\n await Promise.allSettled(updatePromises);\n }\n } catch (error) {\n console.error(\n `Error updating inventories for product ID ${oldProductId}`,\n error\n );\n }\n };\n\n // Helper function to delete a product\n const deleteProduct = async (productId, oldProductCode) => {\n try {\n await API.graphql(\n graphqlOperation(mutations.deleteProduct, {\n input: { id: productId },\n })\n );\n console.log(\n `Deleted old product with ID ${productId} ${oldProductCode}.`\n );\n } catch (error) {\n console.error(`Error deleting product with ID ${productId}`, error);\n }\n };\n\n // Helper function to update a product code\n const updateProductCode = async (product) => {\n try {\n const input = {\n id: product.baseProductId, // new product\n active: product.active,\n accountId: product.accountId,\n productCode: product.baseProductCode, // new product\n name: product.name,\n };\n if (product.customFields?.length > 0) {\n input.customFields = product.customFields;\n }\n await API.graphql(\n graphqlOperation(mutations.updateProduct, {\n input,\n })\n );\n console.log(\n `Updated product ${input.id} ${product.productCode} to new code: ${input.productCode}`,\n input\n );\n } catch (error) {\n console.error(\n `Error updating product code for product ID ${product.id}`,\n error\n );\n }\n };\n\n const backfillTimeslotIds = async () => {\n console.clear();\n console.log(\"Starting backfill for missing timeslotIds...\");\n\n const startTime = performance.now();\n let updatedCount = 0;\n\n try {\n const searchInput = {\n limit: 100, // Adjust limit as needed\n };\n\n let nextToken = true;\n while (nextToken) {\n let updatePromises = [];\n\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n let result = await API.graphql(\n graphqlOperation(queries.listTimeslots, input)\n );\n\n const timeslotList = result.data.listTimeslots.items;\n console.log(\"Fetched timeslots:\", timeslotList.length);\n\n nextToken = result.data.listTimeslots.nextToken;\n\n for (const timeslot of timeslotList) {\n console.log(\"timeslot:\", timeslot);\n if (!timeslot.outboundId) continue; // Skip if no outboundId\n\n console.log(\n `Updating outboundShipment ${timeslot.outboundId} with timeslotId ${timeslot.id}`\n );\n\n const updatePromise = API.graphql(\n graphqlOperation(mutations.updateOutboundShipment, {\n input: { id: timeslot.outboundId, timeslotId: timeslot.id },\n })\n );\n updatePromises.push(updatePromise);\n updatedCount += 1;\n }\n\n console.log(\"Update promises:\", updatePromises.length);\n await Promise.allSettled(updatePromises);\n }\n } catch (err) {\n logError(\"backfillTimeslotIds\", err, notify);\n }\n\n const endTime = performance.now();\n console.log(\n `Backfill completed. Updated ${updatedCount} outbound shipments.`\n );\n utils.elapsedTime(startTime, endTime, updatedCount, 2000);\n notify(`Backfill complete: ${updatedCount} outbound shipments updated.`);\n };\n\n const fixProductCounts = async (queryTerms) => {\n try {\n let nextToken = true;\n let searchInput = { limit: 1000 };\n\n do {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const productsData = await API.graphql(\n graphqlOperation(queries.listProducts, input)\n );\n\n nextToken = productsData.data.listProducts.nextToken;\n const products = productsData.data.listProducts.items.filter(\n (itm) => itm.reloadYardId === queryTerms.reloadYardId\n );\n console.log(\"Products:\", products.length);\n\n for (const product of products) {\n let allInventories = [];\n let inventoryQuery = {\n reloadYardId: queryTerms.reloadYardId,\n productIdStatus: {\n beginsWith: {\n productId: product.id,\n status: InventoryStatus.STORED,\n },\n },\n limit: MAX_INVENTORY_QUERY_LIMIT,\n };\n\n let nextInvToken = true;\n while (nextInvToken) {\n const inventoryInput =\n nextInvToken === true\n ? inventoryQuery\n : { nextToken: nextInvToken, ...inventoryQuery };\n\n const result = await API.graphql(\n graphqlOperation(\n queries.inventoryByProductByStatus,\n inventoryInput\n )\n );\n\n if (result.data.inventoryByProductByStatus.items.length > 0) {\n allInventories = allInventories.concat(\n result.data.inventoryByProductByStatus.items\n );\n }\n nextInvToken =\n result.data.inventoryByProductByStatus.nextToken || null;\n }\n\n if (allInventories.length > 0) {\n console.log(\n `INVENTORIES for product ${product.id}: `,\n allInventories.length\n );\n\n const totalQty = allInventories.reduce((sum, inv) => {\n return sum + (Number(inv.quantityOnHand) || 0);\n }, 0);\n\n const lowInventoryThreshold =\n Number(product.lowInventoryThreshold) || 0;\n const lowInventoryAlert = totalQty <= lowInventoryThreshold;\n\n await API.graphql(\n graphqlOperation(mutations.updateProduct, {\n input: {\n id: product.id,\n totalInventoryQuantity: totalQty,\n lowInventoryAlert,\n },\n })\n );\n\n console.log(\n `Updated product ${product.id}: Total Qty = ${totalQty}, Low Alert = ${lowInventoryAlert}`\n );\n }\n }\n } while (nextToken);\n\n notify(\"All products updated successfully!\");\n } catch (error) {\n notify(\"Error fixing product counts\", \"error\");\n console.error(\"Error fixing product counts:\", error);\n }\n };\n\n return (\n <>\n <Card>\n <CardContent\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: \"100%\",\n }}\n >\n <Typography\n variant=\"h3\"\n color={getEnv() === \"prod\" ? \"error\" : \"default\"}\n >\n {getEnv()} -- {getVersion()}\n </Typography>\n </CardContent>\n </Card>\n {!appUser.email.includes(\"mikek\") && (\n <Card className={classes.card}>\n <CardHeader title=\"PROD FUNCTIONS\" />\n <CardContent>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"default\">\n AUDIT DATA\n </Typography>\n </legend>\n <Button\n onClick={() =>\n handleDialogOpen(utils.auditLocations, \"auditLocations\")\n }\n >\n Audit Location\n </Button>\n <Button\n onClick={() =>\n handleDialogOpen(\n utils.auditCapacityUsed,\n \"auditCapacityUsed\"\n )\n }\n >\n Audit Capacity Used\n </Button>\n <Button\n onClick={() =>\n handleDialogOpen(\n utils.auditInventoryQuantity,\n \"auditInventoryQuantity\"\n )\n }\n >\n Audit Inventory Qty\n </Button>\n <Button\n onClick={() =>\n handleDialogOpen(utils.auditInbounds, \"auditInbounds\")\n }\n >\n Audit Inbound\n </Button>\n <Button\n onClick={() =>\n handleDialogOpen(utils.auditOutbounds, \"auditOutbounds\")\n }\n >\n Audit Outbound\n </Button>\n <Button\n disabled={true}\n onClick={() =>\n handleDialogOpen(\n utils.auditInvItemLocations,\n \"auditInvItemLocations\"\n )\n }\n >\n Audit InvItem Location\n </Button>\n <Button\n onClick={() =>\n handleDialogOpen(auditProducts, \"auditProducts\")\n }\n >\n Audit Product Qty\n </Button>\n </fieldset>\n </Grid>\n\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"default\">\n DATA INTEGRITY AUDITS\n </Typography>\n </legend>\n <Button onClick={dataIntegridyAudit}>\n shipment lineItem - inventory\n </Button>\n </fieldset>\n </Grid>\n\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"default\">\n CLEAN DATA\n </Typography>\n </legend>\n <Button\n onClick={() =>\n handleDialogOpen(\n utils.runAccountChange,\n \"runAccountChange\"\n )\n }\n >\n Account Change\n </Button>\n <Button\n onClick={() =>\n handleDialogOpen(utils.fixCapacityUsed, \"fixCapacityUsed\")\n }\n >\n fix capacity used\n </Button>\n <Button\n onClick={() =>\n handleDialogOpen(utils.fixInventoryQty, \"fixInventoryQty\")\n }\n >\n fix Inventory Qty\n </Button>\n </fieldset>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n )}\n {getEnv() !== \"prod\" && (\n <Card className={classes.card}>\n <CardHeader title=\"DEV FUNCTIONS\" />\n <CardContent>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <Button\n variant=\"outlined\"\n disabled={getEnv() !== \"dev\"}\n onClick={() =>\n handleDialogOpen(utils.deleteReloadYard, \"deleteReloadYard\")\n }\n >\n Delete ReloadYard\n </Button>\n </Grid>\n <Grid item xs={12}>\n <Button disabled={true} onClick={devInventoryItemCleanout}>\n DEV inventoryItem clean out\n </Button>\n <Button\n disabled={true}\n onClick={() =>\n handleDialogOpen(resetLineItems, \"resetLineItems\")\n }\n >\n Reset LineItems\n </Button>\n <Button\n disabled={false}\n onClick={() => handleDialogOpen(fixAisleList, \"fixAisleList\")}\n >\n Fix Aisle List\n </Button>\n <br />\n <Button disabled={true} onClick={zeroAccountPhotos}>\n zero Account Photos\n </Button>\n <Button disabled={true} onClick={inventoryItemAddAccount}>\n inventoryItem Add Account, Unloaded By\n </Button>\n <Button\n disabled={true}\n onClick={() =>\n handleDialogOpen(\n inventory_invItem_backfill,\n \"inventory_invItem_backfill\"\n )\n }\n >\n Inventory InvItem Backfill\n </Button>\n <Button\n disabled={true}\n onClick={() =>\n handleDialogOpen(mergeInventories, \"mergeInventories\")\n }\n >\n merge Inventory\n </Button>\n <Button\n disabled={true}\n onClick={() =>\n handleDialogOpen(\n mergeShipmentLineItems,\n \"mergeShipmentLineItems\"\n )\n }\n >\n merge ShipmentLineItems\n </Button>\n <br />\n <Button\n disabled={true}\n onClick={() =>\n handleDialogOpen(resetAisleSortKey, \"resetAisleSortKey\")\n }\n >\n RESET Aisles sort_key\n </Button>\n <Button\n disabled={true}\n onClick={() =>\n handleDialogOpen(\n invoices_Backfill_Numbers,\n \"invoices_Backfill_Numbers\"\n )\n }\n >\n invoices Backfill Numbers\n </Button>\n <Button\n disabled={true}\n onClick={() =>\n handleDialogOpen(runSortKeyBackfill, \"runSortKeyBackfill\")\n }\n >\n Run SorkKey Backfill\n </Button>\n <Button\n disabled={true}\n onClick={() =>\n handleDialogOpen(\n run_Aisle_Location_Backfill,\n \"run_Units_Null\"\n )\n }\n >\n Units NULL\n </Button>\n <Button\n disabled={true}\n onClick={() =>\n handleDialogOpen(\n createInventoryItems,\n \"createInventoryItems\"\n )\n }\n >\n create Inventory Items\n </Button>\n <br />\n <Button\n disabled={getEnv() === \"prod\"}\n onClick={devFixLocations}\n >\n Fix Locations\n </Button>\n <Button\n disabled={getEnv() === \"prod\"}\n onClick={() =>\n handleDialogOpen(\n devDeleteEmptyInbounds,\n \"devDeleteEmptyInbounds\"\n )\n }\n >\n Delete Empty Inbounds\n </Button>\n <Button\n disabled={getEnv() === \"prod\"}\n onClick={() =>\n handleDialogOpen(\n devDeleteEmptyOutbounds,\n \"devDeleteEmptyOutbounds\"\n )\n }\n >\n Delete Empty Outbounds\n </Button>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n )}\n <Card className={classes.card}>\n <CardHeader title=\"RELEASE FUNCTIONS\" />\n <CardContent>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"default\">\n PERMANENT\n </Typography>\n </legend>\n <Button\n onClick={() =>\n handleDialogOpen(utils.runDBIndexRegen, \"runDBIndexRegen\")\n }\n >\n DB Index Regen\n </Button>\n <Button\n disabled={!helpPageButtonText}\n onClick={helpPagesMigration}\n >\n {helpPageButtonText\n ? helpPageButtonText\n : \"Migrate Help Pages\"}\n </Button>\n </fieldset>\n </Grid>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"default\">\n CURRENT SPRINT{\" \"}\n </Typography>\n </legend>\n <Button\n disabled={false}\n onClick={() =>\n handleDialogOpen(\n backfillOutboundShipment,\n \"backfillOutboundShipment\"\n )\n }\n >\n Backfil Outbound Shipments\n </Button>\n <Button\n disabled={true}\n onClick={() =>\n handleDialogOpen(addDefaultScheduleToYard, \"Add Schedule\")\n }\n >\n Add Schedule\n </Button>\n <Button disabled={true} onClick={hdmFixInventoryItems}>\n HDM fix Inventory Items\n </Button>\n <Button\n disabled={true}\n onClick={() =>\n handleDialogOpen(\n fixInventoryDateTime,\n \"fixInventoryDateTime\"\n )\n }\n >\n fix Inventory DateTime\n </Button>\n <Button disabled={false} onClick={fixNegativeInvQty}>\n fix Negative Inventory qty\n </Button>\n <Button\n disabled={true}\n onClick={() =>\n handleDialogOpen(\n backfillProductDimensions,\n \"backfillProductDimensions\"\n )\n }\n >\n Backfil Product Dimensions\n </Button>\n <Button disabled={true} onClick={addUserACL}>\n Add OUTOUBND_SIGN ACL\n </Button>\n <Button disabled={true} onClick={addBillingBusinessName}>\n addBillingBusinessName\n </Button>\n <Button disabled={true} onClick={fixProductCode}>\n fix product code\n </Button>\n <Button onClick={backfillTimeslotIds}>\n disabled={true}\n backfill TimeslotIds\n </Button>\n <Button\n onClick={() =>\n handleDialogOpen(fixProductCounts, \"fixProductCounts\")\n }\n >\n fix Product Counts\n </Button>\n </fieldset>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n {\n // inventory audit output\n results?.items?.length > 0 && (\n <CardContent>\n <ArrayField source=\"items\" record={results}>\n <Datagrid>\n {Object.keys(results.items[0]).map((column) => (\n <TextField source={`${column}`} />\n ))}\n <MismatchIcon />\n </Datagrid>\n </ArrayField>\n </CardContent>\n )\n }\n <utils.HandlerDialog\n dialogOpen={dialogOpen}\n handleDialogClose={handleDialogClose}\n onSubmit={handleSubmit}\n handlerName={handlerName}\n loading={loading}\n reloadYards={reloadYards}\n queryTerms={queryTerms}\n setQueryTerms={setQueryTerms}\n />\n </>\n );\n};\n","import React from \"react\";\nimport Typography from \"@material-ui/core/Typography\";\n\nconst Title = (props) => {\n return (\n <Typography\n component=\"h2\"\n variant=\"h6\"\n color=\"default\"\n gutterBottom\n style={{ marginRight: \"auto\" }}\n >\n {props.children}\n </Typography>\n );\n};\n\nexport default Title;\n","import React, { useState, useEffect } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { countInboundShipments } from \"../../graphql/inbound/custom-queries\";\n\nimport { addMonths, format, startOfMonth, sub } from \"date-fns\";\n\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n Cell,\n ReferenceLine,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\n\nimport { Typography } from \"@material-ui/core\";\n\nimport { useNotify } from \"ra-core\";\n\nimport Title from \"./Title\";\nimport { logError } from \"../../utils/appUtils\";\nimport { InboundStatus } from \"../../utils/constants\";\n\nconst CustomizedLabel = (props) => {\n const { x, y, fill, value } = props;\n\n return (\n <text\n x={x}\n y={y}\n dy={-4}\n fontSize=\"16\"\n fontFamily=\"sans-serif\"\n fill={fill}\n textAnchor=\"middle\"\n >\n {value}\n </text>\n );\n};\n\nconst InboundCarsByMonth = ({ reloadYardId, ...props }) => {\n const notify = useNotify();\n const [average, setAverage] = useState(0);\n const [data, setData] = useState([]);\n\n useEffect(() => {\n getInboundCarsData();\n }, []);\n\n const getInboundCarsData = async () => {\n // Get the last 12 months, including current month\n const startDate = startOfMonth(sub(new Date(), { months: 11 }));\n let tempData = [];\n\n try {\n const queryList = [];\n const yardId = reloadYardId ? reloadYardId : window.appUser?.reloadYardId;\n debugger;\n\n for (let i = 0; i <= 11; i++) {\n const newDate = addMonths(startDate, i);\n const nextDate = addMonths(newDate, 1);\n const monthName = format(newDate, \"MMM\");\n const options = { month: \"2-digit\", year: \"numeric\" };\n const barDate = newDate.toLocaleDateString(\"en-US\", options);\n\n tempData[i] = { name: monthName, date: barDate, amt: 0 };\n\n queryList[i] = API.graphql(\n graphqlOperation(countInboundShipments, {\n filter: {\n reloadYardId: { eq: yardId },\n status: { eq: InboundStatus.RELEASED },\n and: [\n { releaseDateTime: { gte: newDate } },\n { releaseDateTime: { lt: nextDate } },\n ],\n },\n limit: 1000,\n })\n );\n }\n\n const promiseResults = await Promise.all(queryList);\n let totalAmt = 0;\n\n promiseResults.forEach((result, idx) => {\n const amt = result.data.searchInboundShipments.total;\n tempData[idx].amt = amt;\n totalAmt += amt;\n });\n\n const avg = Math.round(totalAmt / tempData.length);\n\n setData(tempData);\n setAverage(avg);\n } catch (err) {\n logError(\"InboundCars:getInboundCarsData\", err, notify);\n }\n };\n\n return (\n <>\n <Title>Inbounds per Month\n \n \n \n \n \n {\n if (payload && payload.length) {\n const { date, amt } = payload[0].payload;\n return (\n \n {`Date: ${date}`}\n {`Value: ${amt}`}\n {`Average: ${average}`}\n \n );\n }\n return null;\n }}\n />\n {average && (\n \n )}\n \n label={}\n {data.map((entry, index) => (\n average ? \"green\" : \"orange\"} />\n ))}\n \n \n \n \n );\n};\n\nexport default InboundCarsByMonth;\n","import React, { useState, useEffect } from \"react\";\n\nimport {\n reloadYardCommodityByActiveBySortKey,\n reloadYardCapabilityByReloadYard,\n userByActiveByLastName,\n} from \"../../../graphql/queries\";\nimport { API, graphqlOperation } from \"aws-amplify\";\n\nimport { Box, Chip, Paper, Typography, useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n ArrayField,\n Datagrid,\n Loading,\n Show,\n SimpleShowLayout,\n TextField,\n useNotify,\n} from \"react-admin\";\n\nimport { ClipboardTextField } from \"../../../components/common/CopyToClipboardButton\";\nimport { logError } from \"../../../utils/appUtils\";\nimport InboundCarsByMonth from \"../../../managerApp/reports/InboundCarsByMonth\";\n\nconst _ = require(\"lodash\");\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n justifyContent: \"left\",\n flexWrap: \"wrap\",\n listStyle: \"none\",\n padding: theme.spacing(0.5),\n margin: 0,\n },\n chip: {\n marginLeft: theme.spacing(0.5),\n marginTop: -theme.spacing(0.5),\n },\n fixedHeightPaper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n padding: theme.spacing(2),\n height: 256,\n },\n}));\n\nconst Separator = () => ;\n\nexport const ReloadYardPeak = ({ record, ...props }) => {\n const classes = useStyles();\n const notify = useNotify();\n const [commodities, setCommodities] = useState([]);\n const [users, setUsers] = useState({});\n const [loading, setLoading] = useState(true);\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n useEffect(() => {\n getData();\n }, []);\n\n const getData = async () => {\n try {\n debugger;\n\n setLoading(true);\n let res = await API.graphql(\n graphqlOperation(reloadYardCommodityByActiveBySortKey, {\n reloadYardId: record.id,\n activeSortKey: { beginsWith: { active: \"true\" } },\n })\n );\n let data = res.data.reloadYardCommodityByActiveBySortKey.items;\n setCommodities(data);\n\n res = await API.graphql(\n graphqlOperation(reloadYardCapabilityByReloadYard, {\n reloadYardId: record.id,\n active: { beginsWith: \"true\" },\n })\n );\n data = res.data.reloadYardCapabilityByReloadYard.items;\n data = _.orderBy(data, [\"capability.sortKey\"], [\"asc\"]);\n\n res = await API.graphql(\n graphqlOperation(userByActiveByLastName, { reloadYardId: record.id })\n );\n data = res.data.userByActiveByLastName.items;\n const userRec = { users: data };\n setUsers(userRec);\n } catch (err) {\n logError(\"reloadYard:ReloadYardPeak:getData\", err, notify);\n }\n setLoading(false);\n };\n\n if (loading) return ;\n return (\n \n \n \n \n {\" \"}\n Rail / Interstate:{\" \"}\n \n {record?.railHighway.map((item) => (\n
  • \n \n
  • \n ))}\n
    \n \n \n \n {\" \"}\n Commodities:{\" \"}\n \n {commodities?.map((item) => (\n
  • \n \n
  • \n ))}\n
    \n \n\n \n \n \n \n {isXSmall ? (\n \n \n \n \n ) : (\n \n \n \n \n \n \n \n )}\n \n \n \n \n \n \n
    \n
    \n );\n};\n","import React, { useState } from \"react\";\n\nimport { IconButton, InputAdornment, TextField } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { SearchIcon, XIcon } from \".\";\n\nconst useStyles = makeStyles((theme) => ({\n searchField: {\n marginTop: theme.spacing(0),\n marginBottom: theme.spacing(1),\n minWidth: \"16rem\",\n // maxWidth: \"16rem\",\n },\n iconButton: {\n marginRight: theme.spacing(-2),\n },\n}));\n\nexport const SearchField = ({ handleSearch, ...props }) => {\n const classes = useStyles();\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const handleChange = (event) => {\n setSearchTerm(event.target.value);\n };\n\n const handleKeyDown = (event) => {\n if (event.key === \"Enter\") event.preventDefault();\n };\n\n const handleKeyUp = (event) => {\n if (event.key === \"Enter\") handleSearch(searchTerm);\n };\n\n const handleReset = () => {\n setSearchTerm(\"\");\n handleSearch(\"\");\n };\n\n const handleSubmit = () => {\n handleSearch(searchTerm);\n };\n\n return (\n \n \n \n \n \n \n \n \n ),\n }}\n />\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { useList, useNotify, useVersion, useQueryWithStore } from \"react-admin\";\nimport { logError } from \"../utils/appUtils\";\nimport { isEmpty, keyBy } from \"lodash\";\n\nfunction capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nconst resourceNameMap = { inventories: \"inventorys\" };\n\nfunction getResouceName(name) {\n return resourceNameMap[name] ? resourceNameMap[name] : name;\n}\n\nexport const useSearchableList = (props) => {\n const {\n basePath,\n defaultSearchFilter,\n defaultFilter,\n defaultPerPage,\n resource,\n defaultSort,\n } = props;\n const notify = useNotify();\n const version = useVersion();\n\n const [payload, setPayload] = useState({});\n const { data, error, loaded, loading, total } = useQueryWithStore({\n type: \"getList\",\n resource,\n payload,\n });\n if (error) {\n const newError = { ...error, data: payload };\n logError(\"utils:useSearchableList:useQueryWithStore:\", newError, notify);\n }\n\n const listContext = useList({\n ...props,\n data: data || [],\n ids: data?.map((itm) => itm.id) || [],\n loading,\n total,\n sort: defaultSort,\n perPage: defaultPerPage,\n });\n\n useEffect(() => {\n debugger;\n const sortQuery = JSON.parse(defaultSort.field);\n keyQueryFetch(sortQuery.key, defaultSort.order);\n }, [version]);\n\n useEffect(() => {\n debugger;\n listContext.page = 1;\n listContext.setPage(1);\n }, [listContext.perPage, listContext.filterValues]);\n\n useEffect(() => {\n debugger;\n refetch();\n }, [\n listContext.page,\n listContext.perPage,\n listContext.filterValues,\n listContext.currentSort,\n defaultFilter,\n ]);\n\n const refetch = () => {\n debugger;\n let sortQuery;\n if (listContext.currentSort?.field?.startsWith(\"{\")) {\n sortQuery = JSON.parse(listContext.currentSort.field);\n } else {\n sortQuery = { search: listContext.currentSort.field };\n }\n\n if (isEmpty(listContext.filterValues) && sortQuery?.key) {\n keyQueryFetch(sortQuery.key, listContext.currentSort.order);\n } else {\n searchableFetch(sortQuery.search, listContext.currentSort.order);\n }\n };\n\n const keyQueryFetch = (queryBy, order) => {\n setPayload({\n filter: { [queryBy]: { ...defaultFilter } },\n pagination: { page: listContext.page, perPage: listContext.perPage },\n sort: { field: queryBy, order: order },\n });\n debugger;\n };\n\n const searchableFetch = (sortBy, order) => {\n const searchInput = {\n filter: {\n ...listContext.filterValues,\n [\"search\" + capitalizeFirstLetter(getResouceName(resource))]: {\n ...defaultSearchFilter,\n },\n },\n pagination: { page: listContext.page, perPage: listContext.perPage },\n };\n if (sortBy)\n searchInput.sort = { field: sortBy, order: order.toLowerCase() };\n setPayload(searchInput);\n debugger;\n };\n\n const finalData = data ? keyBy(data, \"id\") : {};\n const finalIds = data ? data.map((itm) => itm.id) : [];\n\n return {\n ...listContext,\n data: finalData,\n ids: finalIds,\n filter: payload.filter,\n total,\n error,\n loaded,\n loading,\n basePath,\n resource,\n payload,\n };\n};\n","import React, { Component } from \"react\";\nimport T from \"prop-types\";\n\nimport { FieldTitle } from \"react-admin\";\n\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport IconClose from \"@material-ui/icons/Close\";\nimport Button from \"@material-ui/core/Button\";\n\nclass SelectionDialog extends Component {\n onColumnClicked = ({ target: { value: columnName } }) => {\n this.props.onColumnClicked(columnName);\n };\n\n render() {\n const { columns, selection, onClose, resource } = this.props;\n\n return (\n \n Configuration\n \n \n {columns.map(({ source, label }) => (\n \n }\n label={\n \n }\n />\n ))}\n \n \n \n \n \n \n );\n }\n}\n\nSelectionDialog.propTypes = {\n columns: T.arrayOf(\n T.shape({\n label: T.string,\n source: T.string.isRequired,\n })\n ).isRequired,\n selection: T.object,\n};\n\nSelectionDialog.defaultProps = {\n columns: [],\n selection: {},\n};\n\nexport default SelectionDialog;\n","import get from \"lodash/get\";\n\nconst STORAGE_KEY = \"raColumnsConfig\";\n\n// Very basic storage helper\n// values are stored in browser localStorage\n\nconst getRootValue = () => {\n try {\n return JSON.parse(window.localStorage.getItem(STORAGE_KEY));\n } catch (e) {\n return undefined;\n }\n};\n\nconst setRootValue = (value) => {\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(value));\n } catch (e) {}\n};\n\nconst LocalStorage = {\n get(key) {\n return get(getRootValue(), key);\n },\n set(key, value) {\n const oldValue = getRootValue();\n setRootValue({\n ...oldValue,\n [key]: value,\n });\n },\n};\n\nexport default LocalStorage;\n","// https://github.com/fizix-io/ra-customizable-datagrid\n\nimport React, { useEffect, useState } from \"react\";\n\nimport isEmpty from \"lodash/isEmpty\";\nimport filter from \"lodash/filter\";\nimport get from \"lodash/get\";\nimport { Button, Typography, Box } from \"@material-ui/core\";\n\nimport { Datagrid } from \"react-admin\";\n\nimport { CustomFieldsIcon } from \"..\";\nimport SelectionDialog from \"./SelectionDialog\";\nimport LocalStorage from \"./LocalStorage\";\n\nconst arrayToSelection = (values) =>\n values.reduce((selection, columnName) => {\n selection[columnName] = true;\n return selection;\n }, {});\n\n// CustomizableDatagrid allows to show/hide columns dynamically\n// the preferences are stored in local storage\nexport const CustomizableDatagrid = ({\n children,\n label = \"\",\n listSwitch,\n defaultColumns = [],\n storage = LocalStorage,\n storageProp,\n ...props\n}) => {\n const getColumnNames = () => {\n return filter(children.map((field) => get(field, [\"props\", \"source\"])));\n };\n\n const getInitialSelection = () => {\n const previousSelection = storage.get(storageProp);\n\n // if we have a previously stored value, let's return it\n if (!isEmpty(previousSelection)) {\n return previousSelection;\n }\n\n // if defaultColumns are set let's return them\n if (!isEmpty(defaultColumns)) {\n return arrayToSelection(defaultColumns);\n }\n\n // otherwise we fallback on the default behaviour : display all columns\n const retVal = arrayToSelection(getColumnNames());\n\n return retVal;\n };\n\n useEffect(() => {\n setSelection(getInitialSelection());\n }, [storageProp]);\n\n const [selection, setSelection] = useState(getInitialSelection());\n const [modalOpened, setModalOpened] = useState(false);\n\n const getColumnLabels = () => {\n const retVal = filter(\n children.map(\n (field) =>\n field && {\n source: get(field, [\"props\", \"source\"]),\n label: get(field, [\"props\", \"label\"]),\n }\n ),\n (item) => item && item.source\n );\n\n return retVal;\n };\n\n // updates the storage with the internal state value\n const updateStorage = (newSelection) => {\n storage.set(storageProp, newSelection);\n };\n\n const toggleColumn = (columnName) => {\n const previousSelection = selection;\n const newSelection = {\n ...previousSelection,\n [columnName]: !previousSelection[columnName],\n };\n setSelection(newSelection);\n updateStorage(newSelection);\n };\n\n const handleOpen = () => setModalOpened(true);\n const handleClose = () => setModalOpened(false);\n\n const renderChild = (child) => {\n const source = get(child, [\"props\", \"source\"]);\n\n // Show children without source, or children explicitly visible\n const selectedSource = source && selection[source];\n if (!source || selectedSource) {\n return React.cloneElement(child, {});\n }\n\n return null;\n };\n\n return (\n
    \n \n {label && (\n \n {label}\n \n )}\n {listSwitch ? listSwitch : <>}\n {!label && !listSwitch && <> }\n {\n \n \n \n \n \n }\n
    \n {modalOpened && (\n \n )}\n \n {children.map((child) => renderChild(child))}\n \n \n );\n};\n","import { CustomizableDatagrid } from \"./CustomizableDatagrid\";\n\nexport default CustomizableDatagrid;\n","import React, { useEffect, useState } from \"react\";\nimport {\n EditButton,\n TextField,\n NumberField,\n useListContext,\n TopToolbar,\n FilterButton,\n ListToolbar,\n ListContextProvider,\n FunctionField,\n useRecordContext,\n RefreshButton,\n} from \"react-admin\";\nimport { useMediaQuery, Card } from \"@material-ui/core\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { ReloadYardPeak } from \"./ReloadYardPeak\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\nimport { CheckIcon, XIcon } from \"../../../components/common\";\nimport { SubscriptionStatus } from \"../../../utils/constants\";\nimport VerifiedStoredIcon from \"@material-ui/icons/ErrorOutline\";\nimport CustomizableDatagrid from \"../../../components/common/ra-customizable-datagrid\";\n\nconst ReloadYardSearchField = ({ label, alwaysOn }) => {\n const listContext = useListContext();\n const { displayedFilters, filterValues, setFilters } = listContext;\n\n const handleSearch = (value) => {\n if (value) {\n delete filterValues.or;\n setFilters(\n {\n ...filterValues,\n or: [\n { name: { matchPhrasePrefix: value } },\n { name: { wildcard: `*${value}*` } },\n { city: { matchPhrasePrefix: value } },\n { city: { wildcard: `*${value}*` } },\n { state: { matchPhrasePrefix: value } },\n { state: { wildcard: `*${value}*` } },\n ],\n },\n displayedFilters\n );\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n \n );\n};\n\nconst getListFilters = () => [\n ,\n];\n\nconst ListActions = ({ isXSmall }) => (\n \n {!isXSmall && }\n \n \n);\n\nconst SubscriptionStatusField = (props) => {\n const record = useRecordContext(props);\n if (!record) return null;\n\n const status = record.subscription?.status;\n\n return (\n \n {status === SubscriptionStatus.ACTIVE && (\n \n )}\n {status === SubscriptionStatus.CANCELED && (\n \n )}\n {status === SubscriptionStatus.TRIALING && (\n \n )}\n {status}\n \n );\n};\n\nexport const ReloadYardList = (props) => {\n const [defaultFilter] = useState({ active: true });\n\n const defaultSort = {\n field: `{\"key\":\"reloadYardByName\", \"search\":\"name\"}`,\n order: \"DESC\",\n };\n\n const listContext = useSearchableList({\n ...props,\n defaultTitle: \"Search Reload Yards\",\n defaultFilter,\n defaultPerPage: 10,\n defaultSort,\n resource: \"reloadYards\",\n });\n\n const getSortBy = (resource) => {\n return `{\"key\":\"reloadYardByName\", \"search\":\"${resource}\"}`;\n };\n\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const isMedium = useMediaQuery((theme) => theme.breakpoints.up(\"md\"));\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n }\n }, [listContext?.perPage, props.resource]);\n\n return (\n \n }\n />\n \n {isXSmall ? (\n }\n >\n \n \n \n \n \n ) : (\n }\n storageProp=\"ReloadYard_large\"\n defaultColumns={[\n \"name\",\n \"city\",\n \"state\",\n \"lotCapacity\",\n \"servingCarrier\",\n \"trackCapacity\",\n ]}\n >\n \n \n \n \n \n \n \n \n \n \n \n )}\n \n \n \n );\n};\n","import React from \"react\";\n\nimport { format } from \"date-fns\";\n\nimport { Box, Grid, InputAdornment, Tooltip } from \"@material-ui/core\";\nimport VisibilityIcon from \"@material-ui/icons/Visibility\";\n\nimport {\n ArrayField,\n ArrayInput,\n BooleanField,\n BooleanInput,\n Datagrid,\n FormDataConsumer,\n Labeled,\n required,\n SimpleFormIterator,\n TextField,\n TextInput,\n} from \"react-admin\";\n\nconst validateRequired = required();\n\nconst formatDateTime = (value) => {\n // return new Date(value).toLocaleDateString('en-US', { month: '2-digit', day: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' });\n return format(new Date(value), \"MM/dd/yyyy hh:mm a\");\n};\n\nexport const NotesTab = (props) => {\n return (\n \n \n \n \n \n {({\n formData, // The whole form data\n scopedFormData, // The data for this item of the ArrayInput\n getSource, // Function to get the valid source inside an ArrayInput. Translates to \"notes.items[].property\"\n ...rest\n }) => (\n \n \n \n \n \n \n ),\n }\n : {}\n }\n />\n {!scopedFormData?.date && (\n \n )}\n \n )}\n \n \n \n \n \n );\n};\n\nexport const NotesTabShow = ({ hidePrivate = false, record, ...props }) => {\n // Ensure that record.notes is an array\n const notes = Array.isArray(record.notes) ? record.notes : [];\n\n // Filter the notes based on hidePrivate parameter\n const filteredNotes = hidePrivate\n ? notes.filter((note) => note.public)\n : notes;\n\n // Create a new record with the filtered notes\n const notesRecord = { notes: filteredNotes };\n\n return (\n \n \n \n \n \n \n {!hidePrivate && }\n \n \n \n );\n};\n","import React from \"react\";\n\nimport { Box, Grid, Typography } from \"@material-ui/core\";\n\nimport {\n Labeled,\n required,\n SelectInput,\n TextField,\n TextInput,\n} from \"react-admin\";\n\nimport { CountryList } from \"../../../utils/constants\";\n\nexport const ContactInfo = ({ classes, disabled, record, ...props }) => {\n if (disabled) {\n return ;\n }\n return ;\n};\n\nconst ContactInfoForm = ({ ...props }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n (v !== \"\" ? v.toLowerCase() : undefined)}\n validate={required()}\n />\n \n \n \n \n Address\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nconst ContactInfoSHow = ({ classes, record, ...props }) => {\n return (\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n );\n};\n","import React, { useRef, useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n TextField,\n Button,\n Chip,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\n\nimport { AddIcon } from \"../../../components/common\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: theme.spacing(1),\n },\n location: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(1),\n flexWrap: \"wrap\",\n },\n item: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n margin: theme.spacing(0.5),\n },\n input: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n marginBottom: theme.spacing(2),\n },\n addField: {\n minWidth: \"16rem\",\n },\n addButton: {\n marginLeft: theme.spacing(1),\n height: \"2.5rem\",\n },\n}));\n\nexport default function AccessInput({ access, setAccess }) {\n const [accessName, setAccessName] = useState(\"\");\n const [error, setError] = useState(false);\n const locationRef = useRef();\n const classes = useStyles();\n\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n const isDuplicate = (val) => {\n let duplicateValue = false;\n access.forEach((location) => {\n const v = location.split(\"-\");\n if (v[0] === val || (v.length > 1 && v[1] === val)) duplicateValue = true;\n });\n return duplicateValue;\n };\n\n const addAccess = (evt) => {\n debugger;\n const submitFlag = !!evt.preventDefault;\n if (submitFlag) {\n evt.preventDefault();\n }\n\n if (accessName && !isDuplicate(accessName)) {\n setAccess([...access, accessName.toUpperCase()]);\n }\n setAccessName(\"\");\n locationRef.current.focus();\n };\n\n const handleSubmit = (evt) => {\n if (evt.key === \"Enter\") {\n addAccess(\"Add\");\n }\n };\n\n const handleAccessName = (evt) => {\n if (!evt.target.value) {\n setAccessName(\"\");\n return;\n }\n let value = evt.target.value.trim().toUpperCase();\n if (isDuplicate(value)) setError(true);\n else setError(false);\n value && setAccessName(value);\n };\n\n const handleDelete = (idx) => {\n access.splice(idx, 1);\n setAccess([...access]);\n };\n\n return (\n
    \n
    \n \n {isSmall ? (\n addAccess(\"Add\")}\n startIcon={}\n >\n Add\n \n ) : (\n addAccess(\"Add\")}\n startIcon={}\n >\n Add\n \n )}\n
    \n
    \n {access.length === 0 ? (\n \n Enter nearest interstate, one at a time, hit ENTER / +ADD\n \n ) : (\n access.map((location, idx) => {\n return (\n
    \n handleDelete(idx)}\n />\n
    \n );\n })\n )}\n
    \n
    \n );\n}\n","import React, { useState } from \"react\";\n\nimport {\n Box,\n Chip,\n Divider,\n Grid,\n InputAdornment,\n makeStyles,\n Switch,\n TextField as MuiTextField,\n Typography,\n} from \"@material-ui/core\";\n\nimport {\n Labeled,\n NumberInput,\n required,\n TextField,\n TextInput,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport AccessInput from \"./AccessInput\";\n\nconst useStyles = makeStyles((theme) => ({\n capacity: {\n position: \"relative\",\n marginLeft: theme.spacing(2),\n top: \"-0.5em\",\n width: \"10em\",\n height: \"1.5em\",\n },\n input: {\n paddingTop: \"7px\",\n paddingBottom: \"7px\",\n textAlign: \"right\",\n minWidth: \"8em\",\n },\n adorment: {\n marginTop: theme.spacing(0),\n },\n}));\n\nexport const Capabilities = ({\n classes,\n disabled,\n record,\n notify,\n ...props\n}) => {\n if (disabled) {\n return (\n \n \n \n \n );\n }\n return (\n \n \n \n \n );\n};\n\nconst AccessForm = ({ record, notify, ...props }) => {\n const form = useForm();\n const [access, doSetAccess] = useState(record?.railHighway);\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"railHighway\",\n (fieldState) => {\n const { change, ...rest } = fieldState;\n },\n { dirty: true, touched: true, valid: true, value: true }\n );\n\n const setAccess = (val) => {\n form.change(\"railHighway\", val);\n doSetAccess(val);\n };\n\n return (\n \n \n \n Acres\n ),\n }}\n />\n \n \n SqFt\n ),\n }}\n />\n \n \n \n \n Feet\n ),\n }}\n />\n \n \n \n \n \n \n \n \n \n );\n};\n\nconst AccessShow = ({ record, classes, ...props }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n {record?.railHighway?.map((option) => (\n \n ))}\n
    \n
    \n
    \n
    \n );\n};\n\nconst CapabilitiesForm = ({\n capabilities,\n setCapabilities,\n disabled,\n handleChange,\n}) => {\n const classes = useStyles();\n\n const handleCapabilityChange = (evt, selectedItm) => {\n debugger;\n selectedItm.active = evt.target.checked ? \"true\" : \"false\";\n if (\n selectedItm.capability?.name === \"Forklift\" &&\n selectedItm.active === \"false\"\n )\n selectedItm.requiredValue = 0;\n setCapabilities(evt, selectedItm);\n };\n\n const handleValueChange = (evt, selectedItm, saveFlag) => {\n debugger;\n if (!disabled) {\n handleChange(evt, selectedItm, saveFlag);\n }\n };\n\n return (\n <>\n \n \n \n \n EQUIPMENT / CAPABILITIES\n \n \n {capabilities?.map((itm) => (\n \n handleCapabilityChange(evt, itm)}\n color=\"primary\"\n name={itm.capability?.name}\n disabled={disabled}\n checked={itm.active === \"true\"}\n />\n {itm.capability?.name}\n {itm.capability?.name === \"Forklift\" && (\n handleValueChange(evt, itm, false)}\n onBlur={(evt) => handleValueChange(evt, itm, true)}\n className={classes.capacity}\n InputLabelProps={{ shrink: true }}\n InputProps={{\n endAdornment: (\n \n Lbs\n \n ),\n inputProps: { min: 0, max: 999999, className: classes.input },\n disableUnderline: true,\n }}\n />\n )}\n \n ))}\n \n \n );\n};\n","import React from \"react\";\n\nimport { Box, Hidden } from \"@material-ui/core\";\n\nimport { HelpIcon } from \".\";\n\nexport const ToolTipIcon = ({ ml = 2, mt = 0, middle = true, label }) => {\n if (!label) return null;\n return (\n \n \n {/* */}\n \n {/* */}\n
    \n \n );\n};\n","import React from \"react\";\n\nimport {\n Box,\n Grid,\n makeStyles,\n MenuItem,\n Switch,\n TextField,\n Typography,\n} from \"@material-ui/core\";\n\nimport { ToolTipIcon } from \"../../../components/common/ToolTipIcon\";\nimport { getCommodityUnits } from \"../../../utils/loadTypeUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n input: {\n minWidth: \"16em\",\n },\n}));\n\nexport const Commodities = ({ commodities, setCommodities, disabled }) => {\n const classes = useStyles();\n\n const handleCommodityChange = (evt, selectedItm) => {\n debugger;\n selectedItm.active = evt.target.checked ? \"true\" : \"false\";\n setCommodities(evt, selectedItm);\n };\n\n const handleUnitChange = (evt, selectedItm) => {\n if (!disabled && evt.target.value) {\n debugger;\n selectedItm.units = evt.target.value;\n setCommodities(evt, selectedItm);\n }\n };\n\n return (\n \n \n {commodities\n ?.filter((itm) => itm.commodity.name !== \"Other\")\n .map((itm) => (\n <>\n \n handleCommodityChange(evt, itm)}\n color=\"primary\"\n disabled={disabled || itm.commodity?.name === \"Other\"}\n checked={itm.active === \"true\"}\n />\n {itm.commodity?.name}\n \n \n \n {itm.commodity?.name !== \"Other\" && (\n handleUnitChange(evt, itm)}\n className={classes.input}\n >\n {getCommodityUnits(itm.commodity).map((itm) => (\n {`${itm.name}: ${itm.description}`}\n ))}\n \n )}\n \n \n ))}\n \n \n );\n};\n","import React from \"react\";\n\nimport { Typography, useTheme } from \"@material-ui/core\";\nimport { orange } from \"@material-ui/core/colors\";\nimport { HIDE_FEATURE_BADGES } from \"../../utils/constants\";\n\nexport const BetaBadge = ({ ml = 1, mt = 0, label, ...props }) => {\n const theme = useTheme();\n const id = label?.toLowerCase()?.replace(/ /g, \"-\"); // Create an ID from the label\n\n if (HIDE_FEATURE_BADGES) return null;\n return (\n \n BETA\n \n );\n};\n\nexport const NewBadge = ({ ml = 1, mt = 0, label, ...props }) => {\n const theme = useTheme();\n const id = label?.toLowerCase()?.replace(/ /g, \"-\"); // Create an ID from the label\n\n if (HIDE_FEATURE_BADGES) return null;\n return (\n \n NEW\n \n );\n};\n","import React, { lazy, Suspense, useState, useEffect } from \"react\";\nimport { useHistory, useLocation } from \"react-router-dom/cjs/react-router-dom\";\n\nimport { makeStyles, Tab, Tabs } from \"@material-ui/core\";\n\nimport { Loading } from \"react-admin\";\n\nimport { getEnv, isAuthorized } from \"../../../utils/appUtils\";\nimport { AclType } from \"../../../utils/constants\";\nimport { BetaBadge, NewBadge } from \"../../../components/common/FeatureBadges\";\nimport { getLastValueFromUrl } from \"../../../utils/utils\";\n\n// Lazy Load Components\nconst AssetTypePanel = lazy(() => import(\"./scheduling/AssetTypePanel\"));\nconst BrandingPanel = lazy(() => import(\"./BrandingPanel\"));\nconst ChecklistPanel = lazy(() => import(\"./ChecklistPanel\"));\nconst DocumentsPanel = lazy(() => import(\"./DocumentsPanel\"));\nconst EventsTypePanel = lazy(() => import(\"./scheduling/EventsTypePanel\"));\nconst InvoicingPanel = lazy(() => import(\"./InvoicingPanel\"));\nconst SchedulePanel = lazy(() => import(\"./scheduling/SchedulePanel\"));\nconst ZapierPanel = lazy(() => import(\"./ZapierPanel\"));\n\nconst useStyles = makeStyles((theme) => ({\n tabs: {\n borderRight: `1px solid ${theme.palette.divider}`,\n minWidth: \"16em\",\n \"& span:nth-child(1)\": {\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n marginRight: theme.spacing(2),\n },\n },\n tabsContainer: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.paper,\n display: \"flex\",\n width: \"100%\",\n marginTop: theme.spacing(3),\n },\n hiddenTab: {\n display: \"none\",\n width: \"0%\",\n },\n visibleTab: {\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n marginLeft: theme.spacing(3),\n },\n}));\n\nconst SettingsTab = ({ disabled, ...props }) => {\n const classes = useStyles();\n const [tabValue, setTabValue] = useState(0);\n const history = useHistory();\n const location = useLocation();\n let tabIndex = 0;\n\n useEffect(() => {\n if (getLastValueFromUrl(history.location.pathname) === `settings`) {\n const searchParams = new URLSearchParams(\n location.pathname.includes(\"?\")\n ? window.location.search\n : location.search\n );\n const tabIndex = searchParams.get(\"t\");\n if (tabIndex) {\n setTabValue(parseInt(tabIndex));\n }\n } else {\n setTabValue(0);\n if (location.search) history.push(location.pathname);\n }\n }, [history, location.pathname, location.search]);\n\n const handleTabChange = (event, newValue) => {\n setTabValue(newValue);\n history.push(`${location.pathname}?t=${newValue}`);\n };\n\n return (\n
    \n \n {isAuthorized(AclType.INVOICES) && (\n \n )}\n \n \n \n Assets\n \n }\n />\n \n Schedule\n \n }\n />\n \n Events\n \n }\n />\n \n Checklist\n \n }\n />\n {getEnv() === \"dev\" && (\n \n Zapier\n \n }\n />\n )}\n \n {isAuthorized(AclType.INVOICES) && (\n \n }>\n \n \n \n )}\n \n }>\n \n \n \n \n }>\n \n \n \n \n }>\n \n \n \n \n }>\n \n \n \n \n }>\n \n \n \n \n }>\n \n \n \n {getEnv() === \"dev\" && (\n \n }>\n \n \n \n )}\n
    \n );\n};\n\nconst TabPanel = ({ classes, children, value, index, ...other }) => {\n if (value !== index) return null; // Prevent inactive tab content from mounting\n\n return (\n \n }>{children}\n \n );\n};\n\nexport default SettingsTab;\n","import React, { useEffect, useState, useRef } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { reloadYardCapabilityByReloadYard } from \"../../../graphql/queries\";\nimport { Chip, Grid, Typography, useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n EditButton,\n Labeled,\n Show,\n Tab,\n TabbedShowLayout,\n TextField,\n TopToolbar,\n useNotify,\n useShowController,\n} from \"react-admin\";\nimport { NotesTabShow } from \"../../../components/common/NotesTab\";\nimport { isAdmin, logError } from \"../../../utils/appUtils\";\nimport { getAisleFullName } from \"../../../utils/locationUtils\";\nimport { ContactInfo } from \"./ContactInfo\";\nimport { Capabilities } from \"./Capabilities\";\nimport { Commodities } from \"./Commodities\";\nimport SettingsTab from \"./SettingsTab\";\n\nconst _ = require(\"lodash\");\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n display: \"flex\",\n },\n selectedAccess: {\n display: \"flex\",\n flexWrap: \"wrap\",\n \"& > *\": {\n margin: theme.spacing(0.5),\n },\n marginBottom: theme.spacing(2),\n },\n}));\n\nconst MyYardShowActions = ({ basePath, data }) => (\n \n \n \n);\n\nexport const MyYardShow = (props) => {\n const classes = useStyles();\n const notify = useNotify();\n const { record } = useShowController(props);\n const [commodities, setCommodities] = useState([]);\n const [capabilities, setCapabilities] = useState([]);\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const isComponentMounted = useRef(true);\n\n useEffect(() => {\n if (isComponentMounted) getData();\n return () => (isComponentMounted.current = false);\n }, [record]);\n\n const getData = async () => {\n try {\n debugger;\n if (!record?.id) return;\n\n let data = _.orderBy(record.yardCommodities.items, [\"sortKey\"], [\"asc\"]);\n setCommodities([...data]);\n\n let res = await API.graphql(\n graphqlOperation(reloadYardCapabilityByReloadYard, {\n reloadYardId: record.id,\n })\n );\n data = res.data.reloadYardCapabilityByReloadYard.items;\n data = _.orderBy(data, [\"capability.sortKey\"], [\"asc\"]);\n setCapabilities(data);\n } catch (err) {\n logError(\"reloadYard:ReloadYardShow:getData\", err, notify);\n }\n };\n\n return (\n } title={record?.name}>\n \n \n \n \n {!isXSmall && (\n \n \n \n )}\n {!isXSmall && (\n \n \n \n )}\n \n
    \n \n \n {record?.areas?.items?.map((area) => (\n
    \n {area.name}\n
    \n {record?.aisles\n ? record.aisles.items\n .filter((itm) => itm.areaId === area.id)\n .map((aisle, idx) => (\n \n ))\n : null}\n
    \n
    \n ))}\n
    \n
    \n
    \n
    \n {!isXSmall && (\n \n \n \n )}\n {isAdmin() && (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n {isAdmin() && (\n \n \n \n )}\n
    \n
    \n );\n};\n","import React from \"react\";\nimport {\n ListItem,\n ListItemIcon,\n ListItemText,\n makeStyles,\n} from \"@material-ui/core\";\nimport { HelpIcon, TourIcon, VideoCamIcon, PublicIcon } from \"..\";\nimport { findFirstHrefFromChildren } from \"../../../utils/utils\";\n\nconst ICONS = {\n video: ,\n tour: ,\n custom: ,\n default: ,\n};\n\nconst getIcon = (href) => {\n if (href.match(/^video\\b/i)) return ICONS.video;\n if (href.match(/^tour\\b/i)) return ICONS.tour;\n if (href.match(/^custom\\b/i)) return ICONS.custom;\n return ICONS.default;\n};\n\nconst useStyles = makeStyles(() => ({\n listItem: {\n paddingBottom: 0,\n paddingTop: 0,\n },\n listItemIcon: {\n minWidth: \"30px\",\n },\n}));\n\nexport const MarkdownListItem = ({ children }) => {\n const classes = useStyles();\n\n const href = findFirstHrefFromChildren(children);\n const icon = href ? getIcon(href) : null;\n\n return (\n \n {icon && (\n {icon}\n )}\n \n {!icon && \"-\"} {children}\n \n \n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Link } from \"@material-ui/core\";\n\nexport const MarkdownLink = ({\n handleClose,\n href,\n callBack,\n children,\n setVideoId,\n}) => {\n const [mode, setMode] = useState(\"url\");\n const [param, setParam] = useState(\"\");\n\n useEffect(() => {\n if (!href) return;\n const params = href.match(/^(tour|video|custom)\\/(.+)/i);\n\n if (params?.length === 3) {\n setMode(params[1].toLowerCase());\n setParam(params[2]);\n }\n }, [href]);\n\n const handleClick = (e) => {\n e.preventDefault();\n switch (mode) {\n case \"video\":\n setVideoId(param);\n handleClose();\n break;\n case \"tour\":\n window.Produktly.startTour({ tourId: param });\n handleClose();\n break;\n case \"custom\":\n callBack();\n break;\n default:\n window.open(href, \"_blank\");\n handleClose();\n break;\n }\n };\n\n return (\n \n {children}\n \n );\n};\n","import React from \"react\";\nimport { List } from \"@material-ui/core\";\n\nexport const MarkdownList = ({ children }) => {\n return (\n \n {children}\n \n );\n};\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles({\n videoContainer: {\n position: \"fixed\",\n top: 0,\n left: 0,\n width: \"100vw\",\n height: \"100vh\",\n backgroundColor: \"#00000031\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n iframe: {\n width: 560,\n height: 315,\n },\n});\n\nexport const YTVideoModal = ({ videoId, setVideoId }) => {\n const classes = useStyles();\n const embedUrl = `https://www.youtube.com/embed/${videoId}`;\n\n return (\n
    setVideoId(\"\")} className={classes.videoContainer}>\n \n
    \n );\n};\n","import React, { useState } from \"react\";\nimport { Grid, Button } from \"@material-ui/core\";\nimport Markdown from \"react-markdown\";\nimport NavigateBeforeIcon from \"@material-ui/icons/NavigateBefore\"; // Correct import for the icon\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { MarkdownListItem } from \"./MarkdownListItem\";\nimport { MarkdownLink } from \"./MarkdownLink\";\nimport { MarkdownList } from \"./MarkdownList\";\nimport { YTVideoModal } from \"../YTVideoModal\";\n\nconst useStyles = makeStyles((theme) => ({\n h: {\n marginBottom: theme.spacing(0),\n marginTop: theme.spacing(0),\n },\n}));\n\nconst MarkdownViewer = ({\n handleClose,\n setVideoId,\n callBack,\n md,\n hasChildren,\n}) => {\n const classes = useStyles();\n return (\n \n );\n },\n ul: ({ children }) => (\n
    \n {children}\n
    \n ),\n li: MarkdownListItem,\n h1: ({ children }) =>

    {children}

    ,\n h2: ({ children }) =>

    {children}

    ,\n h3: ({ children }) =>
    {children}
    ,\n h4: ({ children }) =>
    {children}
    ,\n h5: ({ children }) =>
    {children}
    ,\n }}\n >\n {`${md}${hasChildren ? \"\\n\\n [More](custom/-)\" : \"\"}`}\n \n );\n};\n\nconst HelpViewer = ({ handleClose, md, children }) => {\n const [state, setState] = useState(\"main\");\n const [videoId, setVideoId] = useState(\"\");\n\n const handleBackClick = () => {\n setState(\"main\");\n };\n\n const callBack = () => {\n setState(\"customHelp\");\n };\n\n return (\n <>\n {state !== \"main\" && (\n \n \n \n )}\n {state === \"main\" && (\n \n )}\n {state === \"customHelp\" && children}\n {videoId && }\n \n );\n};\n\nexport { HelpViewer, MarkdownViewer };\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { useNotify, Button } from \"react-admin\";\nimport { IconButton, Drawer } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\nimport { HelpIcon } from \"./\";\nimport { helpPageByUrl } from \"../../graphql/queries\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { HelpViewer } from \"./HelpViewer/HelpViewer\";\nimport { useHistory, useLocation } from \"react-router-dom/cjs/react-router-dom\";\nimport { cleanUrlLink, isChildNull } from \"../../utils/utils\";\nimport { logError } from \"../../utils/appUtils\";\nimport { Typography } from \"@material-ui/core\";\nimport { CloseIcon } from \"../common\";\n\nconst ComingSoon = ({ url }) => {\n useEffect(() => {\n logError(\n \"HelpPage:EmptyHelpPage\",\n new Error(`Coming soon content detected at ${url}`)\n );\n }, [url]);\n\n return Coming Soon;\n};\n\nconst useStyles = makeStyles((theme) => ({\n help: {\n margin: theme.spacing(2),\n },\n helpHeader: {\n marginLeft: theme.spacing(2),\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n },\n helpHeaderMobile: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n margin: theme.spacing(2),\n width: \"100%\",\n },\n helpMobile: {\n margin: theme.spacing(2),\n width: \"100%\",\n },\n container: {\n marginRight: theme.spacing(2),\n },\n drawerPaper: {\n top: \"48px\",\n height: \"calc(100% - 58px)\",\n width: \"30%\",\n borderRadius: \"5px\",\n margin: \"5px\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n drawerMobile: {\n top: \"55px\",\n height: \"calc(100% - 58px)\",\n width: \"98%\",\n borderRadius: \"5px\",\n margin: \"5px\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n line: {\n marginTop: \"0px\",\n width: \"94%\",\n border: \"none\",\n borderTop: \"1px solid #ccc\",\n marginLeft: \"3%\",\n },\n title: {\n marginBottom: \"0px\",\n marginTop: \"0px\",\n },\n}));\n\nconst getHelpPageByUrl = async (url, notify) => {\n try {\n const input = {\n isLive: true,\n active: \"true\",\n url: {\n eq: url,\n },\n limit: 100,\n };\n const response = await API.graphql(graphqlOperation(helpPageByUrl, input));\n const helpPageData = response.data?.helpPageByUrl?.items?.[0];\n return helpPageData;\n } catch (error) {\n logError(\"HelpButton:getHelpPageByUrl\", error, notify);\n }\n};\n\nexport const HelpButton = ({\n helpClasses,\n children,\n dynamicContentComponent,\n}) => {\n const notify = useNotify();\n const history = useHistory();\n const location = useLocation();\n const [helpPage, setHelpPage] = useState(null);\n\n const pathname = history.location.pathname;\n const searchParams = new URLSearchParams(location.search);\n const tabNumber = searchParams.get(\"t\");\n\n const memoizeGetHelpPage = useCallback(\n async (url) => {\n setHelpPage(null);\n const fetchedHelpPage = await getHelpPageByUrl(url, notify);\n setHelpPage(fetchedHelpPage);\n },\n [notify]\n );\n\n useEffect(() => {\n const url = `${pathname}${tabNumber ? `/${tabNumber}` : \"\"}`;\n const cleanedUrl = cleanUrlLink(url);\n memoizeGetHelpPage(cleanedUrl);\n }, [memoizeGetHelpPage, tabNumber, pathname]);\n\n const classes = useStyles();\n helpClasses = helpClasses ? helpClasses : classes;\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const open = Boolean(anchorEl);\n const id = open ? \"popover-help\" : undefined;\n\n const isEmptyChildren = isChildNull(children);\n\n return (\n
    \n \n \n \n

    Help center

    \n \n \n \n
    \n
    \n
    \n {!helpPage &&\n (isEmptyChildren ? (\n \n ) : (\n children\n ))}\n {helpPage && (\n \n {dynamicContentComponent}\n \n )}\n
    \n \n \n );\n};\n\nexport const HelpIconButton = ({ helpClasses, children }) => {\n const classes = useStyles();\n helpClasses = helpClasses ? helpClasses : classes;\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const open = Boolean(anchorEl);\n const id = open ? \"audit-help\" : undefined;\n\n return (\n
    \n \n \n \n \n
    \n {children}\n
    \n \n
    \n );\n};\n","import React from \"react\";\nimport { FileInput, SelectInput, TextInput, useNotify } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { Box } from \"@material-ui/core\";\nimport { AttachFileIcon } from \"../../../components/common\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport {\n ACCEPTED_FILES,\n MAX_FILES,\n SubscriptionStatusChoices,\n} from \"../../../utils/constants\";\nimport { handleFileChange } from \"../../../utils/fileUtils\";\n\nconst Subscription = (props) => {\n const form = useForm();\n const notify = useNotify();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    Drop file(s) to upload,\n or click to select.\n

    \n }\n accept={ACCEPTED_FILES}\n multiple\n maxFiles={MAX_FILES}\n options={{ maxFiles: MAX_FILES }}\n onChange={(value) =>\n handleFileChange(\"attachments\", value, form, notify)\n }\n >\n \n \n
    \n
    \n );\n};\n\nexport default Subscription;\n","import React from \"react\";\nimport { Typography } from \"@material-ui/core\";\nimport {\n AddIcon,\n CloseIcon,\n AisleOneSidedIcon,\n AisleTwoSidedIcon,\n} from \"../../../components/common\";\n\nexport const AttachmentsHelp = ({ classes }) => (\n <>\n \n Attachments\n \n
      \n
    • \n \n Document Categories: Add unique document categories\n for categorizing assetts within Document Repository. Use of categories\n is optional.\n \n
    • \n
    • \n \n Logo: Attach corporate logo image to be used for\n branding your assetts. We recommend using a transparent .png file\n format.{\" \"}\n \n
    • \n
    • \n \n Yard Map: Attach image of graphical layout of the\n Reload Yard.\n \n
    • \n
    \n \n);\n\nexport const BusinessInformationHelp = ({ classes }) => (\n <>\n \n Business Information\n \n
      \n
    • \n \n Name: Full business name.\n \n
    • \n
    • \n \n Phone: Primary business phone number.\n \n
    • \n
    • \n \n Email: Billing email address.\n \n
    • \n
    • \n \n Website: Business website URL, if available.\n \n
    • \n
    • \n \n Address: Physical Reload Yard address.\n \n
    • \n
    • \n \n Invoice Number Prefix: Used for generating unique\n invoice numbers (E.g. use company initials){\" \"}\n \n
    • \n
    • \n \n Tax Rates: Map the Tax Codes and Tax Rates defined in\n QuickBooks. Must have at least 1 rate defined. If Tax Code or Tax Rate\n is changed later, you will need to visit each Account and select the\n new Tax Rate Code for all services where it is used.\n \n
    • \n
    \n \n);\n\nexport const CommoditiesHelp = ({ classes }) => (\n <>\n \n Commodities\n \n
      \n
    • \n \n Commodities: Select Commodities handled. Define\n default Units of Measure for each commodity.\n \n
    • \n
    • \n \n Equipment / Capabilities: Select pieces of equipment\n in operation.\n \n
    • \n
    • \n \n Forklift: Indicate Maximum weight capacity.\n \n
    • \n
    \n \n);\n\nexport const AccessAndCapacityHelp = ({ classes }) => (\n <>\n \n Access and Capacity\n \n
      \n
    • \n \n Open Air Yard Capacity: Outdoors yard area / capacity\n in Acres.\n \n
    • \n
    • \n \n Covered / Warehouse Capacity: Indoors warehouse\n capacity in Square Feet.\n \n
    • \n
    • \n \n Track Capcity: Yard track length in Feet.\n \n
    • \n
    • \n \n Serving Rail Carrier: Primary rail service.\n \n
    • \n
    • \n \n Accessible Highway(s): List nearby intestates and\n major highways. Enter one at a time and press the{\" \"}\n \n ADD button to add to a list.\n \n
    • \n
    \n \n);\n\nexport const LocationsHelp = ({ classes }) => (\n <>\n \n Locations\n \n \n Provide all named Yard Locations in a sequential/walking order, beginning\n from first aisle, moving from one location to the next. Include both\n outdoor yard and warehouse locations, if any. These will be used to guide\n crews through each location to perform Inventory Audits. The Location\n Layout wizard can handle one-sided, double-sided aisles, end-caps, and\n custom location names. location full name consists of: Area Prefix + Zone\n Prefix + Location Name.\n \n
      \n
    • \n \n Areas: Add / Edit / Delete areas in your transload.\n Examples include Yard / Lot, Warehouse, Tracks.\n \n
    • \n
    • \n \n Zones: Add / Edit / Delete designated zones for each\n Area. You can drag and drop zones to re-order Zone dropdown options.\n Clicking Zone name opens Zone Edit dialog. Zone examples include\n Hazmat / Covered, Climate Control, Customer-assigned.\n \n
    • \n
    • \n \n Locations: Physical yard locations (aisles, pads,\n enclosed pans, tracks, etc.).\n \n
    • \n
        \n
      • \n \n Add Location: Enter one location at a time and\n press the \n ADD button or hit Enter key.\n \n
      • \n
      • \n \n Area: Select one of the pre-defined areas where to\n add new Location.\n \n
      • \n
      • \n \n Zone: Select one of the pre-defined zones where to\n add new Location.\n \n
      • \n
      • \n \n Aisle Layout: Select{\" \"}\n {\" \"}\n one-sided/end-cap/custom or{\" \"}\n double-sided aisle\n layout (sides A & B) using the toggle buttons.\n \n
      • \n
      • \n \n \n ADD: \n Press the ADD button, or hit Enter key. Adding a two-sided aisle\n location, will add two locations (A and B).\n \n
      • \n
      • \n \n Location List You can remove unnecessary/mistakenly\n added location by pressing {\" \"}\n icon next to location name. You can also re-arrange locations by\n dragging and dropping into correct order. Clicking on location name,\n opens Location Edit dialog.\n \n
      • \n
      \n
    \n \n);\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n BusinessInformationHelp,\n AttachmentsHelp,\n CommoditiesHelp,\n AccessAndCapacityHelp,\n LocationsHelp,\n} from \"./ReloadYardHelpComponents\";\n\nconst useStyles = makeStyles(() => ({\n icon: {\n verticalAlign: \"middle\",\n display: \"inline-flex\",\n },\n}));\n\nexport const ReloadYardHelp = (props) => {\n const classes = useStyles();\n const tabNames = props?.location.pathname.split(\"/\");\n const tab = tabNames?.length > 3 ? tabNames[3] : \"\";\n\n switch (tab) {\n case \"\":\n return ;\n case \"settings\":\n return ;\n case \"commodities\":\n return ;\n case \"capabilities\":\n return ;\n case \"layout\":\n return ;\n default:\n return null;\n }\n};\n","import React, { lazy, Suspense, useState, useEffect } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n aisleByActiveBySortKey,\n areaBySortKey,\n} from \"../../../../graphql/reloadyard/custom-queries\";\n\nimport { makeStyles, Tab, Tabs } from \"@material-ui/core\";\n\nimport { logError } from \"../../../../utils/appUtils\";\nimport { AppType } from \"../../../../utils/constants\";\n\n// Lazy Load Components\nconst Areas = lazy(() => import(\"./Areas\"));\nconst Zones = lazy(() => import(\"./Zones\"));\nconst Aisles = lazy(() => import(\"./Aisles\"));\n// import Tags from './Tags';\n\nconst useStyles = makeStyles((theme) => ({\n tabs: {\n borderRight: `1px solid ${theme.palette.divider}`,\n \"& span:nth-child(1)\": {\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n marginRight: theme.spacing(3),\n },\n },\n tabsContainer: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.paper,\n display: \"flex\",\n width: \"100%\",\n },\n tabContent: {\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n },\n}));\n\nconst updateAppAreas = (areas) => {\n if (window.appUser?.appType !== AppType.ADMIN) {\n const areaMap = {};\n window.appUser.reloadYard.areas.items = areas;\n areas.forEach((itm) => (areaMap[itm.id] = itm));\n window.appUser.reloadYard.areaMap = areaMap;\n }\n};\n\nexport const LayoutTab = ({ record, ...props }) => {\n const classes = useStyles();\n const [tabValue, setTabValue] = React.useState(0);\n const [areas, setAreas] = useState([]);\n const [aisles, setAisles] = useState([]);\n\n useEffect(() => {\n getData();\n }, [record]);\n\n const getData = async () => {\n try {\n const areaRsponse = await API.graphql(\n graphqlOperation(areaBySortKey, { reloadYardId: record.id })\n );\n const areas = areaRsponse.data.areaBySortKey.items.filter(\n (itm) => itm.active === \"true\"\n );\n areas.forEach((area) => {\n area.zones.items = area.zones.items.filter(\n (itm) => itm.active === \"true\"\n );\n });\n setAreas(areas);\n\n const aisleResponse = await API.graphql(\n graphqlOperation(aisleByActiveBySortKey, {\n reloadYardId: record.id,\n activeSortKey: { beginsWith: { active: \"true\" } },\n limit: 1000,\n })\n );\n debugger;\n const aisles = aisleResponse.data.aisleByActiveBySortKey.items;\n setAisles(aisles);\n\n updateAppAreas(areas);\n } catch (err) {\n logError(\"reloadYard:YardLayout:getData\", err, false);\n }\n };\n\n const handleChange = (event, newValue) => {\n setTabValue(newValue);\n };\n\n return (\n
    \n \n \n \n {/* */}\n \n \n \n Loading...
    }>\n \n \n \n \n Loading...}>\n \n \n \n {/* \n \n */}\n \n Loading...}>\n \n \n \n \n );\n};\n\nconst TabPanel = (props) => {\n const { classes, children, value, index, ...other } = props;\n if (value !== index) return null; // Prevent inactive tab content from mounting\n\n return (\n \n Loading...}>{children}\n \n );\n};\n","import React, { useEffect, useState, useRef } from \"react\";\nimport { API, graphqlOperation, Storage } from \"aws-amplify\";\nimport {\n reloadYardCapabilityByReloadYard,\n reloadYardCommodityByActiveBySortKey,\n} from \"../../../graphql/queries\";\nimport {\n updateReloadYardCapability,\n updateReloadYardCommodity,\n} from \"../../../graphql/mutations\";\n\nimport { Box, useMediaQuery } from \"@material-ui/core\";\n\nimport {\n Edit,\n FormTab,\n Loading,\n SaveButton,\n TabbedForm,\n Toolbar,\n TopToolbar,\n useEditController,\n useNotify,\n useRedirect,\n} from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { NotesTab } from \"../../../components/common/NotesTab\";\nimport {\n isAdmin,\n logError,\n setupCommodityMaps,\n setupLocationMaps,\n} from \"../../../utils/appUtils\";\nimport {\n getDirFileKey,\n saveRemoveFile,\n saveRemoveFiles,\n} from \"../../../utils/fileUtils\";\nimport { FilePaths, NoteType } from \"../../../utils/constants\";\nimport Subscription from \"../../../adminApp/resources/reloadYards/Subscription\";\nimport { ReloadYardHelp } from \"./ReloadYardHelp\";\nimport { ContactInfo } from \"./ContactInfo\";\nimport { Capabilities } from \"./Capabilities\";\nimport { Commodities } from \"./Commodities\";\nimport { LayoutTab } from \"./layout/LayoutTab\";\nimport SettingsTab from \"./SettingsTab\";\n\nconst _ = require(\"lodash\");\n\nexport const MyYardEdit = (props) => {\n return (\n }\n mutationMode=\"pessimistic\"\n actions={}\n >\n \n \n );\n};\n\nconst TabbedFormContainer = (props) => {\n const notify = useNotify();\n const isComponentMounted = useRef(true);\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const { record } = useEditController(props);\n const [commodities, setCommodities] = useState([]);\n const [capabilities, setCapabilities] = useState([]);\n const [isLoaded, setIsLoaded] = useState();\n\n useEffect(() => {\n if (isComponentMounted) getCommCapaData();\n\n return () => (isComponentMounted.current = false);\n }, []);\n\n const getCommCapaData = async () => {\n try {\n if (isLoaded) return;\n setIsLoaded(true);\n let res = await API.graphql(\n graphqlOperation(reloadYardCommodityByActiveBySortKey, {\n reloadYardId: record.id,\n })\n );\n let data = res.data.reloadYardCommodityByActiveBySortKey.items;\n data = _.orderBy(data, [\"sortKey\"], [\"asc\"]);\n setCommodities([...data]);\n res = await API.graphql(\n graphqlOperation(reloadYardCapabilityByReloadYard, {\n reloadYardId: record.id,\n })\n );\n data = res.data.reloadYardCapabilityByReloadYard.items;\n data = _.orderBy(data, [\"capability.sortKey\"], [\"asc\"]);\n setCapabilities(data);\n } catch (err) {\n logError(\"resources:reloadYard:MyYard:getData\", err, notify);\n }\n };\n\n const validateForm = (values) => {\n const errors = {};\n return errors;\n };\n\n const handleCommodityChange = async (evt, selectedItm) => {\n debugger;\n try {\n const toUpdateCommodity = { ...selectedItm };\n delete toUpdateCommodity.commodity;\n delete toUpdateCommodity.createdAt;\n delete toUpdateCommodity.updatedAt;\n const response = await API.graphql(\n graphqlOperation(updateReloadYardCommodity, {\n input: toUpdateCommodity,\n })\n );\n const yardCommodity = response.data.updateReloadYardCommodity;\n\n const newCommodities = commodities.map((itm) =>\n itm.id === yardCommodity.id ? yardCommodity : itm\n );\n setCommodities(newCommodities);\n const commodityMap = {};\n newCommodities.forEach((itm) => (commodityMap[itm.id] = itm));\n window.appUser.reloadYard.yardCommodities = { items: newCommodities };\n window.appUser.reloadYard.activeYardCommodities = {\n items: newCommodities.filter((itm) => itm.active === \"true\"),\n };\n window.appUser.reloadYard.yardCommodityMap = commodityMap;\n\n notify(\"Load Type updated succesfully.\", \"info\");\n } catch (err) {\n logError(\n \"resources:reloadYard:MyYard:handleCommodityChange\",\n err,\n notify\n );\n }\n };\n\n const handleCapabilityChange = async (evt, selectedItm) => {\n try {\n debugger;\n const toUpdateCapability = { ...selectedItm };\n delete toUpdateCapability.capability;\n delete toUpdateCapability.createdAt;\n delete toUpdateCapability.updatedAt;\n const response = await API.graphql(\n graphqlOperation(updateReloadYardCapability, {\n input: toUpdateCapability,\n })\n );\n const yardCapability = response.data.updateReloadYardCapability;\n\n const newCapabilities = capabilities.map((itm) =>\n itm.id === yardCapability.id ? yardCapability : itm\n );\n setCapabilities(newCapabilities);\n notify(\"Capability updated succesfully.\", \"info\");\n } catch (err) {\n logError(\n \"resources:reloadYard:MyYard:handleCapabilityChange\",\n err,\n notify\n );\n }\n };\n\n const handleValueChange = async (evt, selectedItm, saveFlag) => {\n try {\n setCapabilities(\n capabilities.map((itm) =>\n itm.id === selectedItm.id\n ? { ...itm, requiredValue: evt.target.value }\n : itm\n )\n );\n debugger;\n\n if (saveFlag) {\n // consider calling handleCapabilityChange (evt, {...selectedItm, requiredValue: evt.target.value}, notifyFlag=false)\n const toUpdateCapability = {\n ...selectedItm,\n requiredValue: evt.target.value,\n };\n delete toUpdateCapability.capability;\n delete toUpdateCapability.createdAt;\n delete toUpdateCapability.updatedAt;\n await API.graphql(\n graphqlOperation(updateReloadYardCapability, {\n input: toUpdateCapability,\n })\n );\n }\n } catch (err) {\n logError(\"resources:reloadYard:MyYard:handleValueChange\", err, notify);\n }\n };\n\n if (!record) return ;\n return (\n }\n validate={validateForm}\n submitOnEnter={false}\n // warnWhenUnsavedChanges\n >\n \n \n \n {!isXSmall && (\n \n \n \n )}\n {!isXSmall && (\n \n \n \n )}\n \n \n \n \n \n \n \n {!isXSmall && (\n \n \n \n \n \n )}\n {isAdmin() && (\n \n \n \n )}\n {isAdmin() && (\n \n \n \n )}\n \n );\n};\n\nconst YardEditActions = ({ basePath, data, resource, ...props }) => {\n if (!data) return null;\n return (\n \n \n \n \n \n \n );\n};\n\nconst MyYardEditToolbar = ({ record, ...props }) => {\n const notify = useNotify();\n const redirect = useRedirect();\n\n const removeImageFile = async (record, data, source) => {\n if (record[source]) {\n const key = record[source].key;\n if (key) await Storage.remove(key);\n\n if (data) {\n data[source] = null;\n window.appUser.reloadYard[source] = null;\n }\n }\n };\n\n const saveTransformImage = async (record, data, source, dir) => {\n debugger;\n if (!data[source]) await removeImageFile(record, data, source);\n else if (data[source] && !data[source].key) {\n if (record[source]) await removeImageFile(record, null, source);\n\n const key = getDirFileKey(data[source].rawFile, dir);\n let response = await Storage.put(key, data[source].rawFile, {\n level: \"public\",\n contentType: data[source].rawFile.type,\n });\n\n if (response.key) {\n const s3Object = {\n bucket: API._options.aws_user_files_s3_bucket,\n region: API._options.aws_user_files_s3_bucket_region,\n key: response.key,\n };\n\n data[source] = s3Object;\n window.appUser.reloadYard[source] = s3Object;\n } else throw new Error(`Storage.put failed: ${key}`);\n }\n\n if (data[source]) {\n delete data[source].rawFile;\n delete data[source].title;\n delete data[source].src;\n }\n };\n\n const transform = async (data) => {\n data = { ...data };\n try {\n await saveTransformImage(record, data, \"logoImage\", FilePaths.LOGO);\n await saveTransformImage(record, data, \"mapImage\", FilePaths.MAPS);\n\n await saveRemoveFile(\n record,\n data,\n \"bolTemplate\",\n `${data.id}/${FilePaths.RELOADYARD}`\n );\n await saveRemoveFile(\n record,\n data,\n \"receiptTemplate\",\n `${data.id}/${FilePaths.RELOADYARD}`\n );\n\n // Used in Admin Portal\n await saveRemoveFiles(\n record,\n data,\n \"attachments\",\n `${data.id}/${FilePaths.RELOADYARD}`\n );\n } catch (err) {\n logError(\"reloadYard:MyYardEditToolbar:transform\", err, notify);\n return Promise.reject();\n }\n\n data.fileCategories = data.fileCategories?.filter((itm) => itm?.name);\n data.fileCategories = data.fileCategories?.map((itm) =>\n itm.key\n ? itm\n : { key: itm.name.toLowerCase().replace(/\\s/g, \"\"), name: itm.name }\n );\n data.fileCategories =\n data.fileCategories?.length > 0 ? data.fileCategories : null;\n\n data.state = data.state.toUpperCase();\n data.invoiceNumberPrefix = data.invoiceNumberPrefix.toUpperCase();\n\n if (data.notes?.length > 0) {\n data.notes.forEach((element) => {\n if (!element.date) {\n element.type = NoteType.GENERIC;\n element.date = new Date();\n element.by = window.appUser?.fullName;\n }\n });\n } else data.notes = undefined;\n\n debugger;\n delete data.aisles;\n delete data.areas;\n delete data.documents;\n delete data.locations;\n delete data.mapAreaId;\n delete data.yardCommodities;\n delete data.zones;\n delete data.eventTypes;\n delete data.checklists;\n return data;\n };\n\n const onSuccess = ({ data }) => {\n debugger;\n setupLocationMaps(data);\n setupCommodityMaps(data);\n window.appUser.reloadYard = data;\n notify(\"My Yard updated successfully\");\n redirect(`/reloadYards/${data.id}/show`);\n };\n\n const onFailure = (error) => {\n logError(\"reloadYard:MyYardEditToolbar:onFailure\", error, notify);\n };\n\n return (\n \n \n \n );\n};\n","import React from \"react\";\n\nimport {\n Show,\n TextField,\n EditButton,\n TopToolbar,\n SimpleShowLayout,\n} from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\n\nconst SetupShow = (props) => (\n }>\n \n \n \n \n \n\n \n \n \n \n \n \n);\n\nconst SetupShowActions = ({ basePath, data }) => (\n \n \n \n \n);\n\nexport default SetupShow;\n","export default function useForm(\n state,\n dispatch,\n propertyName,\n type = \"YARD_INFO\"\n) {\n function handleChange(event) {\n const values = state[propertyName];\n const newValues = {\n ...values,\n [event.target.name]: event.target.value,\n };\n dispatch({ type, payload: newValues });\n }\n\n return { handleChange };\n}\n\nexport const EMAIL_REGEX = /^\\w+([.-]?\\w+)*@\\w+([.-]?\\w+)*(\\.\\w{2,3})+$/;\nexport const URL_REGEX =\n /^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)?[a-z0-9]+([-.]{1}[a-z0-9]+)*\\.[a-z]{2,5}(:[0-9]{1,6})?(\\/.*)?$/;\n","import { createContext } from \"react\";\nimport { EMAIL_REGEX, URL_REGEX } from \"../../../../utils/useForm\";\n\nexport const validateYard = (values) => {\n let errors = {};\n if (!values.firstName || values.firstName.trim().length === 0)\n errors.firstName = \"First name is required\";\n if (!values.lastName || values.lastName.trim().length === 0)\n errors.lastName = \"Last name is required\";\n if (!values.userPhone || values.userPhone.trim().length === 0)\n errors.userPhone = \"User phone is required\";\n if (!values.businessName || values.businessName.trim().length === 0)\n errors.businessName = \"Business name is required\";\n if (!values.phoneNumber || values.phoneNumber.trim().length === 0)\n errors.phoneNumber = \"Phone number is required\";\n if (!values.email) errors.email = \"Email is required\";\n else if (!EMAIL_REGEX.test(values.email)) errors.email = \"Invalid email\";\n if (values.website && !URL_REGEX.test(values.website))\n errors.website = \"Invalid URL\";\n if (!values.street || values.street.trim().length === 0)\n errors.street = \"Street name is required\";\n if (!values.city || values.city.trim().length === 0)\n errors.city = \"City is required\";\n if (!values.state || values.state.trim().length === 0)\n errors.state = \"State is required\";\n if (!values.zip || values.zip.trim().length === 0)\n errors.zip = \"Zip code is required\";\n if (!values.country || values.country.trim().length === 0)\n errors.country = \"Country is required\";\n if (!values.lotCapacityAcres)\n errors.lotCapacityAcres = \"Yard capacity is required\";\n else if (isNaN(values.lotCapacityAcres) || values.lotCapacityAcres < 0)\n errors.lotCapacityAcres = \"Invalid Yard capacity\";\n if (values.trackCapacity && isNaN(values.trackCapacity))\n errors.trackCapacity = \"Invalid track capacity\";\n if (!values.warehouseCapacity)\n errors.warehouseCapacity = \"Warehouse capacity is required\";\n else if (isNaN(values.warehouseCapacity) || values.warehouseCapacity < 0)\n errors.warehouseCapacity = \"Invalid Warehouse capacity\";\n return errors;\n};\n\nconst validateCommodities = (values) => {\n return {};\n};\n\nexport const validateSubscription = (values) => {\n let errors = {};\n debugger;\n if (!values.trialPeriod) errors.trialPeriod = \"Trial Period is required\";\n else if (isNaN(values.trialPeriod) || values.trialPeriod < 0)\n errors.trialPeriod = \"Invalid Trial Period\";\n if (!values.productId || values.productId.trim().length === 0)\n errors.productId = \"Product is required\";\n return errors;\n};\n\nexport const initState = {\n yardInfo: {\n accessToRailHighway: [],\n },\n commodities: [],\n capabilities: [],\n forkLiftMaxCapacity: null,\n areas: [],\n zones: [],\n validators: [validateYard, validateCommodities, validateSubscription],\n errors: {},\n note: \"\",\n tosAccept: {},\n subscription: {\n customerId: \"\",\n productId: \"\",\n priceList: [],\n trialPeriod: \"\",\n },\n activeStep: 0,\n};\n\nexport default createContext(initState);\n","import React, { useContext } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n Divider,\n FormControl,\n FormHelperText,\n Grid,\n InputLabel,\n MenuItem,\n OutlinedInput,\n TextField,\n Typography,\n} from \"@material-ui/core\";\n\nimport { useField } from \"react-final-form\";\nimport { CountryList } from \"../../../../utils/constants\";\nimport useForm from \"../../../../utils/useForm\";\nimport SetupContext, { validateYard } from \"./context\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n },\n selectedAccess: {\n display: \"flex\",\n flexWrap: \"wrap\",\n marginTop: theme.spacing(1),\n marginLeft: theme.spacing(1),\n \"& > *\": {\n margin: theme.spacing(0.5),\n },\n },\n addButton: {\n marginTop: theme.spacing(1.25),\n marginLeft: theme.spacing(1),\n },\n addInput: {\n marginTop: theme.spacing(1),\n minWidth: \"50%\",\n },\n divider: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n },\n}));\n\nexport default function YardInfo() {\n const classes = useStyles();\n const { state, dispatch } = useContext(SetupContext);\n const { yardInfo } = state;\n const {\n input: { onChange },\n } = useField(\"setupData\");\n\n const { handleChange } = useForm(state, dispatch, \"yardInfo\");\n\n const handleRecordChange = (evt) => {\n debugger;\n handleChange(evt);\n onChange();\n };\n\n const handleBlur = (evt) => {\n const errors = validateYard(state.yardInfo);\n dispatch({ type: \"ERROR\", payload: errors });\n };\n\n let { errors } = state;\n\n return (\n
    \n \n \n User information\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n
    \n \n Business information\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Website\n \n \n {errors[\"website\"] ? errors[\"website\"] : \"\"}\n \n \n \n \n \n
    \n \n
    \n
    \n \n Business address\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n {CountryList.map((option) => (\n \n {option.name}\n \n ))}\n \n \n
    \n
    \n );\n}\n","export default function reducer(state, action) {\n switch (action.type) {\n case \"YARD_INFO\":\n return {\n ...state,\n yardInfo: action.payload,\n };\n case \"ADD_ACCESS\":\n const access = state.yardInfo.accessToRailHighway\n ? state.yardInfo.accessToRailHighway\n : [];\n return {\n ...state,\n yardInfo: {\n ...state.yardInfo,\n accessToRailHighway: [...access, action.payload],\n },\n };\n case \"REMOVE_ACCESS\":\n const accessToRailHighway = state.yardInfo.accessToRailHighway.filter(\n (access) => access !== action.payload\n );\n return {\n ...state,\n yardInfo: { ...state.yardInfo, accessToRailHighway },\n };\n case \"ERROR\":\n return {\n ...state,\n errors: action.payload,\n };\n case \"CLEAR_ERROR\":\n return {\n ...state,\n errors: {},\n };\n case \"CHANGE_SERVICE\":\n debugger;\n return {\n ...state,\n services: [...action.payload],\n };\n case \"ADD_COMMODITY\":\n return {\n ...state,\n commodities: [\n ...state.commodities.map((itm) =>\n itm.id === action.payload.id ? { ...itm, active: true } : itm\n ),\n ],\n };\n case \"REMOVE_COMMODITY\":\n return {\n ...state,\n commodities: [\n ...state.commodities.map((itm) =>\n itm.id === action.payload.id ? { ...itm, active: false } : itm\n ),\n ],\n };\n case \"ADD_CAPABILITY\":\n return {\n ...state,\n capabilities: [\n ...state.capabilities.map((itm) =>\n itm.id === action.payload.id ? { ...itm, active: true } : itm\n ),\n ],\n };\n case \"SET_FORKLIFT_MAX_CAPACITY\":\n return {\n ...state,\n forkLiftMaxCapacity: action.payload,\n };\n case \"REMOVE_CAPABILITY\":\n return {\n ...state,\n capabilities: [\n ...state.capabilities.map((itm) =>\n itm.id === action.payload.id ? { ...itm, active: false } : itm\n ),\n ],\n };\n case \"NOTE\":\n return {\n ...state,\n note: action.payload,\n };\n case \"SET_PRODUCT_PRICES\":\n debugger;\n return {\n ...state,\n subscription: {\n ...state.subscription,\n priceList: action.payload,\n },\n };\n case \"SET_SUBSCRIPTION\":\n debugger;\n return {\n ...state,\n subscription: {\n ...action.payload,\n },\n };\n case \"UPDATE_STATE\":\n return {\n ...action.payload,\n validators: state.validators,\n };\n default:\n break;\n }\n return state;\n}\n","import React, { useState, useContext } from \"react\";\nimport {\n Grid,\n TextField,\n Button,\n Chip,\n InputAdornment,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport AddIcon from \"@material-ui/icons/Add\";\n\nimport { useField } from \"react-final-form\";\nimport useForm from \"../../../../utils/useForm\";\nimport SetupContext, { validateYard } from \"./context\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: theme.spacing(4),\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n },\n selectedAccess: {\n display: \"flex\",\n flexWrap: \"wrap\",\n marginTop: theme.spacing(2),\n marginLeft: theme.spacing(2),\n \"& > *\": {\n margin: theme.spacing(0.5),\n },\n },\n addButton: {\n marginTop: theme.spacing(1.25),\n marginLeft: theme.spacing(1),\n },\n addInput: {\n marginTop: theme.spacing(1),\n\n minWidth: \"50%\",\n },\n divider: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n },\n}));\n\nexport default function AccessAndCapacity() {\n const { state, dispatch } = useContext(SetupContext);\n const { yardInfo } = state;\n const {\n input: { onChange },\n } = useField(\"setupData\");\n const { handleChange } = useForm(state, dispatch, \"yardInfo\");\n const [newAcess, setNewAcess] = useState();\n const classes = useStyles();\n let { errors } = state;\n\n const handleRecordChange = (evt) => {\n debugger;\n onChange();\n handleChange(evt);\n };\n\n const addAccess = () => {\n debugger;\n if (!newAcess || yardInfo.accessToRailHighway?.includes(newAcess)) return;\n dispatch({ type: \"ADD_ACCESS\", payload: newAcess });\n setNewAcess(\"\");\n onChange();\n };\n\n const handleSubmit = (evt) => {\n if (evt.key === \"Enter\") {\n addAccess(\"Add\");\n }\n };\n\n const deleteAccess = (toDelete) => {\n dispatch({ type: \"REMOVE_ACCESS\", payload: toDelete });\n onChange();\n };\n\n const handleBlur = (evt) => {\n const errors = validateYard(state.yardInfo);\n dispatch({ type: \"ERROR\", payload: errors });\n };\n\n return (\n
    \n \n \n Acres\n ),\n }}\n autoFocus\n required\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={yardInfo.lotCapacityAcres}\n onChange={handleRecordChange}\n onBlur={handleBlur}\n />\n \n \n SqFt\n ),\n }}\n value={yardInfo.warehouseCapacity}\n onChange={handleRecordChange}\n >\n \n \n Feet\n ),\n }}\n value={yardInfo.trackCapacity}\n onChange={handleRecordChange}\n >\n \n \n \n \n \n \n \n setNewAcess(evt.target.value.toUpperCase())}\n inputProps={{\n style: { textTransform: \"uppercase\" },\n }}\n />\n \n \n }\n >\n Add\n \n \n \n
    \n {yardInfo?.accessToRailHighway?.map((option) => (\n alert}\n onDelete={() => deleteAccess(option)}\n />\n ))}\n
    \n
    \n
    \n
    \n
    \n
    \n );\n}\n","import React, { useContext } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { Grid } from \"@material-ui/core\";\nimport { SelectInput } from \"react-admin\";\nimport { TextField, Typography } from \"@material-ui/core\";\nimport { useField } from \"react-final-form\";\nimport SetupContext from \"./context\";\nimport { NewCustomerStatusOptions } from \"../../../../utils/constants\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n marginTop: theme.spacing(3),\n marginBottom: theme.spacing(2),\n },\n}));\n\nexport default function Note() {\n const classes = useStyles();\n const { state, dispatch } = useContext(SetupContext);\n const {\n input: { onChange },\n } = useField(\"setupData\");\n\n const handleRecordChange = (evt) => {\n onChange();\n dispatch({ type: \"NOTE\", payload: evt.target.value });\n };\n\n return (\n
    \n \n \n \n \n \n TOS Telemetry: \n cognitoId: {state.tosAccept.cognitoId} \n IP Address: {state.tosAccept.ip}\n \n \n \n \n \n
    \n );\n}\n","import React, { useContext, useEffect, useState, useRef } from \"react\";\nimport { API } from \"aws-amplify\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { Grid, TextField, MenuItem, Typography } from \"@material-ui/core\";\nimport { useField } from \"react-final-form\";\nimport useForm from \"../../../../utils/useForm\";\nimport SetupContext, { validateSubscription } from \"./context\";\n\nimport { useNotify } from \"react-admin\";\nimport { logError } from \"../../../../utils/appUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n },\n}));\n\nexport default function Subscription() {\n const classes = useStyles();\n const notify = useNotify();\n const isComponentMounted = useRef(true);\n const { state, dispatch } = useContext(SetupContext);\n const { subscription } = state;\n\n const [products, setProducts] = useState([]);\n const [prices, setPrices] = useState([]);\n const [priceList, setPriceList] = useState([]);\n\n const {\n input: { onChange },\n } = useField(\"setupData\");\n\n useEffect(() => {\n if (isComponentMounted) getData();\n return () => (isComponentMounted.current = false);\n }, []);\n\n useEffect(() => {\n if (prices && subscription) {\n const newPices = prices.filter(\n (price) => price.product === subscription.productId\n );\n setPriceList(newPices);\n }\n }, [prices, subscription]);\n\n const getData = async () => {\n try {\n const response = await API.post(\n \"transREST\",\n \"/stripe-list-products-prices\",\n {\n body: {\n active: true,\n },\n }\n );\n debugger;\n\n if (response.err)\n logError(\n \"newYardData:Subscription:getData:response\",\n response.err,\n notify\n );\n else {\n setProducts(response.productList.products.data);\n setPrices(response.productList.prices.data);\n\n const productPrices = response.productList.prices.data.filter(\n (price) => price.product === state.subscription?.productId\n );\n setPriceList(productPrices);\n }\n } catch (err) {\n logError(\"newYardData:Subscription:getData\", err, notify);\n }\n };\n\n const { handleChange } = useForm(\n state,\n dispatch,\n \"subscription\",\n \"SET_SUBSCRIPTION\"\n );\n\n const handleRecordChange = (evt) => {\n //Set subscription.productId\n debugger;\n handleChange(evt);\n onChange();\n };\n\n const handleProduct = (evt) => {\n debugger;\n const productPrices = prices.filter(\n (price) => price.product === evt.target.value\n );\n setPriceList(productPrices);\n handleRecordChange(evt);\n dispatch({ type: \"SET_PRODUCT_PRICES\", payload: productPrices });\n };\n\n const handleBlur = (evt) => {\n const errors = validateSubscription(state.subscription);\n dispatch({ type: \"ERROR\", payload: errors });\n };\n\n let { errors } = state;\n\n return (\n
    \n \n \n Set Up Subscription\n \n \n \n \n {products.map((option) => (\n \n {option.name}\n \n ))}\n \n \n \n Prices:\n
      \n {priceList.map((option) => (\n
    • \n {option.nickname\n ? option.nickname\n : `<< ${option.unit_amount / 100} ${option.currency} : ${\n option.type === \"one_time\"\n ? option.type\n : option.recurring.interval\n } >>`}\n
    • \n ))}\n
    \n
    \n \n \n \n
    \n
    \n );\n}\n","import React, { useContext, useEffect, useReducer, useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { updateSetupData } from \"../../../graphql/reloadyard/custom-mutations\";\nimport {\n useEditController,\n useNotify,\n useRedirect,\n DeleteButton,\n Edit,\n FormTab,\n SaveButton,\n TabbedForm,\n Toolbar,\n TopToolbar,\n} from \"react-admin\";\n\nimport { Box, makeStyles, Typography } from \"@material-ui/core\";\nimport SaveIcon from \"@material-ui/icons/Save\";\nimport CloseOutlinedIcon from \"@material-ui/icons/CloseOutlined\";\nimport CheckOutlinedIcon from \"@material-ui/icons/CheckOutlined\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport YardInfo from \"./newYardData/YardInfo\";\nimport SetupContext from \"./newYardData/context\";\nimport setupReducer from \"./newYardData/reducer\";\nimport AccessAndCapacity from \"./newYardData/AccessAndCapacity\";\nimport Note from \"./newYardData/Note\";\nimport Subscription from \"./newYardData/Subscription\";\nimport { emailApprovedHTML } from \"./emailApprovedHTML\";\nimport { emailRejectedHTML } from \"./emailRejectedHTML\";\n\nimport { NewCustomerStatus } from \"../../../utils/constants\";\nimport { logError } from \"../../../utils/appUtils\";\n\nconst SetupEdit = (props) => {\n const { record } = useEditController(props);\n let initState = useContext(SetupContext);\n const [state, dispatch] = useReducer(setupReducer, initState);\n\n useEffect(() => {\n if (record?.setupData) {\n dispatch({ type: \"UPDATE_STATE\", payload: JSON.parse(record.setupData) });\n debugger;\n }\n }, [record]);\n\n const getSetupData = () => {\n return state;\n };\n\n const validateForm = (values) => {\n const validate = state.validators[0];\n let errors = validate(state.yardInfo);\n return errors;\n };\n\n return (\n \n \n }\n title={Edit Registration}\n mutationMode=\"pessimistic\"\n >\n {\n \n }\n validate={validateForm}\n >\n \n \n \n \n \n \n \n \n \n {record?.status > NewCustomerStatus.NEW && (\n \n \n \n )}\n \n }\n \n \n \n );\n};\n\nconst SetupEditActions = ({ basePath }) => (\n \n \n \n);\n\nconst SaveWithSetupDataButton = ({ setSaving, ...props }) => {\n const { getSetupData, mode } = props;\n const redirect = useRedirect();\n const notify = useNotify();\n let label = \"save\";\n let color = \"primary\";\n let icon = ;\n\n if (mode === \"approve\") {\n label = \"Approve\";\n color = \"secondary\";\n icon = ;\n } else if (mode === \"reject\") {\n label = \"Reject\";\n color = \"primary\";\n icon = ;\n }\n\n const createStripeCustomer = async (setupData) => {\n debugger;\n const customer = {\n name: setupData.yardInfo.businessName,\n email: setupData.yardInfo.email,\n phone: setupData.yardInfo.phoneNumber,\n description: setupData.yardInfo.businessName,\n address: {\n line1: setupData.yardInfo.street,\n line2: \"\",\n city: setupData.yardInfo.city,\n state: setupData.yardInfo.state,\n postal_code: setupData.yardInfo.zip,\n country: setupData.yardInfo.country\n ? setupData.yardInfo.country\n : \"USA\",\n },\n };\n\n const response = await API.post(\"transREST\", \"/stripe-create-customer\", {\n body: customer,\n });\n debugger;\n if (response.err) {\n logError(\"resources:setup:SetupEdit:handleCustomer\", response.err, false);\n throw response.err;\n } else {\n return response.customer.id;\n }\n };\n\n const handleApprove = async (setupData, data) => {\n try {\n const groupName =\n \"YARD_\" +\n setupData.yardInfo.businessName.substr(0, 20).replace(/\\s+/g, \"_\") +\n \"_\" +\n setupData.yardInfo.state +\n \"_\" +\n setupData.yardInfo.zip;\n const { id, status, cognitoId } = data;\n var response = {};\n debugger;\n\n if (!setupData.subscription.customerId) {\n debugger;\n const customerId = await createStripeCustomer(setupData);\n setupData.subscription.customerId = customerId;\n }\n\n const toUpdateSetupData = {\n id,\n status,\n cognitoId,\n groups: [groupName],\n setupData: JSON.stringify(setupData),\n };\n await API.graphql(\n graphqlOperation(updateSetupData, { input: toUpdateSetupData })\n );\n debugger;\n\n response = await API.post(\"transREST\", \"/sendEmail\", {\n body: {\n to: setupData.yardInfo.userEmail,\n bcc: [\"support@transloads.co\"],\n subject: \"Your Transload Yard Setup is Approved\",\n template: \"emailTemplateSingIn.html\",\n htmlContent: emailApprovedHTML(\n setupData.yardInfo.firstName,\n setupData.yardInfo.userEmail,\n setupData.yardInfo.businessName\n ),\n groupName,\n },\n });\n\n if (response.status === \"success\") {\n notify(`Yard successfully Approved.`);\n } else {\n notify(\"ERROR sending Email / creating group.\", \"error\");\n logError(\n \"setup:SetupEdit:handleApprove:response:\" + JSON.stringify(response),\n response,\n false\n );\n }\n } catch (error) {\n if (response.status === \"success\") {\n notify(\"ERROR updating DB Setup Data.\", \"error\");\n logError(\n \"setup:SetupEdit:handleApprove: catch updating DB Setup Data\",\n error,\n false\n );\n } else {\n notify(\"ERROR sending Email, creating group.\", \"error\");\n logError(\n \"setup:SetupEdit:handleApprove: catch send Email, create group\",\n error,\n false\n );\n }\n }\n };\n\n const handleReject = async (setupData) => {\n debugger;\n try {\n const response = await API.post(\"transREST\", \"/sendEmail\", {\n body: {\n to: setupData.yardInfo.userEmail,\n bcc: [\"support@transloads.co\"],\n subject: \"Your transloads.co registration update\",\n template: \"emailTemplateSingIn.html\",\n htmlContent: emailRejectedHTML(\n setupData.yardInfo.firstName,\n setupData.yardInfo.businessName\n ),\n },\n });\n debugger;\n\n if (response.status === \"success\") {\n notify(`Yard successfully Rejected.`);\n } else {\n notify(\"ERROR sending Email.\", \"warning\");\n logError(\n \"setup:SetupEdit:handleReject:response:\" + JSON.stringify(response),\n response,\n false\n );\n }\n } catch (error) {\n notify(\"ERROR sending Email.\", \"error\");\n logError(\"setup:SetupEdit:handleReject:catch\", error, false);\n }\n };\n\n const transform = (data) => {\n setSaving(true);\n const setupData = getSetupData();\n const setupDataJson = JSON.stringify(setupData);\n debugger;\n let { status } = data;\n data.firstName = setupData.yardInfo.firstName;\n data.lastName = setupData.yardInfo.lastName;\n data.businessName = setupData.yardInfo.businessName;\n if (mode === \"approve\") {\n status = NewCustomerStatus.APPROVED;\n } else if (mode === \"reject\") {\n status = NewCustomerStatus.REJECTED;\n }\n\n debugger;\n return {\n ...data,\n setupData: setupDataJson,\n status,\n };\n };\n\n const onSuccess = async ({ data }) => {\n try {\n if (mode === \"approve\") {\n debugger;\n const setupData = getSetupData();\n await handleApprove(setupData, data);\n } else if (mode === \"reject\") {\n const setupData = getSetupData();\n await handleReject(setupData);\n }\n redirect(\"/setupDatas\");\n } catch (err) {\n notify(\"ERROR sending Email.\", \"error\");\n logError(\"setup:SetupEdit:onSuccess\", err, false);\n }\n setSaving(false);\n notify(\"Yard successfully updated.\", \"info\");\n };\n\n return (\n transform(data)}\n label={label}\n icon={icon}\n />\n );\n};\n\nconst useStyles = makeStyles((theme) => ({\n actionArea: {\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n },\n approveButton: {\n marginLeft: theme.spacing(2),\n },\n}));\n\nconst SetupEditToolbar = ({ record, ...props }) => {\n const classes = useStyles();\n const [saving, setSaving] = useState(false);\n const setupData = props.getSetupData();\n debugger;\n\n return (\n \n
    \n \n {(record?.status === NewCustomerStatus.NEW ||\n record?.status === NewCustomerStatus.PENDING_APPROVAL) && (\n \n )}\n {record?.status !== NewCustomerStatus.APPROVED && (\n
    \n \n \n
    \n )}\n
    \n
    \n );\n};\n\nexport default SetupEdit;\n","export function emailApprovedHTML(toName, toEmail, yardName) {\n return `\n

    ${toName},

    ${yardName} is Approved!

    \n
    \n

    \n To complete the setup process, please click on the button below to navigate to transloads.co and login using this email address:
    \n ${toEmail}
    \n If you're already logged in, just refresh the \"PENDING REVIEW\" page.\n

    \n Once your account is activated, you will have full access to the Yard Management System.\n


    \n \n \n \n \n \n \n
    \n \n SIGN IN\n \n
    \n

    \n
    \n
    \n Button not working? Try pasting this URL into your browser:
    \n \n \n https://app.transloads.co/?signIn\n \n \n `;\n}\n","export function emailRejectedHTML(toName, yardName) {\n return `\n

    ${toName},

    \n
    \n

    \n Thank you for your interest in transloads.co\n

    \n Upon review of your ${yardName} setup, the registration request has been rejected.\n

    \n Mostly, that happens if this transload is already registered in our system.\n

    \n if you think your request has been rejected by mistake, please contact us at:\n

    \n \n \n support@transloads.co\n \n

    \n OR\n

    \n 1-877-TRANSLOAD\n
    \n

    \n We apologize for any inconvenience!\n

    \n Customer Success Team\n
    \n transloads.co\n `;\n}\n","import React from \"react\";\n\nimport { Typography } from \"@material-ui/core\";\n\nimport {\n Labeled,\n ReferenceField,\n ReferenceInput,\n TextField,\n TextInput,\n} from \"react-admin\";\n\nimport { AppType } from \"../../../utils/constants\";\n\nexport const TenantField = ({ record, label, ...props }) => {\n return record?.tenantId === AppType.ADMIN ? (\n Admin\n ) : (\n \n \n \n \n \n );\n};\n\nexport const TenantInput = ({ record, ...props }) =>\n record?.appType === AppType.ADMIN ? (\n \n ) : (\n \n \n \n );\n","import React, { useEffect, useState } from \"react\";\nimport {\n DateField,\n DateInput,\n EditButton,\n FilterButton,\n ListContextProvider,\n RefreshButton,\n TextField,\n ListToolbar,\n TopToolbar,\n useListContext,\n useNotify,\n Title,\n BulkActionsToolbar,\n BulkDeleteButton,\n} from \"react-admin\";\nimport {\n Switch,\n FormControlLabel,\n useMediaQuery,\n Card,\n} from \"@material-ui/core\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport CustomizableDatagrid from \"../../../components/common/ra-customizable-datagrid\";\nimport { LogStatus } from \"../../../utils/constants\";\nimport { TenantField } from \"./TenantField\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { APP_VERSION } from \"../../../utils/constants\";\nimport { ClipboardTextField } from \"../../../components/common/CopyToClipboardButton\";\n\nconst LogSearchField = ({ label, alwaysOn }) => {\n const listContext = useListContext();\n const { displayedFilters, filterValues, setFilters } = listContext;\n\n const handleSearch = (value) => {\n if (value) {\n delete filterValues.or;\n setFilters(\n {\n ...filterValues,\n or: [\n { user: { matchPhrasePrefix: value } },\n { user: { wildcard: `*${value}*` } },\n { url: { matchPhrasePrefix: value } },\n { url: { wildcard: `*${value}*` } },\n { appVersion: { matchPhrasePrefix: value } },\n { appVersion: { wildcard: `*${value}*` } },\n { message: { matchPhrasePrefix: value } },\n { message: { wildcard: `*${value}*` } },\n { exception: { matchPhrasePrefix: value } },\n { exception: { wildcard: `*${value}*` } },\n ],\n },\n displayedFilters\n );\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n \n );\n};\n\nconst AppVersionFilter = ({ alwaysOn }) => {\n const { displayedFilters, filterValues, setFilters } = useListContext();\n const [isCurrentVersion, setIsCurrentVersion] = useState(false);\n\n useEffect(() => {\n if (filterValues?.appVersion?.eq === APP_VERSION) {\n setIsCurrentVersion(true);\n } else if (filterValues?.appVersion?.ne === APP_VERSION) {\n setIsCurrentVersion(false);\n }\n }, [filterValues]);\n\n const handleRefreshChange = (event) => {\n const refreshEnabled = event.target.checked;\n setIsCurrentVersion(refreshEnabled);\n\n if (refreshEnabled) {\n setFilters(\n { ...filterValues, appVersion: { eq: APP_VERSION } },\n displayedFilters\n );\n } else {\n setFilters(\n { ...filterValues, appVersion: { ne: APP_VERSION } },\n displayedFilters\n );\n }\n };\n\n return (\n \n }\n alwaysOn={alwaysOn}\n />\n );\n};\n\nconst getListFilters = (isMedium) => [\n ,\n event.preventDefault()}\n />,\n event.preventDefault()}\n />,\n];\n\nconst ListActions = ({ isXSmall }) => (\n \n \n {!isXSmall && }\n \n \n);\n\nconst BulkListActions = ({ onUnselectItems, ...props }) => (\n onUnselectItems()} onDelete {...props} />\n);\n\nexport const LogList = (props) => {\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const isMedium = useMediaQuery((theme) => theme.breakpoints.up(\"md\"));\n\n const notify = useNotify();\n const [defaultFilter] = useState({\n status: LogStatus.NEW,\n });\n\n const defaultSort = {\n field: `{\"key\":\"logByDateByTenant\", \"search\":\"createdAt\"}`,\n order: \"DESC\",\n };\n\n const listContext = useSearchableList({\n ...props,\n defaultTitle: \"Error Logs\",\n defaultFilter,\n defaultPerPage: 10,\n defaultSort,\n resource: \"logs\",\n });\n\n const getSortBy = (resource) => {\n return `{\"key\":\"logByDateByTenant\", \"search\":\"${resource}\"}`;\n };\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n }\n }, [listContext?.perPage, props.resource]);\n\n return (\n \n \n \n \n } />\n <ListToolbar\n {...props}\n filters={getListFilters(isMedium)}\n actions={<ListActions isXSmall={isXSmall} />}\n />\n <Card>\n {isXSmall ? (\n <CustomizableDatagrid\n rowClick=\"show\"\n storageProp=\"LogList_xsmall\"\n defaultColumns={[\"createdAt\", \"Tenant\"]}\n >\n <DateField\n source=\"createdAt\"\n label=\"Created At\"\n showTime\n sortable={false}\n />\n <TenantField label=\"Tenant\" {...props} />\n <EditButton />\n </CustomizableDatagrid>\n ) : isSmall ? (\n <CustomizableDatagrid\n rowClick=\"show\"\n storageProp=\"LogList_small\"\n defaultColumns={[\"createdAt\", \"message\", \"appVersion\"]}\n >\n <DateField\n source=\"createdAt\"\n label=\"Created At\"\n showTime\n sortable={false}\n />\n <TextField source=\"appType\" label=\"App Type\" sortable={false} />\n <TenantField label=\"Tenant\" {...props} />\n <ClipboardTextField on source=\"user\" label=\"User\" notify={notify} />\n <ClipboardTextField\n on\n source=\"message\"\n label=\"Message\"\n notify={notify}\n />\n <TextField source=\"appVersion\" label=\"App Version\" />\n <TextField source=\"url\" label=\"URL\" />\n <EditButton />\n </CustomizableDatagrid>\n ) : (\n <CustomizableDatagrid\n rowClick=\"show\"\n hasBulkActions={true}\n storageProp=\"LogList_large\"\n defaultColumns={[\n \"createdAt\",\n \"appType\",\n \"tenant\",\n \"user\",\n \"message\",\n \"appVersion\",\n ]}\n >\n <DateField\n source=\"createdAt\"\n label=\"Created At\"\n showTime\n sortable={true}\n sortBy={getSortBy(\"createdAt\")}\n />\n <TextField source=\"appType\" label=\"App Type\" sortable={false} />\n <TenantField label=\"Tenant\" {...props} />\n <ClipboardTextField on source=\"user\" label=\"User\" notify={notify} />\n <ClipboardTextField\n source=\"message\"\n label=\"Message\"\n notify={notify}\n />\n <TextField source=\"appVersion\" label=\"App Version\" />\n <TextField source=\"url\" label=\"URL\" />\n <EditButton />\n </CustomizableDatagrid>\n )}\n\n <Pagination {...listContext} />\n </Card>\n </ListContextProvider>\n );\n};\n","import React from \"react\";\nimport {\n Show,\n TopToolbar,\n SimpleShowLayout,\n TextField,\n DateField,\n RichTextField,\n useNotify,\n EditButton,\n} from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { TenantField } from \"./TenantField\";\nimport { ClipboardTextField } from \"../../../components/common/CopyToClipboardButton\";\n\nconst LogShowActions = ({ basePath, data }) => {\n return (\n <TopToolbar>\n <BackButton basePath={basePath} />\n <EditButton basePath={basePath} record={data} />\n </TopToolbar>\n );\n};\n\nexport const LogShow = (props) => {\n const notify = useNotify();\n\n return (\n <Show {...props} title=\"Log View\" actions={<LogShowActions />}>\n <SimpleShowLayout>\n <DateField source=\"createdAt\" label=\"Created At\" showTime={true} />\n <TextField source=\"appType\" />\n <TenantField label=\"Tenant\" {...props} />\n <ClipboardTextField\n {...props}\n source=\"tenantId\"\n label=\"Tenant ID\"\n notify={notify}\n />\n <ClipboardTextField {...props} source=\"user\" notify={notify} />\n <ClipboardTextField\n {...props}\n source=\"message\"\n label=\"Path\"\n notify={notify}\n />\n <ClipboardTextField\n {...props}\n source=\"url\"\n label=\"URL\"\n notify={notify}\n />\n <RichTextField\n source=\"exception\"\n style={{ width: \"100px\", maxWidth: \"100px\" }}\n />\n <TextField source=\"appVersion\" />\n <TextField source=\"context\" />\n </SimpleShowLayout>\n </Show>\n );\n};\n","import React from \"react\";\nimport {\n // useEditController,\n Edit,\n TopToolbar,\n SimpleForm,\n TextInput,\n DateField,\n RadioButtonGroupInput,\n} from \"react-admin\";\n\nimport { Grid } from \"@material-ui/core\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { LogStatuses } from \"../../../utils/constants\";\nimport { TenantInput } from \"./TenantField\";\n\nconst LogShowActions = ({ basePath }) => (\n <TopToolbar>\n <BackButton basePath={basePath} />\n </TopToolbar>\n);\n\nexport const LogEdit = (props) => {\n return (\n <Edit\n {...props}\n title=\"Log Edit\"\n mutationMode=\"pessimistic\"\n actions={<LogShowActions />}\n >\n <SimpleForm variant=\"outlined\" submitOnEnter={false}>\n <Grid container direction=\"column\" spacing={1} fullWidth>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <DateField\n source=\"createdAt\"\n label=\"Created At\"\n fullWidth\n showTime={true}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"appType\"\n label=\"App Type\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <TenantInput label=\"Tenant\" fullWidth />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"user\"\n label=\"User\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <TextInput\n source=\"message\"\n label=\"Message\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <TextInput\n source=\"url\"\n label=\"URL\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <TextInput\n source=\"exception\"\n label=\"Exception\"\n variant=\"outlined\"\n fullWidth\n multiline\n disabled={true}\n />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={6}>\n <TextInput\n source=\"appVersion\"\n label=\"App Version\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n source=\"context\"\n label=\"Context\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <RadioButtonGroupInput\n source=\"status\"\n label=\"Status\"\n variant=\"outlined\"\n choices={LogStatuses}\n />\n </Grid>\n </Grid>\n </Grid>\n </SimpleForm>\n </Edit>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { Link, useHistory } from \"react-router-dom\";\n\nimport { Box, Typography } from \"@material-ui/core\";\nimport ContentAdd from \"@material-ui/icons/Add\";\n\nimport {\n Button,\n // CreateButton\n} from \"react-admin\";\nimport { useTranslate } from \"ra-core\";\n\nimport { isSubscriptionDisabled } from \"../../utils/appUtils\";\n\nexport const Empty = ({\n basePath,\n resource,\n message,\n backPath,\n state,\n ...props\n}) => {\n return (\n <Box textAlign=\"center\" m={1}>\n <Typography variant=\"body1\" gutterBottom>\n {message}\n </Typography>\n <CreateButton\n {...props}\n basePath={basePath}\n resource={resource}\n backPath={backPath}\n state={state}\n disabled={isSubscriptionDisabled()}\n />\n </Box>\n );\n};\n\nconst CreateButton = (props) => {\n const {\n basePath = \"\",\n resource,\n backPath,\n state = {},\n className,\n label = \"ra.action.create\",\n scrollToTop = true,\n variant,\n ...rest\n } = props;\n const history = useHistory();\n const translate = useTranslate();\n\n const location = useMemo(\n () => ({\n pathname: basePath ? `${basePath}/create` : `/${resource}/create`,\n state: {\n ...state,\n backPath: backPath\n ? [...backPath, history.location.pathname]\n : [history.location.pathname],\n _scrollToTop: scrollToTop,\n },\n }),\n [basePath, resource, backPath, state, history, scrollToTop]\n );\n\n return (\n <Button\n component={Link}\n to={location}\n className={className}\n label={translate(label)}\n variant={variant}\n {...rest}\n >\n <ContentAdd />\n </Button>\n );\n};\n","import React from \"react\";\n\nimport { Tooltip } from \"@material-ui/core\";\nimport UserNewIcon from \"@material-ui/icons/RadioButtonUnchecked\";\nimport UserPendingIcon from \"@material-ui/icons/RemoveCircleOutline\";\nimport UserApprovedIcon from \"@material-ui/icons/CheckCircleOutline\";\nimport UserSuspendedIcon from \"@material-ui/icons/PauseCircleOutline\";\nimport { green, orange, red } from \"@material-ui/core/colors\";\n\nimport { UserStatus } from \"../../../utils/constants\";\n\nexport const UserStatusIcon = ({ record, classes, ...props }) => {\n if (!record?.status) return null;\n\n const icon = () => {\n switch (record.status) {\n case UserStatus.PENDING_REG:\n return (\n <Tooltip title=\"Pending Reg.\" placement=\"left\" arrow>\n <UserPendingIcon\n className={classes}\n style={{ color: orange[700] }}\n />\n </Tooltip>\n );\n case UserStatus.APPROVED:\n return (\n <Tooltip title=\"Active\" placement=\"left\" arrow>\n <UserApprovedIcon\n className={classes}\n style={{ color: green[700] }}\n />\n </Tooltip>\n );\n case UserStatus.SUSPENDED:\n return (\n <Tooltip title=\"Suspended\" placement=\"left\" arrow>\n <UserSuspendedIcon\n className={classes}\n style={{ color: red[700] }}\n />\n </Tooltip>\n );\n default:\n return (\n <Tooltip title=\"New\" placement=\"left\" arrow>\n <UserNewIcon className={classes} />\n </Tooltip>\n );\n }\n };\n\n return icon();\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { Card, useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n CreateButton,\n Datagrid,\n EditButton,\n FilterButton,\n FunctionField,\n ListContextProvider,\n ListToolbar,\n RefreshButton,\n SelectInput,\n SimpleList,\n TextField,\n Title,\n TopToolbar,\n useListContext,\n} from \"react-admin\";\n\nimport { Pagination } from \"../../../components/Pagination\";\nimport { ChevronRightIcon } from \"../../../components/common\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { Empty } from \"../../../components/common/Empty\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { isSubscriptionDisabled } from \"../../../utils/appUtils\";\nimport { UserTypeOptions } from \"../../../utils/constants\";\nimport { UserStatusIcon } from \"./UserStatusIcon\";\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\n\nconst useStyles = makeStyles((theme) => ({\n statusIcon: {\n marginTop: theme.spacing(1),\n },\n}));\n\nconst renderName = (record) => {\n if (record?.user) return `${record.user.lastName}, ${record.user.firstName}`;\n return `${record.lastName}, ${record.firstName}`;\n};\n\nconst UserSearchField = ({ label, alwaysOn, ...props }) => {\n const listContext = useListContext(props);\n const { displayedFilters, filterValues, setFilters } = listContext;\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n const filters = {\n ...filterValues,\n or: [\n { firstName: { matchPhrasePrefix: `${value}` } },\n { firstName: { wildcard: `*${value}*` } },\n { lastName: { matchPhrasePrefix: `${value}` } },\n { lastName: { wildcard: `*${value}*` } },\n { email: { matchPhrasePrefix: `${value}` } },\n { email: { wildcard: `*${value}*` } },\n { phone: { matchPhrasePrefix: `${value}` } },\n { phone: { wildcard: `*${value}*` } },\n ],\n };\n setFilters(filters, displayedFilters);\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = (gteMedium) => {\n return [\n <SelectInput\n source=\"type.eq\"\n label=\"User Type\"\n key=\"type-filter\"\n variant=\"outlined\"\n resettable\n alwaysOn={gteMedium}\n choices={UserTypeOptions || []}\n optionValue=\"id\"\n />,\n <UserSearchField label=\"Search\" alwaysOn />,\n ];\n};\n\nconst ListActions = ({ isXSmall, ...props }) => {\n return (\n <TopToolbar>\n {!isXSmall && <FilterButton />}\n <CreateButton disabled={isSubscriptionDisabled()} />\n <RefreshButton />\n </TopToolbar>\n );\n};\n\nexport const UserList = (props) => {\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const lteMedium = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const gteMedium = useMediaQuery((theme) => theme.breakpoints.up(\"md\"));\n\n const [defaultFilter] = useState({\n reloadYardId: window.appUser?.reloadYardId,\n activeLastName: { beginsWith: { active: \"true\" } },\n });\n\n const defaultSearchFilter = {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n active: { eq: \"true\" },\n };\n\n // Include key & search to display default sort order.\n const defaultSort = {\n field: `{\"key\":\"userByActiveByLastName\", \"search\":\"lastName\"}`,\n order: \"ASC\",\n };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = localStorage.getItem(`${props.resource}_perPage`);\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? Number(sessionPerPage) : 10\n );\n\n const listContext = useSearchableList({\n ...props,\n defaultTitle: \"Staff\",\n defaultFilter: defaultFilter,\n defaultSort: defaultSort,\n defaultSearchFilter: defaultSearchFilter,\n defaultPerPage: defaultPerPage,\n resource: \"users\",\n });\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n useEffect(() => {\n if (listContext?.filter) {\n // reset list on automatic stale list reset\n // Extract the key query from defaultSort\n const fieldObj = JSON.parse(defaultSort.field);\n const keyToCheck = fieldObj.key;\n\n // Check for the key's presence in filter\n const hasKey = keyToCheck in listContext.filter;\n const hasFilterValues = Object.keys(listContext.filterValues).length > 0;\n if (hasKey && hasFilterValues) listContext.setFilters({});\n }\n }, [listContext?.filter]);\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Staff\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters(gteMedium)}\n actions={<ListActions isXSmall={isXSmall} />}\n />\n <Card>\n <StaffGrid\n {...props}\n {...listContext}\n isXSmall={isXSmall}\n lteMedium={lteMedium}\n classes={classes}\n />\n <Pagination {...listContext} />\n </Card>\n </ListContextProvider>\n );\n};\n\nconst StaffGrid = ({ ids, page, ...props }) => {\n const { classes, isXSmall, lteMedium } = props;\n\n if (ids.length === 0 && page === 1)\n return <Empty {...props} message=\"Create a new user\" />;\n return isXSmall ? (\n <SimpleList\n primaryText={(record) => record.fullName}\n secondaryText={(record) => record.email}\n tertiaryText={(record) => record.type}\n linkType=\"edit\"\n leftIcon={(record) => <UserStatusIcon record={record} />}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n />\n ) : lteMedium ? (\n <Datagrid rowClick=\"edit\">\n <FunctionField\n source=\"lastName\"\n label=\"Name\"\n render={renderName}\n sortable={true}\n sortBy={`{\"key\":\"userByActiveByLastName\", \"search\":\"lastName\"}`}\n />\n <TextField source=\"type\" label=\"User Type\" sortable={true} />\n <UserStatusIcon\n source=\"status\"\n label=\"Status\"\n classes={classes.statusIcon}\n sortable={false}\n />\n <TextField source=\"email\" label=\"Email\" sortable={true} />\n </Datagrid>\n ) : (\n <Datagrid rowClick=\"edit\">\n <FunctionField\n source=\"lastName\"\n label=\"Name\"\n render={renderName}\n sortable={true}\n sortBy={`{\"key\":\"userByActiveByLastName\", \"search\":\"lastName\"}`}\n />\n <TextField source=\"type\" label=\"User Type\" sortable={true} />\n <UserStatusIcon\n source=\"status\"\n label=\"Status\"\n classes={classes.statusIcon}\n sortable={false}\n />\n <TextField source=\"email\" label=\"Email\" sortable={true} />\n <TextField source=\"phone\" label=\"Phone\" sortable={true} />\n <EditButton />\n </Datagrid>\n );\n};\n","import React from \"react\";\n\nimport { Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { DeleteIcon } from \"../../../components/common\";\n\nconst useStyles = makeStyles(() => ({\n icon: {\n verticalAlign: \"middle\",\n display: \"inline-flex\",\n },\n}));\n\nexport const UserCreateHelp = () => (\n <>\n <Typography variant=\"subtitle1\">\n Creating a new User sends out an email invitation to specified email\n address, asking the new user to complete signup process. The new User will\n not have access until they complete registration. They will need access to\n their email to complete the process.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Email: </strong> Email address is used to complete new User\n registration process. Each user must have a unique email address,\n since it is used as username to login into the platform. Email cannot\n be changed once the User record is created.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Address: </strong> Home address for record keeping.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Phone: </strong> Home phone number for record keeping.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>User Type: </strong> Manager has full system access to both\n the manager portal and crew mobile App. Crew has limited access to the\n mobile Operator App only.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const UserEditHelp = () => {\n const classes = useStyles();\n\n return (\n <>\n <Typography variant=\"subtitle1\"></Typography>\n <ul>\n <li>\n <Typography>\n <strong>Email: </strong> Email address is used to complete new User\n registration process. Each user must have a unique email address,\n since it is used as username to login into the platform. Email\n cannot be changed once the User record is created.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Address: </strong> Home address for record keeping.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Phone: </strong> Home phone number for record keeping.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>User Type: </strong> Manager has full system access to both\n the manager portal and crew mobile App. Crew has limited access to\n the mobile Operator App only.\n </Typography>\n </li>\n <li>\n <Typography>\n <DeleteIcon className={classes.icon} />\n <strong> DELETE: </strong>\n Removes user's access to the platform and deletes the User from\n \"Users\" list view.\n </Typography>\n </li>\n </ul>\n </>\n );\n};\n","import React, { useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { Button, Confirm, useNotify, useRedirect } from \"react-admin\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport { DeleteIcon } from \"../../../components/common\";\nimport { taskByAssignedToByStatusByDueDate } from \"../../../graphql/queries\";\nimport { deleteUser, deleteTask } from \"../../../graphql/mutations\";\nimport { updateUserMini } from \"../../../graphql/reloadyard/custom-mutations\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { UserType, UserStatus } from \"../../../utils/constants\";\nimport { emailAccountDeletionHTML } from \"./emailAccountDeletionHTML\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeepDeleteButton = ({ record, className, ...props }) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const classes = useStyles();\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const isDeleteDisabled = () => {\n return (\n loading ||\n window.appUser?.id === record?.id ||\n window.appUser?.type === UserType.CREW ||\n (window.appUser?.type === UserType.SUPERVISOR &&\n record.type === UserType.MANAGER)\n );\n };\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n const handleDelete = async (event) => {\n setLoading(true);\n try {\n debugger;\n if (\n record.status === UserStatus.NEW ||\n record.status === UserStatus.PENDING_REG\n ) {\n // Delete assigned Tasks\n let response = await API.graphql(\n graphqlOperation(taskByAssignedToByStatusByDueDate, {\n assignedTo: record.id,\n })\n );\n const tasks = response.data.taskByAssignedToByStatusByDueDate.items;\n await Promise.all(\n tasks.map((task) => {\n return API.graphql(\n graphqlOperation(deleteTask, { input: { id: task.id } })\n );\n })\n );\n\n await API.graphql(\n graphqlOperation(deleteUser, { input: { id: record.id } })\n );\n } else {\n // Update user active = false, tirggers lambda function \"aws/lambda/UpdateCognito\"\n let userToUpdate = record;\n userToUpdate.active = \"false\";\n delete userToUpdate.createdAt;\n delete userToUpdate.updatedAt;\n await API.graphql(\n graphqlOperation(updateUserMini, { input: userToUpdate })\n );\n }\n const emailContent = emailAccountDeletionHTML(\n record.firstName,\n window.appUser?.firstName,\n window.appUser?.reloadYard.name\n );\n\n const emailSubject = \"Your transloads.co account has been deleted!\";\n\n try {\n const response = await API.post(\"transREST\", \"/sendEmail\", {\n body: {\n to: record.email,\n bcc: [\"support@transloads.co\"],\n // replyTo: getReplyToAddress(),\n subject: emailSubject,\n template: \"emailTemplate.html\",\n htmlContent: emailContent,\n },\n });\n\n if (response.error) {\n throw response.error;\n } else {\n notify(`User created successfully.`);\n redirect(\"/users\");\n }\n } catch (error) {\n logError(\"users:UserEmailError\", error, false);\n }\n notify(\"User deleted successfully\");\n redirect(\"/users\");\n } catch (error) {\n logError(\"users:DeepDeleteButton:handleDelete\", error, notify);\n }\n\n setLoading(false);\n setOpen(false);\n };\n\n return (\n <>\n <Button\n {...props}\n label=\"Delete\"\n disabled={isDeleteDisabled()}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={loading}\n title={\"Delete Confirmation\"}\n content={\"Are you sure you want to delete this User?\"}\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","export function emailAccountDeletionHTML(toName, fromName, yardName) {\n return `<!-- Begin HTML Content -->\n <h1> ${toName}, <br><br> Your transloads.co account has been deleted. <br></h1>\n <hr style=\"background:#2d8cff; height: 8px; width: 60px; border-style: solid; border-color: #095484; border-width: 1px 0 0 0; border-radius: 8px;\" />\n <br><br>\n This is to inform you that ${fromName} at ${yardName} has deleted your account from transloads.co. <br>\n If you believe this is a mistake or have any concerns, please contact your manager as soon as possible.\n <br><br><br>\n <hr style=\"border-bottom:#CCCCCC 6px dotted; border-width: 0 0 6px 0;\">\n <br>\n If you need assistance or have any further questions, please contact your manager.\n <!-- End HTML Content -->`;\n}\n","import { UserType, UserTypeOptions } from \"../../../utils/constants\";\n\nexport const getUserTypeDescription = (userType) => {\n const userTypeOption = UserTypeOptions.find((itm) => itm.id === userType);\n return userTypeOption ? userTypeOption.description : false;\n};\n\nexport const getUserTypeOptions = (userRecord) => {\n if (window.appUser?.type === UserType.MANAGER) {\n return UserTypeOptions; // MANAGER can edit all users\n }\n if (\n window.appUser?.type === UserType.SUPERVISOR &&\n userRecord?.type !== UserType.MANAGER\n ) {\n return UserTypeOptions.filter((itm) => itm.id !== UserType.MANAGER); // SUPERVISOR can edit CREW & SUPERVISOR\n }\n return UserTypeOptions; // SUPERVISOR editing a MANAGER, show all radio buttons disabled\n};\n\nexport const disableUserOptions = (userRecord) => {\n // return false;\n return (\n window.appUser.id === userRecord?.id ||\n (window.appUser.type !== UserType.MANAGER &&\n userRecord?.type === UserType.MANAGER)\n );\n};\n","import React from \"react\";\n\nimport {\n Card,\n CardContent,\n Grid,\n makeStyles,\n Typography,\n} from \"@material-ui/core\";\n\nimport { SelectField } from \"react-admin\";\n\nimport { UserStatuses } from \"../../../utils/constants\";\nimport { UserStatusIcon } from \"./UserStatusIcon\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n width: \"14em\",\n minWidth: \"14em\",\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(0.5),\n overflow: \"initial\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n statusIcon: {\n marginTop: theme.spacing(-0.3),\n },\n}));\n\nexport const UserAside = ({ backPath, record, ...props }) => {\n const classes = useStyles();\n\n if (!record) return null;\n return (\n <Card className={classes.root}>\n <CardContent>\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Status:\n </Typography>\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <UserStatusIcon record={record} classes={classes.statusIcon} />\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <SelectField\n source=\"status\"\n record={record}\n choices={UserStatuses}\n />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { Grid, Typography } from \"@material-ui/core\";\n\nimport {\n CheckboxGroupInput,\n Edit,\n FormDataConsumer,\n maxLength,\n minLength,\n RadioButtonGroupInput,\n regex,\n required,\n SaveButton,\n SimpleForm,\n TextInput,\n Toolbar,\n TopToolbar,\n useEditController,\n useNotify,\n useRedirect,\n} from \"react-admin\";\n\nimport { AddressInput } from \"../../../components/common/AddressInput\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { getUserTypeAcls, logError } from \"../../../utils/appUtils\";\nimport { REGEX_PHONE, UserType } from \"../../../utils/constants\";\nimport { UserEditHelp } from \"./UserHelp\";\nimport { DeepDeleteButton } from \"./DeepDeleteButton\";\nimport { UserSuspendButton } from \"./UserSuspendButton\";\nimport {\n disableUserOptions,\n getUserTypeDescription,\n getUserTypeOptions,\n} from \"./userUtils\";\nimport { UserAside } from \"./UserAside\";\n\nconst validateRequired = required();\nconst validatePhone = [\n required(),\n regex(REGEX_PHONE, \"Must be valid Phone No.\"),\n minLength(10),\n maxLength(20),\n];\n\nconst UserEditForm = ({ record, ...props }) => {\n const [aclList, setAclList] = useState(getUserTypeAcls(record.type));\n\n const handleUserTypeChange = (value) => {\n const newAclList = getUserTypeAcls(value);\n setAclList(newAclList);\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container spacing={5}>\n <Grid item xs={12} md={8}>\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"firstName\"\n label=\"First Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"lastName\"\n label=\"Last Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"email\"\n type=\"email\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toLowerCase() : undefined)}\n disabled={true}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"phone\"\n type=\"tel\"\n variant=\"outlined\"\n fullWidth\n validate={validatePhone}\n />\n </Grid>\n <Grid item xs={12}>\n <Typography\n gutterBottom\n variant=\"overline\"\n color=\"textSecondary\"\n >\n Home Address\n </Typography>\n <AddressInput\n source=\"address\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v : undefined)}\n allValues={formData}\n />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} md={4}>\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <RadioButtonGroupInput\n source=\"type\"\n label=\"User Type\"\n variant=\"outlined\"\n row\n style={{ marginTop: 0 }}\n choices={getUserTypeOptions(record)}\n disabled={disableUserOptions(record)}\n validate={validateRequired}\n onChange={handleUserTypeChange}\n helperText={getUserTypeDescription(formData.type)}\n />\n </Grid>\n {formData.type && formData.type !== UserType.MANAGER && (\n <Grid item xs={12}>\n <CheckboxGroupInput\n source=\"acl\"\n label=\"Access Permissions\"\n row={false}\n fullWidth\n choices={aclList}\n disabled={disableUserOptions(record)}\n />\n </Grid>\n )}\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nexport const UserEdit = (props) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const { record, basePath } = useEditController(props);\n debugger;\n\n const transform = (data) => {\n data.fullName = `${data.firstName} ${data.lastName}`;\n data.email = data.email.toLowerCase();\n\n // must have - boundedTextField does not transform to upper case\n if (data.address?.state)\n data.address.state = data.address.state.toUpperCase();\n if (data.address?.zipCode)\n data.address.zipCode = data.address.zipCode.toUpperCase();\n delete data.address?.name;\n\n return data;\n };\n\n const onSuccess = (data) => {\n debugger;\n notify(`User updated successfully.`);\n redirect(\"list\", basePath);\n };\n\n const onFailure = (error) => {\n logError(\"users:UserEdit:onFailure:User Update\", error, notify);\n };\n\n const UserEditActions = ({ basePath, data }) => (\n <TopToolbar>\n <HelpButton>\n <UserEditHelp {...props} />\n </HelpButton>\n <BackButton basePath={basePath} />\n {false && data && <UserSuspendButton record={data} />}\n </TopToolbar>\n );\n\n const UserEditToolbar = (props) => (\n <Toolbar style={{ justifyContent: \"space-between\" }} {...props}>\n <SaveButton\n label=\"Save\"\n disabled={props.pristine}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <DeepDeleteButton record={record} />\n </Toolbar>\n );\n\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit User\" />}\n mutationMode=\"pessimistic\"\n actions={<UserEditActions />}\n aside={<UserAside {...props} />}\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={<UserEditToolbar />}\n >\n <UserEditForm record={record} />\n </SimpleForm>\n </Edit>\n );\n};\n","import React from \"react\";\n\nimport { Grid, Typography } from \"@material-ui/core\";\n\nimport {\n Labeled,\n SelectField,\n Show,\n SimpleShowLayout,\n TextField,\n TopToolbar,\n} from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { getUserTypeDescription, getUserTypeOptions } from \"./userUtils\";\nimport { UserAclOptions, UserType } from \"../../../utils/constants\";\n\nconst UserShowActions = ({ basePath }) => (\n <TopToolbar>\n <BackButton basePath={basePath} />\n </TopToolbar>\n);\n\nexport const AddressField = (props) => {\n if (props.record?.address)\n return (\n <div>\n <Typography>{props.record.address.street}</Typography>\n <Typography>\n {props.record.address.city}, {props.record.address.state}{\" \"}\n {props.record.address.zipCode}\n </Typography>\n </div>\n );\n return \"\";\n};\nAddressField.defaultProps = { addLabel: true, label: \"Address\" };\n\nconst StatusTextField = (props) => {\n if (!props.record.status) return null;\n const label = () => {\n switch (props.record.status) {\n case \"AVAILABLE\":\n return \"Available\";\n case \"TEMP_UNAVAILABLE\":\n return \"Temporarily Unavailable\";\n case \"UNAVAILABLE\":\n return \"Unavailable\";\n default:\n return \"\";\n }\n };\n\n return label();\n};\nStatusTextField.defaultProps = { addLabel: true, label: \"Availability\" };\n\nconst UserTitle = ({ record }) => {\n return <span>{record ? `${record.fullName}` : \"\"}</span>;\n};\n\nconst AclDisplayField = (record) => {\n // Filter the UserAclOptions to include only those ACLs present in record.acl\n debugger;\n if (record.acl) {\n const displayAcl = UserAclOptions.filter((aclOption) =>\n record.acl.includes(aclOption.id)\n ).map((aclOption) => <li key={aclOption.id}>{aclOption.name}</li>);\n\n return (\n <ul style={{ listStyleType: \"none\", paddingLeft: 0 }}>{displayAcl}</ul>\n );\n }\n return null;\n};\n\nconst UserShowGrid = ({ record, ...props }) => {\n const accounts = [];\n\n return (\n <Grid container spacing={5}>\n <Grid item xs={12} md={8}>\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Firs Name\">\n <TextField source=\"firstName\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Last Name\">\n <TextField source=\"lastName\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Email\">\n <TextField source=\"email\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Phone\">\n <TextField source=\"phone\" />\n </Labeled>\n </Grid>\n {window.appUser.type !== UserType.CUSTOMER &&\n (record?.type === UserType.CUSTOMER ? (\n <Grid item xs={12} lg={6}>\n <Labeled label=\"Account\">\n <SelectField\n source=\"accountId\"\n choices={accounts}\n optionText=\"businessName\"\n />\n </Labeled>\n </Grid>\n ) : (\n <Grid item xs={12}>\n <Typography\n gutterBottom\n variant=\"overline\"\n color=\"textSecondary\"\n >\n Home Address\n </Typography>\n <AddressField source=\"address\" label=\"Address\" />\n </Grid>\n ))}\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} md={4}>\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Labeled label=\"Status\">\n <TextField source=\"status\" />\n </Labeled>\n </Grid>\n {window.appUser.type !== UserType.CUSTOMER && (\n <Grid item xs={12}>\n <Labeled label=\"User Type\">\n <SelectField\n source=\"type\"\n choices={getUserTypeOptions(record)}\n />\n </Labeled>\n {getUserTypeDescription(record?.type)}\n </Grid>\n )}\n {record?.type &&\n record.type !== UserType.MANAGER &&\n record.type !== UserType.CUSTOMER &&\n window.appUser.type !== UserType.CUSTOMER && (\n <Grid item xs={12}>\n <Typography\n gutterBottom\n variant=\"overline\"\n color=\"textSecondary\"\n >\n Access Permissions\n </Typography>\n <AclDisplayField record={record} />\n </Grid>\n )}\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n );\n};\n\nexport const UserShow = (props) => {\n return (\n <Show {...props} title={<UserTitle />} actions={<UserShowActions />}>\n <SimpleShowLayout>\n <UserShowGrid />\n </SimpleShowLayout>\n </Show>\n );\n};\n","import React from \"react\";\n\nimport { Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { DeleteIcon } from \"../../../components/common\";\n\nconst useStyles = makeStyles((theme) => ({\n icon: {\n verticalAlign: \"middle\",\n display: \"inline-flex\",\n },\n}));\n\nexport const UserCreateHelp = () => (\n <>\n <Typography variant=\"subtitle1\">\n Creating a new User sends out an email invitation to specified email\n address, asking the new user to complete signup process. The new User will\n not have access until they complete registration. They will need access to\n their email to complete the process.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Email: </strong> Email address is used to complete new User\n registration process. Each user must have a unique email address,\n since it is used as username to login into the platform. Email cannot\n be changed once the User record is created.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Address: </strong> Home address for record keeping.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Phone: </strong> Home phone number for record keeping.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>User Type: </strong> Manager has full system access to both\n the manager portal and crew mobile App. Crew has limited access to the\n crew mobile App only.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const UserEditHelp = () => {\n const classes = useStyles();\n\n return (\n <>\n <Typography variant=\"subtitle1\"></Typography>\n <ul>\n <li>\n <Typography>\n <strong>Email: </strong> Email address is used to complete new User\n registration process. Each user must have a unique email address,\n since it is used as username to login into the platform. Email\n cannot be changed once the User record is created.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Address: </strong> Home address for record keeping.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Phone: </strong> Home phone number for record keeping.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>User Type: </strong> Manager has full system access to both\n the manager portal and crew mobile App. Crew has limited access to\n the crew mobile App only.\n </Typography>\n </li>\n <li>\n <Typography>\n <DeleteIcon className={classes.icon} />\n <strong> DELETE: </strong>\n Removes user's access to the platform and deletes the User from\n \"Users\" list view.\n </Typography>\n </li>\n </ul>\n </>\n );\n};\n","import React, { useState } from \"react\";\n\nimport {\n RadioButtonGroupInput,\n SelectInput,\n TextInput,\n required,\n maxLength,\n ReferenceInput,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { Grid, FormControlLabel, Switch } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { UrgencyOptions } from \"../../../utils/constants\";\n\nconst useStyles = makeStyles((theme) => ({\n radioButton: {\n marginTop: theme.spacing(0),\n marginLeft: theme.spacing(1),\n },\n}));\n\nconst validateRequired = required();\nconst validateMessage = [required(), maxLength(500)];\n\nexport const ActiveTrueOrFalse = [\n { id: \"true\", name: \"Yes\" },\n { id: \"false\", name: \"No\" },\n];\n\nexport const AnnouncementForm = (props) => {\n const form = useForm();\n const classes = useStyles();\n const [isRefresh, setIsRefresh] = useState(props.record?.link === \"REFRESH\");\n debugger;\n\n const handleRefreshChange = () => {\n setIsRefresh(!isRefresh);\n if (!isRefresh) form.change(\"link\", \"REFRESH\");\n };\n\n return (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <TextInput\n source=\"message\"\n label=\"Message\"\n variant=\"outlined\"\n multiline\n fullWidth\n validate={validateMessage}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n source=\"link\"\n label=\"Link\"\n variant=\"outlined\"\n fullWidth\n disabled={isRefresh}\n helperText={\"URL must begin with http...\"}\n />\n <FormControlLabel\n label=\"Refresh?\"\n style={{ marginLeft: \"0px\", marginTop: \"0px\" }}\n control={\n <Switch\n name=\"refresh\"\n size=\"small\"\n checked={isRefresh}\n onChange={(event) => handleRefreshChange(event)}\n />\n }\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"urgency\"\n label=\"Urgency\"\n variant=\"outlined\"\n fullWidth\n choices={UrgencyOptions}\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <ReferenceInput\n source=\"tenantId\"\n reference=\"reloadYards\"\n allowEmpty\n variant=\"outlined\"\n fullWidth\n >\n <SelectInput optionText=\"name\" optionValue=\"id\" />\n </ReferenceInput>\n </Grid>\n <Grid item xs={12} md={6} align=\"left\">\n <RadioButtonGroupInput\n source=\"active\"\n label=\"Active\"\n variant=\"outlined\"\n row\n className={classes.radioButton}\n choices={ActiveTrueOrFalse}\n disabled={!props.record?.id}\n initialValue={\"false\"}\n validate={validateRequired}\n />\n </Grid>\n </Grid>\n );\n};\n","import React, { useState } from \"react\";\n\nimport {\n useNotify,\n useRedirect,\n Create,\n SaveButton,\n SimpleForm,\n Toolbar,\n TopToolbar,\n} from \"react-admin\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { UserCreateHelp } from \"./UserHelp\";\nimport { AnnouncementForm } from \"./AnnouncementForm\";\n\nexport const AnnouncementCreate = (props) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const [saving, setSaving] = useState(false);\n\n const transform = (data) => {\n setSaving(true);\n\n data.createDateTime = new Date();\n\n return data;\n };\n\n const onSuccess = (data) => {\n setSaving(false);\n notify(`Announcement created successfully.`);\n redirect(\"/announcements\");\n };\n\n const onFailure = (error) => {\n setSaving(false);\n logError(\"announcements:AnnouncementCreate:onFailure\", error, notify);\n };\n\n const CreateActions = ({ basePath }) => (\n <TopToolbar>\n <HelpButton>\n <UserCreateHelp {...props} />\n </HelpButton>\n <BackButton basePath={basePath} />\n </TopToolbar>\n );\n\n const CreateToolbar = (props) => (\n <Toolbar {...props}>\n <SaveButton\n label=\"Save\"\n disabled={saving}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n </Toolbar>\n );\n\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New Announcement\" />}\n actions={<CreateActions />}\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={<CreateToolbar />}\n >\n <AnnouncementForm />\n </SimpleForm>\n </Create>\n );\n};\n","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport {\n BooleanField,\n Button,\n CreateButton,\n Datagrid,\n DateField,\n EditButton,\n FunctionField,\n List,\n RefreshButton,\n SelectField,\n ShowButton,\n SimpleList,\n TopToolbar,\n} from \"react-admin\";\nimport { useMediaQuery, Grid, Typography } from \"@material-ui/core\";\n\nimport { UrgencyOptions } from \"../../../utils/constants\";\nimport { ChevronRightIcon, EmailIcon } from \"../../../components/common\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { Pagination } from \"../../../components/Pagination\";\n\nconst messageRender = (record) => {\n return record.message.substring(0, 50);\n};\n\nconst ListActions = ({ basePath, ...props }) => {\n const history = useHistory();\n\n const handleOpen = (event) => {\n debugger;\n event.stopPropagation();\n event.preventDefault();\n history.push({\n pathname: `/emailAnnouncement`,\n state: { backPath: basePath },\n });\n };\n\n return (\n <TopToolbar>\n <CreateButton basePath={basePath} />\n <Button label=\"Send Email\" color=\"primary\" onClick={handleOpen}>\n <EmailIcon />\n </Button>\n <RefreshButton />\n </TopToolbar>\n );\n};\n\nconst BooleanStringField = ({ record, source, label, ...props }) => {\n record[source] = `${record[source]}` === \"true\";\n return (\n <BooleanField\n source={source}\n label={label}\n record={record}\n looseValue={false}\n sortable={false}\n />\n );\n};\n\nexport const AnnouncementList = (props) => {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n return (\n <List\n {...props}\n title={<ForceTitle title=\"Announcements\" />}\n actions={<ListActions />}\n bulkActionButtons={false}\n pagination={<Pagination />}\n >\n {isXSmall ? (\n <SimpleList\n primaryText={(record) => messageRender(record)}\n secondaryText={(record) => `Urgency: ${messageRender(record)}`}\n tertiaryText={(record) => `Create Date: ${record.createDateTime}`}\n linkType=\"edit\"\n // leftIcon={record => <UserStatusIcon record={record} />}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n />\n ) : isSmall ? (\n <Datagrid rowClick=\"edit\">\n <BooleanStringField\n source=\"active\"\n label=\"Active\"\n looseValue={true}\n sortable={false}\n />\n <SelectField\n source=\"urgency\"\n label=\"Urgency\"\n choices={UrgencyOptions}\n sortable={false}\n />\n <FunctionField\n source=\"message\"\n label=\"Message\"\n render={messageRender}\n sortable={true}\n />\n </Datagrid>\n ) : (\n <Grid container spacing={1}>\n <Grid\n item\n xs={12}\n align=\"center\"\n justify=\"center\"\n alignItems=\"center\"\n >\n <Typography variant=\"h5\">\n ENABLE selected announcements to make them visible on client.\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <Datagrid rowClick=\"edit\">\n <BooleanStringField\n source=\"active\"\n label=\"Active\"\n looseValue={true}\n sortable={false}\n />\n <SelectField\n source=\"urgency\"\n label=\"Urgency\"\n choices={UrgencyOptions}\n sortable={false}\n />\n <DateField\n source=\"createDateTime\"\n label=\"Create Date\"\n sortable={false}\n />\n <FunctionField\n source=\"message\"\n label=\"Message\"\n render={messageRender}\n sortable={true}\n />\n <ShowButton />\n <EditButton />\n </Datagrid>\n </Grid>\n </Grid>\n )}\n </List>\n );\n};\n","import React from \"react\";\nimport {\n useNotify,\n useRedirect,\n useEditController,\n DeleteButton,\n Edit,\n SaveButton,\n ShowButton,\n SimpleForm,\n Toolbar,\n TopToolbar,\n} from \"react-admin\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { UserEditHelp } from \"./UserHelp\";\nimport { AnnouncementForm } from \"./AnnouncementForm\";\n\nexport const AnnouncementEdit = (props) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const { record } = useEditController(props);\n\n const transform = (data) => ({\n ...data,\n createDateTime: data.active === \"true\" ? new Date() : data.createDateTime,\n });\n\n const onSuccess = async ({ data }) => {\n debugger;\n notify(`Announcement updated successfully.`);\n redirect(\"/announcements\");\n };\n\n const onFailure = (error) => {\n logError(\"announcements:AnnouncementEdit:onFailure\", error, notify);\n };\n\n const EditActions = ({ basePath, data }) => (\n <TopToolbar>\n <HelpButton>\n <UserEditHelp {...props} />\n </HelpButton>\n <ShowButton basePath={basePath} record={data} />\n <BackButton basePath={basePath} />\n </TopToolbar>\n );\n\n const EditToolbar = (props) => (\n <Toolbar style={{ justifyContent: \"space-between\" }} {...props}>\n <SaveButton\n label=\"Save\"\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <DeleteButton record={props.record} />\n </Toolbar>\n );\n\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Announcement\" />}\n mutationMode=\"pessimistic\"\n actions={<EditActions />}\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={<EditToolbar />}\n >\n <AnnouncementForm record={record} />\n </SimpleForm>\n </Edit>\n );\n};\n","import React from \"react\";\n\nimport {\n DateField,\n ReferenceField,\n Show,\n SimpleShowLayout,\n TextField,\n TopToolbar,\n} from \"react-admin\";\n\nimport { Typography } from \"@material-ui/core\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\n\nconst ShowActions = ({ basePath }) => (\n <TopToolbar>\n <BackButton basePath={basePath} />\n </TopToolbar>\n);\n\nexport const AnnouncementShow = (props) => {\n return (\n <Show {...props} title=\"Annoucement\" actions={<ShowActions />}>\n <SimpleShowLayout>\n <TextField source=\"message\" label=\"Message\" nultiline />\n <Typography> {(record) => record.message} </Typography>\n <TextField source=\"link\" label=\"Link\" />\n <ReferenceField source=\"tenantId\" reference=\"reloadYards\" link=\"show\">\n <TextField source=\"name\" />\n </ReferenceField>\n <TextField source=\"urgency\" label=\"Urgency\" />\n <DateField source=\"createdDateTime\" label=\"Date Created\" />\n </SimpleShowLayout>\n </Show>\n );\n};\n","import React from \"react\";\nimport {\n List,\n TopToolbar,\n CreateButton,\n RefreshButton,\n EditButton,\n SimpleList,\n Datagrid,\n TextField,\n} from \"react-admin\";\nimport { useMediaQuery } from \"@material-ui/core\";\n\nimport { ChevronRightIcon } from \"../../../components/common\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { Pagination } from \"../../../components/Pagination\";\n\nconst ListActions = ({ basePath, ...props }) => (\n <TopToolbar>\n <CreateButton basePath={basePath} />\n <RefreshButton />\n </TopToolbar>\n);\n\nexport const CommodityList = (props) => {\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n return (\n <List\n {...props}\n title={<ForceTitle title=\"Commodities\" />}\n actions={<ListActions />}\n bulkActionButtons={false}\n pagination={<Pagination />}\n syncWithLocation={false}\n >\n {isXSmall ? (\n <SimpleList\n primaryText={(record) => record.name}\n secondaryText={(record) => `Email: ${record.defaultUnits}`}\n tertiaryText={(record) => `User Type: ${record.locationLoadType}`}\n linkType=\"edit\"\n // leftIcon={record => <UserStatusIcon record={record} />}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n />\n ) : (\n <Datagrid rowClick=\"edit\">\n <TextField source=\"sortKey\" label=\"Sort Key\" sortable={false} />\n <TextField source=\"name\" label=\"Name\" sortable={false} />\n <TextField source=\"active\" label=\"Active\" sortable={false} />\n <TextField\n source=\"defaultUnits\"\n label=\"Default Units\"\n sortable={false}\n />\n <TextField\n source=\"locationLoadType\"\n label=\"Load Type\"\n sortable={false}\n />\n <EditButton />\n </Datagrid>\n )}\n </List>\n );\n};\n","import React from \"react\";\n\nimport { Grid } from \"@material-ui/core\";\n\nimport {\n CheckboxGroupInput,\n minValue,\n number,\n NumberInput,\n RadioButtonGroupInput,\n required,\n SelectInput,\n TextInput,\n} from \"react-admin\";\n\nimport { unitOptionRenderer } from \"../../../utils/loadTypeUtils\";\nimport {\n InventoryFieldOptions,\n LocationLoadTypeOptions,\n UnitOptions,\n} from \"../../../utils/constants\";\nimport { ActiveTrueOrFalse } from \"../../resources/announcements/AnnouncementForm\";\n\nconst validateRequired = [required()];\nconst validateQtyRequired = [required(), number(), minValue(0)];\n\nexport const CommodityForm = (props) => {\n return (\n <Grid container spacing={1}>\n <Grid item xs={12} sm={6}>\n <TextInput\n source=\"name\"\n label=\"Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <NumberInput\n source=\"sortKey\"\n label=\"Sort Key\"\n variant=\"outlined\"\n fullWidth\n validate={validateQtyRequired}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <SelectInput\n source=\"defaultUnits\"\n label=\"Default Units\"\n variant=\"outlined\"\n fullWidth\n choices={UnitOptions}\n optionText={unitOptionRenderer}\n initialValue=\"UNIT\"\n validate={validateRequired}\n // onChange={() => utils.handleUnitChange(form, setCalcError)}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <SelectInput\n source=\"locationLoadType\"\n label=\"Load Type\"\n variant=\"outlined\"\n fullWidth\n choices={LocationLoadTypeOptions}\n validate={validateRequired}\n // onChange={() => utils.handleUnitChange(form, setCalcError)}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n source=\"description\"\n label=\"description\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={12}>\n <CheckboxGroupInput\n source=\"validUom\"\n label=\"Valid UOM\"\n row\n fullWidth\n choices={UnitOptions}\n />\n </Grid>\n <Grid item xs={12}>\n <CheckboxGroupInput\n source=\"inventoryFields\"\n label=\"Inventory Fields\"\n row\n fullWidth\n choices={InventoryFieldOptions}\n helperText=\"Additional Fields to display in Inventory Forms\"\n />\n </Grid>\n <Grid item xs={12} md={6} align=\"left\">\n <RadioButtonGroupInput\n source=\"active\"\n label=\"Active\"\n variant=\"outlined\"\n row\n choices={ActiveTrueOrFalse}\n initialValue={\"false\"}\n validate={validateRequired}\n />\n </Grid>\n </Grid>\n );\n};\n","import React, { useState } from \"react\";\n\nimport {\n useNotify,\n Confirm,\n SaveButton,\n FormDataConsumer,\n useRedirect,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { VALIDATION_MSG } from \"../../../utils/constants\";\n\nexport const DialogSaveButton = ({ backPath, inventory, ...props }) => {\n const form = useForm();\n const formState = form.getState();\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n const [saving, setSaving] = useState(false);\n const [message, setMessage] = useState(\"\");\n\n const formValidate = () => {\n debugger;\n const newFormState = form.getState();\n if (newFormState.invalid) notify(VALIDATION_MSG, \"warning\");\n };\n\n const handleValidateSave = (formData) => {\n debugger;\n // if (validateNotes(form, formData)) {\n // const tempMsg = \"Don't forget to document all Quantity changes in the Notes! \" +\n // \"Do you want to proceed without adding a Note?\";\n // setMessage(tempMsg);\n // setOpen(true);\n // } else\n setMessage(\"\"); // not needed\n handleSave();\n };\n const handleDialogClose = () => setOpen(false);\n\n const handleSave = () => {\n formValidate();\n setOpen(false);\n\n props.handleSubmit();\n };\n\n const transform = async (data) => {\n setSaving(true);\n data = { ...data };\n\n return data;\n };\n\n const onSuccess = async (data) => {\n setSaving(false);\n notify(\"Commodity updated successfully\");\n redirect(\"list\", \"/commoditys\");\n };\n\n const onFailure = (error) => {\n setSaving(false);\n logError(\"commoditys:DialogSaveButton:onFailure\", error, notify);\n };\n\n // Pass ...props, not ...rest to FormDataConsumer to include handleSubmitWithRedirect from props\n return (\n <FormDataConsumer>\n {({ formData, ...props }) => (\n <>\n <SaveButton\n label=\"Save\"\n submitOnEnter={false}\n undoable={false}\n disabled={formState.pristine && !saving}\n saving={saving}\n handleSubmitWithRedirect={() => handleValidateSave(formData)}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <Confirm\n isOpen={open}\n loading={saving}\n title=\"Save Confirmation\"\n content={message}\n onConfirm={handleSave}\n onClose={handleDialogClose}\n />\n </>\n )}\n </FormDataConsumer>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport {\n useDataProvider,\n useNotify,\n useRedirect,\n Button,\n Confirm,\n} from \"react-admin\";\n\nimport { DeleteIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { InventoryStatus } from \"../../../utils/constants\";\nimport { deepRedirect } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeepDeleteButton = ({\n backPath,\n record,\n resource,\n inventory,\n className,\n ...props\n}) => {\n const classes = useStyles();\n const dataProvider = useDataProvider();\n const history = useHistory();\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n const handleDelete = async (event) => {\n setLoading(true);\n setOpen(false);\n try {\n debugger;\n await dataProvider.delete(resource, {\n id: record.id,\n previousData: record,\n });\n\n notify(\"Commodity deleted successfully\");\n deepRedirect(history, backPath);\n } catch (err) {\n logError(\n \"commoditys:DeepDeleteButton:handleDelete\",\n err,\n notify,\n redirect\n );\n }\n setLoading(false);\n };\n\n if (\n !record ||\n record?.status === InventoryStatus.STORED ||\n record?.status === InventoryStatus.SHIPPED\n ) {\n return null;\n }\n return (\n <>\n <Button\n {...props}\n label=\"Delete\"\n disabled={true || loading}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={loading}\n title=\"Delete Confirmation\"\n content=\"Are you sure you want to delete this Commodity record?\"\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React from \"react\";\n\nimport {\n Edit,\n Loading,\n SimpleForm,\n Toolbar,\n TopToolbar,\n useEditController,\n} from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\n\nimport { CommodityForm } from \"./CommodityForm\";\nimport { DialogSaveButton } from \"./DialogSaveButton\";\nimport { DeepDeleteButton } from \"./DeepDeleteButton\";\n\nconst EditActions = (props) => (\n <TopToolbar>\n <BackButton {...props} />\n </TopToolbar>\n);\n\nconst EditToolbar = (props) => (\n <Toolbar style={{ justifyContent: \"space-between\" }}>\n <DialogSaveButton {...props} />\n <DeepDeleteButton {...props} />\n </Toolbar>\n);\n\nexport const CommodityEdit = (props) => {\n const { record } = useEditController(props);\n\n if (!record) return <Loading />;\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Commodity\" />}\n mutationMode=\"pessimistic\"\n actions={<EditActions {...props} />}\n >\n <SimpleForm\n submitOnEnter={false}\n toolbar={<EditToolbar {...props} record={record} />}\n >\n <CommodityForm {...props} record={record} />\n </SimpleForm>\n </Edit>\n );\n};\n","import React, { useState } from \"react\";\n\nimport {\n Create,\n SaveButton,\n SimpleForm,\n Toolbar,\n TopToolbar,\n useNotify,\n useRedirect,\n} from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { CommodityForm } from \"./CommodityForm\";\n\nconst CreateActions = (props) => (\n <TopToolbar>\n <BackButton {...props} />\n </TopToolbar>\n);\n\nconst CreateToolbar = (props) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const [saving, setSaving] = useState(false);\n\n const transform = async (data) => {\n setSaving(true);\n return { ...data };\n };\n\n const onSuccess = (data) => {\n setSaving(false);\n notify(\"Commodity created successfully\");\n redirect(\"list\", \"/commoditys\");\n };\n\n const onFailure = (error) => {\n setSaving(false);\n logError(\"commoditys:CommodityCreate:onFailure\", error, notify);\n };\n\n const savingProps = { ...props, saving: saving };\n return (\n <Toolbar {...savingProps}>\n <SaveButton\n label=\"Save\"\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n </Toolbar>\n );\n};\n\nexport const CommodityCreate = (props) => {\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"Create Location\" />}\n actions={<CreateActions {...props} />}\n >\n <SimpleForm submitOnEnter={false} toolbar={<CreateToolbar {...props} />}>\n <CommodityForm {...props} />\n </SimpleForm>\n </Create>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Card, useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n CreateButton,\n Datagrid,\n FilterButton,\n ListContextProvider,\n ListToolbar,\n RefreshButton,\n TextField,\n Title,\n TopToolbar,\n useListContext,\n BooleanField,\n SelectInput,\n} from \"react-admin\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\nimport { HelpTopicOptions } from \"../../../utils/constants\";\n\nconst useStyles = makeStyles(() => ({\n searchField: {\n marginTop: \"0px\",\n marginBottom: \"8px\",\n maxWidth: \"16rem\",\n minWidth: \"16rem\",\n },\n}));\n\nconst HelpSearchField = ({ label, alwaysOn }) => {\n const classes = useStyles();\n const listContext = useListContext();\n const { displayedFilters, filterValues, setFilters } = listContext;\n\n const handleSearch = (value) => {\n if (value) {\n delete filterValues.or;\n const filters = {\n ...filterValues,\n or: [\n { name: { matchPhrasePrefix: value } },\n { name: { wildcard: `*${value}*` } },\n { url: { matchPhrasePrefix: value } },\n { url: { wildcard: `*${value}*` } },\n { topic: { matchPhrasePrefix: value } },\n { topic: { wildcard: `*${value}*` } },\n ],\n };\n setFilters(filters, displayedFilters);\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n className={classes.searchField}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = () => [\n <SelectInput\n source=\"topic.eq\"\n label=\"Topic\"\n key=\"topic-filter\"\n variant=\"outlined\"\n resettable\n choices={HelpTopicOptions || []}\n optionValue=\"id\"\n alwaysOn\n />,\n <BooleanField\n source=\"isLive.eq\"\n label=\"Is Live\"\n key=\"isLive-filter\"\n variant=\"outlined\"\n resettable\n optionValue=\"id\"\n alwaysOn\n />,\n <HelpSearchField label=\"Search\" alwaysOn />,\n];\n\nconst ListActions = ({ isXSmall }) => (\n <TopToolbar>\n {!isXSmall && <FilterButton />}\n <CreateButton />\n <RefreshButton />\n </TopToolbar>\n);\n\nexport const HelpList = (props) => {\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const gteMedium = useMediaQuery((theme) => theme.breakpoints.up(\"md\"));\n\n const defaultSort = {\n field: `{\"key\":\"helpPageByUrl\", \"search\":\"url\"}`,\n order: \"ASC\",\n };\n const [defaultFilter] = useState({ active: \"true\" });\n\n const defaultSearchFilter = { active: { eq: \"true\" } };\n\n const sessionPerPage = localStorage.getItem(`${props.resource}_perPage`);\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? Number(sessionPerPage) : 10\n );\n\n const listContext = useSearchableList({\n ...props,\n defaultTitle: \"Help Pages\",\n defaultFilter,\n defaultSort,\n defaultSearchFilter,\n defaultPerPage,\n resource: \"helpPages\",\n });\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext.perPage, props.resource]);\n\n useEffect(() => {\n if (listContext?.filter) {\n const fieldObj = JSON.parse(defaultSort.field);\n const keyToCheck = fieldObj.key;\n const hasKey = keyToCheck in listContext.filter;\n const hasFilterValues = Object.keys(listContext.filterValues).length > 0;\n if (hasKey && hasFilterValues) listContext.setFilters({});\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [listContext.filter, defaultSort.field]);\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Help Pages\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters(gteMedium)}\n actions={<ListActions isXSmall={isXSmall} />}\n />\n <Card>\n <Datagrid rowClick=\"edit\">\n <TextField\n source=\"name\"\n label=\"Name\"\n sortable\n sortBy={`{\"key\":\"helpPageByUrl\", \"search\":\"name\"}`}\n />\n <TextField source=\"url\" label=\"URL\" sortable />\n <TextField source=\"topic\" label=\"Topic\" sortable />\n <BooleanField source=\"isLive\" label=\"Is Live\" sortable />\n </Datagrid>\n <Pagination {...listContext} />\n </Card>\n </ListContextProvider>\n );\n};\n","import React, { useState } from \"react\";\nimport { Grid, makeStyles, Typography } from \"@material-ui/core\";\nimport {\n required,\n SelectInput,\n TextInput,\n RadioButtonGroupInput,\n} from \"react-admin\";\nimport { HelpViewer } from \"../../../components/common/HelpViewer/HelpViewer\";\nimport { HelpTopicOptions } from \"../../../utils/constants\";\nimport { cleanUrlLink } from \"../../../utils/utils\";\nimport { ToolTipIcon } from \"../../../components/common/ToolTipIcon\";\n\nconst validateRequired = [required()];\n\nconst EXAMPLE_PLACEHOLDER = `# Title\nLorem *ipsum* dolor sit amet, consectetur **adipiscing** elit.\n\n- Video [video](video/video_id) Example Text.\n- Tour [tour](tour/tour_id) Example Text.\n- Custom [custom](custom) Example Text.\n- Link [google](google.com) Example Text.\n`;\n\nconst useStyles = makeStyles((theme) => ({\n formContainer: {\n padding: theme.spacing(3),\n },\n markdownViewer: {\n display: \"flex\",\n flexDirection: \"column\",\n border: \"1px solid #6e6e6e\",\n marginTop: theme.spacing(1),\n minHeight: theme.spacing(45.125),\n borderRadius: theme.shape.borderRadius,\n padding: theme.spacing(1),\n overflowY: \"scroll\",\n },\n booleanInput: {\n marginTop: theme.spacing(2),\n },\n liveInput: {\n paddingLeft: theme.spacing(2),\n },\n textWithToolTip: {\n display: \"flex\",\n flexDirection: \"row\",\n },\n}));\n\nconst ActiveTrueOrFalse = [\n { id: true, name: \"Yes\" },\n { id: false, name: \"No\" },\n];\nexport const HelpForm = ({ record, location }) => {\n const [markdown, setMarkdown] = useState(\n record?.content || location?.state?.clone?.content || \"\"\n );\n const classes = useStyles();\n\n return (\n <Grid className={classes.formContainer}>\n <Typography variant=\"h6\" gutterBottom>\n Edit Help Page\n </Typography>\n <Grid container spacing={2}>\n <Grid item xs={12} md={4}>\n <TextInput\n source=\"name\"\n label=\"Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid className={classes.textWithToolTip} item xs={12} md={4}>\n <TextInput\n source=\"url\"\n label=\"URL\"\n variant=\"outlined\"\n fullWidth\n parse={cleanUrlLink}\n disabled={!!record.url}\n validate={validateRequired}\n helperText={false}\n />\n <ToolTipIcon label=\"urlIcon\" ml={2} />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n source=\"topic\"\n label=\"Topic\"\n variant=\"outlined\"\n choices={HelpTopicOptions}\n fullWidth\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"content\"\n label=\"Content\"\n variant=\"outlined\"\n multiline\n minRows={18}\n fullWidth\n onChange={(e) => setMarkdown(e.target.value)}\n placeholder={EXAMPLE_PLACEHOLDER}\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <div className={classes.markdownViewer}>\n <HelpViewer md={markdown} />\n </div>\n </Grid>\n <Grid item xs={12}>\n <RadioButtonGroupInput\n variant=\"outlined\"\n row\n id=\"isLiveC\"\n className={classes.liveInput}\n source=\"isLive\"\n label=\"Is live on Production\"\n choices={ActiveTrueOrFalse}\n initialValue={false}\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n </Grid>\n </Grid>\n );\n};\n","import React, { useState } from \"react\";\nimport {\n Create,\n SaveButton,\n SimpleForm,\n Toolbar,\n TopToolbar,\n useNotify,\n useRedirect,\n} from \"react-admin\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { useForm } from \"react-final-form\";\nimport { HelpForm } from \"./HelpForm\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { helpPageByUrl } from \"../../../graphql/queries\";\n\nconst CreateActions = (props) => (\n <TopToolbar>\n <HelpButton />\n <BackButton {...props} />\n </TopToolbar>\n);\n\nconst CreateToolbar = (props) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const form = useForm();\n\n const [saving, setSaving] = useState(false);\n\n const transform = async (data) => {\n setSaving(true);\n return { ...data, active: true };\n };\n\n const onSave = async (data) => {\n const formState = form.getState();\n const url = formState?.values?.url;\n\n try {\n const input = { active: \"true\", url: { eq: url }, limit: 100 };\n const response = await API.graphql(\n graphqlOperation(helpPageByUrl, input)\n );\n const helpPageData = response.data?.helpPageByUrl?.items;\n if (helpPageData.length > 0) {\n setSaving(false);\n notify(\"A Help Page with this URL already exists\", \"warning\");\n return;\n } else {\n props.handleSubmit();\n }\n } catch (error) {\n setSaving(false);\n logError(\"helpPages:HelpPageCreate:transform\", error, notify);\n return;\n }\n };\n\n const onSuccess = () => {\n setSaving(false);\n notify(\"Help Page created successfully\");\n redirect(\"list\", \"/helpPages\");\n };\n\n const onFailure = (error) => {\n setSaving(false);\n notify(\"Failed to create Help Page\", \"error\");\n logError(\"helpPages:HelpPageCreate:onFailure\", error, notify);\n };\n\n return (\n <Toolbar {...props} saving={saving}>\n <SaveButton\n id=\"saveHelp\"\n label=\"Save\"\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n handleSubmitWithRedirect={onSave}\n />\n </Toolbar>\n );\n};\n\nexport const HelpCreate = (props) => {\n const cloneRecord = props.location?.state?.clone || {};\n const initValues = {\n ...cloneRecord,\n };\n delete initValues.id;\n delete initValues.url;\n delete initValues.updatedAt;\n delete initValues.createdAt;\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"Create Help Page\" />}\n actions={<CreateActions {...props} />}\n >\n <SimpleForm\n initialValues={initValues}\n submitOnEnter={false}\n toolbar={<CreateToolbar {...props} />}\n >\n <HelpForm {...props} />\n </SimpleForm>\n </Create>\n );\n};\n","import React, { useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport {\n useNotify,\n useRedirect,\n useDataProvider,\n Button,\n Confirm,\n} from \"react-admin\";\n\nimport { DeleteIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nconst DeleteButtonWithConfirm = ({\n setLoading,\n loading,\n record,\n resource,\n className,\n basePath,\n ...props\n}) => {\n const classes = useStyles();\n const notify = useNotify();\n const redirect = useRedirect();\n const dataProvider = useDataProvider();\n const [open, setOpen] = useState(false);\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n const handleUpdate = async () => {\n setLoading(true);\n try {\n await dataProvider.update(resource, {\n id: record.id,\n data: { ...record, active: \"false\", isLive: false },\n previousData: record,\n });\n\n notify(\"File status updated successfully\");\n redirect(basePath);\n } catch (err) {\n logError(\"DeleteButtonWithConfirm:handleUpdate\", err, notify);\n } finally {\n setLoading(false);\n setOpen(false);\n }\n };\n\n return (\n <>\n <Button\n {...props}\n label=\"Delete\"\n disabled={loading}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={loading}\n title=\"Update Confirmation\"\n content=\"Are you sure you want to delete this File?\"\n onConfirm={handleUpdate}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n\nexport default DeleteButtonWithConfirm;\n","import React, { useState } from \"react\";\nimport {\n Edit,\n SaveButton,\n SimpleForm,\n Toolbar,\n TopToolbar,\n Button,\n} from \"react-admin\";\nimport { HelpForm } from \"./HelpForm\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { CopyIcon } from \"../../../components/common\";\nimport { deepRedirect } from \"../../../utils/utils\";\nimport DeepDeleteButton from \"./DeepDeleteButton\";\n\nconst CloneButton = ({ history, backPath, data, location, resource }) => {\n const handleClone = () => {\n deepRedirect(history, `/${resource}/create`, location.pathname, backPath, {\n clone: data,\n });\n };\n\n return (\n <Button label=\"Clone\" size=\"small\" color=\"primary\" onClick={handleClone}>\n <CopyIcon />\n </Button>\n );\n};\n\nconst EditActions = (props) => (\n <TopToolbar>\n <HelpButton />\n <CloneButton {...props} />\n <BackButton {...props} />\n </TopToolbar>\n);\n\nconst EditToolbar = ({ record, resource, basePath, ...props }) => {\n const [loading, setLoading] = useState(false);\n\n return (\n <Toolbar\n style={{ justifyContent: \"space-between\" }}\n {...props}\n saving={loading}\n >\n <SaveButton />\n <DeepDeleteButton\n loading={loading}\n setLoading={setLoading}\n record={record}\n resource={resource}\n basePath={basePath}\n />\n </Toolbar>\n );\n};\n\nexport const HelpEdit = (props) => {\n return (\n <Edit\n {...props}\n title=\"Edit Help Page\"\n mutationMode=\"pessimistic\"\n actions={<EditActions {...props} />}\n >\n <SimpleForm submitOnEnter={false} toolbar={<EditToolbar {...props} />}>\n <HelpForm {...props} />\n </SimpleForm>\n </Edit>\n );\n};\n","import React from \"react\";\nimport { Admin, Resource } from \"react-admin\";\n\nimport { myDataProvider } from \"../dataProvider/dataProvider\";\nimport adminRoutes from \"./layout/adminRoutes\";\n\nimport { AdminLayout } from \"./layout/AdminLayout\";\nimport { AdminDashboard } from \"./layout/AdminDashboard\";\n\nimport { ReloadYardList } from \"./resources/reloadYards/ReloadYardList\";\nimport { MyYardShow } from \"../managerApp/resources/reloadYard/ReloadYardShow\";\nimport { MyYardEdit } from \"../managerApp/resources/reloadYard/ReloadYardEdit\";\n\nimport SetupList from \"./resources/registrations/SetupList\";\nimport SetupShow from \"./resources/registrations/SetupShow\";\nimport SetupEdit from \"./resources/registrations/SetupEdit\";\n\nimport { LogList } from \"./resources/logs/LogList\";\nimport { LogShow } from \"./resources/logs/LogShow\";\nimport { LogEdit } from \"./resources/logs/LogEdit\";\n\nimport { UserList } from \"../managerApp/resources/users/UserList\";\nimport { UserEdit } from \"../managerApp/resources/users/UserEdit\";\nimport { UserShow } from \"../managerApp/resources/users/UserShow\";\n\nimport { AnnouncementCreate } from \"./resources/announcements/AnnouncementCreate\";\nimport { AnnouncementList } from \"./resources/announcements/AnnouncementList\";\nimport { AnnouncementEdit } from \"./resources/announcements/AnnouncementEdit\";\nimport { AnnouncementShow } from \"./resources/announcements/AnnouncementShow\";\n\nimport { CommodityList } from \"./resources/commoditys/CommodityList\";\nimport { CommodityEdit } from \"./resources/commoditys/CommodityEdit\";\nimport { CommodityCreate } from \"./resources/commoditys/CommodityCreate\";\n\nimport { HelpList } from \"./resources/helpPages/HelpList\";\nimport { HelpCreate } from \"./resources/helpPages/HelpCreate\";\nimport { HelpEdit } from \"./resources/helpPages/HelpEdit\";\n\nimport { theme, darkTheme } from \"../withRoot\";\nimport { useThemeState } from \"../ThemeStateProvider\";\n\nexport const AdminApp = ({ adminHistory }) => {\n const { palette } = useThemeState();\n\n return (\n <Admin\n disableTelemetry\n title=\"Transloads.co\"\n dashboard={AdminDashboard}\n options={{ authGroups: [] }}\n dataProvider={myDataProvider}\n customRoutes={adminRoutes}\n layout={AdminLayout}\n theme={palette === \"dark\" ? darkTheme : theme}\n history={adminHistory}\n >\n <Resource\n name=\"commoditys\"\n create={CommodityCreate}\n list={CommodityList}\n edit={CommodityEdit}\n />\n <Resource\n name=\"setupDatas\"\n list={SetupList}\n show={SetupShow}\n edit={SetupEdit}\n />\n <Resource\n name=\"reloadYards\"\n show={MyYardShow}\n edit={MyYardEdit}\n list={ReloadYardList}\n />\n <Resource name=\"users\" list={UserList} show={UserShow} edit={UserEdit} />\n <Resource\n name=\"announcements\"\n create={AnnouncementCreate}\n list={AnnouncementList}\n edit={AnnouncementEdit}\n show={AnnouncementShow}\n />\n <Resource\n name=\"helpPages\"\n list={HelpList}\n create={HelpCreate}\n edit={HelpEdit}\n />\n <Resource name=\"logs\" list={LogList} show={LogShow} edit={LogEdit} />\n </Admin>\n );\n};\n","export const inventorySearchReducer = function reducer(state, action) {\n switch (action.type) {\n case \"SET_DB_INVENTORIES\":\n return {\n ...state,\n dbInventories: action.payload,\n };\n case \"SET_SEARCH_INVENTORIES\":\n return {\n ...state,\n searchInventories: action.payload,\n };\n case \"SET_INVENTORY_ITEM_SCANNED_BARCODE\":\n return {\n ...state,\n scannedBarcode: action.payload,\n };\n case \"SET_ALL_ACCOUNTS\":\n return {\n ...state,\n allAccounts: action.payload,\n };\n\n case \"SET_AREAS\":\n return {\n ...state,\n areas: action.payload,\n };\n case \"SET_ZONES\":\n return {\n ...state,\n zones: action.payload.zones,\n aisles: action.payload.aisles,\n };\n case \"SET_AISLES\":\n return {\n ...state,\n aisles: action.payload,\n };\n case \"SET_SELECTED_AREA\":\n return {\n ...state,\n zones: action.payload.zones,\n selectedArea: action.payload.selectedArea,\n selectedZone: action.payload.zone,\n selectedAisle: null,\n selectedLocation: null,\n };\n case \"SET_SELECTED_ZONE\":\n return {\n ...state,\n selectedZone: action.payload,\n selectedAisle: null,\n selectedLocation: null,\n };\n case \"SET_SELECTED_AISLE\":\n return {\n ...state,\n selectedAisle: action.payload.aisle,\n bayList: action.payload.bayList,\n showCapacityDisplay: action.payload.showCapacityDisplay,\n selectedLocation: action.payload.selectedLocation,\n inventoryItemBayList: action.payload.inventoryItemBayList,\n };\n case \"SET_SELECTED_INVENTORY_ITEM\":\n return {\n ...state,\n currentInventory: action.payload.inventory,\n selectedInventoryItem: { ...action.payload },\n };\n case \"SET_ORIGINAL_INVENTORY_ITEM\":\n return {\n ...state,\n selectedArea: action.payload.location.area,\n selectedZone: action.payload.location.zone,\n selectedAisle: action.payload.location.aisle,\n originalLocation: action.payload.location,\n originalInventoryItem: action.payload,\n };\n case \"CLEAR_INVENTORY_ITEM\":\n return {\n ...state,\n selectedInventoryItem: null,\n selectedArea: null,\n selectedZone: null,\n selectedAisle: null,\n originalLocation: null,\n originalInventoryItem: null,\n selectedLocation: null,\n bayList: null,\n inventoryItemBayList: null,\n selectedSearchAisleId: \"\",\n };\n case \"UPDATE_CURRENT_INVENTORY\":\n return {\n ...state,\n currentInventory: { ...action.payload },\n };\n case \"UPDATE_INVENTORY_ITEM\":\n return {\n ...state,\n selectedInventoryItem: { ...action.payload },\n };\n case \"SET_LOADING\":\n return {\n ...state,\n loading: action.payload,\n };\n case \"SET_SELECTED_LOCATION\":\n return {\n ...state,\n selectedLocation: action.payload.location,\n };\n case \"SET_DISABLE_VALIDATION\":\n return {\n ...state,\n disableRelocateValidation: action.payload,\n };\n case \"SET_SELECTED_LOCATION_INVENTORIES\":\n return {\n ...state,\n selectedLocationInventories: action.payload,\n };\n case \"SET_AISLE_SEARCH_INVENTORIES\":\n return {\n ...state,\n searchInventoryItemsMap: action.payload,\n };\n case \"SET_SHOW_QUANTITY\":\n return {\n ...state,\n showInventoryQuantity: action.payload,\n };\n case \"SET_SEARCH_AISLES\":\n return {\n ...state,\n searchAisles: action.payload,\n };\n case \"SET_SEARCH_SELECTED_AISLE\":\n return {\n ...state,\n selectedSearchAisleId: action.payload,\n };\n case \"NO_SEARCH\":\n return {\n ...state,\n noSearch: action.payload,\n };\n case \"CLEAR_SEARCH\":\n return {\n ...state,\n selectedSearchAisleId: \"\",\n searchInventories: [],\n dbInventories: [],\n noSearch: true,\n };\n default:\n break;\n }\n return state;\n};\n","import { createContext, useContext, useReducer } from \"react\";\nimport { inventorySearchReducer } from \"./reducer\";\n\nexport const SELECT_AN_ACCOUNT = \"Select an account\";\nexport const NO_ACCOUNT = { id: \"\", businessName: SELECT_AN_ACCOUNT };\n\nconst initState = {\n currentInventory: {},\n selectedInventoryItem: null,\n origInventoryItem: null,\n areas: null,\n zones: null,\n selectedArea: null,\n selectedZone: null,\n selectedAisle: null,\n selectedLocation: null,\n selectedLocationInventories: [],\n bayList: [],\n showCapacityDisplay: false,\n dbInventories: [],\n searchInventories: [],\n allAccounts: [NO_ACCOUNT],\n selectedAccount: NO_ACCOUNT,\n searchTerm: \"\",\n searchInventoryItemsMap: [],\n showInventoryQuantity: false,\n loading: true,\n searchAisles: [],\n scannedBarcode: \"\",\n};\n\nconst InventorySearchContext = createContext(initState);\nexport const InventorySearchProvider = ({ children }) => {\n const [state, dispatch] = useReducer(inventorySearchReducer, initState);\n\n return (\n <InventorySearchContext.Provider value={{ state, dispatch }}>\n {children}\n </InventorySearchContext.Provider>\n );\n};\nexport const useInventorySearchContext = () =>\n useContext(InventorySearchContext);\n","import { NO_ACCOUNT } from \"./crewApp/pages/inventorySearch/context\";\n\nconst initState = {\n user: null,\n loading: false,\n reloadYard: null,\n theme: {},\n announcements: {\n showAnnouncements: false,\n fetchTimestamp: 0,\n },\n searchState: {\n searchTerm: \"\",\n selectedAccount: NO_ACCOUNT,\n },\n};\n\nexport default function reducer(state = initState, action) {\n switch (action.type) {\n case \"LOGIN\":\n debugger;\n return {\n ...state,\n user: action.payload,\n };\n case \"LOGOUT\":\n debugger;\n return {\n ...state,\n user: null,\n reloadYard: null,\n };\n case \"SET_ANNOUNCEMENTS\":\n return {\n ...state,\n announcements: {\n ...state.announcements,\n showAnnouncements: action.payload.showAnnouncements,\n fetchTimestamp: action.payload.fetchTimestamp\n ? action.payload.fetchTimestamp\n : state.announcements.fetchTimestamp,\n announcementList: action.payload.announcementList,\n isConfirmOpen: true,\n },\n };\n case \"SET_LAST_ANNOUNCEMENTS_CHECK_TIMESTAMP\":\n return {\n ...state,\n announcements: { ...state.announcements },\n };\n case \"SET_IS_CONFIRM_OPEN\":\n return {\n ...state,\n announcements: {\n ...state.announcements,\n isConfirmOpen: action.payload,\n },\n };\n case \"SET_LOADING\":\n return {\n ...state,\n isLoading: action.payload.isLoading,\n };\n case \"SET_SEARCH_TERM\":\n return {\n ...state,\n searchState: {\n ...state.searchState,\n searchTerm: action.payload,\n },\n };\n case \"SET_SELECTED_ACCOUNT\":\n return {\n ...state,\n searchState: {\n ...state.searchState,\n selectedAccount: action.payload,\n },\n };\n case \"CLEAR_SEARCH_STATE\":\n return {\n ...state,\n searchState: {\n searchTerm: \"\",\n selectedAccount: NO_ACCOUNT,\n trackRedirect: false,\n },\n };\n case \"SET_LAST_SELECTED_AISLE\":\n return {\n ...state,\n lastSelectedAisle: action.payload,\n };\n default:\n break;\n }\n return state;\n}\n","import React from \"react\";\nimport {\n Card,\n CardHeader,\n CardContent,\n Typography,\n Avatar,\n} from \"@material-ui/core\";\nimport ErrorOutlineOutlinedIcon from \"@material-ui/icons/ErrorOutlineOutlined\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: \"100%\",\n marginTop: theme.spacing(2),\n marginRight: theme.spacing(4),\n },\n}));\n\nexport default function ErrorCard({ error }) {\n const classes = useStyles();\n debugger;\n\n return (\n <Card className={classes.root}>\n <CardHeader\n title={<Typography variant=\"h6\">Error</Typography>}\n color=\"error\"\n avatar={\n <Avatar className={classes.avatar}>\n <ErrorOutlineOutlinedIcon />\n </Avatar>\n }\n />\n <CardContent>\n <Typography color=\"error\">{error}</Typography>\n </CardContent>\n </Card>\n );\n}\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport * as queries from \"../../../graphql/queries\";\nimport { useNotify, useRedirect } from \"react-admin\";\nimport { formatDistanceToNow } from \"date-fns\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { Title } from \"react-admin\";\nimport { Route, Link } from \"react-router-dom\";\nimport {\n Avatar,\n Box,\n Button,\n CardContent,\n CardHeader,\n CardActions,\n CircularProgress,\n Divider,\n FormControl,\n FormControlLabel,\n Grid,\n IconButton,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n ListItemSecondaryAction,\n Switch,\n TextField,\n Typography,\n useMediaQuery,\n Backdrop,\n} from \"@material-ui/core\";\nimport { amber, green, red } from \"@material-ui/core/colors\";\nimport {\n CloseIcon,\n ChevronRightIcon,\n TaskItemOutlinedIcon,\n TaskListOutlinedIcon,\n RefreshIcon,\n AttachFileIcon,\n} from \"../../../components/common\";\nimport ErrorCard from \"../../../components/ErrorCard\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { getTaskPriorityText, getTaskStatusText } from \"../../../utils/utils\";\nimport { updateTask } from \"../../../graphql/mutations\";\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport { FileField } from \"../../../components/common/FileField\";\n\nconst useStyles = makeStyles((theme) => ({\n taskSwitch: {\n marginTop: theme.spacing(1.25),\n marginRight: theme.spacing(2),\n },\n link: {\n color: \"inherit\",\n textDecoration: \"inherit\",\n },\n notFound: {\n display: \"flex\",\n margin: theme.spacing(2),\n },\n actions: {\n display: \"flex\",\n justifyContent: \"space-between\",\n padding: theme.spacing(2),\n },\n green: {\n color: theme.palette.getContrastText(green[200]),\n backgroundColor: green[200],\n },\n amber: {\n color: theme.palette.getContrastText(amber[100]),\n backgroundColor: amber[100],\n },\n red: {\n color: theme.palette.getContrastText(red[100]),\n backgroundColor: red[100],\n },\n backdrop: {\n zIndex: 90001,\n },\n inputField: {\n width: \"50%\",\n },\n topActions: {\n paddingTop: theme.spacing(2),\n display: \"flex\",\n alignItems: \"center\",\n },\n}));\n\nexport const Tasks = ({ match, history, redirectTo, hideTitle }) => {\n const [showAllTasks, setShowAllTasks] = useState(false);\n const [loading, setLoading] = useState();\n const isComponentMounted = useRef(true);\n const [tasks, setTasks] = useState([]);\n const classes = useStyles();\n const notify = useNotify();\n if (!redirectTo) redirectTo = history.location.state?.redirectTo;\n\n useEffect(() => {\n if (isComponentMounted && window.appUser) {\n setLoading(true);\n getTasks();\n }\n\n return () => {\n isComponentMounted.current = false;\n };\n }, []);\n\n const getTasks = async (allTasks) => {\n const input = {\n assignedTo: window.appUser?.id,\n statusDueDate: {\n lt: {\n status: \"21\",\n },\n },\n };\n if (allTasks) {\n input.statusDueDate = {\n lt: {\n status: \"41\",\n },\n };\n }\n try {\n const response = await API.graphql(\n graphqlOperation(queries.taskByAssignedToByStatusByDueDate, input)\n );\n const tasksResponse =\n response.data.taskByAssignedToByStatusByDueDate.items;\n setTasks(tasksResponse);\n } catch (err) {\n logError(\"Tasks:getTasks\", err, notify);\n } finally {\n setLoading(false);\n }\n };\n\n const toggleChecked = () => {\n debugger;\n const value = !showAllTasks;\n setShowAllTasks(value);\n getTasks(value);\n };\n\n return loading ? (\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n ) : (\n <>\n {!hideTitle && <Title title=\"My Tasks\" />}\n <Route\n path={`${match.path}`}\n exact\n render={(props) => (\n <TaskList\n classes={classes}\n tasks={tasks}\n toggleChecked={toggleChecked}\n showAllTasks={showAllTasks}\n {...props}\n redirectTo={redirectTo}\n refresh={getTasks}\n />\n )}\n />\n <Route\n path={`${match.path}/:id`}\n render={(props) => (\n <TaskItem\n {...props}\n setTasks={setTasks}\n tasks={tasks}\n classes={classes}\n redirectTo={redirectTo}\n />\n )}\n />\n </>\n );\n};\n\nconst TaskList = ({\n history,\n tasks,\n toggleChecked,\n showAllTasks,\n redirectTo,\n refresh,\n}) => {\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n const getAvatarClassName = (task) => {\n if (task.priority === 2) return classes.amber;\n if (task.priority === 3) return classes.red;\n return classes.avatar;\n };\n\n const handleClick = (task) => {\n history.push(`/mytasks/${task.id}`);\n };\n\n return (\n <CrewCard\n title=\"My Tasks\"\n icon={<TaskListOutlinedIcon fontSize=\"large\" />}\n addMargin={true}\n action={\n <div className={classes.topActions}>\n {!isXSmall && (\n <FormControl>\n <FormControlLabel\n label=\"All Tasks\"\n labelPlacement=\"start\"\n control={\n <Switch\n color={showAllTasks ? \"secondary\" : \"default\"}\n checked={showAllTasks}\n onChange={toggleChecked}\n />\n }\n />\n </FormControl>\n )}\n <IconButton onClick={refresh}>\n <RefreshIcon fontSize=\"large\" />\n </IconButton>\n </div>\n }\n >\n {tasks?.length > 0 ? (\n <List>\n {tasks.map((task, idx) => {\n return (\n <div key={task.id}>\n <Link\n className={classes.link}\n to={{\n pathname: `/mytasks/${task.id}`,\n state: { task, redirectTo },\n }}\n >\n <ListItem>\n <ListItemAvatar>\n <Avatar className={getAvatarClassName(task)}>\n <TaskItemOutlinedIcon fontSize=\"inherit\" />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={task.name}\n secondary={task.description}\n />\n <ListItemSecondaryAction>\n <IconButton onClick={() => handleClick(task)}>\n <ChevronRightIcon fontSize=\"large\" />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n </Link>\n {idx < tasks.length - 1 ? <Divider /> : null}\n </div>\n );\n })}\n </List>\n ) : (\n <Typography className={classes.notFound}>No tasks found.</Typography>\n )}\n </CrewCard>\n );\n};\n\nconst TaskItem = ({\n tasks,\n setTasks,\n match,\n history,\n classes,\n redirectTo = \"/mytasks\",\n}) => {\n const [task, setTask] = useState(history.location.state?.task);\n const [invalidIdError, setInvalidIdError] = useState();\n const notify = useNotify();\n const redirect = useRedirect();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n debugger;\n\n useEffect(() => {\n if (!task && tasks.length > 0 && match.params.id) {\n const selectedTask = tasks.filter((itm) => itm.id === match.params.id);\n if (selectedTask.length === 1) {\n setTask(selectedTask[0]);\n } else {\n setInvalidIdError(`Task ID ${match.params.id} doesn't exist.`);\n }\n }\n }, [match.params.id, tasks, task]);\n\n const handleProcess = () => {\n if (task.link) {\n history.push(task.link);\n }\n };\n\n const handleComplete = async () => {\n try {\n debugger;\n task.status = 30;\n task.completedDate = new Date().toISOString();\n await saveTask(task);\n setTasks(tasks.filter((itm) => itm.id !== task.id));\n history.push(redirectTo);\n } catch (err) {\n logError(\"TaskItem:handleComplete\", err, notify, redirect);\n }\n };\n\n const saveTask = async (task) => {\n debugger;\n delete task.updatedAt;\n await API.graphql(graphqlOperation(updateTask, { input: task }));\n };\n\n const handleSave = async (task) => {\n try {\n debugger;\n await saveTask(task);\n setTasks(tasks.map((itm) => (itm.id === task.id ? task : itm)));\n history.push(redirectTo);\n } catch (err) {\n logError(\"TaskItem:handleSave\", err, notify, redirect);\n }\n };\n\n const handleCancel = () => {\n debugger;\n history.replace(redirectTo);\n };\n\n const setNote = (evt) => {\n setTask({ ...task, note: evt.target.value });\n };\n\n return invalidIdError ? (\n <ErrorCard error={invalidIdError} />\n ) : task ? (\n <CrewCard>\n <CardHeader\n title={task.name}\n subheader={`Due in ${formatDistanceToNow(new Date(task.dueDate))}`}\n className={classes.listHeader}\n action={\n <IconButton edge=\"start\" onClick={() => handleCancel()}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n }\n />\n <CardContent style={{ paddingBottom: 0 }}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <Typography gutterBottom>{task.description}</Typography>\n </Grid>\n <Grid item sm={6} xs={12}>\n <TextField\n name=\"priority\"\n label=\"Priority\"\n fullWidth\n className={!isXSmall ? classes.inputField : null}\n margin=\"dense\"\n variant=\"outlined\"\n value={getTaskPriorityText(task.priority)}\n disabled\n />\n </Grid>\n <Grid item sm={6} xs={12}>\n <TextField\n name=\"status\"\n label=\"Status\"\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n className={!isXSmall ? classes.inputField : null}\n value={getTaskStatusText(task.status)}\n disabled\n />\n </Grid>\n <Grid item sm={6} xs={12}>\n <TextField\n name=\"duedate\"\n label=\"Due date\"\n margin=\"dense\"\n type=\"date\"\n fullWidth\n className={!isXSmall ? classes.inputField : null}\n variant=\"outlined\"\n value={task.dueDate}\n disabled\n />\n </Grid>\n <Grid item sm={6} xs={12}>\n <TextField\n name=\"latedate\"\n label=\"Late date\"\n margin=\"dense\"\n type=\"date\"\n fullWidth\n className={!isXSmall ? classes.inputField : null}\n variant=\"outlined\"\n value={task.lateDate}\n disabled\n />\n </Grid>\n <Grid item xs={12}>\n <TextField\n name=\"notes\"\n id=\"outlined-multiline-static\"\n label=\"Note\"\n multiline\n minRows={3}\n margin=\"dense\"\n variant=\"outlined\"\n value={task.note ? task.note : \"\"}\n fullWidth\n onChange={setNote}\n />\n </Grid>\n <Grid item xs={12}>\n <Typography gutterBottom>Attachments</Typography>\n {task?.attachments &&\n task.attachments.map((file) => (\n <Box display=\"flex\" alignItems=\"center\">\n <AttachFileIcon fontSize=\"small\" />\n <FileField\n source=\"file\"\n record={file}\n src=\"url\"\n title=\"desc\"\n target=\"_blank\"\n />\n </Box>\n ))}\n </Grid>\n </Grid>\n </CardContent>\n <CardActions className={classes.actions}>\n <Button onClick={() => handleSave(task)} size=\"large\">\n Save\n </Button>\n {Number(task.status) <= 20 && (\n <div>\n {task.link && (\n <Button onClick={handleProcess} color=\"secondary\" size=\"large\">\n Process\n </Button>\n )}\n <Button onClick={handleComplete} color=\"primary\" size=\"large\">\n Complete\n </Button>\n </div>\n )}\n </CardActions>\n </CrewCard>\n ) : null;\n};\n","// https://github.com/aws-amplify/amplify-cli/issues/2420\n\nexport const getAuditNextItems = /* GraphQL */ `\n query GetAuditNextItems($id: ID!) {\n getAudit(id: $id) {\n id\n processedItems\n nextItems {\n locationIdx\n owner\n name\n }\n updatedAt\n }\n }\n`;\n\nexport const auditByStatusByDateOptions = /* GraphQL */ `\n query AuditByStatusByDate(\n $reloadYardId: ID\n $statusCreateDateTime: ModelAuditAuditByStatusByDateCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAuditFilterInput\n $limit: Int\n $nextToken: String\n ) {\n auditByStatusByDate(\n reloadYardId: $reloadYardId\n statusCreateDateTime: $statusCreateDateTime\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n status\n accountName\n assignedTo\n createDateTime\n }\n }\n }\n`;\n","import React, { useState } from \"react\";\n\nimport {\n TextField,\n Card,\n CardContent,\n CardHeader,\n Typography,\n Button,\n Grid,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles((theme) => ({\n auditButtonCenter: {\n display: \"flex\",\n justifyContent: \"center\",\n margin: theme.spacing(2),\n },\n}));\n\nconst AuditSummary = ({ currentAudit, finishAudit, isCompleted }) => {\n let [audit, setAudit] = useState(currentAudit);\n let matchCount = 0;\n let noMatchCount = 0;\n let itemsNotFound = 0;\n const classes = useStyles();\n\n const handleComplete = () => {\n debugger;\n const completed = isCompleted();\n completed && finishAudit(audit);\n };\n\n currentAudit.processedItems &&\n currentAudit.processedItems.forEach((itm) => {\n if (itm.quantityPhysical === 0) itemsNotFound++;\n else if (itm.quantityPhysical !== itm.quantityOnHand) noMatchCount++;\n else if (itm.quantityPhysical === itm.quantityOnHand) matchCount++;\n });\n\n return (\n <Card>\n <CardHeader title=\"Audit summary\" subheader=\"\" />\n <CardContent>\n <Grid container spacing=\"2\">\n <Grid item sm={12}>\n <Typography component=\"p\">\n Total items processed: {currentAudit.processedItems.length}\n </Typography>\n </Grid>\n <Grid item sm={12}>\n <Typography component=\"p\">Items matched: {matchCount}</Typography>\n </Grid>\n <Grid item sm={12}>\n <Typography component=\"p\">\n Items not matched: {noMatchCount}\n </Typography>\n </Grid>\n <Grid item sm={12}>\n <Typography component=\"p\">\n Missing items: {itemsNotFound}\n </Typography>\n </Grid>\n <Grid item sm={12}>\n <TextField\n name=\"note\"\n id=\"audit-note\"\n label=\"Notes\"\n multiline\n minRows={4}\n value={audit.notes ? audit.notes : \" \"}\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n onChange={(evt) =>\n setAudit({ ...audit, notes: evt.target.value })\n }\n />\n </Grid>\n </Grid>\n </CardContent>\n <div className={classes.auditButtonCenter}>\n <Button\n size=\"large\"\n onClick={handleComplete}\n variant=\"contained\"\n color=\"secondary\"\n >\n Complete Audit\n </Button>\n </div>\n </Card>\n );\n};\n\nexport default AuditSummary;\n","import React, { useState, useEffect, useRef } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { listAuditInventoriesByAccount } from \"../../../graphql/inventory/custom-queries\";\n\nimport { TextField, Typography, Button, Grid, Avatar } from \"@material-ui/core\";\nimport { orange, amber, grey, green, blueGrey } from \"@material-ui/core/colors\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\nimport LocationOnOutlinedIcon from \"@material-ui/icons/LocationOnOutlined\";\nimport { getNextItem } from \"./Audit\";\nimport CrewCard from \"../../../components/common/CrewCard\";\n\nconst useStyles = makeStyles((theme) => ({\n locationContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(1),\n marginTop: theme.spacing(1),\n },\n locationItem: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n locationAvatar: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n width: theme.spacing(9.5),\n height: theme.spacing(9.5),\n color: theme.palette.text.primary,\n backgroundColor: blueGrey[100],\n margin: theme.spacing(1),\n },\n locationSelectedAvatar: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n width: theme.spacing(9.5),\n height: theme.spacing(9.5),\n boarder: \"2px solid black\",\n color: theme.palette.getContrastText(orange[100]),\n backgroundColor: orange[100],\n margin: theme.spacing(1),\n },\n locationCompletedAvatar: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n width: theme.spacing(9.5),\n // color: theme.palette.text.primary,\n color: theme.palette.getContrastText(green[200]),\n height: theme.spacing(9.5),\n backgroundColor: green[200],\n margin: theme.spacing(1),\n },\n locationButtonCenter: {\n display: \"flex\",\n justifyContent: \"center\",\n margin: theme.spacing(2),\n },\n\n orange: {\n color: theme.palette.getContrastText(orange[100]),\n backgroundColor: orange[100],\n },\n green: {\n color: theme.palette.getContrastText(green[200]),\n backgroundColor: green[200],\n },\n amber: {\n color: theme.palette.getContrastText(amber[500]),\n backgroundColor: amber[500],\n },\n unprocessedItem: {\n color: theme.palette.getContrastText(grey[300]),\n backgroundColor: grey[300],\n },\n backToInventory: {\n display: \"flex\",\n justifyContent: \"space-between\",\n padding: theme.spacing(4),\n },\n selectAccount: {\n display: \"flex\",\n justifyContent: \"center\",\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(2),\n },\n notFound: {\n display: \"fles\",\n margin: theme.spacing(2),\n },\n}));\n\nconst YardLocations = ({\n locations,\n buttonLabel,\n handleLocation,\n handleCancel,\n currentAudit,\n accounts,\n disableAccounts,\n}) => {\n const classes = useStyles();\n const [value, setValue] = useState(currentAudit.accountName);\n const [inputValue, setInputValue] = useState(\"\");\n const [allAccounts, setAllAccounts] = useState([]);\n const [accountLocations, setAccountLocations] = useState(locations);\n const isComponentMounted = useRef(true);\n\n useEffect(() => {\n isComponentMounted &&\n setAllAccounts([\n \"All accounts\",\n ...accounts.map((acct) => acct.businessName),\n ]);\n return () => (isComponentMounted.current = false);\n }, [accounts]);\n\n const selectLocation = (idx) => {\n handleLocation(idx);\n };\n\n const getAvatarClassName = (idx) => {\n const location = locations[idx];\n if (\n (!inputValue || inputValue === \"All accounts\") &&\n idx === getNextItem(currentAudit)\n ) {\n return classes.locationSelectedAvatar;\n } else if (\n currentAudit.processedLocations[location] &&\n currentAudit.processedLocations[location].completed >=\n currentAudit.processedLocations[location].total\n ) {\n return classes.locationCompletedAvatar;\n } else return classes.locationAvatar;\n };\n\n const setSelectedAccount = async (newValue) => {\n debugger;\n if (!newValue || newValue === \"All accounts\") {\n setAccountLocations(locations);\n return;\n }\n setValue(newValue);\n const response = await API.graphql(\n graphqlOperation(listAuditInventoriesByAccount, {\n reloadYardId: window.appUser?.reloadYardId,\n statusAccountNameProductNameLotNumber: {\n beginsWith: { status: \"STORED\", accountName: newValue },\n },\n limit: 500,\n })\n );\n const accountInventories =\n response.data.inventoryByStatusByAccountByProductByLot.items;\n const locationValues = {};\n debugger;\n\n accountInventories.forEach((itm) => {\n if (itm.location) locationValues[itm.location.id] = itm.location;\n });\n setAccountLocations(Object.keys(locationValues));\n };\n\n return (\n <CrewCard\n title=\"Yard locations\"\n icon={<LocationOnOutlinedIcon fontSize=\"large\" />}\n >\n <Grid container justifyContent=\"center\" alignItems=\"center\">\n <Grid item xs={12} md={4}>\n <div className={classes.selectAccount}>\n <Autocomplete\n value={value}\n disabled={disableAccounts || value !== \"All accounts\"}\n onChange={(event, newValue) => {\n setSelectedAccount(newValue);\n }}\n inputValue={inputValue}\n onInputChange={(event, newInputValue) => {\n setInputValue(newInputValue);\n }}\n id=\"accounts\"\n fullWidth\n options={allAccounts}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Select account\"\n size=\"small\"\n variant=\"outlined\"\n />\n )}\n />\n </div>\n </Grid>\n </Grid>\n <Grid container justifyContent=\"center\" alignItems=\"center\">\n <Grid item>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n flexWrap: \"wrap\",\n }}\n >\n {accountLocations.length === 0 ? (\n <Typography className={classes.notFound}>\n No inventories found for {value}.\n </Typography>\n ) : (\n accountLocations.map((location, idx) => (\n <div\n key={window.appUser.reloadYard.locationMap[location].id}\n className={classes.locationItem}\n >\n <Avatar\n variant={\n (!inputValue || inputValue === \"All accounts\") &&\n idx === getNextItem(currentAudit)\n ? \"circular\"\n : \"rounded\"\n }\n className={getAvatarClassName(idx)}\n onClick={() => selectLocation(idx)}\n >\n <Typography>\n {window.appUser.reloadYard.locationMap[location].name}\n </Typography>\n </Avatar>\n </div>\n ))\n )}\n </div>\n </Grid>\n </Grid>\n <div className={classes.locationButtonCenter}>\n <Button size=\"large\" color=\"primary\" onClick={() => handleCancel()}>\n {buttonLabel}\n </Button>\n </div>\n </CrewCard>\n );\n};\n\nexport default YardLocations;\n","import React from \"react\";\n\nimport { Chip } from \"@material-ui/core\";\n\nconst OperatorsList = ({ currentAudit, locations, classes }) => {\n return currentAudit?.nextItems ? (\n <div className={classes.operators}>\n {currentAudit.nextItems.map((item, idx) => {\n return (\n <div key={item.owner} className={classes.item}>\n <Chip\n variant=\"outlined\"\n label={\n item.owner +\n \" - \" +\n window.appUser.reloadYard.locationMap[\n locations[item.locationIdx]\n ].name\n }\n />\n </div>\n );\n })}\n </div>\n ) : (\n <></>\n );\n};\n\nexport default OperatorsList;\n","import React, { useEffect, useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getAisle } from \"../../graphql/reloadyard/custom-queries\";\nimport { getLocation } from \"../../graphql/queries\";\nimport { updateAisle, updateLocation } from \"../../graphql/mutations\";\nimport { Box, Slider, Typography, useMediaQuery } from \"@material-ui/core\";\nimport { useNotify } from \"react-admin\";\nimport { logError } from \"../../utils/appUtils\";\nimport { LocationType } from \"../../utils/constants\";\nimport {\n getAisleFullName,\n getLocationFullName,\n isBulkArea,\n} from \"../../utils/locationUtils\";\n\nconst LocationCapacity = ({\n aisle,\n disabled = false,\n refreshFn,\n showName = true,\n disableAisleChange,\n}) => {\n const [currentAisle, setCurrentAisle] = useState();\n const notify = useNotify();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n // Generate marks based on screen size\n let marks = [];\n for (let i = 0; i <= 100; i += isSmall ? 20 : 10) {\n marks.push({\n value: i,\n label: `${i}`,\n });\n }\n\n useEffect(() => {\n if (!disableAisleChange && aisle) handleAisleChange(aisle);\n }, [aisle]);\n\n const handleAisleChange = async (aisle) => {\n if (!disabled && !aisle.locations) {\n const response = await API.graphql(\n graphqlOperation(getAisle, { id: aisle.id })\n );\n setCurrentAisle(response.data.getAisle);\n } else {\n setCurrentAisle(aisle);\n }\n };\n\n const handlePercentageChange = async (event, newValue) => {\n debugger;\n currentAisle.capacityUsed = newValue;\n setCurrentAisle({ ...currentAisle });\n };\n\n const handlePercentageChangeCommit = async (event, newValue) => {\n // setCurrentAisle({...currentAisle, capacityUsed: newValue});\n const toUpdateAisle = { id: currentAisle.id, capacityUsed: newValue };\n try {\n await API.graphql(\n graphqlOperation(updateAisle, { input: toUpdateAisle })\n );\n if (currentAisle.type === LocationType.UNSTRUCTURED) {\n const toUpdateLocation = {\n capacityUsed: newValue,\n };\n if (currentAisle.locations.items) {\n toUpdateLocation.id = currentAisle.locations.items[0].id;\n } else {\n toUpdateLocation.id = currentAisle.locations[0].id;\n }\n\n await API.graphql(\n graphqlOperation(updateLocation, { input: toUpdateLocation })\n );\n }\n\n if (refreshFn) refreshFn();\n } catch (err) {\n logError(\"LocationCapacity:handleLanePercentageChange\", err, notify);\n }\n };\n\n // const capacityUsed = currentAisle?.capacityUsed || 0;\n\n const getCapacityUsed = () => {\n if (currentAisle?.capacityUsed) {\n let usedCapacity = currentAisle.capacityUsed;\n\n if (isBulkArea(currentAisle?.area) && currentAisle.bulkCapacity) {\n usedCapacity =\n (currentAisle.capacityUsed / currentAisle.bulkCapacity) * 100;\n }\n\n return usedCapacity.toLocaleString(\"en-US\", {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n });\n }\n return 0;\n };\n\n return (\n <>\n <Typography variant=\"caption\" color=\"textSecondary\" gutterBottom>\n {\" \"}\n {showName\n ? getAisleFullName(currentAisle) + \" capacity\"\n : \"Capacity\"}{\" \"}\n used {getCapacityUsed()}%\n </Typography>\n <Box ml={2} mr={2}>\n <Slider\n step={5}\n max={100}\n value={getCapacityUsed()}\n onChange={handlePercentageChange}\n onChangeCommitted={handlePercentageChangeCommit}\n marks={marks}\n disabled={disabled}\n />\n </Box>\n </>\n );\n};\n\nexport const StructuredLocationCapacity = ({\n location,\n updateFn,\n disabled = false,\n refreshFn,\n showName = true,\n}) => {\n const [currentLocation, setCurrentLocation] = useState();\n const notify = useNotify();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n // Generate marks based on screen size\n let marks = [];\n for (let i = 0; i <= 100; i += isSmall ? 20 : 10) {\n marks.push({\n value: i,\n label: `${i}`,\n });\n }\n\n useEffect(() => {\n if (location) handleLocationChange(location);\n }, [location]);\n\n const handleLocationChange = async (location) => {\n if (location && !location.aisle) {\n const response = await API.graphql(\n graphqlOperation(getLocation, { id: location.id })\n );\n setCurrentLocation(response.data.getLocation);\n } else {\n setCurrentLocation(location);\n }\n };\n\n const handlePercentageChange = async (event, newValue) => {\n currentLocation.capacityUsed = newValue;\n setCurrentLocation({ ...currentLocation });\n // updateFn && updateFn(currentLocation);\n };\n\n const handlePercentageChangeCommit = async (event, newValue) => {\n const toUpdateLocation = { id: currentLocation.id, capacityUsed: newValue };\n try {\n debugger;\n await API.graphql(\n graphqlOperation(updateLocation, { input: toUpdateLocation })\n );\n updateFn && updateFn(currentLocation);\n } catch (err) {\n logError(\n \"StructuredLocationCapacity:handleLanePercentageChange\",\n err,\n notify\n );\n }\n };\n\n const capacityUsed = currentLocation?.capacityUsed\n ? currentLocation.capacityUsed\n : 0;\n\n return (\n <>\n <Typography variant=\"caption\" color=\"textSecondary\" gutterBottom>\n {\" \"}\n {showName\n ? getLocationFullName(currentLocation) + \" capacity\"\n : \"Capacity\"}{\" \"}\n used {capacityUsed}%\n </Typography>\n <Box ml={2} mr={2}>\n <Slider\n step={5}\n max={100}\n value={capacityUsed}\n onChange={handlePercentageChange}\n onChangeCommitted={handlePercentageChangeCommit}\n marks={marks}\n disabled={disabled}\n />\n </Box>\n </>\n );\n};\n\nexport default LocationCapacity;\n","import React, { useState, useRef } from \"react\";\n\nimport { format } from \"date-fns\";\nimport {\n IconButton,\n CardActions,\n Button,\n TextField,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Grid,\n Typography,\n InputAdornment,\n MenuItem,\n CardContent,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { red, green } from \"@material-ui/core/colors\";\nimport {\n CheckBoxBlankOutlinedIcon,\n CloseIcon,\n ExpandMoreIcon,\n} from \"../../../components/common\";\nimport { NoteType } from \"../../../utils/constants\";\nimport InventoryPhotos from \"../../../components/common/InventoryPhotos\";\nimport { Box } from \"@material-ui/core\";\nimport LocationCapacity from \"../../../components/common/LocationCapacity\";\nimport { getLocationViewName } from \"../../../utils/locationUtils\";\nimport { getUnitName } from \"../../../utils/loadTypeUtils\";\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport { CustomFieldsMobile } from \"../../../components/common/CustomFields\";\n\nconst useStyles = makeStyles((theme) => ({\n actions: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n skipButton: {\n marginRight: theme.spacing(2),\n },\n notes: {\n border: \"0px solid rgba(0, 0, 0, .25)\",\n boxShadow: \"none\",\n \"&:not(:last-child)\": {\n borderBottom: 0,\n },\n \"&:before\": {\n display: \"none\",\n },\n \"&$expanded\": {\n margin: \"auto\",\n },\n },\n expanded: {},\n errorButton: {\n color: red[\"500\"],\n },\n successButton: {\n color: green[\"500\"],\n },\n}));\n\nexport default function AuditItem({\n inventory,\n handleComplete,\n handleSkip,\n isCompleted,\n setListMode,\n}) {\n const classes = useStyles();\n const [currentInventory, setCurrenInventory] = useState({ ...inventory });\n const [oldQuantityPhysical] = useState(currentInventory.quantityPhysical);\n const [note, setNote] = useState();\n const [completed, setCompleted] = useState(isCompleted);\n const imgRef = useRef();\n\n const completeServeyItem = () => {\n if (note) {\n const newNote = {\n date: new Date(),\n by: window.appUser?.fullName,\n type: NoteType.AUDIT,\n text: note,\n };\n if (currentInventory.notes) currentInventory.notes.push(newNote);\n else currentInventory.notes = [newNote];\n }\n const newHistory = {\n type: NoteType.AUDIT,\n date: new Date(),\n by: window.appUser?.fullName,\n text:\n `Audit Inventory update|status: ${currentInventory.status} | ` +\n `quantity physical old: ${oldQuantityPhysical} | ` +\n `quantity physical new: ${currentInventory.quantityPhysical} | ` +\n `location: ${currentInventory.location}`,\n };\n if (currentInventory.history) currentInventory.history.push(newHistory);\n else currentInventory.history = [newHistory];\n\n currentInventory.quantityMismatch =\n currentInventory.quantityPhysical !== currentInventory.quantityOnHand;\n\n setListMode(true);\n handleComplete(currentInventory);\n };\n\n const skipServeyItem = () => {\n debugger;\n setListMode(true);\n handleSkip(currentInventory);\n };\n\n const handleQuantity = (event) => {\n debugger;\n let value = \"\";\n\n if (event.target.value !== \"\") value = Number(event.target.value);\n if (value < 0) return;\n setCurrenInventory({ ...currentInventory, quantityPhysical: value });\n setCompleted(true);\n };\n\n const handleLocation = (event) => {\n debugger;\n event.target.value &&\n setCurrenInventory({\n ...currentInventory,\n location: window.appUser.reloadYard.locationMap[event.target.value],\n });\n };\n\n const getClassName = () => {\n return !completed\n ? classes.button\n : currentInventory.quantityPhysical === currentInventory.quantityOnHand\n ? classes.successButton\n : classes.errorButton;\n };\n\n const handleCancel = () => {\n setListMode(true);\n };\n\n const getNoteText = (note) => {\n return `${format(new Date(note.date), \"MM/dd/yyyy hh:mm a\")} by ${\n note.by\n }: ${note.text}`;\n };\n\n const getAreaLocations = () =>\n window.appUser.reloadYard.locations.items\n .filter((itm) => itm.areaId === currentInventory.location.areaId)\n .map((location) => (\n <MenuItem key={location.id} value={location.id}>\n {getLocationViewName(location)}\n </MenuItem>\n ));\n\n return (\n <div ref={imgRef}>\n <CrewCard\n title={currentInventory.productName}\n icon={<CheckBoxBlankOutlinedIcon fontSize=\"large\" />}\n subheader={getLocationViewName(currentInventory.location)}\n action={\n <IconButton edge=\"start\" onClick={handleCancel}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n }\n showDivider={false}\n >\n <CardContent>\n <Grid container spacing={2}>\n <Grid item sm={12} xs={12}>\n <InventoryPhotos\n id={inventory.id}\n maxSize={2}\n photos={inventory.photos ? inventory.photos : []}\n selectedIdx={0}\n hideActions={true}\n imgRef={imgRef}\n />\n </Grid>\n <Grid item sm={6} xs={12}>\n <Typography>Account: {currentInventory.accountName}</Typography>\n </Grid>\n <Grid item sm={6} xs={12}>\n <Typography>Lot number: {currentInventory.lotNumber}</Typography>\n </Grid>\n <Grid item xs={12}>\n <CustomFieldsMobile\n recordFields={currentInventory?.customFields}\n accountFields={currentInventory?.account.outboundCustomFields}\n width={6}\n />\n </Grid>\n <Grid item sm={6} xs={12}>\n <TextField\n name=\"quantityPhysical\"\n label=\"Quantity Physical\"\n id=\"outlined-margin-dense\"\n helperText={\n !completed ||\n currentInventory.quantityPhysical ===\n currentInventory.quantityOnHand\n ? \"\"\n : \"Quantity entered doesn't match quantity onhand\"\n }\n error={\n !completed ||\n currentInventory.quantityPhysical ===\n currentInventory.quantityOnHand\n ? false\n : true\n }\n value={completed ? currentInventory.quantityPhysical : \"\"}\n autoFocus\n margin=\"dense\"\n type=\"number\"\n fullWidth\n required\n variant=\"outlined\"\n style={{ minWidth: \"33%\" }}\n onChange={handleQuantity}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {\" \"}\n {getUnitName(currentInventory.inventoryUnits)}{\" \"}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n {currentInventory.productCode && (\n <Grid item sm={6} xs={12}>\n <Typography>\n Product code: {currentInventory.productCode}\n </Typography>\n </Grid>\n )}\n <Grid item sm={6} xs={12}>\n <TextField\n id=\"location\"\n select\n margin=\"dense\"\n label=\"Location\"\n value={currentInventory.location.id}\n variant=\"outlined\"\n style={{ minWidth: \"33%\" }}\n fullWidth\n onChange={handleLocation}\n >\n {getAreaLocations()}\n </TextField>\n </Grid>\n {currentInventory.location && (\n <Grid item sm={6} xs={12}>\n <LocationCapacity location={currentInventory.location} />\n </Grid>\n )}\n <Grid item sm={12} xs={12}>\n <TextField\n name=\"notes\"\n id=\"outlined-multiline-static\"\n label=\"Notes\"\n multiline\n minRows={3}\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n onBlur={(evt) => evt.target.value && setNote(evt.target.value)}\n />\n </Grid>\n {\n <Grid item sm={12} xs={12}>\n <Accordion className={classes.notes}>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"panel1a-content\"\n id=\"panel1a-header\"\n >\n <Typography className={classes.heading}>\n Previous notes\n </Typography>\n </AccordionSummary>\n <AccordionDetails>\n <div>\n {currentInventory.notes &&\n currentInventory.notes\n .map((note, idx) => (\n <div key={idx}>\n <Typography color=\"textSecondary\" gutterBottom>\n {getNoteText(note)}\n </Typography>\n </div>\n ))\n .reverse()}\n </div>\n </AccordionDetails>\n </Accordion>\n </Grid>\n }\n </Grid>\n </CardContent>\n <CardActions className={classes.actions}>\n <div>\n <Button\n type=\"submit\"\n className={getClassName()}\n onClick={completeServeyItem}\n onSubmit={completeServeyItem}\n color=\"primary\"\n size=\"large\"\n >\n Complete\n </Button>\n <Button\n onClick={skipServeyItem}\n className={classes.skipButton}\n size=\"large\"\n >\n Skip Item\n </Button>\n </div>\n <Button onClick={handleCancel} size=\"large\">\n Cancel\n </Button>\n </CardActions>\n </CrewCard>\n </div>\n );\n}\n","import React, { useState, useEffect } from \"react\";\n\nimport {\n Typography,\n Button,\n ButtonGroup,\n Grid,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n Avatar,\n ListItemSecondaryAction,\n IconButton,\n Divider,\n Paper,\n Menu,\n MenuItem,\n MenuList,\n LinearProgress,\n ClickAwayListener,\n Grow,\n Popper,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { orange, grey, green } from \"@material-ui/core/colors\";\n\nimport {\n CheckIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n DropDownIcon,\n ExpandMoreIcon,\n RedoIcon,\n XIcon,\n} from \"../../../components/common\";\nimport OperatorsList from \"./OperatorsList\";\nimport AuditItem from \"./AuditItem\";\n\nconst useStyles = makeStyles((theme) => ({\n listRoot: {\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(1),\n marginTop: theme.spacing(1),\n },\n listHeader: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n paddingBottom: theme.spacing(1.25),\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(2.5),\n marginTop: theme.spacing(2),\n },\n headerText: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n },\n orange: {\n color: theme.palette.getContrastText(orange[100]),\n backgroundColor: orange[100],\n },\n green: {\n color: theme.palette.getContrastText(green[200]),\n backgroundColor: green[200],\n },\n unprocessedItem: {\n color: theme.palette.getContrastText(grey[300]),\n backgroundColor: grey[300],\n },\n backToInventory: {\n display: \"flex\",\n justifyContent: \"space-between\",\n padding: theme.spacing(4),\n },\n listAuditProgress: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n },\n operators: {\n display: \"flex\",\n justifyContent: \"center\",\n margin: theme.spacing(2),\n flexWrap: \"wrap\",\n },\n item: {\n margin: theme.spacing(0.5),\n },\n notFound: {\n display: \"fles\",\n margin: theme.spacing(2),\n },\n}));\n\nexport const InventoryList = ({\n handleSkip,\n handleComplete,\n handleBack,\n handleNext,\n currentAudit,\n inventories,\n isCompleted,\n title,\n disableBack,\n returnToAudit,\n locations,\n completedLocations,\n setLocationMode,\n}) => {\n const [anchorEl, setAnchorEl] = useState(null);\n const [listMode, setListMode] = useState(true);\n const [currentInventory, setCurrentInventory] = useState({});\n const classes = useStyles();\n\n useEffect(() => {\n window.scrollTo(0, 0);\n });\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = (item) => {\n setAnchorEl(null);\n };\n\n const getIcon = (inventory) => {\n if (\n currentAudit.processedItems.findIndex((itm) => itm.id === inventory.id) >=\n 0\n )\n return <CheckIcon fontSize=\"inherit\" />;\n else if (\n currentAudit.skippedItems.findIndex((itm) => itm.id === inventory.id) >= 0\n )\n return <RedoIcon fontSize=\"inherit\" />;\n return <XIcon fontSize=\"inherit\" />;\n };\n\n const getAvatarClassName = (inventory) => {\n if (\n currentAudit.processedItems.findIndex((itm) => itm.id === inventory.id) >=\n 0\n ) {\n if (inventory.quantityPhysical === inventory.quantityOnHand)\n return classes.green;\n else return classes.orange;\n }\n return classes.unprocessedItem;\n };\n\n const handleSelect = (inventory, closeMenuFlag) => {\n setCurrentInventory(inventory);\n setListMode(false);\n closeMenuFlag && handleClose(inventory);\n };\n\n return !currentAudit?.id ? (\n <></>\n ) : listMode ? (\n <Paper className={classes.listRoot}>\n <div>\n <div className={classes.listHeader}>\n <IconButton edge=\"end\" onClick={handleBack} disabled={disableBack}>\n <ChevronLeftIcon fontSize=\"large\" />\n </IconButton>\n <div className={classes.headerText}>\n <Typography color=\"textPrimary\" variant=\"h5\">\n {title}\n </Typography>\n {currentAudit.skippedItems?.length > 0 && (\n <>\n <IconButton edge=\"end\">\n <ExpandMoreIcon onClick={handleClick} fontSize=\"large\" />\n </IconButton>\n <Menu\n id=\"skipped-items-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleClose}\n >\n {currentAudit.skippedItems.map((item) => (\n <MenuItem\n key={item.id}\n onClick={() => handleSelect(item, true)}\n >\n {\n <Typography component=\"p\">\n Location: {item.location.name}, Lot# {item.lotNumber}\n </Typography>\n }\n </MenuItem>\n ))}\n </Menu>\n </>\n )}\n </div>\n <IconButton edge=\"start\" onClick={handleNext}>\n <ChevronRightIcon fontSize=\"large\" />\n </IconButton>\n </div>\n <div className={classes.listAuditProgress}>\n <LinearProgress\n color=\"secondary\"\n variant=\"determinate\"\n value={(completedLocations / locations.length) * 100}\n />\n </div>\n {currentAudit?.nextItems && (\n <OperatorsList\n currentAudit={currentAudit}\n locations={locations}\n classes={classes}\n />\n )}\n </div>\n <List className={classes.listRoot}>\n {inventories.length > 0 ? (\n inventories.map((inventory) => {\n return (\n <div key={inventory.id}>\n <ListItem onClick={() => handleSelect(inventory)}>\n <ListItemAvatar>\n <Avatar className={getAvatarClassName(inventory)}>\n {/* <CropDinOutlinedIcon /> */}\n {getIcon(inventory)}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={inventory.productName}\n secondary={\n inventory.accountName + \" - \" + inventory.lotNumber\n }\n />\n <ListItemSecondaryAction>\n <IconButton\n edge=\"end\"\n onClick={() => handleSelect(inventory)}\n >\n <ChevronRightIcon fontSize=\"large\" />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n <Divider />\n </div>\n );\n })\n ) : (\n <Typography className={classes.notFound}>\n No inventories shipments found.\n </Typography>\n )}\n </List>\n <div className={classes.backToInventory}>\n <Button size=\"large\" onClick={handleBack} disabled={disableBack}>\n Back\n </Button>\n <SplitButton\n returnToAudit={returnToAudit}\n setLocationMode={setLocationMode}\n isCompleted={isCompleted}\n />\n <Button size=\"large\" onClick={handleNext} color=\"primary\">\n Next\n </Button>\n </div>\n </Paper>\n ) : (\n <AuditItem\n inventory={currentInventory}\n handleComplete={handleComplete}\n handleSkip={handleSkip}\n setListMode={setListMode}\n isCompleted={\n currentAudit.processedItems.findIndex(\n (itm) => itm.id === currentInventory.id\n ) >= 0\n }\n />\n );\n};\n\nconst SplitButton = ({ returnToAudit, setLocationMode }) => {\n const [open, setOpen] = React.useState(false);\n const [selectedItem, setSelectedItem] = React.useState(\"Close\");\n const anchorRef = React.useRef(null);\n\n const handleClick = () => {\n handleMenuItemClick(selectedItem);\n };\n\n const handleMenuItemClick = (val) => {\n setOpen(false);\n setSelectedItem(val);\n if (val === \"Close\") returnToAudit();\n else setLocationMode(true);\n };\n\n const handleToggle = () => {\n setOpen((prevOpen) => !prevOpen);\n };\n\n const handleClose = (event) => {\n if (anchorRef.current && anchorRef.current.contains(event.target)) {\n return;\n }\n setOpen(false);\n };\n\n return (\n <Grid container direction=\"column\" alignItems=\"center\">\n <Grid item xs={12}>\n <ButtonGroup ref={anchorRef}>\n <Button onClick={handleClick} size=\"large\">\n {selectedItem}\n </Button>\n <Button size=\"large\" onClick={handleToggle}>\n <DropDownIcon />\n </Button>\n </ButtonGroup>\n <Popper\n open={open}\n anchorEl={anchorRef.current}\n role={undefined}\n transition\n disablePortal\n >\n {({ TransitionProps, placement }) => (\n <Grow\n {...TransitionProps}\n style={{\n transformOrigin:\n placement === \"bottom\" ? \"center top\" : \"center bottom\",\n }}\n >\n <Paper>\n <ClickAwayListener onClickAway={handleClose}>\n <MenuList id=\"split-button-menu\">\n <MenuItem\n selected\n onClick={() => handleMenuItemClick(\"Close\")}\n >\n Close\n </MenuItem>\n <MenuItem\n onClick={() => handleMenuItemClick(\"Select location\")}\n >\n Select location\n </MenuItem>\n </MenuList>\n </ClickAwayListener>\n </Paper>\n </Grow>\n )}\n </Popper>\n </Grid>\n </Grid>\n );\n};\n","import React from \"react\";\n\nimport { Chip } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { green, grey, orange } from \"@material-ui/core/colors\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n flexWrap: \"wrap\",\n border: \"1px dashed\",\n borderRadius: theme.spacing(1),\n borderColor: grey[400],\n padding: theme.spacing(2),\n },\n locationItem: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n locationAvatar: {\n color: theme.palette.text.primary,\n margin: theme.spacing(1),\n },\n locationCompletedAvatar: {\n color: theme.palette.getContrastText(green[200]),\n backgroundColor: green[200],\n borderColor: green[200],\n margin: theme.spacing(1),\n },\n locationInProgressAvatar: {\n color: theme.palette.getContrastText(orange[200]),\n backgroundColor: orange[200],\n borderColor: orange[200],\n margin: theme.spacing(1),\n },\n}));\n\nconst getColor = (currentAudit, locations, idx, classes) => {\n const location = locations[idx];\n if (\n currentAudit.processedLocations[location.id] &&\n currentAudit.processedLocations[location.id].completed >=\n currentAudit.processedLocations[location.id].total\n ) {\n return classes.locationCompletedAvatar;\n } else if (\n currentAudit.processedLocations[location.id] &&\n currentAudit.processedLocations[location.id].completed > 0\n ) {\n return classes.locationInProgressAvatar;\n } else return classes.locationAvatar;\n};\n\nconst LocationsMap = ({ currentAudit, locations }) => {\n const classes = useStyles();\n return currentAudit?.id ? (\n <div className={classes.root}>\n {locations.length > 0 &&\n locations.map((itm, idx) => (\n <div key={itm.id} className={classes.locationItem}>\n <Chip\n variant=\"outlined\"\n className={getColor(currentAudit, locations, idx, classes)}\n label={window.appUser?.reloadYard.locationMap[itm].name}\n />\n </div>\n ))}\n </div>\n ) : (\n <></>\n );\n};\n\nexport default LocationsMap;\n","import React, { useState, useEffect, useRef } from \"react\";\n\nimport { useNotify, Title } from \"react-admin\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { formatDistanceToNow } from \"date-fns\";\nimport {\n TextField,\n Typography,\n Button,\n CircularProgress,\n Grid,\n MenuItem,\n Backdrop,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { getAudit } from \"../../../graphql/queries\";\nimport { AuditOutlinedIcon } from \"../../../components/common\";\nimport { HelpIconButton } from \"../../../components/common/HelpButton\";\nimport { AuditStatus } from \"../../../utils/constants\";\nimport { getNextItem, setNextItem } from \"./Audit\";\nimport OperatorsList from \"./OperatorsList\";\nimport LocationsMap from \"./LocationsMap\";\nimport { logError } from \"../../../utils/appUtils\";\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport { getLocationViewName } from \"../../../utils/locationUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: theme.spacing(1),\n },\n backdrop: {\n zIndex: 90001,\n },\n auditButtonCenter: {\n display: \"flex\",\n justifyContent: \"space-between\",\n marginTop: theme.spacing(4),\n },\n listHeader: {\n marginTop: theme.spacing(1.5),\n marginLeft: theme.spacing(2),\n },\n settings: {\n marginTop: theme.spacing(2),\n },\n inventoryCardAvatar: {\n color: theme.palette.getContrastText(theme.palette.secondary.main),\n backgroundColor: theme.palette.secondary.main,\n width: theme.spacing(6),\n height: theme.spacing(6),\n },\n\n operators: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n marginRight: theme.spacing(1),\n flexWrap: \"wrap\",\n },\n item: {\n margin: theme.spacing(0.5),\n },\n help: {\n margin: theme.spacing(2),\n width: 600,\n },\n helpMobile: {\n margin: theme.spacing(2),\n width: \"100%\",\n },\n}));\n\nconst ViewAudit = ({ audit, history, match, setViewState, returnToAudit }) => {\n const notify = useNotify();\n const classes = useStyles();\n const isComponentMounted = useRef(true);\n const [currentAudit, setCurrentAudit] = useState();\n const [locations, setLocations] = useState();\n const [, setCompletedLocations] = useState(0);\n const [index, setIndex] = useState(0);\n const [message, setMessage] = useState();\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (isComponentMounted) {\n getSelectedAudit();\n window.scrollTo(0, 0);\n }\n }, []);\n\n const getSelectedAudit = async () => {\n try {\n debugger;\n let inProgressAudit = audit;\n if (!audit) {\n const response = await API.graphql(\n graphqlOperation(getAudit, { id: match.params.id })\n );\n inProgressAudit = response.data.getAudit;\n }\n inProgressAudit = setCurrentAuditData(inProgressAudit);\n setLocations(inProgressAudit.locations.map((itm) => itm));\n setCurrentAudit(inProgressAudit);\n const idx = getNextItem(audit);\n setIndex(idx);\n debugger;\n computeCompleted(inProgressAudit);\n setMessage(\n `Created: ${formatDistanceToNow(new Date(audit.createdAt))} ago`\n );\n } catch (err) {\n logError(\"CreateAudit:getAudits\", err, notify);\n }\n };\n\n const computeCompleted = (audit) => {\n let completedCount = 0;\n debugger;\n Object.keys(audit.processedLocations).forEach((key) => {\n if (\n audit.processedLocations[key].completed ===\n audit.processedLocations[key].total\n )\n completedCount++;\n });\n setCompletedLocations(completedCount);\n };\n\n const startAudit = () => {\n debugger;\n setNextItem(currentAudit, index);\n\n setLoading(false);\n setViewState(\"EDIT\");\n history.push(`${match.url}`);\n };\n\n const setCurrentAuditData = (audit) => {\n debugger;\n if (typeof audit.processedItems === \"string\") {\n audit.processedItems = !audit.processedItems\n ? []\n : JSON.parse(audit.processedItems);\n }\n if (typeof audit.skippedItems === \"string\") {\n audit.skippedItems = !audit.skippedItems\n ? []\n : JSON.parse(audit.skippedItems);\n }\n if (typeof audit.processedLocations === \"string\") {\n audit.processedLocations = !audit.processedLocations\n ? {}\n : JSON.parse(audit.processedLocations);\n }\n return audit;\n };\n\n const cancel = () => {\n returnToAudit(false);\n };\n\n return (\n <>\n {loading ? (\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n ) : !currentAudit ? (\n <Typography variant=\"h5\">No Audits found.</Typography>\n ) : (\n <>\n <Title title=\"Audit\" />\n {\n <CrewCard\n title={\n currentAudit?.status === AuditStatus.NEW\n ? \"Start Audit\"\n : \"Resume Audit\"\n }\n icon={<AuditOutlinedIcon fontSize=\"large\" />}\n action={\n <HelpIconButton>\n <AuditHelp />\n </HelpIconButton>\n }\n >\n <Grid container spacing={2}>\n <Grid item xs={12}>\n {message && <Typography>{message}</Typography>}\n </Grid>\n <Grid item sm={12} xs={12}>\n <LocationsMap\n currentAudit={currentAudit}\n locations={currentAudit.locations}\n />\n </Grid>\n <Grid item sm={12}>\n <OperatorsList\n currentAudit={currentAudit}\n locations={locations}\n classes={classes}\n />\n </Grid>\n <Grid item xs={6} md={6}>\n <TextField\n id=\"location-index\"\n select\n margin=\"dense\"\n label=\"Location\"\n value={index}\n variant=\"outlined\"\n style={{ minWidth: \"50%\" }}\n onChange={(event) => setIndex(Number(event.target.value))}\n >\n {locations.map((option, idx) => (\n <MenuItem key={option} value={idx}>\n {getLocationViewName(option)}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n <Grid item sm={12} xs={12}>\n <TextField\n name=\"note\"\n id=\"audit-note\"\n label=\"Notes\"\n multiline\n minRows={3}\n value={currentAudit.notes ? currentAudit.notes : \"\"}\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n disabled\n onChange={(evt) =>\n setCurrentAudit({\n ...currentAudit,\n notes: evt.target.value,\n })\n }\n />\n </Grid>\n </Grid>\n <div className={classes.auditButtonCenter}>\n <Button size=\"large\" color=\"primary\" onClick={startAudit}>\n Open\n </Button>\n <Button size=\"large\" onClick={cancel}>\n Cancel\n </Button>\n </div>\n </CrewCard>\n }\n </>\n )}\n </>\n );\n};\n\nconst AuditHelp = () => (\n <>\n <p>\n The Audit Wizard will walk you through the Yard, guiding you from one\n Location & Inventory Item to the next. You can always skip an item, or\n pick another Location to work, if needed.\n </p>\n <p>\n As you visit each Location and count each Item, the system marks them as\n completed, and keeps track of all Items that were skipped. You can come\n back to skipped location by selecting it from dropdown in top navigation\n bar. If you skipped any items, the system will display a review screen at\n the end of an Audit, allowing you re re-visit skipped locations.\n </p>\n <p>\n Once all the inventory Items have been checked, the wizard will send the\n Audit results for.\n </p>\n </>\n);\n\nexport default ViewAudit;\n","import React, { useState, useEffect, useRef } from \"react\";\n\nimport { useNotify, useRedirect } from \"react-admin\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getAudit, accountByActiveByName } from \"../../../graphql/queries\";\nimport { updateAuditInventorie } from \"../../../graphql/inventory/custom-mutations\";\nimport { AuditStatus, InventoryStatus } from \"../../../utils/constants\";\nimport { getAuditNextItems } from \"../../../graphql/audit/custom-queries\";\nimport { inventoryByStatusByLocationIdByAccountId } from \"../../../graphql/inventory/custom-queries\";\n\nimport { CircularProgress } from \"@material-ui/core\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { getLocationViewName } from \"../../../utils/locationUtils\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport ErrorCard from \"../../../components/ErrorCard\";\nimport AuditSummary from \"./AuditSummary\";\nimport YardLocations from \"./YardLocations\";\nimport { InventoryList } from \"./InventoryList\";\nimport ViewAudit from \"./ViewAudit\";\nimport { getNextItem, setNextItem, saveAudit } from \"./Audit\";\n\nconst useStyles = makeStyles((theme) => ({\n progress: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 300,\n },\n}));\n\nconst AuditContainer = ({ match, history }) => {\n const classes = useStyles();\n const notify = useNotify();\n const redirect = useRedirect();\n const isComponentMounted = useRef(true);\n const [inventories, setInventories] = useState([]);\n const [currentAudit, setCurrentAudit] = useState();\n const [loading, setLoading] = useState(false);\n const [completedFlag, setCompletedFlag] = useState();\n const [completedLocations, setCompletedLocations] = useState(0);\n const [locationMode, setLocationMode] = React.useState(false);\n const [accounts, setAccounts] = useState([]);\n const [invalidIdError, setInvalidIdError] = useState();\n const [locations, setLocations] = useState();\n const [viewState, setViewState] = useState(\"VIEW\");\n\n useEffect(() => {\n init();\n getAccounts();\n // let updateAuditListener;\n // Auth.currentAuthenticatedUser()\n // .then(user => {\n // updateAuditListener = API.graphql(graphqlOperation(onUpdateAudit, {\n // owner: user.username\n // })).subscribe({\n // next: auditData => {\n // let data = auditData.value.data.onUpdateAudit;\n // setCurrentAudit(setCurrentAuditData(data));\n // }\n // })\n // });\n return () => {\n isComponentMounted.current = false;\n debugger;\n // updateAuditListener.unsubscribe();\n };\n }, []);\n\n const init = async () => {\n if (loading) return;\n setLoading(true);\n try {\n debugger;\n let response = await API.graphql(\n graphqlOperation(getAudit, { id: match.params.id })\n );\n if (response.data.getAudit) {\n const audit = setCurrentAuditData(response.data.getAudit);\n setCurrentAudit(audit);\n setLocations(audit.locations);\n computeCompleted(audit);\n const nextItem = history.location.state?.index\n ? history.location.state.index\n : getNextItem(audit);\n debugger;\n // await getInventories(nextItem, audit);\n setNextItem(audit, nextItem);\n } else {\n setInvalidIdError(`Audit ID ${match.params.id} doesn't exist.`);\n }\n } catch (err) {\n logError(\"AuditContainer:init\", err, notify);\n } finally {\n setLoading(false);\n }\n };\n\n const getAccounts = async () => {\n try {\n const response = await API.graphql(\n graphqlOperation(accountByActiveByName, {\n reloadYardId: window.appUser?.reloadYardId,\n activeBusinessName: { beginsWith: { active: \"true\" } },\n })\n );\n debugger;\n setAccounts(response.data.accountByActiveByName.items);\n } catch (err) {\n logError(\"AuditContainer:getAccounts\", err, notify);\n }\n };\n\n // const getInventories = async (idx, audit) => {\n // if (!isComponentMounted) return;\n // debugger;\n // try {\n // if (idx >= audit.locations.length) {\n // setInventories([]);\n // processNextItems(audit);\n // } else {\n // const input = {\n // reloadYardId: window.appUser.reloadYardId,\n // statusLocationIdAccountId: {\n // beginsWith: {\n // status: InventoryStatus.STORED,\n // locationId: audit.locations[idx]\n // }},\n // };\n // if (audit.accountId) {\n // input.statusLocationIdAccountId.beginsWith = {\n // status: InventoryStatus.STORED,\n // locationId: audit.locations[idx],\n // accountId: audit.accountId\n // }\n // }\n\n // const response = await API.graphql(graphqlOperation(inventoryByStatusByLocationIdByAccountId, input));\n // const data = response.data.inventoryByStatusByLocationIdByAccountId;\n\n // debugger\n // if (data.items.length > 0) {\n // setInventories(data.items);\n // if (!audit) audit = currentAudit;\n // audit.processedLocations[audit.locations[idx]] = {\n // total: data.items.length,\n // completed: getCompletedItemsCount(data.items, audit)\n // }\n // } else {\n // setInventories([]);\n // processNextItems(audit);\n // }\n // }\n // } catch (err) {\n // logError(\"audit:AuditContainer:getInventories\", err, notify);\n // }\n // }\n\n const computeCompleted = (audit) => {\n let completedCount = 0;\n Object.keys(audit.processedLocations).forEach((key) => {\n if (\n audit.processedLocations[key].completed ===\n audit.processedLocations[key].total\n )\n completedCount++;\n });\n setCompletedLocations(completedCount);\n return completedCount;\n };\n\n const isCompleted = (audit) => {\n debugger;\n if (!audit) audit = currentAudit;\n const processedLocations = Object.keys(audit.processedLocations);\n if (\n processedLocations &&\n locations.length !== Object.keys(audit.processedLocations).length\n )\n return false;\n let completed = true;\n Object.keys(audit.processedLocations).forEach((key) => {\n const itm = audit.processedLocations[key];\n if (itm.completed !== itm.total) completed = itm.false;\n });\n return completed;\n };\n\n const getCompletedItemsCount = (items, audit) => {\n debugger;\n let count = 0;\n items.forEach((itm) => {\n count =\n audit.processedItems.findIndex(\n (processedItm) => processedItm.id === itm.id\n ) === -1\n ? count\n : count + 1;\n });\n return count;\n };\n\n const processNextItems = (audit) => {\n debugger;\n const completedCount = computeCompleted(audit);\n if (completedCount === audit.locations.length) {\n // XXXX changed from locations.length since it was not yet populated\n debugger;\n setCompletedFlag(true);\n } else {\n debugger;\n setLocationMode(true);\n }\n };\n\n const setCurrentAuditData = (audit) => {\n debugger;\n if (typeof audit.processedItems === \"string\") {\n audit.processedItems = !audit.processedItems\n ? []\n : JSON.parse(audit.processedItems);\n }\n if (typeof audit.skippedItems === \"string\") {\n audit.skippedItems = !audit.skippedItems\n ? []\n : JSON.parse(audit.skippedItems);\n }\n if (typeof audit.processedLocations === \"string\") {\n audit.processedLocations = !audit.processedLocations\n ? {}\n : JSON.parse(audit.processedLocations);\n }\n return audit;\n };\n\n const setNextItems = async (audit) => {\n if (loading) return;\n debugger;\n let response = await API.graphql(\n graphqlOperation(getAuditNextItems, {\n id: audit.id,\n })\n );\n const nextItems = response.data.getAudit.nextItems;\n if (response.data.getAudit.processedItems) {\n const processedItems = JSON.parse(response.data.getAudit.processedItems);\n Object.keys(processedItems).forEach((k) => {\n if (!audit.processedItems[k])\n audit.processedItems[k] = processedItems[k];\n });\n }\n const idx = audit.nextItems.findIndex(\n (itm) => itm.owner === window.appUser?.fullName\n );\n audit.nextItems = nextItems.map((itm) =>\n itm.owner !== window.appUser?.fullName ? itm : audit.nextItems[idx]\n );\n };\n\n const saveAuditData = async (audit, inventoryItem) => {\n try {\n await setNextItems(audit);\n if (!audit.startDateTime) {\n audit.startDateTime = new Date();\n }\n const updatedAudit = await saveAudit(audit);\n setCurrentAudit(setCurrentAuditData(updatedAudit));\n if (inventoryItem) {\n const toUpdateInventory = { ...inventoryItem };\n delete toUpdateInventory.location;\n delete toUpdateInventory.account;\n delete toUpdateInventory.product;\n delete toUpdateInventory.createdAt;\n delete toUpdateInventory.updatedAt;\n\n toUpdateInventory.auditId = updatedAudit.id;\n const response = await API.graphql(\n graphqlOperation(updateAuditInventorie, { input: toUpdateInventory })\n );\n const newInventory = response.data.updateAuditInventorie;\n setInventories(\n inventories.map((itm) =>\n itm.id === newInventory ? newInventory : itm\n )\n );\n debugger;\n }\n } catch (err) {\n logError(\"AuditContainer:saveAuditData\", err, notify, redirect);\n }\n };\n\n const handleCompletedLocation = (inventoryItem) => {\n debugger;\n currentAudit.processedLocations[inventoryItem.location.id].completed++;\n };\n\n const handleComplete = async (inventoryItem) => {\n const processedItmIdx = currentAudit.processedItems.findIndex(\n (itm) => itm.id === inventoryItem.id\n );\n if (processedItmIdx === -1) {\n currentAudit.processedItems = [\n ...currentAudit.processedItems,\n inventoryItem,\n ];\n handleCompletedLocation(inventoryItem);\n }\n const completedCount = computeCompleted(currentAudit);\n currentAudit.skippedItems = currentAudit.skippedItems.filter(\n (skipped) => skipped.id !== inventoryItem.id\n );\n debugger;\n let newInventories;\n\n if (inventoryItem.location.id !== locations[getNextItem(currentAudit)])\n newInventories = inventories.filter((itm) => itm.id !== inventoryItem.id);\n else\n newInventories = inventories.map((itm) =>\n itm.id === inventoryItem.id ? inventoryItem : itm\n );\n\n setCurrentAudit({ ...currentAudit });\n await saveAuditData(currentAudit, inventoryItem);\n if (completedCount === locations.length) {\n debugger;\n setCompletedFlag(true);\n } else {\n setInventories(newInventories);\n }\n };\n\n const handleSkip = async (inventoryItem) => {\n debugger;\n const skippedItmIdx = currentAudit.skippedItems.findIndex(\n (itm) => itm.id === inventoryItem.id\n );\n if (skippedItmIdx === -1) {\n currentAudit.skippedItems = [...currentAudit.skippedItems, inventoryItem];\n }\n // setInventories(remainingInventories);\n saveAuditData(currentAudit);\n const remainingInventories = inventories.filter(\n (item) => !currentAudit.skippedItems?.includes(item)\n );\n if (remainingInventories.length === 0) {\n let nextItem = getNextItem(currentAudit);\n setNextItem(currentAudit, nextItem + 1);\n const updatedAudit = { ...currentAudit };\n setCurrentAudit(updatedAudit);\n // await getInventories(nextItem + 1, updatedAudit);\n }\n };\n\n const handleAddSkipped = (inventoryItem) => {\n setInventories([inventoryItem, ...inventories]);\n };\n\n const handleBack = async () => {\n debugger;\n let nextItem = getNextItem(currentAudit);\n // await getInventories(nextItem - 1, currentAudit);\n setNextItem(currentAudit, nextItem - 1);\n await setNextItems(currentAudit);\n setCurrentAudit({ ...currentAudit });\n debugger;\n };\n\n const handleLocation = async (idx) => {\n debugger;\n // await getInventories(idx, currentAudit);\n setNextItem(currentAudit, idx);\n setCurrentAudit({ ...currentAudit });\n setLocationMode(false);\n };\n\n const handleNext = async () => {\n let nextItem = getNextItem(currentAudit);\n setNextItem(currentAudit, nextItem + 1);\n // nextItem < locations.length && await getInventories(nextItem + 1, currentAudit);\n };\n\n const finishAudit = async (audit) => {\n if (!isCompleted()) return;\n try {\n debugger;\n const updatedAudit = {\n ...audit,\n status: AuditStatus.PENDING_REVIEW,\n endDateTime: new Date(),\n };\n await saveAudit(updatedAudit);\n setInventories([]);\n setCompletedFlag(false);\n returnToAudit(false);\n } catch (err) {\n logError(\"AuditContainer:finishAudit\", err, notify, redirect);\n }\n };\n\n const returnToAudit = async (saveFlag = true) => {\n if (saveFlag) {\n saveAuditData(currentAudit);\n }\n debugger;\n history.push(\"/processAudit\");\n };\n\n const returnList = () => {\n debugger;\n setLocationMode(false);\n };\n\n return loading ? (\n <div className={classes.progress}>\n <CircularProgress />\n </div>\n ) : invalidIdError ? (\n <ErrorCard error={invalidIdError} />\n ) : locationMode ? (\n <YardLocations\n locations={locations}\n handleCancel={inventories.length === 0 ? returnToAudit : returnList}\n handleLocation={handleLocation}\n currentAudit={currentAudit}\n buttonLabel={inventories.length === 0 ? \"Complete later\" : \"close\"}\n accounts={accounts}\n disableAccounts={true}\n />\n ) : completedFlag ? (\n <AuditSummary\n currentAudit={currentAudit}\n locations={locations}\n finishAudit={finishAudit}\n saveAudit={saveAudit}\n isCompleted={isCompleted}\n />\n ) : viewState === \"VIEW\" ? (\n currentAudit ? (\n <ViewAudit\n audit={currentAudit}\n history={history}\n match={match}\n setViewState={setViewState}\n returnToAudit={returnToAudit}\n />\n ) : null\n ) : (\n <InventoryList\n handleSkip={handleSkip}\n handleComplete={handleComplete}\n handleBack={handleBack}\n handleNext={handleNext}\n currentAudit={currentAudit}\n inventories={inventories}\n handleAddSkipped={handleAddSkipped}\n title={getLocationViewName(\n window.appUser.reloadYard.locationMap[\n locations[getNextItem(currentAudit)]\n ]\n )}\n disableBack={getNextItem(currentAudit) === 0}\n returnToAudit={returnToAudit}\n locations={locations}\n completedLocations={completedLocations}\n setLocationMode={setLocationMode}\n isCompleted={isCompleted}\n />\n );\n};\n\nexport default AuditContainer;\n","import React, { useState, useRef, useEffect } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { auditByStatusByDateOptions } from \"../../../graphql/audit/custom-queries\";\nimport { useNotify } from \"react-admin\";\nimport { format } from \"date-fns\";\nimport {\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n Avatar,\n ListItemSecondaryAction,\n IconButton,\n Divider,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { grey, green } from \"@material-ui/core/colors\";\nimport { Link } from \"react-router-dom\";\nimport {\n AuditOutlinedIcon,\n ChevronRightIcon,\n RefreshIcon,\n XIcon,\n} from \"../../../components/common\";\nimport { AuditStatus } from \"../../../utils/constants\";\nimport { logError } from \"../../../utils/appUtils\";\nimport CrewCard from \"../../../components/common/CrewCard\";\n\nconst useStyles = makeStyles((theme) => ({\n grey: {\n color: theme.palette.getContrastText(grey[200]),\n backgroundColor: grey[200],\n },\n green: {\n color: theme.palette.getContrastText(green[200]),\n backgroundColor: green[200],\n },\n link: {\n color: \"inherit\",\n textDecoration: \"inherit\",\n },\n unprocessedItem: {\n color: theme.palette.getContrastText(grey[200]),\n backgroundColor: grey[300],\n },\n notFound: {\n display: \"fles\",\n margin: theme.spacing(2),\n },\n}));\n\nconst AuditList = ({ match }) => {\n const isComponentMounted = useRef(true);\n const [audits, setAudits] = useState([]);\n const [, setSelectedAudit] = useState();\n const classes = useStyles();\n const notify = useNotify();\n\n useEffect(() => {\n if (isComponentMounted) getAudits();\n return () => (isComponentMounted.current = false);\n }, []);\n\n const getAudits = async () => {\n try {\n const response = await API.graphql(\n graphqlOperation(auditByStatusByDateOptions, {\n reloadYardId: window.appUser?.reloadYardId,\n sortDirection: \"DESC\",\n statusCreateDateTime: {\n beginsWith: { status: AuditStatus.IN_PROGRESS },\n },\n })\n );\n const auditResponse = response.data.auditByStatusByDate.items;\n setAudits(auditResponse);\n } catch (err) {\n logError(\"pages:audit:AuditList:getAudits\", err, notify);\n }\n };\n\n const getAvatarClassName = (shipment) => {\n if (shipment.state === AuditStatus.NEW) return classes.green;\n return classes.unprocessedItem;\n };\n\n const handleSelect = async (audit) => {\n setSelectedAudit(audit);\n };\n\n return (\n <CrewCard\n title=\"Audit\"\n icon={<AuditOutlinedIcon fontSize=\"large\" />}\n action={\n <IconButton onClick={getAudits}>\n <RefreshIcon fontSize=\"large\" />\n </IconButton>\n }\n >\n {audits?.length > 0 ? (\n <List>\n {audits.map((audit, idx) => {\n return (\n <div key={audit.id}>\n <Link className={classes.link} to={match.path + \"/\" + audit.id}>\n <ListItem onClick={() => handleSelect(audit)}>\n <ListItemAvatar>\n <Avatar className={getAvatarClassName(audit)}>\n <XIcon fontSize=\"inherit\" />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={\n <>\n <Typography>{audit.accountName}</Typography>\n <Typography color=\"textSecondary\">\n {audit.assignedTo}\n </Typography>\n </>\n }\n secondary={format(\n new Date(audit.createDateTime),\n \"MM/dd/yyyy hh:mm a\"\n )}\n />\n <ListItemSecondaryAction>\n <IconButton\n edge=\"end\"\n onClick={() => handleSelect(audit)}\n >\n <ChevronRightIcon fontSize=\"large\" />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n </Link>\n {idx < audits.length - 1 ? <Divider /> : null}\n </div>\n );\n })}\n </List>\n ) : (\n <Typography className={classes.notFound}>No audits found.</Typography>\n )}\n </CrewCard>\n );\n};\n\nexport default AuditList;\n","import React from \"react\";\n\nimport { Route } from \"react-router-dom\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { updateAudit } from \"../../../graphql/mutations\";\nimport { Title } from \"react-admin\";\nimport AuditContainer from \"./AuditCard\";\nimport AuditList from \"./AuditList\";\n\nconst Audit = (props) => {\n return (\n <>\n <Title title=\"Audit\" />\n <Route\n path={`${props.match.path}`}\n exact\n render={(props) => <AuditList {...props} />}\n />\n <Route\n path={`${props.match.path}/:id`}\n render={(props) => <AuditContainer {...props} />}\n />\n </>\n );\n};\n\nexport const saveAudit = async (audit) => {\n setNextItem(audit, getNextItem(audit));\n const toUpdateAudit = {\n ...audit,\n nextItem: audit.nextItem,\n processedItems: JSON.stringify(audit.processedItems),\n processedLocations: JSON.stringify(audit.processedLocations),\n skippedItems: JSON.stringify(audit.skippedItems),\n };\n delete toUpdateAudit.updatedAt;\n // toUpdateAudit.groups = window.appUser?.groups;\n const updatedAuditRes = await API.graphql(\n graphqlOperation(updateAudit, { input: toUpdateAudit })\n );\n return updatedAuditRes.data.updateAudit;\n};\n\nexport const getNextItem = (audit) => {\n let nextItem = 0;\n debugger;\n if (window.appUser?.fullName && audit?.nextItems) {\n if (audit.nextItems.length > 0) {\n let idx = audit.nextItems.findIndex(\n (itm) => itm.owner === window.appUser?.fullName\n );\n if (idx > -1) nextItem = audit.nextItems[idx].locationIdx;\n else {\n nextItem =\n audit.nextItems.reduce(\n (v, itm) => (itm.locationIdx > v ? itm.locationIdx : v),\n 0\n ) + 1;\n }\n } else {\n nextItem = 0;\n }\n }\n if (nextItem === audit.locations.length)\n nextItem = audit.locations.length - 1;\n return nextItem;\n};\n\nexport const setNextItem = (audit, value) => {\n if (!audit || !window.appUser?.fullName) return;\n if (audit?.nextItems && audit.nextItems.length > 0) {\n let idx = audit.nextItems.findIndex(\n (itm) => itm.owner === window.appUser?.fullName\n );\n debugger;\n if (idx > -1) {\n audit.nextItems[idx].locationIdx = value;\n } else\n audit.nextItems.push({\n owner: window.appUser?.fullName,\n locationIdx: value,\n });\n } else\n audit.nextItems.push({\n owner: window.appUser?.fullName,\n locationIdx: 0,\n });\n};\n\nexport default Audit;\n","export const inboundReducer = (state, action) => {\n switch (action.type) {\n case \"PLACED_SHIPPMENTS_LOADED\":\n return {\n ...state,\n placedShipments: action.payload,\n currentShipment: {},\n currentInventory: {},\n };\n case \"CLEAR_NOTE\":\n const newNotes = { ...state.notes };\n delete newNotes[action.payload.id];\n return {\n ...state,\n notes: newNotes,\n };\n case \"UPDATE_CURRENT_SHIPMENT\":\n return {\n ...state,\n currentShipment: { ...action.payload },\n };\n case \"UPDATE_CURRENT_INVENTORY\":\n const items = state.currentShipment.inventories.items.map((itm) =>\n itm.id === action.payload.id ? action.payload : itm\n );\n return {\n ...state,\n currentInventory: { ...action.payload },\n currentShipment: {\n ...state.currentShipment,\n inventories: { items },\n },\n };\n case \"SET_CURRENT_SHIPPMENT\":\n return {\n ...state,\n currentShipment: { ...action.payload },\n };\n case \"SET_SELECTED_OUTBOUND\":\n return {\n ...state,\n selectedOutbound: { ...action.payload },\n };\n case \"SET_SHIPPMENT_NOTE\":\n const newShipmentNotes = { ...state.notes };\n newShipmentNotes[action.payload.id] = action.payload.value;\n return {\n ...state,\n notes: newShipmentNotes,\n };\n case \"SET_CURRENT_INVENTORY\":\n return {\n ...state,\n currentInventory: { ...action.payload },\n };\n case \"SET_MODE\":\n return {\n ...state,\n mode: action.payload,\n };\n case \"SET_LOADING\":\n return {\n ...state,\n loading: action.payload,\n };\n case \"SET_AISLES\":\n return {\n ...state,\n aisles: action.payload,\n };\n case \"SET_SELECTED_AISLE\":\n return {\n ...state,\n selectedAisle: action.payload.aisle,\n bayList: action.payload.bayList,\n showCapacityDisplay: action.payload.showCapacityDisplay,\n selectedLocation: action.payload.selectedLocation,\n selectedInventoryItem: action.payload.selectedInventoryItem,\n };\n case \"UPDATE_INVENTORY_ITEMS\": {\n return {\n ...state,\n currentInventory: { ...action.payload },\n };\n }\n case \"SELECT_INVENTORY_ITEM\": {\n return {\n ...state,\n currentInventory: action.payload.currentInventory,\n selectedInventoryItem: action.payload.selectedInventoryItem,\n origInventoryItem: action.payload.origInventoryItem,\n selectedLocation: action.payload.selectedInventoryItem.location,\n selectedAisle: action.payload.selectedInventoryItem.location.aisle,\n disableSelection: action.payload.disableSelection,\n bayList: [],\n displayState: \"MAP\",\n };\n }\n case \"SET_SELECTED_INVENTORY_ITEM\":\n return {\n ...state,\n selectedInventoryItem: action.payload,\n };\n case \"SET_SELECTED_LOCATION\":\n return {\n ...state,\n selectedLocation: action.payload,\n };\n case \"SET_DISPLAY_STATE\":\n return {\n ...state,\n displayState: action.payload.displayState,\n selectedAisle: null,\n selectedLocation: null,\n bayList: [],\n origInventoryItem: null,\n };\n case \"DISABLE_SELECTION\":\n return {\n ...state,\n disableSelection: action.payload,\n };\n case \"INIT_ADD_INVENTORY_ITEM\":\n return {\n ...state,\n ...action.payload,\n displayState: \"MAP\",\n };\n case \"SET_AISLE_SEARCH_INVENTORIES\":\n return {\n ...state,\n searchInventoryItemsMap: action.payload,\n };\n case \"SET_SHOW_QUANTITY\":\n return {\n ...state,\n showInventoryQuantity: action.payload,\n };\n case \"CLEAR_INVENTORY\":\n return {\n ...state,\n currentInventory: {},\n selectedInventoryItem: [],\n selectedLocation: null,\n bayList: [],\n searchInventoryItemsMap: {},\n };\n case \"CLEAR_SHIPMENTS\": {\n return {\n ...state,\n placedShipments: [],\n currentShipment: {},\n currentInventory: {},\n };\n }\n default:\n break;\n }\n return state;\n};\n","import React, { createContext, useContext, useReducer } from \"react\";\nimport { inboundReducer } from \"./reducer\";\nimport { aisleByActiveByZoneBySortKey } from \"../../../graphql/reloadyard/custom-queries\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n filterAisles,\n setInventoryAisleList,\n} from \"../../../utils/locationUtils\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { useNotify } from \"ra-core\";\nimport { updateExceptionQuantity } from \"../../../utils/utils\";\nimport { updateInventorieInboundMini } from \"../../../graphql/inventory/custom-mutations\";\nimport { InboundState, UserType } from \"../../../utils/constants\";\nimport {\n getInboundShipmentMobile,\n inboundShipmentByStateByRailcarReduced,\n} from \"../../../graphql/inbound/custom-queries\";\nimport { updateInboundShipment } from \"../../../graphql/inbound/custom-mutations\";\n\nconst initState = {\n placedShipments: [],\n currentInventory: {},\n currentShipment: {},\n mode: \"LIST_SHIPMENTS\",\n errors: {},\n notes: {},\n selectedAisle: null,\n selectedLocation: null,\n selectedInventoryItem: { quantityOnHand: 1 },\n inventoryItemsMap: {},\n showCapacityDisplay: false,\n bayList: [],\n displayState: \"INVENTORY_ITEMS\",\n disableSelection: false,\n searchInventoryItemsMap: {},\n showInventoryQuantity: false,\n loading: false,\n};\n\nconst InboundContext = createContext(initState);\n\nexport const InboundProvider = React.memo(({ children }) => {\n const [state, dispatch] = useReducer(inboundReducer, initState);\n const notify = useNotify();\n\n const getAisles = async (currentShipment, inventory) => {\n try {\n const aislesResponse = await API.graphql(\n graphqlOperation(aisleByActiveByZoneBySortKey, {\n zoneId: currentShipment.zoneId,\n activeSortKey: { beginsWith: { active: \"true\" } },\n limit: 300,\n })\n );\n const aisles = filterAisles(\n aislesResponse.data.aisleByActiveByZoneBySortKey.items,\n inventory\n );\n dispatch({ type: \"SET_AISLES\", payload: aisles });\n } catch (err) {\n logError(\n \"processInboundShipments:InboundAisleMap:getAisles\",\n err,\n notify\n );\n }\n };\n\n const saveInventory = async (inventory, quantityDelivered) => {\n debugger;\n inventory.quantityDelivered = quantityDelivered;\n setInventoryAisleList(inventory);\n updateExceptionQuantity(inventory);\n const toUpdateInventory = { ...inventory };\n toUpdateInventory.productId = toUpdateInventory.productId || \"\";\n delete toUpdateInventory.inventoryItems;\n delete toUpdateInventory.account;\n delete toUpdateInventory.inboundShipment;\n delete toUpdateInventory.outboundShipment;\n delete toUpdateInventory.shipmentLineItems;\n delete toUpdateInventory.reloadYardCommodity;\n delete toUpdateInventory.product;\n delete toUpdateInventory.createdAt;\n delete toUpdateInventory.updatedAt;\n delete toUpdateInventory.area;\n delete toUpdateInventory.zone;\n return API.graphql(\n graphqlOperation(updateInventorieInboundMini, {\n input: toUpdateInventory,\n })\n );\n };\n\n const getShipments = async () => {\n debugger;\n let response = await API.graphql(\n graphqlOperation(inboundShipmentByStateByRailcarReduced, {\n reloadYardId: window.appUser?.reloadYardId,\n stateRailCarNumber: { beginsWith: { state: \"PROCESS\" } },\n limit: 100,\n })\n );\n\n debugger;\n let data = response.data.inboundShipmentByStateByRailcar.items;\n\n if (window.appUser.type !== UserType.CREW) {\n response = await API.graphql(\n graphqlOperation(inboundShipmentByStateByRailcarReduced, {\n reloadYardId: window.appUser?.reloadYardId,\n stateRailCarNumber: { beginsWith: { state: \"APPROVE\" } },\n limit: 100,\n })\n );\n if (response.data.inboundShipmentByStateByRailcar.items.length > 0) {\n data = [\n ...data,\n ...response.data.inboundShipmentByStateByRailcar.items,\n ];\n data.sort((a, b) => a.railCarNumber.localeCompare(b.railCarNumber));\n }\n }\n\n data = data.filter(\n (itm) =>\n !(\n itm.state === InboundState.PROCESS_INVENTORY_REVIEW &&\n itm.unloadedBy === window.appUser.fullName\n )\n );\n data.sort((a, b) => a.placedDateTime.localeCompare(b.placedDateTime));\n return data;\n };\n\n const getShipment = async (match) => {\n const response = await API.graphql(\n graphqlOperation(getInboundShipmentMobile, { id: match.params.id })\n );\n const inboundShipment = response.data.getInboundShipment;\n return inboundShipment;\n };\n\n const saveShipment = async (toUpdateShipment) => {\n toUpdateShipment = { ...toUpdateShipment };\n delete toUpdateShipment.account;\n delete toUpdateShipment.area;\n delete toUpdateShipment.createdAt;\n delete toUpdateShipment.inventories;\n delete toUpdateShipment.invoice;\n delete toUpdateShipment.location;\n delete toUpdateShipment.reloadYardCommodity;\n delete toUpdateShipment.seals;\n delete toUpdateShipment.timeslot;\n delete toUpdateShipment.updatedAt;\n delete toUpdateShipment.zone;\n\n let response = await API.graphql(\n graphqlOperation(updateInboundShipment, {\n input: toUpdateShipment,\n })\n );\n dispatch({\n type: \"UPDATE_CURRENT_SHIPMENT\",\n payload: response.data.updateInboundShipment,\n });\n debugger;\n };\n\n return (\n <InboundContext.Provider\n value={{\n state,\n dispatch,\n getShipments,\n getShipment,\n getAisles,\n saveInventory,\n saveShipment,\n notify,\n }}\n >\n {children}\n </InboundContext.Provider>\n );\n});\n\nexport const useInboundContext = () => useContext(InboundContext);\n","export const updateOutboundShipmentMini = /* GraphQL */ `\n mutation UpdateOutboundShipment(\n $input: UpdateOutboundShipmentInput!\n $condition: ModelOutboundShipmentConditionInput\n ) {\n updateOutboundShipment(input: $input, condition: $condition) {\n id\n }\n }\n`;\n\nexport const updateOutboundShipment = /* GraphQL */ `\n mutation UpdateOutboundShipment(\n $input: UpdateOutboundShipmentInput!\n $condition: ModelOutboundShipmentConditionInput\n ) {\n updateOutboundShipment(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n seals {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n tareWeight\n ladenWeight\n netWeight\n weightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n areaId\n area {\n id\n active\n reloadYardId\n name\n prefix\n areaType\n color\n sortKey\n }\n photos {\n bucket\n region\n key\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n }\n sealNumber\n assignedTo\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n lotNumberPrefix\n businessName\n email\n phone\n fax\n trackInboundSeals\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n reloadYardId\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundPhotos\n inventoryCustomFields {\n id\n name\n type\n display\n }\n bolTemplate {\n key\n type\n }\n }\n reloadYardId\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n totalQuantityToPick\n outboundShipmentId\n reloadYardId\n inventoryId\n inventoryItems {\n items {\n id\n status\n outboundShipmentId\n shipmentLineItemId\n inventoryItemId\n inventoryItem {\n id\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n locationFullName\n aisleList\n outboundShipmentId\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n customFields\n }\n location {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n capacityUsed\n capacityAllocated\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n areaId\n area {\n id\n active\n reloadYardId\n name\n prefix\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n sortKey\n }\n aisleId\n aisle {\n id\n name\n type\n areaId\n zoneId\n bays\n levels\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n }\n bay\n level\n position\n length\n width\n sortKey\n }\n outboundShipmentId\n locationFullName\n reloadYardId\n }\n quantityToPick\n }\n nextToken\n }\n inventory {\n id\n active\n groups\n reloadYardId\n status\n productName\n productCode\n productId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n units\n sortKey\n commodity {\n id\n name\n defaultUnits\n }\n }\n product {\n id\n category\n name\n productCode\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n width\n length\n height\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n }\n accountName\n accountId\n lotType\n lotNumber\n poNumber\n areaId\n zoneId\n photos {\n bucket\n region\n key\n }\n lastShipDateTime\n quantityOnHand\n quantityShipped\n quantityCommitted\n quantityPhysical\n inventoryUnits\n weight\n weightUnits\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n customFields\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n units\n sortKey\n commodity {\n id\n name\n defaultUnits\n }\n }\n invoiceId\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const updateShipmentLineItemMini = /* GraphQL */ `\n mutation UpdateShipmentLineItem(\n $input: UpdateShipmentLineItemInput!\n $condition: ModelShipmentLineItemConditionInput\n ) {\n updateShipmentLineItem(input: $input, condition: $condition) {\n id\n }\n }\n`;\n\nexport const updateShipmentLineItem = /* GraphQL */ `\n mutation UpdateShipmentLineItem(\n $input: UpdateShipmentLineItemInput!\n $condition: ModelShipmentLineItemConditionInput\n ) {\n updateShipmentLineItem(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n totalQuantityToPick\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n pickupPhoto {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n outboundShipmentId\n accountId\n reloadYardId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n lotType\n areaId\n zoneId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n width\n length\n height\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n accountNumber\n lotNumberPrefix\n businessName\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n addressState\n reloadYardId\n inboundInstructions\n podEmail\n outboundInstructions\n posEmail\n outboundSkipSignature\n secondaryReview\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n instructions\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n customFields\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n customFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const updateShipmentLineItemInventoryItem = /* GraphQL */ `\n mutation UpdateShipmentLineItemInventoryItem(\n $input: UpdateShipmentLineItemInventoryItemInput!\n $condition: ModelShipmentLineItemInventoryItemConditionInput\n ) {\n updateShipmentLineItemInventoryItem(input: $input, condition: $condition) {\n id\n owner\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryId\n inventoryItemId\n hasException\n barcodeException\n barcodeExceptionNote\n otherException\n otherExceptionNote\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n status\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleList\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n customFields\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n capacityUsed\n topDownPickOrder\n length\n width\n sortKey\n }\n bay\n level\n position\n capacityUsed\n capacityAllocated\n length\n width\n sortKey\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n tags {\n nextToken\n }\n }\n outboundShipmentId\n reloadYardId\n createdAt\n updatedAt\n }\n quantityToPick\n status\n createdAt\n updatedAt\n }\n }\n`;\n","import React from \"react\";\n\nimport { Tooltip } from \"@material-ui/core\";\nimport { orange } from \"@material-ui/core/colors\";\n\nimport { LinkOffIcon } from \"./\";\n\nexport const ProductLinkIcon = ({ record, ...props }) => {\n if (!record?.productId) {\n return (\n <Tooltip title=\"Not linked to Product\" placement=\"right\" arrow>\n <LinkOffIcon fontSize=\"medium\" style={{ color: orange[600] }} />\n </Tooltip>\n );\n }\n return null;\n};\n","import React from \"react\";\n\nimport {\n Divider,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from \"@material-ui/core\";\n\nimport {\n getCustomFieldsTable,\n parseCustomFieldValue,\n} from \"../../../../components/common/CustomFields\";\n\nimport {\n getFilePublicURL,\n getKeyFilename,\n getPhotoUrl,\n} from \"../../../../utils/fileUtils\";\nimport {\n CarrierType,\n CustomFieldsDisplay,\n Unit,\n} from \"../../../../utils/constants\";\nimport { getUnitName } from \"../../../../utils/loadTypeUtils\";\nimport { trimDecimal } from \"../../../../utils/utils\";\n\nexport const HeaderBlock = () => {\n const logoImage = window.appUser?.reloadYard?.logoImage;\n const logoURL = logoImage ? getPhotoUrl(logoImage.key, 128) : null;\n\n return (\n <div style={{ width: \"100%\" }}>\n {logoURL && (\n <div style={{ textAlign: \"center\" }}>\n <img\n alt=\"Yard Logo\"\n src={logoURL}\n style={{\n margin: \"0 auto\",\n width: \"auto\",\n maxWidth: \"90%\",\n height: \"auto\",\n minHeight: \"5em\",\n maxHeight: \"5em\",\n }}\n />\n </div>\n )}\n <div>\n <Divider />\n </div>\n <div style={{ textAlign: \"center\" }}>\n <h2>\n <strong> OUTBOUND MANIFEST </strong>\n </h2>\n </div>\n </div>\n );\n};\n\nexport const InfoBlock = ({ record }) => {\n const outboundCustomFields = (\n record?.account?.outboundCustomFields || []\n ).filter((field) => field.display.includes(CustomFieldsDisplay.POS));\n\n return (\n <div style={{ width: \"100%\" }}>\n <Table key=\"InfoBlock1\" style={{ width: \"100%\" }}>\n <TableHead>\n <TableRow>\n <TableCell\n style={{ textAlign: \"center\", width: \"50%\", padding: \"3px\" }}\n >\n Shipment Date\n </TableCell>\n <TableCell\n style={{ textAlign: \"center\", width: \"50%\", padding: \"3px\" }}\n >\n Ship To\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell style={{ textAlign: \"center\", padding: \"3px\" }}>\n {new Date(record.departureDateTime).toLocaleDateString()}\n </TableCell>\n <TableCell style={{ textAlign: \"center\", padding: \"3px\" }}>\n {record.shipTo?.name} <br />\n {record.shipTo?.street} <br />\n {record.shipTo?.city} {record.shipTo?.state}{\" \"}\n {record.shipTo?.zipCode} {record.shipTo?.country}\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n <Table key=\"InfoBlock2\" style={{ width: \"100%\" }}>\n <TableHead>\n <TableRow>\n <TableCell\n style={{ textAlign: \"center\", width: \"33%\", padding: \"3px\" }}\n >\n PO number\n </TableCell>\n <TableCell\n style={{ textAlign: \"center\", width: \"33%\", padding: \"3px\" }}\n >\n Ref. Number\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell style={{ textAlign: \"center\", padding: \"3px\" }}>\n {record.poNumber}\n </TableCell>\n <TableCell style={{ textAlign: \"center\", padding: \"3px\" }}>\n {record.pickupNumber}\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n <Table key=\"InfoBlock3\" style={{ width: \"100%\" }}>\n <TableHead>\n <TableRow>\n <TableCell\n style={{ textAlign: \"center\", width: \"33%\", padding: \"3px\" }}\n >\n {record.carrierType === CarrierType.RAIL\n ? \"Railcar Number\"\n : \"Trailer Number\"}\n </TableCell>\n <TableCell\n style={{ textAlign: \"center\", width: \"33%\", padding: \"3px\" }}\n >\n Arrived\n </TableCell>\n <TableCell\n style={{ textAlign: \"center\", width: \"33%\", padding: \"3px\" }}\n >\n Released\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell style={{ textAlign: \"center\", padding: \"3px\" }}>\n {record.railCarNumber}\n </TableCell>\n <TableCell style={{ textAlign: \"center\", padding: \"3px\" }}>\n {record.arrivalDateTime\n ? new Date(record.arrivalDateTime).toLocaleString()\n : \"N/A\"}\n </TableCell>\n <TableCell style={{ textAlign: \"center\", padding: \"3px\" }}>\n {record.departureDateTime\n ? new Date(record.departureDateTime).toLocaleString()\n : \"N/A\"}\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n {getCustomFieldsTable(outboundCustomFields, record.customFields)}\n </div>\n );\n};\n\nconst LineItemsBlock = ({ record, posPickList }) => {\n const inventoryCustomFields = (\n record?.account?.inventoryCustomFields || []\n ).filter((field) => field.display.includes(CustomFieldsDisplay.POS));\n const showProductCodeColumn = record.shipmentLineItems.items.some(\n (lineItem) =>\n lineItem.inventory.productCode && lineItem.inventory.productCode.trim()\n );\n\n return (\n <div style={{ width: \"100%\" }}>\n <Divider />\n <h3>\n <strong> INVENTORY SHIPPED </strong>\n </h3>\n <Table key=\"outboundInventory\" style={{ width: \"100%\" }}>\n <TableHead>\n <TableRow>\n {showProductCodeColumn && (\n <TableCell\n style={{ textAlign: \"left\", minWidth: \"33%\", padding: \"3px\" }}\n >\n Product Code\n </TableCell>\n )}\n <TableCell\n style={{ textAlign: \"left\", minWidth: \"33%\", padding: \"3px\" }}\n >\n Product Name\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"33%\", padding: \"3px\" }}\n >\n {getUnitName(record.totalUnits)}\n </TableCell>\n {inventoryCustomFields.map((field, index) => (\n <TableCell\n key={\"ct_\" + index}\n style={{ textAlign: \"center\", padding: \"3px\" }}\n >\n {field.name}\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {record.shipmentLineItems.items.map((lineItem) => (\n <TableRow>\n {showProductCodeColumn && (\n <TableCell style={{ textAlign: \"left\", padding: \"3px\" }}>\n {lineItem.inventory.productCode}\n </TableCell>\n )}\n <TableCell style={{ textAlign: \"left\", padding: \"3px\" }}>\n {lineItem.inventory.productName}\n </TableCell>\n <TableCell style={{ textAlign: \"right\", padding: \"3px\" }}>\n {lineItem.totalQuantityToPick}\n </TableCell>\n {inventoryCustomFields.map((field, index) => (\n <TableCell\n key={index}\n style={{ textAlign: \"center\", padding: \"3px\" }}\n >\n {parseCustomFieldValue(\n lineItem.inventory.customFields.find((cf) =>\n cf.startsWith(field.name)\n )\n )}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nconst TotalsBlock = ({ record, posPickList }) => {\n // PCS Totals and Flags\n let totalPCS = 0;\n let allMissingPCS = true;\n let somePCSNull = false;\n\n posPickList.forEach((lineItem) => {\n // PCS Calculation\n if (lineItem.inventory.pcs == null) {\n somePCSNull = true;\n } else {\n allMissingPCS = false;\n if (record.totalUnits === Unit.UNIT) {\n totalPCS += lineItem.inventory.pcs * lineItem.totalQuantityToPick;\n } else {\n totalPCS += lineItem.inventory.pcs;\n }\n }\n });\n\n return (\n <div style={{ width: \"100%\" }}>\n <Divider />\n <Table key=\"outboundTotals\" style={{ width: \"100%\" }}>\n <TableBody>\n <TableRow key=\"totalUnits\">\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"66%\", padding: \"3px\" }}\n >\n Total {getUnitName(record.totalUnits)}\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"33%\", padding: \"3px\" }}\n >\n {record.totalQuantity}\n </TableCell>\n </TableRow>\n {!allMissingPCS && (\n <TableRow key=\"totalPCS\">\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"66%\", padding: \"3px\" }}\n >\n Total Pieces\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"33%\", padding: \"3px\" }}\n >\n {somePCSNull ? \"N/A\" : trimDecimal(totalPCS).toLocaleString()}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nexport const AttachmentsBlock = ({ record }) => {\n const attachments =\n record.attachments?.length > 0 ? record.attachments : null;\n const bol = record.bolFile;\n\n if (!attachments && !bol) return <></>;\n return (\n <div style={{ width: \"100%\" }}>\n <div>\n <Divider />\n </div>\n <Table key=\"outboundDocs\" style={{ width: \"100%\" }}>\n <TableBody>\n {attachments?.map((row) => (\n <TableRow>\n <TableCell style={{ textAlign: \"left\" }}>\n {row.key && (\n <a\n href={getFilePublicURL(row.key)}\n style={{\n margin: \"0 auto\",\n width: \"auto\",\n maxWidth: \"90%\",\n }}\n >\n {getKeyFilename(row.key)}\n </a>\n )}\n </TableCell>\n </TableRow>\n ))}\n {bol && (\n <TableRow>\n <TableCell style={{ textAlign: \"left\" }}>\n {bol.key && (\n <a\n href={getFilePublicURL(bol.key)}\n style={{\n margin: \"0 auto\",\n width: \"auto\",\n maxWidth: \"90%\",\n }}\n >\n {getKeyFilename(bol.key)}\n </a>\n )}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nexport const PhotosBlock = ({ record }) => {\n const rowSize = 3;\n const photosRows = [];\n const photos = record.photos ? record.photos : [];\n for (var i = 0; i < photos.length; i += rowSize) {\n photosRows.push(photos.slice(i, i + rowSize));\n }\n\n return (\n <div style={{ width: \"100%\" }}>\n <div>\n <Divider />\n </div>\n <Table key=\"outboundPhotos\" style={{ width: \"100%\" }}>\n <TableBody>\n {photosRows.map((row) => (\n <TableRow>\n <TableCell style={{ textAlign: \"center\" }}>\n {row[0]?.key && (\n <img\n alt=\"Outbound Load\"\n src={getPhotoUrl(row[0].key, 256)}\n style={{\n margin: \"0 auto\",\n width: \"auto\",\n maxWidth: \"90%\",\n height: \"auto\",\n borderRadius: 5,\n }}\n />\n )}\n </TableCell>\n <TableCell style={{ textAlign: \"center\" }}>\n {row[1]?.key && (\n <img\n alt=\"Outbound Load\"\n src={getPhotoUrl(row[1].key, 256)}\n style={{\n margin: \"0 auto\",\n width: \"auto\",\n maxWidth: \"90%\",\n height: \"auto\",\n borderRadius: 5,\n }}\n />\n )}\n </TableCell>\n <TableCell style={{ textAlign: \"center\" }}>\n {row[2]?.key && (\n <img\n alt=\"Outbound Load\"\n src={getPhotoUrl(row[2].key, 256)}\n style={{\n margin: \"0 auto\",\n width: \"auto\",\n maxWidth: \"90%\",\n height: \"auto\",\n borderRadius: 5,\n }}\n />\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nexport const SealsBlock = ({ record }) => {\n const showSeals = record?.account?.trackOutboundSeals;\n if (!showSeals) return null;\n\n const sealBarCodes = record.seals?.items?.map((seal) => seal.barcode) || [];\n\n const renderSeals = () => {\n if (sealBarCodes.length === 0) {\n return (\n <TableRow>\n <TableCell colSpan={3}>no seals were entered</TableCell>\n </TableRow>\n );\n }\n\n const rows = [];\n for (let i = 0; i < sealBarCodes.length; i += 3) {\n rows.push(\n <TableRow key={i}>\n <TableCell style={{ fontSize: \"0.8rem\" }}>\n {sealBarCodes[i] || \"\"}\n </TableCell>\n <TableCell style={{ fontSize: \"0.8rem\" }}>\n {sealBarCodes[i + 1] || \"\"}\n </TableCell>\n <TableCell style={{ fontSize: \"0.8rem\" }}>\n {sealBarCodes[i + 2] || \"\"}\n </TableCell>\n </TableRow>\n );\n }\n return rows;\n };\n\n return (\n <div style={{ width: \"100%\" }}>\n <Divider />\n <h3>\n <strong>SEALS</strong>\n </h3>\n <Table id=\"inboundInventory\" style={{ width: \"100%\" }}>\n <TableHead>\n <TableRow>\n <TableCell></TableCell>\n <TableCell></TableCell>\n <TableCell></TableCell>\n </TableRow>\n </TableHead>\n <TableBody>{renderSeals()}</TableBody>\n </Table>\n </div>\n );\n};\n\nexport const NotesBlock = ({ record }) => {\n const filteredNotes = record.notes?.filter((note) => note.public);\n if (!filteredNotes || filteredNotes?.length === 0) return null;\n\n return (\n <div style={{ width: \"100%\" }}>\n <Divider />\n <h3>\n <strong> NOTES </strong>\n </h3>\n <Table key=\"inboundInventory\" style={{ width: \"100%\" }}>\n <TableHead>\n <TableRow>\n <TableCell\n style={{ textAlign: \"left\", minWidth: \"60%\", padding: \"3px\" }}\n >\n Note\n </TableCell>\n <TableCell\n style={{ textAlign: \"left\", minWidth: \"20%\", padding: \"3px\" }}\n >\n By\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"20%\", padding: \"3px\" }}\n >\n Date\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredNotes.map((lineItem) => (\n <TableRow key={lineItem.id}>\n <TableCell style={{ textAlign: \"left\", padding: \"3px\" }}>\n {lineItem.text}\n </TableCell>\n <TableCell style={{ textAlign: \"left\", padding: \"3px\" }}>\n {lineItem.by}\n </TableCell>\n <TableCell style={{ textAlign: \"right\", padding: \"3px\" }}>\n {new Date(lineItem.date).toLocaleDateString()}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nexport const OutboundPOSBody = ({ record, enclosePhotos, encloseDocs }) => {\n const posPickList = record.shipmentLineItems.items.map((lineItem) => {\n return {\n ...lineItem,\n inventory: {\n ...lineItem.inventory,\n pcs:\n lineItem.inventory.pcs != null\n ? lineItem.inventory.pcs\n : lineItem.inventory.product?.pcs,\n },\n };\n });\n\n return (\n <Paper elevation={0} style={{ maxWidth: \"900px\", padding: \"10px\" }}>\n <HeaderBlock />\n <InfoBlock record={record} />\n <LineItemsBlock record={record} posPickList={posPickList} />\n <TotalsBlock record={record} posPickList={posPickList} />\n <SealsBlock record={record} />\n <NotesBlock record={record} />\n {encloseDocs && <AttachmentsBlock record={record} />}\n {enclosePhotos && <PhotosBlock record={record} />}\n </Paper>\n );\n};\n","import React from \"react\";\n\nimport {\n Divider,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from \"@material-ui/core\";\n\nimport { parseCustomFieldValue } from \"../../../../components/common/CustomFields\";\n\nimport { CustomFieldsDisplay, Unit } from \"../../../../utils/constants\";\nimport { trimDecimal } from \"../../../../utils/utils\";\nimport {\n calculateMbf,\n calculateSqf,\n getUnitName,\n isLumberCommodity,\n isPanelsCommodity,\n} from \"../../../../utils/loadTypeUtils\";\nimport {\n AttachmentsBlock,\n HeaderBlock,\n InfoBlock,\n NotesBlock,\n PhotosBlock,\n SealsBlock,\n} from \"./OutboundPOSBody\";\n\nconst LineItemsBlock = ({ record, posPickList }) => {\n const inventoryCustomFields = (\n record?.account?.inventoryCustomFields || []\n ).filter((field) => field.display.includes(CustomFieldsDisplay.POS));\n\n const showProductCodeColumn = posPickList.some((lineItem) =>\n lineItem.inventory.productCode?.trim()\n );\n const showPCSColumn = posPickList.some(\n (lineItem) => lineItem.inventory.pcs != null\n );\n const pcsColumnName = record.totalUnits === Unit.UNIT ? \"PPU\" : \"Pieces\";\n const showFootageColumn = posPickList.some(\n (lineItem) => lineItem.inventory.footage != null\n );\n\n return (\n <div style={{ width: \"100%\" }}>\n <Divider />\n <h3>\n <strong> INVENTORY SHIPPED </strong>\n </h3>\n <Table key=\"outboundInventory\" style={{ width: \"100%\" }}>\n <TableHead>\n <TableRow>\n {showProductCodeColumn && (\n <TableCell\n style={{ textAlign: \"left\", padding: \"3px\", width: \"15%\" }}\n >\n Product Code\n </TableCell>\n )}\n <TableCell\n style={{\n textAlign: \"left\",\n padding: \"3px\",\n width: `${showProductCodeColumn ? \"25%\" : \"35%\"}`, // Adjust dynamically based on Product Code visibility\n }}\n >\n Product Name\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", padding: \"3px\", width: \"10%\" }}\n >\n {getUnitName(record.totalUnits)}\n </TableCell>\n {showPCSColumn && (\n <TableCell\n style={{ textAlign: \"right\", padding: \"3px\", width: \"10%\" }}\n >\n {pcsColumnName}\n </TableCell>\n )}\n {showFootageColumn && (\n <TableCell\n style={{ textAlign: \"right\", padding: \"3px\", width: \"10%\" }}\n >\n Footage\n </TableCell>\n )}\n <TableCell\n style={{ textAlign: \"right\", padding: \"3px\", width: \"10%\" }}\n >\n Order#\n </TableCell>\n {inventoryCustomFields.map((field, index) => (\n <TableCell\n key={\"inv_cf_h_\" + index}\n style={{\n textAlign: \"center\",\n padding: \"3px\",\n width: `${100 / (inventoryCustomFields.length + 5)}%`, // Adjust dynamically\n }}\n >\n {field.name}\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {posPickList.map((lineItem) => (\n <TableRow key={lineItem.id}>\n {showProductCodeColumn && (\n <TableCell\n style={{ textAlign: \"left\", padding: \"3px\", width: \"15%\" }}\n >\n {lineItem.inventory.productCode\n ? lineItem.inventory.productCode\n : \"--\"}\n </TableCell>\n )}\n <TableCell\n style={{\n textAlign: \"left\",\n padding: \"3px\",\n width: `${showProductCodeColumn ? \"25%\" : \"35%\"}`, // Adjust dynamically\n }}\n >\n {lineItem.inventory.productName}\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", padding: \"3px\", width: \"10%\" }}\n >\n {lineItem.totalQuantityToPick}\n </TableCell>\n {showPCSColumn && (\n <TableCell\n style={{ textAlign: \"right\", padding: \"3px\", width: \"10%\" }}\n >\n {lineItem.inventory.pcs ? lineItem.inventory.pcs : \"--\"}\n </TableCell>\n )}\n {showFootageColumn && (\n <TableCell\n style={{ textAlign: \"right\", padding: \"3px\", width: \"10%\" }}\n >\n {lineItem.inventory.footage\n ? `${trimDecimal(\n lineItem.inventory.footage *\n lineItem.totalQuantityToPick\n ).toLocaleString()} ${lineItem.inventory.footageUOM}`\n : \"--\"}\n </TableCell>\n )}\n <TableCell\n style={{ textAlign: \"right\", padding: \"3px\", width: \"10%\" }}\n >\n {lineItem.inventory.poNumber}\n </TableCell>\n {inventoryCustomFields.map((field, index) => (\n <TableCell\n key={\"inv_cf_\" + index}\n style={{\n textAlign: \"center\",\n padding: \"3px\",\n width: `${100 / (inventoryCustomFields.length + 5)}%`, // Adjust dynamically\n }}\n >\n {parseCustomFieldValue(\n lineItem.inventory.customFields.find((cf) =>\n cf.startsWith(field.name)\n )\n )}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nconst TotalsBlock = ({ record, posPickList }) => {\n // PCS Totals and Flags\n let totalPCS = 0;\n let allMissingPCS = true;\n let somePCSNull = false;\n\n // MBF Totals and Flags\n let totalMBF = 0;\n let allMissingMBF = true;\n let someMBFNull = false;\n\n // SF Totals and Flags\n let totalSF = 0;\n let allMissingSF = true;\n let someSFNull = false;\n\n posPickList.forEach((lineItem) => {\n // PCS Calculation\n if (lineItem.inventory.pcs == null) {\n somePCSNull = true;\n } else {\n allMissingPCS = false;\n if (record.totalUnits === Unit.UNIT) {\n totalPCS += lineItem.inventory.pcs * lineItem.totalQuantityToPick;\n } else {\n totalPCS += lineItem.inventory.pcs;\n }\n }\n\n // Footage Calculations\n if (lineItem.inventory.footageUOM === Unit.MBF) {\n if (lineItem.inventory.footage == null) {\n someMBFNull = true;\n } else {\n allMissingMBF = false;\n totalMBF += lineItem.inventory.footage * lineItem.totalQuantityToPick;\n }\n } else if (lineItem.inventory.footageUOM === Unit.SF) {\n if (lineItem.inventory.footage == null) {\n someSFNull = true;\n } else {\n allMissingSF = false;\n totalSF += lineItem.inventory.footage * lineItem.totalQuantityToPick;\n }\n }\n });\n\n return (\n <div style={{ width: \"100%\" }}>\n <Divider />\n <Table key=\"outboundTotals\" style={{ width: \"100%\" }}>\n <TableBody>\n <TableRow key=\"totalUnits\">\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"66%\", padding: \"3px\" }}\n >\n Total {getUnitName(record.totalUnits)}\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"33%\", padding: \"3px\" }}\n >\n {record.totalQuantity}\n </TableCell>\n </TableRow>\n {!allMissingPCS && (\n <TableRow key=\"totalPCS\">\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"66%\", padding: \"3px\" }}\n >\n Total Pieces\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"33%\", padding: \"3px\" }}\n >\n {somePCSNull ? \"N/A\" : trimDecimal(totalPCS).toLocaleString()}\n </TableCell>\n </TableRow>\n )}\n {!allMissingMBF && (\n <TableRow key=\"totalMBF\">\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"66%\", padding: \"3px\" }}\n >\n Total MBF\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"33%\", padding: \"3px\" }}\n >\n {someMBFNull\n ? \"N/A\"\n : `${trimDecimal(totalMBF).toLocaleString()} MBF`}\n </TableCell>\n </TableRow>\n )}\n {!allMissingSF && (\n <TableRow key=\"totalSF\">\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"66%\", padding: \"3px\" }}\n >\n Total SF\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"33%\", padding: \"3px\" }}\n >\n {someSFNull\n ? \"N/A\"\n : `${trimDecimal(totalSF).toLocaleString()} SF`}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nexport const LumberPOSBody = ({ record, enclosePhotos, encloseDocs }) => {\n const posPickList = record.shipmentLineItems.items.map((lineItem) => {\n const loadType =\n lineItem.inventory?.reloadYardCommodityId || record.reloadYardCommodityId;\n\n let footage = null;\n let footageUOM = \"\";\n\n if (isLumberCommodity(loadType)) {\n footage = calculateMbf(lineItem.inventory);\n footageUOM = Unit.MBF;\n } else if (isPanelsCommodity(loadType)) {\n footage = calculateSqf(lineItem.inventory);\n footageUOM = Unit.SF;\n }\n\n return {\n ...lineItem,\n inventory: {\n ...lineItem.inventory,\n pcs:\n lineItem.inventory.pcs != null\n ? lineItem.inventory.pcs\n : lineItem.inventory.product?.pcs,\n footage,\n footageUOM,\n },\n };\n });\n\n return (\n <Paper elevation={0} style={{ maxWidth: \"900px\", padding: \"10px\" }}>\n <HeaderBlock />\n <InfoBlock record={record} />\n <LineItemsBlock record={record} posPickList={posPickList} />\n <TotalsBlock record={record} posPickList={posPickList} />\n <SealsBlock record={record} />\n <NotesBlock record={record} />\n {encloseDocs && <AttachmentsBlock record={record} />}\n {enclosePhotos && <PhotosBlock record={record} />}\n </Paper>\n );\n};\n","import React from \"react\";\nimport ReactDOMServer from \"react-dom/server\";\n\nimport {\n isLumberCommodity,\n isPanelsCommodity,\n} from \"../../../../utils/loadTypeUtils\";\n\nimport { OutboundPOSBody } from \"./OutboundPOSBody\";\nimport { LumberPOSBody } from \"./LumberPOSBody\";\n\nconst getPOSBody = (commodity) => {\n if (isLumberCommodity(commodity) || isPanelsCommodity(commodity)) {\n return LumberPOSBody;\n }\n return OutboundPOSBody;\n};\n\nexport const getOutboundPOSBody = (record, enclosePhotos, encloseDocs) => {\n const POSComponent = getPOSBody(record.reloadYardCommodityId);\n\n return ReactDOMServer.renderToString(\n <POSComponent\n record={record}\n enclosePhotos={enclosePhotos}\n encloseDocs={encloseDocs}\n />\n );\n};\n","import React, { useState } from \"react\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { differenceInDays } from \"date-fns\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { updateOutboundShipmentMini } from \"../../../graphql/outbound/custom-mutations\";\nimport {\n getInventorie,\n inventoryByStatusByAccountIdByProductByLot,\n} from \"../../../graphql/inventory/custom-queries\";\nimport { countOutboundShipments } from \"../../../graphql/outbound/custom-queries\";\nimport { getBOLCounter } from \"../../../graphql/reloadyard/custom-queries\";\nimport { updateReloadYardMini } from \"../../../graphql/reloadyard/custom-mutations\";\n\nimport {\n Grid,\n makeStyles,\n Paper,\n TextField as TextFieldMui,\n Tooltip,\n Typography,\n} from \"@material-ui/core\";\nimport { orange } from \"@material-ui/core/colors\";\nimport { Autocomplete } from \"@material-ui/lab\";\n\nimport {\n BooleanInput,\n Button,\n Confirm,\n Datagrid,\n FunctionField,\n IconButtonWithTooltip,\n ListContextProvider,\n maxValue,\n minValue,\n number,\n NumberField,\n NumberInput,\n required,\n TextInput,\n useList,\n} from \"react-admin\";\n\nimport {\n ArrowDownwardIcon,\n ArrowUpwardIcon,\n DeleteIcon,\n EditIcon,\n InfoOutlinedIcon,\n RemoveIcon,\n ExceptionIcon,\n} from \"../../../components/common\";\nimport { ProductLinkIcon } from \"../../../components/common/ProductLinkIcon\";\nimport {\n CarrierType,\n InboundState,\n InboundStatus,\n InventoryStatus,\n LocationType,\n LotType,\n MAX_INVENTORY_QUERY_LIMIT,\n NoteType,\n OutboundState,\n OutboundStatus,\n OutboundStatusLabels,\n ShipmentLineItemStatus,\n Unit,\n VALIDATION_MSG,\n} from \"../../../utils/constants\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n isBulkArea,\n isBulkLocation,\n isManagedLocation,\n} from \"../../../utils/locationUtils\";\nimport {\n convertUnits,\n isBulkCommodity,\n isWeightUnits,\n} from \"../../../utils/loadTypeUtils\";\nimport {\n createLambdaAppointment,\n deepRedirect,\n deleteLambdaAppointment,\n isEmptyAddress,\n isFullAddress,\n trimDecimal,\n splitEmails,\n updateLambdaAppointment,\n isShipmentUnits,\n} from \"../../../utils/utils\";\n\nimport { getOutboundPOSBody } from \"./POS/POSBody\";\n\nconst useStyles = makeStyles((theme) => ({\n actionButtons: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"end\",\n alignItems: \"flex-end\",\n },\n paper: {\n display: \"flex\",\n flexDirection: \"column\",\n padding: theme.spacing(1),\n paddingLeft: theme.spacing(8),\n },\n reorderButtons: {\n paddingRight: theme.spacing(1),\n },\n icons: {\n position: \"relative\",\n top: theme.spacing(0.5),\n marginLeft: theme.spacing(1),\n color: orange[600],\n },\n}));\n\nconst validateQuantity = (min, max) => [\n required(),\n number(),\n minValue(min),\n maxValue(max, \"Exceeds Available\"),\n];\n\nexport const formValidate = (form, notify) => {\n const formState = form.getState();\n if (formState?.invalid) notify(VALIDATION_MSG, \"warning\");\n return formState?.invalid !== true;\n};\n\nexport const validatePoNumberUnicity = async (formData, notify) => {\n const poNumber = formData.poNumber;\n const accountId = formData.accountId;\n if (!poNumber || !accountId) return;\n\n try {\n const defaultFilter = { accountId: { eq: accountId } };\n if (formData.id) defaultFilter.id = { ne: formData.id };\n const filter = { ...defaultFilter, poNumber: { eq: poNumber } };\n\n const response = await API.graphql(\n graphqlOperation(countOutboundShipments, {\n filter: filter,\n limit: 1,\n })\n );\n\n const isDuplicate = response?.data?.searchOutboundShipments?.total > 0;\n if (isDuplicate) {\n notify(\"Duplicate PO Number\", \"warning\", {\n autoHideDuration: 15000, // in milliseconds (15 seconds)\n });\n }\n } catch (error) {\n logError(\n \"outboundShipments:outboundUtils:validatePoNumberUnicity\",\n error,\n false\n );\n }\n};\n\nexport const validatePickupNumberUnicity = async (\n formData,\n account,\n notify\n) => {\n const pickupNumber = formData.pickupNumber;\n const accountId = formData.accountId;\n if (!pickupNumber || !accountId || account?.generatePickupNumber) return;\n\n try {\n const defaultFilter = { accountId: { eq: accountId } };\n if (formData.id) defaultFilter.id = { ne: formData.id };\n const filter = { ...defaultFilter, pickupNumber: { eq: pickupNumber } };\n\n const response = await API.graphql(\n graphqlOperation(countOutboundShipments, {\n filter: filter,\n limit: 1,\n })\n );\n\n const isDuplicate = response?.data?.searchOutboundShipments?.total > 0;\n if (isDuplicate) {\n notify(\"Duplicate Pickup Number\", \"warning\", {\n autoHideDuration: 15000, // in milliseconds (15 seconds)\n });\n }\n } catch (error) {\n logError(\n \"outboundShipments:outboundUtils:validatePickupNumberUnicity\",\n error,\n false\n );\n }\n};\n\nexport const validateOutboundUnicity = async (formData) => {\n const poNumber = formData.poNumber;\n const pickupNumber = formData.pickupNumber;\n const duplicateNumbers = [];\n\n if (poNumber || pickupNumber) {\n try {\n const defaultFilter = { accountId: { eq: formData.accountId } };\n if (formData.id) defaultFilter.id = { ne: formData.id };\n\n const poNumberQuery = poNumber\n ? API.graphql(\n graphqlOperation(countOutboundShipments, {\n filter: { ...defaultFilter, poNumber: { eq: poNumber } },\n limit: 1,\n })\n )\n : Promise.resolve(null);\n\n const pickupNumberQuery =\n formData.account.generatePickupNumber !== true && pickupNumber\n ? API.graphql(\n graphqlOperation(countOutboundShipments, {\n filter: {\n ...defaultFilter,\n pickupNumber: { eq: pickupNumber },\n },\n limit: 1,\n })\n )\n : Promise.resolve(null);\n\n const [poNumberResponse, pickupNumberResponse] = await Promise.all([\n poNumberQuery,\n pickupNumberQuery,\n ]);\n\n const poNumberOutbounds =\n poNumberResponse?.data?.searchOutboundShipments?.total || 0;\n const pickupNumberOutbounds =\n pickupNumberResponse?.data?.searchOutboundShipments?.total || 0;\n\n if (poNumberOutbounds > 0) duplicateNumbers.push(\"PO\");\n if (pickupNumberOutbounds > 0) duplicateNumbers.push(\"Pickup\");\n } catch (error) {\n logError(\"outboundShipments:outboundUtils:validateUnicity\", error, false);\n }\n }\n return duplicateNumbers;\n};\n\nexport const handleSendPOS = async (\n data,\n toEmail,\n ccEmail,\n enclosePhotos,\n encloseDocs,\n notify,\n refresh\n) => {\n try {\n debugger;\n const success = await emailPOS(\n data,\n toEmail,\n ccEmail,\n enclosePhotos,\n encloseDocs,\n notify\n );\n\n if (success) {\n const historyNote = {\n text: `POS sent to: ${toEmail}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.GENERIC,\n };\n\n const outboundHistoryToUpdate = {\n ...data,\n history: [...data.history, historyNote],\n };\n await updateOutboundClient(outboundHistoryToUpdate);\n notify(\"POS sent successfully\");\n refresh && refresh();\n }\n } catch (err) {\n logError(\n \"OutboundShipments:OutboundUtils:handleSendPOS\",\n err,\n notify,\n null\n );\n }\n};\n\nexport const statusRenderer = (record) => {\n debugger;\n return (\n <Typography>\n {OutboundStatusLabels[record.status]}\n {record.state === OutboundState.COMPLETED\n ? \", Inspected\"\n : record.state === OutboundState.REJECTED\n ? \", Rejected\"\n : record.status === OutboundStatus.LOADED && !record.state\n ? \", Pending Inspection\"\n : record.status === OutboundStatus.ADVICE_PENDING\n ? \"Pending Review\"\n : record.status === OutboundStatus.ADVICE_REJECTED\n ? \"Rejected\"\n : \"\"}\n </Typography>\n );\n};\n\nexport const copyInventoryData = (inventoryList) => {\n return inventoryList.map((inventory) => {\n // copy inventoryUnits from inventory to inventoryItems\n if (inventory.inventoryItems?.items.length > 0) {\n return {\n ...inventory,\n inventoryItems: {\n ...inventory.inventoryItems,\n items: inventory.inventoryItems.items.map((item) => ({\n ...item,\n inventoryId: inventory.id,\n inventory: {\n id: inventory.id,\n productCode: inventory.productCode,\n productName: inventory.productName,\n lotNumber: inventory.lotNumber,\n poNumber: inventory.poNumber,\n railCarNumber: inventory.railCarNumber,\n deliveryDateTime: inventory.deliveryDateTime,\n inventoryUnits: inventory.inventoryUnits,\n weight: inventory.weight,\n weightUnits: inventory.weightUnits,\n customFields: inventory.customFields,\n },\n })),\n },\n };\n }\n return inventory; // Return inventory unchanged if it doesn't have inventoryItems.items\n });\n};\n\nexport const getInventory = async (\n inventoryId,\n setAllInventories,\n setLoaded,\n notify\n) => {\n try {\n debugger;\n const result = await API.graphql(\n graphqlOperation(getInventorie, { id: inventoryId })\n );\n const inventoryData = copyInventoryData([result.data.getInventorie]);\n setAllInventories(inventoryData);\n setLoaded(true);\n } catch (error) {\n logError(\"outboundShipment:outboundUtils:getInventory\", error, notify);\n }\n};\n\nexport const getAllInventories = async (\n accountId,\n setAllInventories,\n setIsLoaded,\n notify\n) => {\n try {\n debugger;\n setIsLoaded(false);\n\n let inventoryData = [];\n let query = {\n reloadYardId: window.appUser.reloadYardId,\n statusAccountIdProductNameLotNumber: {\n beginsWith: {\n status: InventoryStatus.STORED,\n accountId: accountId,\n },\n },\n limit: MAX_INVENTORY_QUERY_LIMIT, // keep below 500 to prevent resultset truncation due to internal resultset size\n };\n\n let nextToken = true;\n while (nextToken) {\n const input = nextToken === true ? query : { nextToken, ...query };\n const result = await API.graphql(\n graphqlOperation(inventoryByStatusByAccountIdByProductByLot, input)\n );\n const inventoryList =\n result.data.inventoryByStatusByAccountIdByProductByLot.items;\n nextToken =\n result.data.inventoryByStatusByAccountIdByProductByLot.nextToken;\n inventoryData = inventoryData.concat(copyInventoryData(inventoryList));\n }\n\n // Filter inventory items by status for each inventory\n const filteredInventories = inventoryData.map((inventory) => ({\n ...inventory,\n inventoryItems: {\n ...inventory.inventoryItems,\n items: inventory.inventoryItems.items.filter(\n (item) =>\n item.status === InventoryStatus.UNLOADED ||\n item.status === InventoryStatus.STORED\n ),\n },\n }));\n\n setAllInventories(filteredInventories);\n } catch (error) {\n logError(\"outboundShipment:outboundUtils:getAllInventories\", error, notify);\n } finally {\n setIsLoaded(true);\n }\n};\n\nexport const ShipmentItemEditActionButtons = (props) => {\n const classes = useStyles();\n const { record } = props;\n\n return (\n <div className={classes.actionButtons}>\n <ReorderButtons {...props} classes={classes} />\n {record.status === ShipmentLineItemStatus.NEW ? (\n <RemoveInventoryButton {...props} />\n ) : (\n <EditShipmentLineItemButton {...props} />\n )}\n </div>\n );\n};\n\nexport const ShipmentItemCreateActionButtons = (props) => {\n const classes = useStyles();\n\n return (\n <div className={classes.actionButtons}>\n <ReorderButtons {...props} classes={classes} />\n <RemoveInventoryButton {...props} />\n </div>\n );\n};\n\nconst RemoveInventoryButton = ({\n record,\n inventories,\n setInventories,\n ...props\n}) => {\n const handleDelete = () => {\n const newInventories = inventories.items.filter(\n (itm) => itm.sortKey !== record.sortKey\n );\n setInventories(newInventories);\n };\n\n return (\n <IconButtonWithTooltip label=\"Delete\" size=\"small\" onClick={handleDelete}>\n <DeleteIcon />\n </IconButtonWithTooltip>\n );\n};\n\nconst EditShipmentLineItemButton = ({\n record,\n form,\n outbound,\n history,\n backPath,\n ...props\n}) => {\n const toPath = record ? \"/shipmentLineItems/\" + record.id : \"\";\n const [confirmOpen, setConfirmOpen] = useState(false);\n\n const handleConfirmEdit = (event) => {\n event.stopPropagation();\n const formState = form.getState();\n debugger;\n\n if (formState.dirty) {\n setConfirmOpen(true);\n } else\n deepRedirect(history, toPath, props.location.pathname, backPath, {\n outbound: outbound,\n });\n };\n\n const handleConfirmClose = () => setConfirmOpen(false);\n const handleConfirmRedirect = () =>\n deepRedirect(history, toPath, props.location.pathname, backPath, {\n outbound: outbound,\n });\n\n return (\n <>\n <Button label=\"Edit\" color=\"primary\" onClick={handleConfirmEdit}>\n <EditIcon />\n </Button>\n {confirmOpen && (\n <Confirm\n isOpen={confirmOpen}\n loading={false}\n title=\"Un-saved Data Confirmation\"\n content=\"You have un-saved changes. If you continue, all changes will be lost. Proceed?\"\n onConfirm={handleConfirmRedirect}\n onClose={handleConfirmClose}\n />\n )}\n </>\n );\n};\n\nconst ReorderButtons = ({\n record,\n inventories,\n setInventories,\n classes,\n ...props\n}) => {\n const index =\n record.sortKey >= 10001 ? record.sortKey - 10001 : record.sortKey;\n const max = inventories.items.length;\n\n const handleReorder = (sourceIndex, destinationIndex) => {\n debugger;\n const reorderedValue = [...inventories.items];\n const [removed] = reorderedValue.splice(sourceIndex, 1);\n reorderedValue.splice(destinationIndex, 0, removed);\n reorderedValue.forEach((item, index) => {\n if (item) item.sortKey = index + 10001;\n });\n setInventories(reorderedValue);\n };\n\n return (\n <div className={classes.reorderButtons}>\n <IconButtonWithTooltip\n label=\"ra.action.move_up\"\n size=\"small\"\n disabled={index <= 0}\n onClick={() => handleReorder(index, index - 1)}\n >\n <ArrowUpwardIcon />\n </IconButtonWithTooltip>\n <IconButtonWithTooltip\n label=\"ra.action.move_down\"\n size=\"small\"\n disabled={max == null || index >= max - 1}\n onClick={() => handleReorder(index, index + 1)}\n >\n <ArrowDownwardIcon />\n </IconButtonWithTooltip>\n </div>\n );\n};\n\nconst RemoveItemButton = ({\n rowIndex,\n record,\n inventories,\n setInventories,\n ...props\n}) => {\n const handleLocationRemove = (event) => {\n const newInventories = [];\n\n inventories.items.forEach((inv) => {\n if (inv.inventoryId === record.inventoryId) {\n const newInventoryItems = inv.inventoryItems.items.filter(\n (_, locIndex) => locIndex !== rowIndex\n );\n const newTotal = newInventoryItems.reduce(\n (total, loc) => total + loc.quantityToPick,\n 0\n );\n if (newTotal !== 0)\n newInventories.push({\n ...inv,\n totalQuantityToPick: newTotal,\n inventoryItems: { items: newInventoryItems },\n });\n } else {\n newInventories.push(inv);\n }\n });\n setInventories(newInventories);\n };\n\n return (\n <Button label=\"Remove\" color=\"default\" onClick={handleLocationRemove}>\n <RemoveIcon />\n </Button>\n );\n};\n\nexport const InventoryItemsEditGridInput = ({\n record,\n inventories,\n setInventories,\n ...props\n}) => {\n return record.status === ShipmentLineItemStatus.NEW ? (\n <InventoryItemsArrayInput\n {...props}\n record={record}\n inventories={inventories}\n setInventories={setInventories}\n />\n ) : (\n <InventoryItemsDataGrid {...props} record={record} />\n );\n};\n\nexport const getQuantityToPickLabel = (shipmentLineItem) => {\n if (\n isBulkCommodity(shipmentLineItem.inventory.reloadYardCommodityId) &&\n shipmentLineItem.status !== ShipmentLineItemStatus.SHIPPED\n ) {\n return \"Est. Qty To Pick\";\n }\n return \"Qty. To Pick\";\n};\n\nexport const InventoryItemsArrayInput = ({\n record,\n inventories,\n setInventories,\n ...props\n}) => {\n const classes = useStyles();\n const inventoryIdx = inventories.items.findIndex(\n (itm) => itm.id === record.id\n );\n\n const handleQuantityChange = (event) => {\n debugger;\n const value = event.target.value;\n const locationIndex = parseInt(\n event.target.id.match(/\\[(\\d+)\\](?=.*\\[(\\d+)\\])/)[2]\n );\n const newInventories = inventories.items.map((inv) => {\n if (inv.inventoryId === record.inventoryId) {\n const newInventoryItems = [...inv.inventoryItems.items];\n newInventoryItems[locationIndex].quantityToPick = value\n ? parseFloat(value)\n : null;\n const newTotal = newInventoryItems.reduce((total, loc) => {\n return total + (Number(loc.quantityToPick) || 0);\n }, 0);\n\n return {\n ...inv,\n totalQuantityToPick: newTotal,\n inventoryItems: { items: newInventoryItems },\n };\n }\n return inv;\n });\n setInventories(newInventories);\n };\n\n const getSource = (idx, source) =>\n `shipmentLineItems.items[${inventoryIdx}].inventoryItems.items[${idx}].${source}`;\n\n const calcMaxQtyOutbound = (item) => {\n return (\n item.inventoryItem.quantityOnHand -\n Number(item.inventoryItem.quantityCommitted)\n );\n };\n\n return (\n <Paper variant=\"outlined\" className={classes.paper}>\n {record.inventoryItems.items.map((item, idx) => (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={3}>\n <TextInput\n source={getSource(idx, \"inventoryItem.locationFullName\")}\n record={item}\n label=\"Location\"\n variant=\"outlined\"\n fullWidth\n disabled\n helperText={false}\n />\n </Grid>\n <Grid item xs={3}>\n <NumberInput\n source={getSource(idx, \"inventoryItem.quantityOnHand\")}\n record={item}\n label=\"Qty. On Hand\"\n variant=\"outlined\"\n fullWidth\n disabled\n helperText={false}\n />\n </Grid>\n <Grid item xs={3}>\n <NumberInput\n source={getSource(idx, \"quantityToPick\")}\n record={item}\n label={getQuantityToPickLabel(record)}\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n max={calcMaxQtyOutbound(item)}\n onChange={handleQuantityChange}\n validate={validateQuantity(0, calcMaxQtyOutbound(item))}\n helperText={false}\n />\n </Grid>\n <Grid item xs={2}>\n <RemoveItemButton\n record={record}\n rowIndex={idx}\n inventories={inventories}\n setInventories={setInventories}\n />\n </Grid>\n </Grid>\n ))}\n </Paper>\n );\n};\n\nexport const InventoryItemsDataGrid = ({ record, ...props }) => {\n const classes = useStyles();\n const defaultPerPage = 10;\n const defaultSort = { field: \"locationFullName\", order: \"ASC\" };\n const [inventoryItems] = useState(\n record?.inventoryItems?.items ? record.inventoryItems.items : []\n );\n\n const listContext = useList({\n ...props,\n data: inventoryItems,\n ids: inventoryItems.map(({ id }) => id),\n loaded: true,\n sort: defaultSort,\n perPage: defaultPerPage,\n basePath: \"/inventoryItems\",\n resource: \"inventoryItems\",\n });\n\n return (\n <Paper variant=\"outlined\" className={classes.paper}>\n <ListContextProvider value={listContext}>\n <Datagrid rowClick={false} hasBulkActions={false}>\n <FunctionField\n source=\"inventoryItem.locationFullName\"\n label=\"Location\"\n render={(record) => (\n <>\n {record?.inventoryItem?.locationFullName}\n {(record?.hasException || record?.barcodeException) && (\n <ExceptionIcon fontSize=\"small\" className={classes.icons} />\n )}\n </>\n )}\n />\n ,\n <NumberField\n source=\"inventoryItem.quantityOnHand\"\n label=\"Qty. On Hand\"\n />\n ,\n <NumberField\n source=\"inventoryItem.quantityCommitted\"\n label=\"Qty. Committed\"\n />\n ,\n <NumberField source=\"quantityToPick\" label=\"Qty. To Pick\" />,\n </Datagrid>\n </ListContextProvider>\n </Paper>\n );\n};\n\nexport const validateBillQty = (value, allValues) => {\n // return an object just like the other validators\n if (allValues?.billUnits && (value === undefined || value === null)) {\n return { message: `Required`, isRequired: true };\n } else if (allValues?.billUnits && value) {\n if (isNaN(Number(value))) return \"Must be a number\";\n if (value < 0) return \"Must be 0 or greater.\";\n }\n return undefined;\n};\nexport const isBillQtyRequired = (formData) =>\n validateBillQty(null, formData) ? true : false;\n\nexport const calcBillingQuantity = (formData, setCalcError) => {\n let billQty = 0;\n let error = null;\n setCalcError && setCalcError(null);\n debugger;\n\n try {\n if (formData.totalUnits && formData.billUnits) {\n if (formData.billUnits === Unit.CAR || formData.billUnits === Unit.TL) {\n return formData.billQuantity;\n } else if (formData.shipmentLineItems?.items?.length > 0) {\n formData.shipmentLineItems.items.forEach((item) => {\n const product = item.inventory?.product;\n const shippedQty = item.totalQuantityToPick\n ? item.totalQuantityToPick\n : 0;\n const unitValue = convertUnits(\n shippedQty,\n formData.totalUnits,\n formData.billUnits,\n product\n );\n billQty += unitValue.value;\n if (!error && unitValue.error) {\n if (product) error = \"No conversion for \" + formData.billUnits;\n else error = \"Product missing entry for \" + formData.billUnits;\n setCalcError && setCalcError(error);\n }\n });\n }\n } else return null;\n\n if (error) return null;\n return billQty >= 0 ? trimDecimal(billQty) : formData.billQuantity;\n } catch (err) {\n logError(\"outboundUtils:calcBillingQuantity:\", err, false);\n return null;\n }\n};\n\nexport const calcTotalQuantity = (formData) => {\n const pickList = formData.shipmentLineItems?.items;\n let total = 0;\n if (pickList)\n pickList.forEach(\n (item) =>\n (total += item?.totalQuantityToPick ? item.totalQuantityToPick : 0)\n );\n\n return total;\n};\n\nexport const calcQtyAvailable = (scopedFormData) => {\n if (!scopedFormData.inventory) return 0;\n const qtyAvail =\n scopedFormData.inventory && scopedFormData.quantityCommitted\n ? scopedFormData.inventory.quantityOnHand -\n scopedFormData.quantityCommitted\n : scopedFormData.inventory.quantityOnHand -\n scopedFormData.inventory.quantityCommitted;\n return qtyAvail;\n};\n\nconst getWeightUnits = (formData, setWeightError) => {\n const pickList = formData.shipmentLineItems?.items;\n setWeightError && setWeightError(null);\n let error = false;\n let hasBlanks = false;\n let weightUnits = null;\n\n if (pickList)\n pickList.forEach((item) => {\n if (!item?.inventory?.weightUnits || !item?.inventory?.weight)\n hasBlanks = true;\n else if (!weightUnits) weightUnits = item.inventory.weightUnits;\n else if (weightUnits !== item.inventory.weightUnits) error = true;\n });\n\n if (error) {\n setWeightError && setWeightError(\"Mixed weight UOM in inventories.\");\n return null;\n }\n if (weightUnits && hasBlanks) {\n setWeightError && setWeightError(\"Missing weight in inventories.\");\n return null;\n }\n return weightUnits;\n};\n\nconst getInventoryWeightUnits = (lineItems) => {\n if (lineItems?.length > 0) {\n const unitsSet = new Set(\n lineItems.map((itm) => itm.inventory?.weightUnits)\n );\n return unitsSet.size === 1 ? unitsSet.values().next().value : null;\n }\n return null;\n};\n\nexport const calcNetWeight = (formData, setWeightError, weightUnits) => {\n let totalWeight = 0;\n let error = null;\n let hasWeights = true;\n const inventoryWeightUnits = getInventoryWeightUnits(\n formData.shipmentLineItems?.items\n );\n const toUnits = weightUnits || formData.weightUnits || inventoryWeightUnits;\n const convert =\n toUnits &&\n (formData.weightUnits\n ? toUnits !== formData.weightUnits\n : toUnits !== inventoryWeightUnits);\n\n setWeightError && setWeightError(null);\n\n try {\n if (toUnits && formData.shipmentLineItems?.items?.length > 0) {\n formData.shipmentLineItems.items.forEach((item) => {\n let weight = 0;\n if (convert) {\n const product = item.inventory?.product;\n const unitValue = convertUnits(\n item.totalQuantityToPick,\n formData.totalUnits,\n toUnits,\n product\n );\n weight = unitValue.value;\n if (!error && unitValue.error) {\n if (product) error = \"No conversion for \" + weightUnits;\n else error = \"Product missing entry for \" + weightUnits;\n }\n } else if (item.inventory?.weight) {\n weight = item.inventory?.weight;\n } else if (item.inventory?.product) {\n weight = item.inventory?.product[toUnits.toLowerCase()];\n }\n hasWeights = hasWeights && weight ? true : false;\n if (hasWeights) {\n totalWeight +=\n weight * (item.totalQuantityToPick ? item.totalQuantityToPick : 0);\n } else if (!error) {\n error = \"Missing weight in inventories.\";\n }\n });\n }\n\n if (error) {\n setWeightError && setWeightError(error);\n return null;\n } else if (hasWeights)\n return totalWeight >= 0 ? trimDecimal(totalWeight) : formData.netWeight;\n else return formData.netWeight;\n } catch (err) {\n logError(\"outboundUtils:calcNetWeight:\", err, false);\n return \"\";\n }\n};\n\nexport const getMustTarpDefaultValue = (account) => {\n if (account?.mustTarp === false) return false;\n else if (account?.mustTarp === true) return true;\n return undefined;\n};\n\nexport const emailPOS = async (\n record,\n toEmail,\n ccEmail,\n enclosePhotos,\n encloseDocs,\n notify\n) => {\n debugger;\n if (!toEmail) return false;\n\n const htmlDoc = getOutboundPOSBody(record, enclosePhotos, encloseDocs);\n\n const emailBody = {\n from: \"no_reply transloads.co <pos@transloads.co>\",\n to: splitEmails(toEmail),\n cc: splitEmails(ccEmail),\n // replyTo: getReplyToAddress(),\n subject: `Order #: ${record.poNumber} shipped from ${window.appUser.reloadYard.name}`,\n template: \"emailTemplateWide.html\",\n htmlContent: htmlDoc,\n attachPDF: true,\n };\n\n try {\n const response = await API.post(\"transREST\", \"/sendEmail\", {\n body: emailBody,\n });\n\n if (response.status !== \"success\") {\n notify(\"Error occurred while sending email.\", \"error\");\n logError(\n \"outboundShipment:outboundUtils:emailPOS:poNumber\" + record.poNumber,\n response,\n false\n );\n return false; // Indicate failure\n }\n return true; // indicates success\n } catch (error) {\n logError(\"outboundShipment:outboundUtils:emailPOS\", error, notify);\n return false; // Indicate failure\n }\n};\n\nexport const getInfoBubble = (formData, scopedFormData) => {\n const infoBubble = [];\n const shippedQty = scopedFormData?.totalQuantityToPick || 1;\n const product = scopedFormData?.inventory?.product;\n\n if (product) {\n Object.keys(Unit).forEach((key) => {\n if (key !== formData.totalUnits) {\n const billRate = convertUnits(\n shippedQty,\n formData.totalUnits,\n key,\n product\n );\n if (billRate) infoBubble.push({ unit: key, value: billRate.value });\n }\n });\n\n if (infoBubble.length > 0) {\n return (\n <Tooltip\n title={\n <>\n <Typography>\n Product Code: {scopedFormData.inventory.productCode}\n </Typography>\n <Typography>\n {shippedQty} {formData.totalUnits} =\n </Typography>\n {infoBubble.map((itm) =>\n itm.value ? (\n <Typography>\n  {trimDecimal(itm.value)} {itm.unit}\n </Typography>\n ) : null\n )}\n </>\n }\n placement=\"right\"\n >\n <InfoOutlinedIcon fontSize=\"small\" />\n </Tooltip>\n );\n } else return null;\n } else return <ProductLinkIcon />;\n};\n\nexport const setupAccountDetails = (\n fromAccount,\n billToAccount,\n transferToAcct,\n form,\n setBillToAccount\n) => {\n // fromAccount Internal External transferToAcct BillToAccount billUnits\n // -------------------------------------------------------------------------------------------------\n // Corporate Y Acme Corporate\n // Corporate ---\n // Corporate Acme Acme\n // -------------------------------------------------------------------------------------------------\n // Normal Y Acme Normal\n // Normal Y Corporate Normal\n // Normal --- ---- ----- ---- Normal\n // --------------------------------------------------------------------------------------------------\n\n let sourceAccount = null;\n\n if (fromAccount.corporateAccount) {\n // set fromAccount until billToAccount is selected\n // sourceAccount = transferToAcct ? fromAccount : billToAccount || fromAccount;\n sourceAccount = transferToAcct ? fromAccount : billToAccount;\n } else {\n sourceAccount = fromAccount;\n }\n\n if (setBillToAccount) {\n setBillToAccount(sourceAccount);\n }\n\n if (billToAccount) {\n form.change(\"billToAccountId\", billToAccount ? billToAccount.id : \"\");\n }\n\n if (isShipmentUnits(sourceAccount?.outboundBillingUnits)) {\n form.change(\"billQuantity\", 1);\n }\n form.change(\"billUnits\", sourceAccount?.outboundBillingUnits);\n form.change(\"instructions\", sourceAccount?.outboundInstructions);\n form.change(\"skipSignature\", sourceAccount?.outboundSkipSignature);\n};\n\nexport const setQtyAvailable = (event, form, getSource, scopedFormData) => {\n const value = Number(event.target.value);\n const initQtyCommitted = scopedFormData.inventory.quantityCommitted;\n const initQtyOutbound = form.getFieldState(\n getSource(\"totalQuantityToPick\")\n )?.initial;\n let qtyComm = 0;\n debugger;\n\n if (\n typeof initQtyOutbound === \"undefined\" ||\n scopedFormData.status === ShipmentLineItemStatus.NEW\n )\n qtyComm = initQtyCommitted + value;\n else qtyComm = trimDecimal(initQtyCommitted - initQtyOutbound + value);\n\n form.change(getSource(\"quantityCommitted\"), qtyComm);\n form.change(\n getSource(\"quantityAvailable\"),\n trimDecimal(scopedFormData.inventory.quantityOnHand - qtyComm)\n );\n};\n\nexport const handleOutboundQty = (\n event,\n form,\n getSource,\n scopedFormData,\n setCalcError,\n setWeightError\n) => {\n setQtyAvailable(event, form, getSource, scopedFormData);\n handlePickListQty(form, setCalcError);\n handlePickListWeight(form, setWeightError);\n};\n\nexport const handlePickListQty = (form, setCalcError) => {\n const formState = form.getState();\n const formData = formState.values;\n\n const totalQty = calcTotalQuantity(formData);\n const billQty = calcBillingQuantity(formData, setCalcError);\n form.change(\"totalQuantity\", totalQty);\n form.change(\"billQuantity\", billQty);\n};\n\nexport const handlePickListWeight = (form, setWeightError) => {\n const formState = form.getState();\n const formData = formState.values;\n debugger;\n\n const weightUnits = getWeightUnits(formData, setWeightError);\n let totalWeight = null;\n if (weightUnits) {\n totalWeight = calcNetWeight(formData, setWeightError, weightUnits);\n form.change(\"weightUnits\", weightUnits);\n form.change(\"netWeight\", totalWeight);\n } else {\n form.change(\"weightUnits\", null);\n form.change(\"netWeight\", null);\n }\n};\n\nexport const handleUnitChange = (form, setCalcError) => {\n const formState = form.getState();\n const billQty = calcBillingQuantity(formState.values, setCalcError);\n form.change(\"billQuantity\", billQty);\n};\n\nexport const hasAllProducts = (form, outbound) => {\n let retVal = true;\n\n if (outbound?.shipmentLineItems?.items) {\n retVal = !outbound.shipmentLineItems.items.some(\n (item) => !item.inventory.product\n );\n } else {\n const fieldState = form.getFieldState(\"shipmentLineItems.items\");\n const lineItems = fieldState?.value;\n retVal = !lineItems?.some((item) => !item.inventory?.product);\n }\n\n return retVal;\n};\n\nexport const updateLambdaInventory = (\n inventory,\n pickListItem,\n isAdvance,\n updateDateTime,\n quantityToPickOrig\n) => {\n debugger;\n const toUpdateInventory = { ...inventory };\n\n if (isAdvance && pickListItem.status === ShipmentLineItemStatus.SHIPPED) {\n // record advanced to SHIPPED\n const qtyCommitedOrig = quantityToPickOrig\n ? quantityToPickOrig\n : pickListItem.totalQuantityToPick;\n toUpdateInventory.quantityOnHand = trimDecimal(\n toUpdateInventory.quantityOnHand - qtyCommitedOrig\n );\n toUpdateInventory.quantityCommitted = trimDecimal(\n toUpdateInventory.quantityCommitted - qtyCommitedOrig\n );\n const note = {\n type: NoteType.SHIPMENT,\n date: updateDateTime,\n by: window.appUser?.fullName,\n text: `Shipped Qty. of ${pickListItem.totalQuantityToPick}`,\n };\n toUpdateInventory.history = toUpdateInventory.history\n ? [...toUpdateInventory.history, note]\n : [note];\n }\n\n if (!isBulkArea(toUpdateInventory.areaId)) {\n // aggregated inventories are managed in myYard > Locations\n toUpdateInventory.status =\n toUpdateInventory.quantityOnHand <= 0\n ? InventoryStatus.SHIPPED\n : toUpdateInventory.status;\n }\n if (toUpdateInventory.status === InventoryStatus.SHIPPED) {\n toUpdateInventory.lastShipDateTime = updateDateTime;\n toUpdateInventory.turnDays = differenceInDays(\n new Date(updateDateTime),\n new Date(toUpdateInventory.deliveryDateTime)\n );\n }\n\n toUpdateInventory.updatedAt = updateDateTime;\n\n // toUpdateInventory[\"status#lotNumber\"] = `${toUpdateInventory.status}#${toUpdateInventory.lotNumber}`;\n // toUpdateInventory[\"status#accountName#productName#lotNumber\"] = `${toUpdateInventory.status}#${toUpdateInventory.accountName}#${toUpdateInventory.productName}#${toUpdateInventory.lotNumber}`;\n // toUpdateInventory[\"status#accountId#productName#lotNumber\"] = `${toUpdateInventory.status}#${toUpdateInventory.accountId}#${toUpdateInventory.productName}#${toUpdateInventory.lotNumber}`;\n\n delete toUpdateInventory.account;\n delete toUpdateInventory.location;\n delete toUpdateInventory.inboundShipment;\n delete toUpdateInventory.inventoryItems;\n delete toUpdateInventory.product;\n delete toUpdateInventory.reloadYardCommodity;\n delete toUpdateInventory.shipmentLineItems;\n\n return toUpdateInventory;\n};\n\nexport const createLambdaShipmentLineItem = (\n outbound,\n lineItem,\n updateDateTime,\n isTransfer\n) => {\n const shipmentLineItemInput = {\n id: uuidv4(), // temporary id from InventorySearchDialog.handleAdd overwritten before save.\n __typename: \"ShipmentLineItem\",\n createdAt: updateDateTime,\n updatedAt: updateDateTime,\n active: outbound.active,\n owner: outbound.owner,\n groups: outbound.groups,\n lotNumber: lineItem.lotNumber,\n poNumber: outbound.poNumber,\n totalQuantityToPick: lineItem.totalQuantityToPick,\n outboundShipmentId: outbound.id,\n reloadYardId: outbound.reloadYardId,\n inventoryId: lineItem.inventoryId,\n accountId: outbound.accountId,\n history: isTransfer\n ? [\n {\n type: NoteType.INVENTORY,\n date: updateDateTime,\n by: window.appUser?.fullName,\n text: `Transfer of ${lineItem.totalQuantityToPick} ${lineItem.inventory.inventoryUnits} from ${outbound.accountName} to ${outbound.transferToAccountName}`,\n },\n ]\n : [\n {\n type: NoteType.INVENTORY,\n date: updateDateTime,\n by: window.appUser?.fullName,\n text: `Committed Qty. of ${lineItem.totalQuantityToPick} ${lineItem.inventory.inventoryUnits}`,\n },\n ],\n sortKey: lineItem.sortKey,\n // sortKey: index + 10001,\n };\n\n if (\n outbound.status === OutboundStatus.PENDING ||\n outbound.status.startsWith(OutboundStatus.ADVICE_ALL)\n )\n shipmentLineItemInput.status = ShipmentLineItemStatus.PENDING;\n else if (outbound.status === OutboundStatus.ARRIVED)\n shipmentLineItemInput.status = ShipmentLineItemStatus.PENDING;\n else if (outbound.status === OutboundStatus.LOADED)\n shipmentLineItemInput.status = ShipmentLineItemStatus.LOADED;\n else if (outbound.status === OutboundStatus.RELEASED)\n shipmentLineItemInput.status = ShipmentLineItemStatus.SHIPPED;\n\n return shipmentLineItemInput;\n};\n\nconst updateLambdaShipmentLineItem = (outbound, lineItem, updateDateTime) => {\n const toUpdateLineItem = {\n id: lineItem.id,\n history: lineItem.history,\n poNumber: outbound.poNumber,\n inventoryId: lineItem.inventoryId,\n totalQuantityToPick: lineItem.totalQuantityToPick,\n sortKey: lineItem.sortKey,\n // sortKey: index + 10001,\n status: lineItem.status,\n updatedAt: updateDateTime,\n };\n\n if (outbound.status === OutboundStatus.PENDING)\n toUpdateLineItem.status = ShipmentLineItemStatus.PENDING;\n else if (outbound.status === OutboundStatus.ARRIVED)\n toUpdateLineItem.status = ShipmentLineItemStatus.PENDING;\n else if (outbound.status === OutboundStatus.LOADED)\n toUpdateLineItem.status = ShipmentLineItemStatus.LOADED;\n else if (outbound.status === OutboundStatus.RELEASED)\n toUpdateLineItem.status = ShipmentLineItemStatus.SHIPPED;\n\n return toUpdateLineItem;\n};\n\nexport const createLambdaShipmentLineItemInventoryItem = (\n shipmentLineItem,\n inventoryItem,\n updateDateTime\n) => {\n const inventoryItemInput = {\n id: uuidv4(),\n __typename: \"ShipmentLineItemInventoryItem\",\n createdAt: updateDateTime,\n updatedAt: updateDateTime,\n owner: shipmentLineItem.owner,\n groups: shipmentLineItem.groups,\n reloadYardId: shipmentLineItem.reloadYardId,\n outboundShipmentId: shipmentLineItem.outboundShipmentId,\n shipmentLineItemId: shipmentLineItem.id,\n inventoryId: shipmentLineItem.inventoryId,\n inventoryItemId: inventoryItem.inventoryItemId,\n quantityToPick: inventoryItem.quantityToPick,\n status: shipmentLineItem.status,\n };\n\n return inventoryItemInput;\n};\n\nexport const updateLambdaShipmentLineItemInventoryItem = (\n shipmentLineItem,\n shipmentLineItemInventoryItem,\n updateDateTime\n) => {\n shipmentLineItemInventoryItem.status = shipmentLineItem.status;\n\n const shipmentLineItemInventoryItemInput = {\n ...shipmentLineItemInventoryItem,\n updatedAt: updateDateTime,\n status: shipmentLineItem.status,\n };\n\n delete shipmentLineItemInventoryItemInput.groups;\n delete shipmentLineItemInventoryItemInput.inventoryItem;\n\n return shipmentLineItemInventoryItemInput;\n};\n\nexport const createLambdaInventoryItem = (\n outbound,\n lineIteminvItem,\n inventory,\n updateDateTime\n) => {\n const inventoryItemInput = {\n ...lineIteminvItem.inventoryItem,\n id: uuidv4(),\n __typename: \"InventoryItem\",\n groups: inventory.groups,\n createdAt: updateDateTime,\n updatedAt: updateDateTime,\n quantityOnHand: lineIteminvItem.quantityToPick,\n quantityCommitted: 0,\n status: InventoryStatus.STORED,\n inboundShipmentId: inventory.inboundShipmentId,\n inventoryId: inventory.id,\n reloadYardId: outbound.reloadYardId,\n history: [\n {\n type: NoteType.INVENTORY,\n date: updateDateTime,\n by: window.appUser?.fullName,\n text: `Transfer of ${lineIteminvItem.quantityToPick} ${inventory.inventoryUnits} from ${outbound.accountName} to ${outbound.transferToAccountName}`,\n },\n ],\n };\n\n delete inventoryItemInput.location;\n\n return inventoryItemInput;\n};\n\nexport const updateLambdaInventoryItem = (\n outbound,\n lineIteminvItem,\n updateMode,\n updateDateTime,\n quantityToPickOrig\n) => {\n const toUpdateInventoryItem = {\n ...lineIteminvItem.inventoryItem,\n updatedAt: updateDateTime,\n };\n debugger;\n\n if (updateMode === \"create\") {\n // InventoryItme adde4d to new shipmentLineItem, lineIteminvItem\n toUpdateInventoryItem.quantityCommitted = trimDecimal(\n toUpdateInventoryItem.quantityCommitted + lineIteminvItem.quantityToPick\n );\n } else if (updateMode === \"transfer\") {\n const historyNote = {\n type: NoteType.INVENTORY,\n date: updateDateTime,\n by: window.appUser?.fullName,\n text: `Transfer of ${lineIteminvItem.quantityToPick} ${lineIteminvItem.inventory?.inventoryUnits} from ${outbound.accountName} to ${outbound.transferToAccountName}`,\n };\n toUpdateInventoryItem.quantityOnHand = trimDecimal(\n toUpdateInventoryItem.quantityOnHand - lineIteminvItem.quantityToPick\n );\n if (!isBulkLocation(toUpdateInventoryItem.location)) {\n // aggregated inventories are managed in myYard > Locations\n toUpdateInventoryItem.status =\n toUpdateInventoryItem.quantityOnHand <= 0\n ? InventoryStatus.SHIPPED\n : toUpdateInventoryItem.status;\n }\n toUpdateInventoryItem.history = [\n ...toUpdateInventoryItem.history,\n historyNote,\n ];\n } else if (\n updateMode === \"advance\" &&\n lineIteminvItem.status === ShipmentLineItemStatus.SHIPPED\n ) {\n toUpdateInventoryItem.quantityOnHand = trimDecimal(\n toUpdateInventoryItem.quantityOnHand - lineIteminvItem.quantityToPick\n );\n const qtyCommitedOrig = quantityToPickOrig\n ? quantityToPickOrig\n : lineIteminvItem.quantityToPick;\n toUpdateInventoryItem.quantityCommitted = trimDecimal(\n toUpdateInventoryItem.quantityCommitted - qtyCommitedOrig\n );\n if (!isBulkLocation(toUpdateInventoryItem.location)) {\n // aggregated inventories are managed in myYard > Locations\n toUpdateInventoryItem.status =\n toUpdateInventoryItem.quantityOnHand <= 0\n ? InventoryStatus.SHIPPED\n : toUpdateInventoryItem.status;\n }\n } // no need to handle rollback becuase quantityOnHand/quantityCommitted not changed until RELEASED\n\n delete toUpdateInventoryItem.area;\n delete toUpdateInventoryItem.groups;\n delete toUpdateInventoryItem.inventory;\n delete toUpdateInventoryItem.location;\n delete toUpdateInventoryItem.zone;\n return toUpdateInventoryItem;\n};\n\nconst resetLambdaCapacityUsed = (\n location,\n shipmentLineItem,\n lineIteminvItem,\n updateDateTime\n) => {\n const inventory = shipmentLineItem.inventory;\n const inventoryItem = lineIteminvItem.inventoryItem;\n const previousStatus = shipmentLineItem.status;\n const newStatus = inventoryItem.status;\n const toUpdateLocation = { ...location, updatedAt: updateDateTime };\n debugger;\n\n if (\n newStatus === InventoryStatus.STORED &&\n (previousStatus === ShipmentLineItemStatus.LOADED ||\n previousStatus === ShipmentLineItemStatus.VERIFIED)\n ) {\n // on rollback if inventoryItem is UNLOADED / STORED update capacityUsed\n resetCapacityUsed(inventory, lineIteminvItem, toUpdateLocation);\n }\n\n return toUpdateLocation;\n};\n\nconst resetCapacityUsed = (inventory, lineIteminvItem, location) => {\n // on rollback update the passed in location object\n const inventoryLoadType =\n inventory.reloadYardCommodity.commodity.locationLoadType;\n const locationLoadType = location.locationLoad[inventoryLoadType];\n const isOtherLoadType = location.locationLoad?.other.selected;\n debugger;\n\n if (location.type === LocationType.BULK) {\n location.capacityUsed =\n location.capacityUsed + lineIteminvItem.quantityToPick;\n // BULK productId reset done in LOCATIONS\n } else if (location.type === LocationType.STRUCTURED && !isOtherLoadType) {\n location.capacityUsed = location.capacityUsed + locationLoadType.capacity;\n if (!location.productId && inventory.productId)\n location.productId = inventory.productId;\n }\n};\n\nexport const createLambdaInboundTransfer = (\n outbound,\n toAccount,\n lotTypes,\n lotNumbers,\n yardCommodities,\n areaId,\n zoneId,\n updateDateTime\n) => {\n const inboundCreateInput = {\n id: uuidv4(),\n active: \"true\",\n groups: outbound.groups,\n owner: outbound.owner,\n status: InboundStatus.RELEASED,\n state: InboundState.COMPLETED,\n createdAt: updateDateTime,\n updatedAt: updateDateTime,\n accountName: outbound.transferToAccountName,\n accountId: toAccount.id,\n shipFrom: outbound.accountName,\n poNumber: outbound.poNumber,\n lotType: lotTypes.size === 1 ? [...lotTypes][0] : LotType.CARLOT,\n lotNumber: lotNumbers.size === 1 ? [...lotNumbers][0] : \"TRANSFER\",\n reloadYardCommodityId: [...yardCommodities][0],\n carrierType: CarrierType.TRUCK,\n originCarrier: \"TRANSFER\",\n railCarNumber: \"TRANSFER\",\n createDateTime: updateDateTime,\n scheduledDateTime: updateDateTime,\n notifyDateTime: updateDateTime,\n placedDateTime: updateDateTime,\n releaseDateTime: updateDateTime,\n totalQuantity: outbound.totalQuantity,\n totalUnits: outbound.totalUnits,\n // billQuantity: outbound.billQuantity, // Only bill on outbound\n // billUnits: outbound.billUnits,\n reloadYardId: outbound.reloadYardId,\n areaId: areaId,\n zoneId: zoneId,\n history: outbound.history,\n };\n if (outbound.photos) inboundCreateInput.photos = outbound.photos;\n if (outbound.attachments)\n inboundCreateInput.attachments = outbound.attachments;\n\n return inboundCreateInput;\n};\n\nexport const createLambdaInventoryTransfer = (\n outbound,\n inbound,\n lineItem,\n index,\n updateDateTime\n) => {\n const historyNote = {\n type: NoteType.INVENTORY,\n date: updateDateTime,\n by: window.appUser?.fullName,\n text: `Transfer of ${lineItem.totalQuantityToPick} ${lineItem.inventory.inventoryUnits} from ${outbound.accountName} to ${inbound.accountName}`,\n };\n\n const createInventoryInput = {\n ...lineItem.inventory,\n id: uuidv4(),\n __typename: \"Inventory\",\n owner: outbound.owner,\n createdAt: updateDateTime,\n updatedAt: updateDateTime,\n // \"status#lotNumber\": `${item.inventory.status}#${item.inventory.lotNumber}`,\n // \"status#accountName#productName#lotNumber\": `${item.inventory.status}#${inbound.accountName}#${item.inventory.productName}#${item.inventory.lotNumber}`,\n // \"status#accountId#productName#lotNumber\": `${item.inventory.status}#${inbound.accountId}#${item.inventory.productName}#${item.inventory.lotNumber}`,\n inboundShipmentId: inbound.id,\n poNumber: outbound.poNumber,\n accountName: inbound.accountName,\n accountId: inbound.accountId,\n productId: lineItem.inventory.productId ? lineItem.inventory.productId : \"\",\n quantityShipped: lineItem.totalQuantityToPick,\n quantityDelivered: lineItem.totalQuantityToPick,\n quantityOnHand: lineItem.totalQuantityToPick,\n quantityPhysical: lineItem.totalQuantityToPick,\n quantityCommitted: 0,\n deliveryDateTime: updateDateTime,\n history: [historyNote],\n sortKey: index + 10001,\n\n locationId: null,\n aisleId: null,\n };\n\n delete createInventoryInput.account;\n delete createInventoryInput.area;\n delete createInventoryInput.inboundShipment;\n delete createInventoryInput.inventoryItems;\n delete createInventoryInput.lastShipDateTime;\n delete createInventoryInput.location;\n delete createInventoryInput.notes;\n delete createInventoryInput.product;\n delete createInventoryInput.productCode;\n delete createInventoryInput.productId;\n delete createInventoryInput.reloadYardCommodity;\n delete createInventoryInput.shipmentLineItems;\n delete createInventoryInput.verificationRequired;\n delete createInventoryInput.zone;\n\n return createInventoryInput;\n};\n\nexport const updateLambdaInventoryTransfer = (lineItem, transferInventory) => {\n const updateDateTime = transferInventory.updatedAt;\n const historyNote = transferInventory.history[0];\n const newQuantityOnHand = trimDecimal(\n lineItem.inventory.quantityOnHand - lineItem.totalQuantityToPick\n );\n\n const updateInventoryInput = {\n ...lineItem.inventory,\n updatedAt: updateDateTime,\n quantityOnHand: newQuantityOnHand,\n quantityPhysical: newQuantityOnHand,\n };\n\n if (newQuantityOnHand === 0) {\n updateInventoryInput.status = InventoryStatus.SHIPPED;\n updateInventoryInput.quantityCommitted = 0;\n updateInventoryInput.lastShipDateTime = updateDateTime;\n }\n // updateInventoryInput[\"status#lotNumber\"] = `${updateInventoryInput.status}#${updateInventoryInput.lotNumber}`;\n // updateInventoryInput[\"status#accountName#productName#lotNumber\"] = `${updateInventoryInput.status}#${inbound.accountName}#${updateInventoryInput.productName}#${updateInventoryInput.lotNumber}`;\n // updateInventoryInput[\"status#accountId#productName#lotNumber\"] = `${updateInventoryInput.status}#${inbound.accountId}#${updateInventoryInput.productName}#${updateInventoryInput.lotNumber}`;\n\n updateInventoryInput.history = [...updateInventoryInput.history, historyNote];\n\n delete updateInventoryInput.account;\n delete updateInventoryInput.area;\n delete updateInventoryInput.inboundShipment;\n delete updateInventoryInput.location;\n delete updateInventoryInput.notes;\n delete updateInventoryInput.photos;\n delete updateInventoryInput.product;\n delete updateInventoryInput.reloadYardCommodity;\n delete updateInventoryInput.shipmentLineItems;\n delete updateInventoryInput.zone;\n\n return updateInventoryInput;\n};\n\nexport const updateLambdaAddressBook = (outbound, updateDateTime) => {\n const account = outbound.account;\n const shipTo = outbound.shipTo;\n\n if (shipTo) {\n const exists = account.addressBook?.some(\n (itm) => JSON.stringify(itm) === JSON.stringify(shipTo)\n );\n if (!exists) {\n const toUpdateAccount = {\n ...account,\n updatedAt: updateDateTime,\n };\n toUpdateAccount.addressBook = toUpdateAccount.addressBook\n ? [...toUpdateAccount.addressBook, shipTo]\n : [shipTo];\n delete toUpdateAccount.services;\n delete toUpdateAccount.products;\n\n return toUpdateAccount;\n }\n }\n\n return null;\n};\n\nexport const updateLambdaOutbound = async (\n record,\n outbound,\n isAdvance,\n isRollback\n) => {\n const updateDateTime = new Date().toISOString();\n // const outboundUpdateInput = { ...outbound };\n\n // process addressbook save\n let accountUpdateinput = null;\n if (outbound.saveAddress && isFullAddress(outbound.shipTo)) {\n accountUpdateinput = updateLambdaAddressBook(outbound, updateDateTime);\n }\n\n debugger;\n // process appointment timeslot\n let timeslotInput = null;\n if (record.timeslotId) {\n if (!outbound.scheduledDateTime) {\n // if previously scheduled, then delete\n timeslotInput = deleteLambdaAppointment(record.timeslotId);\n outbound.timeslotId = null; // update outbound to be saved with transform()\n } else if (record.scheduledDateTime !== outbound.scheduledDateTime) {\n // if previously scheduled, then re-schedule\n outbound.timeslot.id = record.timeslotId;\n outbound.timeslot.updatedAt = updateDateTime;\n timeslotInput = updateLambdaAppointment(outbound.timeslot);\n }\n } else if (outbound.timeslot) {\n // create timeslot if previously not scheduled\n timeslotInput = createLambdaAppointment(\n outbound.timeslot,\n null,\n record.id,\n record.accountId,\n record.accountName\n );\n // update outbound to be saved with transform()\n outbound.timeslotId = timeslotInput.id;\n }\n\n // process picklist\n const values = transformLambdaPickList(\n outbound,\n isAdvance,\n isRollback,\n updateDateTime\n );\n\n // delete outboundUpdateInput.account;\n // delete outboundUpdateInput.area;\n // delete outboundUpdateInput.invoice;\n // delete outboundUpdateInput.location;\n // delete outboundUpdateInput.reloadYardCommodity;\n // delete outboundUpdateInput.shipmentLineItems;\n // delete outboundUpdateInput.timeslot;\n\n // console.log(\"outboundUpdateInput\", outboundUpdateInput);\n // console.log(\"accountUpdateinput\", accountUpdateinput);\n // console.log(\"shipmentLineItemCreateList\", values.shipmentLineItemCreateList);\n // console.log(\"shipmentLineItemUpdateList\", values.shipmentLineItemUpdateList);\n // console.log(\"shipmentItemInventoryItemCreateList\", values.shipmentItemInventoryItemCreateList);\n // console.log(\"shipmentItemInventoryItemUpdateList\", values.shipmentItemInventoryItemUpdateList);\n // console.log(\"inventoryItemUpdateList\", values.inventoryItemUpdateList);\n // console.log(\"locationUpdateList\", values.locationUpdateList);\n // console.log(\"inventoryUpdateList\", values.inventoryUpdateList);\n\n const response = await API.post(\"transREST\", \"/outboundUpdate\", {\n body: {\n // outboundUpdateInput: outboundUpdateInput,\n accountUpdateinput: accountUpdateinput,\n timeslotInput: timeslotInput,\n shipmentLineItemCreateList: values.shipmentLineItemCreateList,\n shipmentLineItemUpdateList: values.shipmentLineItemUpdateList,\n shipmentItemInventoryItemCreateList:\n values.shipmentItemInventoryItemCreateList,\n shipmentItemInventoryItemUpdateList:\n values.shipmentItemInventoryItemUpdateList,\n inventoryItemUpdateList: values.inventoryItemUpdateList,\n locationUpdateList: values.locationUpdateList,\n inventoryUpdateList: values.inventoryUpdateList,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n\n return response;\n};\n\nexport const getActualWeight = (formData) => {\n if (\n isWeightUnits(formData.totalUnits) &&\n formData.shipmentLineItems?.items.length > 0\n ) {\n const shipmentLineItem = formData.shipmentLineItems.items[0];\n const commodity = shipmentLineItem.inventory.reloadYardCommodityId;\n if (isBulkCommodity(commodity)) {\n if (formData.tareWeight && formData.ladenWeight) {\n const inventoryWeight = formData.ladenWeight - formData.tareWeight;\n if (inventoryWeight === shipmentLineItem.totalQuantityToPick) return -1;\n return inventoryWeight;\n }\n }\n }\n return -1;\n};\n\nexport const transformLambdaPickList = (\n outbound,\n isAdvance,\n isRollback,\n updateDateTime\n) => {\n const shipmentLineItemCreateList = [];\n const shipmentLineItemUpdateList = [];\n const shipmentItemInventoryItemCreateList = [];\n const shipmentItemInventoryItemUpdateList = [];\n const inventoryItemUpdateList = [];\n const locationUpdateList = [];\n const locationUpdateMap = {};\n const inventoryUpdateList = [];\n const pickList = outbound.shipmentLineItems?.items;\n debugger;\n const actualWeight = getActualWeight(outbound);\n\n pickList.forEach((lineItem) => {\n if (\n lineItem.status === ShipmentLineItemStatus.NEW &&\n lineItem.totalQuantityToPick > 0\n ) {\n // added new shipment line item,\n // create ShipmentLineItem & ShipmentLineItemInventoryItem\n // update inventoryItems && inventory\n const shipmentLineItemToCreate = createLambdaShipmentLineItem(\n outbound,\n lineItem,\n updateDateTime\n );\n shipmentLineItemCreateList.push(shipmentLineItemToCreate);\n lineItem.inventoryItems.items.forEach((lineIteminvItem) => {\n if (lineIteminvItem.quantityToPick > 0) {\n const lineItemInventoryItemToCreate =\n createLambdaShipmentLineItemInventoryItem(\n shipmentLineItemToCreate,\n lineIteminvItem,\n updateDateTime\n );\n shipmentItemInventoryItemCreateList.push(\n lineItemInventoryItemToCreate\n );\n const toUpdateInventoryItem = updateLambdaInventoryItem(\n outbound,\n lineIteminvItem,\n \"create\",\n updateDateTime\n );\n inventoryItemUpdateList.push(toUpdateInventoryItem);\n }\n });\n\n debugger;\n let toUpdateInventory = {\n ...lineItem.inventory,\n updatedAt: updateDateTime,\n quantityCommitted: trimDecimal(\n (lineItem.inventory.quantityCommitted || 0) +\n lineItem.totalQuantityToPick\n ),\n };\n const note = {\n type: NoteType.INVENTORY,\n date: updateDateTime,\n by: window.appUser?.fullName,\n text: `Committed Outbound Qty. of ${lineItem.totalQuantityToPick} ${toUpdateInventory.inventoryUnits}`,\n };\n toUpdateInventory.history = toUpdateInventory.history\n ? [...toUpdateInventory.history, note]\n : note;\n\n toUpdateInventory = updateLambdaInventory(\n toUpdateInventory,\n lineItem,\n isAdvance,\n updateDateTime\n );\n inventoryUpdateList.push(toUpdateInventory);\n } else {\n // updating existing shipmentLineItems on advance.\n debugger;\n let quantityToPickOrig;\n if (actualWeight !== -1) {\n quantityToPickOrig = lineItem.totalQuantityToPick;\n lineItem.totalQuantityToPick = actualWeight;\n }\n // shipment line item unchanged - update shipment changes such as poNumber & status on advance / rollback\n const shipmentLineItemToUpdate = updateLambdaShipmentLineItem(\n outbound,\n lineItem,\n updateDateTime,\n actualWeight\n );\n shipmentLineItemUpdateList.push(shipmentLineItemToUpdate);\n\n // on advance or rollback, update ShipmentLineItemInventoryItem, inventoryItems & inventory\n lineItem.inventoryItems.items.forEach((lineIteminvItem) => {\n if (lineIteminvItem.quantityToPick > 0) {\n if (actualWeight !== -1) {\n lineIteminvItem.quantityToPick = actualWeight;\n }\n const lineItemInventoryItemToUpdate =\n updateLambdaShipmentLineItemInventoryItem(\n shipmentLineItemToUpdate,\n lineIteminvItem,\n updateDateTime\n );\n shipmentItemInventoryItemUpdateList.push(\n lineItemInventoryItemToUpdate\n );\n\n const inventoryItemToUpdate = updateLambdaInventoryItem(\n outbound,\n lineIteminvItem,\n isAdvance ? \"advance\" : null,\n updateDateTime,\n quantityToPickOrig\n );\n inventoryItemUpdateList.push(inventoryItemToUpdate);\n\n if (isRollback) {\n let location = lineIteminvItem.inventoryItem.location;\n // if (location.type === LocationType.STRUCTURED) {\n if (isManagedLocation(location)) {\n if (locationUpdateMap[location.id]) {\n location = locationUpdateMap[location.id];\n }\n const locationToUpdate = resetLambdaCapacityUsed(\n location,\n lineItem,\n lineIteminvItem,\n updateDateTime\n );\n locationUpdateMap[location.id] = locationToUpdate;\n }\n }\n }\n });\n\n const inventoryToUpdate = updateLambdaInventory(\n lineItem.inventory,\n shipmentLineItemToUpdate,\n isAdvance,\n updateDateTime,\n quantityToPickOrig\n );\n inventoryUpdateList.push(inventoryToUpdate);\n }\n });\n\n // After processing all items, collect unique location updates\n locationUpdateList.push(...Object.values(locationUpdateMap));\n\n return {\n shipmentLineItemCreateList: shipmentLineItemCreateList,\n shipmentLineItemUpdateList: shipmentLineItemUpdateList,\n shipmentItemInventoryItemCreateList: shipmentItemInventoryItemCreateList,\n shipmentItemInventoryItemUpdateList: shipmentItemInventoryItemUpdateList,\n inventoryItemUpdateList: inventoryItemUpdateList,\n locationUpdateList: locationUpdateList,\n inventoryUpdateList: inventoryUpdateList,\n };\n};\n\nexport const updateOutboundClient = (toUpdateShipment) => {\n toUpdateShipment = { ...toUpdateShipment };\n delete toUpdateShipment.account;\n delete toUpdateShipment.area;\n delete toUpdateShipment.createdAt;\n delete toUpdateShipment.invoice;\n delete toUpdateShipment.location;\n delete toUpdateShipment.reloadYardCommodity;\n delete toUpdateShipment.seals;\n delete toUpdateShipment.shipmentLineItems;\n delete toUpdateShipment.timeslot;\n delete toUpdateShipment.updatedAt;\n\n return API.graphql(\n graphqlOperation(updateOutboundShipmentMini, { input: toUpdateShipment })\n );\n};\n\nexport const getAddressBook = (\n account,\n billToAccount,\n selectedAddress,\n handleShipToSelect\n) => {\n const addressBook =\n billToAccount?.addressBook?.length > 0\n ? billToAccount.addressBook\n : account?.addressBook;\n\n if (addressBook?.length > 0) {\n return (\n <Autocomplete\n options={addressBook} // Use addressBook array as options\n getOptionLabel={(option) =>\n `${option.name}, ${option.street}, ${option.city}, ${option.state} ${option.zipCode}, ${option.country}`\n }\n value={selectedAddress}\n // isOptionEqualToValue={(option, value) => option.name === value?.name} // Ensure correct selection comparison\n onChange={(event, newValue) => handleShipToSelect(newValue)}\n renderInput={(params) => (\n <TextFieldMui\n {...params}\n label=\"Address Book\"\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n helperText={false}\n />\n )}\n />\n );\n }\n return null;\n};\n\nexport const getSaveAddressControl = (account, billToAccount, formData) => {\n const addressBook =\n billToAccount?.addressBook?.length > 0\n ? billToAccount.addressBook\n : account?.addressBook;\n const shipTo = formData.shipTo;\n\n function objectExistsInArray(array, objectToFind) {\n if (!array || array.length === 0) return false;\n else {\n const objectAsString = JSON.stringify(objectToFind);\n return array.some((obj) => JSON.stringify(obj) === objectAsString);\n }\n }\n\n if (isEmptyAddress(shipTo) || objectExistsInArray(addressBook, shipTo))\n return null;\n return (\n <BooleanInput\n source=\"saveAddress\"\n label=\"Save to Address Book\"\n disabled={!isFullAddress(shipTo)}\n helperText={false}\n />\n );\n};\n\nexport const autogenPickupNumber = async (account) => {\n // counter not incremented as pickupNumber is generated on create and BOL is create on edit.\n const counter = await incrementBOLCounter();\n return `${account.lotNumberPrefix}-${counter}`;\n};\n\nexport const incrementBOLCounter = async () => {\n debugger;\n const result = await API.graphql(\n graphqlOperation(getBOLCounter, {\n id: window.appUser?.reloadYardId,\n })\n );\n const counter = ++result.data.getReloadYard.bolCounter;\n await API.graphql(\n graphqlOperation(updateReloadYardMini, {\n input: {\n id: window.appUser?.reloadYardId,\n active: result.data.getReloadYard.active,\n name: result.data.getReloadYard.name,\n bolCounter: counter,\n },\n })\n );\n\n return counter;\n};\n","import { v4 as uuidv4 } from \"uuid\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getOutboundShipment } from \"../../../../graphql/outbound/custom-queries\";\nimport { updateOutboundShipmentMini } from \"../../../../graphql/outbound/custom-mutations\";\n\nimport { logError } from \"../../../../utils/appUtils\";\nimport { NoteType } from \"../../../../utils/constants\";\nimport {\n calcBillingQuantity,\n calcNetWeight,\n calcTotalQuantity,\n updateLambdaInventory,\n} from \"../OutboundUtils\";\nimport { trimDecimal } from \"../../../../utils/utils\";\nimport { maxValue, minValue, number, required } from \"react-admin\";\n\nexport const deleteLambdaPickListItem = async (pickListItem) => {\n const shipmentLineItemDeleteList = [];\n const shipmentItemInventoryItemDeleteList = [];\n const inventoryItemUpdateList = [];\n const inventoryUpdateList = [];\n const updateDateTime = new Date().toISOString();\n debugger;\n\n const shipmentLineItemInput = {\n id: pickListItem.id,\n __typename: \"ShipmentLineItem\",\n };\n shipmentLineItemDeleteList.push(shipmentLineItemInput);\n\n pickListItem.inventoryItems.items.forEach((invItem) => {\n const shipmentIteminventoryItemInput = {\n id: invItem.id,\n __typename: \"ShipmentLineItemInventoryItem\",\n inventoryItemId: invItem.inventoryItemId,\n shipmentLineItemId: invItem.shipmentLineItemId,\n };\n shipmentItemInventoryItemDeleteList.push(shipmentIteminventoryItemInput);\n\n const toUpdateInventoryItem = {\n ...invItem.inventoryItem,\n updatedAt: updateDateTime,\n quantityCommitted:\n invItem.inventoryItem.quantityCommitted - invItem.quantityToPick,\n };\n delete toUpdateInventoryItem.area;\n delete toUpdateInventoryItem.inventory;\n delete toUpdateInventoryItem.location;\n delete toUpdateInventoryItem.zone;\n inventoryItemUpdateList.push(toUpdateInventoryItem);\n });\n\n const toUpdateInventory = {\n ...pickListItem.inventory,\n updatedAt: updateDateTime,\n quantityCommitted:\n pickListItem.inventory.quantityCommitted -\n pickListItem.totalQuantityToPick,\n };\n const note = {\n type: NoteType.INVENTORY,\n date: updateDateTime,\n by: window.appUser?.fullName,\n text: `Deleted Outbound Qty. of ${pickListItem.totalQuantityToPick} ${pickListItem.inventory.inventoryUnits}`,\n };\n toUpdateInventory.history = toUpdateInventory.history\n ? [...toUpdateInventory.history, note]\n : [note];\n // index keys not changing on outbound create - no inventory status change\n delete toUpdateInventory.account;\n delete toUpdateInventory.inboundShipment;\n delete toUpdateInventory.shipmentLineItems;\n delete toUpdateInventory.location;\n delete toUpdateInventory.reloadYardCommodity;\n delete toUpdateInventory.product;\n inventoryUpdateList.push(toUpdateInventory);\n\n // console.log(\"shipmentLineItemDeleteList\", shipmentLineItemDeleteList)\n // console.log(\"shipmentItemInventoryItemDeleteList\", shipmentItemInventoryItemDeleteList)\n // console.log(\"inventoryItemUpdateList\", inventoryItemUpdateList)\n // console.log(\"inventoryUpdateList\", inventoryUpdateList)\n\n return await API.post(\"transREST\", \"/outboundDelete\", {\n body: {\n shipmentLineItemDeleteList,\n shipmentItemInventoryItemDeleteList,\n inventoryItemUpdateList,\n inventoryUpdateList,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n};\n\nexport const updateOutboundQuantity = async (\n outbound,\n data,\n initQty,\n newQty\n) => {\n let outboundRecord = { ...outbound };\n let historyNote = null;\n debugger;\n\n try {\n if (outboundRecord?.shipmentLineItems?.items)\n outboundRecord.shipmentLineItems = {\n items: [...outboundRecord.shipmentLineItems.items],\n };\n else outboundRecord.shipmentLineItems = { items: [] };\n\n if (!outboundRecord) {\n const resp = await API.graphql(\n graphqlOperation(getOutboundShipment, { id: data.outboundShipmentId })\n );\n outboundRecord = resp.data.getOutboundShipment;\n }\n\n if (!isNaN(initQty) && !isNaN(newQty) && initQty !== newQty) {\n if (newQty === 0 && outboundRecord?.shipmentLineItems?.items) {\n // item deleted\n outboundRecord.shipmentLineItems.items =\n outboundRecord.shipmentLineItems.items.filter(\n (itm) => itm.id && itm.id !== data.id\n );\n historyNote = {\n text: `Deleted picklist item with Qty of: ${initQty}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.INVENTORY,\n };\n } else {\n outboundRecord.shipmentLineItems.items =\n outboundRecord.shipmentLineItems.items.map((itm) =>\n itm.id === data.id ? { ...itm, totalQuantityToPick: newQty } : itm\n );\n historyNote = {\n text: `Picklist item Qty changed from: ${initQty} to ${newQty}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.INVENTORY,\n };\n }\n }\n\n outboundRecord.shipmentLineItems.items =\n outboundRecord.shipmentLineItems.items.filter((itm) => itm.id);\n const totalQty = calcTotalQuantity(outboundRecord);\n const billQty = calcBillingQuantity(outboundRecord);\n\n const {\n id,\n active,\n status,\n reloadYardId,\n accountId,\n accountName,\n createDateTime,\n scheduledDateTime,\n arrivalDateTime,\n endDateTime,\n pickupNumber,\n totalUnits,\n weightUnits,\n } = outboundRecord;\n\n const netWeight = calcNetWeight(outboundRecord, null, weightUnits);\n\n const history = [...outbound.history, historyNote];\n\n const input = {\n id,\n active,\n status,\n reloadYardId,\n accountId,\n accountName,\n createDateTime,\n scheduledDateTime,\n arrivalDateTime,\n endDateTime,\n pickupNumber,\n totalQuantity: totalQty,\n totalUnits,\n billQuantity: billQty,\n netWeight,\n weightUnits,\n history,\n };\n await API.graphql(graphqlOperation(updateOutboundShipmentMini, { input }));\n } catch (err) {\n logError(\"lineItem:PickListItemUtils:updateOutboundQuantity\", err, false);\n }\n};\n\nexport const updateLambdaPickListItem = async (\n outbound,\n initPickListItem,\n pickListItem\n) => {\n let inventoryUpdateInput = null;\n let outboundUpdateInput = null;\n const inventoryItemUpdateList = [];\n const shipmentItemInventoryItemCreateList = [];\n const shipmentItemInventoryItemUpdateList = [];\n const shipmentItemInventoryItemDeleteList = [];\n const updateDateTime = pickListItem.updatedAt;\n const newInventoryItems = pickListItem.inventoryItems?.items;\n const initInventoryItems = initPickListItem.inventoryItems?.items;\n const outboundNotes = [];\n debugger;\n\n // check for creates and updates\n for (const invItem of newInventoryItems) {\n if (invItem.shipmentLineItemId === null) {\n // new inventory item added\n const shipmentLineItemInventoryInput = {\n id: uuidv4(),\n __typename: \"ShipmentLineItemInventoryItem\",\n createdAt: updateDateTime,\n updatedAt: updateDateTime,\n owner: outbound.owner,\n groups: outbound.groups,\n reloadYardId: outbound.reloadYardId,\n outboundShipmentId: outbound.id,\n shipmentLineItemId: pickListItem.id,\n inventoryId: pickListItem.inventoryId,\n inventoryItemId: invItem.inventoryItemId,\n quantityToPick: invItem.quantityToPick,\n status: pickListItem.status,\n };\n shipmentItemInventoryItemCreateList.push(shipmentLineItemInventoryInput);\n\n const toUpdateInventoryItem = {\n ...invItem.inventoryItem,\n quantityOnHand: invItem.inventoryItem.quantityOnHand,\n quantityCommitted: Number(invItem.inventoryItem.quantityCommitted), // calculated in form\n // quantityCommitted: Number(invItem.inventoryItem.quantityCommitted) + invItem.quantityToPick,\n updatedAt: updateDateTime,\n };\n const note = {\n type: NoteType.INVENTORY,\n date: updateDateTime,\n by: window.appUser?.fullName,\n text: `Committed quantity of ${shipmentLineItemInventoryInput.quantityToPick}.`,\n };\n toUpdateInventoryItem.history = [...toUpdateInventoryItem.history, note];\n outboundNotes.push(note);\n\n delete toUpdateInventoryItem.area;\n delete toUpdateInventoryItem.inventory;\n delete toUpdateInventoryItem.location;\n delete toUpdateInventoryItem.zone;\n inventoryItemUpdateList.push(toUpdateInventoryItem);\n } else {\n const match = initInventoryItems?.find((x) => x.id === invItem.id);\n if (match && invItem.quantityToPick !== match.quantityToPick) {\n // inventory item updated\n\n const initQtyToPick = match.quantityToPick;\n const newQtyToPick = invItem.quantityToPick;\n\n if (newQtyToPick !== 0) {\n // else item should be deleted\n const shipmentLineItemInventoryItemInput = {\n ...invItem,\n quantityToPick: newQtyToPick,\n status: pickListItem.status,\n };\n delete shipmentLineItemInventoryItemInput.inventoryItem;\n shipmentItemInventoryItemUpdateList.push(\n shipmentLineItemInventoryItemInput\n );\n\n // const delta = initQtyToPick - newQtyToPick;\n // const newQty = invItem.inventoryItem.quantityCommitted - delta;\n // console.log(\"committed, delta\", invItem.inventoryItem.quantityCommitted, delta);\n const toUpdateInventoryItem = {\n ...invItem.inventoryItem,\n quantityCommitted: invItem.inventoryItem.quantityCommitted, // calculated in form\n // quantityCommitted: newQty,\n updatedAt: updateDateTime,\n };\n const note = {\n type: NoteType.INVENTORY,\n date: updateDateTime,\n by: window.appUser?.fullName,\n text: `Qty. To Pick Changed from ${initQtyToPick} to ${newQtyToPick}`,\n };\n toUpdateInventoryItem.history = toUpdateInventoryItem.history\n ? [...toUpdateInventoryItem.history, note]\n : [note];\n delete toUpdateInventoryItem.area;\n delete toUpdateInventoryItem.inventory;\n delete toUpdateInventoryItem.location;\n delete toUpdateInventoryItem.zone;\n inventoryItemUpdateList.push(toUpdateInventoryItem);\n }\n }\n }\n }\n\n // Check for deletes\n for (const invItem of initInventoryItems) {\n const match = newInventoryItems?.find(\n (x) => x.id === invItem.id || invItem.quantityToPick === 0\n );\n if (!match || match.quantityToPick === 0) {\n // inventoryItem was deleted\n shipmentItemInventoryItemDeleteList.push({\n id: invItem.id,\n __typename: \"ShipmentLineItemInventoryItem\",\n inventoryItemId: invItem.inventoryItemId,\n shipmentLineItemId: invItem.shipmentLineItemId,\n });\n\n debugger;\n // if deleted and added back, do not update Inventoryitem\n const reAdded = newInventoryItems?.find(\n (x) =>\n x.shipmentLineItemId === null &&\n x.inventoryItemId === invItem.inventoryItemId\n );\n if (!reAdded) {\n const newQty = trimDecimal(\n invItem.inventoryItem.quantityCommitted - invItem.quantityToPick\n );\n const toUpdateInventoryItem = {\n ...invItem.inventoryItem,\n quantityCommitted: newQty,\n updatedAt: updateDateTime,\n };\n const note = {\n type: NoteType.INVENTORY,\n date: updateDateTime,\n by: window.appUser?.fullName,\n text: `Deleted quantity of ${invItem.quantityToPick}.`,\n };\n toUpdateInventoryItem.history = [\n ...toUpdateInventoryItem.history,\n note,\n ];\n outboundNotes.push(note);\n\n delete toUpdateInventoryItem.area;\n delete toUpdateInventoryItem.inventory;\n delete toUpdateInventoryItem.location;\n delete toUpdateInventoryItem.zone;\n inventoryItemUpdateList.push(toUpdateInventoryItem);\n }\n }\n }\n\n // Update inventory qtys.\n if (inventoryItemUpdateList.length > 0) {\n // record was edited.\n const initQty = initPickListItem.totalQuantityToPick;\n const newQty = pickListItem.totalQuantityToPick;\n const delta = initQty - newQty;\n const initQtyCommitted = initPickListItem.inventory.quantityCommitted;\n const inventoryUnits = pickListItem.inventory.inventoryUnits;\n\n debugger;\n let toUpdateInventory = {\n ...pickListItem.inventory,\n updatedAt: updateDateTime,\n quantityCommitted: initQtyCommitted - delta,\n };\n const note = {\n type: NoteType.INVENTORY,\n date: updateDateTime,\n by: window.appUser?.fullName,\n text: `Qty. Outbound Changed from ${initQty} ${inventoryUnits} to ${newQty} ${inventoryUnits}.`,\n };\n toUpdateInventory.history = toUpdateInventory.history\n ? [...toUpdateInventory.history, note]\n : note;\n\n toUpdateInventory = updateLambdaInventory(\n toUpdateInventory,\n pickListItem,\n false,\n updateDateTime\n );\n inventoryUpdateInput = toUpdateInventory;\n\n // Update outbound qtys.\n outboundUpdateInput = {\n ...outbound,\n updatedAt: updateDateTime,\n };\n outboundUpdateInput.shipmentLineItems.items =\n outboundUpdateInput.shipmentLineItems.items.map((item) =>\n item.id === pickListItem.id ? pickListItem : item\n );\n outboundUpdateInput.totalQuantity = calcTotalQuantity(outboundUpdateInput);\n outboundUpdateInput.billQuantity = calcBillingQuantity(outboundUpdateInput);\n\n outboundUpdateInput.netWeight = calcNetWeight(\n outboundUpdateInput,\n null,\n outboundUpdateInput.weightUnits\n );\n\n if (delta !== 0) {\n const note = {\n type: NoteType.INVENTORY,\n date: updateDateTime,\n by: window.appUser?.fullName,\n text: `Qty. Outbound Changed from ${outbound.totalQuantity} ${inventoryUnits} to ${outboundUpdateInput.totalQuantity} ${inventoryUnits} .`,\n };\n outboundNotes.push(note);\n }\n if (outboundNotes.length > 0) {\n outboundUpdateInput.history = [\n ...outboundUpdateInput.history,\n ...outboundNotes,\n ];\n }\n\n delete outboundUpdateInput.account;\n delete outboundUpdateInput.area;\n delete outboundUpdateInput.invoice;\n delete outboundUpdateInput.location;\n delete outboundUpdateInput.reloadYardCommodity;\n delete outboundUpdateInput.shipmentLineItems;\n }\n\n // console.log(\"shipmentItemInventoryItemUpdateList\", shipmentItemInventoryItemUpdateList)\n // console.log(\"shipmentItemInventoryItemDeleteList\", shipmentItemInventoryItemDeleteList)\n // console.log(\"inventoryItemUpdateList\", inventoryItemUpdateList)\n // console.log(\"inventoryUpdateInput\", inventoryUpdateInput)\n // console.log(\"outboundUpdateInput\", outboundUpdateInput)\n\n const response = await API.post(\"transREST\", \"/pickListItemUpdate\", {\n body: {\n outboundUpdateInput,\n inventoryUpdateInput,\n inventoryItemUpdateList,\n shipmentItemInventoryItemCreateList,\n shipmentItemInventoryItemUpdateList,\n shipmentItemInventoryItemDeleteList,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n\n return response;\n};\n\nexport const validateQuantity = (min, max) => [\n required(),\n number(),\n minValue(min),\n maxValue(max, \"Exceeds Available\"),\n];\n\nexport function getNestedValue(obj, path) {\n return path\n .split(/[\\.\\[\\]]+/)\n .filter(Boolean)\n .reduce((acc, key) => acc && acc[key], obj);\n}\n","import React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport {\n Button,\n Grid,\n IconButton,\n Typography,\n List,\n ListItem,\n ListItemText,\n ListItemAvatar,\n ListItemSecondaryAction,\n Avatar,\n useMediaQuery,\n Divider,\n Box,\n} from \"@material-ui/core\";\nimport { grey, green, deepOrange } from \"@material-ui/core/colors\";\nimport DoneIcon from \"@material-ui/icons/Done\";\nimport CloseOutlinedIcon from \"@material-ui/icons/CloseOutlined\";\nimport KeyboardArrowRightIcon from \"@material-ui/icons/KeyboardArrowRight\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { AclType, InventoryStatus } from \"../../../utils/constants\";\nimport { isAuthorized } from \"../../../utils/appUtils\";\nimport { getUnitName } from \"../../../utils/loadTypeUtils\";\nimport { isRailToTrack, isTruckToRail } from \"../../../utils/locationUtils\";\nimport PlaylistAddOutlinedIcon from \"@material-ui/icons/PlaylistAddOutlined\";\nimport { useInboundContext } from \"./context\";\nimport { format } from \"date-fns\";\n\nconst useStyles = makeStyles((theme) => ({\n actions: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n avatar: {\n marginTop: theme.spacing(1),\n },\n deepOrange: {\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n },\n progress: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 300,\n width: \"100%\",\n },\n dialogActions: {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n margin: theme.spacing(1),\n },\n actionButton: {\n marginTop: theme.spacing(1),\n marginLeft: theme.spacing(1),\n },\n green: {\n color: theme.palette.getContrastText(green[200]),\n backgroundColor: green[200],\n width: theme.spacing(6),\n height: theme.spacing(6),\n },\n unprocessedItem: {\n color: theme.palette.getContrastText(grey[300]),\n backgroundColor: grey[300],\n width: theme.spacing(6),\n height: theme.spacing(6),\n },\n Toolbar: {\n display: \"flex\",\n alignItems: \"center\",\n },\n}));\n\nconst InboundInventoryItems = () => {\n const { state, dispatch } = useInboundContext();\n const { currentInventory } = state;\n const lastSelectedAisle = useSelector(\n (state) => state.data.lastSelectedAisle\n );\n const classes = useStyles();\n\n const handleAdd = async () => {\n debugger;\n // await getAisles(currentInventory.zoneId);\n let selectedAisle;\n if (lastSelectedAisle) selectedAisle = lastSelectedAisle;\n else if (currentInventory.inventoryItems?.items.length === 1) {\n selectedAisle = currentInventory.inventoryItems.items[0].location.aisle;\n }\n const payload = {\n disableSelection: false,\n selectedAisle,\n selectedInventoryItem: {},\n };\n dispatch({ type: \"INIT_ADD_INVENTORY_ITEM\", payload });\n };\n\n // const isSelectionDisabled = () => {\n // return currentInventory.reloadYardCommodity?.commodity?.locationLoadType !== LocationLoadType.OTHER\n // }\n\n const handleOpenInventoryItem = async (inventoryItem) => {\n // if (inventoryItem.status === InventoryStatus.UNLOADED || inventoryItem.status === InventoryStatus.STORED) return;\n // dispatch({type: \"SET_LOADING\", payload: true});\n // await getAisles(inventoryItem.zoneId);\n // const disableSelection = isSelectionDisabled();\n debugger;\n dispatch({\n type: \"SELECT_INVENTORY_ITEM\",\n payload: {\n currentInventory,\n selectedInventoryItem: inventoryItem,\n disableSelection: true,\n selectedLocation: inventoryItem.location,\n origInventoryItem: { ...inventoryItem },\n },\n });\n };\n\n const getAvatarClassName = (inventoryItem) => {\n if (\n inventoryItem.status === InventoryStatus.UNLOADED ||\n inventoryItem.status === InventoryStatus.STORED ||\n inventoryItem.status === InventoryStatus.AGGREGATED\n )\n return classes.green;\n return classes.unprocessedItem;\n };\n\n const getIcon = (inventoryItem) => {\n if (\n inventoryItem.status === InventoryStatus.UNLOADED ||\n inventoryItem.status === InventoryStatus.STORED ||\n inventoryItem.status === InventoryStatus.AGGREGATED\n )\n return <DoneIcon fontSize=\"small\" />;\n return <CloseOutlinedIcon fontSize=\"small\" />;\n };\n\n return (\n <>\n <Grid item xs={12}>\n <InventoryItemsToolbar\n handleAddInventoryItem={handleAdd}\n classes={classes}\n />\n </Grid>\n <Grid item xs={12}>\n <Divider />\n <List>\n {currentInventory.inventoryItems?.items.map((itm, idx) => (\n <div key={itm.id}>\n <ListItem onClick={() => handleOpenInventoryItem(itm)}>\n <ListItemAvatar>\n <Avatar className={getAvatarClassName(itm)}>\n {getIcon(itm)}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={`${itm.locationFullName + \" | \"}${\n itm.quantityOnHand\n } ${getUnitName(currentInventory.inventoryUnits)}`}\n primaryTypographyProps={\n itm.hasException ? { color: \"error\" } : null\n }\n secondary={\n itm.unloadedBy &&\n `${itm.unloadedBy} - ${format(\n new Date(itm.unloadedDateTime),\n \"MM-dd hh:mm a\"\n )}`\n }\n />\n <ListItemSecondaryAction>\n <IconButton\n edge=\"end\"\n onClick={() => handleOpenInventoryItem(itm)}\n >\n <KeyboardArrowRightIcon fontSize=\"large\" />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n {idx < currentInventory.inventoryItems.items.length - 1 ? (\n <Divider />\n ) : null}\n </div>\n ))}\n </List>\n </Grid>\n </>\n );\n};\n\nconst InventoryItemsToolbar = ({ handleAddInventoryItem, classes }) => {\n const { state } = useInboundContext();\n const { currentInventory, currentShipment } = state;\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n const isAddDisabled = () => {\n if (\n !isAuthorized(AclType.ASSIGN_LOCATION) ||\n currentInventory.status === InventoryStatus.UNLOADED ||\n isTruckToRail(currentInventory.areaId, currentShipment) || // outbound railcar assigned by manager\n isRailToTrack(currentInventory.areaId, currentShipment) // RailToTrack location is set in Track Management\n )\n return true;\n\n return false;\n };\n\n return (\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n componennt=\"span\"\n >\n <Typography className={classes.title} variant=\"h6\" component=\"span\">\n Locations\n </Typography>\n <Button\n onClick={() => handleAddInventoryItem()}\n startIcon={<PlaylistAddOutlinedIcon />}\n disabled={isAddDisabled()}\n variant=\"contained\"\n color=\"primary\"\n >\n {isSmall ? \"Add\" : \"Add Location\"}\n </Button>\n </Box>\n );\n};\n\nexport default InboundInventoryItems;\n","import React, { useState, useMemo } from \"react\";\nimport {\n Typography,\n Grid,\n Box,\n Divider,\n Popover,\n Button,\n Badge,\n} from \"@material-ui/core\";\nimport { deepOrange, grey, blueGrey, green } from \"@material-ui/core/colors\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { useMediaQuery } from \"@material-ui/core\";\nimport { InventoryStatus } from \"../../../utils/constants\";\nimport {\n getLocationFullName,\n getLocationViewName,\n isLocationAvailable,\n} from \"../../../utils/locationUtils\";\nimport { getUnitName } from \"../../../utils/loadTypeUtils\";\nimport { getInventoryQuantity } from \"../../../utils/utils\";\nimport { useInboundContext } from \"./context\";\nimport { CloseIcon } from \"../../../components/common\";\n\nconst useStyles = makeStyles((theme) => ({\n mapContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"center\",\n flexWrap: \"wrap\",\n minHeight: theme.spacing(24),\n width: \"100%\",\n },\n backdrop: {\n zIndex: 1001,\n },\n popvover: {\n padding: theme.spacing(1),\n },\n mapContainerMobile: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"center\",\n flexWrap: \"wrap\",\n minHeight: theme.spacing(24),\n width: \"100%\",\n },\n bayContainer: {\n display: \"flex\",\n flexDirection: \"column-reverse\",\n alignItems: \"center\",\n alignContent: \"space-between\",\n border: \"1px solid #b0bec5\",\n borderRadius: theme.spacing(1),\n margin: theme.spacing(0.5),\n padding: theme.spacing(0.5),\n paddingTop: theme.spacing(1),\n },\n levelContainer: {\n border: \"1px solid\",\n borderColor: blueGrey[500],\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n },\n locationAvatar: {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(\n theme.palette.type === \"dark\" ? grey[400] : grey[300]\n ),\n backgroundColor: theme.palette.type === \"dark\" ? grey[400] : grey[300],\n borderColor: theme.palette.type === \"dark\" ? grey[400] : grey[300],\n \"&:hover\": {\n cursor: \"pointer\",\n },\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"3px solid\",\n borderRadius: theme.spacing(0.5),\n width: \"100%\",\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n locationUsedAvatar: {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(\n theme.palette.type === \"dark\" ? grey[400] : grey[300]\n ),\n backgroundColor: theme.palette.type === \"dark\" ? grey[400] : grey[300],\n borderColor:\n theme.palette.type === \"dark\" ? deepOrange[500] : deepOrange[500],\n \"&:hover\": {\n cursor: \"pointer\",\n },\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"3px solid\",\n borderRadius: theme.spacing(0.5),\n width: \"100%\",\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n locationUsedAvailableAvatar: {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(green[600]),\n backgroundColor: theme.palette.type === \"dark\" ? green[600] : green[600],\n borderColor:\n theme.palette.type === \"dark\" ? deepOrange[500] : deepOrange[500],\n \"&:hover\": {\n cursor: \"pointer\",\n },\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"3px solid\",\n borderRadius: theme.spacing(0.5),\n width: \"100%\",\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n selectedLocationAvatar: {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n borderColor: deepOrange[500],\n \"&:hover\": {\n cursor: \"pointer\",\n },\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"3px solid\",\n borderRadius: theme.spacing(0.5),\n width: \"100%\",\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n locationAvailableAvatar: {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(green[600]),\n backgroundColor: green[600],\n borderColor: green[600],\n \"&:hover\": {\n cursor: \"pointer\",\n },\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"3px solid\",\n borderRadius: theme.spacing(0.5),\n width: \"100%\",\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n redCircle: {\n position: \"absolute\",\n top: -theme.spacing(1.25),\n left: -theme.spacing(1.25),\n width: theme.spacing(3),\n height: theme.spacing(3),\n borderStyle: \"solid\",\n display: \"flex\",\n justifyContent: \"center\",\n alignContent: \"center\",\n borderRadius: theme.spacing(1.5),\n backgroundColor: deepOrange[500],\n color: theme.palette.getContrastText(deepOrange[600]),\n },\n badge: {\n \"&:hover\": {\n cursor: \"pointer\",\n },\n },\n}));\n\nexport const StructuredInboundAisle = () => {\n const { state, dispatch } = useInboundContext();\n const {\n currentInventory,\n selectedLocation,\n disableSelection,\n selectedAisle,\n bayList,\n loading,\n } = state;\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleSelectLocation = (location, evt) => {\n if (disableSelection) return;\n evt.preventDefault();\n evt.stopPropagation();\n setAnchorEl(null);\n const payload = location.id === selectedLocation?.id ? null : location;\n dispatch({ type: \"SET_SELECTED_LOCATION\", payload });\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const getTotalItemsPlaced = () => {\n let total = 0;\n if (currentInventory.inventoryItems?.items.length > 0) {\n total = currentInventory.inventoryItems.items.reduce(\n (total, item) =>\n item.status === InventoryStatus.UNLOADED\n ? (total += item.quantityOnHand)\n : total,\n 0\n );\n }\n const uom = getUnitName(currentInventory.inventoryUnits);\n const text = `${total} ${uom}`;\n return text;\n };\n\n const getTotalItemsInLocation = () => {\n let totalInAisle = 0;\n if (currentInventory.inventoryItems?.items.length > 0) {\n totalInAisle = currentInventory.inventoryItems.items.reduce(\n (total, item) =>\n item.locationId === selectedLocation?.id &&\n item.status === InventoryStatus.UNLOADED\n ? (total += item.quantityOnHand)\n : total,\n 0\n );\n }\n const totalInAisleUom = getUnitName(currentInventory.inventoryUnits);\n return `${totalInAisle} ${totalInAisleUom}`;\n };\n\n const getTotalQuantityText = () => {\n return (\n <div\n className={classes.popvover}\n style={!isSmall ? { width: \"30rem\" } : null}\n >\n <Grid container>\n <Grid item xs={12}>\n <Box\n mb={1}\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n >\n <Typography component=\"span\">\n Location {getLocationFullName(selectedLocation)}\n </Typography>\n <CloseIcon onClick={handleClose} />\n </Box>\n </Grid>\n <Grid item xs={12}>\n <Box mb={1}>\n <Divider />\n </Box>\n </Grid>\n <Grid item xs={6}>{`Total ${\n !isSmall ? \"inventory items \" : \"\"\n }placed`}</Grid>\n <Grid item xs={6}>\n {getTotalItemsPlaced()}\n </Grid>\n <Grid item xs={6}>{`Total ${\n !isSmall ? `placed ` : \"\"\n }in ${getLocationFullName(selectedLocation)}`}</Grid>\n <Grid item xs={6}>\n {getTotalItemsInLocation()}\n </Grid>\n <Grid item xs={6}>\n Capacity used\n </Grid>\n <Grid item xs={6}>\n {selectedLocation.capacityUsed}%\n </Grid>\n {selectedLocation.capacityAllocated > 0 && (\n <>\n <Grid item xs={6}>\n Capacity allocated\n </Grid>\n <Grid item xs={6}>\n {selectedLocation.capacityAllocated}%\n </Grid>\n </>\n )}\n {selectedLocation?.productId && (\n <>\n <Grid item xs={6}>\n Account\n </Grid>\n <Grid item xs={6}>\n {selectedLocation.accountName}\n </Grid>\n <Grid item xs={6}>\n Product\n </Grid>\n <Grid item xs={6}>\n {selectedLocation.productName}\n </Grid>\n </>\n )}\n <Grid item xs={12}>\n <Box\n display=\"flex\"\n mt={0}\n alignItems=\"center\"\n justifyContent=\"flex-end\"\n >\n <Button onClick={handleClose}>Close</Button>\n </Box>\n </Grid>\n </Grid>\n </div>\n );\n };\n\n const handleInfoClick = (evt) => {\n if (!selectedLocation) return;\n evt.preventDefault();\n evt.stopPropagation();\n setAnchorEl(evt.currentTarget);\n };\n\n if (!selectedAisle?.id || bayList?.length === 0) return <></>;\n const open = Boolean(anchorEl);\n\n return (\n <>\n <Grid item xs={12}>\n <div\n className={\n isSmall ? classes.mapContainerMobile : classes.mapContainer\n }\n >\n {selectedLocation && (\n <Popover\n id=\"location-popover\"\n open={open}\n onClose={handleClose}\n anchorEl={anchorEl}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"center\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"center\",\n }}\n >\n <Box p={1}>{getTotalQuantityText()}</Box>\n </Popover>\n )}\n {!loading &&\n bayList.map((bay, bayIdx) => (\n <div className={classes.bayContainer} key={bayIdx}>\n <Box m={1}>\n <Typography>{`Bay ${\n (bayIdx + 1 < 10 ? \" 0\" : \" \") + (bayIdx + 1)\n }`}</Typography>\n </Box>\n <Divider />\n {bay.map((level, idx) => (\n <div className={classes.levelContainer} key={idx}>\n {level.map((location) => (\n <Location\n key={location.id}\n isSmall={isSmall}\n location={location}\n classes={classes}\n handleInfoClick={handleInfoClick}\n handleSelectLocation={handleSelectLocation}\n />\n ))}\n </div>\n ))}\n </div>\n ))}\n </div>\n </Grid>\n </>\n );\n};\n\nconst Location = ({\n isSmall,\n location,\n classes,\n handleInfoClick,\n handleSelectLocation,\n}) => {\n const { state } = useInboundContext();\n const {\n selectedLocation,\n currentInventory,\n disableSelection,\n showInventoryQuantity,\n searchInventoryItemsMap,\n selectedAisle,\n bayList,\n } = state;\n\n const avatarClassName = useMemo(() => {\n if (location.bay === 2 && location.level === 1 && location.position === 1) {\n debugger;\n }\n if (selectedLocation?.id === location.id) {\n return classes.selectedLocationAvatar;\n }\n if (disableSelection) return classes.locationAvatar;\n let available = isLocationAvailable(bayList, location, currentInventory);\n\n const sameInventory = currentInventory.inventoryItems.items.find(\n (itm) => itm.locationId === location.id\n );\n if (available) {\n if (sameInventory) return classes.locationUsedAvailableAvatar;\n return classes.locationAvailableAvatar;\n }\n if (sameInventory) return classes.locationUsedAvatar;\n return classes.locationAvatar;\n }, [location.id, selectedLocation?.id, bayList]);\n\n const getFullName = (location, size = 16) => {\n if (!location) return \"\";\n const name = getLocationViewName(location);\n if (!isSmall) return name;\n if (name.length <= size) return name;\n return name.substring(0, size - 3) + \"...\";\n };\n\n const getCapcityUsedText = (location) => {\n if (\n !showInventoryQuantity ||\n (!selectedLocation && selectedAisle?.locationLoad.other.selected) ||\n selectedLocation?.locationLoad.other.selected\n ) {\n return `${location.capacityUsed ? location.capacityUsed : 0}%`;\n } else {\n const inventoryLoadType =\n currentInventory.reloadYardCommodity.commodity.locationLoadType;\n if (inventoryLoadType === \"other\" || inventoryLoadType === \"container\")\n return \"\";\n return getInventoryQuantity(location, currentInventory).name;\n }\n };\n\n return selectedLocation === location ? (\n <Badge\n onClick={handleInfoClick}\n color=\"primary\"\n badgeContent={<Typography>?</Typography>}\n key={location.id}\n className={classes.badge}\n >\n <div\n className={avatarClassName}\n onClick={(evt) => handleSelectLocation(location, evt)}\n >\n <Typography align=\"center\" variant=\"body2\">\n {getFullName(location)}\n </Typography>\n <Typography align=\"center\" variant=\"body2\">\n {getCapcityUsedText(location)}\n </Typography>\n {searchInventoryItemsMap[location.id] && (\n <Box className={classes.redCircle}>\n {searchInventoryItemsMap[location.id].length}\n </Box>\n )}\n </div>\n </Badge>\n ) : (\n <div\n key={location.id}\n className={avatarClassName}\n onClick={(evt) => handleSelectLocation(location, evt)}\n >\n <Typography align=\"center\" variant=\"body2\">\n {getFullName(location)}\n </Typography>\n <Typography align=\"center\" variant=\"body2\">\n {getCapcityUsedText(location)}\n </Typography>\n {searchInventoryItemsMap[location.id] && (\n <Box className={classes.redCircle}>\n {searchInventoryItemsMap[location.id].length}\n </Box>\n )}\n </div>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Html5Qrcode } from \"html5-qrcode\";\nimport { FormControlLabel, Switch } from \"@material-ui/core\";\n\nexport const QrBarcodeScanner = ({ onScanSuccess, onScanFailure }) => {\n const [mode, setMode] = useState(\"barCode\");\n const [scanner, setScanner] = useState();\n\n useEffect(() => {\n const scanner = new Html5Qrcode(\"reader\", {\n useBarCodeDetectorIfSupported: true,\n });\n setScanner(scanner);\n init(scanner, mode);\n return () => cleanup(scanner);\n }, []);\n\n const cleanup = async (scanner) => {\n debugger;\n if (scanner) {\n await scanner.stop();\n scanner.clear();\n }\n };\n\n const init = async (scanner, mode) => {\n const cameras = await Html5Qrcode.getCameras();\n const qrboxFunction = function (viewfinderWidth, viewfinderHeight) {\n debugger;\n const minEdgePercentage = 0.7;\n if (mode === \"qrCode\") {\n const minEdgeSize = Math.min(viewfinderWidth, viewfinderHeight);\n const qrboxSize = Math.floor(minEdgeSize * minEdgePercentage);\n return { width: qrboxSize, height: qrboxSize };\n }\n\n const width = viewfinderWidth * 0.8;\n const height = width * 0.35;\n return { width, height };\n };\n\n if (cameras?.length > 0) {\n scanner.start(\n // cameras[0].id,\n { facingMode: \"environment\" },\n { fps: 20, qrbox: qrboxFunction },\n (decodedText) => onScanSuccess && onScanSuccess(decodedText, scanner),\n (error) => onScanFailure && onScanFailure(error)\n );\n }\n };\n\n const handleChange = async () => {\n debugger;\n const newMode = mode === \"barCode\" ? \"qrCode\" : \"barCode\";\n setMode(newMode);\n await cleanup(scanner);\n init(scanner, newMode);\n };\n\n return (\n <>\n <FormControlLabel\n control={<Switch onChange={handleChange} />}\n label=\"QR\"\n />\n <div id=\"reader\"></div>\n </>\n );\n};\n","import React, { useState, useRef, useEffect } from \"react\";\nimport {\n Button,\n Grid,\n Typography,\n Dialog,\n DialogActions,\n DialogContent,\n TextField,\n Box,\n} from \"@material-ui/core\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport { QrBarcodeScanner } from \"../../../components/common/QrBarcodeScanner/QrBarcodeScanner\";\nimport { beep } from \"../../../utils/utils\";\n\nexport const BarcodeScanDialog = ({\n open,\n onClose,\n onSave,\n disabled,\n barcode,\n setBarcode,\n actionButtonText = \"Save\",\n}) => {\n const [isScanned, setIsScanned] = useState(false);\n const ref = useRef();\n\n useEffect(() => {\n setBarcode(\"\");\n }, [open]);\n\n const handleSuccess = (value) => {\n if (ref.current?.value !== value) {\n beep(100, 520, 200);\n setBarcode(value);\n setIsScanned(true);\n }\n };\n\n const handleInputChange = (e) => {\n setBarcode(e.target.value);\n setIsScanned(false);\n };\n\n const isSaveDisabled = disabled !== undefined ? disabled : !barcode;\n\n return (\n <Dialog fullWidth open={open} onClose={onClose}>\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">Scan Barcode</Typography>\n <CancelOutlinedIcon fontSize=\"large\" onClick={onClose} />\n </Box>\n <DialogContent>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <QrBarcodeScanner onScanSuccess={handleSuccess} />\n </Grid>\n <Grid item xs={12}>\n <TextField\n label=\"Barcode\"\n variant=\"outlined\"\n fullWidth\n margin=\"dense\"\n value={barcode}\n onChange={handleInputChange}\n inputRef={ref}\n disabled={isScanned}\n />\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>Cancel</Button>\n <Button\n variant=\"contained\"\n onClick={() => onSave(barcode)}\n color=\"primary\"\n disabled={isSaveDisabled}\n >\n {actionButtonText}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import React, { useMemo, useState } from \"react\";\nimport {\n Grid,\n Button,\n TextField,\n MenuItem,\n Typography,\n InputAdornment,\n} from \"@material-ui/core\";\nimport { useInboundContext } from \"./context\";\nimport { isAuthorized } from \"../../../utils/appUtils\";\nimport {\n AclType,\n InventoryStatus,\n originDamageList,\n} from \"../../../utils/constants\";\nimport { isLocationAvailable } from \"../../../utils/locationUtils\";\nimport { isQuantityInUnits, getUnitName } from \"../../../utils/loadTypeUtils\";\nimport { handleNumberFieldKeyDown } from \"../../../utils/utils\";\nimport { BarcodeScanDialog } from \"./BarcodeScanDialog\";\n\nexport const StructuredAisleControl = ({\n handleDeleteButtonClick,\n handleAisleChange,\n handleSave,\n classes,\n}) => {\n const [scanDialogOpen, setScanDialogOpen] = useState(false);\n const { state, dispatch } = useInboundContext();\n const [barcode, setBarcode] = useState(\"\");\n const {\n currentInventory,\n bayList,\n aisles,\n selectedAisle,\n selectedLocation,\n selectedInventoryItem,\n disableSelection,\n } = state;\n\n const handleScanButtonClick = () => {\n setScanDialogOpen(true);\n };\n\n const handleScanClose = () => {\n setScanDialogOpen(false);\n };\n\n const handleSaveBarcode = async (barcode) => {\n if (barcode) {\n const inventoryItem = { ...selectedInventoryItem, barcode };\n dispatch({ type: \"SET_SELECTED_INVENTORY_ITEM\", payload: inventoryItem });\n setScanDialogOpen(false);\n }\n };\n\n const setQuantity = (value) => {\n if (!value) value = 0;\n const quantity = Number(value);\n const newInventoryItem = {\n ...selectedInventoryItem,\n quantityOnHand: quantity,\n };\n dispatch({\n type: \"SET_SELECTED_INVENTORY_ITEM\",\n payload: newInventoryItem,\n });\n };\n\n const isDeleteButtonDisabled = () => {\n if (\n !isAuthorized(AclType.ASSIGN_LOCATION) ||\n !selectedLocation ||\n !selectedInventoryItem?.id ||\n currentInventory.status === InventoryStatus.UNLOADED\n )\n return true;\n return false;\n };\n\n const isSaveButtonDisabled = useMemo(() => {\n debugger;\n if (\n bayList?.length === 0 ||\n !selectedAisle ||\n !selectedInventoryItem?.quantityOnHand\n )\n return true;\n if (selectedInventoryItem?.status === InventoryStatus.IN_TRANSIT) {\n // item is allocated to location, cannot change location, must be able to place\n return false;\n }\n // selectedInventoryItem?.status !== InventoryStatus.IN_TRANSIT &&\n if (!isAuthorized(AclType.ASSIGN_LOCATION)) {\n return true;\n }\n return !isLocationAvailable(bayList, selectedLocation, currentInventory);\n }, [selectedLocation?.id, selectedInventoryItem?.quantityOnHand, bayList]);\n\n const isQuantityDisabled = () => {\n if (currentInventory.status === InventoryStatus.UNLOADED) return true;\n if (selectedAisle?.locationLoad?.other.selected) return false;\n if (\n !selectedAisle ||\n isQuantityInUnits(currentInventory) ||\n !isAuthorized(AclType.ASSIGN_LOCATION)\n ) {\n return true;\n }\n return false;\n };\n\n const setIsDamaged = (value) => {\n debugger;\n const inventoryItem = selectedInventoryItem\n ? { ...selectedInventoryItem }\n : {};\n if (value) {\n inventoryItem.isDamaged = true;\n inventoryItem.hasException = true;\n inventoryItem.originOfDamage = value;\n } else {\n inventoryItem.isDamaged = false;\n inventoryItem.hasException = false;\n inventoryItem.originOfDamage = \"\";\n }\n dispatch({ type: \"SET_SELECTED_INVENTORY_ITEM\", payload: inventoryItem });\n };\n\n const getSubmitButtonText = () => {\n if (\n !selectedInventoryItem?.id ||\n selectedInventoryItem?.status === InventoryStatus.IN_TRANSIT ||\n selectedInventoryItem?.status === InventoryStatus.ARRIVED\n ) {\n return \"PLACE\";\n }\n return \"SAVE\";\n };\n\n const isAisleDisabled = () => {\n return disableSelection;\n };\n\n return (\n <Grid item container xs={12} lg={12} xl={12} spacing={2}>\n <Grid item xs={6} sm={4} md={4} lg={2}>\n <TextField\n id=\"aisle\"\n label=\"Aisle\"\n variant=\"outlined\"\n select\n size=\"small\"\n disabled={isAisleDisabled()}\n required\n fullWidth\n value={selectedAisle ? selectedAisle.id : \"\"}\n onChange={(evt) => handleAisleChange(evt.target.value)}\n >\n {aisles &&\n [{ id: \"\", value: \"\", name: <span> </span> }, ...aisles].map(\n (itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {itm.name}\n </MenuItem>\n )\n )}\n </TextField>\n </Grid>\n <Grid item xs={6} sm={4} md={4} lg={3}>\n <TextField\n id=\"quantity-delivered\"\n label=\"Quantity\"\n variant=\"outlined\"\n size=\"small\"\n type=\"number\"\n inputProps={{ min: 1 }}\n fullWidth\n disabled={isQuantityDisabled()}\n value={selectedInventoryItem?.quantityOnHand || \"\"}\n onChange={(evt) => setQuantity(evt.target.value)}\n onKeyDown={handleNumberFieldKeyDown}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {getUnitName(currentInventory.inventoryUnits)}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={6} sm={4} md={4} lg={2}>\n {\" \"}\n <TextField\n id=\"damage\"\n label=\"Damaged\"\n variant=\"outlined\"\n select\n size=\"small\"\n fullWidth\n value={\n selectedInventoryItem?.originOfDamage\n ? selectedInventoryItem.originOfDamage\n : \"\"\n }\n onChange={(evt) => setIsDamaged(evt.target.value)}\n >\n {[\n { id: \"\", value: \"\", name: <span> </span> },\n ...originDamageList,\n ].map((itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {itm.name}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n <Grid item xs={4} sm={4} md={4} lg={1}>\n <Button\n variant=\"contained\"\n fullWidth\n className={classes.iconButton}\n onClick={handleScanButtonClick}\n >\n Scan\n </Button>\n </Grid>\n <Grid item xs={4} sm={4} md={4} lg={1}>\n <Button\n fullWidth\n variant=\"contained\"\n className={classes.iconButton}\n disabled={isDeleteButtonDisabled()}\n onClick={handleDeleteButtonClick}\n >\n remove\n </Button>\n </Grid>\n <Grid item xs={4} sm={4} md={4} lg={1}>\n <Button\n fullWidth\n variant=\"contained\"\n color=\"primary\"\n className={classes.iconButton}\n disabled={isSaveButtonDisabled}\n onClick={() => handleSave()}\n >\n {getSubmitButtonText()}\n </Button>\n </Grid>\n {selectedInventoryItem?.barcode && (\n <Grid item xs={12}>\n <Typography variant=\"subtitle1\" color=\"textSecondary\">\n Scanned Barcode: {selectedInventoryItem?.barcode}\n </Typography>\n </Grid>\n )}\n <BarcodeScanDialog\n open={scanDialogOpen}\n onClose={handleScanClose}\n onSave={handleSaveBarcode}\n barcode={barcode}\n setBarcode={setBarcode}\n />\n </Grid>\n );\n};\n","import React from \"react\";\nimport {\n TextField,\n IconButton,\n InputAdornment,\n useMediaQuery,\n Button,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { XIcon, SearchIcon } from \".\";\n\nconst useStyles = makeStyles((theme) => ({\n searchField: {\n minWidth: \"16rem\",\n },\n searchFieldMobile: {\n minWidth: \"8rem\",\n },\n clearButton: {\n marginRight: theme.spacing(-2),\n },\n progress: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 250,\n },\n inputContainer: {\n display: \"flex\",\n },\n searchButton: {\n marginTop: theme.spacing(1),\n marginLeft: theme.spacing(1),\n height: \"2.5rem\",\n },\n}));\n\nconst SearchInput = ({\n term,\n setTerm,\n handleSearch,\n termLength = 0,\n clear,\n}) => {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const classes = useStyles();\n\n const handleSubmit = (evt) => {\n if (evt.key === \"Enter\") {\n handleSearch();\n }\n };\n\n return (\n <div className={classes.inputContainer}>\n <TextField\n id=\"search\"\n name=\"search\"\n size=\"small\"\n variant=\"outlined\"\n margin=\"dense\"\n onChange={(evt) => setTerm(evt.target.value)}\n value={term}\n placeholder=\"Search\"\n className={isSmall ? classes.searchFieldMobile : classes.searchField}\n onKeyDown={handleSubmit}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton disableRipple onClick={clear}>\n <XIcon className={classes.clearButton} />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n {isSmall ? (\n <IconButton\n variant=\"outlined\"\n className={classes.searchButton}\n size=\"large\"\n onClick={handleSearch}\n >\n <SearchIcon fontSize=\"large\" />\n </IconButton>\n ) : (\n <Button\n className={classes.searchButton}\n size=\"large\"\n disableFocusRipple\n onClick={handleSearch}\n startIcon={<SearchIcon />}\n disabled={!term || term.length < termLength}\n >\n Search\n </Button>\n )}\n </div>\n );\n};\n\nexport default SearchInput;\n","import React, { useEffect, useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { searchOutboundShipmentsDropDown } from \"../../../graphql/outbound/custom-queries\";\nimport { getLocation } from \"../../../graphql/queries\";\n\nimport {\n Button,\n Grid,\n TextField,\n MenuItem,\n InputAdornment,\n} from \"@material-ui/core\";\nimport SaveAltOutlinedIcon from \"@material-ui/icons/SaveAltOutlined\";\n\nimport { useNotify } from \"react-admin\";\n\nimport {\n AclType,\n CarrierType,\n InventoryStatus,\n OutboundStatus,\n originDamageList,\n} from \"../../../utils/constants\";\nimport { isAuthorized, logError } from \"../../../utils/appUtils\";\nimport {\n getLocationFullName,\n isTruckToRail,\n} from \"../../../utils/locationUtils\";\nimport { useInboundContext } from \"./context\";\n\nexport const TrackAisleControl = ({ handleSave, classes }) => {\n const { state, dispatch } = useInboundContext();\n const {\n currentInventory,\n selectedInventoryItem,\n selectedOutbound,\n currentShipment,\n disableSelection,\n } = state;\n const [outbounds, setOutbounds] = useState([]);\n const notify = useNotify();\n\n useEffect(() => {\n debugger;\n dispatch({\n type: \"SET_SELECTED_INVENTORY_ITEM\",\n payload: selectedInventoryItem,\n });\n }, []);\n\n useEffect(() => {\n if (isTruckToRail(currentInventory.areaId, currentShipment)) {\n getOutboundData();\n }\n }, [currentInventory, currentShipment]);\n\n const getOutboundData = async () => {\n debugger;\n try {\n const searchInput = {\n filter: {\n carrierType: { eq: CarrierType.RAIL },\n isCollected: { eq: false },\n trackId: { gte: \"\" },\n status: { ne: OutboundStatus.RELEASED },\n },\n limit: 1000,\n };\n let response = await API.graphql(\n graphqlOperation(searchOutboundShipmentsDropDown, searchInput)\n );\n const outbounds = response.data.searchOutboundShipments.items;\n setOutbounds(outbounds);\n if (selectedInventoryItem.outboundShipmentId) {\n const outbound = outbounds.find(\n (itm) => itm.id === selectedInventoryItem.outboundShipmentId\n );\n dispatch({ type: \"SET_SELECTED_OUTBOUND\", payload: outbound });\n }\n } catch (err) {\n logError(\n \"processInboundShipments:TrackAisleControl:getOutbounds\",\n err,\n notify\n );\n }\n };\n\n const setQuantity = (value) => {\n if (!value) value = 0;\n const quantity = Number(value);\n selectedInventoryItem.quantityOnHand = quantity;\n\n // const newInventoryItem = {...selectedInventoryItem, quantityOnHand: quantity};\n dispatch({\n type: \"SET_SELECTED_INVENTORY_ITEM\",\n payload: selectedInventoryItem,\n });\n };\n\n const doHandleSave = async () => {\n await handleSave();\n // handleClose();\n };\n\n const handleKeyDown = (event) => {\n const key = event.key;\n const keyCode = event.keyCode || event.which; // Handle different browser behaviors\n // Allow digits, backspace (8), and delete (46)\n if (!/^\\d$/.test(key) && keyCode !== 8 && keyCode !== 46) {\n event.preventDefault();\n return;\n }\n };\n\n const getQuantity = () => {\n return selectedInventoryItem?.quantityOnHand\n ? selectedInventoryItem.quantityOnHand\n : \"\";\n };\n\n const isSaveButtonDisabled = () => {\n if (!selectedInventoryItem?.quantityOnHand) return true;\n if (\n !isAuthorized(AclType.ASSIGN_LOCATION) &&\n selectedInventoryItem.status !== InventoryStatus.IN_TRANSIT\n ) {\n return true;\n }\n return false;\n };\n\n const isQuantityDisabled = () => {\n if (!isAuthorized(AclType.ASSIGN_LOCATION)) {\n return true;\n }\n return false;\n };\n\n const setIsDamaged = (value) => {\n debugger;\n const inventoryItem = selectedInventoryItem\n ? { ...selectedInventoryItem }\n : {};\n if (value) {\n inventoryItem.isDamaged = true;\n inventoryItem.originOfDamage = value;\n inventoryItem.hasException = true;\n } else {\n inventoryItem.isDamaged = false;\n inventoryItem.originOfDamage = \"\";\n inventoryItem.hasException = false;\n }\n dispatch({ type: \"SET_SELECTED_INVENTORY_ITEM\", payload: inventoryItem });\n };\n\n const handleOutboundChange = async (outboundShipmentId) => {\n debugger;\n const outbound = outbounds.find((itm) => itm.id === outboundShipmentId);\n dispatch({ type: \"SET_SELECTED_OUTBOUND\", payload: outbound });\n const location = await getOutboundLocation(outbound);\n const newInventoryItem = { ...selectedInventoryItem, outboundShipmentId };\n newInventoryItem.inventoryId = currentInventory.id;\n newInventoryItem.areaId = location.areaId;\n newInventoryItem.zoneId = location.zoneId;\n newInventoryItem.aisleId = location.aisleId;\n newInventoryItem.locationId = location.id;\n newInventoryItem.location = location;\n newInventoryItem.locationFullName = getLocationFullName(location);\n dispatch({\n type: \"SET_SELECTED_INVENTORY_ITEM\",\n payload: newInventoryItem,\n });\n };\n\n const getOutboundLocation = async (outboundShipment) => {\n try {\n const response = await API.graphql(\n graphqlOperation(getLocation, { id: outboundShipment.trackId })\n );\n const location = response.data.getLocation;\n return location;\n } catch (err) {\n logError(\n \"processInboundShipments:TrackAisleControl:getOutboundLocation\",\n err,\n notify\n );\n }\n };\n\n return (\n <Grid item container md={12} lg={9} xl={6} spacing={2}>\n {isTruckToRail(currentInventory.areaId, currentShipment) && (\n <Grid item xs={12} sm={3}>\n <TextField\n select\n id=\"outbound\"\n label=\"Outbound\"\n variant=\"outlined\"\n size=\"small\"\n disabled={disableSelection}\n helperText={selectedOutbound?.accountName}\n required\n fullWidth\n value={\n selectedInventoryItem?.outboundShipmentId\n ? selectedInventoryItem.outboundShipmentId\n : \"\"\n }\n onChange={(evt) => handleOutboundChange(evt.target.value)}\n >\n {outbounds &&\n [\n { id: \"\", value: \"\", name: <span> </span> },\n ...outbounds,\n ].map((itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {itm.railCarNumber}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n )}\n <Grid item xs={12} sm={2}>\n <TextField\n id=\"track\"\n label=\"Track\"\n variant=\"outlined\"\n size=\"small\"\n disabled\n fullWidth\n value={\n selectedInventoryItem?.locationFullName\n ? selectedInventoryItem.locationFullName\n : \"\"\n }\n />\n </Grid>\n <Grid item xs={12} sm={3}>\n <TextField\n id=\"quantity-delivered\"\n label=\"Quantity\"\n variant=\"outlined\"\n size=\"small\"\n type=\"number\"\n fullWidth\n inputProps={{ min: 0 }}\n disabled={isQuantityDisabled()}\n value={getQuantity()}\n error={!getQuantity()}\n onChange={(evt) => setQuantity(evt.target.value)}\n onKeyDown={handleKeyDown}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {currentInventory.inventoryUnits}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} sm={2}>\n <TextField\n select\n id=\"damage\"\n label=\"Damaged\"\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={\n selectedInventoryItem?.originOfDamage\n ? selectedInventoryItem.originOfDamage\n : \"\"\n }\n onChange={(evt) => setIsDamaged(evt.target.value)}\n >\n {[\n { id: \"\", value: \"\", name: <span> </span> },\n ...originDamageList,\n ].map((itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {itm.name}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n <Grid item xs={6} sm={2}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={classes.iconButton}\n onClick={() => doHandleSave()}\n disabled={isSaveButtonDisabled()}\n startIcon={<SaveAltOutlinedIcon />}\n >\n {!selectedInventoryItem?.id ||\n selectedInventoryItem?.status === InventoryStatus.IN_TRANSIT\n ? \"place\"\n : \"save\"}\n </Button>\n </Grid>\n </Grid>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n searchInboundShipments,\n searchOutboundShipments,\n} from \"../../../graphql/queries\";\nimport { updateInventorie } from \"../../../graphql/mutations\";\nimport { aisleByActiveByAreaBySortKeyLocations } from \"../../../graphql/reloadyard/custom-queries\";\nimport { updateInboundShipment } from \"../../../graphql/inbound/custom-mutations\";\nimport { updateOutboundShipment } from \"../../../graphql/outbound/custom-mutations\";\nimport {\n Backdrop,\n Button,\n CircularProgress,\n Grid,\n IconButton,\n MenuItem,\n TextField,\n useMediaQuery,\n Divider,\n Box,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { red, grey, green } from \"@material-ui/core/colors\";\nimport SaveAltOutlinedIcon from \"@material-ui/icons/SaveAltOutlined\";\nimport FiberManualRecordIcon from \"@material-ui/icons/FiberManualRecord\";\nimport HighlightOffIcon from \"@material-ui/icons/HighlightOff\";\nimport DragIndicatorIcon from \"@material-ui/icons/DragIndicator\";\nimport ClearIcon from \"@material-ui/icons/Clear\";\nimport SubdirectoryArrowLeftIcon from \"@material-ui/icons/SubdirectoryArrowLeft\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport TrainIcon from \"@material-ui/icons/Train\";\nimport { Confirm, useNotify, useRedirect, Title } from \"react-admin\";\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport {\n AclType,\n AreaType,\n CarrierType,\n InboundState,\n InboundStatus,\n LotType,\n NoteType,\n OutboundStatus,\n} from \"../../../utils/constants\";\nimport { isAuthorized, logError } from \"../../../utils/appUtils\";\nimport {\n getAisleFullName,\n getLocationFullName,\n isTrack,\n sortLinkedCars,\n} from \"../../../utils/locationUtils\";\nimport { format } from \"date-fns\";\nimport { InboundIcon, OutboundIcon } from \"../../../components/common\";\nimport { updateInventoryItemMini } from \"../../../graphql/inventory/custom-mutations\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\n\nconst useStyles = makeStyles((theme) => ({\n trackContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n border: \"1px dashed\",\n borderRadius: theme.spacing(1),\n borderColor: grey[400],\n padding: theme.spacing(1),\n minHeight: theme.spacing(8),\n },\n trackLocation: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n margin: theme.spacing(0.75),\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n border: \"1px solid\",\n borderColor: grey[600],\n borderRadius: theme.spacing(1),\n \"&:hover\": {\n cursor: \"pointer\",\n },\n },\n trackLocationCompleted: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n margin: theme.spacing(0.75),\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n border: \"1px solid\",\n borderColor: green[600],\n borderRadius: theme.spacing(1),\n },\n trackLocationReleased: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n margin: theme.spacing(0.75),\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n border: \"1px solid\",\n borderColor: red[600],\n borderRadius: theme.spacing(1),\n },\n trackLocationCurrent: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n margin: theme.spacing(0.75),\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n border: \"1px solid\",\n borderRadius: theme.spacing(1),\n borderColor: grey[100],\n backgroundColor: grey[600],\n color: theme.palette.getContrastText(grey[600]),\n \"&:hover\": {\n cursor: \"pointer\",\n },\n },\n addButton: {\n marginTop: theme.spacing(1.25),\n },\n carName: {\n display: \"flex\",\n alignItems: \"center\",\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n },\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n greenIcon: {\n color: green[600],\n },\n redIcon: {\n color: red[600],\n },\n greyIcon: {\n color: grey[600],\n },\n whiteIcon: {\n color: grey[100],\n },\n trackControlContainer: {\n display: \"flex\",\n width: \"100%\",\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(1),\n marginBottom: theme.spacing(1),\n },\n}));\n\nexport const TrackLocation = (props) => {\n const [processedCars, setProcessedCars] = useState([]);\n const [newCars, setNewCars] = useState([]);\n const [outboundMap, setOutboundMap] = useState({});\n const [selectedShipment, setSelectedShipment] = useState();\n const [tracks, setTracks] = useState([]);\n const [selectedTrack, setSelectedTrack] = useState();\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [confirmMsg, setConfirmMsg] = useState(\"\");\n const [selectedShipmentIdx, setSelectedShipmentIdx] = useState();\n const [loading, setLoading] = useState(true);\n const {\n currentShipment,\n currentLineItem,\n isValidated,\n setIsValidated,\n readonly,\n } = props;\n const selectedInventoryItem = props.selectedInventoryItem\n ? props.selectedInventoryItem\n : props.location?.state?.selectedInventoryItem;\n const defaultShipmentId = props.location?.state?.defaultShipmentId;\n const redirect = useRedirect();\n const notify = useNotify();\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n useEffect(() => {\n init();\n }, [selectedInventoryItem]);\n\n useEffect(() => {\n getShipments();\n }, [selectedTrack]);\n\n const init = async () => {\n setLoading(true);\n let tracks = null;\n debugger;\n try {\n const area = window.appUser.reloadYard.areas.items.find(\n (itm) => itm.active === \"true\" && itm.areaType === AreaType.TRACK\n );\n if (area) {\n const response = await API.graphql(\n graphqlOperation(aisleByActiveByAreaBySortKeyLocations, {\n areaId: area.id,\n activeSortKey: { beginsWith: { active: \"true\" } },\n limit: 1000,\n })\n );\n tracks = response.data.aisleByActiveByAreaBySortKey.items;\n tracks.forEach((aisle) => {\n aisle.locations.items[0].area = aisle.area;\n aisle.locations.items[0].zone = aisle.zone;\n aisle.locations.items[0].aisle = aisle;\n });\n let selectedTrack = tracks[0];\n if (selectedInventoryItem?.location) {\n selectedTrack = tracks.find(\n (itm) => itm.id === selectedInventoryItem.aisleId\n );\n }\n setSelectedTrack(selectedTrack);\n }\n } catch (err) {\n logError(\"TrackLocation:init\", err, notify);\n } finally {\n setTracks(tracks);\n }\n };\n\n const getShipments = async () => {\n try {\n if (!selectedTrack) return;\n debugger;\n setLoading(true);\n let workingTrack = selectedTrack.locations.items[0];\n\n // Create two promises for inbound and outbound shipments\n let searchInput = {\n filter: {\n carrierType: { eq: CarrierType.RAIL },\n or: [\n { status: { eq: InboundStatus.IN_TRANSIT } },\n { status: { eq: InboundStatus.ARRIVED } },\n { status: { eq: InboundStatus.PLACED } },\n {\n and: [\n { status: { eq: InboundStatus.RELEASED } },\n { isCollected: { eq: false } },\n ],\n },\n ],\n },\n limit: 500,\n };\n const inboundPromise = API.graphql(\n graphqlOperation(searchInboundShipments, searchInput)\n );\n searchInput = {\n filter: {\n carrierType: { eq: CarrierType.RAIL },\n or: [\n { status: { eq: OutboundStatus.PENDING } },\n { status: { eq: OutboundStatus.ARRIVED } },\n { status: { eq: OutboundStatus.LOADED } },\n {\n and: [\n { status: { eq: OutboundStatus.RELEASED } },\n { isCollected: { eq: false } },\n ],\n },\n ],\n },\n limit: 500,\n };\n const outboundPromise = API.graphql(\n graphqlOperation(searchOutboundShipments, searchInput)\n );\n const [inboundResponse, outboundResponse] = await Promise.all([\n inboundPromise,\n outboundPromise,\n ]);\n let inbounds = inboundResponse.data.searchInboundShipments.items;\n let outbounds = outboundResponse.data.searchOutboundShipments.items;\n if (currentShipment) {\n inbounds = inbounds.map((itm) =>\n itm.id === currentShipment.id ? { ...currentShipment, ...itm } : itm\n );\n }\n\n outbounds.forEach((itm) => (outboundMap[itm.id] = itm));\n setOutboundMap(outboundMap);\n\n // get railcars not on track / to be placed dropdown\n let newCarsList = inbounds.concat(outbounds);\n newCarsList = newCarsList.filter((itm) => !itm.trackId);\n newCarsList.sort((a, b) =>\n a.railCarNumber.localeCompare(b.railCarNumber)\n );\n setNewCars([{ id: \"\", railCarNumber: \"\" }, ...newCarsList]);\n\n // get railcars on selected track\n let processedCarsList = inbounds.filter(\n (itm) => itm.trackId === workingTrack.id\n );\n const processedOutbounds = outbounds.filter(\n (itm) => itm.trackId === workingTrack.id\n );\n processedCarsList = processedCarsList.concat(processedOutbounds);\n processedCarsList = sortLinkedCars(processedCarsList);\n setProcessedCars(processedCarsList);\n if (currentShipment) {\n let shipment = newCarsList.find((itm) => itm.id === currentShipment.id);\n if (!shipment)\n shipment = processedCarsList.find(\n (itm) => itm.id === currentShipment.id\n );\n setSelectedShipment(shipment);\n } else if (defaultShipmentId) {\n setSelectedShipment(\n newCarsList.find((itm) => itm.id === defaultShipmentId)\n );\n } else if (selectedInventoryItem) {\n let shipmentCar = processedCarsList.find(\n (itm) =>\n itm.id === selectedInventoryItem.inboundShipmentId ||\n itm.id === selectedInventoryItem.outboundShipmentId\n );\n if (!shipmentCar) {\n shipmentCar = newCarsList.find(\n (itm) =>\n itm.id === selectedInventoryItem.inboundShipmentId ||\n itm.id === selectedInventoryItem.outboundShipmentId\n );\n }\n if (shipmentCar) setSelectedShipment(shipmentCar);\n }\n setLoading(false);\n } catch (err) {\n logError(\"TrackLocation:getShipments\", err, notify);\n }\n };\n\n const processInboundInventories = async (inbound, previousShipmentStatus) => {\n debugger;\n const inventories = inbound.inventories.items;\n let promiseList = [];\n inventories.forEach((inventory) => {\n promiseList = promiseList.concat(\n processInboundInventory(inbound, inventory, previousShipmentStatus)\n );\n });\n return Promise.allSettled(promiseList);\n };\n\n const processInboundInventory = async (\n inbound,\n inventory,\n previousShipmentStatus\n ) => {\n debugger;\n const promiseList = [];\n if (isTrack(inventory.areaId)) {\n const location = selectedTrack.locations.items[0];\n const locationFullName = getLocationFullName(location);\n inventory.aisleList = [selectedTrack.id];\n inventory.zoneId = location.zoneId;\n const historyNote = {\n type: NoteType.SHIPMENT,\n text: `Railcar placed on track ${locationFullName}`,\n date: inbound.updatedAt,\n by: window.appUser?.fullName,\n };\n inventory.history = [...inventory.history, historyNote];\n inventory.inventoryItems.items.forEach((itm) => {\n promiseList.push(\n saveInventoryItem(itm, location, locationFullName, historyNote)\n );\n });\n }\n inventory.lotNumber = inbound.lotNumber;\n\n if (\n isTrack(inventory.areaId) ||\n (previousShipmentStatus !== InboundStatus.PLACED &&\n inbound.status === InboundStatus.PLACED)\n ) {\n promiseList.push(saveInventory(inventory));\n }\n return promiseList;\n };\n\n const processOutboundInventories = async (outbound) => {\n debugger;\n const lineItems = outbound.shipmentLineItems?.items;\n const promiseList = [];\n lineItems?.forEach((itm) => {\n if (\n isTrack(itm.inventory.area) &&\n itm.inventory.outboundShipmentId === outbound.id\n ) {\n itm.inventory.zoneId = selectedTrack.zoneId;\n itm.inventory.aisleId = selectedTrack.id;\n const location = selectedTrack.locations.items[0];\n itm.inventory.locationId = location.id;\n itm.inventory.locationFullName = getLocationFullName(location);\n\n promiseList.push(saveInventory(itm.inventory));\n }\n });\n await Promise.allSettled(promiseList);\n };\n\n const handleTrackChange = (trackId) => {\n setLoading(true);\n setSelectedTrack(tracks.find((itm) => itm.id === trackId));\n };\n\n const isOutbound = (shipment) => (outboundMap[shipment.id] ? true : false);\n\n const addItem = async (idx) => {\n try {\n setLoading(true);\n debugger;\n if (processedCars.length === 0) selectedShipment.previousCar = null;\n else if (idx === -1) {\n processedCars[0].previousCar = selectedShipment.id;\n saveShipment(processedCars[0]);\n } else {\n const topShipment = processedCars[idx];\n selectedShipment.previousCar = topShipment.id;\n if (processedCars.length - 1 > idx) {\n const bottomShipment = processedCars[idx + 1];\n bottomShipment.previousCar = selectedShipment.id;\n saveShipment(bottomShipment);\n }\n }\n if (isTrack(selectedShipment.area))\n selectedShipment.zoneId = selectedTrack.zoneId;\n selectedShipment.trackId = selectedTrack.locations.items[0].id;\n selectedShipment.isCollected = false;\n await processShipment(selectedShipment);\n processedCars.splice(idx === -1 ? 0 : idx + 1, 0, selectedShipment);\n setProcessedCars(sortLinkedCars(processedCars));\n setNewCars(newCars.filter((itm) => itm.id !== selectedShipment.id));\n setSelectedShipment(\"\");\n } catch (err) {\n logError(\"TrackLocation:addItem\", err, notify, redirect);\n } finally {\n setLoading(false);\n }\n };\n\n const processShipment = async (shipment) => {\n debugger;\n const previousShipmentStatus = selectedShipment.status;\n const location = selectedTrack.locations.items[0];\n const locationFullName = getLocationFullName(location);\n const toUpdateShipment = { ...shipment };\n delete toUpdateShipment.seals;\n\n if (outboundMap[toUpdateShipment.id]) {\n if (toUpdateShipment.status === OutboundStatus.PENDING) {\n toUpdateShipment.status = OutboundStatus.ARRIVED;\n if (!toUpdateShipment.arrivalDateTime) {\n toUpdateShipment.arrivalDateTime = new Date();\n }\n }\n const historyNote = {\n type: NoteType.SHIPMENT,\n text: `Railcar placed on track ${locationFullName}`,\n date: new Date(),\n by: window.appUser?.fullName,\n };\n toUpdateShipment.history.push(historyNote);\n\n const response = await saveOutbound(toUpdateShipment);\n const outbound = response.data.updateOutboundShipment;\n await processOutboundInventories(outbound);\n } else {\n if (\n toUpdateShipment.status === InboundStatus.IN_TRANSIT ||\n toUpdateShipment.status === InboundStatus.ARRIVED\n ) {\n toUpdateShipment.status = InboundStatus.PLACED;\n toUpdateShipment.state = InboundState.PROCESS_SHIPMENT;\n if (!toUpdateShipment.placedDateTime) {\n toUpdateShipment.notifyDateTime = toUpdateShipment.notifyDateTime\n ? toUpdateShipment.notifyDateTime\n : new Date();\n toUpdateShipment.placedDateTime = new Date();\n }\n if (\n !toUpdateShipment.lotNumberOverride &&\n toUpdateShipment.lotType === LotType.PERPETUAL\n ) {\n toUpdateShipment.lotNumber =\n toUpdateShipment.account.lotNumberPrefix +\n autogenLotNumber(toUpdateShipment);\n }\n }\n const historyNote = {\n type: NoteType.SHIPMENT,\n text: `Railcar placed on track ${locationFullName}`,\n date: new Date(),\n by: window.appUser?.fullName,\n };\n toUpdateShipment.history.push(historyNote);\n\n const response = await saveInbound(toUpdateShipment);\n const inbound = response.data.updateInboundShipment;\n await processInboundInventories(inbound, previousShipmentStatus);\n }\n };\n\n const saveShipment = async (toUpdateShipment) => {\n if (isOutbound(toUpdateShipment)) await saveOutbound(toUpdateShipment);\n else await saveInbound(toUpdateShipment);\n };\n\n function allowDrop(evt) {\n evt.preventDefault();\n }\n\n function drag(evt, idx) {\n evt.dataTransfer.setData(\"text/plain\", idx);\n // const img = document.createElement(\"img\");\n // img.src = \"http://kryogenix.org/images/hackergotchi-simpler.png\";\n // evt.dataTransfer.setDragImage(img, 50, 50);\n }\n\n function drop(evt, toIdx) {\n evt.preventDefault();\n const data = evt.dataTransfer.getData(\"text\");\n const fromIdx = Number(data);\n const dragShipment = processedCars[fromIdx];\n if (fromIdx === toIdx) return;\n try {\n if (processedCars.length - 1 > fromIdx) {\n const dragBottomShipment = processedCars[fromIdx + 1];\n dragBottomShipment.previousCar = dragShipment.previousCar;\n saveShipment(dragBottomShipment);\n }\n const dropShipment = processedCars[toIdx];\n if (toIdx > fromIdx) {\n // drop from top to bottom\n dragShipment.previousCar = dropShipment.id;\n saveShipment(dragShipment);\n if (processedCars.length - 1 > toIdx) {\n const dropBottomShipment = processedCars[toIdx + 1];\n dropBottomShipment.previousCar = dragShipment.id;\n saveShipment(dropBottomShipment);\n }\n processedCars.splice(fromIdx, 1);\n processedCars.splice(toIdx, 0, dragShipment);\n } else {\n // drop from bottom to top\n dragShipment.previousCar = dropShipment.previousCar;\n dropShipment.previousCar = dragShipment.id;\n saveShipment(dragShipment);\n saveShipment(dropShipment);\n processedCars.splice(toIdx, 0, dragShipment);\n processedCars.splice(fromIdx + 1, 1);\n }\n setProcessedCars(sortLinkedCars(processedCars));\n } catch (err) {\n logError(\"TrackLocation:drop\", err, notify, redirect);\n }\n }\n\n const removeFromTrack = async (idx) => {\n try {\n debugger;\n setLoading(true);\n const toRemoveShipment = processedCars[idx];\n if (idx < processedCars.length - 1) {\n const bottomCar = processedCars[idx + 1];\n bottomCar.previousCar = toRemoveShipment.previousCar;\n saveShipment(bottomCar);\n }\n processedCars.splice(idx, 1);\n setProcessedCars([...processedCars]);\n toRemoveShipment.trackId = null;\n toRemoveShipment.previousCar = null;\n await saveShipment(toRemoveShipment);\n let newCarsList = [...newCars, toRemoveShipment];\n newCarsList.sort((a, b) =>\n a.railCarNumber.localeCompare(b.railCarNumber)\n );\n setNewCars(newCarsList);\n if (currentShipment) {\n setSelectedShipment(toRemoveShipment);\n }\n } catch (err) {\n logError(\"TrackLocation:removeFromTrack\", err, notify, redirect);\n } finally {\n setLoading(false);\n }\n };\n\n const handleDeleteConfirm = (idx) => {\n setSelectedShipmentIdx(idx);\n setConfirmMsg(\n `This will mark railcar ${processedCars[idx].railCarNumber} as collected and permanently remove it from Track Management. Proceed?`\n );\n setDeleteOpen(true);\n };\n\n const handleConfirmClose = () => setDeleteOpen(false);\n\n const deleteItem = async () => {\n setLoading(true);\n try {\n const toDeleteShipment = processedCars[selectedShipmentIdx];\n\n if (selectedShipmentIdx < processedCars.length - 1) {\n const bottomCar = processedCars[selectedShipmentIdx + 1];\n bottomCar.previousCar = toDeleteShipment.previousCar;\n saveShipment(bottomCar);\n }\n debugger;\n processedCars.splice(selectedShipmentIdx, 1);\n setProcessedCars([...processedCars]);\n toDeleteShipment.trackId = null;\n toDeleteShipment.previousCar = null;\n toDeleteShipment.isCollected = true;\n toDeleteShipment.collectedDateTime = new Date().toISOString();\n await saveShipment(toDeleteShipment);\n } catch (err) {\n logError(\"TrackLocation:deleteItem\", err, notify, redirect);\n } finally {\n setLoading(false);\n setDeleteOpen(false);\n setSelectedShipmentIdx(null);\n }\n };\n\n const canAdd = selectedShipment && selectedShipment.id;\n const canDelete = (itm) => itm.status === InboundStatus.RELEASED;\n\n const openShipment = (itm) => {\n if (isOutbound(itm)) {\n redirect(\"/processOutboundShipments/\" + itm.id);\n } else if (itm.state !== InboundState.COMPLETED) {\n redirect(\"/processShipments/\" + itm.id);\n }\n };\n\n const getShipmentClassName = (itm) => {\n if (\n itm.id === defaultShipmentId ||\n itm.id === currentShipment?.id ||\n itm.id === selectedShipment?.id\n )\n return classes.trackLocationCurrent;\n if (itm.status === OutboundStatus.RELEASED)\n return classes.trackLocationReleased;\n if (itm.state === InboundState.COMPLETED)\n return classes.trackLocationCompleted;\n return classes.trackLocation;\n };\n\n const getShipmentDropdownIcon = (shipment) => {\n const iconText = outboundMap[shipment.id]\n ? \"\\u140A\\u140A \"\n : \"\\u1405\\u1405 \";\n if (shipment.id === currentShipment?.id)\n return <span className={classes.whiteIcon}>{iconText}</span>;\n if (shipment.status === InboundStatus.RELEASED)\n return <span className={classes.redIcon}>{iconText}</span>;\n if (shipment.state === InboundState.COMPLETED)\n return <span className={classes.greenIcon}>{iconText}</span>;\n return <span className={classes.greyIcon}>{iconText}</span>;\n };\n\n const getShipmentIcon = (shipment) => {\n if (outboundMap[shipment.id])\n return (\n <>\n <OutboundIcon className={getIconClassName(shipment)} />\n  \n </>\n );\n return (\n <>\n <InboundIcon className={getIconClassName(shipment)} />\n  {\" \"}\n </>\n );\n };\n\n const getIconClassName = (shipment) => {\n if (shipment.id === currentShipment?.id) return classes.whiteIcon;\n if (shipment.status === InboundStatus.RELEASED) return classes.redIcon;\n if (shipment.state === InboundState.COMPLETED) return classes.greenIcon;\n return classes.greyIcon;\n };\n\n const isTrackDisabled = () => {\n if (!isAuthorized(AclType.ASSIGN_LOCATION)) return true;\n return false;\n };\n\n const isCarsDisabled = () => {\n if (currentShipment || defaultShipmentId) return true;\n return false;\n };\n\n return (\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n </Grid>\n {!readonly && (\n <TrackControl\n isTrackDisabled={isTrackDisabled}\n selectedTrack={selectedTrack}\n handleTrackChange={handleTrackChange}\n tracks={tracks}\n isCarsDisabled={isCarsDisabled}\n newCars={newCars}\n getShipmentIcon={getShipmentDropdownIcon}\n classes={classes}\n addItem={addItem}\n canAdd={canAdd}\n selectedShipment={selectedShipment}\n setSelectedShipment={setSelectedShipment}\n />\n )}\n {!readonly && (\n <Grid item xs={12}>\n <Divider />\n </Grid>\n )}\n {readonly ? (\n <TrackViewReadonly\n classes={classes}\n processedCars={processedCars}\n getShipmentClassName={getShipmentClassName}\n getShipmentIcon={getShipmentIcon}\n outboundMap={outboundMap}\n currentShipment={selectedShipment}\n currentLineItem={currentLineItem}\n selectedTrack={selectedTrack}\n isValidated={isValidated}\n setIsValidated={setIsValidated}\n ></TrackViewReadonly>\n ) : (\n <Grid item xs={12}>\n <TrackLegend selectedTrack={currentShipment} />\n <Typography variant=\"overline\" display=\"block\" align=\"center\">\n {selectedTrack\n ? `${getAisleFullName(selectedTrack)} Track Head`\n : \"Track head\"}\n </Typography>\n <div className={classes.trackContainer}>\n {processedCars.map((itm, idx) => (\n <div\n key={itm.id}\n className={getShipmentClassName(itm)}\n draggable={true}\n onDragStart={(evt) => drag(evt, idx)}\n onDragOver={(evt) => allowDrop(evt, idx)}\n onDrop={(evt) => drop(evt, idx)}\n >\n <Typography\n variant=\"body2\"\n className={classes.carName}\n onClick={() => openShipment(itm)}\n >\n {getShipmentIcon(itm)}\n {`${idx + 1}.`} {`${itm.railCarNumber}`}\n </Typography>\n <span>\n {canDelete(itm) && (\n <IconButton onClick={() => handleDeleteConfirm(idx)}>\n <DeleteIcon color=\"error\" />\n </IconButton>\n )}\n <IconButton onClick={() => removeFromTrack(idx)}>\n <ClearIcon />\n </IconButton>\n {isXSmall ? (\n <IconButton disabled={!canAdd} onClick={() => addItem(idx)}>\n <SubdirectoryArrowLeftIcon />\n </IconButton>\n ) : (\n <Button\n disabled={!canAdd}\n startIcon={<SubdirectoryArrowLeftIcon />}\n onClick={() => addItem(idx)}\n >\n Place\n </Button>\n )}\n {!isXSmall && (\n <IconButton>\n <DragIndicatorIcon />\n </IconButton>\n )}\n </span>\n </div>\n ))}\n </div>\n </Grid>\n )}\n <Confirm\n isOpen={deleteOpen}\n loading={loading}\n title=\"Delete Confirmation\"\n content={confirmMsg}\n onConfirm={deleteItem}\n onClose={handleConfirmClose}\n />\n </Grid>\n );\n};\n\nconst TrackLocationContainer = (props) => {\n const returnPath = props.location?.state?.returnPath;\n const redirect = useRedirect();\n\n return (\n <>\n <Title title={<ForceTitle title=\"Track\" />} />\n <CrewCard\n title=\"Track Management\"\n icon={<TrainIcon fontSize=\"large\" />}\n showDivider={false}\n action={\n returnPath && (\n <IconButton edge=\"start\" onClick={() => redirect(returnPath)}>\n <HighlightOffIcon fontSize=\"large\" />\n </IconButton>\n )\n }\n >\n <TrackLocation {...props} />\n </CrewCard>\n </>\n );\n};\n\nconst TrackControl = ({\n isTrackDisabled,\n selectedTrack,\n handleTrackChange,\n tracks,\n isCarsDisabled,\n newCars,\n getShipmentIcon,\n classes,\n addItem,\n canAdd,\n selectedShipment,\n setSelectedShipment,\n}) => {\n return (\n <div className={classes.trackControlContainer}>\n <Grid item container xs={12} md={9} spacing={2}>\n <Grid item xs={12} sm={4}>\n <TextField\n id=\"track\"\n label=\"Track\"\n variant=\"outlined\"\n select\n margin=\"dense\"\n disabled={isTrackDisabled()}\n required\n fullWidth\n value={selectedTrack ? selectedTrack.id : \"\"}\n onChange={(evt) => handleTrackChange(evt.target.value)}\n >\n {tracks.map((track) => (\n <MenuItem key={track.id} value={track.id}>\n {getAisleFullName(track)}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n <Grid item xs={12} sm={4}>\n <Box>\n <TextField\n id=\"newShipments\"\n label=\"Cars\"\n variant=\"outlined\"\n margin=\"dense\"\n select\n fullWidth\n disabled={isCarsDisabled()}\n value={selectedShipment ? selectedShipment : \"\"}\n onChange={(evt) => setSelectedShipment(evt.target.value)}\n >\n {newCars.map((shipment) => (\n <MenuItem key={shipment.id} value={shipment}>\n {!shipment.id ? (\n <span> </span>\n ) : shipment.status === InboundStatus.RELEASED ? (\n <Box display=\"Flex\" alignItems=\"center\">\n {getShipmentIcon(shipment)} {shipment.railCarNumber}\n </Box>\n ) : (\n <Box display=\"Flex\" alignItems=\"center\">\n {getShipmentIcon(shipment)} {shipment.railCarNumber}\n </Box>\n )}\n </MenuItem>\n ))}\n </TextField>\n </Box>\n </Grid>\n <Grid item xs={12} sm={4}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={classes.addButton}\n onClick={() => addItem(-1)}\n disabled={!canAdd}\n startIcon={<SaveAltOutlinedIcon />}\n >\n Place\n </Button>\n </Grid>\n </Grid>\n </div>\n );\n};\n\nconst useStylesLegend = makeStyles((theme) => ({\n greenIcon: {\n color: green[600],\n },\n redIcon: {\n color: red[600],\n },\n greyIcon: {\n color: grey[600],\n },\n whiteIcon: {\n color: grey[100],\n },\n greenCircle: {\n color: green[600],\n width: theme.spacing(3),\n height: theme.spacing(3),\n },\n redCircle: {\n color: red[600],\n width: theme.spacing(3),\n height: theme.spacing(3),\n },\n greyCircle: {\n color: grey[600],\n width: theme.spacing(3),\n height: theme.spacing(3),\n },\n whiteCircle: {\n color: grey[100],\n width: theme.spacing(3),\n height: theme.spacing(3),\n },\n legendContainer: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n marginTop: theme.spacing(1),\n },\n legendContainerMobile: {\n display: \"flex\",\n justifyContent: \"center\",\n },\n legendBox: {\n display: \"flex\",\n alignItems: \"center\",\n marginRight: theme.spacing(2),\n fontSize: 12,\n },\n}));\n\nexport const TrackLegend = ({ selectedTrack }) => {\n const classes = useStylesLegend();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n return (\n <div\n className={\n isSmall ? classes.legendContainerMobile : classes.legendContainer\n }\n >\n <span className={classes.legendBox}>\n <FiberManualRecordIcon className={classes.greenCircle} />\n  Completed\n </span>\n <span className={classes.legendBox}>\n <FiberManualRecordIcon className={classes.greyCircle} />\n  Placed\n </span>\n <span className={classes.legendBox}>\n <FiberManualRecordIcon className={classes.redCircle} />\n  Released\n </span>\n {selectedTrack && (\n <span className={classes.legendBox}>\n <FiberManualRecordIcon className={classes.whiteCircle} />\n  Selected\n </span>\n )}\n </div>\n );\n};\n\nconst TrackViewReadonly = ({\n currentShipment,\n currentLineItem,\n classes,\n processedCars,\n getShipmentClassName,\n getShipmentIcon,\n selectedTrack,\n isValidated,\n setIsValidated,\n}) => {\n const [railCarNumber, setRailCarNumber] = useState(\"\");\n const [validateError, setValidateError] = useState(\"\");\n\n const validateCarNumber = () => {\n debugger;\n if (currentShipment.railCarNumber.toLocaleUpperCase() === railCarNumber) {\n setIsValidated(true);\n setValidateError(\"\");\n } else {\n setValidateError(\"Car number doesn't match shipment car number.\");\n }\n };\n\n const getTrackLocationContent = (itm, idx) => {\n debugger;\n if (\n currentLineItem &&\n currentLineItem.inventory.account.verifyInboundRailCar &&\n !isValidated\n ) {\n if (itm.id === currentShipment?.id) {\n return (\n <Box display=\"flex\" alignItems=\"flex-start\" p={1}>\n <Box component=\"span\" mr={2} flex={2}>\n <TextField\n id=\"railcar-number\"\n label=\"Railcar Number\"\n variant=\"outlined\"\n size=\"small\"\n error={validateError}\n helperText={validateError}\n fullWidth\n value={railCarNumber}\n onChange={(evt) =>\n setRailCarNumber(evt.target.value.trim().toLocaleUpperCase())\n }\n />\n </Box>\n <Box component=\"span\" flex={1} mt={0.25}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={classes.iconButton}\n onClick={() => validateCarNumber()}\n >\n Validate\n </Button>\n </Box>\n </Box>\n );\n }\n }\n\n return (\n <div key={itm.id} className={getShipmentClassName(itm)}>\n <Typography variant=\"body2\" className={classes.carName}>\n {getShipmentIcon(itm)}\n {`${idx + 1}.`} {`${itm.railCarNumber}`}\n </Typography>\n </div>\n );\n };\n\n return (\n <Grid item xs={12}>\n <TrackLegend selectedTrack={currentShipment} />\n <Typography variant=\"overline\" display=\"block\" align=\"center\">\n {selectedTrack\n ? `${getAisleFullName(selectedTrack)} Track Head`\n : \"Track head\"}\n </Typography>\n <div className={classes.trackContainer}>\n {processedCars.map((itm, idx) => getTrackLocationContent(itm, idx))}\n </div>\n </Grid>\n );\n};\n\nexport default TrackLocationContainer;\n\nconst saveInventory = (toUpdateInventory) => {\n toUpdateInventory.locationId = null;\n delete toUpdateInventory.account;\n delete toUpdateInventory.inboundShipment;\n delete toUpdateInventory.outboundShipment;\n delete toUpdateInventory.shipmentLineItems;\n delete toUpdateInventory.reloadYardCommodity;\n delete toUpdateInventory.product;\n delete toUpdateInventory.location;\n delete toUpdateInventory.inventoryItems;\n delete toUpdateInventory.createdAt;\n delete toUpdateInventory.updatedAt;\n\n return API.graphql(\n graphqlOperation(updateInventorie, { input: toUpdateInventory })\n );\n};\n\nconst saveInventoryItem = async (\n inventoryItem,\n location,\n locationFullName,\n historyNote\n) => {\n debugger;\n const toUpdateInventoryItem = { ...inventoryItem, locationFullName };\n toUpdateInventoryItem.zoneId = location.zoneId;\n toUpdateInventoryItem.aisleId = location.aisleId;\n toUpdateInventoryItem.locationId = location.id;\n toUpdateInventoryItem.history = [...inventoryItem.history, historyNote];\n\n delete toUpdateInventoryItem.aisle;\n delete toUpdateInventoryItem.area;\n delete toUpdateInventoryItem.createdAt;\n delete toUpdateInventoryItem.inventory;\n delete toUpdateInventoryItem.location;\n delete toUpdateInventoryItem.seals;\n delete toUpdateInventoryItem.updatedAt;\n delete toUpdateInventoryItem.zone;\n return API.graphql(\n graphqlOperation(updateInventoryItemMini, { input: toUpdateInventoryItem })\n );\n};\n\nconst saveInbound = async (toUpdateShipment) => {\n toUpdateShipment = { ...toUpdateShipment };\n delete toUpdateShipment.account;\n delete toUpdateShipment.area;\n delete toUpdateShipment.createdAt;\n delete toUpdateShipment.inventories;\n delete toUpdateShipment.invoice;\n delete toUpdateShipment.location;\n delete toUpdateShipment.reloadYardCommodity;\n delete toUpdateShipment.seals;\n delete toUpdateShipment.timeslot;\n delete toUpdateShipment.updatedAt;\n delete toUpdateShipment.zone;\n\n const response = await API.graphql(\n graphqlOperation(updateInboundShipment, {\n input: toUpdateShipment,\n })\n );\n return response;\n};\n\nconst saveOutbound = async (toUpdateShipment) => {\n toUpdateShipment = { ...toUpdateShipment };\n delete toUpdateShipment.account;\n delete toUpdateShipment.area;\n delete toUpdateShipment.createdAt;\n delete toUpdateShipment.invoice;\n delete toUpdateShipment.location;\n delete toUpdateShipment.reloadYardCommodity;\n delete toUpdateShipment.seals;\n delete toUpdateShipment.shipmentLineItems;\n delete toUpdateShipment.timeslot;\n delete toUpdateShipment.updatedAt;\n const response = await API.graphql(\n graphqlOperation(updateOutboundShipment, {\n input: toUpdateShipment,\n })\n );\n return response;\n};\n\nconst getPerpetualDate = (placedAt) =>\n format(placedAt ? new Date(placedAt) : new Date(), \"MMdd\");\n\nconst autogenLotNumber = (shipment) => {\n if (shipment.status === InboundStatus.PLACED)\n return getPerpetualDate(shipment.placedDateTime);\n else if (shipment.status === InboundStatus.ARRIVED) return \"TBD\";\n else return \"\";\n};\n","import React, { useState, useMemo } from \"react\";\nimport {\n Typography,\n Grid,\n Box,\n Divider,\n Popover,\n Button,\n Badge,\n} from \"@material-ui/core\";\nimport { deepOrange, grey, green } from \"@material-ui/core/colors\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { useMediaQuery } from \"@material-ui/core\";\nimport {\n getLocationFullName,\n getLocationViewName,\n isBulkLocationAvailable,\n} from \"../../../utils/locationUtils\";\nimport { getUnitName } from \"../../../utils/loadTypeUtils\";\nimport { useInboundContext } from \"./context\";\n\nconst useStyles = makeStyles((theme) => ({\n mapContainer: {\n display: \"flex\",\n justifyContent: \"center\",\n flexWrap: \"wrap\",\n width: \"100%\",\n },\n bayContainer: {\n display: \"flex\",\n justifyContent: \"space-around\",\n border: \"1px solid #b0bec5\",\n borderRadius: theme.spacing(1),\n marginTop: theme.spacing(2),\n padding: theme.spacing(0.5),\n flexWrap: \"wrap\",\n // width: \"100%\",\n },\n locationAvatar: {\n display: \"flex\",\n flex: 1,\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(\n theme.palette.type === \"dark\" ? grey[400] : grey[300]\n ),\n backgroundColor: theme.palette.type === \"dark\" ? grey[400] : grey[300],\n borderColor: theme.palette.type === \"dark\" ? grey[400] : grey[300],\n \"&:hover\": {\n cursor: \"pointer\",\n },\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"3px solid\",\n borderRadius: theme.spacing(0.5),\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n locationUsedAvatar: {\n display: \"flex\",\n flex: 1,\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(\n theme.palette.type === \"dark\" ? grey[400] : grey[300]\n ),\n backgroundColor: theme.palette.type === \"dark\" ? grey[400] : grey[300],\n borderColor:\n theme.palette.type === \"dark\" ? deepOrange[500] : deepOrange[500],\n \"&:hover\": {\n cursor: \"pointer\",\n },\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"3px solid\",\n borderRadius: theme.spacing(0.5),\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n locationUsedAvailableAvatar: {\n display: \"flex\",\n flex: 1,\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(\n theme.palette.type === \"dark\" ? green[600] : green[600]\n ),\n backgroundColor: theme.palette.type === \"dark\" ? green[600] : green[600],\n borderColor:\n theme.palette.type === \"dark\" ? deepOrange[500] : deepOrange[500],\n \"&:hover\": {\n cursor: \"pointer\",\n },\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"3px solid\",\n borderRadius: theme.spacing(0.5),\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n selectedLocationAvatar: {\n display: \"flex\",\n flex: 1,\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n borderColor: deepOrange[500],\n \"&:hover\": {\n cursor: \"pointer\",\n },\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"3px solid\",\n borderRadius: theme.spacing(0.5),\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n locationAvailableAvatar: {\n display: \"flex\",\n flex: 1,\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(green[600]),\n backgroundColor: green[600],\n \"&:hover\": {\n cursor: \"pointer\",\n },\n borderColor: green[600],\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"3px solid\",\n borderRadius: theme.spacing(0.5),\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n redCircle: {\n position: \"absolute\",\n top: theme.spacing(-1.25),\n left: theme.spacing(-1.25),\n width: theme.spacing(3),\n height: theme.spacing(3),\n borderStyle: \"solid\",\n display: \"flex\",\n justifyContent: \"center\",\n alignContent: \"center\",\n borderRadius: theme.spacing(1.5),\n backgroundColor: deepOrange[500],\n color: theme.palette.getContrastText(deepOrange[600]),\n },\n backdrop: {\n zIndex: 1001,\n },\n popvover: {\n padding: theme.spacing(1),\n },\n badge: {\n \"&:hover\": {\n cursor: \"pointer\",\n },\n },\n}));\n\nexport const BulkInboundAisle = () => {\n const { state, dispatch } = useInboundContext();\n const { selectedLocation, disableSelection, bayList, showInventoryQuantity } =\n state;\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleSelectLocation = (location, evt) => {\n if (disableSelection) return;\n evt.preventDefault();\n evt.stopPropagation();\n setAnchorEl(null);\n const payload = location.id === selectedLocation?.id ? null : location;\n dispatch({ type: \"SET_SELECTED_LOCATION\", payload });\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const getLocationCapcityUsedText = (location) => {\n if (!showInventoryQuantity) {\n const bulkCapacity = location.bulkCapacity || 1;\n const val = Number((location.capacityUsed || 0) / bulkCapacity) * 100;\n return `${val.toLocaleString(\"en-US\", { maximumFractionDigits: 2 })}%`;\n }\n const capacityUsed = Number(location.capacityUsed || 0).toLocaleString(\n \"en-US\",\n { maximumFractionDigits: 0 }\n );\n return `${capacityUsed || 0} ${getUnitName(location.bulkUnits)}`;\n };\n\n const getLocationBulkCapacityText = () => {\n const bulkCapacity = Number(\n selectedLocation.bulkCapacity || 0\n ).toLocaleString(\"en-US\", { maximumFractionDigits: 0 });\n return `${bulkCapacity} ${getUnitName(selectedLocation.bulkUnits)}`;\n };\n\n const getTotalPopoverContent = () => {\n return (\n <div\n className={classes.popvover}\n style={!isSmall ? { width: \"24rem\" } : null}\n >\n <Grid container>\n <Grid item xs={12}>\n <Box mb={1}>Location {getLocationFullName(selectedLocation)}</Box>\n </Grid>\n <Grid item xs={12}>\n <Box mb={1}>\n <Divider />\n </Box>\n </Grid>\n <Grid item xs={5}>\n Total capacity\n </Grid>\n <Grid item xs={7}>\n {getLocationBulkCapacityText()}\n </Grid>\n <Grid item xs={5}>\n Capacity used\n </Grid>\n <Grid item xs={7}>\n {getLocationCapcityUsedText(selectedLocation)}\n </Grid>\n {selectedLocation.capacityAllocated > 0 && (\n <>\n <Grid item xs={5}>\n Capacity allocated\n </Grid>\n <Grid item xs={5}>\n {selectedLocation.capacityAllocated}%\n </Grid>\n </>\n )}\n {selectedLocation.productId && (\n <>\n <Grid item xs={5}>\n Account\n </Grid>\n <Grid item xs={7}>\n {selectedLocation.accountName}\n </Grid>\n <Grid item xs={5}>\n Product\n </Grid>\n <Grid item xs={7}>\n {selectedLocation.productName}\n </Grid>\n </>\n )}\n <Grid item xs={12}>\n <Box\n display=\"flex\"\n mt={0}\n alignItems=\"center\"\n justifyContent=\"flex-end\"\n >\n <Button onClick={handleClose}>Close</Button>\n </Box>\n </Grid>\n </Grid>\n </div>\n );\n };\n\n const handleInfoClick = (evt, location) => {\n debugger;\n if (!selectedLocation || location.id !== selectedLocation.id) return;\n evt.preventDefault();\n evt.stopPropagation();\n setAnchorEl(evt.currentTarget);\n };\n\n // if (!selectedAisle?.id || bayList?.length === 0) return <></>;\n const open = Boolean(anchorEl);\n\n return (\n <>\n <Grid item xs={12} style={{ width: \"100%\" }}>\n <div\n className={\n isSmall ? classes.mapContainerMobile : classes.mapContainer\n }\n >\n {selectedLocation && (\n <Popover\n id=\"location-popover\"\n open={open}\n onClose={handleClose}\n anchorEl={anchorEl}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"center\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"center\",\n }}\n >\n <Box p={1}>{getTotalPopoverContent()}</Box>\n </Popover>\n )}\n {bayList.map((bay, bayIdx) => (\n <div display=\"flex\" key={bayIdx}>\n {bay.map((level, idx) => (\n <div className={classes.bayContainer} key={idx}>\n {level.map((location) => {\n return (\n <Location\n key={location.id}\n location={location}\n classes={classes}\n handleSelectLocation={handleSelectLocation}\n getLocationCapcityUsedText={getLocationCapcityUsedText}\n isSmall={isSmall}\n handleInfoClick={handleInfoClick}\n />\n );\n })}\n </div>\n ))}\n </div>\n ))}\n </div>\n </Grid>\n </>\n );\n};\n\nconst Location = ({\n isSmall,\n location,\n classes,\n handleInfoClick,\n handleSelectLocation,\n getLocationCapcityUsedText,\n}) => {\n const { state } = useInboundContext();\n const {\n currentInventory,\n selectedLocation,\n selectedInventoryItem,\n disableSelection,\n searchInventoryItemsMap,\n } = state;\n\n const avatarClassName = useMemo(() => {\n debugger;\n if (selectedLocation?.id === location.id) {\n return classes.selectedLocationAvatar;\n }\n if (disableSelection) return classes.locationAvatar;\n let available = isBulkLocationAvailable(\n location,\n currentInventory,\n selectedInventoryItem.quantityOnHand\n );\n const sameInventory = currentInventory.inventoryItems.items.find(\n (itm) => itm.locationId === location.id\n );\n if (available) {\n if (sameInventory) return classes.locationUsedAvailableAvatar;\n return classes.locationAvailableAvatar;\n }\n if (sameInventory) return classes.locationUsedAvatar;\n return classes.locationAvatar;\n }, [\n location.id,\n selectedLocation?.id,\n selectedInventoryItem?.quantityOnHand,\n ]);\n\n const getBadgeContent = (itm) => {\n if (itm.productId)\n return itm.productName && itm.productName.trim().substring(0, 3) + \"..\";\n return null;\n };\n\n return location.productId ? (\n <Badge\n badgeContent={getBadgeContent(location)}\n className={classes.badge}\n color=\"primary\"\n key={location.id}\n onClick={(evt) => handleInfoClick(evt, location)}\n >\n <div\n className={avatarClassName}\n onClick={(evt) => handleSelectLocation(location, evt)}\n >\n <Typography align=\"center\" variant=\"body2\">\n {getFullName(location)}\n </Typography>\n <Typography align=\"center\" variant=\"body2\">\n {getLocationCapcityUsedText(location)}\n </Typography>\n {searchInventoryItemsMap[location.id] && (\n <Box className={classes.redCircle}>\n {searchInventoryItemsMap[location.id].length}\n </Box>\n )}\n </div>\n </Badge>\n ) : location.id === selectedInventoryItem?.location?.id ? (\n <Badge\n badgeContent={<Typography>?</Typography>}\n className={classes.badge}\n color=\"primary\"\n key={location.id}\n onClick={(evt) => handleInfoClick(evt, location)}\n >\n <div\n className={avatarClassName}\n onClick={(evt) => handleSelectLocation(location, evt)}\n >\n <Typography align=\"center\" variant=\"body2\">\n {getFullName(location, isSmall)}\n </Typography>\n <Typography align=\"center\" variant=\"body2\">\n {getLocationCapcityUsedText(location)}\n </Typography>\n {searchInventoryItemsMap[location.id] && (\n <Box className={classes.redCircle}>\n {searchInventoryItemsMap[location.id].length}\n </Box>\n )}\n </div>\n </Badge>\n ) : (\n <div\n key={location.id}\n className={avatarClassName}\n onClick={(evt) => handleSelectLocation(location, evt)}\n >\n <Typography align=\"center\" variant=\"body2\">\n {getFullName(location, isSmall)}\n </Typography>\n <Typography align=\"center\" variant=\"body2\">\n {getLocationCapcityUsedText(location)}\n </Typography>\n {searchInventoryItemsMap[location.id] && (\n <Box className={classes.redCircle}>\n {searchInventoryItemsMap[location.id].length}\n </Box>\n )}\n </div>\n );\n};\n\nconst getFullName = (location, isSmall, size = 8) => {\n if (!location) return \"\";\n const name = getLocationViewName(location);\n if (!isSmall) return name;\n if (name?.length <= size) return name;\n return `${name}`?.substring(0, size - 3) + \"...\";\n};\n","import React, { useMemo } from \"react\";\nimport {\n Button,\n Grid,\n TextField,\n MenuItem,\n InputAdornment,\n} from \"@material-ui/core\";\nimport SaveAltOutlinedIcon from \"@material-ui/icons/SaveAltOutlined\";\nimport { isAuthorized } from \"../../../utils/appUtils\";\nimport {\n AclType,\n InventoryStatus,\n originDamageList,\n} from \"../../../utils/constants\";\nimport { handleNumberFieldKeyDown } from \"../../../utils/utils\";\nimport { DeleteIcon } from \"../../../components/common\";\nimport { isBulkLocationAvailable } from \"../../../utils/locationUtils\";\nimport { useInboundContext } from \"./context\";\n\nexport const BulkAisleControl = ({\n handleDeleteButtonClick,\n handleAisleChange,\n handleSave,\n classes,\n}) => {\n const { state, dispatch } = useInboundContext();\n const {\n currentInventory,\n aisles,\n selectedAisle,\n selectedLocation,\n selectedInventoryItem,\n disableSelection,\n } = state;\n\n const setQuantity = (value) => {\n if (!value) value = 0;\n const quantity = Number(value);\n const newInventoryItem = {\n ...selectedInventoryItem,\n quantityOnHand: quantity,\n };\n dispatch({\n type: \"SET_SELECTED_INVENTORY_ITEM\",\n payload: newInventoryItem,\n });\n };\n\n const doHandleSave = async () => {\n await handleSave();\n };\n\n const handleDelete = () => {\n handleDeleteButtonClick();\n };\n\n const getQuantity = () => {\n return selectedInventoryItem?.quantityOnHand\n ? selectedInventoryItem.quantityOnHand\n : \"\";\n };\n\n const isDeleteButtonDisabled = () => {\n if (\n !isAuthorized(AclType.ASSIGN_LOCATION) ||\n !selectedLocation ||\n !selectedInventoryItem?.id ||\n currentInventory.status === InventoryStatus.UNLOADED\n )\n return true;\n return false;\n };\n\n const isSaveButtonDisabled = useMemo(() => {\n if (selectedLocation?.position === 2) debugger;\n if (\n !selectedAisle ||\n !selectedLocation ||\n !selectedInventoryItem?.quantityOnHand\n )\n return true;\n if (selectedInventoryItem?.status === InventoryStatus.IN_TRANSIT) {\n // item is allocated to location, cannot change location, must be able to place\n return false;\n }\n // selectedInventoryItem?.status !== InventoryStatus.IN_TRANSIT &&\n if (!isAuthorized(AclType.ASSIGN_LOCATION)) {\n return true;\n }\n return !isBulkLocationAvailable(\n selectedLocation,\n currentInventory,\n selectedInventoryItem.quantityOnHand\n );\n }, [selectedLocation?.id, selectedInventoryItem?.quantityOnHand]);\n\n const isQuantityDisabled = () => {\n if (\n !selectedAisle ||\n !isAuthorized(AclType.ASSIGN_LOCATION) ||\n currentInventory.status === InventoryStatus.UNLOADED\n ) {\n return true;\n }\n return false;\n };\n\n const setIsDamaged = (value) => {\n const inventoryItem = selectedInventoryItem\n ? { ...selectedInventoryItem }\n : {};\n if (value) {\n inventoryItem.isDamaged = true;\n inventoryItem.originOfDamage = value;\n inventoryItem.hasException = true;\n } else {\n inventoryItem.isDamaged = false;\n inventoryItem.originOfDamage = \"\";\n inventoryItem.hasException = false;\n }\n dispatch({ type: \"SET_SELECTED_INVENTORY_ITEM\", payload: inventoryItem });\n };\n\n const isAisleDisabled = () => {\n return disableSelection;\n };\n\n return (\n <Grid item container md={12} lg={9} xl={6} spacing={2}>\n <Grid item xs={12} sm={4} md={2}>\n <TextField\n select\n id=\"aisle\"\n label=\"Aisle\"\n variant=\"outlined\"\n size=\"small\"\n disabled={isAisleDisabled()}\n required\n autoFocus\n fullWidth\n value={selectedAisle ? selectedAisle.id : \"\"}\n onChange={(evt) => handleAisleChange(evt.target.value)}\n >\n {aisles &&\n [{ id: \"\", value: \"\", name: <span> </span> }, ...aisles].map(\n (itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {itm.name}\n </MenuItem>\n )\n )}\n </TextField>\n </Grid>\n <Grid item xs={6} sm={4} md={3}>\n <TextField\n id=\"quantity-delivered\"\n label=\"Quantity\"\n variant=\"outlined\"\n size=\"small\"\n type=\"number\"\n fullWidth\n inputProps={{ min: 1 }}\n disabled={isQuantityDisabled()}\n value={getQuantity()}\n onChange={(evt) => setQuantity(evt.target.value)}\n onKeyDown={handleNumberFieldKeyDown}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {currentInventory.inventoryUnits}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={6} sm={4} md={3}>\n <TextField\n id=\"damage\"\n label=\"Damaged\"\n variant=\"outlined\"\n select\n size=\"small\"\n fullWidth\n value={\n selectedInventoryItem?.originOfDamage\n ? selectedInventoryItem.originOfDamage\n : \"\"\n }\n onChange={(evt) => setIsDamaged(evt.target.value)}\n >\n {[\n { id: \"\", value: \"\", name: <span> </span> },\n ...originDamageList,\n ].map((itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {itm.name}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n <Grid item xs={6} sm={4} md={2}>\n <Button\n variant=\"contained\"\n className={classes.iconButton}\n onClick={handleDelete}\n startIcon={<DeleteIcon />}\n disabled={isDeleteButtonDisabled()}\n >\n remove\n </Button>\n </Grid>\n <Grid item xs={6} sm={4} md={2}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={classes.iconButton}\n onClick={() => doHandleSave()}\n disabled={isSaveButtonDisabled}\n startIcon={<SaveAltOutlinedIcon />}\n >\n {!selectedInventoryItem?.id ||\n selectedInventoryItem?.status === InventoryStatus.IN_TRANSIT\n ? \"place\"\n : \"save\"}\n </Button>\n </Grid>\n </Grid>\n );\n};\n","import React, { useState, useMemo } from \"react\";\nimport {\n Button,\n TextField,\n Typography,\n Grid,\n MenuItem,\n InputAdornment,\n} from \"@material-ui/core\";\nimport { isAuthorized } from \"../../../utils/appUtils\";\nimport {\n AclType,\n InventoryStatus,\n originDamageList,\n} from \"../../../utils/constants\";\nimport { handleNumberFieldKeyDown } from \"../../../utils/utils\";\nimport { useInboundContext } from \"./context\";\nimport { BarcodeScanDialog } from \"./BarcodeScanDialog\";\n\nexport const UnstructuredAisleControl = ({\n handleDeleteButtonClick,\n handleAisleChange,\n handleSave,\n classes,\n}) => {\n const { state, dispatch } = useInboundContext();\n const {\n currentInventory,\n aisles,\n selectedAisle,\n selectedLocation,\n selectedInventoryItem,\n disableSelection,\n } = state;\n const [scanDialogOpen, setScanDialogOpen] = useState(false);\n const [barcode, setBarcode] = useState(\"\");\n const setQuantity = (value) => {\n if (!value) value = 0;\n const quantity = Number(value);\n const newInventoryItem = {\n ...selectedInventoryItem,\n quantityOnHand: quantity,\n };\n dispatch({\n type: \"SET_SELECTED_INVENTORY_ITEM\",\n payload: newInventoryItem,\n });\n };\n\n const doHandleSave = async () => {\n await handleSave();\n };\n\n const handleDelete = () => {\n handleDeleteButtonClick();\n };\n\n const getQuantity = () => {\n return selectedInventoryItem?.quantityOnHand\n ? selectedInventoryItem.quantityOnHand\n : \"\";\n };\n\n const isDeleteButtonDisabled = () => {\n if (\n !isAuthorized(AclType.ASSIGN_LOCATION) ||\n !selectedLocation ||\n !selectedInventoryItem?.id ||\n currentInventory.status === InventoryStatus.UNLOADED\n )\n return true;\n return false;\n };\n\n // replaced with useMemo below - was not being used\n // const isSaveButtonDisabled = () => {\n // if (\n // !selectedAisle ||\n // !selectedLocation ||\n // !selectedInventoryItem?.quantityOnHand\n // )\n // return true;\n // if (selectedInventoryItem?.status === InventoryStatus.IN_TRANSIT) {\n // // item is allocated to location, cannot change location, must be able to place\n // return false;\n // }\n // // selectedInventoryItem?.status !== InventoryStatus.IN_TRANSIT &&\n // if (!isAuthorized(AclType.ASSIGN_LOCATION)) {\n // return true;\n // }\n // return false;\n // };\n const isSaveButtonDisabled = useMemo(() => {\n debugger;\n if (\n !selectedAisle ||\n !selectedLocation ||\n !selectedInventoryItem?.quantityOnHand\n ) {\n return true;\n }\n\n if (selectedInventoryItem?.status === InventoryStatus.IN_TRANSIT) {\n // item is allocated to location, cannot change location, must be able to place\n return false;\n }\n // selectedInventoryItem?.status !== InventoryStatus.IN_TRANSIT &&\n if (!isAuthorized(AclType.ASSIGN_LOCATION)) {\n return true;\n }\n return false;\n }, [selectedLocation?.id, selectedInventoryItem?.quantityOnHand]);\n\n const isQuantityDisabled = () => {\n if (\n !selectedAisle ||\n !isAuthorized(AclType.ASSIGN_LOCATION) ||\n currentInventory.status === InventoryStatus.UNLOADED\n ) {\n return true;\n }\n return false;\n };\n\n const setIsDamaged = (value) => {\n const inventoryItem = selectedInventoryItem\n ? { ...selectedInventoryItem }\n : {};\n if (value) {\n inventoryItem.isDamaged = true;\n inventoryItem.originOfDamage = value;\n inventoryItem.hasException = true;\n } else {\n inventoryItem.isDamaged = false;\n inventoryItem.originOfDamage = \"\";\n inventoryItem.hasException = false;\n }\n dispatch({ type: \"SET_SELECTED_INVENTORY_ITEM\", payload: inventoryItem });\n };\n\n const isAisleDisabled = () => {\n return disableSelection;\n };\n\n const handleScanButtonClick = () => {\n setScanDialogOpen(true);\n };\n\n const handleScanClose = () => {\n setScanDialogOpen(false);\n };\n\n const handleSaveBarcode = async (barcode) => {\n const inventoryItem = { ...selectedInventoryItem, barcode };\n dispatch({ type: \"SET_SELECTED_INVENTORY_ITEM\", payload: inventoryItem });\n setScanDialogOpen(false);\n };\n\n return (\n <Grid item container xs={12} lg={12} xl={12} spacing={2}>\n <Grid item xs={12} sm={4} md={4} lg={2}>\n <TextField\n id=\"aisle\"\n label=\"Aisle\"\n variant=\"outlined\"\n select\n size=\"small\"\n disabled={isAisleDisabled()}\n required\n autoFocus\n fullWidth\n value={selectedAisle ? selectedAisle.id : \"\"}\n onChange={(evt) => handleAisleChange(evt.target.value)}\n >\n {aisles &&\n [{ id: \"\", value: \"\", name: <span> </span> }, ...aisles].map(\n (itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {itm.name}\n </MenuItem>\n )\n )}\n </TextField>\n </Grid>\n <Grid item xs={6} sm={4} md={4} lg={3}>\n <TextField\n id=\"quantity-delivered\"\n label=\"Quantity\"\n variant=\"outlined\"\n size=\"small\"\n type=\"number\"\n fullWidth\n inputProps={{ min: 1 }}\n disabled={isQuantityDisabled()}\n value={getQuantity()}\n onChange={(evt) => setQuantity(evt.target.value)}\n onKeyDown={handleNumberFieldKeyDown}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {currentInventory.inventoryUnits}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={6} sm={4} md={4} lg={2}>\n <TextField\n id=\"damage\"\n label=\"Damaged\"\n variant=\"outlined\"\n select\n size=\"small\"\n fullWidth\n value={\n selectedInventoryItem?.originOfDamage\n ? selectedInventoryItem.originOfDamage\n : \"\"\n }\n onChange={(evt) => setIsDamaged(evt.target.value)}\n >\n {[\n { id: \"\", value: \"\", name: <span> </span> },\n ...originDamageList,\n ].map((itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {itm.name}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n <Grid item xs={4} sm={4} md={4} lg={1}>\n <Button\n fullWidth\n variant=\"contained\"\n className={classes.iconButton}\n onClick={handleScanButtonClick}\n >\n Scan\n </Button>\n </Grid>\n <Grid item xs={4} sm={4} md={4} lg={1}>\n <Button\n fullWidth\n variant=\"contained\"\n className={classes.iconButton}\n disabled={isDeleteButtonDisabled()}\n onClick={handleDelete}\n >\n Remove\n </Button>\n </Grid>\n <Grid item xs={4} sm={4} md={4} lg={1}>\n <Button\n fullWidth\n variant=\"contained\"\n color=\"primary\"\n className={classes.iconButton}\n disabled={isSaveButtonDisabled}\n onClick={() => doHandleSave()}\n >\n {!selectedInventoryItem?.id ||\n selectedInventoryItem?.status === InventoryStatus.IN_TRANSIT\n ? \"place\"\n : \"save\"}\n </Button>\n </Grid>\n {selectedInventoryItem?.barcode && (\n <Grid item xs={12}>\n <Typography variant=\"subtitle1\" color=\"textSecondary\">\n Barcode: {selectedInventoryItem?.barcode}\n </Typography>\n </Grid>\n )}\n <BarcodeScanDialog\n open={scanDialogOpen}\n onClose={handleScanClose}\n onSave={handleSaveBarcode}\n barcode={barcode}\n setBarcode={setBarcode}\n />\n </Grid>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Confirm, useNotify } from \"react-admin\";\nimport { useDispatch } from \"react-redux\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n searchInventorysInbound,\n inventoryItemByLocationByStatusInbound,\n} from \"../../../graphql/inventory/custom-queries\";\nimport { locationByAisleBySortKey } from \"../../../graphql/reloadyard/custom-queries\";\nimport LocationCapacity, {\n StructuredLocationCapacity,\n} from \"../../../components/common/LocationCapacity\";\nimport {\n createInventoryItem,\n updateInventoryItem,\n deleteInventoryItemMini,\n} from \"../../../graphql/inventory/custom-mutations\";\nimport {\n Box,\n Button,\n Grid,\n Backdrop,\n CircularProgress,\n Divider,\n Typography,\n Table,\n TableHead,\n TableBody,\n TableRow,\n TableCell,\n TableContainer,\n useMediaQuery,\n FormControlLabel,\n Switch,\n Dialog,\n DialogContent,\n DialogActions,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { green } from \"@material-ui/core/colors\";\nimport CheckIcon from \"@material-ui/icons/Check\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport FiberManualRecordIcon from \"@material-ui/icons/FiberManualRecord\";\nimport VisibilityIcon from \"@material-ui/icons/Visibility\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n AreaType,\n InventoryStatus,\n LocationType,\n NoteType,\n} from \"../../../utils/constants\";\nimport {\n getLocationFullName,\n isBulkLocation,\n isRailToTrack,\n isTrack,\n isTruckToRail,\n isUnmanagedLocation,\n promiseSetCapacityUsed,\n} from \"../../../utils/locationUtils\";\nimport { getUnitName } from \"../../../utils/loadTypeUtils\";\nimport { getInitQuantityOnHand } from \"../../../utils/utils\";\nimport { StructuredInboundAisle } from \"./StructuredInboundAisle\";\nimport { useInboundContext } from \"./context\";\nimport { StructuredAisleControl } from \"./StructuredAisleControl\";\nimport SearchInput from \"../../../components/common/SearchInput\";\nimport { TrackAisleControl } from \"./TrackAisleControl\";\nimport { TrackLocation } from \"../trackManagement/TrackLocation\";\nimport { isUnmanagedAisle } from \"../../../utils/locationUtils\";\nimport { BulkInboundAisle } from \"./BulkInboundAisle\";\nimport { BulkAisleControl } from \"./BulkAisleControl\";\nimport { UnstructuredAisleControl } from \"./UnstructuredAisleControl\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: 10001,\n },\n iconButton: {\n marginTop: theme.spacing(0.25),\n },\n}));\n\nexport const InboundAisleMap = ({ refreshFn }) => {\n const { state, dispatch, saveInventory } = useInboundContext();\n const {\n currentShipment,\n currentInventory,\n selectedAisle,\n selectedLocation,\n showInventoryQuantity,\n selectedInventoryItem,\n aisles,\n selectedOutbound,\n showCapacityDisplay,\n origInventoryItem,\n disableSelection,\n loading,\n } = state;\n const [locationInventories, setLocationInventories] = useState([]);\n const [isDeleteInventoryItemOpen, setIsDeleteInventoryItemOpen] =\n useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [showInventories, setShowInventories] = useState(false);\n const [isLocationInventoryLoading, setIsLocationInventoryLoading] =\n useState(false);\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const dispatchRa = useDispatch();\n const notify = useNotify();\n const classes = useStyles();\n\n useEffect(() => {\n debugger;\n if (selectedAisle?.id) handleAisleChange(selectedAisle.id);\n }, [selectedAisle?.id]);\n\n useEffect(() => {\n debugger;\n if (selectedAisle) handleLocation();\n }, [selectedLocation?.id]);\n\n const handleLocation = () => {\n debugger;\n if (isTrack(currentInventory.areaId)) return;\n setLocationInventories([]);\n if (selectedLocation) {\n if (selectedInventoryItem?.locationId !== selectedLocation.id) {\n setInventoryItemLocation(selectedLocation, selectedInventoryItem);\n dispatch({\n type: \"SET_SELECTED_INVENTORY_ITEM\",\n payload: selectedInventoryItem,\n });\n }\n if (showLocationInventories()) getLocationInventories();\n } else {\n setInventoryItemLocation({}, selectedInventoryItem);\n dispatch({\n type: \"SET_SELECTED_INVENTORY_ITEM\",\n payload: selectedInventoryItem,\n });\n }\n };\n\n const setInventoryItemLocation = (selectedLocation, inventoryItem) => {\n inventoryItem.areaId = selectedLocation.areaId;\n inventoryItem.zoneId = selectedLocation.zoneId;\n inventoryItem.aisleId = selectedLocation.aisleId;\n inventoryItem.locationId = selectedLocation.id;\n inventoryItem.location = selectedLocation;\n return inventoryItem;\n };\n\n const showLocationInventories = () => {\n return (\n selectedAisle?.id &&\n !isTrack(currentInventory.areaId) &&\n currentInventory.area.areaType !== AreaType.BULK\n );\n };\n\n const handleAisleChange = async (aisleId) => {\n try {\n debugger;\n if (loading) return;\n if (!aisleId || aisles.length === 0) return;\n dispatch({ type: \"SET_LOADING\", payload: true });\n const response = await API.graphql(\n graphqlOperation(locationByAisleBySortKey, { aisleId, limit: 600 })\n );\n const aisle = aisles.find((itm) => itm.id === aisleId);\n if (!aisle) return;\n aisle.locations = response.data.locationByAisleBySortKey.items.filter(\n (itm) => itm.active === \"true\"\n );\n const { showCapacityDisplay, bayList } = setupAisle(aisle);\n let location;\n if (origInventoryItem?.aisleId === aisle.id) {\n location = origInventoryItem.location;\n } else if (isUnmanagedAisle(aisle)) {\n location = aisle.locations[0];\n } else {\n location = null;\n selectedInventoryItem.areaId = null;\n selectedInventoryItem.zoneId = null;\n selectedInventoryItem.aisleId = null;\n selectedInventoryItem.locationId = null;\n }\n let quantityOnHand = selectedInventoryItem.quantityOnHand;\n if (!disableSelection) {\n quantityOnHand = getInitQuantityOnHand(\n currentInventory,\n selectedInventoryItem,\n aisle\n );\n }\n const inventoryItem = {\n ...selectedInventoryItem,\n quantityOnHand,\n location,\n };\n if (location) {\n inventoryItem.areaId = location.areaId;\n inventoryItem.zoneId = location.zoneId;\n inventoryItem.aisleId = location.aisleId;\n inventoryItem.locationId = location.id;\n inventoryItem.location = location;\n }\n const payload = {\n aisle,\n bayList,\n showCapacityDisplay,\n selectedLocation: location,\n selectedInventoryItem: inventoryItem,\n };\n dispatch({ type: \"SET_SELECTED_AISLE\", payload });\n dispatchRa({ type: \"SET_LAST_SELECTED_AISLE\", payload: aisle });\n if (showCapacityDisplay) getShowQuantity();\n } catch (err) {\n logError(\n \"processInboundShipments:InboundAisleMap:handleAisleChange\",\n err,\n notify\n );\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n };\n\n const setupAisle = (aisle) => {\n const bayList = [];\n if (aisle.type === LocationType.UNSTRUCTURED) {\n return { showCapacityDisplay: false, bayList: [null, [aisle.locations]] };\n }\n const capacityTypeMap = {\n pallet: {},\n box: {},\n container: {},\n superSack: {},\n };\n let showRadio = true;\n\n for (let location of aisle.locations) {\n const bay = location.bay;\n if (!bayList[bay]) bayList[bay] = [];\n const level = location.level;\n if (!bayList[bay][level - 1]) bayList[bay][level - 1] = [];\n bayList[bay][level - 1].push(location);\n\n if (location.locationLoad.other.selected) showRadio = false;\n if (location.locationLoad.pallet.selected)\n capacityTypeMap[\"pallet\"][location.locationLoad.pallet.capacity] = true;\n if (location.locationLoad.box.selected)\n capacityTypeMap[\"box\"][location.locationLoad.box.capacity] = true;\n if (location.locationLoad.container.selected)\n capacityTypeMap[\"container\"][\n location.locationLoad.container.capacity\n ] = true;\n if (location.locationLoad.superSack.selected)\n capacityTypeMap[\"superSack\"][\n location.locationLoad.superSack.capacity\n ] = true;\n }\n let showCapacityDisplay = false;\n if (showRadio) {\n const capacityTypeMapValues = Object.values(capacityTypeMap);\n const numberOfCapacities = capacityTypeMapValues.reduce(\n (total, itm) => (total += Object.keys(itm).length > 0 ? 1 : 0),\n 0\n );\n if (numberOfCapacities === 1) showCapacityDisplay = true;\n }\n if (aisle.area.areaType === LocationType.BULK) showCapacityDisplay = true;\n bayList.splice(0, 1);\n for (let bay of bayList) {\n if (!bay || bay.length === 0) continue;\n for (let level of bay) {\n level.sort((a, b) => {\n return a.position - b.position;\n });\n }\n }\n\n return { showCapacityDisplay, bayList };\n };\n\n const setLocationCapacity = async (\n removeFlag = false,\n inventoryItem = selectedInventoryItem\n ) => {\n // TODO: set bulk capacity\n if (isUnmanagedLocation(inventoryItem.location)) return Promise.resolve({});\n debugger;\n const toLocation = inventoryItem.location;\n const inventoryLoadType =\n currentInventory.reloadYardCommodity.commodity.locationLoadType;\n const locationLoadType = toLocation.locationLoad[inventoryLoadType];\n\n if (\n selectedLocation.type === LocationType.BULK ||\n locationLoadType.selected\n ) {\n if (removeFlag) {\n const capacityToRemove =\n selectedLocation.type === LocationType.BULK\n ? inventoryItem.quantityOnHand\n : locationLoadType.capacity;\n\n if (inventoryItem.status === InventoryStatus.IN_TRANSIT) {\n // Preassigned location with a allocated capacity\n toLocation.capacityAllocated =\n toLocation.capacityAllocated - capacityToRemove;\n } else {\n toLocation.capacityUsed = toLocation.capacityUsed - capacityToRemove;\n }\n if (\n selectedLocation.type !== LocationType.BULK &&\n toLocation.capacityUsed === 0\n ) {\n toLocation.productId = null;\n toLocation.productName = null;\n toLocation.accountName = null;\n }\n } else {\n const capacityToAdd =\n selectedLocation.type === LocationType.BULK\n ? selectedInventoryItem.quantityOnHand -\n (origInventoryItem?.quantityOnHand || 0)\n : locationLoadType.capacity;\n\n if (selectedInventoryItem.status === InventoryStatus.IN_TRANSIT) {\n toLocation.capacityAllocated =\n toLocation.capacityAllocated - capacityToAdd;\n }\n toLocation.capacityUsed = toLocation.capacityUsed + capacityToAdd;\n if (selectedLocation.type !== LocationType.BULK) {\n toLocation.productId = currentInventory.productId;\n toLocation.productName = currentInventory.productName;\n toLocation.productName = currentInventory.accountName;\n }\n }\n return promiseSetCapacityUsed(toLocation);\n }\n };\n\n // const handleSaveBelow = async () => {\n // // if (disableSelection) return;\n // const bay = bayList[selectedLocation.bay - 1];\n // const topLocation = bay[bay.length - 1][selectedLocation.position - 1];\n // let levels = bay.filter(level => level[selectedLocation.position - 1].level >= selectedLocation.level);\n // levels = levels.map(level => level.filter(itm => itm.position === selectedLocation.position && itm.id !== topLocation.id));\n // levels = levels.filter(itm => itm.length > 0);\n // if (levels.length > 0) {\n // try {\n // dispatch({type: \"SET_LOADING\", payload: true});\n // const locationToNewLocation = {};\n // const newLocationToLocation = {};\n // for (let level of levels) {\n // for (let location of level) {\n // const newLocation = bay[location.level][location.position - 1];\n // locationToNewLocation[location.id] = {...newLocation};\n // newLocationToLocation[newLocation.id] = {...location};\n // }\n // }\n // let promiseList = Object.keys(locationToNewLocation).map(locationId => {\n // return API.graphql(graphqlOperation(inventoryItemByLocationByStatusLookup, {\n // locationId, status: InventoryStatus.STORED }));\n // })\n // const response = await Promise.allSettled(promiseList);\n // const toUpdateInventoryItems = [];\n // for (let levelInveltoryItems of response) {\n // toUpdateInventoryItems.push(...levelInveltoryItems.value.data.inventoryItemByLocationByStatus.items);\n // }\n // if (!currentInventory.history) currentInventory.history = [];\n // toUpdateInventoryItems.forEach(inventoryItem => {\n // const newLocation = locationToNewLocation[inventoryItem.locationId];\n // inventoryItem.locationId = newLocation.id;\n // inventoryItem.aisleId = newLocation.aisleId;\n // inventoryItem.zoneId = newLocation.zoneId;\n // inventoryItem.areaId = newLocation.areaId;\n // const newLocationFullName = getLocationFullName(newLocation);\n // const historyText = `Moved ${inventoryItem.quantityOnHand} ${getUnitName(currentInventory.inventoryUnits)} ` +\n // `from ${inventoryItem.locationFullName} to ${newLocationFullName}`;\n // const newHistory = {\n // type: NoteType.SHIPMENT,\n // date: new Date(),\n // by: window.appUser?.fullName,\n // text: historyText\n // };\n // currentInventory.history.push(newHistory);\n // inventoryItem.locationFullName = newLocationFullName;\n // });\n // promiseList = toUpdateInventoryItems.map(itm => {\n // return API.graphql(graphqlOperation(updateInventoryItemMini, {input: itm}));\n // });\n // Object.values(locationToNewLocation).map(itm => {\n // const toUpdateLocation = {\n // id: itm.id,\n // aisleId: itm.aisleId,\n // zoneId: itm.zoneId,\n // areaId: itm.areaId,\n // reloadYardId: itm.reloadYardId,\n // sortKey: itm.sortKey,\n // capacityUsed: newLocationToLocation[itm.id].capacityUsed,\n // };\n // return promiseList.push(API.graphql(graphqlOperation(updateLocationMini, {input: toUpdateLocation})));\n // });\n // const results = await Promise.allSettled(promiseList);\n // const resError = results.find(itm => itm.status === \"rejected\");\n // if (resError) {\n // logError(\"processInboundShipments:InboundAisleMap:handleSaveBelow\", resError, notify);\n // }\n // // const quantityOnHand = isQuantityInUnits(currentInventory) ? 1 : \"\";\n // const quantityOnHand = isQuantityInUnits(currentInventory) ? 1 : \"\";\n\n // const inventoryItem = getInitInventoryItem(selectedLocation, quantityOnHand);\n // inventoryItem.areaId = selectedLocation.area ? selectedLocation.area.id : \"\";\n // inventoryItem.zoneId = selectedLocation.zone ? selectedLocation.zone.id : \"\";\n // inventoryItem.aisleId = selectedLocation.aisle ? selectedLocation.aisle.id : \"\";\n // inventoryItem.location = selectedLocation;\n // inventoryItem.locationId = selectedLocation.id;\n // const inventoryLoadType = currentInventory.reloadYardCommodity.commodity.locationLoadType;\n // const toLocationLoadType = selectedLocation.locationLoad[inventoryLoadType];\n // inventoryItem.quantityOnHand = 100 / toLocationLoadType.capacity;\n // handleSave(inventoryItem);\n // debugger;\n // handleAisleChange(selectedAisle.id);\n // } catch (err) {\n // logError(\"processInboundShipments:InboundAisleMap:handleSaveBelow\", err, notify);\n // } finally {\n // dispatch({type: \"SET_LOADING\", payload: false});\n // }\n // }\n // return true;\n // }\n\n const handleSave = async () => {\n debugger;\n const oldStatus = selectedInventoryItem.status;\n let newInventoryItem = { ...selectedInventoryItem };\n if (isBulkLocation(selectedInventoryItem.location)) {\n newInventoryItem.status = InventoryStatus.AGGREGATED;\n } else {\n if (isTrack(currentInventory.areaId)) {\n newInventoryItem.status = InventoryStatus.STORED;\n } else if (selectedInventoryItem.status !== InventoryStatus.STORED) {\n newInventoryItem.status = InventoryStatus.UNLOADED;\n }\n }\n let oldQuantityOnHand;\n if (newInventoryItem.id) {\n oldQuantityOnHand = origInventoryItem.quantityOnHand;\n }\n try {\n dispatch({ type: \"SET_LOADING\", payload: true });\n const promiseList = [];\n promiseList.push(setLocationCapacity(false, newInventoryItem));\n currentInventory.inventoryItems.items =\n currentInventory.inventoryItems.items.map((itm) =>\n itm.id === newInventoryItem.id ? newInventoryItem : itm\n );\n let totalQuantityOnHand = currentInventory.inventoryItems.items.reduce(\n (total, itm) => (total += itm.quantityOnHand),\n 0\n );\n\n if (newInventoryItem.isDamaged) {\n currentInventory.hasException = true;\n currentInventory.isDamaged = true;\n currentInventory.verificationRequired = true;\n } else {\n let isDamaged = false;\n let hasException = false;\n currentInventory.inventoryItems.items.forEach((itm) => {\n if (itm.isDamaged) isDamaged = true;\n if (itm.hasException) hasException = true;\n });\n if (!isDamaged) currentInventory.isDamaged = false;\n if (!hasException) currentInventory.hasException = false;\n }\n let historyText;\n let addHistory = true;\n if (newInventoryItem.id) {\n if (oldStatus === InventoryStatus.IN_TRANSIT) {\n historyText = `Placed ${\n newInventoryItem.quantityOnHand\n } ${getUnitName(\n currentInventory.inventoryUnits\n )} in ${getLocationFullName(newInventoryItem.location)}`;\n } else {\n if (oldQuantityOnHand === newInventoryItem.quantityOnHand)\n addHistory = false;\n else\n historyText = `Quantity changed from ${oldQuantityOnHand} to ${\n newInventoryItem.quantityOnHand\n } ${getUnitName(currentInventory.inventoryUnits)}`;\n }\n if (addHistory) {\n const itemHistory = {\n type: NoteType.SHIPMENT,\n date: new Date(),\n by: window.appUser?.fullName,\n text: historyText,\n };\n newInventoryItem.history.push(itemHistory);\n }\n promiseList.push(doUpdateInventoryItem(newInventoryItem));\n } else {\n totalQuantityOnHand += newInventoryItem.quantityOnHand;\n historyText = `Placed ${newInventoryItem.quantityOnHand} ${getUnitName(\n currentInventory.inventoryUnits\n )} in ${getLocationFullName(newInventoryItem.location)}`;\n const itemHistory = {\n type: NoteType.SHIPMENT,\n date: new Date(),\n by: window.appUser?.fullName,\n text: historyText,\n };\n newInventoryItem.history = [itemHistory];\n promiseList.push(doCreateInventoryItem(newInventoryItem));\n }\n if (addHistory) {\n const newHistory = {\n type: NoteType.SHIPMENT,\n date: new Date(),\n by: window.appUser?.fullName,\n text: historyText,\n };\n currentInventory.history.push(newHistory);\n }\n promiseList.push(saveInventory(currentInventory, totalQuantityOnHand));\n const response = await Promise.all(promiseList);\n const resError = response.find((itm) => itm.status === \"rejected\");\n if (resError) throw resError;\n await refreshFn(true);\n dispatch({ type: \"SET_SELECTED_INVENTORY_ITEM\", payload: null });\n } catch (err) {\n logError(\n \"processInboundShipments:InventoryItems:handleSave:data\",\n newInventoryItem,\n notify\n );\n logError(\n \"processInboundShipments:InventoryItems:handleSave\",\n err,\n notify\n );\n }\n };\n\n const getGeoLocation = (inventoryItem) => {\n if (navigator.geolocation) {\n try {\n navigator.geolocation.getCurrentPosition((position) => {\n if (position) {\n inventoryItem.latitude = position.coords.latitude;\n inventoryItem.longitude = position.coords.longitude;\n // TODO: fix this issue, happens after electedInventoryItem is updated\n // setSelectedInventoryItem({...selectedInventoryItem});\n }\n });\n } catch (err) {\n logError(\n \"processInboundShipments:InboundAisleMap:handleLocation\",\n err,\n notify\n );\n } finally {\n dispatch({\n type: \"SET_SELECTED_INVENTORY_ITEM\",\n payload: inventoryItem,\n });\n }\n }\n };\n\n const doUpdateInventoryItem = async (toUpdateInventoryItem) => {\n debugger;\n toUpdateInventoryItem.locationFullName = getLocationFullName(\n toUpdateInventoryItem.location\n );\n toUpdateInventoryItem = { ...toUpdateInventoryItem };\n if (isTruckToRail(currentInventory.areaId, currentShipment)) {\n toUpdateInventoryItem.quantityCommitted =\n toUpdateInventoryItem.quantityOnHand;\n } else toUpdateInventoryItem.quantityCommitted = 0;\n\n toUpdateInventoryItem.inventoryId = currentInventory.id;\n if (!toUpdateInventoryItem.unloadedBy) {\n toUpdateInventoryItem.unloadedBy = window.appUser.fullName;\n toUpdateInventoryItem.unloadedDateTime = new Date();\n }\n delete toUpdateInventoryItem.aisle;\n delete toUpdateInventoryItem.area;\n delete toUpdateInventoryItem.createdAt;\n delete toUpdateInventoryItem.inventory;\n delete toUpdateInventoryItem.location;\n delete toUpdateInventoryItem.seals;\n delete toUpdateInventoryItem.updatedAt;\n delete toUpdateInventoryItem.zone;\n return API.graphql(\n graphqlOperation(updateInventoryItem, { input: toUpdateInventoryItem })\n );\n };\n\n const doCreateInventoryItem = async (toCreateInventoryItem) => {\n debugger;\n toCreateInventoryItem = { ...toCreateInventoryItem };\n toCreateInventoryItem.inboundShipmentId = currentShipment.id;\n if (isTruckToRail(currentInventory.areaId, currentShipment)) {\n toCreateInventoryItem.quantityCommitted =\n toCreateInventoryItem.quantityOnHand;\n } else toCreateInventoryItem.quantityCommitted = 0;\n toCreateInventoryItem.accountId = currentInventory.accountId;\n toCreateInventoryItem.groups = currentInventory.groups;\n toCreateInventoryItem.owner = currentInventory.owner;\n toCreateInventoryItem.inventoryId = currentInventory.id;\n toCreateInventoryItem.reloadYardId = currentInventory.reloadYardId;\n toCreateInventoryItem.locationFullName = getLocationFullName(\n toCreateInventoryItem.location\n );\n toCreateInventoryItem.unloadedBy = window.appUser.fullName;\n toCreateInventoryItem.unloadedDateTime = new Date();\n delete toCreateInventoryItem.location;\n delete toCreateInventoryItem.inventory;\n delete toCreateInventoryItem.createdAt;\n delete toCreateInventoryItem.updatedAt;\n return API.graphql(\n graphqlOperation(createInventoryItem, { input: toCreateInventoryItem })\n );\n };\n\n const handleDelete = async () => {\n try {\n debugger;\n setIsDeleteInventoryItemOpen(false);\n dispatch({ type: \"SET_LOADING\", payload: true });\n let toDelete = origInventoryItem;\n currentInventory.inventoryItems.items =\n currentInventory.inventoryItems.items.filter(\n (itm) => itm.id !== toDelete.id\n );\n const input = { id: toDelete.id };\n const promiseList = [];\n promiseList.push(setLocationCapacity(true, toDelete));\n promiseList.push(\n API.graphql(graphqlOperation(deleteInventoryItemMini, { input }))\n );\n const quantityOnHand = currentInventory.inventoryItems.items.reduce(\n (total, itm) =>\n (total += itm.id === toDelete.id ? 0 : itm.quantityOnHand),\n 0\n );\n if (currentInventory.status === InventoryStatus.UNLOADED) {\n currentInventory.status = InventoryStatus.ARRIVED;\n }\n const historyText = `Removed ${\n selectedInventoryItem.quantityOnHand\n } ${getUnitName(currentInventory.inventoryUnits)} from ${\n selectedInventoryItem.locationFullName\n }`;\n const newHistory = {\n type: NoteType.SHIPMENT,\n date: new Date(),\n by: window.appUser?.fullName,\n text: historyText,\n };\n if (currentInventory.history) currentInventory.history.push(newHistory);\n else currentInventory.history = [newHistory];\n\n currentInventory.isDamaged = currentInventory.inventoryItems.items.some(\n (itm) => itm.isDamaged\n );\n currentInventory.hasException =\n currentInventory.isDamaged ||\n currentInventory.overShipment ||\n currentInventory.underShipment ||\n currentInventory.otherException;\n currentShipment.hasException = currentInventory.hasException;\n promiseList.push(saveInventory(currentInventory, quantityOnHand));\n await Promise.all(promiseList);\n await refreshFn(true);\n dispatch({ type: \"SET_SELECTED_INVENTORY_ITEM\", payload: null });\n } catch (err) {\n logError(\n \"processInboundShipments:InventoryItems:handleDelete\",\n err,\n notify\n );\n }\n };\n\n const handleClose = () => {\n refreshFn(false);\n };\n\n const getConfirmDialogText = () => {\n if (selectedInventoryItem && selectedInventoryItem.location) {\n return `Are you sure you want to remove ${\n selectedInventoryItem.quantityOnHand\n } ${getUnitName(\n currentInventory.inventoryUnits\n )} from ${getLocationFullName(selectedInventoryItem.location)}`;\n }\n return \"\";\n };\n\n const handleDeleteButtonClick = () => {\n if (\n !currentInventory.inventoryItems.items.find(\n (itm) => itm.locationId === selectedLocation.id\n )\n )\n return;\n setIsDeleteInventoryItemOpen(true);\n };\n\n const getLocationInventories = async () => {\n try {\n if (isLocationInventoryLoading) return;\n setIsLocationInventoryLoading(true);\n const results = await Promise.all([\n API.graphql(\n graphqlOperation(inventoryItemByLocationByStatusInbound, {\n locationId: selectedLocation.id,\n status: { beginsWith: InventoryStatus.IN_TRANSIT },\n })\n ),\n API.graphql(\n graphqlOperation(inventoryItemByLocationByStatusInbound, {\n locationId: selectedLocation.id,\n status: { beginsWith: InventoryStatus.UNLOADED },\n })\n ),\n API.graphql(\n graphqlOperation(inventoryItemByLocationByStatusInbound, {\n locationId: selectedLocation.id,\n status: { beginsWith: InventoryStatus.REVIEW },\n })\n ),\n API.graphql(\n graphqlOperation(inventoryItemByLocationByStatusInbound, {\n locationId: selectedLocation.id,\n status: { beginsWith: InventoryStatus.STORED },\n })\n ),\n ]);\n const inventoryItemsList = [\n ...results[0].data.inventoryItemByLocationByStatus.items,\n ...results[1].data.inventoryItemByLocationByStatus.items,\n ...results[2].data.inventoryItemByLocationByStatus.items,\n ...results[3].data.inventoryItemByLocationByStatus.items,\n ];\n if (inventoryItemsList.length > 0) {\n debugger;\n inventoryItemsList.sort((a, b) => {\n // Sort by accountName ASCENDING\n const accountNameCompare = a.inventory.accountName.localeCompare(\n b.inventory.accountName\n );\n if (accountNameCompare !== 0) return accountNameCompare;\n\n // If accountName is the same, sort by productName ASCENDING\n const productNameNameCompare = a.inventory.productName.localeCompare(\n b.inventory.productName\n );\n if (productNameNameCompare !== 0) return productNameNameCompare;\n\n // If productName is also the same, sort by quantityOnHand DESCENDING\n return b.quantityOnHand - a.quantityOnHand;\n });\n setLocationInventories(inventoryItemsList);\n }\n } catch (error) {\n logError(\"utilization:LocationCard:getInventories\", error, notify);\n } finally {\n setIsLocationInventoryLoading(false);\n }\n };\n\n const isShipmentInventoryItem = (inventoryItem) => {\n return inventoryItem.inventoryId === currentInventory.id;\n };\n\n const searchAisleInventories = async () => {\n try {\n if (searchTerm.length === 0) return;\n dispatch({ type: \"SET_LOADING\", payload: true });\n const searchInput = {\n sort: { field: \"productName\", direction: \"asc\" },\n filter: {\n reloadYardId: { eq: window.appUser.reloadYardId },\n or: [\n { status: { eq: InventoryStatus.STORED } },\n { status: { eq: InventoryStatus.UNLOADED } },\n ],\n aisleList: { match: selectedAisle.id },\n },\n limit: 1000,\n };\n const term = searchTerm.toLowerCase();\n searchInput.filter.or = [\n { productCode: { matchPhrasePrefix: `${term}` } },\n { productCode: { wildcard: `*${term}*` } },\n { productName: { matchPhrasePrefix: `${term}` } },\n { productName: { wildcard: `*${term}*` } },\n { accountName: { matchPhrasePrefix: `${term}` } },\n { accountName: { wildcard: `*${term}*` } },\n { lotNumber: { matchPhrase: `${term}` } },\n { lotNumber: { wildcard: `*${term}*` } },\n { railCarNumber: { matchPhrasePrefix: `${term}` } },\n { railCarNumber: { wildcard: `*${term}*` } },\n { customFields: { matchPhrasePrefix: `${term}` } },\n { customFields: { wildcard: `*${term}*` } },\n ];\n const response = await API.graphql(\n graphqlOperation(searchInventorysInbound, searchInput)\n );\n const data = response.data.searchInventorys.items;\n setupAisleInventoryItems(data);\n } catch (err) {\n logError(\n \"processInboundShipments:InboundAisleMap:showInventory\",\n err,\n notify\n );\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n };\n\n const setupAisleInventoryItems = (inventories) => {\n const aisleInventoryItems = [];\n inventories.forEach((inventory) => {\n const inventoryItems = inventory.inventoryItems.items.filter(\n (itm) => itm.aisleId === selectedAisle.id\n );\n aisleInventoryItems.push(...inventoryItems);\n });\n const searchInventoryItemsMap = {};\n aisleInventoryItems.forEach((itm) => {\n const locationInventories = searchInventoryItemsMap[itm.locationId];\n if (!locationInventories) searchInventoryItemsMap[itm.locationId] = [itm];\n else searchInventoryItemsMap[itm.locationId].push(itm);\n });\n dispatch({\n type: \"SET_AISLE_SEARCH_INVENTORIES\",\n payload: searchInventoryItemsMap,\n });\n };\n\n const clearSearchResults = () => {\n setSearchTerm(\"\");\n dispatch({ type: \"SET_AISLE_SEARCH_INVENTORIES\", payload: {} });\n };\n\n const getShowQuantity = () => {\n let showValue;\n if (\n currentInventory.reloadYardCommodity.commodity.locationLoadType ===\n \"other\"\n ) {\n showValue = false;\n } else {\n showValue = localStorage.getItem(\"locationCapacityDisplay\");\n showValue = showValue !== null ? JSON.parse(showValue) : false;\n }\n dispatch({ type: \"SET_SHOW_QUANTITY\", payload: showValue });\n };\n\n const handleDisplayChange = (evt) => {\n setShowQuantity(evt.target.checked);\n };\n\n const setShowQuantity = (value) => {\n localStorage.setItem(\"locationCapacityDisplay\", value);\n dispatch({ type: \"SET_SHOW_QUANTITY\", payload: value });\n };\n\n const getSwitchLabel = () => {\n if (showInventoryQuantity) return \"Storage units\";\n return \"Percentage\";\n };\n\n const getLocationCapacity = () => {\n if (\n isTrack(currentInventory.area) ||\n currentInventory.area?.areaType === AreaType.BULK\n )\n return null;\n if (selectedAisle?.type === LocationType.UNSTRUCTURED) {\n return (\n <Grid item xs={12}>\n <LocationCapacity aisle={selectedAisle} />\n </Grid>\n );\n } else if (\n selectedAisle &&\n selectedLocation?.locationLoad &&\n selectedLocation?.locationLoad[\"other\"].selected\n ) {\n return (\n <Grid item xs={12}>\n <StructuredLocationCapacity\n location={selectedLocation}\n updateFn={() => handleAisleChange(selectedAisle.id)}\n />\n </Grid>\n );\n }\n return null;\n };\n\n const getSelectedLocationText = () => {\n if (selectedLocation)\n return `Selected location: ${getLocationFullName(selectedLocation)}`;\n // return `Select a location in ${currentShipment.area.name}-${currentShipment.zone.name}`;\n return (\n <Box display=\"flex\" alignItems=\"center\">\n <Typography component=\"span\">Area:  </Typography>\n <Typography component=\"span\">{currentShipment?.area?.name}</Typography>\n   -  \n <Typography component=\"span\">Zone:  </Typography>\n <FiberManualRecordIcon\n style={{ color: currentShipment?.zone?.color }}\n />\n <Typography component=\"span\">{currentShipment?.zone?.name}</Typography>\n </Box>\n );\n };\n\n const getLocationControl = () => {\n if (isTrack(currentInventory.area))\n return (\n <TrackAisleControl\n handleSave={handleSave}\n classes={classes}\n handleClose={handleClose}\n />\n );\n\n if (selectedAisle?.type === LocationType.BULK)\n return (\n <BulkAisleControl\n handleDeleteButtonClick={handleDeleteButtonClick}\n handleSave={handleSave}\n handleAisleChange={handleAisleChange}\n classes={classes}\n handleClose={handleClose}\n />\n );\n\n if (selectedAisle?.type === LocationType.STRUCTURED)\n return (\n <StructuredAisleControl\n handleDeleteButtonClick={handleDeleteButtonClick}\n handleSave={handleSave}\n handleAisleChange={handleAisleChange}\n classes={classes}\n />\n );\n\n return (\n <UnstructuredAisleControl\n handleDeleteButtonClick={handleDeleteButtonClick}\n handleSave={handleSave}\n handleAisleChange={handleAisleChange}\n classes={classes}\n handleClose={handleClose}\n />\n );\n };\n\n const getAisleView = () => {\n if (isTrack(currentShipment.area))\n return (\n <Grid container item xs={12}>\n <TrackLocation\n readonly={true}\n currentShipment={\n isRailToTrack(currentInventory.areaId, currentShipment)\n ? currentShipment\n : selectedOutbound\n }\n selectedInventoryItem={selectedInventoryItem}\n />\n </Grid>\n );\n\n if (!selectedAisle) return;\n\n if (selectedAisle.type === LocationType.BULK)\n return (\n <Grid container item xs={12}>\n <BulkInboundAisle />\n </Grid>\n );\n\n if (selectedAisle.type === LocationType.STRUCTURED)\n return (\n <Grid container item xs={12}>\n <StructuredInboundAisle />\n </Grid>\n );\n\n return null;\n };\n\n const showAisleSearch = () => {\n return (\n selectedAisle?.type === LocationType.STRUCTURED ||\n selectedAisle?.type === LocationType.BULK\n );\n };\n\n return (\n <>\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Box mt={2} mx={2}>\n <Grid container spacing={2}>\n {getLocationControl()}\n {!isTrack(currentInventory.areaId) && (\n <Grid item xs={12}>\n <Typography variant=\"subtitle1\" color=\"textSecondary\">\n {getSelectedLocationText()}\n </Typography>\n </Grid>\n )}\n <Grid item xs={12}>\n <Divider />\n </Grid>\n {!isTrack(currentInventory.area) && (\n <Grid item xs={12}>\n {isSmall ? (\n <>\n {showAisleSearch() && (\n <Grid item xs={12}>\n <SearchInput\n handleSearch={searchAisleInventories}\n clear={clearSearchResults}\n term={searchTerm}\n setTerm={setSearchTerm}\n termLength={3}\n />\n </Grid>\n )}\n {showCapacityDisplay && (\n <Grid item xs={12}>\n <FormControlLabel\n label={getSwitchLabel()}\n control={\n <Switch\n checked={showInventoryQuantity}\n onChange={handleDisplayChange}\n color=\"primary\"\n />\n }\n />\n </Grid>\n )}\n {showLocationInventories() && (\n <Grid item xs={12}>\n <Button\n disabled={\n !selectedLocation || locationInventories.length === 0\n }\n onClick={() => setShowInventories(true)}\n startIcon={<VisibilityIcon />}\n size=\"large\"\n >\n View Inventories\n </Button>\n </Grid>\n )}\n {getLocationCapacity()}\n </>\n ) : (\n <>\n {\n <Grid item xs={12}>\n <Box\n mb={2}\n display=\"flex\"\n style={{ width: \"100%\" }}\n justifyContent={\n selectedAisle?.type === LocationType.UNSTRUCTURED\n ? \"flex-end\"\n : \"space-between\"\n }\n alignItems=\"center\"\n >\n {showAisleSearch() && (\n <SearchInput\n handleSearch={searchAisleInventories}\n clear={clearSearchResults}\n term={searchTerm}\n setTerm={setSearchTerm}\n termLength={3}\n />\n )}\n <Box display=\"flex\">\n {showCapacityDisplay && (\n <FormControlLabel\n label={getSwitchLabel()}\n control={\n <Switch\n checked={showInventoryQuantity}\n onChange={handleDisplayChange}\n color=\"primary\"\n />\n }\n />\n )}\n {showLocationInventories() && (\n <Button\n disabled={\n !selectedLocation ||\n locationInventories.length === 0\n }\n onClick={() => setShowInventories(true)}\n startIcon={<VisibilityIcon />}\n size=\"large\"\n >\n View Inventories\n </Button>\n )}\n </Box>\n </Box>\n </Grid>\n }\n {getLocationCapacity()}\n </>\n )}\n <InventoriesDialog\n currentInventory={currentInventory}\n showInventories={showInventories}\n setShowInventories={setShowInventories}\n isSmall={isSmall}\n selectedLocation={selectedLocation}\n locationInventories={locationInventories}\n isShipmentInventoryItem={isShipmentInventoryItem}\n ></InventoriesDialog>\n </Grid>\n )}\n </Grid>\n </Box>\n {getAisleView()}\n <Box mx={2} mb={1} display={\"flex\"} flex={1} justifyContent={\"flex-end\"}>\n <Button onClick={handleClose}>Close</Button>\n </Box>\n <Confirm\n isOpen={isDeleteInventoryItemOpen}\n title={\"Delete Inventory Item\"}\n content={getConfirmDialogText()}\n onConfirm={handleDelete}\n onClose={() => setIsDeleteInventoryItemOpen(false)}\n />\n </>\n );\n};\n\nconst InventoriesDialog = ({\n currentInventory,\n showInventories,\n setShowInventories,\n isSmall,\n selectedLocation,\n locationInventories,\n isShipmentInventoryItem,\n}) => {\n const getLocationProductName = () => {\n if (selectedLocation?.productId) {\n const locationInventory = locationInventories.find(\n (itm) => itm.id === selectedLocation.productId\n );\n if (locationInventory) {\n return (\n <Box mb={2} mt={0} ml={2}>\n <Typography color=\"textSecondary\" variant=\"subtitle2\">\n Reserved for {locationInventory.productName}\n </Typography>\n </Box>\n );\n }\n }\n return null;\n };\n\n return (\n <Dialog\n open={showInventories}\n onClose={() => setShowInventories(false)}\n fullWidth={true}\n fullScreen={isSmall}\n maxWidth=\"md\"\n >\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n mb={0}\n >\n <Typography variant=\"h6\">\n {`${getLocationFullName(selectedLocation)} inventories`}\n </Typography>\n <CancelOutlinedIcon\n fontSize=\"large\"\n onClick={() => setShowInventories(false)}\n />\n </Box>\n {getLocationProductName()}\n <Box mb={1}></Box>\n <DialogContent>\n {locationInventories.length > 0 && (\n <TableContainer>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Product</TableCell>\n <TableCell>Account</TableCell>\n <TableCell>{isSmall ? \"Onhd\" : \"Quantity Onhand\"}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {locationInventories.map((itm) => (\n <TableRow key={itm.id}>\n <TableCell>\n <Box display=\"flex\" alignItems=\"center\" component=\"span\">\n {isShipmentInventoryItem(itm) ? (\n <CheckIcon\n style={{ marginRight: 4, color: green[500] }}\n fontSize=\"small\"\n />\n ) : (\n <CloseIcon\n style={{ marginRight: 4 }}\n fontSize=\"small\"\n />\n )}\n {itm.inventory.productName}\n </Box>\n </TableCell>\n <TableCell>{itm.inventory.accountName}</TableCell>\n <TableCell>{`${itm.quantityOnHand} ${\n isSmall\n ? \"\"\n : getUnitName(currentInventory.inventoryUnits)\n }`}</TableCell>\n {/* <TableCell align=\"right\">{getInventoryPrimaryField(itm.inventory)}</TableCell> */}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n )}\n {/* {\n showTotalQuantity && <Box mt={1}>\n {`Total quantity: ${totalQuantity} ${loadTypeName}`}\n </Box>\n } */}\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setShowInventories(false)}>Close</Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useRedirect } from \"react-admin\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getInboundShipmentMobile } from \"../../../graphql/inbound/custom-queries\";\nimport { getInventorieInbound } from \"../../../graphql/inventory/custom-queries\";\nimport { getLocation } from \"../../../graphql/queries\";\nimport {\n createInventoryItem,\n updateInventorieInbound,\n} from \"../../../graphql/inventory/custom-mutations\";\nimport {\n Box,\n Button,\n CardActions,\n CircularProgress,\n FormControlLabel,\n Grid,\n IconButton,\n InputAdornment,\n Switch,\n TextField,\n Typography,\n Dialog,\n DialogActions,\n DialogContent,\n useMediaQuery,\n FormControl,\n FormLabel,\n FormGroup,\n Checkbox,\n Backdrop,\n CardContent,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport CheckBoxOutlineBlankOutlinedIcon from \"@material-ui/icons/CheckBoxOutlineBlankOutlined\";\nimport FiberManualRecordIcon from \"@material-ui/icons/FiberManualRecord\";\nimport HighlightOffIcon from \"@material-ui/icons/HighlightOff\";\nimport {\n InboundState,\n InventoryStatus,\n UserType,\n MAX_PHOTO_NUM_INVENTORY,\n} from \"../../../utils/constants\";\nimport { useInboundContext } from \"./context\";\nimport ErrorCard from \"../../../components/ErrorCard\";\nimport { NoteType } from \"../../../utils/constants\";\nimport { handleModelPhotos } from \"../../../utils/fileUtils\";\nimport {\n getLocationFullName,\n isBulkArea,\n isTrack,\n setInventoryAisleList,\n sortByLocation,\n} from \"../../../utils/locationUtils\";\nimport {\n getUnitName,\n isBulkShipment,\n isShippingContainer,\n} from \"../../../utils/loadTypeUtils\";\nimport { updateExceptionQuantity } from \"../../../utils/utils\";\nimport { logError } from \"../../../utils/appUtils\";\nimport InventoryPhotos from \"../../../components/common/InventoryPhotos\";\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport { CustomFieldsMobile } from \"../../../components/common/CustomFields\";\nimport InboundInventoryItems from \"./InboundInventoryItems\";\nimport { ExceptionIcon } from \"../../../components/common\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport { InboundAisleMap } from \"./InboundAisleMap\";\n\nconst useStyles = makeStyles((theme) => ({\n actions: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n avatar: {\n marginTop: theme.spacing(1),\n },\n progress: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 300,\n },\n exceptionContainer: {\n marginBottom: theme.spacing(2),\n },\n backdrop: {\n zIndex: 90001,\n },\n}));\n\nexport const ShipmentItemCard = ({ history, match }) => {\n const { state, dispatch, getAisles, notify } = useInboundContext();\n const {\n currentInventory,\n currentShipment,\n displayState,\n selectedOutbound,\n loading,\n } = state;\n const [invalidIdError, setInvalidIdError] = useState();\n const [note, setNote] = useState();\n const [isExceptionDialogOpen, setIsExceptionDialogOpen] = useState();\n const classes = useStyles();\n const redirect = useRedirect();\n const imgRef = useRef();\n const isComponentMounted = useRef(true);\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n useEffect(() => {\n debugger;\n getInventory(match.params.id);\n return () => (isComponentMounted.current = false);\n }, []);\n\n const getInventory = async (id) => {\n // if (!isComponentMounted.current || loading) return;\n // setLoading(true);\n dispatch({ type: \"SET_LOADING\", payload: true });\n debugger;\n try {\n const response = await API.graphql(\n graphqlOperation(getInventorieInbound, { id })\n );\n const inventory = response.data.getInventorie;\n if (inventory) {\n let inboundShipment = currentShipment;\n if (!currentShipment?.id) {\n const response = await API.graphql(\n graphqlOperation(getInboundShipmentMobile, {\n id: inventory.inboundShipmentId,\n })\n );\n inboundShipment = response.data.getInboundShipment;\n dispatch({ type: \"SET_CURRENT_SHIPPMENT\", payload: inboundShipment });\n }\n\n if (isBulkOrContainer(inventory)) {\n inventory.photos = currentShipment.photos\n ? [...currentShipment.photos]\n : undefined;\n // if bulk commodity stored on track, inventoryItem already placed in railcar.\n // if shipping container, only 1 inventory item.\n const quantityOnHand = inventory.inventoryItems?.items.reduce(\n (total, itm) => (total += itm.quantityOnHand),\n 0\n );\n inventory.quantityDelivered = quantityOnHand\n ? quantityOnHand\n : inventory.quantityShipped;\n }\n if (inventory.inventoryItems.items.length === 0) {\n if (isTrack(inventory.area) && inboundShipment.trackId) {\n const itemStatus = isBulkOrContainer(inventory)\n ? InventoryStatus.STORED\n : InventoryStatus.IN_TRANSIT;\n const inventoryItem = await doCreateInventoryItem(\n inventory,\n itemStatus\n );\n inventory.inventoryItems.items.push(inventoryItem);\n }\n }\n\n sortByLocation(inventory.inventoryItems.items);\n await getAisles(inboundShipment, inventory);\n dispatch({ type: \"SET_CURRENT_INVENTORY\", payload: inventory });\n } else {\n setInvalidIdError(`Inventory ID ${id} doesn't exist.`);\n }\n } catch (err) {\n logError(\"InventoryItemCard:getInventory\", err, notify);\n } finally {\n // setLoading(false);\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n };\n\n const isBulkOrContainer = (inventory) => {\n return (\n isBulkShipment(\n inventory.reloadYardCommodity?.commodity,\n inventory.area\n ) || isShippingContainer(inventory.reloadYardCommodity?.commodity)\n );\n };\n\n const doCreateInventoryItem = async (currentInventory, status) => {\n debugger;\n const toCreateInventoryItem = {\n quantityOnHand: currentInventory.quantityShipped,\n };\n toCreateInventoryItem.quantityCommitted = 0;\n toCreateInventoryItem.inboundShipmentId = currentShipment.id;\n toCreateInventoryItem.groups = currentInventory.groups;\n toCreateInventoryItem.inventoryId = currentInventory.id;\n toCreateInventoryItem.reloadYardId = currentInventory.reloadYardId;\n toCreateInventoryItem.status = status;\n let response = await API.graphql(\n graphqlOperation(getLocation, { id: currentShipment.trackId })\n );\n const location = response.data.getLocation;\n toCreateInventoryItem.locationId = location.id;\n toCreateInventoryItem.aisleId = location.aisleId;\n toCreateInventoryItem.zoneId = location.zoneId;\n toCreateInventoryItem.areaId = location.areaId;\n toCreateInventoryItem.locationFullName = getLocationFullName(location);\n toCreateInventoryItem.history = [\n {\n type: NoteType.SHIPMENT,\n text: `Railcar placed on track ${toCreateInventoryItem.locationFullName}`,\n date: new Date(),\n by: window.appUser.fullName,\n },\n ];\n toCreateInventoryItem.unloadedBy = window.appUser.fullName;\n toCreateInventoryItem.unloadedDateTime = new Date();\n response = await API.graphql(\n graphqlOperation(createInventoryItem, { input: toCreateInventoryItem })\n );\n return response.data.createInventoryItem;\n };\n\n const saveInventory = async (inventory) => {\n debugger;\n const toUpdateInventory = { ...inventory };\n setInventoryAisleList(toUpdateInventory);\n updateExceptionQuantity(toUpdateInventory);\n\n delete toUpdateInventory.account;\n delete toUpdateInventory.inboundShipment;\n delete toUpdateInventory.outboundShipment;\n delete toUpdateInventory.shipmentLineItems;\n delete toUpdateInventory.reloadYardCommodity;\n delete toUpdateInventory.product;\n delete toUpdateInventory.location;\n delete toUpdateInventory.createdAt;\n delete toUpdateInventory.updatedAt;\n delete toUpdateInventory.inventoryItems;\n delete toUpdateInventory.area;\n\n const response = await API.graphql(\n graphqlOperation(updateInventorieInbound, { input: toUpdateInventory })\n );\n const updatedInventory = response.data.updateInventorie;\n debugger;\n dispatch({ type: \"UPDATE_CURRENT_INVENTORY\", payload: updatedInventory });\n };\n\n const handleInventoryPhotos = async (photos, selectedPhotoIdx) => {\n await handleModelPhotos({\n photos,\n model: currentInventory,\n saveFn: saveInventory,\n maxNumOfPhotos: MAX_PHOTO_NUM_INVENTORY,\n selectedPhotoIdx,\n notify,\n redirect,\n });\n };\n\n const setNextState = (currentInventory) => {\n currentInventory.deliveryDateTime = currentShipment.placedDateTime\n ? currentShipment.placedDateTime\n : new Date();\n if (currentInventory.status === InventoryStatus.IN_TRANSIT) {\n currentInventory.status = InventoryStatus.ARRIVED;\n }\n if (currentInventory.status === InventoryStatus.ARRIVED) {\n currentInventory.status = InventoryStatus.UNLOADED;\n } else if (currentInventory.status === InventoryStatus.REVIEW) {\n if (isBulkArea(currentInventory.areaId)) {\n currentInventory.status = InventoryStatus.AGGREGATED;\n } else currentInventory.status = InventoryStatus.STORED;\n }\n };\n\n const rightButtonHandler = () => {\n if (currentInventory.status === InventoryStatus.UNLOADED) handleCancel();\n else handleComplete();\n };\n\n const handleComplete = async () => {\n debugger;\n dispatch({ type: \"SET_LOADING\", payload: true });\n const previousStatus = currentInventory.status;\n\n if (\n previousStatus === InventoryStatus.ARRIVED &&\n currentShipment.account?.inventoryPhotos > 0\n ) {\n if (\n !currentInventory.photos ||\n currentInventory.photos.length < currentShipment.account.inventoryPhotos\n ) {\n notify(\n `${currentShipment.account.inventoryPhotos} photos are required for this inventory.`,\n \"error\"\n );\n dispatch({ type: \"SET_LOADING\", payload: false });\n return;\n }\n }\n\n setNextState(currentInventory);\n if (note) {\n const newNote = {\n date: new Date(),\n by: window.appUser?.fullName,\n type: NoteType.GENERIC,\n text: note,\n };\n if (currentInventory.notes) currentInventory.notes.push(newNote);\n else currentInventory.notes = [newNote];\n }\n if (currentInventory.status !== previousStatus) {\n const newHistory = {\n type: NoteType.SHIPMENT,\n date: new Date(),\n by: window.appUser?.fullName,\n text: `Inventory saved | status: ${currentInventory.status} | quantity received: ${currentInventory.quantityDelivered}`,\n };\n if (currentInventory.history) currentInventory.history.push(newHistory);\n else currentInventory.history = [newHistory];\n }\n\n try {\n await saveInventory(currentInventory);\n goToShipment();\n } catch (err) {\n logError(\n \"processInboundShipments:InventoryItemCard:handleComplete\",\n err,\n notify,\n redirect\n );\n }\n };\n\n const goToShipment = () => {\n clear();\n history.replace(\"/processShipments/\" + currentShipment.id);\n };\n\n const handleSave = async () => {\n debugger;\n try {\n dispatch({ type: \"SET_LOADING\", payload: true });\n if (note) {\n const newNote = {\n date: new Date(),\n by: window.appUser?.fullName,\n type: NoteType.GENERIC,\n text: note,\n };\n if (currentInventory.notes) currentInventory.notes.push(newNote);\n else currentInventory.notes = [newNote];\n }\n await saveInventory(currentInventory);\n goToShipment();\n } catch (err) {\n logError(\n \"processInboundShipments:InventoryItemCard:handleSave\",\n err,\n notify,\n redirect\n );\n }\n };\n\n const isValidQuantity = (value) => {\n if (\n currentInventory.overShipment &&\n value > currentInventory.quantityShipped\n )\n return true;\n if (\n currentInventory.underShipment &&\n value < currentInventory.quantityShipped\n )\n return true;\n if (\n !currentInventory.overShipment &&\n !currentInventory.underShipment &&\n value === currentInventory.quantityShipped\n )\n return true;\n return false;\n };\n\n const handleCancel = () => {\n if (displayState === \"MAP\") {\n dispatch({\n type: \"SET_DISPLAY_STATE\",\n payload: { displayState: \"INVENTORY_ITEMS\" },\n });\n } else {\n goToShipment();\n }\n };\n\n const clear = () => {\n dispatch({ type: \"CLEAR_INVENTORY\" });\n };\n\n const toggleChecked = (value) => {\n currentInventory.verificationRequired = value;\n dispatch({\n type: \"SET_CURRENT_INVENTORY\",\n payload: currentInventory,\n });\n };\n\n const getLeftButtonText = () => {\n let text = \"Save\";\n if (currentInventory.verificationRequired === \"true\") {\n text = \"Request Approval\";\n }\n return text;\n };\n\n const getRightButtonText = () => {\n let text = \"Mark Stored\";\n if (currentInventory.status === InventoryStatus.UNLOADED) {\n text = \"Cancel\";\n } else if (currentShipment?.state === InboundState.PROCESS_INVENTORY_REVIEW)\n text = \"Mark Complete\";\n\n return text;\n };\n\n const isMarkStoredDisabled = () => {\n if (\n loading ||\n !currentInventory.inventoryItems?.items ||\n currentInventory.inventoryItems?.items.length === 0\n )\n return true;\n if (!isValidQuantity(currentInventory.quantityDelivered)) return true;\n if (currentInventory.inventoryItems?.items.length > 0) {\n if (\n currentInventory.inventoryItems.items.find(\n (itm) =>\n itm.status !== InventoryStatus.UNLOADED &&\n itm.status !== InventoryStatus.STORED &&\n itm.status !== InventoryStatus.AGGREGATED\n )\n )\n return true;\n }\n return currentInventory.verificationRequired === \"true\";\n };\n\n const refreshFn = async (refreshInventory) => {\n debugger;\n refreshInventory && (await getInventory(currentInventory.id));\n if (selectedOutbound)\n dispatch({ type: \"SET_SELECTED_OUTBOUND\", payload: null });\n dispatch({\n type: \"SET_DISPLAY_STATE\",\n payload: { displayState: \"INVENTORY_ITEMS\" },\n });\n };\n\n const handleSaveExceptions = (inventory) => {\n debugger;\n if (inventory.hasException) {\n if (!currentShipment.hasException) currentShipment.hasException = true;\n inventory.verificationRequired = true;\n }\n saveInventory(inventory);\n dispatch({\n type: \"UPDATE_CURRENT_SHIPMENT\",\n payload: currentShipment,\n });\n };\n\n const getErrorMessage = () => {\n if (\n currentInventory.quantityDelivered &&\n !isValidQuantity(currentInventory.quantityDelivered)\n ) {\n if (\n currentInventory.quantityDelivered === currentInventory.quantityShipped\n ) {\n if (currentInventory.overShipment) return \"Overshipment not applicable\";\n if (currentInventory.underShipment)\n return \"Undershipment not applicable\";\n }\n if (currentInventory.quantityDelivered > currentInventory.quantityShipped)\n return \"Set overshipment exception\";\n return \"Set undershipment exception\";\n } else {\n return \"\";\n }\n };\n\n const showQuantityShipped = () => {\n if (\n currentInventory?.quantityShipped &&\n (window.appUser.type !== UserType.CREW ||\n isBulkShipment(currentInventory?.reloadYardCommodity?.commodity))\n )\n return true;\n return false;\n };\n\n const getInputProps = () => {\n if (showQuantityShipped())\n return {\n endAdornment: (\n <InputAdornment position=\"end\">\n {`/ ${currentInventory.quantityShipped} ${getUnitName(\n currentInventory.inventoryUnits\n )}`}\n </InputAdornment>\n ),\n };\n return null;\n };\n\n if (invalidIdError) return <ErrorCard error={invalidIdError} />;\n\n return (\n <div ref={imgRef}>\n <CrewCard\n title={currentInventory.productName}\n icon={<CheckBoxOutlineBlankOutlinedIcon />}\n subheader={\n currentInventory.accountName + \" - \" + currentShipment.railCarNumber\n }\n action={\n <IconButton\n edge=\"start\"\n onClick={\n displayState === \"MAP\" ? () => refreshFn(false) : handleCancel\n }\n >\n <HighlightOffIcon fontSize=\"large\" />\n </IconButton>\n }\n showDivider={false}\n >\n {displayState === \"MAP\" ? (\n <InboundAisleMap refreshFn={refreshFn} />\n ) : (\n <>\n <CardContent>\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Grid container spacing={2}>\n <Grid item xs={12} sm={12}>\n <InventoryPhotos\n id={currentInventory.id}\n maxSize={MAX_PHOTO_NUM_INVENTORY}\n saveModel={handleInventoryPhotos}\n photos={\n currentInventory.photos ? currentInventory.photos : []\n }\n imgRef={imgRef}\n hideActions={isBulkOrContainer(currentInventory)}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <Typography>\n Lot number: {currentInventory.lotNumber}\n </Typography>\n </Grid>\n <Grid item xs={12} sm={6}>\n <Typography>\n PO number: {currentInventory.poNumber}\n </Typography>\n </Grid>\n <Grid item xs={12} sm={6}>\n <Typography>{`Area: ${currentShipment?.area?.name}`}</Typography>\n </Grid>\n <Grid item xs={12} sm={6}>\n <Box display=\"flex\" alignItems=\"center\">\n <Typography component=\"span\">Zone: </Typography>\n <FiberManualRecordIcon\n style={{ color: currentShipment?.zone?.color }}\n />\n <Typography component=\"span\">\n {currentShipment?.zone?.name}\n </Typography>\n </Box>\n </Grid>\n {currentInventory.productCode && (\n <Grid item xs={12} sm={6}>\n <Typography>\n Product code: {currentInventory.productCode}\n </Typography>\n </Grid>\n )}\n {currentInventory.customFields && (\n <Grid item xs={12}>\n <CustomFieldsMobile\n recordFields={currentInventory?.customFields}\n accountFields={\n currentShipment.account.inventoryCustomFields\n }\n width={6}\n />\n </Grid>\n )}\n </Grid>\n <Grid container spacing={2}>\n <Grid item xs={6}>\n <FormControlLabel\n control={\n <Switch\n color={\n currentInventory.verificationRequired === \"true\"\n ? \"secondary\"\n : \"default\"\n }\n checked={\n currentInventory.verificationRequired === \"true\"\n }\n onChange={() =>\n toggleChecked(\n currentInventory.verificationRequired === \"true\"\n ? \"false\"\n : \"true\"\n )\n }\n disabled={currentInventory.hasException}\n />\n }\n label={isXSmall ? \"Approval\" : \"Request approval\"}\n />\n </Grid>\n <Grid item xs={6}>\n <Box\n display=\"flex\"\n width=\"100%\"\n justifyContent={isXSmall ? \"flex-end\" : \"flex-start\"}\n >\n <Button\n variant=\"outlined\"\n onClick={() => setIsExceptionDialogOpen(true)}\n startIcon={\n currentInventory.hasException ? <ExceptionIcon /> : null\n }\n >\n {isXSmall ? \"Exceptions\" : \"Report Exception\"}\n </Button>\n </Box>\n </Grid>\n <Grid item xs={12}>\n <Grid container spacing={isXSmall ? 0 : 2}>\n <Grid item xs={12} sm={6} />\n <Grid item xs={12} sm={6}>\n <TextField\n type=\"number\"\n name=\"quantityDelivered\"\n label=\"Quantity Received\"\n id=\"quantity-delivered\"\n margin=\"dense\"\n variant=\"outlined\"\n value={\n currentInventory.quantityDelivered\n ? currentInventory.quantityDelivered\n : \"0\"\n }\n error={\n currentInventory.quantityDelivered\n ? !isValidQuantity(\n currentInventory.quantityDelivered\n )\n : false\n }\n helperText={getErrorMessage()}\n fullWidth\n disabled\n InputProps={getInputProps()}\n />\n </Grid>\n </Grid>\n </Grid>\n {<InboundInventoryItems />}\n <Grid item xs={12}>\n <TextField\n name=\"notes\"\n id=\"notes\"\n label=\"Notes\"\n multiline\n minRows={3}\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n onChange={(evt) => setNote(evt.target.value)}\n />\n </Grid>\n </Grid>\n </CardContent>\n\n <CardActions className={classes.actions}>\n <Button size=\"large\" onClick={handleSave} disabled={loading}>\n {getLeftButtonText()}\n </Button>\n <Button\n size=\"large\"\n onClick={rightButtonHandler}\n disabled={isMarkStoredDisabled()}\n color=\"primary\"\n >\n {getRightButtonText()}\n </Button>\n </CardActions>\n </>\n )}\n {isExceptionDialogOpen && (\n <ExceptionDialog\n currentShipment={currentShipment}\n currentInventory={currentInventory}\n handleSaveExceptions={handleSaveExceptions}\n classes={classes}\n isExceptionDialogOpen={isExceptionDialogOpen}\n setIsExceptionDialogOpen={setIsExceptionDialogOpen}\n ></ExceptionDialog>\n )}\n </CrewCard>\n </div>\n );\n};\n\nconst ExceptionDialog = ({\n currentShipment,\n currentInventory,\n handleSaveExceptions,\n isExceptionDialogOpen,\n setIsExceptionDialogOpen,\n classes,\n}) => {\n const [inventory] = useState({ ...currentInventory });\n const [overShipment, setOverShipment] = useState(inventory.overShipment);\n const [overShipmentNote, setOverShipmentNote] = useState(\n inventory.overShipmentNote\n );\n const [underShipment, setUnderShipment] = useState(inventory.underShipment);\n const [underShipmentNote, setUnderShipmentNote] = useState(\n inventory.underShipmentNote\n );\n const [otherException, setOtherException] = useState(\n inventory.otherException\n );\n const [otherExceptionNote, setOtherExceptionNote] = useState(\n inventory.otherExceptionNote\n );\n const [otherExceptionNoteError, setOtherExceptionNoteError] = useState();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n const handleSave = () => {\n if (!validate()) return;\n debugger;\n inventory.overShipment = overShipment;\n inventory.underShipment = underShipment;\n inventory.otherException = otherException;\n inventory.overShipmentNote = overShipmentNote;\n inventory.underShipmentNote = underShipmentNote;\n inventory.otherExceptionNote = otherExceptionNote;\n if (!overShipment) inventory.overShipmentQuantity = 0;\n if (!underShipment) inventory.underShipmentQuantity = 0;\n if (\n inventory.overShipment ||\n inventory.underShipment ||\n inventory.otherException\n ) {\n inventory.hasException = true;\n } else {\n inventory.hasException = false;\n }\n handleSaveExceptions(inventory);\n setIsExceptionDialogOpen(false);\n };\n\n const validate = () => {\n clear();\n let isValid = true;\n if (otherException) {\n isValid = isValid && otherExceptionNote;\n !otherExceptionNote &&\n setOtherExceptionNoteError(\"A note is required for other exceptions\");\n }\n return isValid;\n };\n\n const handleChange = (evt) => {\n const type = evt.target.name;\n const value = evt.target.checked;\n debugger;\n if (type === \"overShipment\") {\n setOverShipment(value);\n if (value) {\n setUnderShipment(!value);\n setUnderShipmentNote(\"\");\n } else {\n setOverShipmentNote(\"\");\n }\n } else if (type === \"underShipment\") {\n setUnderShipment(value);\n if (value) {\n setOverShipment(!value);\n setOverShipmentNote(\"\");\n } else {\n setUnderShipmentNote(\"\");\n }\n } else {\n setOtherException(value);\n if (!value) {\n setOtherExceptionNote(\"\");\n setOtherExceptionNoteError(\"\");\n }\n }\n };\n\n const clear = () => {\n setOtherExceptionNoteError(\"\");\n };\n\n return (\n <Dialog\n open={isExceptionDialogOpen}\n maxWidth={isSmall ? \"xl\" : \"md\"}\n fullWidth={true}\n >\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">\n {currentShipment.accountName}{\" \"}\n {isSmall ? (\n <div>{currentShipment.railCarNumber}</div>\n ) : (\n ` - ${currentShipment.railCarNumber}`\n )}\n </Typography>\n <CancelOutlinedIcon\n fontSize=\"large\"\n onClick={() => setIsExceptionDialogOpen(false)}\n />\n </Box>\n <DialogContent>\n <FormControl component=\"fieldset\" className={classes.formControl}>\n <FormLabel>Exception Type</FormLabel>\n <FormGroup row={!isSmall}>\n <FormControlLabel\n control={\n <Checkbox\n checked={overShipment}\n onChange={handleChange}\n name=\"overShipment\"\n disabled={\n underShipment ||\n (!overShipment &&\n currentInventory.quantityDelivered <=\n currentInventory.quantityShipped)\n }\n />\n }\n label=\"Overshipment\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={underShipment}\n onChange={handleChange}\n name=\"underShipment\"\n disabled={\n overShipment ||\n (!underShipment &&\n currentInventory.quantityDelivered >=\n currentInventory.quantityShipped)\n }\n />\n }\n label=\"Undershipment\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={otherException}\n onChange={handleChange}\n name=\"other\"\n />\n }\n label=\"Other\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={currentInventory.isDamaged}\n name=\"Damage\"\n disabled\n />\n }\n label=\"Is damaged\"\n />\n </FormGroup>\n </FormControl>\n {overShipment && (\n <div className={classes.exceptionContainer}>\n <Typography>Overshipment</Typography>\n <TextField\n name=\"overShipmentNote\"\n label=\"Notes\"\n multiline\n minRows={3}\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={overShipmentNote}\n onChange={(evt) => setOverShipmentNote(evt.target.value)}\n />\n </div>\n )}\n {underShipment && (\n <div className={classes.exceptionContainer}>\n <Typography>Undershipment</Typography>\n <TextField\n name=\"underShipmentNote\"\n label=\"Notes\"\n multiline\n minRows={3}\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={underShipmentNote}\n onChange={(evt) => setUnderShipmentNote(evt.target.value)}\n />\n </div>\n )}\n {otherException && (\n <div className={classes.exceptionContainer}>\n <Typography>Other</Typography>\n <TextField\n name=\"otherNotes\"\n label=\"Notes\"\n multiline\n minRows={3}\n autoFocus\n error={otherExceptionNoteError}\n helperText={otherExceptionNoteError}\n margin=\"dense\"\n variant=\"outlined\"\n required\n fullWidth\n value={otherExceptionNote}\n onChange={(evt) => setOtherExceptionNote(evt.target.value)}\n />\n </div>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setIsExceptionDialogOpen(false)}>Cancel</Button>\n <Button type=\"submit\" onClick={handleSave} color=\"primary\">\n Submit\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport {\n useMediaQuery,\n Dialog,\n DialogActions,\n DialogContent,\n Box,\n Button,\n Typography,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n Avatar,\n FormControl,\n FormControlLabel,\n CircularProgress,\n Backdrop,\n Radio,\n RadioGroup,\n} from \"@material-ui/core\";\nimport { useNotify } from \"react-admin\";\nimport { logError } from \"../../utils/appUtils\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { grey } from \"@material-ui/core/colors\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport CheckBoxOutlineBlankOutlinedIcon from \"@material-ui/icons/CheckBoxOutlineBlankOutlined\";\nimport CheckBoxOutlinedIcon from \"@material-ui/icons/CheckBoxOutlined\";\n\nconst useStyles = makeStyles((theme) => ({\n avatar: {\n backgroundColor: \"transparent\",\n },\n checkIcon: {\n color: theme.palette.type === \"dark\" ? \"white\" : grey[800],\n },\n backdrop: {\n zIndex: 90001,\n },\n}));\n\nexport const ChecklistDialog = ({\n model,\n saveModel,\n stepName,\n isOpen,\n setOpen,\n title,\n readonly,\n showAllSteps,\n}) => {\n const [checklistItems, setCheklistItems] = useState([]);\n const [showAll, setShowAll] = useState(showAllSteps);\n const [loading, setLoading] = useState(false);\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const classes = useStyles();\n const notify = useNotify();\n\n useEffect(() => {\n if (!model?.id) return;\n setCheklistItems(model.checklist);\n }, [model]);\n\n const handleSave = async () => {\n if (readonly) return;\n try {\n debugger;\n setLoading(true);\n model.checklist = checklistItems;\n await saveModel(model);\n setOpen(false);\n } catch (err) {\n logError(\"ChecklistDialog:handleSave\", err, notify);\n } finally {\n setLoading(false);\n }\n };\n\n const handleComplete = (checklistItem) => {\n if (readonly) return;\n checklistItem.isCompleted = !checklistItem.isCompleted;\n checklistItem.completedBy = window.appUser?.fullName;\n checklistItem.completedAt = new Date();\n setCheklistItems(\n checklistItems.map((itm) =>\n itm.name === checklistItem.name ? checklistItem : itm\n )\n );\n };\n\n const handleCancel = () => {\n setOpen(false);\n };\n\n const getFilteredChecklistItems = () => {\n if (!checklistItems) return [];\n if (showAll === \"all\") return checklistItems;\n const checklist = checklistItems.filter((itm) => itm.stepName === stepName);\n return checklist;\n };\n\n return (\n <Dialog\n open={isOpen}\n maxWidth={isSmall ? null : \"md\"}\n fullWidth={isSmall ? false : true}\n fullScreen={isSmall}\n >\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">{title || \"Checklist\"}</Typography>\n <CancelOutlinedIcon fontSize=\"large\" onClick={handleCancel} />\n </Box>\n <DialogContent>\n {stepName && (\n <Box\n display=\"flex\"\n justifyContent=\"flex-end\"\n onChange={(evt) => setShowAll(evt.target.value)}\n >\n <FormControl component=\"fieldset\">\n <RadioGroup row name=\"show\" defaultValue=\"step\">\n <FormControlLabel\n value=\"step\"\n control={<Radio color=\"primary\" />}\n label={stepName}\n />\n <FormControlLabel\n value=\"all\"\n control={<Radio color=\"primary\" />}\n label=\"All Steps\"\n />\n </RadioGroup>\n </FormControl>\n </Box>\n )}\n <List dense>\n {checklistItems &&\n getFilteredChecklistItems().map((itm) => (\n <ListItem\n divider\n key={itm.name}\n onClick={() => handleComplete(itm)}\n >\n <ListItemAvatar>\n <Avatar className={classes.avatar}>\n {itm.isCompleted ? (\n <CheckBoxOutlinedIcon className={classes.checkIcon} />\n ) : (\n <CheckBoxOutlineBlankOutlinedIcon\n className={classes.checkIcon}\n />\n )}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={itm.name}\n secondary={\n <Typography variant=\"body2\" color=\"textSecondary\">\n {itm.description}\n </Typography>\n }\n />\n </ListItem>\n ))}\n </List>\n </DialogContent>\n <DialogActions>\n <Box>\n <Button onClick={() => handleCancel()}>Cancel</Button>\n <Button\n type=\"submit\"\n onClick={() => handleSave()}\n color=\"primary\"\n disabled={loading}\n >\n Save\n </Button>\n </Box>\n </DialogActions>\n </Dialog>\n );\n};\n","import React, { useState, useRef } from \"react\";\nimport { useNotify } from \"react-admin\";\nimport {\n Box,\n Button,\n Typography,\n Dialog,\n DialogActions,\n DialogContent,\n TextField,\n Grid,\n CircularProgress,\n} from \"@material-ui/core\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport { QrBarcodeScanner } from \"../../../../components/common/QrBarcodeScanner/QrBarcodeScanner\";\nimport { beep } from \"../../../../utils/utils\";\nimport { logError } from \"../../../../utils/appUtils\";\n\nexport const SealsCreate = ({\n cancel,\n saveSeal,\n saving,\n sealsNumbers,\n addedSeals,\n}) => {\n const [isScannerOpen, setIsScannerOpen] = useState(true);\n const [sealBarCode, setSealBarCode] = useState(\"\");\n const [notes, setNotes] = useState(\"\");\n const [sealError, setSealError] = useState(\"\");\n const [isScanned, setIsScanned] = useState(false);\n const [alreadyAddedDialogOpen, setAlreadyAddedDialogOpen] = useState(false);\n const [notInSealsNumberDialogOpen, setNotInSealsNumberDialogOpen] =\n useState(false);\n const notify = useNotify();\n const ref = useRef();\n\n const save = async () => {\n try {\n if (!sealBarCode) {\n setSealError(\"Required\");\n return;\n }\n\n if (addedSeals?.includes(sealBarCode)) {\n setAlreadyAddedDialogOpen(true);\n return;\n }\n\n if (!sealsNumbers?.includes(sealBarCode)) {\n setNotInSealsNumberDialogOpen(true);\n return;\n }\n await saveSeal({ sealBarCode, notes, validated: true, isScanned });\n cancel();\n } catch (error) {\n logError(\"InboundShipments:Seals:SealsCreate:save\", error, notify);\n }\n };\n\n const handleScanSuccess = (barcode) => {\n debugger;\n if (barcode !== ref.current.value) {\n beep(100, 520, 200);\n }\n setSealBarCode(barcode);\n setIsScannerOpen(false);\n setIsScanned(true);\n };\n\n const handleAlreadyAddedDialogClose = () => {\n setAlreadyAddedDialogOpen(false);\n setIsScanned(false);\n setSealBarCode(\"\");\n };\n\n const handleNotInSealsNumberDialogClose = () => {\n setNotInSealsNumberDialogOpen(false);\n setIsScanned(false);\n setSealBarCode(\"\");\n };\n\n const handleSaveAnyway = async () => {\n await saveSeal({\n sealBarCode,\n notes,\n validated: false,\n isScanned,\n });\n handleNotInSealsNumberDialogClose();\n cancel();\n };\n\n const onBarcodeInputChange = (e) => {\n if (e.target.value) {\n setSealError(\"\");\n } else {\n setSealError(\"Required\");\n }\n setSealBarCode(e.target.value);\n setIsScanned(false);\n };\n\n return (\n <>\n <Dialog open={true} fullWidth={true}>\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">Create a Seal</Typography>\n <CancelOutlinedIcon fontSize=\"large\" onClick={cancel} />\n </Box>\n\n <DialogContent>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n {isScannerOpen ? (\n <QrBarcodeScanner onScanSuccess={handleScanSuccess} />\n ) : (\n <Box display=\"flex\" justifyContent=\"center\">\n <Button\n disabled={saving}\n onClick={() => setIsScannerOpen(true)}\n color=\"primary\"\n variant=\"outlined\"\n margin=\"dense\"\n >\n Rescan\n </Button>\n </Box>\n )}\n </Grid>\n <Grid item xs={12}>\n <TextField\n label=\"Seal Barcode\"\n variant=\"outlined\"\n fullWidth\n margin=\"dense\"\n value={sealBarCode}\n onChange={onBarcodeInputChange}\n error={!!sealError}\n helperText={sealError}\n disabled={isScanned}\n inputRef={ref}\n />\n </Grid>\n <Grid item xs={12}>\n <TextField\n label=\"Note\"\n variant=\"outlined\"\n fullWidth\n margin=\"dense\"\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n />\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={cancel} disabled={saving}>\n Cancel\n </Button>\n <Button onClick={save} color=\"primary\" disabled={saving}>\n {saving ? <CircularProgress size={24} /> : \"Save\"}\n </Button>\n </DialogActions>\n </Dialog>\n\n <Dialog\n open={alreadyAddedDialogOpen}\n onClose={handleAlreadyAddedDialogClose}\n >\n <DialogContent>\n <Typography>\n This seal is already added in the inbound shipment. Do you want to\n scan again?\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleAlreadyAddedDialogClose} color=\"primary\">\n Ok\n </Button>\n </DialogActions>\n </Dialog>\n\n <Dialog\n open={notInSealsNumberDialogOpen}\n onClose={handleNotInSealsNumberDialogClose}\n >\n <DialogContent>\n <Typography>\n This seal number does not match our records, do you want to save it\n anyways?\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleNotInSealsNumberDialogClose} disabled={saving}>\n Cancel\n </Button>\n <Button onClick={handleSaveAnyway} color=\"primary\" disabled={saving}>\n Save Anyway\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n","import React, { useState, useEffect } from \"react\";\nimport {\n Box,\n Button,\n List,\n ListItem,\n ListItemText,\n Typography,\n Dialog,\n DialogActions,\n DialogContent,\n CircularProgress,\n ListItemAvatar,\n Avatar,\n ListItemSecondaryAction,\n IconButton,\n Divider,\n Grid,\n} from \"@material-ui/core\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { CheckIcon, XIcon, DeleteIcon } from \"./../../../../components/common\";\nimport { green, red } from \"@material-ui/core/colors\";\nimport clsx from \"clsx\";\n\nconst useStyles = makeStyles((theme) => ({\n iconContainer: {\n height: 38,\n width: 38,\n },\n valid: {\n backgroundColor: green[300],\n },\n inValid: {\n backgroundColor: red[300],\n },\n container: {\n padding: theme.spacing(2),\n },\n deleteButton: {\n color: theme.palette.error.main,\n },\n primaryColor: {\n color: theme.palette.primary.main,\n },\n}));\n\nconst ConfirmDialog = ({ open, onClose, onConfirm, saving, barcode }) => {\n const styles = useStyles();\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogContent>\n <Typography>\n Are you sure you want to delete the seal with barcode{\" \"}\n <span className={styles.primaryColor}>{barcode}</span> ?\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={saving}>\n Cancel\n </Button>\n <Button\n onClick={onConfirm}\n className={styles.deleteButton}\n disabled={saving}\n >\n {saving ? <CircularProgress size={24} /> : \"Delete\"}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport const SealsList = ({\n close,\n handleDelete,\n onPressAddSeal,\n saving,\n sealsList,\n}) => {\n const styles = useStyles();\n const [confirmDialogOpen, setConfirmDialogOpen] = useState(false);\n const [selectedSeal, setSelectedSeal] = useState(null);\n\n useEffect(() => {\n if (!saving) {\n setConfirmDialogOpen(false);\n }\n }, [saving]);\n\n const onDeleteSeal = (seal) => {\n setSelectedSeal(seal);\n setConfirmDialogOpen(true);\n };\n\n const handleConfirmDelete = () => {\n handleDelete(selectedSeal.id);\n };\n\n const handleCancelDelete = () => {\n setSelectedSeal(null);\n setConfirmDialogOpen(false);\n };\n\n const getAvatarClass = (validated) => {\n return clsx(styles.iconContainer, {\n [styles.valid]: validated,\n [styles.inValid]: !validated,\n });\n };\n\n const getListItem = (id, validated, barcode, description, idx) => {\n return (\n <div key={id}>\n <ListItem>\n <ListItemAvatar>\n <Avatar className={getAvatarClass(validated)}>\n {validated ? <CheckIcon fontSize=\"small\" /> : <XIcon />}\n </Avatar>\n </ListItemAvatar>\n <ListItemText primary={barcode} secondary={description} />\n <ListItemSecondaryAction>\n <IconButton onClick={() => onDeleteSeal({ id, barcode })}>\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n {idx < sealsList.length - 1 ? <Divider /> : null}\n </div>\n );\n };\n\n return (\n <>\n <Dialog open={true} fullWidth={true}>\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">Create a Seal</Typography>\n <CancelOutlinedIcon fontSize=\"large\" onClick={close} />\n </Box>\n <DialogContent className={styles.container}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <List>\n {sealsList.map(({ id, validated, barcode, description }, idx) =>\n getListItem(id, validated, barcode, description, idx)\n )}\n </List>\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={close} disabled={saving}>\n Close\n </Button>\n <Button color=\"primary\" onClick={onPressAddSeal} disabled={saving}>\n Add Seal\n </Button>\n </DialogActions>\n </Dialog>\n <ConfirmDialog\n open={confirmDialogOpen}\n onClose={handleCancelDelete}\n onConfirm={handleConfirmDelete}\n saving={saving}\n barcode={selectedSeal?.barcode}\n />\n </>\n );\n};\n","import React, { useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\n\nimport { useInboundContext } from \"./../context\";\nimport { logError } from \"../../../../utils/appUtils\";\nimport { createSeal, deleteSeal } from \"../../../../graphql/mutations\";\nimport { SealsCreate } from \"./SealsCreate\";\nimport { SealsList } from \"./SealsList\";\nimport { useNotify } from \"react-admin\";\n\nconst saveSeal = async ({\n currentShipment,\n sealBarCode,\n notes,\n createdBy,\n validated,\n isScanned,\n}) => {\n const sealInput = {\n barcode: sealBarCode,\n description: notes,\n referenceId: currentShipment.id,\n owner: currentShipment.owner,\n groups: window.appUser.groups,\n reloadYardId: currentShipment.reloadYardId,\n accountId: currentShipment.accountId,\n accountName: currentShipment.accountName,\n referenceName: \"InboundShipment\",\n validated,\n active: true,\n isScanned,\n createdBy,\n };\n\n const result = await API.graphql(\n graphqlOperation(createSeal, { input: sealInput })\n );\n return result.data.createSeal;\n};\n\nconst deleteSealById = async (sealId) => {\n const deleteInput = {\n id: sealId,\n };\n\n const result = await API.graphql(\n graphqlOperation(deleteSeal, { input: deleteInput })\n );\n return result.data.deleteSeal;\n};\n\nconst modes = [\"list\", \"create\"];\n\nexport const SealDialog = ({ setIsSealDialogOpen }) => {\n const { state, saveShipment } = useInboundContext();\n const { currentShipment } = state;\n const [saving, setSaving] = useState(false);\n const [mode, setMode] = useState(modes[0]);\n\n const seals = currentShipment.seals?.items || [];\n const sealsBarCodes = seals.map((seal) => seal.barcode);\n const createdBy = window.appUser.fullName;\n const notify = useNotify();\n\n const goToAddNewSeal = () => setMode(modes[1]);\n const goToSealsList = () => setMode(modes[0]);\n const close = () => setIsSealDialogOpen(false);\n\n const handleSave = async ({ notes, sealBarCode, validated, isScanned }) => {\n setSaving(true);\n try {\n await saveSeal({\n currentShipment,\n sealBarCode,\n notes,\n createdBy,\n validated,\n isScanned,\n });\n const newHistory = {\n date: new Date().toISOString(),\n by: createdBy,\n type: \"SEAL_ADDED\",\n text: `Seal added with barcode ${sealBarCode}`,\n };\n const updatedHistory = currentShipment.history\n ? [...currentShipment.history, newHistory]\n : [newHistory];\n const shipmentToUpdate = {\n id: currentShipment.id,\n history: updatedHistory,\n };\n await saveShipment(shipmentToUpdate);\n } catch (error) {\n logError(\"InboundShipments:Seals:SealDialog:handleSave\", error, notify);\n } finally {\n setSaving(false);\n }\n };\n\n const handleDelete = async (sealId) => {\n setSaving(true);\n try {\n await deleteSealById(sealId);\n const { barcode } = currentShipment.seals.items.find(\n (seal) => seal.id === sealId\n );\n const newHistory = {\n date: new Date().toISOString(),\n by: createdBy,\n type: \"SEAL_DELETED\",\n text: `Seal deleted with barcode ${barcode}`,\n };\n const updatedHistory = currentShipment.history\n ? [...currentShipment.history, newHistory]\n : [newHistory];\n const shipmentToUpdate = {\n id: currentShipment.id,\n history: updatedHistory,\n };\n await saveShipment(shipmentToUpdate);\n } catch (error) {\n logError(\"InboundShipments:Seals:SealDialog:handleDelete\", error, notify);\n } finally {\n setSaving(false);\n }\n };\n\n if (mode === modes[1]) {\n debugger;\n return (\n <SealsCreate\n cancel={goToSealsList}\n saving={saving}\n saveSeal={handleSave}\n sealsNumbers={currentShipment.sealNumbers}\n addedSeals={sealsBarCodes}\n />\n );\n }\n\n return (\n <SealsList\n handleDelete={handleDelete}\n close={close}\n saving={saving}\n sealsList={seals}\n onPressAddSeal={goToAddNewSeal}\n />\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Grid,\n IconButton,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n Button,\n Filter,\n ListContextProvider,\n ListToolbar,\n SelectInput,\n TextField,\n useList,\n useListContext,\n} from \"react-admin\";\n\nimport { AddAllIcon, CancelIcon, CloseIcon } from \"../../../components/common\";\nimport CustomizableDatagrid from \"../../../components/common/ra-customizable-datagrid\";\nimport { CustomField } from \"../../../components/common/CustomFields\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { Empty } from \"../../../components/common/Empty\";\nimport {\n isBulkCommodity,\n isShippingContainer,\n} from \"../../../utils/loadTypeUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n dialogTitle: {\n display: \"flex\",\n paddingTop: \"5px\",\n paddingBottom: \"5px\",\n justifyContent: \"space-between\",\n },\n dialogContent: {\n // https://stackoverflow.com/questions/47698037/how-can-i-set-a-height-to-a-dialog-in-material-ui\n height: \"90vh\",\n },\n}));\n\nconst ListFilter = ({\n allProducts,\n setProducts,\n yardCommodity,\n setSelectedYardCommodity,\n ...props\n}) => {\n const yardCommodities = window.appUser.reloadYard.activeYardCommodities.items;\n\n const handleSearch = (value) => {\n const searchTerm = value?.toLowerCase() || \"\";\n const newProducts = allProducts.filter(\n (itm) =>\n itm.name?.toLowerCase().includes(searchTerm) ||\n itm.productCode?.toLowerCase().includes(searchTerm) ||\n itm.category?.toLowerCase().includes(searchTerm) ||\n itm.customFields?.join().toLowerCase().includes(searchTerm)\n );\n setProducts(newProducts);\n };\n\n const handleLoadTypeFilter = (value) => {\n setSelectedYardCommodity(yardCommodities.find((itm) => itm.id === value));\n };\n\n return (\n <Filter {...props} variant=\"outlined\">\n {!isBulkCommodity(yardCommodity) &&\n !isShippingContainer(yardCommodity) && (\n <SelectInput\n source=\"loadTypeFilter\"\n label=\"Load Type\"\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn\n choices={yardCommodities}\n optionText={(choice) =>\n `${choice.commodity.name} - ${choice.units}`\n }\n optionValue=\"id\"\n allowEmpty={false}\n onChange={(evt) => handleLoadTypeFilter(evt.target.value)}\n />\n )}\n <SearchField\n label=\"Catalog Search\"\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn\n handleSearch={handleSearch}\n />\n </Filter>\n );\n};\n\nconst PaginationToolbar = (props) => {\n const listContext = useListContext(props);\n\n return (\n <Grid container direction=\"row\" spacing={1} alignItems=\"center\">\n <Grid item xs={4}>\n <Typography>\n {listContext?.selectedIds?.length > 0 ? (\n `${listContext.selectedIds.length} selected`\n ) : (\n <> </>\n )}\n </Typography>\n </Grid>\n <Grid item xs={8}>\n <Pagination {...props} {...listContext} />\n </Grid>\n </Grid>\n );\n};\n\nexport const CatalogSearchDialog = ({\n backPath,\n form,\n account,\n allProducts,\n yardCommodity,\n isOpen,\n setIsOpen,\n handleAddSelected,\n ...props\n}) => {\n const classes = useStyles();\n const [loaded, setLoaded] = useState(false);\n const [products, setProducts] = useState([]);\n const [selectedYardCommodity, setSelectedYardCommodity] =\n useState(yardCommodity);\n const fixedFilter = {\n active: \"true\",\n ...(selectedYardCommodity?.id\n ? { reloadYardCommodityId: selectedYardCommodity.id }\n : {}),\n };\n const defaultSort = { field: \"name\", order: \"ASC\" };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = sessionStorage.getItem(`CatalogSearchDialog_perPage`);\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? Number(sessionPerPage) : 10\n );\n\n useEffect(() => {\n if (allProducts) {\n setProducts(allProducts);\n setLoaded(true);\n }\n }, [allProducts]);\n\n const listContext = useList({\n ...props,\n data: products,\n ids: products.map(({ id }) => id),\n loaded: loaded,\n filter: fixedFilter,\n sort: defaultSort,\n perPage: defaultPerPage,\n basePath: \"/products\",\n resource: \"products\",\n });\n\n useEffect(() => {\n if (isBulkCommodity(yardCommodity?.commodity)) {\n // Bulk can only selecte one product - cannot mix products\n if (listContext.selectedIds?.length === 2)\n listContext.onSelect([listContext.selectedIds[1]]);\n }\n }, [listContext.selectedIds]);\n\n useEffect(() => {\n if (listContext?.perPage) {\n sessionStorage.setItem(\n `CatalogSearchDialog_perPage`,\n listContext.perPage\n );\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n const handleAdd = () => {\n debugger;\n handleAddSelected(listContext);\n handleClose();\n };\n\n const handleClose = () => {\n setIsOpen(false);\n listContext.onUnselectItems();\n setProducts(allProducts);\n };\n\n return (\n <Dialog maxWidth=\"xl\" open={isOpen} fullWidth>\n <ListContextProvider value={listContext}>\n <DialogTitle disableTypography className={classes.dialogTitle}>\n <ListToolbar\n {...props}\n filters={\n <ListFilter\n allProducts={allProducts}\n setProducts={setProducts}\n yardCommodity={yardCommodity}\n setSelectedYardCommodity={setSelectedYardCommodity}\n />\n }\n filterValues={{ loadTypeFilter: selectedYardCommodity.id }}\n />\n <IconButton aria-label=\"close\" onClick={handleClose}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n <DialogContent dividers className={classes.dialogContent}>\n <CatalogGrid\n {...props}\n {...listContext}\n basePath={\"/products\"}\n resource={\"products\"}\n backPath={backPath}\n form={form}\n account={account}\n selectedYardCommodity={selectedYardCommodity}\n />\n <PaginationToolbar {...props} />\n </DialogContent>\n <DialogActions>\n <Button\n label=\"Cancel\"\n color=\"defalut\"\n autoFocus\n onClick={handleClose}\n >\n <CancelIcon />\n </Button>\n <Button\n label=\"Add Selected\"\n color=\"primary\"\n onClick={handleAdd}\n disabled={listContext?.selectedIds?.length === 0}\n >\n <AddAllIcon />\n </Button>\n </DialogActions>\n </ListContextProvider>\n </Dialog>\n );\n};\n\nconst CatalogGrid = ({\n backPath,\n form,\n account,\n selectedYardCommodity,\n ...props\n}) => {\n const { ids, page } = props;\n const hasBulkActions = true;\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const formData = form.getState().values;\n const accountFields =\n account?.inventoryCustomFields?.length > 0\n ? account.inventoryCustomFields\n : [];\n const customGridFields = accountFields\n ? accountFields.map((field, index) => {\n return (\n <CustomField\n source={`customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={true}\n />\n );\n })\n : [];\n\n if (ids.length === 0 && page === 1)\n return (\n <Empty\n {...props}\n backPath={backPath}\n state={{\n account: account,\n savedRecord: formData,\n }}\n message=\"Create a new Product\"\n />\n );\n return isSmall ? (\n <CustomizableDatagrid\n label={`Products by: ${selectedYardCommodity?.commodity.name}`}\n rowClick={false}\n hasBulkActions={hasBulkActions}\n storageProp={`CatalogSearchDialog_${account?.id}_small`}\n defaultColumns={[\"productCode\", \"name\", \"defaultUnits\"]}\n >\n {[\n <TextField source=\"productCode\" label=\"Product Code\" />,\n <TextField source=\"name\" label=\"Name\" />,\n <TextField source=\"defaultUnits\" label=\"Units\" />,\n ...customGridFields,\n ]}\n </CustomizableDatagrid>\n ) : (\n <CustomizableDatagrid\n label={`Products by: ${selectedYardCommodity?.commodity.name}`}\n rowClick={false}\n hasBulkActions={hasBulkActions}\n storageProp={`CatalogSearchDialog_${account?.id}_large`}\n defaultColumns={[\n \"productCode\",\n \"name\",\n \"category\",\n \"totalInventoryQuantity\",\n \"defaultUnits\",\n ]}\n >\n {[\n <TextField source=\"productCode\" label=\"Product Code\" />,\n <TextField source=\"name\" label=\"Name\" />,\n <TextField source=\"category\" label=\"Commodity Category\" />,\n <TextField source=\"totalInventoryQuantity\" label=\"Total Qty.\" />,\n <TextField source=\"defaultUnits\" label=\"UOM\" />,\n <TextField source=\"pcs\" label=\"Pieces\" />,\n ...customGridFields,\n ]}\n </CustomizableDatagrid>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { isEmpty } from \"lodash\";\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Grid,\n IconButton,\n MenuItem,\n TextField,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { Button, FileInput, useNotify } from \"react-admin\";\n\nimport {\n AddAllIcon,\n AttachFileIcon,\n CancelIcon,\n CloseIcon,\n} from \"../../../components/common\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport {\n MAX_FILE_SIZE,\n MAX_FILE_SIZE_MSG,\n MAX_ROWS_UPLOAD,\n} from \"../../../utils/constants\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { getCustomFieldId } from \"../../../components/common/CustomFields\";\n\nconst useStyles = makeStyles((theme) => ({\n dialogTitle: {\n display: \"flex\",\n paddingTop: theme.spacing(0),\n paddingBottom: theme.spacing(0),\n justifyContent: \"space-between\",\n },\n title: {\n paddingTop: theme.spacing(2),\n },\n dialogContent: {\n // https://stackoverflow.com/questions/47698037/how-can-i-set-a-height-to-a-dialog-in-material-ui\n height: \"90vh\",\n },\n}));\n\nconst validateCSV = (form, csvArray, fieldMap) => {\n const formState = form.getState();\n const errors = [];\n\n const poColumn = fieldMap[\"poNumber\"];\n const productCodeColumn = fieldMap[\"productCode\"];\n const productNameColumn = fieldMap[\"productName\"];\n const quantityColumn = fieldMap[\"quantityShipped\"];\n const weightColumn = fieldMap[\"weight\"];\n\n let missingCodeName = !productNameColumn && !productCodeColumn;\n let invalidCodeName = false;\n let invalidQty = false;\n let invalidWeight = false;\n let poNoMatch = poColumn && formState.values.poNumber;\n\n debugger;\n csvArray.forEach((row) => {\n if (poNoMatch) {\n const poNumber = row[poColumn]?.trim();\n if (poNumber === formState.values.poNumber) poNoMatch = false;\n }\n\n const productCode = row[productCodeColumn]?.trim();\n const productName = row[productNameColumn]?.trim();\n if (!missingCodeName && !productName && !productCode)\n invalidCodeName = true;\n\n if (quantityColumn) {\n const quantity = Number(row[quantityColumn]); // null = 0, undefined = NaN\n if (isNaN(quantity) || quantity < 0) invalidQty = true; // null = false, undefined = true\n }\n\n if (weightColumn) {\n const weight = Number(row[weightColumn]); // null = 0, undefined = NaN\n if (isNaN(weight) || weight < 0) invalidWeight = true; // null = false, undefined = true\n }\n });\n\n if (missingCodeName)\n errors.push(\n `You must select at lease one of \"Product Code\" or \"Product Name\".`\n );\n if (invalidCodeName)\n errors.push(`Each row must contain \"Product Code\" or \"Product Name\".`);\n if (poNoMatch)\n errors.push(`No rows match PO Number: ${formState.values.poNumber}.`);\n if (invalidQty)\n errors.push(`Quantity must be numeric and greater than 0, or be blank.`);\n if (invalidWeight)\n errors.push(`Weight must be numeric and greater than 0, or be blank.`);\n\n return errors;\n};\n\nfunction csv2arr(str) {\n // https://stackoverflow.com/questions/8493195/how-can-i-parse-a-csv-string-with-javascript-which-contains-comma-in-data\n let line = [\"\"];\n const ret = [line];\n let quote = false;\n\n for (let i = 0; i < str.length; i++) {\n const cur = str[i];\n const next = str[i + 1];\n\n if (!quote) {\n const cellIsEmpty = line[line.length - 1].length === 0;\n if (cur === '\"' && cellIsEmpty) quote = true;\n else if (cur === \",\") line.push(\"\");\n else if (cur === \"\\r\" && next === \"\\n\") {\n line = [\"\"];\n ret.push(line);\n i++;\n } else if (cur === \"\\n\" || cur === \"\\r\") {\n line = [\"\"];\n ret.push(line);\n } else line[line.length - 1] += cur;\n } else {\n if (cur === '\"' && next === '\"') {\n line[line.length - 1] += cur;\n i++;\n } else if (cur === '\"') quote = false;\n else line[line.length - 1] += cur;\n }\n }\n return ret;\n}\n\nconst processCSV = async (\n str,\n delim = \",\",\n setLoading,\n setColumns,\n setCSVData,\n setCSVErrors,\n notify\n) => {\n let errors = [];\n let lengthError = false;\n debugger;\n\n try {\n let headers = str\n .slice(0, str.indexOf(\"\\n\"))\n .replace(\"\\r\", \"\")\n .split(delim);\n headers = headers.filter((head) => head !== \"\");\n const hlen = headers.length;\n\n let rows = csv2arr(str.slice(str.indexOf(\"\\n\") + 1));\n rows = rows.filter((row) => row.join(\"\") !== \"\");\n\n if (rows.length > MAX_ROWS_UPLOAD) {\n notify(\n `Exceeded max. of ${MAX_ROWS_UPLOAD} Tally Sheet rows.`,\n `warning`\n );\n setCSVData([]);\n setColumns([]);\n return;\n }\n\n let newArray = rows\n .map((row) => {\n if (!isEmpty(row) && row.length > 1) {\n const eachObject = headers.reduce((obj, header, i) => {\n obj[header] = row[i];\n return obj;\n }, {});\n\n if (row.length > hlen) {\n eachObject[\"error\"] = true;\n lengthError = true;\n }\n\n return eachObject;\n }\n })\n .filter((itm) => itm);\n\n if (lengthError)\n errors.push(\n `Values in extra columns, or extra unquoted commas within entries.`\n );\n if (errors.length > 0) {\n setCSVErrors(errors);\n } else {\n setCSVData(newArray);\n\n const columns = headers.map((itm) => {\n return { id: itm, name: itm };\n });\n setColumns([{ id: null, name: <span> </span> }, ...columns]);\n }\n } catch (err) {\n logError(\"inboundShipments:ManifestUpload:processCSV\", err, notify);\n } finally {\n setLoading(false);\n }\n};\n\nexport const ManifestUploadDialog = ({\n form,\n account,\n isOpen,\n setIsOpen,\n handleAddUpload,\n ...props\n}) => {\n const classes = useStyles();\n const [loading, setLoading] = useState(false);\n const [csvData, setCSVData] = useState([]);\n const [csvErrors, setCSVErrors] = useState([]);\n const [fieldMap, setFieldMap] = useState({});\n\n const handleAdd = () => {\n debugger;\n if (csvData?.length > 0) {\n const errors = validateCSV(form, csvData, fieldMap);\n if (errors?.length > 0) {\n setCSVErrors(errors);\n } else {\n handleAddUpload(csvData, fieldMap);\n handleClose();\n }\n } else handleClose();\n };\n\n const handleClose = () => {\n debugger;\n form.change(\"manifestFile\", undefined);\n setFieldMap({});\n setCSVData([]);\n setCSVErrors([]);\n setIsOpen(false);\n };\n\n return (\n <Dialog maxWidth=\"xl\" open={isOpen} fullWidth>\n <DialogTitle disableTypography className={classes.dialogTitle}>\n <Typography className={classes.title}>Manifest Upload</Typography>\n <IconButton aria-label=\"close\" onClick={handleClose}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n <DialogContent dividers className={classes.dialogContent}>\n <ManifestUpload\n {...props}\n form={form}\n account={account}\n setLoading={setLoading}\n csvData={csvData}\n setCSVData={setCSVData}\n csvErrors={csvErrors}\n setCSVErrors={setCSVErrors}\n fieldMap={fieldMap}\n setFieldMap={setFieldMap}\n />\n </DialogContent>\n <DialogActions>\n <Button label=\"Cancel\" color=\"defalut\" autoFocus onClick={handleClose}>\n <CancelIcon />\n </Button>\n <Button\n label=\"Add Records\"\n color=\"primary\"\n disabled={loading || csvData?.length === 0}\n onClick={handleAdd}\n >\n <AddAllIcon />\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport const ManifestUpload = ({\n form,\n account,\n setLoading,\n csvData,\n setCSVData,\n csvErrors,\n setCSVErrors,\n fieldMap,\n setFieldMap,\n ...props\n}) => {\n const notify = useNotify();\n const [columns, setColumns] = useState([]);\n const fields = [\n { id: \"poNumber\", name: \"PO Number\" },\n { id: \"productCode\", name: \"Product Code\" },\n { id: \"productName\", name: \"Product Name\" },\n { id: \"quantityShipped\", name: \"Quantity Advised\" },\n ];\n if (account.defaultWeightUnits) {\n fields.push({ id: \"weight\", name: `${account.defaultWeightUnits}/item` });\n } else {\n fields.push({ id: \"weight\", name: \"Weight/Item\" });\n }\n if (account.inventoryCustomFields?.length > 0) {\n account.inventoryCustomFields.forEach((itm) =>\n fields.push({ id: getCustomFieldId(itm.name), name: itm.name })\n );\n }\n\n const handleCSVFile = async (value) => {\n try {\n debugger;\n setLoading(true);\n setCSVErrors([]);\n if (!value) {\n form.change(\"manifestFile\", undefined);\n setCSVData([]);\n } else if (value?.size > MAX_FILE_SIZE) {\n notify(MAX_FILE_SIZE_MSG, \"warning\");\n form.change(\"manifestFile\", undefined);\n setCSVData([]);\n } else {\n const fileState = form.getFieldState(\"manifestFile\");\n const reader = new FileReader();\n reader.onload = function (e) {\n const text = e.target.result;\n processCSV(\n text,\n \",\",\n setLoading,\n setColumns,\n setCSVData,\n setCSVErrors,\n notify\n );\n };\n let blob = await fetch(fileState.value.src).then((r) => r.blob());\n reader.readAsText(blob);\n }\n } catch (error) {\n logError(\"inboundShipments:ManifestUpload:handleCSVFile\", error, notify);\n }\n };\n\n const handleColumnChange = (value, field) => {\n fieldMap[field.id] = value;\n setFieldMap(fieldMap);\n };\n\n return (\n <Grid container direction=\"column\" spacing={1} fullWidth>\n <Grid container direction=\"row\" spacing={4}>\n <Grid item xs={12} md={6}>\n <Typography variant=\"overline\" color=\"textSecondary\" gutterBottom>\n Instructions\n </Typography>\n <ol>\n <li>\n {\" \"}\n Preapare a Manifest spreadsheet with columns and values for all\n required Tally Sheet fields.{\" \"}\n </li>\n <li>\n {\" \"}\n If Manifest includes PO Number entries, only rows with a PO Number\n matching that of the Inbound Shipment will be imported.{\" \"}\n </li>\n <li>\n {\" \"}\n Save as a comma-seperated-values (.CSV) file and upload here{\" \"}\n </li>\n <li>\n {\" \"}\n If errors are found, review, correct the errors and re-upload{\" \"}\n </li>\n <li> For help, contact us at 877-TRANSLOAD / 877-872-6756 </li>\n </ol>\n </Grid>\n <Grid item xs={12} md={6}>\n <FileInput\n source=\"manifestFile\"\n label=\"MANIFEST UPLOAD\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop a CSV File to\n upload, or click to select it.\n </p>\n }\n accept=\".csv\"\n onChange={handleCSVFile}\n helperText={false}\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n </Grid>\n {csvErrors?.length > 0 && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"error\">\n {\" \"}\n Loading Errors:{\" \"}\n </Typography>\n <ul>\n {csvErrors.map((error) => (\n <Typography color=\"error\">\n {\" \"}\n <li>{error}</li>{\" \"}\n </Typography>\n ))}\n </ul>\n </Grid>\n </Grid>\n )}\n {columns.length > 0 && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"body2\" color=\"default\" gutterBottom>\n {\" \"}\n {`Found ${csvData.length} records.`}{\" \"}\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\" gutterBottom>\n {\" \"}\n Match inpout fields to columns{\" \"}\n </Typography>\n </Grid>\n {fields.map((field) => (\n <Grid item xs={12} md={3}>\n <TextField\n select\n id={`select_${field.id}`}\n size=\"small\"\n margin=\"dense\"\n variant=\"outlined\"\n label={field.name}\n fullWidth\n value={fieldMap[field.id]}\n onChange={(e) => handleColumnChange(e.target.value, field)}\n >\n {columns.map((col) => (\n <MenuItem key={field.id + col.id} value={col.id}>\n {col.name}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n ))}\n </Grid>\n )}\n </Grid>\n );\n};\n","import { API, graphqlOperation, Storage } from \"aws-amplify\";\nimport { getInboundShipment } from \"../../../graphql/inbound/custom-queries\";\nimport { updateInboundShipmentMini } from \"../../../graphql/inbound/custom-mutations\";\nimport { deleteInventoryItem } from \"../../../graphql/mutations\";\n\nimport { InputAdornment, Tooltip, Typography } from \"@material-ui/core\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { InventoryStatus, LocationType, Unit } from \"../../../utils/constants\";\nimport {\n isBulkLocation,\n isManagedLocation,\n promiseSetCapacityUsed,\n} from \"../../../utils/locationUtils\";\nimport {\n calcBillingQuantity,\n calcTotalQuantity,\n} from \"../inboundShipments/InboundUtils\";\nimport { convertUnits } from \"../../../utils/loadTypeUtils\";\nimport { trimDecimal } from \"../../../utils/utils\";\nimport { ProductLinkIcon } from \"../../../components/common/ProductLinkIcon\";\nimport { InfoOutlinedIcon } from \"../../../components/common\";\n\nexport const hasWeight = (account, inventory) => {\n const product = inventory?.product;\n\n return (\n inventory?.weight ||\n inventory?.weightUnits ||\n product?.defaultWeightUnits ||\n account?.defaultWeightUnits\n );\n};\n\nexport const showWeight = (account, inventory) => {\n return (\n hasWeight(account, inventory) &&\n inventory?.inventoryUnits !== inventory?.weightUnits\n );\n};\n\nexport const handleInventoryDelete = async (inventory, dataProvider) => {\n const promiseList = [];\n debugger;\n\n if (inventory.photos?.length > 0) {\n inventory.photos.forEach((itm) => {\n promiseList.push(Storage.remove(itm.key));\n });\n }\n\n // update location capacityUsed for STRUCTURED, not OTHER only\n inventory.inventoryItems?.items.forEach((inventoryItem) => {\n promiseList.push(promiseDeleteInventoryItem(inventoryItem));\n\n if (isManagedLocation(inventoryItem.location)) {\n promiseList.push(promiseResetCapacityUsed(inventory, inventoryItem));\n }\n });\n await Promise.all(promiseList);\n\n await dataProvider.delete(\"inventories\", {\n id: inventory.id,\n previousData: inventory,\n });\n // await API.graphql(graphqlOperation(deleteInventorie, {input: {id: data.id}}));\n};\n\nexport const updateInboundQuantity = async (\n inbound,\n inventory,\n initQty,\n newQty\n) => {\n let inboundRecord = { ...inbound };\n if (inboundRecord?.inventories?.items)\n inboundRecord.inventories = { items: [...inboundRecord.inventories.items] };\n else inboundRecord.inventories = { items: [] };\n debugger;\n\n try {\n if (!inboundRecord) {\n const resp = await API.graphql(\n graphqlOperation(getInboundShipment, {\n id: inventory.inboundShipmentId,\n })\n );\n inboundRecord = resp.data.getInboundShipment;\n }\n\n if (!isNaN(initQty) && !isNaN(newQty) && initQty !== newQty) {\n if (newQty === 0 && inboundRecord?.inventories?.items) {\n // item deleted\n inboundRecord.inventories.items =\n inboundRecord.inventories.items.filter(\n (itm) => itm.id && itm.id !== inventory.id\n );\n } else {\n inboundRecord.inventories.items = inboundRecord.inventories.items.map(\n (itm) =>\n itm.id === inventory.id ? { ...itm, quantityShipped: newQty } : itm\n );\n }\n }\n\n inboundRecord.inventories.items = inboundRecord.inventories.items.filter(\n (itm) => itm.id\n );\n const totalQty = calcTotalQuantity(inboundRecord);\n const billQty = calcBillingQuantity(inboundRecord);\n\n const {\n id,\n status,\n state,\n reloadYardId,\n accountId,\n accountName,\n railCarNumber,\n createDateTime,\n scheduledDateTime,\n notifyDateTime,\n placedDateTime,\n releaseDateTime,\n } = inboundRecord;\n\n await API.graphql(\n graphqlOperation(updateInboundShipmentMini, {\n input: {\n id,\n status,\n state,\n reloadYardId,\n accountId,\n accountName,\n railCarNumber,\n createDateTime,\n scheduledDateTime,\n notifyDateTime,\n placedDateTime,\n releaseDateTime,\n totalQuantity: totalQty,\n billQuantity: billQty,\n },\n })\n );\n } catch (err) {\n logError(\"inventory:InventoryUtils:updateInboundQuantity\", err, false);\n }\n};\n\nexport const resetCapacityUsed = (inventory, inventoryItem) => {\n // reset capaocity when inventoryItems are deleted.\n // update location with updated capacity and productId.\n const location = { ...inventoryItem.location };\n const isOtherLoadType = location.locationLoad?.other.selected;\n debugger;\n\n if (isBulkLocation(location)) {\n if (\n inventoryItem.status === InventoryStatus.IN_TRANSIT ||\n inventoryItem.status === InventoryStatus.ARRIVED\n ) {\n // if inventoryItem is not UNLOADED / STORED update capacityAllocated\n location.capacityAllocated =\n location.capacityAllocated - inventoryItem.quantityOnHand;\n // } else if (inventoryItem.status === InventoryStatus.AGGREGATED) {\n // // if inventoryItem is AGGREGATED update capacityUsed & deaggregate\n // location.capacityUsed = location.capacityUsed - inventoryItem.quantityOnHand;\n } else {\n // if inventoryItem is UNLOADED / STORED update capacityUsed\n location.capacityUsed =\n location.capacityUsed - inventoryItem.quantityOnHand;\n }\n // BULK productId reset done in LOCATIONS\n } else if (location.type === LocationType.STRUCTURED && !isOtherLoadType) {\n const inventoryLoadType =\n inventory.reloadYardCommodity.commodity.locationLoadType;\n const locationLoadType = location.locationLoad[inventoryLoadType];\n\n if (\n inventoryItem.status === InventoryStatus.IN_TRANSIT ||\n inventoryItem.status === InventoryStatus.ARRIVED\n ) {\n // if inventoryItem is not UNLOADED / STORED update capacityAllocated\n const capacityAllocated =\n location.capacityAllocated - locationLoadType.capacity;\n location.capacityAllocated = capacityAllocated;\n if (location.capacityUsed === 0 && capacityAllocated === 0)\n location.productId = null;\n } else {\n // if inventoryItem is UNLOADED / STORED update capacityUsed\n const capacityUsed = location.capacityUsed - locationLoadType.capacity;\n location.capacityUsed = capacityUsed;\n if (capacityUsed === 0 && location.capacityAllocated === 0)\n location.productId = null;\n }\n }\n\n return location;\n};\n\nexport const promiseResetCapacityUsed = (inventory, inventoryItem) => {\n const resetLocation = resetCapacityUsed(inventory, inventoryItem);\n return promiseSetCapacityUsed(\n inventoryItem.location,\n resetLocation.capacityUsed,\n resetLocation.capacityAllocated\n );\n};\n\nconst promiseDeleteInventoryItem = (inventoryItem) => {\n return API.graphql(\n graphqlOperation(deleteInventoryItem, { input: { id: inventoryItem.id } })\n );\n};\n\nexport const getInfoBubble = (inventory) => {\n const infoBubble = [];\n const shippedQty = inventory?.quantityShipped || 1;\n const product = inventory?.product;\n\n if (product) {\n Object.keys(Unit).forEach((key) => {\n if (key !== inventory.inventoryUnits) {\n const billRate = convertUnits(\n shippedQty,\n inventory.inventoryUnits,\n key,\n product\n );\n if (billRate) infoBubble.push({ unit: key, value: billRate.value });\n }\n });\n\n if (infoBubble.length > 0) {\n return (\n <InputAdornment position=\"end\">\n <Tooltip\n title={\n <>\n <Typography>Product Code: {inventory.productCode}</Typography>\n <Typography>\n {shippedQty} {inventory.inventoryUnits} =\n </Typography>\n {infoBubble.map((itm) =>\n itm.value ? (\n <Typography>\n  {trimDecimal(itm.value)} {itm.unit}\n </Typography>\n ) : null\n )}\n </>\n }\n placement=\"right\"\n >\n <InfoOutlinedIcon fontSize=\"small\" />\n </Tooltip>\n </InputAdornment>\n );\n } else return null;\n } else return <ProductLinkIcon />;\n};\n","import React from \"react\";\n\nimport {\n Divider,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from \"@material-ui/core\";\n\nimport {\n getCustomFieldsTable,\n parseCustomFieldValue,\n} from \"../../../../components/common/CustomFields\";\nimport {\n getFilePublicURL,\n getKeyFilename,\n getPhotoUrl,\n} from \"../../../../utils/fileUtils\";\nimport {\n CarrierType,\n CustomFieldsDisplay,\n Unit,\n} from \"../../../../utils/constants\";\nimport { getUnitName } from \"../../../../utils/loadTypeUtils\";\nimport { trimDecimal } from \"../../../../utils/utils\";\n\nexport const HeaderBlock = () => {\n const logoImage = window.appUser?.reloadYard?.logoImage;\n const logoURL = logoImage ? getPhotoUrl(logoImage.key, 128) : null;\n\n return (\n <div style={{ width: \"100%\" }}>\n {logoURL && (\n <div style={{ textAlign: \"center\" }}>\n <img\n alt=\"Yard Logo\"\n src={logoURL}\n style={{\n margin: \"0 auto\",\n width: \"auto\",\n maxWidth: \"90%\",\n height: \"auto\",\n minHeight: \"5em\",\n maxHeight: \"5em\",\n }}\n />\n </div>\n )}\n <div>\n <Divider />\n </div>\n <div style={{ textAlign: \"center\" }}>\n <h2>\n <strong> INBOUND MANIFEST </strong>\n </h2>\n </div>\n </div>\n );\n};\n\nexport const InfoBlock = ({ record }) => {\n const inboundCustomFields = (\n record?.account?.inboundCustomFields || []\n ).filter((field) => field.display.includes(CustomFieldsDisplay.POD));\n\n return (\n <div>\n <Table key=\"InfoBlock\" style={{ width: \"100%\" }}>\n <TableHead>\n <TableRow>\n <TableCell\n style={{ textAlign: \"center\", width: \"33%\", padding: \"3px\" }}\n >\n Shipment Date\n </TableCell>\n <TableCell\n style={{ textAlign: \"center\", width: \"33%\", padding: \"3px\" }}\n >\n PO Number\n </TableCell>\n <TableCell\n style={{ textAlign: \"center\", width: \"33%\", padding: \"3px\" }}\n >\n {record.carrierType === CarrierType.RAIL\n ? \"Railcar Number\"\n : \"Trailer Number\"}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell style={{ textAlign: \"center\", padding: \"3px\" }}>\n {new Date(record.placedDateTime).toLocaleDateString()}\n </TableCell>\n <TableCell style={{ textAlign: \"center\", padding: \"3px\" }}>\n {record.poNumber}\n </TableCell>\n <TableCell style={{ textAlign: \"center\", padding: \"3px\" }}>\n {record.railCarNumber}\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n <Table key=\"timeBlock\" style={{ width: \"100%\" }}>\n <TableHead>\n <TableRow>\n <TableCell\n style={{ textAlign: \"center\", width: \"33%\", padding: \"3px\" }}\n >\n Arrived\n </TableCell>\n <TableCell\n style={{ textAlign: \"center\", width: \"33%\", padding: \"3px\" }}\n >\n Released\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell style={{ textAlign: \"center\", padding: \"3px\" }}>\n {record.placedDateTime\n ? new Date(record.placedDateTime).toLocaleDateString()\n : \"N/A\"}\n </TableCell>\n <TableCell style={{ textAlign: \"center\", padding: \"3px\" }}>\n {record.releaseDateTime\n ? new Date(record.releaseDateTime).toLocaleString()\n : \"N/A\"}\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n {getCustomFieldsTable(inboundCustomFields, record.customFields)}\n </div>\n );\n};\n\nconst LineItemsBlock = ({ record, podInventories }) => {\n const inventoryCustomFields = (\n record?.account?.inventoryCustomFields || []\n ).filter((field) => field.display.includes(CustomFieldsDisplay.POD));\n const showProductCodeColumn = record.inventories.items.some(\n (lineItem) => lineItem.productCode && lineItem.productCode.trim()\n );\n const showPCSColumn = podInventories.some((lineItem) => lineItem.pcs != null);\n const pcsColumnName = record.totalUnits === Unit.UNIT ? \"PPU\" : \"Pieces\";\n\n return (\n <div style={{ width: \"100%\" }}>\n <Divider />\n <h3>\n <strong> INVENTORY RECEIVED </strong>\n </h3>\n <Table key=\"inboundInventory\" style={{ width: \"100%\" }}>\n <TableHead>\n <TableRow>\n {showProductCodeColumn && (\n <TableCell\n style={{ textAlign: \"left\", minWidth: \"25%\", padding: \"3px\" }}\n >\n Product Code\n </TableCell>\n )}\n <TableCell\n style={{ textAlign: \"left\", minWidth: \"25%\", padding: \"3px\" }}\n >\n Product Name\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"25%\", padding: \"3px\" }}\n >\n {getUnitName(record.totalUnits)}\n </TableCell>\n {showPCSColumn && (\n <TableCell\n style={{ textAlign: \"right\", width: \"25%\", padding: \"3px\" }}\n >\n {pcsColumnName}\n </TableCell>\n )}\n {inventoryCustomFields.map((field, index) => (\n <TableCell\n key={\"cf_\" + index}\n style={{ textAlign: \"center\", padding: \"3px\" }}\n >\n {field.name}\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {record.inventories.items.map((lineItem) => (\n <TableRow key={lineItem.id}>\n {showProductCodeColumn && (\n <TableCell style={{ textAlign: \"left\", padding: \"3px\" }}>\n {lineItem.productCode}\n </TableCell>\n )}\n <TableCell style={{ textAlign: \"left\", padding: \"3px\" }}>\n {lineItem.productName}\n </TableCell>\n <TableCell style={{ textAlign: \"right\", padding: \"3px\" }}>\n {lineItem.quantityDelivered}\n </TableCell>\n {showPCSColumn && (\n <TableCell\n style={{ textAlign: \"right\", padding: \"3px\", width: \"10%\" }}\n >\n {lineItem.pcs ? lineItem.pcs : \"--\"}\n </TableCell>\n )}\n {inventoryCustomFields.map((field, index) => (\n <TableCell\n key={index}\n style={{ textAlign: \"center\", padding: \"3px\" }}\n >\n {parseCustomFieldValue(\n lineItem.customFields.find((cf) =>\n cf.startsWith(field.name)\n )\n )}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nconst TotalsBlock = ({ record, podInventories }) => {\n // PCS Totals and Flags\n let totalPCS = 0;\n let allMissingPCS = true;\n let somePCSNull = false;\n\n podInventories.forEach((lineItem) => {\n // PCS Calculation\n if (lineItem.pcs == null) {\n somePCSNull = true;\n } else {\n allMissingPCS = false;\n if (record.totalUnits === Unit.UNIT) {\n totalPCS += lineItem.pcs * lineItem.quantityDelivered;\n } else {\n totalPCS += lineItem.pcs;\n }\n }\n });\n\n return (\n <div style={{ width: \"100%\" }}>\n <Divider />\n <Table id=\"inboundTotals\" key=\"inboundTotals\" style={{ width: \"100%\" }}>\n <TableBody>\n <TableRow key=\"totalUnits\">\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"66%\", padding: \"3px\" }}\n >\n Total {getUnitName(record.totalUnits)}\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"33%\", padding: \"3px\" }}\n >\n {record.totalQuantity}\n </TableCell>\n </TableRow>\n {!allMissingPCS && (\n <TableRow key=\"totalPCS\">\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"66%\", padding: \"3px\" }}\n >\n Total Pieces\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"33%\", padding: \"3px\" }}\n >\n {somePCSNull ? \"N/A\" : trimDecimal(totalPCS).toLocaleString()}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nexport const AttachmentsBlock = ({ record }) => {\n const attachments =\n record.attachments?.length > 0 ? record.attachments : null;\n const receipt = record.receiptFile;\n\n if (!attachments && !receipt) return <></>;\n return (\n <div style={{ width: \"100%\" }}>\n <div>\n <Divider />\n </div>\n <Table key=\"inboundDocs\" style={{ width: \"100%\" }}>\n <TableBody>\n {attachments?.map((row, index) => (\n <TableRow key={\"att_\" + index}>\n <TableCell style={{ textAlign: \"left\" }}>\n {row.key && (\n <a\n href={getFilePublicURL(row.key)}\n style={{\n margin: \"0 auto\",\n width: \"auto\",\n maxWidth: \"90%\",\n }}\n >\n {getKeyFilename(row.key)}\n </a>\n )}\n </TableCell>\n </TableRow>\n ))}\n {receipt && (\n <TableRow key=\"receipt\">\n <TableCell style={{ textAlign: \"left\" }}>\n {receipt.key && (\n <a\n href={getFilePublicURL(receipt.key)}\n style={{\n margin: \"0 auto\",\n width: \"auto\",\n maxWidth: \"90%\",\n }}\n >\n {getKeyFilename(receipt.key)}\n </a>\n )}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nexport const PhotosBlock = ({ record }) => {\n const rowSize = 3;\n const photosRows = [];\n const photos = record.photos ? record.photos : [];\n for (var i = 0; i < photos.length; i += rowSize) {\n photosRows.push(photos.slice(i, i + rowSize));\n }\n\n return (\n <div style={{ width: \"100%\" }}>\n <div>\n <Divider />\n </div>\n <Table id=\"inboundPhotos\" key=\"inboundPhotos\" style={{ width: \"100%\" }}>\n <TableBody>\n {photosRows.map((row, rowIndex) => (\n <TableRow key={rowIndex}>\n <TableCell style={{ textAlign: \"center\" }}>\n {row[0]?.key && (\n <img\n alt=\"Inbound Load\"\n src={getPhotoUrl(row[0].key, 256)}\n style={{\n margin: \"0 auto\",\n width: \"auto\",\n maxWidth: \"90%\",\n height: \"auto\",\n borderRadius: 5,\n }}\n />\n )}\n </TableCell>\n <TableCell style={{ textAlign: \"center\" }}>\n {row[1]?.key && (\n <img\n alt=\"Inbound Load\"\n src={getPhotoUrl(row[1].key, 256)}\n style={{\n margin: \"0 auto\",\n width: \"auto\",\n maxWidth: \"90%\",\n height: \"auto\",\n borderRadius: 5,\n }}\n />\n )}\n </TableCell>\n <TableCell style={{ textAlign: \"center\" }}>\n {row[2]?.key && (\n <img\n alt=\"Inbound Load\"\n src={getPhotoUrl(row[2].key, 256)}\n style={{\n margin: \"0 auto\",\n width: \"auto\",\n maxWidth: \"90%\",\n height: \"auto\",\n borderRadius: 5,\n }}\n />\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nexport const SealsBlock = ({ record }) => {\n const showSeals =\n record?.account?.trackInboundSeals || record.seals?.items?.length > 0;\n if (!showSeals) return null;\n\n const sealBarCodes = record.seals?.items?.map((seal) => seal.barcode) || [];\n\n const renderSeals = () => {\n if (sealBarCodes.length === 0) {\n return (\n <TableRow>\n <TableCell colSpan={9} style={{ textAlign: \"left\" }}>\n No seals were entered\n </TableCell>\n </TableRow>\n );\n }\n\n const rows = [];\n for (let i = 0; i < sealBarCodes.length; i += 9) {\n const cells = [];\n for (let j = i; j < i + 9 && j < sealBarCodes.length; j++) {\n cells.push(\n <TableCell key={j} style={{ textAlign: \"left\", padding: \"3px\" }}>\n {sealBarCodes[j]}\n </TableCell>\n );\n }\n rows.push(<TableRow key={i}>{cells}</TableRow>);\n }\n return rows;\n };\n\n return (\n <div style={{ width: \"100%\" }}>\n <Divider />\n <h3>\n <strong>SEALS</strong>\n </h3>\n <Table id=\"inboundSeals\" style={{ width: \"100%\" }}>\n <TableBody>{renderSeals()}</TableBody>\n </Table>\n </div>\n );\n};\n\nexport const NotesBlock = ({ record }) => {\n const filteredNotes = record.notes?.filter((note) => note.public);\n if (!filteredNotes || filteredNotes?.length === 0) return null;\n\n return (\n <div style={{ width: \"100%\" }}>\n <Divider />\n <h3>\n <strong> NOTES </strong>\n </h3>\n <Table key=\"inboundInventory\" style={{ width: \"100%\" }}>\n <TableHead>\n <TableRow>\n <TableCell\n style={{ textAlign: \"left\", minWidth: \"60%\", padding: \"3px\" }}\n >\n Note\n </TableCell>\n <TableCell\n style={{ textAlign: \"left\", minWidth: \"20%\", padding: \"3px\" }}\n >\n By\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"20%\", padding: \"3px\" }}\n >\n Date\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredNotes.map((lineItem) => (\n <TableRow key={lineItem.id}>\n <TableCell style={{ textAlign: \"left\", padding: \"3px\" }}>\n {lineItem.text}\n </TableCell>\n <TableCell style={{ textAlign: \"left\", padding: \"3px\" }}>\n {lineItem.by}\n </TableCell>\n <TableCell style={{ textAlign: \"right\", padding: \"3px\" }}>\n {new Date(lineItem.date).toLocaleDateString()}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nexport const InboundPODBody = ({\n record,\n enclosePhotos,\n encloseAttachments,\n}) => {\n const podInventories = record.inventories.items.map((lineItem) => {\n return {\n ...lineItem,\n pcs: lineItem.pcs != null ? lineItem.pcs : lineItem.product?.pcs,\n };\n });\n\n return (\n <Paper elevation={0} style={{ maxWidth: \"900px\", padding: \"10px\" }}>\n <HeaderBlock />\n <InfoBlock record={record} />\n <LineItemsBlock record={record} podInventories={podInventories} />\n <TotalsBlock record={record} podInventories={podInventories} />\n <SealsBlock record={record} />\n <NotesBlock record={record} />\n {encloseAttachments && <AttachmentsBlock record={record} />}\n {enclosePhotos && <PhotosBlock record={record} />}\n </Paper>\n );\n};\n","import React from \"react\";\n\nimport {\n Divider,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from \"@material-ui/core\";\n\nimport { parseCustomFieldValue } from \"../../../../components/common/CustomFields\";\n\nimport { CustomFieldsDisplay, Unit } from \"../../../../utils/constants\";\nimport { trimDecimal } from \"../../../../utils/utils\";\nimport {\n calculateMbf,\n calculateSqf,\n getUnitName,\n isLumberCommodity,\n isPanelsCommodity,\n} from \"../../../../utils/loadTypeUtils\";\nimport {\n AttachmentsBlock,\n HeaderBlock,\n InfoBlock,\n PhotosBlock,\n SealsBlock,\n} from \"./InboundPODBody\";\n\nconst LineItemsBlock = ({ record, podInventories }) => {\n const inventoryCustomFields = (\n record?.account?.inventoryCustomFields || []\n ).filter((field) => field.display.includes(CustomFieldsDisplay.POD));\n const showProductCodeColumn = podInventories.some((lineItem) =>\n lineItem.productCode?.trim()\n );\n const showPCSColumn = podInventories.some((lineItem) => lineItem.pcs != null);\n const pcsColumnName = record.totalUnits === Unit.UNIT ? \"PPU\" : \"Pieces\";\n const showFootageColumn = podInventories.some(\n (lineItem) => lineItem.footage != null\n );\n\n return (\n <div style={{ width: \"100%\" }}>\n <Divider />\n <h3>\n <strong> INVENTORY RECEIVED </strong>\n </h3>\n <Table key=\"inboundInventory\" style={{ width: \"100%\" }}>\n <TableHead>\n <TableRow>\n {showProductCodeColumn && (\n <TableCell\n style={{ textAlign: \"left\", padding: \"3px\", width: \"15%\" }}\n >\n Product Code\n </TableCell>\n )}\n <TableCell\n style={{\n textAlign: \"left\",\n padding: \"3px\",\n width: `${showProductCodeColumn ? \"35%\" : \"45%\"}`, // Adjust dynamically\n }}\n >\n Product Name\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", padding: \"3px\", width: \"10%\" }}\n >\n {getUnitName(record.totalUnits)}\n </TableCell>\n {showPCSColumn && (\n <TableCell\n style={{ textAlign: \"right\", padding: \"3px\", width: \"10%\" }}\n >\n {pcsColumnName}\n </TableCell>\n )}\n {showFootageColumn && (\n <TableCell\n style={{ textAlign: \"right\", padding: \"3px\", width: \"10%\" }}\n >\n Footage\n </TableCell>\n )}\n {inventoryCustomFields.map((field, index) => (\n <TableCell\n key={\"inv_cf_h_\" + index}\n style={{\n textAlign: \"center\",\n padding: \"3px\",\n width: `${100 / (inventoryCustomFields.length + 4)}%`,\n }} // Dynamically calculate custom field width\n >\n {field.name}\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {podInventories.map((lineItem) => (\n <TableRow key={lineItem.id}>\n {showProductCodeColumn && (\n <TableCell\n style={{ textAlign: \"left\", padding: \"3px\", width: \"15%\" }}\n >\n {lineItem.productCode ? lineItem.productCode : \"--\"}\n </TableCell>\n )}\n <TableCell\n style={{\n textAlign: \"left\",\n padding: \"3px\",\n width: `${showProductCodeColumn ? \"35%\" : \"45%\"}`, // Adjust dynamically\n }}\n >\n {lineItem.productName}\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", padding: \"3px\", width: \"10%\" }}\n >\n {lineItem.quantityDelivered}\n </TableCell>\n {showPCSColumn && (\n <TableCell\n style={{ textAlign: \"right\", padding: \"3px\", width: \"10%\" }}\n >\n {lineItem.pcs ? lineItem.pcs : \"--\"}\n </TableCell>\n )}\n {showFootageColumn && (\n <TableCell\n style={{ textAlign: \"right\", padding: \"3px\", width: \"15%\" }}\n >\n {lineItem.footage\n ? `${trimDecimal(\n lineItem.footage * lineItem.quantityDelivered\n ).toLocaleString()} ${lineItem.footageUOM}`\n : \"--\"}\n </TableCell>\n )}\n {inventoryCustomFields.map((field, index) => (\n <TableCell\n key={\"inv_cf_\" + index}\n style={{\n textAlign: \"center\",\n padding: \"3px\",\n width: `${100 / (inventoryCustomFields.length + 4)}%`, // Adjust dynamically\n }}\n >\n {parseCustomFieldValue(\n lineItem.customFields.find((cf) =>\n cf.startsWith(field.name)\n )\n )}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nconst TotalsBlock = ({ record, podInventories }) => {\n // PCS Totals and Flags\n let totalPCS = 0;\n let allMissingPCS = true;\n let somePCSNull = false;\n\n // MBF Totals and Flags\n let totalMBF = 0;\n let allMissingMBF = true;\n let someMBFNull = false;\n\n // SF Totals and Flags\n let totalSF = 0;\n let allMissingSF = true;\n let someSFNull = false;\n\n podInventories.forEach((lineItem) => {\n // PCS Calculation\n if (lineItem.pcs == null) {\n somePCSNull = true;\n } else {\n allMissingPCS = false;\n if (record.totalUnits === Unit.UNIT) {\n totalPCS += lineItem.pcs * lineItem.quantityDelivered;\n } else {\n totalPCS += lineItem.pcs;\n }\n }\n\n // Board Footage Calculations\n if (lineItem.footageUOM === Unit.MBF) {\n if (lineItem.footage == null) {\n someMBFNull = true;\n } else {\n allMissingMBF = false;\n totalMBF += lineItem.footage * lineItem.quantityDelivered;\n }\n } else if (lineItem.footageUOM === Unit.SF) {\n if (lineItem.footage == null) {\n someSFNull = true;\n } else {\n allMissingSF = false;\n totalSF += lineItem.footage * lineItem.quantityDelivered;\n }\n }\n });\n\n return (\n <div style={{ width: \"100%\" }}>\n <Divider />\n <Table id=\"inboundTotals\" key=\"inboundTotals\" style={{ width: \"100%\" }}>\n <TableBody>\n <TableRow key=\"totalUnits\">\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"66%\", padding: \"3px\" }}\n >\n Total {getUnitName(record.totalUnits)}\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"33%\", padding: \"3px\" }}\n >\n {record.totalQuantity}\n </TableCell>\n </TableRow>\n {!allMissingPCS && (\n <TableRow key=\"totalPCS\">\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"66%\", padding: \"3px\" }}\n >\n Total Pieces\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"33%\", padding: \"3px\" }}\n >\n {somePCSNull ? \"N/A\" : trimDecimal(totalPCS).toLocaleString()}\n </TableCell>\n </TableRow>\n )}\n {/* Display MBF total if there are lumber items */}\n {!allMissingMBF && (\n <TableRow key=\"totalMBF\">\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"66%\", padding: \"3px\" }}\n >\n Total MBF\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"33%\", padding: \"3px\" }}\n >\n {someMBFNull\n ? \"N/A\"\n : `${trimDecimal(totalMBF).toLocaleString()} MBF`}\n </TableCell>\n </TableRow>\n )}\n {/* Display SF total if there are panel items */}\n {!allMissingSF && (\n <TableRow key=\"totalSF\">\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"66%\", padding: \"3px\" }}\n >\n Total SF\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\", minWidth: \"33%\", padding: \"3px\" }}\n >\n {someSFNull\n ? \"N/A\"\n : `${trimDecimal(totalSF).toLocaleString()} SF`}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nexport const LumberPODBody = ({\n record,\n enclosePhotos,\n encloseAttachments,\n}) => {\n const podInventories = record.inventories.items.map((lineItem) => {\n // Determine loadType to calculate appropriate values\n const loadType =\n lineItem.reloadYardCommodityId || record.reloadYardCommodityId;\n\n let footage = null;\n let footageUOM = \"\";\n\n if (isLumberCommodity(loadType)) {\n footage = calculateMbf(lineItem);\n footageUOM = Unit.MBF;\n } else if (isPanelsCommodity(loadType)) {\n footage = calculateSqf(lineItem);\n footageUOM = Unit.SF;\n }\n\n return {\n ...lineItem,\n pcs: lineItem.pcs != null ? lineItem.pcs : lineItem.product?.pcs,\n footage,\n footageUOM,\n };\n });\n\n return (\n <Paper elevation={0} style={{ maxWidth: \"900px\", padding: \"10px\" }}>\n <HeaderBlock />\n <InfoBlock record={record} />\n <LineItemsBlock record={record} podInventories={podInventories} />\n <TotalsBlock record={record} podInventories={podInventories} />\n <SealsBlock record={record} />\n {encloseAttachments && <AttachmentsBlock record={record} />}\n {enclosePhotos && <PhotosBlock record={record} />}\n </Paper>\n );\n};\n","import React from \"react\";\nimport ReactDOMServer from \"react-dom/server\";\n\nimport {\n isLumberCommodity,\n isPanelsCommodity,\n} from \"../../../../utils/loadTypeUtils\";\n\nimport { InboundPODBody } from \"./InboundPODBody\";\nimport { LumberPODBody } from \"./LumberPODBody\";\n\nconst getPODBody = (commodity) => {\n if (isLumberCommodity(commodity) || isPanelsCommodity(commodity)) {\n return LumberPODBody;\n }\n return InboundPODBody;\n};\n\nexport const getInboundPODBody = (\n record,\n enclosePhotos,\n encloseAttachments\n) => {\n const PODComponent = getPODBody(record.reloadYardCommodityId);\n\n return ReactDOMServer.renderToString(\n <PODComponent\n record={record}\n enclosePhotos={enclosePhotos}\n encloseAttachments={encloseAttachments}\n />\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { format } from \"date-fns\";\nimport { keyBy } from \"lodash\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { countInboundShipments } from \"../../../graphql/inbound/custom-queries\";\nimport { productByAccountByActiveByName } from \"../../../graphql/queries\";\nimport { getInventorieAggregate } from \"../../../graphql/inventory/custom-queries\";\nimport { updateInboundShipmentMini } from \"../../../graphql/inbound/custom-mutations\";\n\nimport { Grid, InputAdornment, Tooltip, Typography } from \"@material-ui/core\";\n\nimport { useNotify, Button } from \"react-admin\";\n\nimport {\n CARLOT_PO_NO_CHARS,\n InboundState,\n InboundStatus,\n InventoryStatus,\n LocationType,\n LotType,\n MAX_ROWS_UPLOAD,\n NoteType,\n OutboundStatus,\n SORTKEY_BUFFER,\n Unit,\n VALIDATION_MSG,\n} from \"../../../utils/constants\";\nimport { logError, retrieveStripeSubscription } from \"../../../utils/appUtils\";\n\nimport {\n AddIcon,\n AddAllIcon,\n InfoOutlinedIcon,\n UploadIcon,\n} from \"../../../components/common\";\nimport { getCustomFieldsToSave } from \"../../../components/common/CustomFields\";\nimport { ProductLinkIcon } from \"../../../components/common/ProductLinkIcon\";\nimport {\n convertUnits,\n getYardCommodity,\n isBulkCommodity,\n isWeightUnits,\n} from \"../../../utils/loadTypeUtils\";\nimport {\n trimDecimal,\n splitEmails,\n isShipmentUnits,\n} from \"../../../utils/utils\";\nimport {\n filterAreas,\n isBulkLocation,\n isTrack,\n} from \"../../../utils/locationUtils\";\nimport { CatalogSearchDialog } from \"./CatalogSearchDialog\";\nimport { ManifestUploadDialog } from \"./ManifestUploadDialog\";\nimport { resetCapacityUsed } from \"../inventory/InventoryUitls\";\nimport { getInboundPODBody } from \"./POD/PODBody\";\n\nexport const formValidate = (form, notify) => {\n const formState = form.getState();\n if (formState?.invalid) notify(VALIDATION_MSG, \"warning\");\n return formState?.invalid !== true;\n};\n\nexport const validatePoNumberUnicity = async (formData, notify) => {\n const poNumber = formData.poNumber;\n const accountId = formData.accountId;\n if (!poNumber || !accountId) return;\n\n try {\n const defaultFilter = { accountId: { eq: accountId } };\n if (formData.id) defaultFilter.id = { ne: formData.id };\n const filter = { ...defaultFilter, poNumber: { eq: poNumber } };\n\n const response = await API.graphql(\n graphqlOperation(countInboundShipments, {\n filter: filter,\n limit: 1,\n })\n );\n\n const isDuplicate = response?.data?.searchInboundShipments?.total > 0;\n if (isDuplicate) {\n notify(\"Duplicate PO Number\", \"warning\", {\n autoHideDuration: 15000, // in milliseconds (15 seconds)\n });\n }\n } catch (error) {\n logError(\n \"inboundShipments:inboundUtils:validatePoNumberUnicity\",\n error,\n false\n );\n }\n};\n\nexport const validateRailCarNumberUnicity = async (formData, notify) => {\n const railCarNumber = formData.railCarNumber;\n const accountId = formData.accountId;\n if (!railCarNumber || !accountId) return;\n\n try {\n const defaultFilter = { accountId: { eq: accountId } };\n if (formData.id) defaultFilter.id = { ne: formData.id };\n const filter = { ...defaultFilter, railCarNumber: { eq: railCarNumber } };\n\n const response = await API.graphql(\n graphqlOperation(countInboundShipments, {\n filter: filter,\n limit: 1,\n })\n );\n\n const isDuplicate = response?.data?.searchInboundShipments?.total > 0;\n if (isDuplicate) {\n notify(\"Duplicate Railcar Number\", \"warning\", {\n autoHideDuration: 15000, // in milliseconds (15 seconds)\n });\n }\n } catch (error) {\n logError(\n \"inboundShipments:inboundUtils:validateRailcarNumberUnicity\",\n error,\n false\n );\n }\n};\n\nexport const validateInboundUnicity = async (formData) => {\n const poNumber = formData.poNumber;\n const railCarNumber = formData.railCarNumber;\n const lotNumber = formData.lotNumber;\n const duplicateNumbers = [];\n\n if (poNumber || railCarNumber || lotNumber) {\n try {\n const defaultFilter = { accountId: { eq: formData.accountId } };\n if (formData.id) defaultFilter.id = { ne: formData.id };\n\n const poNumberQuery = poNumber\n ? API.graphql(\n graphqlOperation(countInboundShipments, {\n filter: { ...defaultFilter, poNumber: { eq: poNumber } },\n limit: 1,\n })\n )\n : Promise.resolve(null);\n\n const railCarNumberQuery = railCarNumber\n ? API.graphql(\n graphqlOperation(countInboundShipments, {\n filter: {\n ...defaultFilter,\n railCarNumber: { eq: railCarNumber },\n },\n limit: 1,\n })\n )\n : Promise.resolve(null);\n\n const lotNumberQuery =\n formData.lotNumberOverride === true && lotNumber\n ? API.graphql(\n graphqlOperation(countInboundShipments, {\n filter: { ...defaultFilter, lotNumber: { eq: lotNumber } },\n limit: 1,\n })\n )\n : Promise.resolve(null);\n\n const [poNumberResponse, railCarNumberResponse, lotNumberResponse] =\n await Promise.all([poNumberQuery, railCarNumberQuery, lotNumberQuery]);\n\n const poNumberInbounds =\n poNumberResponse?.data?.searchInboundShipments?.total || 0;\n const railCarNumberInbounds =\n railCarNumberResponse?.data?.searchInboundShipments?.total || 0;\n const lotNumberInbounds =\n lotNumberResponse?.data?.searchInboundShipments?.total || 0;\n\n if (poNumberInbounds > 0) duplicateNumbers.push(\"PO\");\n if (railCarNumberInbounds > 0) duplicateNumbers.push(\"Car/Trl\");\n if (lotNumberInbounds > 0) duplicateNumbers.push(\"Lot\");\n } catch (error) {\n logError(\"inboundShipments:inboundUtils:validateUnicity\", error, false);\n }\n }\n return duplicateNumbers;\n};\n\nexport const validateBillQty = (value, allValues) => {\n // return an object just like the other validators\n if (allValues?.billUnits && (value === undefined || value === null)) {\n return { message: `Required`, isRequired: true };\n } else if (allValues?.billUnits && value) {\n if (isNaN(Number(value))) return \"Must be a number\";\n if (value < 0) return \"Must be 0 or greater.\";\n }\n return undefined;\n};\n\nexport const isBillQtyRequired = (formData) => {\n return validateBillQty(null, formData) ? true : false;\n};\n\nexport const validateRailcarRelease = (data, newStatus) => {\n if (data.status !== OutboundStatus.RELEASED && isTrack(data.areaId)) {\n if (data.releaseDateTime || newStatus === OutboundStatus.RELEASED) {\n return hasInventoryRemaining(data);\n }\n }\n return false;\n};\n\nconst hasInventoryRemaining = (record) => {\n const totalQuantity = record.inventories?.items.reduce((total, inventory) => {\n return total + (inventory.quantityOnHand || 0);\n }, 0);\n\n return totalQuantity > 0 ? `${totalQuantity} ${record.totalUnits}` : false;\n};\n\nexport const hasInventoryCommitted = (record) => {\n const totalQuantity = record.inventories?.items.reduce((total, inventory) => {\n return total + (inventory.quantityCommitted || 0);\n }, 0);\n\n return totalQuantity > 0;\n};\n\nexport const AddCatalogUploadButtons = ({\n backPath,\n form,\n account,\n yardCommodity,\n setHasAllProducts,\n setCalcError,\n ...props\n}) => {\n const notify = useNotify();\n const [isSearchOpen, setIsSearchOpen] = useState(false);\n const [uploadOpen, setUploadOpen] = useState(false);\n const [allProducts, setAllProducts] = useState([]);\n const [allProductsMap, setAllProductsMap] = useState({});\n const inventoryFieldState = form.getFieldState(\"inventories.items\");\n const hasInventory = inventoryFieldState?.value?.length > 0;\n\n useEffect(() => {\n if (account) getProducts(account);\n }, [account]);\n\n const getProducts = async (account) => {\n try {\n const input = {\n accountId: account.id,\n activeName: { beginsWith: { active: \"true\" } },\n limit: MAX_ROWS_UPLOAD,\n };\n let resp = await API.graphql(\n graphqlOperation(productByAccountByActiveByName, input)\n );\n let productData = resp.data.productByAccountByActiveByName;\n const productMap = keyBy(productData.items, \"id\");\n setAllProducts(productData.items);\n setAllProductsMap(productMap);\n } catch (error) {\n logError(\"inboundShipment:AddCatalogButtons:getProducts\", error, notify);\n }\n };\n\n const NEW_INVENTORY = {\n status: InventoryStatus.NEW,\n reloadYardCommodityId: yardCommodity?.id,\n weightUnits: account?.defaultWeightUnits,\n aisleId: \"\",\n };\n\n const handleAdd = () => {\n debugger;\n // handle manual inventory add\n if (inventoryFieldState?.value) {\n form.change(\"inventories.items\", [\n ...inventoryFieldState.value,\n NEW_INVENTORY,\n ]);\n } else {\n form.change(\"inventories.items\", [NEW_INVENTORY]);\n }\n\n setHasAllProducts && setHasAllProducts(false);\n };\n\n const handleAddSelected = (listContext) => {\n // add items selected from product catalog\n debugger;\n const formData = form.getState().values;\n const inventoriesState = form.getFieldState(\"inventories.items\");\n let formInventories = inventoriesState?.value ? inventoriesState.value : [];\n\n let selectedProducts = listContext.selectedIds.map((selectedId) => {\n const product = allProductsMap[selectedId];\n\n let newInventory = {\n ...NEW_INVENTORY,\n productId: product.id,\n productCode: product.productCode,\n productName: product.name,\n reloadYardCommodityId: product.reloadYardCommodityId,\n inventoryUnits: product.defaultUnits,\n product: product,\n customFields: getCustomFieldsToSave(\n product.customFields,\n account.inventoryCustomFields\n ),\n };\n\n const defaultWeightUnits =\n product.defaultWeightUnits || account.defaultWeightUnits;\n if (defaultWeightUnits) {\n newInventory.weightUnits = defaultWeightUnits;\n newInventory.weight = product[defaultWeightUnits.toLowerCase()];\n form.change(\"weightUnits\", defaultWeightUnits);\n if (!formData.scaleWeightUnits) {\n form.change(\"scaleWeightUnits\", defaultWeightUnits);\n }\n } else if (isWeightUnits(newInventory.inventoryUnits)) {\n // if inventory is measured in weight units, default weightUnits to inventoryUnits\n newInventory.weightUnits = newInventory.inventoryUnits;\n newInventory.weight = 1;\n form.change(\"weightUnits\", newInventory.inventoryUnits);\n if (!formData.scaleWeightUnits) {\n form.change(\"scaleWeightUnits\", newInventory.inventoryUnits);\n }\n }\n if (product.inboundBillingUnits) {\n if (isShipmentUnits(product.inboundBillingUnits)) {\n form.change(\"billQuantity\", 1);\n }\n form.change(\"billUnits\", product.inboundBillingUnits);\n }\n form.change(\"totalUnits\", product.defaultUnits);\n\n return newInventory;\n });\n\n if (selectedProducts?.length > 0) {\n formInventories = [...formInventories, ...selectedProducts];\n form.change(\"inventories.items\", formInventories);\n }\n\n setHasAllProducts && setHasAllProducts(hasAllProducts(form));\n };\n\n const handleAddUpload = (csvData, fieldMap) => {\n // handle inventories uploaded from excel\n debugger;\n const formState = form.getState();\n const inventoriesState = formState.values.inventories?.items;\n let formInventories = inventoriesState?.value ? inventoriesState.value : [];\n const poColumn = fieldMap[\"poNumber\"];\n const productCodeColumn = fieldMap[\"productCode\"];\n const productNameColumn = fieldMap[\"productName\"];\n const quantityColumn = fieldMap[\"quantityShipped\"];\n const weightColumn = fieldMap[\"weight\"];\n\n if (poColumn) {\n csvData = csvData.filter((row) => {\n return row[poColumn] === formState.values.poNumber;\n });\n }\n\n const inventoryRecords = csvData\n .map((row) => {\n const productCode = row[productCodeColumn];\n let product;\n if (productCode) {\n product = allProducts.find((itm) => itm.productCode === productCode);\n }\n\n // Check if product is found and if reloadYardCommodityId matches (if product exists)\n if (product && product.reloadYardCommodityId !== yardCommodity.id) {\n return null; // filter out by reloadYardCommodityId\n }\n\n let newInventoryItem = {\n ...NEW_INVENTORY,\n productName: row[productNameColumn],\n quantityShipped: Number(row[quantityColumn]),\n weight: NEW_INVENTORY.weightUnits\n ? Number(row[weightColumn])\n : undefined,\n };\n account.inventoryCustomFields?.forEach((customField) => {\n debugger;\n const customColumn = fieldMap[customField.id];\n if (customColumn) {\n const newField = `${customField.name}||${row[customColumn]}`;\n newInventoryItem.customFields = newInventoryItem.customFields\n ? newInventoryItem.customFields.push(newField)\n : [newField];\n }\n });\n if (product) {\n newInventoryItem.productId = product.productId;\n newInventoryItem.productCode = product.productCode;\n newInventoryItem.productName = newInventoryItem.productName\n ? newInventoryItem.productName\n : product.name;\n newInventoryItem.product = product;\n newInventoryItem.inventoryUnits = product.defaultUnits;\n newInventoryItem.reloadYardCommodityId =\n product.reloadYardCommodityId;\n\n const weightUnits = product.defaultWeightUnits\n ? product.defaultWeightUnits\n : newInventoryItem.weightUnits;\n if (weightUnits) {\n newInventoryItem.weightUnits = weightUnits;\n if (!row[weightColumn]) {\n const productWeight = product[weightUnits.toLowerCase()];\n newInventoryItem.weight = Number(productWeight);\n }\n }\n\n if (product.inboundBillingUnits) {\n form.change(\"billUnits\", product.inboundBillingUnits);\n }\n }\n return newInventoryItem;\n })\n .filter((item) => item !== null);\n\n if (inventoryRecords?.length > 0) {\n formInventories = [...formInventories, ...inventoryRecords];\n form.change(\"inventories.items\", formInventories);\n }\n\n setHasAllProducts && setHasAllProducts(hasAllProducts(form));\n handleInventoriesQty(form, setCalcError);\n };\n\n const isAddDisabled = () => {\n if (!account) return \"Account must be selected.\";\n if (!yardCommodity) return \"Load Type must be selected\";\n if (isBulkCommodity(yardCommodity))\n return \"Bulk inventory must be linked to product.\";\n return false;\n };\n\n const isCatalogDisabled = () => {\n if (!account) return \"Account must be selected.\";\n if (!yardCommodity?.commodity) return \"Load Type must be selected\";\n if (isBulkCommodity(yardCommodity) && hasInventory)\n return \"Only one bulk inventory allowed.\";\n return false;\n };\n\n return (\n <Grid container direction=\"row\" spacing={1} alignItems=\"flex-start\">\n <Grid item xs={4}>\n {isAddDisabled() ? (\n <Tooltip title={isAddDisabled()} placement=\"right\">\n <span>\n <Button label=\"Add\" color=\"default\" disabled>\n <AddIcon />\n </Button>\n </span>\n </Tooltip>\n ) : (\n <Button label=\"Add\" color=\"default\" onClick={handleAdd}>\n <AddIcon />\n </Button>\n )}\n </Grid>\n <Grid item xs={4}>\n {isCatalogDisabled() ? (\n <Tooltip title={isCatalogDisabled()} placement=\"right\">\n <span>\n <Button\n label=\"Catalog\"\n color=\"default\"\n disabled\n style={{ marginLeft: \"-15px\" }}\n >\n <AddAllIcon />\n </Button>\n </span>\n </Tooltip>\n ) : (\n <Button\n label=\"Catalog\"\n color=\"default\"\n style={{ marginLeft: \"-15px\" }}\n onClick={() => setIsSearchOpen(true)}\n >\n <AddAllIcon />\n </Button>\n )}\n </Grid>\n <Grid item xs={4}>\n {isAddDisabled() ? (\n <Tooltip title={isAddDisabled()} placement=\"right\">\n <span>\n <Button label=\"Upload\" color=\"default\" disabled>\n <UploadIcon />\n </Button>\n </span>\n </Tooltip>\n ) : (\n <Button\n label=\"Upload\"\n color=\"default\"\n onClick={() => setUploadOpen(true)}\n >\n <UploadIcon />\n </Button>\n )}\n </Grid>\n <Grid item xs={false}>\n {account && yardCommodity && isSearchOpen && (\n <CatalogSearchDialog\n backPath={backPath}\n form={form}\n account={account}\n allProducts={allProducts}\n yardCommodity={yardCommodity}\n isOpen={isSearchOpen}\n setIsOpen={setIsSearchOpen}\n handleAddSelected={handleAddSelected}\n />\n )}\n </Grid>\n <Grid item xs={false}>\n {account && yardCommodity && (\n <ManifestUploadDialog\n form={form}\n account={account}\n isOpen={uploadOpen}\n setIsOpen={setUploadOpen}\n handleAddUpload={handleAddUpload}\n />\n )}\n </Grid>\n </Grid>\n );\n};\n\nexport const autogenLotNumber = (lotType, formData) => {\n const poNo = formData?.poNumber?.replace(/[\\s-/]+/g, \"\");\n\n if (lotType === LotType.CARLOT && poNo?.length >= CARLOT_PO_NO_CHARS) {\n return poNo.slice(-CARLOT_PO_NO_CHARS);\n } else if (\n lotType === LotType.PERPETUAL &&\n formData.status === InboundStatus.PLACED\n ) {\n return getPerpetualDate(formData.placedDateTime);\n } else if (\n lotType === LotType.PERPETUAL &&\n (!formData.status ||\n formData.status === InboundStatus.IN_TRANSIT ||\n formData.status === InboundStatus.ARRIVED)\n ) {\n return \"TBD\";\n }\n return \"\";\n};\n\nexport const calcBillingQuantity = (formData, setCalcError) => {\n let billQty = 0;\n let error = null;\n setCalcError && setCalcError(null);\n debugger;\n\n try {\n if (formData.totalUnits && formData.billUnits) {\n if (formData.billUnits === Unit.CAR || formData.billUnits === Unit.TL) {\n return formData.billQuantity;\n } else if (formData.inventories?.items?.length > 0) {\n formData.inventories.items.forEach((item) => {\n const product = item.product;\n const shippedQty = item.quantityShipped ? item.quantityShipped : 0;\n const unitValue = convertUnits(\n shippedQty,\n formData.totalUnits,\n formData.billUnits,\n product\n );\n billQty += unitValue.value;\n if (!error && unitValue.error) {\n if (product) error = \"No conversion for \" + formData.billUnits;\n else error = \"Product missing entry for \" + formData.billUnits;\n setCalcError && setCalcError(error);\n }\n });\n }\n } else return null;\n\n if (error) return null;\n return billQty >= 0 ? trimDecimal(billQty) : formData.billQuantity;\n } catch (err) {\n logError(\"inboundUtils:calcBillingQuantity:\", err, false);\n return null;\n }\n};\n\nexport const calcTotalQuantity = (formData) => {\n const tallySheet = formData.inventories?.items;\n let total = 0;\n if (tallySheet) {\n tallySheet.forEach(\n (item) => (total += item?.quantityShipped ? item.quantityShipped : 0)\n );\n }\n\n return total;\n};\n\nconst getInventoryWeightUnits = (inventories) => {\n if (inventories?.length > 0) {\n const unitsSet = new Set(inventories.map((itm) => itm.weightUnits));\n return unitsSet.size === 1 ? unitsSet.values().next().value : null;\n }\n return null;\n};\n\nexport const calcNetWeight = (formData, setWeightError, weightUnits) => {\n // used in form to calc netWeight if account has inventory weight units\n let totalWeight = 0;\n let error = null;\n let hasWeights = true;\n const inventoryWeightUnits = getInventoryWeightUnits(\n formData.inventories?.items\n );\n const toUnits = weightUnits || formData.weightUnits || inventoryWeightUnits;\n const convert =\n toUnits &&\n (formData.weightUnits\n ? toUnits !== formData.weightUnits\n : toUnits !== inventoryWeightUnits);\n setWeightError && setWeightError(null);\n\n try {\n if (toUnits && formData.inventories?.items?.length > 0) {\n formData.inventories.items.forEach((item) => {\n let weight = 0;\n if (convert) {\n const product = item.product;\n const unitValue = convertUnits(\n item.quantityShipped,\n formData.totalUnits,\n toUnits,\n product\n );\n weight = unitValue.value;\n if (!error && unitValue.error) {\n if (product) error = \"No conversion for \" + weightUnits;\n else error = \"Product missing entry for \" + weightUnits;\n }\n } else if (item.weight) {\n weight = item.weight;\n } else if (item.product) {\n weight = item.product[toUnits.toLowerCase()];\n }\n hasWeights = hasWeights && weight ? true : false;\n if (hasWeights) {\n totalWeight +=\n weight * (item.quantityShipped ? item.quantityShipped : 0);\n } else if (!error) {\n error = \"Missing weight in inventories.\";\n }\n });\n }\n\n if (error) {\n setWeightError && setWeightError(error);\n return null;\n } else if (hasWeights) {\n return totalWeight >= 0 ? trimDecimal(totalWeight) : formData.netWeight;\n } else return formData.netWeight;\n } catch (err) {\n logError(\"inboundUtils:calcNetWeight:\", err, false);\n return null;\n }\n};\n\nexport const handleInventoriesWeight = (form, setWeightError) => {\n const formState = form.getState();\n const formData = formState.values;\n debugger;\n\n const weightUnits = getWeightUnits(formData.account, null);\n let totalWeight = null;\n if (weightUnits) {\n totalWeight = calcNetWeight(formData, setWeightError, weightUnits);\n form.change(\"weightUnits\", weightUnits);\n form.change(\"netWeight\", totalWeight);\n } else {\n form.change(\"weightUnits\", null);\n form.change(\"netWeight\", null);\n }\n};\n\nexport const emailPOD = async (\n record,\n toEmail,\n ccEmail,\n enclosePhotos,\n encloseAttachments,\n notify\n) => {\n if (!toEmail) return false;\n\n try {\n const htmlDoc = getInboundPODBody(\n record,\n enclosePhotos,\n encloseAttachments\n );\n\n const emailBody = {\n from: \"no_reply transloads.co <pod@transloads.co>\",\n to: splitEmails(toEmail),\n cc: splitEmails(ccEmail),\n // replyTo: getReplyToAddress(),\n subject: `Order #: ${record.poNumber} received at ${window.appUser.reloadYard.name}`,\n template: \"emailTemplateWide.html\",\n htmlContent: htmlDoc,\n attachPDF: true,\n };\n\n const response = await API.post(\"transREST\", \"/sendEmail\", {\n body: emailBody,\n });\n\n if (response.status !== \"success\") {\n notify(\"Email delivery failed.\", \"warning\");\n logError(\n \"inboundShipment:inboundUtils:emailPOD:poNumber\" + record.poNumber,\n response,\n false\n );\n }\n } catch (error) {\n logError(\"inboundShipment:inboundUtils:emailPOD\", error, notify);\n }\n};\n\nexport const getInfoBubble = (formData, scopedFormData) => {\n const infoBubble = [];\n const shippedQty = scopedFormData?.quantityShipped || 1;\n const product = scopedFormData?.product;\n\n if (product) {\n Object.keys(Unit).forEach((key) => {\n if (key !== formData.totalUnits) {\n const billRate = convertUnits(\n shippedQty,\n formData.totalUnits,\n key,\n product\n );\n if (billRate) infoBubble.push({ unit: key, value: billRate.value });\n }\n });\n\n if (infoBubble.length > 0) {\n return (\n <InputAdornment position=\"end\">\n <Tooltip\n title={\n <>\n <Typography>\n Product Code: {scopedFormData.productCode}\n </Typography>\n <Typography>\n {shippedQty} {formData.totalUnits} =\n </Typography>\n {infoBubble.map((itm) =>\n itm.value ? (\n <Typography>\n  {trimDecimal(itm.value)} {itm.unit}\n </Typography>\n ) : null\n )}\n </>\n }\n placement=\"right\"\n >\n <InfoOutlinedIcon fontSize=\"small\" />\n </Tooltip>\n </InputAdornment>\n );\n } else return null;\n } else return <ProductLinkIcon />;\n};\n\nexport const getLotNumberPrefix = (account, formData) => {\n return !formData.lotNumberOverride && account\n ? account.lotNumberPrefix\n : null;\n};\n\nexport const getPerpetualDate = (placedAt) => {\n return format(placedAt ? new Date(placedAt) : new Date(), \"MMdd\");\n};\n\nexport const getWeightUnits = (account, scopedFormData) => {\n const product = scopedFormData?.product;\n const inventory = scopedFormData;\n // const inventory = scopedFormData?.inventory;\n\n if (inventory?.weightUnits) return inventory.weightUnits;\n else if (product?.defaultWeightUnits) return product.defaultWeightUnits;\n else if (account?.defaultWeightUnits) return account.defaultWeightUnits;\n else return null;\n};\n\nexport const handleInventoriesQty = (form, setCalcError) => {\n const formState = form.getState();\n const formData = formState.values;\n\n const totalQty = calcTotalQuantity(formData);\n const billQty = calcBillingQuantity(formData, setCalcError);\n form.change(\"totalQuantity\", totalQty);\n form.change(\"billQuantity\", billQty);\n handleInventoriesWeight(form, undefined);\n};\n\nexport const handleCommodityChange = (\n event,\n form,\n setYardCommodity,\n setAreas\n) => {\n debugger;\n const yardComm = getYardCommodity(event.target.value);\n setYardCommodity && setYardCommodity(yardComm);\n form.change(\"reloadYardCommodity\", yardComm);\n form.change(\"totalUnits\", yardComm.units);\n\n // cannot change yardCommodity after inventories are added\n // set inventory commodity if not already set from product\n // const inventoryState = form.getFieldState(\"inventories.items\");\n // const inventories = inventoryState?.value;\n // inventories?.forEach(item => {\n // item.reloadYardCommodityId = item?.productId && item.reloadYardCommodityId ? item.reloadYardCommodityId : yardComm.id\n // });\n // form.change('inventories.items', inventories);\n\n const areas = filterAreas(window.appUser.reloadYard.areas.items, yardComm);\n setAreas(areas);\n};\n\nexport const handleUnitChange = (form, setCalcError) => {\n const formState = form.getState();\n const billQty = calcBillingQuantity(formState.values, setCalcError);\n form.change(\"billQuantity\", billQty);\n};\n\nexport const hasAllProducts = (form, inbound) => {\n let retVal = true;\n\n if (inbound?.inventories?.items) {\n retVal = !inbound.inventories.items.some((item) => !item?.product);\n } else {\n const fieldState = form.getFieldState(\"inventories.items\");\n const inventories = fieldState?.value;\n retVal = !inventories?.some((item) => !item?.product);\n }\n\n return retVal;\n};\n\nexport const updateStripeUsage = async (inbound) => {\n try {\n debugger;\n let billingScheme = window.appUser.subscription?.plan?.usage_type;\n let subscriptionItem = window.appUser.subscription?.items?.data[0];\n\n if (!subscriptionItem) {\n // Retry get updated subscription in case of stripe error on login.\n const subscription = await retrieveStripeSubscription(\n window.appUser.reloadYard\n );\n subscriptionItem = subscription?.items?.data[0];\n if (subscriptionItem) {\n window.appUser.subscription = subscription;\n billingScheme = subscription.plan?.billing_scheme;\n } else {\n logError(\n \"inboundUtils:updateStripeUsage:response\",\n subscription,\n false\n );\n return;\n }\n }\n\n if (billingScheme === \"metered\") await runUpdateStripeUsage(inbound);\n } catch (error) {\n logError(\"inboundUtils:updateStripeUsage\", error, false);\n }\n};\n\nconst runUpdateStripeUsage = async (inbound) => {\n const response = await API.post(\"transREST\", \"/stripe-report-usage\", {\n body: {\n subscriptionItemId: window.appUser.subscription.items.data[0].id,\n timestamp: inbound.stripeBillingDateTime\n ? new Date(inbound.stripeBillingDateTime).getTime()\n : new Date().getTime(),\n shipmentId: inbound.id,\n // shipmentId: crypto.randomUUID(), // for testing ONLY\n },\n });\n\n if (response.err) {\n logError(\"inboundUtils:runUpdateStripeUsage:response\", response.err, false);\n }\n};\n\n// Example of how to do custom validate required\n// export const requiredRailCarNunber = (value, allValues) => {\n// if (allValues?.carrierType === CarrierType.RAIL && (!value || value === \"\") ) {\n// // return an object just like the other validators\n// return { message: `Required`, isRequired: true, args: { required: true } }\n// }\n// return null\n// };\n\nconst transformLambdaSeals = (inbound) => {\n const sealUpdateList = [];\n if (inbound?.inValidSeals?.items) {\n inbound.inValidSeals.items.forEach((el) => {\n const sealObject = inbound.seals.items.find((seal) => seal.id === el.id);\n\n if (\n el.barcode !== sealObject.barcode ||\n el.validated !== sealObject.validated\n ) {\n sealUpdateList.push(el);\n }\n });\n }\n return { sealUpdateList };\n};\n\nexport const lambdaSaveInbound = async (inbound, isRollback) => {\n const transData = await transformLamdaInventories(inbound, isRollback);\n const transDataSeal = transformLambdaSeals(inbound);\n // For testing purposes only\n const stripeUsageInput = {\n // subscriptionItemId: window.appUser.subscription.items.data[0].id,\n // timestamp: inbound.stripeBillingDateTime ? new Date(inbound.stripeBillingDateTime).getTime() : new Date().getTime(),\n // shipmentId: inbound.id,\n // shipmentId: crypto.randomUUID(), // for testing ONLY\n };\n\n // console.log(\"inventoryUpdateList\", transData.inventoryUpdateList);\n // console.log(\"inventoryItemUpdateList\", transData.inventoryItemUpdateList);\n // console.log(\"inventoryItemDeleteList\", transData.inventoryItemDeleteList);\n // console.log(\"locationUpdateList\", transData.locationUpdateList);\n debugger;\n const response = await API.post(\"transREST\", \"/inboundUpdate\", {\n body: {\n inventoryUpdateList: transData.inventoryUpdateList,\n inventoryItemUpdateList: transData.inventoryItemUpdateList,\n inventoryItemDeleteList: transData.inventoryItemDeleteList,\n locationUpdateList: transData.locationUpdateList,\n sealUpdateList: transDataSeal.sealUpdateList,\n stripeUsageInput: stripeUsageInput,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n\n if (response.error) {\n logError(\n \"inboundShipments:inboundUtils:lambdaSaveInventories\",\n response.error,\n false,\n false\n );\n throw response.error;\n }\n};\n\nexport const transformLamdaInventories = async (inbound, isRollback) => {\n const updateDate = new Date().toISOString();\n const inventoryUpdateList = [];\n const inventoryItemUpdateList = [];\n const inventoryItemDeleteList = [];\n const toUpdateLocationMap = {};\n const toUpdateAggregateItemMap = {};\n debugger;\n\n // Update only CURRENT Inventory Items\n const inventoryCount = inbound.inventories.items.length;\n for (let index = 0; index < inventoryCount; index++) {\n const inventory = inbound.inventories.items[index];\n let aggregateInventory = null;\n\n if (inventory.id) {\n const toUpdateInventory = {\n ...inventory,\n updatedAt: updateDate,\n areaId: inventory.locationId ? inventory.areaId : inbound.areaId,\n zoneId: inventory.locationId ? inventory.zoneId : inbound.zoneId,\n lotNumber: inbound.lotNumber,\n poNumber: inbound.poNumber,\n railCarNumber: inbound.railCarNumber,\n deliveryDateTime: inbound.placedDateTime,\n inventoryUnits: inbound.totalUnits,\n quantityDelivered: inventory.quantityDelivered,\n quantityOnHand: inventory.quantityOnHand,\n quantityCommitted: inventory.quantityCommitted,\n quantityPhysical: inventory.quantityPhysical,\n sortKey: index + SORTKEY_BUFFER,\n customFields: getCustomFieldsToSave(\n inventory.customFields,\n inbound.account.inventoryCustomFields\n ),\n photos: inventory.photos ? inventory.photos : null,\n verificationRequired: inventory.verificationRequired\n ? inventory.verificationRequired\n : null,\n };\n\n if (\n inbound.state === InboundState.NEW ||\n inbound.state === InboundState.PROCESS_SHIPMENT\n ) {\n // rollback inventory back to IN_TRANSIT\n toUpdateInventory.status = InventoryStatus.IN_TRANSIT;\n toUpdateInventory.verificationRequired = null;\n toUpdateInventory.quantityDelivered = null;\n toUpdateInventory.quantityOnHand = 0;\n\n toUpdateInventory.hasException = false;\n toUpdateInventory.overShipment = false;\n toUpdateInventory.overShipmentQuantity = null;\n toUpdateInventory.overShipmentNote = null;\n toUpdateInventory.underShipment = false;\n toUpdateInventory.underShipmentQuantity = null;\n toUpdateInventory.underShipmentNote = null;\n toUpdateInventory.isDamaged = false;\n toUpdateInventory.originOfDamage = \"\";\n toUpdateInventory.otherException = false;\n toUpdateInventory.otherExceptionNote = null;\n } else if (\n inbound.state === InboundState.PROCESS_INVENTORY &&\n inventory.status === InventoryStatus.ARRIVED &&\n inventory.verificationRequired === \"true\"\n ) {\n // accepted = clear verificationRequired\n toUpdateInventory.status = InventoryStatus.ARRIVED;\n toUpdateInventory.verificationRequired = \"resolved\";\n } else if (\n isBulkCommodity(inbound.reloadYardCommodity) &&\n isTrack(inventory.areaId) &&\n inbound.status === InboundStatus.RELEASED &&\n inventory.status === InventoryStatus.STORED\n ) {\n // zero out inventory on railcar release - for bulk commodities in railcar\n // toUpdateInventory.quantityOnHand = 0; preserve discrepency count\n toUpdateInventory.status = InventoryStatus.SHIPPED;\n } else if (\n inventory.status === InventoryStatus.REVIEW &&\n inventory.verificationRequired === \"true\"\n ) {\n toUpdateInventory.status = InventoryStatus.STORED;\n toUpdateInventory.verificationRequired = \"resolved\";\n } else if (\n inventory.status === InventoryStatus.UNLOADED &&\n inventory.verificationRequired === \"true\"\n ) {\n toUpdateInventory.status = InventoryStatus.STORED;\n toUpdateInventory.verificationRequired = \"resolved\";\n } else toUpdateInventory.status = inventory.status;\n\n // toUpdateInventory[\"status#lotNumber\"] = `${toUpdateInventory.status}#${toUpdateInventory.lotNumber}`;\n // toUpdateInventory[\"status#accountName#productName#lotNumber\"] = `${toUpdateInventory.status}#${toUpdateInventory.accountName}#${toUpdateInventory.productName}#${toUpdateInventory.lotNumber}`;\n // toUpdateInventory[\"status#accountId#productName#lotNumber\"] = `${toUpdateInventory.status}#${toUpdateInventory.accountId}#${toUpdateInventory.productName}#${toUpdateInventory.lotNumber}`;\n\n delete toUpdateInventory.account;\n delete toUpdateInventory.inboundShipment;\n delete toUpdateInventory.inventoryItems;\n delete toUpdateInventory.location;\n delete toUpdateInventory.product;\n delete toUpdateInventory.reloadYardCommodity;\n delete toUpdateInventory.shipmentLineItems;\n\n inventoryUpdateList.push({ ...toUpdateInventory });\n\n if (isRollback) {\n if (inventory.status === InventoryStatus.AGGREGATED) {\n // remove quantity from aggregate\n const response = await API.graphql(\n graphqlOperation(getInventorieAggregate, {\n id: inventory.aggregateInventoryId,\n })\n );\n aggregateInventory = response.data.getInventorie;\n const toUpdateInventory = {\n ...aggregateInventory,\n quantityOnHand:\n aggregateInventory.quantityOnHand - inventory.quantityOnHand,\n updatedAt: updateDate,\n };\n delete toUpdateInventory.account;\n delete toUpdateInventory.inboundShipment;\n delete toUpdateInventory.inventoryItems;\n delete toUpdateInventory.product;\n delete toUpdateInventory.reloadYardCommodity;\n delete toUpdateInventory.shipmentLineItems;\n\n inventoryUpdateList.push({ ...toUpdateInventory });\n }\n }\n\n debugger;\n for (const inventoryItem of inventory.inventoryItems.items) {\n // roll back & reset all locations\n if (isRollback) {\n const toDeleteInventoryItem = {\n id: inventoryItem.id,\n inventoryId: inventoryItem.inventoryId,\n };\n inventoryItemDeleteList.push(toDeleteInventoryItem);\n\n if (inventoryItem.status === InventoryStatus.AGGREGATED) {\n let aggregateItem =\n toUpdateAggregateItemMap[inventoryItem.locationId];\n if (!aggregateItem) {\n aggregateItem = aggregateInventory.inventoryItems.items.find(\n (itm) =>\n itm.locationId === inventoryItem.locationId &&\n itm.status === InventoryStatus.STORED\n );\n }\n\n // remove quantity from aggregate\n const toUpdateAggregateItem = {\n ...aggregateItem,\n updatedAt: updateDate,\n quantityOnHand:\n aggregateItem.quantityOnHand - inventoryItem.quantityOnHand,\n };\n delete toUpdateAggregateItem.aisle;\n delete toUpdateAggregateItem.area;\n delete toUpdateAggregateItem.inventory;\n delete toUpdateAggregateItem.location;\n delete toUpdateAggregateItem.zone;\n\n toUpdateAggregateItemMap[inventoryItem.locationId] =\n toUpdateAggregateItem;\n }\n\n const isOtherLoadType =\n inventoryItem.location.locationLoad?.other.selected;\n // update location capacifyUsed if STRUCTURED and not OTHER, or BULK\n if (\n (inventoryItem.location.type === LocationType.STRUCTURED &&\n !isOtherLoadType) ||\n isBulkLocation(inventoryItem.location)\n ) {\n const updatedLocation =\n toUpdateLocationMap[inventoryItem.locationId];\n\n if (updatedLocation) {\n // follow-on location encounters\n inventoryItem.location = updatedLocation;\n toUpdateLocationMap[inventoryItem.locationId] = resetCapacityUsed(\n inventory,\n inventoryItem\n );\n } else {\n // first location encounter\n toUpdateLocationMap[inventoryItem.locationId] = resetCapacityUsed(\n inventory,\n inventoryItem\n );\n }\n }\n } else {\n // ONLY set inventoryItems to STORED on inbound RELEASED to prevent outbound creation before the whole shipment is completed.\n // This is done to avoid inbound rollback if outbound inventories are committed.\n if (inbound.status === InboundStatus.RELEASED) {\n const toUpdateInventoryItem = {\n ...inventoryItem,\n updatedAt: updateDate,\n };\n\n if (toUpdateInventory.status === InventoryStatus.SHIPPED) {\n // remove zeroed out inventory on railcar release - for bulk commodities in railcar\n // toUpdateInventoryItem.quantityOnHand = 0; preserve discrepency count\n toUpdateInventoryItem.status = InventoryStatus.SHIPPED;\n } else if (inventoryItem.status !== InventoryStatus.AGGREGATED) {\n // bulk is AGGREGATED, all other inventory items are STORED\n toUpdateInventoryItem.status = InventoryStatus.STORED;\n }\n delete toUpdateInventoryItem.aisle;\n delete toUpdateInventoryItem.area;\n delete toUpdateInventoryItem.inventory;\n delete toUpdateInventoryItem.location;\n delete toUpdateInventoryItem.zone;\n\n inventoryItemUpdateList.push(toUpdateInventoryItem);\n }\n }\n }\n }\n }\n\n const locationUpdateList = Object.values(toUpdateLocationMap);\n const aggregateItemUpdateList = Object.values(toUpdateAggregateItemMap);\n if (aggregateItemUpdateList?.length > 0)\n inventoryItemUpdateList.push(...aggregateItemUpdateList);\n\n return {\n inventoryUpdateList,\n inventoryItemUpdateList,\n inventoryItemDeleteList,\n locationUpdateList,\n };\n};\n\nexport const updateInboundClient = async (record) => {\n const toUpdateRecord = { ...record };\n delete toUpdateRecord.account;\n delete toUpdateRecord.area;\n delete toUpdateRecord.createdAt;\n delete toUpdateRecord.inventories;\n delete toUpdateRecord.invoice;\n delete toUpdateRecord.location;\n delete toUpdateRecord.reloadYardCommodity;\n delete toUpdateRecord.seals;\n delete toUpdateRecord.timeslot;\n delete toUpdateRecord.updatedAt;\n delete toUpdateRecord.zone;\n\n await API.graphql(\n graphqlOperation(updateInboundShipmentMini, { input: toUpdateRecord })\n );\n};\n\nexport const resetShipmentExceptions = (data) => {\n data.verificationRequired = null;\n data.hasException = false;\n data.unsafeShipment = false;\n data.unsafeShipmentNote = null;\n data.brokenSeal = false;\n data.brokenSealNote = null;\n data.otherException = false;\n data.otherExceptionNote = null;\n};\n\nexport const handleSendPOD = async (\n data,\n toEmail,\n ccEmail,\n enclosePhotos,\n encloseAttachments,\n notify,\n refresh\n) => {\n try {\n debugger;\n const success = await emailPOD(\n data,\n toEmail,\n ccEmail,\n enclosePhotos,\n encloseAttachments,\n notify\n );\n\n if (success) {\n const historyNote = {\n text: `POD sent to : ${toEmail}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.GENERIC,\n };\n\n const newHistory = { ...data, history: [...data.history, historyNote] };\n await updateInboundClient(newHistory);\n notify(\"POD sent successfully\");\n refresh && refresh();\n }\n } catch (err) {\n logError(\"OutboundShipments:OutboundUtils:handleSend\", err, notify, null);\n }\n};\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { Route } from \"react-router-dom\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n createInventoryItem,\n updateInventorieInbound,\n} from \"../../../graphql/inventory/custom-mutations\";\nimport { createShipmentLineItemInventoryItem } from \"../../../graphql/mutations\";\nimport { createShipmentLineItem } from \"../../../graphql/mutations\";\nimport { getInboundShipment } from \"../../../graphql/inbound/custom-queries\";\nimport { getOutboundShipment } from \"../../../graphql/outbound/custom-queries\";\nimport {\n Avatar,\n Box,\n Button,\n CardActions,\n CircularProgress,\n Divider,\n FormControlLabel,\n Grid,\n IconButton,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n ListItemSecondaryAction,\n Step,\n StepConnector,\n StepLabel,\n Stepper,\n Switch,\n TextField,\n Typography,\n Dialog,\n DialogTitle,\n DialogActions,\n DialogContent,\n useMediaQuery,\n FormControl,\n FormLabel,\n FormGroup,\n Checkbox,\n Backdrop,\n InputAdornment,\n Menu,\n MenuItem,\n CardContent,\n} from \"@material-ui/core\";\nimport SpeedDial from \"@material-ui/lab/SpeedDial\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport CloseOutlinedIcon from \"@material-ui/icons/CloseOutlined\";\n\nimport SpeedDialIcon from \"@material-ui/lab/SpeedDialIcon\";\nimport SpeedDialAction from \"@material-ui/lab/SpeedDialAction\";\nimport ErrorOutlineOutlinedIcon from \"@material-ui/icons/ErrorOutlineOutlined\";\nimport CheckOutlinedIcon from \"@material-ui/icons/CheckOutlined\";\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\nimport DoubleCheckIcon from \"@material-ui/icons/DoneAll\";\nimport HighlightOffIcon from \"@material-ui/icons/HighlightOff\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport DoneIcon from \"@material-ui/icons/Done\";\nimport KeyboardArrowRightIcon from \"@material-ui/icons/KeyboardArrowRight\";\nimport MoreVertOutlinedIcon from \"@material-ui/icons/MoreVertOutlined\";\nimport PendingApprovalIcon from \"@material-ui/icons/PriorityHigh\";\nimport ReviewOutlinedIcon from \"@material-ui/icons/FindInPageOutlined\";\nimport XIcon from \"@material-ui/icons/CloseOutlined\";\nimport { TrainIcon, TruckIcon } from \"../../../components/common\";\nimport { useNotify, useRedirect } from \"react-admin\";\nimport { updateOutboundQuantity } from \"../../../managerApp/resources/outboundShipments/lineItem/PickListItemUtils\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n AreaType,\n CarrierType,\n InboundSteps,\n InboundTrackSteps,\n InboundState,\n InboundStatus,\n InventoryStatus,\n MAX_PHOTO_NUM_INBOUND,\n NoteType,\n ShipmentLineItemStatus,\n UserType,\n} from \"../../../utils/constants\";\nimport { useInboundContext } from \"./context\";\nimport { ShipmentItemCard } from \"./ShipmentItem\";\nimport ErrorCard from \"../../../components/ErrorCard\";\nimport { handleModelPhotos } from \"../../../utils/fileUtils\";\nimport {\n isBulkArea,\n isRailToTrack,\n isTrack,\n isTruckToRail,\n isUnmanagedLocation,\n} from \"../../../utils/locationUtils\";\nimport {\n getUnitName,\n isBulkCommodity,\n isBulkShipment,\n isShippingContainer,\n} from \"../../../utils/loadTypeUtils\";\nimport {\n getInboundCurrentStepName,\n getInventoryPrimaryField,\n getLogState,\n} from \"../../../utils/utils\";\nimport InventoryPhotos from \"../../../components/common/InventoryPhotos\";\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport { CustomFieldsMobile } from \"../../../components/common/CustomFields\";\nimport { calcNetWeight } from \"../../../managerApp/resources/outboundShipments/OutboundUtils\";\nimport { ChecklistDialog } from \"../../../components/common/ChecklistDialog\";\nimport { inventoryByAreaByProductByStatus } from \"../../../graphql/inventory/custom-queries\";\nimport { SealDialog } from \"./Seals/SealsDialog\";\nimport { emailPOD } from \"../../../managerApp/resources/inboundShipments/InboundUtils\";\n\nconst QontoConnector = withStyles({\n alternativeLabel: {\n top: 10,\n left: \"calc(-50% + 16px)\",\n right: \"calc(50% + 16px)\",\n },\n active: {\n \"& $line\": {\n borderColor: \"#1E88E5\",\n },\n },\n completed: {\n \"& $line\": {\n borderColor: \"#1E88E5\",\n },\n },\n line: {\n borderColor: \"#eaeaf0\",\n borderTopWidth: 3,\n borderRadius: 1,\n },\n})(StepConnector);\n\nexport const ProcessInboundShipmentCard = ({ classes, match, history }) => {\n return (\n <>\n <Route\n path={`${match.path}/inventories/:id`}\n render={(props) => <ShipmentItemCard {...props} />}\n />\n <Route\n path={`${match.path}`}\n exact\n render={(props) => (\n <PlacedShipmentCard classes={classes} history={history} {...props} />\n )}\n />\n </>\n );\n};\n\nconst getbyProductNameKey = (inventory) =>\n `${inventory.areaId}-${inventory.zoneId}-${inventory.productName}-${inventory.inventoryUnits}`;\nconst getbyProductIdKey = (inventory) =>\n `${inventory.areaId}-${inventory.zoneId}-${inventory.productId}-${inventory.inventoryUnits}`;\nconst QUANTITY_PLACEHOLDER = \"QUANTITY_PLACEHOLDER\";\n\nconst PlacedShipmentCard = ({ classes, match, history }) => {\n const { state, dispatch, getShipment, saveShipment } = useInboundContext();\n const { currentShipment, notes, loading } = state;\n const [photosErrorMsg, setPhotosErrorMsg] = useState(\"\");\n const [isExceptionDialogOpen, setIsExceptionDialogOpen] = useState(false);\n const [isSpeedDialgOpen, setIsSpeedDialgOpen] = useState(false);\n const [isSealDialogOpen, setIsSealDialogOpen] = useState(false);\n const [isSealsConfirmationOpen, setIsSealsConfirmationOpen] = useState(false);\n const [isChecklistDialogOpen, setIsChecklistDialogOpen] = useState(false);\n const [\n clonableInventoriesByProductName,\n setClonableInventoriesByProductName,\n ] = useState({});\n const [clonableInventoriesByProductId, setClonableInventoriesByProductId] =\n useState({});\n const [noteErrorMsg, setNoteErrorMsg] = useState(\"\");\n const [invalidIdError, setInvalidIdError] = useState();\n const [actions, setActions] = useState([]);\n const notify = useNotify();\n const redirect = useRedirect();\n const imgRef = useRef();\n const note = notes[currentShipment.id];\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n useEffect(() => {\n getData();\n }, []);\n\n const getData = async () => {\n debugger;\n try {\n dispatch({ type: \"SET_LOADING\", payload: true });\n const inboundShipment = await getShipment(match);\n if (!inboundShipment)\n setInvalidIdError(`Inbound shipment ${match.params.id} was not found.`);\n else {\n inboundShipment.stepName = getInboundCurrentStepName(inboundShipment);\n dispatch({ type: \"SET_CURRENT_SHIPPMENT\", payload: inboundShipment });\n debugger;\n if (\n inboundShipment.area.areaType !== AreaType.BULK &&\n inboundShipment.area.areaType !== AreaType.TRACK &&\n inboundShipment.inventories.items.length > 1\n ) {\n getClonableInventories(inboundShipment);\n }\n const actions = [\n {\n icon: (\n <ErrorOutlineOutlinedIcon\n onClick={() =>\n handleSpeedDialAction(() => setIsExceptionDialogOpen(true))\n }\n />\n ),\n name: \"Exceptions\",\n },\n ];\n if (inboundShipment.checklist?.length > 0) {\n actions.push({\n icon: (\n <CheckOutlinedIcon\n onClick={() =>\n handleSpeedDialAction(() => setIsChecklistDialogOpen(true))\n }\n />\n ),\n name: \"Checklist\",\n });\n }\n if (inboundShipment.account.trackInboundSeals) {\n actions.push({\n icon: (\n <LockOutlinedIcon\n onClick={() =>\n handleSpeedDialAction(() => setIsSealDialogOpen(true))\n }\n />\n ),\n name: \"Seal\",\n });\n }\n setActions(actions);\n }\n } catch (err) {\n logError(\"ProcessInboundShipmentCard:getData\", err, notify);\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n };\n\n const getClonableInventories = (inboundShipment) => {\n const colanableInventoriesByProductName = {};\n const colanableInventoriesByProductId = {};\n inboundShipment.inventories.items.forEach((inventory) => {\n if (\n inventory.inventoryItems.items?.length > 0 &&\n inventory.status === InventoryStatus.UNLOADED &&\n !inventory.isDamaged &&\n !inventory.hasException &&\n inventory.inventoryItems.items.find((inventoryItem) =>\n isUnmanagedLocation(inventoryItem.location)\n )\n ) {\n const byProductNameKey = getbyProductNameKey(inventory);\n const byProductIdKey = getbyProductIdKey(inventory);\n if (!colanableInventoriesByProductName[byProductNameKey])\n colanableInventoriesByProductName[byProductNameKey] = {};\n if (!colanableInventoriesByProductId[byProductIdKey])\n colanableInventoriesByProductId[byProductIdKey] = {};\n inventory.inventoryItems.items.forEach((inventoryItem) => {\n if (\n isUnmanagedLocation(inventoryItem.location) &&\n !inventoryItem.hasException\n ) {\n const clonableInventoryItem = {\n ...inventoryItem,\n name: `Place ${QUANTITY_PLACEHOLDER} ${getUnitName(\n inventory.inventoryUnits\n )} in ${inventoryItem.locationFullName}`,\n };\n colanableInventoriesByProductName[byProductNameKey][\n inventoryItem.locationId\n ] = clonableInventoryItem;\n colanableInventoriesByProductId[byProductIdKey][\n inventoryItem.locationId\n ] = clonableInventoryItem;\n }\n });\n }\n });\n setClonableInventoriesByProductName(colanableInventoriesByProductName);\n setClonableInventoriesByProductId(colanableInventoriesByProductId);\n };\n\n const backHandler = () => {\n dispatch({\n type: \"CLEAR_NOTE\",\n payload: currentShipment,\n });\n history.push(\"/processShipments\");\n };\n\n const getSteps = () => {\n const steps = isRailToTrack(currentShipment.areaId, currentShipment)\n ? [...InboundTrackSteps]\n : [...InboundSteps];\n\n if (!currentShipment.secondaryReview) steps.pop();\n return steps;\n };\n\n const getActiveStep = () => {\n if (isRailToTrack(currentShipment.areaId, currentShipment)) {\n if (!currentShipment.trackId) return 0;\n if (\n currentShipment.state === InboundState.PROCESS_SHIPMENT ||\n currentShipment.state === InboundState.APPROVE_SHIPMENT\n ) {\n return 1;\n }\n if (\n currentShipment.state === InboundState.PROCESS_INVENTORY ||\n currentShipment.state === InboundState.APPROVE_INVENTORY\n ) {\n return 2;\n }\n return 3;\n } else {\n if (\n currentShipment.state === InboundState.PROCESS_SHIPMENT ||\n currentShipment.state === InboundState.APPROVE_SHIPMENT\n ) {\n return 0;\n }\n if (\n currentShipment.state === InboundState.PROCESS_INVENTORY ||\n currentShipment.state === InboundState.APPROVE_INVENTORY\n ) {\n return 1;\n }\n return 2;\n }\n };\n\n const isStepCompleted = (index) => {\n return index < getActiveStep();\n };\n\n const isStepFailed = (index) => {\n return (\n currentShipment?.state?.startsWith(\"APPROVE\") && index === getActiveStep()\n );\n };\n\n const handleShipmentPhotos = async (photos, selectedPhotoIdx) => {\n await handleModelPhotos({\n photos,\n model: currentShipment,\n saveFn: saveShipment,\n maxNumOfPhotos: MAX_PHOTO_NUM_INBOUND,\n selectedPhotoIdx,\n notify,\n redirect,\n });\n };\n\n // const handlePhotoLoading = val => {\n // if (val) dispatch({type: \"SET_LOADING\", payload: true});\n // else dispatch({type: \"SET_LOADING\", payload: false});\n // }\n\n const saveInventory = (inventory) => {\n const toUpdateInventory = { ...inventory, aggregateInventoryId: \"\" };\n if (\n isBulkShipment(\n inventory.reloadYardCommodity?.commodity,\n inventory.area\n ) ||\n isShippingContainer(inventory.reloadYardCommodity?.commodity)\n ) {\n inventory.photos = [...currentShipment.photos];\n }\n if (currentShipment.state === InboundState.COMPLETED) {\n toUpdateInventory.quantityOnHand = inventory.quantityDelivered;\n toUpdateInventory.quantityPhysical = inventory.quantityDelivered;\n if (isTruckToRail(inventory.areaId, currentShipment)) {\n // Change quantityCommitted to the sum of quantities in rail cars (some can be in a location)\n toUpdateInventory.quantityCommitted =\n toUpdateInventory.quantityDelivered;\n const newHistory = {\n type: NoteType.SHIPMENT,\n date: new Date(),\n by: window.appUser?.fullName,\n text: `Committed Outbound Qty. of ${inventory.quantityDelivered}`,\n };\n if (toUpdateInventory.history)\n toUpdateInventory.history.push(newHistory);\n else toUpdateInventory.history = [newHistory];\n }\n }\n toUpdateInventory.updatedAt = new Date().toISOString();\n delete toUpdateInventory.account;\n delete toUpdateInventory.inboundShipment;\n delete toUpdateInventory.location;\n delete toUpdateInventory.product;\n delete toUpdateInventory.reloadYardCommodity;\n delete toUpdateInventory.shipmentLineItems;\n delete toUpdateInventory.inventoryItems;\n delete toUpdateInventory.area;\n return toUpdateInventory;\n };\n\n const handleClone = async (inventory, inventoryItem) => {\n if (!inventory || !inventoryItem) return;\n dispatch({ type: \"SET_LOADING\", payload: true });\n try {\n const toCloneInventoryItem = { ...inventoryItem };\n delete toCloneInventoryItem.id;\n delete toCloneInventoryItem.name;\n toCloneInventoryItem.inventoryId = inventory.id;\n toCloneInventoryItem.groups = window.appUser.reloadYard.groups;\n toCloneInventoryItem.quantityOnHand = inventory.quantityShipped;\n toCloneInventoryItem.accountId = currentShipment.accountId;\n toCloneInventoryItem.inboundShipmentId = currentShipment.id;\n toCloneInventoryItem.reloadYardId = window.appUser.reloadYard.id;\n toCloneInventoryItem.unloadedBy = window.appUser.fullName;\n toCloneInventoryItem.unloadedDateTime = new Date();\n toCloneInventoryItem.locationFullName = inventoryItem.locationFullName;\n const historyText = `Placed ${\n toCloneInventoryItem.quantityOnHand\n } ${getUnitName(inventory.inventoryUnits)} in ${\n inventoryItem.locationFullName\n }`;\n const itemHistory = {\n type: NoteType.SHIPMENT,\n date: new Date(),\n by: window.appUser?.fullName,\n text: historyText,\n };\n toCloneInventoryItem.history = [itemHistory];\n delete toCloneInventoryItem.location;\n debugger;\n const promiseList = [];\n promiseList.push(\n API.graphql(\n graphqlOperation(createInventoryItem, {\n input: toCloneInventoryItem,\n })\n )\n );\n\n const toCloneInventory = currentShipment.inventories.items.find(\n (itm) => itm.id === inventoryItem.inventoryId\n );\n const toUpdateInventory = {};\n toUpdateInventory.id = inventory.id;\n toUpdateInventory.status = toCloneInventory.status;\n toUpdateInventory.productId = toCloneInventory.productId || \"\";\n toUpdateInventory.lotNumber = inventory.lotNumber;\n toUpdateInventory.accountName = inventory.accountName;\n toUpdateInventory.productName = inventory.productName;\n toUpdateInventory.inboundShipmentId = inventory.inboundShipmentId;\n toUpdateInventory.reloadYardId = window.appUser.reloadYard.id;\n toUpdateInventory.accountId = currentShipment.accountId;\n toUpdateInventory.accountName = currentShipment.accountName;\n toUpdateInventory.inboundShipmentId = currentShipment.id;\n toUpdateInventory.quantityDelivered = inventory.quantityShipped;\n toUpdateInventory.deliveryDateTime = currentShipment.placedDateTime\n ? currentShipment.placedDateTime\n : new Date();\n if (!toUpdateInventory.history) toUpdateInventory.history = [];\n const newHistory = {\n type: NoteType.SHIPMENT,\n date: new Date(),\n by: window.appUser.fullName,\n text: `Inventory saved | status: ${toUpdateInventory.status} | quantity received: ${toUpdateInventory.quantityDelivered}`,\n };\n if (toUpdateInventory.history) toUpdateInventory.history.push(newHistory);\n promiseList.push(\n API.graphql(\n graphqlOperation(updateInventorieInbound, {\n input: toUpdateInventory,\n })\n )\n );\n await Promise.all(promiseList);\n await getData();\n notify(\n `${toCloneInventoryItem.quantityOnHand} ${getUnitName(\n toCloneInventory.inventoryUnits\n )}\n were placed in ${toCloneInventoryItem.locationFullName}.`,\n \"info\"\n );\n } catch (err) {\n logError(\"ProcessInboundShipmentCard:handleClone\", err, notify);\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n };\n\n const validateChecklist = (currentShipment, complete) => {\n debugger;\n const stepName = currentShipment.stepName;\n // No validation for verificationRequired\n if (currentShipment.verificationRequired === \"true\") return true;\n // No checklist validation for save nor for request approval\n if (stepName === InboundSteps[1] && !complete) return true;\n\n const inboundSteps = getSteps();\n const currentShipmentStepMap = inboundSteps.reduce((stepsMap, itm) => {\n stepsMap[itm] = itm;\n return stepsMap;\n }, {});\n let uncompletedSteps;\n if (complete && stepName === inboundSteps[inboundSteps.length - 1]) {\n uncompletedSteps = currentShipment.checklist?.filter(\n (itm) =>\n currentShipmentStepMap[itm.stepName] &&\n itm.isRequired &&\n !itm.isCompleted\n );\n } else {\n uncompletedSteps = currentShipment.checklist?.filter(\n (itm) =>\n currentShipmentStepMap[itm.stepName] &&\n itm.stepName === stepName &&\n itm.isRequired &&\n !itm.isCompleted\n );\n }\n\n if (uncompletedSteps?.length > 0) {\n notify(\n `Some checklist items are not completed, please complete the checklist to proceed.`,\n \"error\"\n );\n return false;\n }\n return true;\n };\n\n const handleSealsConfirmationClose = () => {\n setIsSealsConfirmationOpen(false);\n };\n\n const handleSealsConfirmationConfirm = () => {\n setIsSealsConfirmationOpen(false);\n const completeFlag = !isCompleteDisabled();\n handleSave(completeFlag, true);\n };\n\n const validateForm = (complete, isSealsConfirmed = false) => {\n clearForm();\n debugger;\n if (\n currentShipment.account.trackInboundSeals &&\n !currentShipment.sealNumbers?.length &&\n !currentShipment.seals?.items.length &&\n !isSealsConfirmed\n ) {\n setIsSealsConfirmationOpen(true);\n return false;\n }\n\n if (\n getLeftButtonText() === \"Accept\" &&\n currentShipment.sealNumbers?.length > 0\n ) {\n debugger;\n let isValidSeals = false;\n if (\n currentShipment.sealNumbers.length !==\n currentShipment.seals?.items.length\n ) {\n notify(\"Please scan all seals before accepting the shipment.\", \"error\");\n return false;\n }\n isValidSeals =\n currentShipment.seals.items.filter((itm) => !itm.validated).length ===\n 0;\n if (!isValidSeals) {\n notify(\n \"Invalid seals found, please submit exception for approval.\",\n \"error\"\n );\n return false;\n }\n }\n\n let valid = validateChecklist(currentShipment, complete);\n if (currentShipment.state === InboundState.PROCESS_SHIPMENT) {\n if (currentShipment.verificationRequired === \"true\") {\n if (!note) {\n valid = false;\n setNoteErrorMsg(\"A note is required for Approval request.\");\n } else {\n setNoteErrorMsg(\"\");\n }\n }\n }\n\n if (complete && currentShipment.account?.inboundPhotos > 0) {\n if (\n !currentShipment.photos ||\n currentShipment.photos.length < currentShipment.account.inboundPhotos\n ) {\n valid = false;\n setPhotosErrorMsg(\n `${currentShipment.account?.inboundPhotos} photos are required for this shipment.`\n );\n notify(\n `${currentShipment.account?.inboundPhotos} photos are required for this shipment.`,\n \"error\"\n );\n } else {\n setPhotosErrorMsg(\"\");\n }\n }\n return valid;\n };\n\n const clearForm = () => {\n setPhotosErrorMsg(\"\");\n setNoteErrorMsg(\"\");\n };\n\n const handleSave = async (complete, skip = false) => {\n try {\n if (\n isRailToTrack(currentShipment.areaId, currentShipment) &&\n !currentShipment.trackId &&\n currentShipment?.verificationRequired !== \"true\"\n ) {\n history.push({\n pathname: \"/trackManagement\",\n state: {\n defaultShipmentId: currentShipment.id,\n returnPath: match.url,\n },\n });\n return;\n }\n dispatch({ type: \"SET_LOADING\", payload: true });\n if (!currentShipment.inventories) {\n logError(\"PlacedShipmentCard:handleSave\", currentShipment);\n throw new Error(\"Invalid state, currentShipment has no inventories.\");\n }\n debugger;\n const previousStatus = currentShipment.status;\n const previousState = currentShipment.state;\n if (!validateForm(complete, skip)) return;\n setNextState(currentShipment, complete);\n currentShipment.stepName = getInboundCurrentStepName(currentShipment);\n const nextState = currentShipment.state;\n if (currentShipment.inventories && currentShipment.photos?.length > 0) {\n currentShipment.inventories.items.forEach((itm) => {\n // copy railcar photos to inventory for bulk\n if (\n isTrack(itm.areaId) &&\n isBulkCommodity(itm.reloadYardCommodityId)\n ) {\n itm.photos = [...currentShipment.photos];\n }\n });\n }\n if (note) {\n const newNote = {\n date: new Date(),\n by: window.appUser?.fullName,\n type: NoteType.GENERIC,\n text: note,\n };\n if (currentShipment.notes) currentShipment.notes.push(newNote);\n else currentShipment.notes = [newNote];\n }\n if (\n previousStatus !== currentShipment.status ||\n previousState !== currentShipment.state\n ) {\n const newHistory = {\n type: NoteType.SHIPMENT,\n date: new Date(),\n by: window.appUser?.fullName,\n text: `Shipment saved | status: ${\n currentShipment.status\n } ${getLogState(currentShipment.state)}`,\n };\n if (currentShipment.history) currentShipment.history.push(newHistory);\n else currentShipment.history = [newHistory];\n }\n const inboundUpdateInput = {\n ...currentShipment,\n updatedAt: new Date().toISOString(),\n };\n const inventoryUpdateList = [];\n currentShipment.inventories.items.forEach((inventory) =>\n inventoryUpdateList.push(saveInventory(inventory))\n );\n delete inboundUpdateInput.account;\n delete inboundUpdateInput.area;\n delete inboundUpdateInput.inventories;\n delete inboundUpdateInput.reloadYardCommodity;\n delete inboundUpdateInput.zone;\n\n const body = {\n inboundUpdateInput,\n inventoryUpdateList,\n inventoryItemUpdateList: [],\n locationUpdateList: [],\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n };\n await handleAggregateInventories(body);\n debugger;\n\n const response = await API.post(\"transREST\", \"/inboundUpdate\", { body });\n if (response.error) {\n logError(\n \"PlacedShipmentCard:handleSave:inboundUpdate\",\n response.error,\n notify,\n redirect\n );\n return;\n }\n if (complete) {\n const response = await API.graphql(\n graphqlOperation(getInboundShipment, { id: currentShipment.id })\n );\n const inboundShipment = response.data.getInboundShipment;\n\n if (\n isTrack(inboundShipment.area) &&\n inboundShipment.carrierType === CarrierType.RAIL &&\n inboundShipment.account.podEmail\n ) {\n emailPOD(\n inboundShipment,\n inboundShipment.account.podEmail,\n null,\n inboundShipment.account.podPhotos,\n inboundShipment.account.podAttachments,\n notify\n );\n\n inboundShipment.history = [\n ...inboundShipment.history,\n {\n text: `POD sent to: ${inboundShipment.account.podEmail}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.GENERIC,\n },\n ];\n saveShipment(inboundShipment);\n }\n //\n // TODO: Check if this is required or for isTruckToRail before quering the inbound\n // May be needed for cross docking, truck to truck\n //\n await processOutboundShipment(inboundShipment.inventories.items);\n }\n dispatch({\n type: \"CLEAR_NOTE\",\n payload: currentShipment,\n });\n const shipmentAccepted =\n previousState === InboundState.PROCESS_SHIPMENT &&\n nextState === InboundState.PROCESS_INVENTORY;\n if (shipmentAccepted) {\n notify(\"Shipment Accepted.\", \"info\");\n } else {\n history && history.replace(\"/processShipments\");\n }\n } catch (err) {\n logError(\"PlacedShipmentCard:handleSave\", err, notify, redirect);\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n };\n\n const handleAggregateInventories = async ({\n inventoryUpdateList,\n inventoryItemUpdateList,\n }) => {\n if (currentShipment.state === InboundState.COMPLETED) {\n const shipmentInventory = inventoryUpdateList[0];\n if (isBulkArea(shipmentInventory.areaId)) {\n const result = await API.graphql(\n graphqlOperation(inventoryByAreaByProductByStatus, {\n areaId: shipmentInventory.areaId,\n productIdStatus: {\n beginsWith: {\n productId: shipmentInventory.productId,\n status: InventoryStatus.STORED,\n },\n },\n limit: 1,\n })\n );\n const aggregateInventory =\n result.data.inventoryByAreaByProductByStatus.items[0];\n shipmentInventory.status = InventoryStatus.AGGREGATED;\n shipmentInventory.aggregateInventoryId = aggregateInventory.id;\n if (!aggregateInventory.quantityOnHand)\n aggregateInventory.quantityOnHand = 0;\n aggregateInventory.quantityOnHand += shipmentInventory.quantityOnHand;\n aggregateInventory.updatedAt = new Date().toISOString();\n inventoryUpdateList.push(aggregateInventory);\n\n aggregateInventory.inventoryItems.items.forEach(\n (aggregateInventoryItem) => {\n const inventoryItems = currentShipment.inventories.items.find(\n (itm) => itm.id === shipmentInventory.id\n ).inventoryItems.items;\n const shipmentInventoryItem = inventoryItems.find(\n (itm) => itm.locationId === aggregateInventoryItem.locationId\n );\n if (shipmentInventoryItem) {\n if (!aggregateInventoryItem.quantityOnHand)\n aggregateInventoryItem.quantityOnHand = 0;\n aggregateInventoryItem.quantityOnHand +=\n shipmentInventoryItem.quantityOnHand;\n aggregateInventoryItem.updatedAt = new Date().toISOString();\n inventoryItemUpdateList.push(aggregateInventoryItem);\n }\n }\n );\n }\n }\n };\n\n const processOutboundShipment = async (inventories) => {\n debugger;\n // TODO: need to re-write in Lambda function !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n for (let inventory of inventories) {\n if (isTruckToRail(inventory.areaId, currentShipment)) {\n for (let inventoryItem of inventory.inventoryItems.items) {\n if (inventoryItem.outboundShipmentId) {\n await processOutboundInventory(inventory, inventoryItem);\n }\n }\n }\n }\n };\n\n const processOutboundInventory = async (inventory, inventoryItem) => {\n debugger;\n const result = await doCreateShipmentLineItem(inventory, inventoryItem);\n const promiseList = [];\n const shipmentLineItem = result.data.createShipmentLineItem;\n doCreateShipmentLineItemInventoryItem(\n shipmentLineItem,\n inventoryItem,\n promiseList\n );\n const response = await API.graphql(\n graphqlOperation(getOutboundShipment, {\n id: inventoryItem.outboundShipmentId,\n })\n );\n const toUpdateOutbound = response.data.getOutboundShipment;\n toUpdateOutbound.totalUnits = currentShipment.totalUnits;\n toUpdateOutbound.weightUnits = currentShipment.weightUnits;\n toUpdateOutbound.netWeight = calcNetWeight(\n toUpdateOutbound,\n null,\n toUpdateOutbound.weightUnits\n );\n await updateOutboundQuantity(toUpdateOutbound);\n await Promise.all(promiseList);\n };\n\n const doCreateShipmentLineItemInventoryItem = async (\n shipmentLineItem,\n inventoryItem,\n promiseList\n ) => {\n debugger;\n const toCreateShipmentLineItemInventoryItem = {};\n toCreateShipmentLineItemInventoryItem.groups = shipmentLineItem.groups;\n toCreateShipmentLineItemInventoryItem.reloadYardId =\n shipmentLineItem.reloadYardId;\n toCreateShipmentLineItemInventoryItem.outboundShipmentId =\n shipmentLineItem.outboundShipmentId;\n toCreateShipmentLineItemInventoryItem.shipmentLineItemId =\n shipmentLineItem.id;\n toCreateShipmentLineItemInventoryItem.inventoryId =\n shipmentLineItem.inventoryId;\n toCreateShipmentLineItemInventoryItem.inventoryItemId = inventoryItem.id;\n toCreateShipmentLineItemInventoryItem.quantityToPick =\n inventoryItem.quantityOnHand;\n toCreateShipmentLineItemInventoryItem.status = shipmentLineItem.status;\n promiseList.push(\n API.graphql(\n graphqlOperation(createShipmentLineItemInventoryItem, {\n input: toCreateShipmentLineItemInventoryItem,\n })\n )\n );\n };\n\n const doCreateShipmentLineItem = async (inventory, inventoryItem) => {\n const lineItemInput = {\n active: inventory.active,\n status: ShipmentLineItemStatus.PENDING,\n groups: inventory.groups,\n totalQuantityToPick: inventoryItem.quantityDelivered,\n outboundShipmentId: inventoryItem.outboundShipmentId,\n reloadYardId: inventory.reloadYardId,\n inventoryId: inventory.id,\n accountId: inventory.accountId,\n lotNumber: inventory.lotNumber,\n history: [\n {\n type: NoteType.INVENTORY,\n date: new Date(),\n by: window.appUser?.fullName,\n text: `Pick List item auto-generated`,\n },\n ],\n sortKey: 10001,\n };\n debugger;\n return API.graphql(\n graphqlOperation(createShipmentLineItem, { input: lineItemInput })\n );\n };\n\n const setNextState = (currentShipment, complete) => {\n debugger;\n if (currentShipment.state === InboundState.PROCESS_SHIPMENT) {\n if (currentShipment.verificationRequired === \"true\") {\n currentShipment.state = InboundState.APPROVE_SHIPMENT;\n } else {\n currentShipment.state = InboundState.PROCESS_INVENTORY;\n currentShipment.startDateTime = new Date().toISOString();\n }\n if (currentShipment.inventories) {\n currentShipment.inventories.items.forEach((inventory) => {\n inventory.status = InventoryStatus.ARRIVED;\n });\n }\n } else if (currentShipment.state === InboundState.APPROVE_SHIPMENT) {\n if (currentShipment.verificationRequired !== \"true\") {\n currentShipment.state = InboundState.PROCESS_INVENTORY;\n }\n } else if (currentShipment.state === InboundState.PROCESS_INVENTORY) {\n if (currentShipment.verificationRequired === \"true\") {\n currentShipment.state = InboundState.APPROVE_INVENTORY;\n } else if (complete) {\n currentShipment.unloadedBy = window.appUser.fullName;\n\n if (currentShipment.secondaryReview) {\n currentShipment.state = InboundState.PROCESS_INVENTORY_REVIEW;\n currentShipment.endDateTime = new Date().toISOString();\n if (currentShipment.inventories) {\n currentShipment.inventories.items.forEach(\n (itm) => (itm.status = InventoryStatus.REVIEW)\n );\n }\n } else {\n currentShipment.state = InboundState.COMPLETED;\n currentShipment.endDateTime = new Date().toISOString();\n if (currentShipment.inventories) {\n currentShipment.inventories.items.forEach((inventory) => {\n if (isBulkArea(inventory.areaId)) {\n inventory.status = InventoryStatus.AGGREGATED;\n } else {\n inventory.status = InventoryStatus.STORED;\n }\n });\n }\n }\n }\n } else if (currentShipment.state === InboundState.APPROVE_INVENTORY) {\n if (currentShipment.verificationRequired !== \"true\") {\n currentShipment.state = InboundState.PROCESS_INVENTORY;\n }\n } else if (\n currentShipment.state === InboundState.PROCESS_INVENTORY_REVIEW\n ) {\n if (currentShipment.verificationRequired === \"true\") {\n currentShipment.state = InboundState.APPROVE_INVENTORY_REVIEW;\n } else if (complete) {\n currentShipment.state = InboundState.COMPLETED;\n currentShipment.reviewedBy = window.appUser.fullName;\n }\n }\n };\n\n const getLeftButtonText = () => {\n let text = \"Save\";\n if (currentShipment?.verificationRequired === \"true\") {\n text = \"Request Approval\";\n } else if (\n isRailToTrack(currentShipment.areaId, currentShipment) &&\n !currentShipment.trackId\n ) {\n text = \"Place Railcar\";\n } else if (\n currentShipment?.state === InboundState.PROCESS_SHIPMENT ||\n (currentShipment?.state === InboundState.APPROVE_SHIPMENT &&\n currentShipment.verificationRequired !== \"true\" &&\n window.appUser.type !== UserType.CREW)\n ) {\n text = \"Accept\";\n }\n return text;\n };\n\n const getRightButtonText = () => {\n if (\n currentShipment?.state === InboundState.PROCESS_INVENTORY &&\n currentShipment?.secondaryReview\n )\n return \"Mark Stored\";\n return \"Mark Complete\";\n };\n\n const isUploadEnabled = () => {\n if (\n currentShipment.status === InboundStatus.PLACED &&\n currentShipment.state !== InboundState.COMPLETED\n ) {\n return true;\n }\n return false;\n };\n\n const toggleChecked = (value) => {\n currentShipment.verificationRequired = value;\n setNoteErrorMsg(\"\");\n dispatch({ type: \"SET_CURRENT_SHIPPMENT\", payload: currentShipment });\n };\n\n const setShipmentNote = (value) => {\n if (value?.length > 0) setNoteErrorMsg(\"\");\n\n dispatch({\n type: \"SET_SHIPPMENT_NOTE\",\n payload: { id: currentShipment.id, value },\n });\n };\n\n const isVerificationDisabled = () => {\n if (!currentShipment?.id) return false;\n if (currentShipment.inventories) {\n const itemsNeedVerification = currentShipment.inventories.items?.some(\n (itm) => itm.verificationRequired === \"true\"\n );\n if (itemsNeedVerification) return true;\n }\n return false;\n };\n\n const isCompleteDisabled = () => {\n if (loading) return true;\n let disabled = false;\n\n if (currentShipment.verificationRequired === \"true\") disabled = true;\n else if (\n !currentShipment.inventories ||\n currentShipment.inventories?.items?.length === 0\n )\n disabled = true;\n else {\n disabled = currentShipment.inventories.items.some(\n (item) =>\n item.status !== InventoryStatus.UNLOADED &&\n item.status !== InventoryStatus.STORED\n );\n }\n return disabled;\n };\n\n const getShipmentIcon = () => {\n if (currentShipment.carrierType === CarrierType.RAIL)\n return <TrainIcon fontSize=\"large\" />;\n return <TruckIcon fontSize=\"large\" />;\n };\n\n if (currentShipment) {\n currentShipment.verificationRequired =\n (currentShipment.verificationRequired === \"true\" ||\n currentShipment.inventories?.items.some(\n (item) => item.verificationRequired === \"true\"\n )) + \"\";\n }\n\n const handleSpeedDialClose = (evt, reason) => {\n // if (reason === \"mouseLeave\") return;\n setIsSpeedDialgOpen(false);\n };\n\n const handleSpeedDialOpen = (evt, reason) => {\n if (reason === \"mouseEnter\" || reason === \"focus\") return;\n setIsSpeedDialgOpen(true);\n };\n\n const handleSpeedDialAction = (actionFn) => {\n debugger;\n setIsSpeedDialgOpen(false);\n actionFn();\n };\n\n const getSealConfirmMessage = () => {\n const action = isCompleteDisabled() ? \"Accept\" : \"Complete\";\n return `No seals have been scanned for this shipment. ${action} the shipment without seals?`;\n };\n if (invalidIdError) return <ErrorCard error={invalidIdError} />;\n\n return (\n <div ref={imgRef}>\n <SealsConfirmationDialog\n msg={getSealConfirmMessage()}\n open={isSealsConfirmationOpen}\n onClose={handleSealsConfirmationClose}\n onConfirm={handleSealsConfirmationConfirm}\n />\n <CrewCard\n title={currentShipment.accountName}\n icon={getShipmentIcon()}\n subheader={currentShipment.railCarNumber}\n action={\n <IconButton edge=\"start\" onClick={() => backHandler(true)}>\n <HighlightOffIcon fontSize=\"large\" />\n </IconButton>\n }\n showDivider={false}\n >\n <CardContent>\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Grid container spacing={1}>\n {isUploadEnabled() && (\n <Grid item sm={12} xs={12}>\n <InventoryPhotos\n id={currentShipment.id}\n maxSize={MAX_PHOTO_NUM_INBOUND}\n saveModel={handleShipmentPhotos}\n // handleLoading={handlePhotoLoading}\n photos={currentShipment.photos ? currentShipment.photos : []}\n hideActions={\n currentShipment.state !== InboundState.PROCESS_SHIPMENT &&\n currentShipment.state !== InboundState.APPROVE_SHIPMENT &&\n currentShipment.state !== InboundState.PROCESS_INVENTORY &&\n currentShipment.state !== InboundState.APPROVE_INVENTORY\n }\n imgRef={imgRef}\n />\n {photosErrorMsg && (\n <div className={classes.photoErrorSection}>\n <Typography variant=\"caption\" display=\"block\" color=\"error\">\n {photosErrorMsg}\n </Typography>\n </div>\n )}\n </Grid>\n )}\n <Grid item xs={12}>\n <Stepper\n activeStep={getActiveStep()}\n alternativeLabel\n connector={<QontoConnector />}\n >\n {getSteps().map((label, index) => {\n const stepProps = {};\n const labelProps = {};\n\n labelProps.error = isStepFailed(index);\n stepProps.completed = isStepCompleted(index);\n\n return (\n <Step key={label} {...stepProps}>\n <StepLabel {...labelProps}>{label}</StepLabel>\n </Step>\n );\n })}\n </Stepper>\n </Grid>\n <Grid item sm={6} xs={12}>\n <Box mt={1} alignItems=\"flex-end\">\n <Typography>Lot Number: {currentShipment.lotNumber}</Typography>\n </Box>\n </Grid>\n <Grid item sm={6} xs={12}>\n <Box mt={1} alignItems=\"flex-end\">\n <Typography>PO Number: {currentShipment.poNumber}</Typography>\n </Box>\n </Grid>\n {currentShipment.customFields && (\n <Grid item xs={12}>\n <CustomFieldsMobile\n recordFields={currentShipment.customFields}\n accountFields={currentShipment.account?.inboundCustomFields}\n width={6}\n />\n </Grid>\n )}\n {currentShipment.instructions && (\n <Grid item xs={12}>\n <Typography>\n Instructinos: {currentShipment.instructions}\n </Typography>\n </Grid>\n )}\n <Grid item xs={12} sm={6}>\n {/* <Box display=\"flex\" width=\"100%\"> */}\n {/* <Button\n variant=\"outlined\"\n onClick={() => setIsExceptionDialogOpen(true)}\n startIcon={currentShipment.hasException ? <ExceptionIcon /> : null}\n >\n {isXSmall ? \"Exceptions\" : \"Report Exception\"}\n </Button> */}\n {/* <Box ml={2}> */}\n <FormControlLabel\n control={\n <Switch\n color={\n currentShipment.verificationRequired === \"true\"\n ? \"secondary\"\n : \"default\"\n }\n checked={currentShipment.verificationRequired === \"true\"}\n disabled={isVerificationDisabled()}\n onChange={() =>\n toggleChecked(\n currentShipment.verificationRequired === \"true\"\n ? \"false\"\n : \"true\"\n )\n }\n />\n }\n label=\"Request approval\"\n />\n {/* </Box> */}\n {/* </Box> */}\n {isExceptionDialogOpen && (\n <ExceptionDialog\n classes={classes}\n isExceptionDialogOpen={isExceptionDialogOpen}\n setIsExceptionDialogOpen={setIsExceptionDialogOpen}\n saveShipment={saveShipment}\n ></ExceptionDialog>\n )}\n {isSealDialogOpen && (\n <SealDialog\n setIsSealDialogOpen={setIsSealDialogOpen}\n ></SealDialog>\n )}\n </Grid>\n <Grid item xs={6} sm={6}>\n {isChecklistDialogOpen && (\n <ChecklistDialog\n model={currentShipment}\n isOpen={isChecklistDialogOpen}\n setOpen={setIsChecklistDialogOpen}\n saveModel={saveShipment}\n title=\"Inbound Checklist\"\n stepName={currentShipment.stepName}\n ></ChecklistDialog>\n )}\n </Grid>\n <Grid item xs={12}>\n <TextField\n name=\"notes\"\n id=\"outlined-multiline-static\"\n label=\"Notes\"\n multiline\n minRows={3}\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={note}\n error={noteErrorMsg ? true : false}\n onChange={(evt) => setShipmentNote(evt.target.value)}\n />\n {noteErrorMsg && (\n <div className={classes.photoErrorSection}>\n <Typography variant=\"caption\" display=\"block\" color=\"error\">\n {noteErrorMsg}\n </Typography>\n </div>\n )}\n </Grid>\n {currentShipment.inventories?.items.length > 0 ? (\n <InventoryList\n classes={classes}\n currentShipment={currentShipment}\n history={history}\n match={match}\n handleClone={handleClone}\n clonableInventoriesByProductName={\n clonableInventoriesByProductName\n }\n clonableInventoriesByProductId={clonableInventoriesByProductId}\n disabled={\n currentShipment.state === InboundState.PROCESS_SHIPMENT ||\n currentShipment.state === InboundState.APPROVE_SHIPMENT\n }\n />\n ) : (\n <Typography className={classes.notFound}>\n No inventories shipments found.\n </Typography>\n )}\n </Grid>\n <SpeedDial\n ariaLabel=\"SpeedDial openIcon example\"\n className={classes.speedDial}\n icon={<SpeedDialIcon />}\n onClose={handleSpeedDialClose}\n onOpen={handleSpeedDialOpen}\n open={isSpeedDialgOpen}\n >\n {actions.map((action) => (\n <SpeedDialAction\n key={action.name}\n icon={action.icon}\n tooltipTitle={action.name}\n classes={{ fab: classes.speedDialAction }}\n tooltipOpen\n onClick={handleSpeedDialClose}\n />\n ))}\n </SpeedDial>\n </CardContent>\n <CardActions className={classes.actions}>\n <Button\n type=\"submit\"\n size=\"large\"\n onClick={() => handleSave(false)}\n disabled={loading}\n >\n {getLeftButtonText()}\n </Button>\n <Button\n size=\"large\"\n onClick={() => handleSave(true)}\n disabled={isCompleteDisabled()}\n color=\"primary\"\n >\n {getRightButtonText()}\n </Button>\n </CardActions>\n </CrewCard>\n </div>\n );\n};\n\nconst InventoryList = ({\n classes,\n currentShipment,\n clonableInventoriesByProductName,\n clonableInventoriesByProductId,\n handleClone,\n match,\n history,\n disabled,\n}) => {\n const [searchInventories, setSearchInventories] = useState([]);\n const [term, setTerm] = useState(\"\");\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n useEffect(() => {\n setSearchInventories([...currentShipment.inventories.items]);\n }, [\n currentShipment,\n clonableInventoriesByProductName,\n clonableInventoriesByProductId,\n ]);\n\n const getIcon = (inventory) => {\n if (inventory.verificationRequired === \"true\")\n return <PendingApprovalIcon fontSize=\"inherit\" />;\n else if (inventory.status === InventoryStatus.UNLOADED)\n return <DoneIcon fontSize=\"inherit\" />;\n else if (inventory.status === InventoryStatus.REVIEW)\n return <ReviewOutlinedIcon fontSize=\"inherit\" />;\n else if (inventory.status === InventoryStatus.STORED)\n return <DoubleCheckIcon fontSize=\"inherit\" />;\n return <CloseOutlinedIcon fontSize=\"inherit\" />;\n };\n\n const getAvatarClassName = (inventory) => {\n if (\n inventory.verificationRequired === \"true\" ||\n inventory.verificationRequired === \"resolved\"\n )\n return classes.amber;\n else if (\n inventory.status === InventoryStatus.UNLOADED ||\n inventory.status === InventoryStatus.STORED\n )\n return classes.green;\n\n return classes.unprocessedItem;\n };\n\n const handleSelect = (inventory) => {\n history.push({ pathname: match.url + \"/inventories/\" + inventory.id });\n };\n\n const getListItem = (inventory) => {\n const primaryField = getInventoryPrimaryField(\n currentShipment.account,\n inventory\n );\n\n const qtyText = !inventory.quantityDelivered\n ? `${inventory.quantityShipped} ${getUnitName(inventory.inventoryUnits)}`\n : `${inventory.quantityDelivered} / ${\n inventory.quantityShipped\n } ${getUnitName(inventory.inventoryUnits)}`;\n\n let primaryText = inventory.productName;\n if (!isSmall && window.appUser.type !== UserType.CREW)\n primaryText = `${primaryText} - ${qtyText}`;\n\n let secondaryText = `${primaryField.label} : ${primaryField.value}`;\n if (isSmall && window.appUser.type !== UserType.CREW)\n secondaryText = (\n <>\n {qtyText}\n <br />\n {primaryField.label} : {primaryField.value}\n </>\n );\n\n return <ListItemText primary={primaryText} secondary={secondaryText} />;\n };\n\n const clear = () => {\n setTerm(\"\");\n setSearchInventories(currentShipment.inventories.items);\n };\n\n const handleSearch = (evt) => {\n const value = evt.target.value;\n setTerm(value);\n if (!value) {\n setSearchInventories(currentShipment.inventories.items);\n } else {\n const searchTerm = value.toLowerCase();\n const searchResult = currentShipment.inventories.items.filter((itm) => {\n if (\n itm.customFields?.toString().toLowerCase().includes(searchTerm) ||\n itm.productName.toLowerCase().includes(searchTerm)\n ) {\n return true;\n }\n return false;\n });\n setSearchInventories(searchResult);\n }\n };\n\n const handleSubmit = (evt) => {\n if (evt.key === \"Enter\") {\n handleSearch(evt);\n }\n };\n\n const getPossiblePlacementLocations = (inventory) => {\n const byProductNameKey = getbyProductNameKey(inventory);\n const byProductIdKey = getbyProductIdKey(inventory);\n let possibleLocations;\n if (clonableInventoriesByProductName[byProductNameKey])\n possibleLocations = Object.values(\n clonableInventoriesByProductName[byProductNameKey]\n );\n else if (clonableInventoriesByProductId[byProductIdKey])\n possibleLocations = Object.values(\n clonableInventoriesByProductId[byProductIdKey]\n );\n if (possibleLocations) {\n possibleLocations.forEach(\n (itm) =>\n (itm.name = itm.name.replace(\n QUANTITY_PLACEHOLDER,\n inventory.quantityShipped\n ))\n );\n possibleLocations.sort((a, b) => a.name.localeCompare(b.name));\n return possibleLocations;\n }\n return [];\n };\n\n const isPlaceable = (inventory) => {\n if (\n inventory.status === InventoryStatus.ARRIVED &&\n currentShipment.area.areaType !== AreaType.BULK &&\n currentShipment.area.areaType !== AreaType.TRACK\n ) {\n const byProductNameKey = getbyProductNameKey(inventory);\n if (clonableInventoriesByProductName[byProductNameKey]) return true;\n const byProductIdKey = getbyProductIdKey(inventory);\n if (clonableInventoriesByProductId[byProductIdKey]) return true;\n }\n return false;\n };\n\n const getLisItemAction = (inventory) => {\n if (isPlaceable(inventory)) {\n return (\n <ShipmentListItemMenu\n getPossiblePlacementLocations={getPossiblePlacementLocations}\n handleOpen={handleSelect}\n handleClone={handleClone}\n inventory={inventory}\n />\n );\n }\n return (\n <IconButton edge=\"end\" onClick={() => handleSelect(inventory)}>\n <KeyboardArrowRightIcon fontSize=\"large\" />\n </IconButton>\n );\n };\n\n if (!currentShipment.inventories.items) return <></>;\n\n return (\n <>\n <Grid container item xs={12}>\n {isSmall ? (\n <>\n <Grid item xs={12}>\n <Typography variant=\"h6\" color=\"textSecondary\" gutterBottom>\n {\" \"}\n Tally Sheet\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <TextField\n id=\"search\"\n name=\"search\"\n size=\"small\"\n variant=\"outlined\"\n onChange={handleSearch}\n value={term}\n placeholder=\"Search\"\n onKeyDown={handleSubmit}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton disableRipple onClick={clear}>\n <XIcon className={classes.clearButton} />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n </>\n ) : (\n <Grid item xs={12}>\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n >\n <Typography variant=\"h6\" color=\"textSecondary\">\n Tally Sheet\n </Typography>\n <TextField\n id=\"search\"\n name=\"search\"\n size=\"small\"\n variant=\"outlined\"\n onChange={handleSearch}\n value={term}\n placeholder=\"Search\"\n onKeyDown={handleSubmit}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton disableRipple onClick={clear}>\n <XIcon className={classes.clearButton} />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n </Box>\n </Grid>\n )}\n </Grid>\n <Grid item xs={12}>\n <List>\n {searchInventories.map((inventory, idx) => {\n return (\n <div key={inventory.id}>\n {disabled ? (\n <ListItem>{getListItem(inventory)}</ListItem>\n ) : (\n <ListItem onClick={() => handleSelect(inventory)}>\n <ListItemAvatar>\n <Avatar className={getAvatarClassName(inventory)}>\n {getIcon(inventory)}\n </Avatar>\n </ListItemAvatar>\n {getListItem(inventory)}\n <ListItemSecondaryAction>\n {getLisItemAction(inventory)}\n </ListItemSecondaryAction>\n </ListItem>\n )}\n {idx < searchInventories.length - 1 ? <Divider /> : null}\n </div>\n );\n })}\n </List>\n <Divider />\n </Grid>\n </>\n );\n};\n\nconst OPEN_OPTION = { name: \"Open\" };\n\nconst ShipmentListItemMenu = ({\n inventory,\n getPossiblePlacementLocations,\n handleOpen,\n handleClone,\n}) => {\n const [anchorEl, setAnchorEl] = React.useState(null);\n const open = Boolean(anchorEl);\n const [options, setOptions] = useState([OPEN_OPTION]);\n\n const handleClick = (event) => {\n const possibleLocations = [\n OPEN_OPTION,\n ...getPossiblePlacementLocations(inventory),\n ];\n setOptions(possibleLocations);\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = (itm) => {\n setAnchorEl(null);\n };\n\n const handleMenuSelect = (itm) => {\n if (itm.name === \"Open\") handleOpen(inventory);\n else handleClone(inventory, itm);\n setAnchorEl(null);\n };\n\n return (\n <>\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n onClick={handleClick}\n >\n <MoreVertOutlinedIcon />\n </IconButton>\n <Menu\n id=\"place-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={open}\n onClose={handleClose}\n >\n {options.map((option) => (\n <MenuItem\n key={option.name}\n selected={option.name === \"Open\"}\n onClick={() => handleMenuSelect(option)}\n >\n {option.name}\n </MenuItem>\n ))}\n </Menu>\n </>\n );\n};\n\nconst ExceptionDialog = ({\n saveShipment,\n isExceptionDialogOpen,\n setIsExceptionDialogOpen,\n classes,\n}) => {\n const [otherExceptionNoteError, setOtherExceptionError] = useState();\n const { state, dispatch } = useInboundContext();\n const { currentShipment } = state;\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n const handleSave = async () => {\n if (!validate()) return;\n if (\n currentShipment.unsafeShipment ||\n currentShipment.brokenSeal ||\n currentShipment.otherException\n ) {\n currentShipment.hasException = true;\n currentShipment.verificationRequired = true;\n } else {\n currentShipment.hasException = false;\n }\n saveShipment(currentShipment);\n setIsExceptionDialogOpen(false);\n };\n\n const validate = () => {\n let isValid = true;\n setOtherExceptionError(\"\");\n if (currentShipment.otherException) {\n isValid = isValid && currentShipment.otherExceptionNote;\n !currentShipment.otherExceptionNote &&\n setOtherExceptionError(\"A note is required for other exceptions\");\n }\n return isValid;\n };\n\n const handleChange = (evt) => {\n const type = evt.target.name;\n const value = evt.target.checked;\n if (type === \"unsafeShipment\") {\n currentShipment.unsafeShipment = value;\n if (!value) {\n currentShipment.unsafeShipmentNote = \"\";\n }\n } else if (type === \"brokenSeal\") {\n currentShipment.brokenSeal = value;\n if (!value) {\n currentShipment.brokenSealNote = \"\";\n }\n } else {\n currentShipment.otherException = value;\n if (!value) {\n currentShipment.otherExceptionNote = \"\";\n setOtherExceptionError(\"\");\n }\n }\n dispatch({\n type: \"UPDATE_CURRENT_SHIPMENT\",\n payload: currentShipment,\n });\n };\n\n const handleCancel = () => {\n setIsExceptionDialogOpen(false);\n };\n\n const setNote = (prop, value) => {\n currentShipment[prop] = value;\n dispatch({\n type: \"UPDATE_CURRENT_SHIPMENT\",\n payload: currentShipment,\n });\n };\n\n return (\n <Dialog\n open={isExceptionDialogOpen}\n maxWidth={isSmall ? \"xl\" : \"md\"}\n fullWidth={true}\n >\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">\n {currentShipment.accountName}{\" \"}\n {isSmall ? (\n <div>{currentShipment.railCarNumber}</div>\n ) : (\n ` - ${currentShipment.railCarNumber}`\n )}\n </Typography>\n <CancelOutlinedIcon fontSize=\"large\" onClick={handleCancel} />\n </Box>\n <DialogContent>\n <FormControl component=\"fieldset\" className={classes.formControl}>\n <FormLabel>Exception Type</FormLabel>\n <FormGroup row={!isSmall}>\n <FormControlLabel\n control={\n <Checkbox\n checked={currentShipment.unsafeShipment}\n onChange={handleChange}\n name=\"unsafeShipment\"\n />\n }\n label=\"Unsafe Shipment\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={currentShipment.brokenSeal}\n onChange={handleChange}\n name=\"brokenSeal\"\n />\n }\n label=\"Broken seal\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={currentShipment.otherException}\n onChange={handleChange}\n name=\"other\"\n />\n }\n label=\"Other\"\n />\n </FormGroup>\n </FormControl>\n {currentShipment.unsafeShipment && (\n <div className={classes.exceptionContainer}>\n <Typography>Unsafe Shipment</Typography>\n <TextField\n name=\"unSafeNotes\"\n label=\"Notes\"\n multiline\n minRows={3}\n autoFocus\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={\n currentShipment.unsafeShipmentNote\n ? currentShipment.unsafeShipmentNote\n : \"\"\n }\n onChange={(evt) =>\n setNote(\"unsafeShipmentNote\", evt.target.value)\n }\n />\n </div>\n )}\n {currentShipment.brokenSeal && (\n <div className={classes.exceptionContainer}>\n <Typography>Broken Seal</Typography>\n <TextField\n name=\"brokenNotes\"\n label=\"Notes\"\n multiline\n minRows={3}\n autoFocus\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={\n currentShipment.brokenSealNote\n ? currentShipment.brokenSealNote\n : \"\"\n }\n onChange={(evt) => setNote(\"brokenSealNote\", evt.target.value)}\n />\n </div>\n )}\n {currentShipment.otherException && (\n <div className={classes.exceptionContainer}>\n <Typography>Other</Typography>\n <TextField\n name=\"otherNotes\"\n label=\"Notes\"\n multiline\n minRows={3}\n autoFocus\n error={otherExceptionNoteError}\n helperText={otherExceptionNoteError}\n margin=\"dense\"\n variant=\"outlined\"\n required\n fullWidth\n value={\n currentShipment.otherExceptionNote\n ? currentShipment.otherExceptionNote\n : \"\"\n }\n onChange={(evt) =>\n setNote(\"otherExceptionNote\", evt.target.value)\n }\n />\n </div>\n )}\n </DialogContent>\n <DialogActions>\n <Box>\n <Box>\n <Button onClick={() => handleCancel()}>Cancel</Button>\n <Button type=\"submit\" onClick={() => handleSave()} color=\"primary\">\n Submit\n </Button>\n </Box>\n </Box>\n </DialogActions>\n </Dialog>\n );\n};\n\nconst SealsConfirmationDialog = ({ open, msg, onClose, onConfirm }) => {\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogTitle>Seals Confirmation</DialogTitle>\n <DialogContent>\n <Typography>{msg}</Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>Cancel</Button>\n <Button onClick={onConfirm} color=\"primary\">\n Confirm\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import React, { useEffect } from \"react\";\n\nexport default function useStickyState(defaultValue, key) {\n const [value, setValue] = React.useState(() => {\n const stickyValue = sessionStorage.getItem(key);\n const state = stickyValue !== null ? JSON.parse(stickyValue) : defaultValue;\n return state;\n });\n\n useEffect(() => {\n sessionStorage.setItem(key, JSON.stringify(value));\n }, [key, value]);\n\n return [value, setValue];\n}\n\nexport function useLocalStickyState(defaultValue, key) {\n const [value, setValue] = React.useState(() => {\n const stickyValue = localStorage.getItem(key);\n const returnValue =\n stickyValue !== null ? JSON.parse(stickyValue) : defaultValue;\n return returnValue;\n });\n\n useEffect(() => {\n localStorage.setItem(key, value);\n }, [key, value]);\n\n return [value, setValue];\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Title, useNotify } from \"react-admin\";\nimport {\n CircularProgress,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n Avatar,\n ListItemSecondaryAction,\n IconButton,\n Divider,\n FormControl,\n FormControlLabel,\n Switch,\n Typography,\n Grid,\n Box,\n Backdrop,\n TextField,\n InputAdornment,\n} from \"@material-ui/core\";\nimport CheckIcon from \"@material-ui/icons/Check\";\nimport XIcon from \"@material-ui/icons/CloseOutlined\";\nimport CloseOutlinedIcon from \"@material-ui/icons/CloseOutlined\";\nimport InbounddOutlinedIcon from \"@material-ui/icons/FastForwardOutlined\";\nimport KeyboardArrowRightIcon from \"@material-ui/icons/KeyboardArrowRight\";\nimport PendingApprovalIcon from \"@material-ui/icons/PriorityHigh\";\nimport RefreshIcon from \"@material-ui/icons/Refresh\";\nimport ReviewOutlinedIcon from \"@material-ui/icons/FindInPageOutlined\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { orange, amber, grey, green } from \"@material-ui/core/colors\";\nimport { useMediaQuery } from \"@material-ui/core\";\nimport { InboundProvider, useInboundContext } from \"./context\";\nimport { CarrierType, InboundState } from \"../../../utils/constants\";\nimport { ProcessInboundShipmentCard } from \"./ProcessShipmentsCard\";\nimport { Route, Link } from \"react-router-dom\";\nimport useStickyState from \"../../../utils/stickyState\";\nimport { logError } from \"../../../utils/appUtils\";\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\n\nconst useStyles = makeStyles((theme) => ({\n actions: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n },\n progress: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 300,\n },\n orange: {\n color: theme.palette.getContrastText(orange[100]),\n backgroundColor: orange[100],\n },\n green: {\n color: theme.palette.getContrastText(green[200]),\n backgroundColor: green[200],\n },\n amber: {\n color: theme.palette.getContrastText(amber[500]),\n backgroundColor: amber[500],\n },\n unprocessedItem: {\n color: theme.palette.getContrastText(grey[300]),\n backgroundColor: grey[300],\n },\n backToInventory: {\n display: \"flex\",\n justifyContent: \"space-between\",\n padding: theme.spacing(4),\n },\n inventoriesSection: {\n marginTop: theme.spacing(2),\n },\n link: {\n color: \"inherit\",\n textDecoration: \"inherit\",\n },\n photoErrorSection: {\n paddingLeft: theme.spacing(2),\n },\n notFound: {\n display: \"fles\",\n margin: theme.spacing(2),\n },\n topActions: {\n paddingTop: theme.spacing(1.5),\n display: \"flex\",\n alignItems: \"flex-end\",\n },\n exceptionContainer: {\n marginBottom: theme.spacing(2),\n },\n backdrop: {\n zIndex: 90001,\n },\n searchField: {\n marginLeft: theme.spacing(1),\n },\n speedDial: {\n position: \"fixed\",\n bottom: theme.spacing(4),\n right: theme.spacing(4),\n },\n speedDialAction: {\n width: theme.spacing(6),\n height: theme.spacing(6),\n backgroundColor: orange[400],\n \"&:hover\": {\n backgroundColor: orange[400],\n },\n },\n}));\n\nexport const ProcessShipments = (props) => {\n const classes = useStyles();\n\n return (\n <InboundProvider>\n <Title title={<ForceTitle title=\"Inbounds\" />} />\n <Route\n path={`${props.match.path}`}\n exact\n render={(props) => <PlacedShipmentList classes={classes} {...props} />}\n />\n <Route\n path={`${props.match.path}/:id`}\n render={(props) => (\n <ProcessInboundShipmentCard classes={classes} {...props} />\n )}\n />\n </InboundProvider>\n );\n};\n\nconst PlacedShipmentList = (props) => {\n const notify = useNotify();\n const { state, dispatch, getShipments } = useInboundContext();\n const { loading } = state;\n const [term, setTerm] = useState(\"\");\n const { classes, match } = props;\n const { placedShipments } = state;\n const [searchShipments, setSearchShipments] = useState([]);\n const [showAccepted, setShowAccepted] = useStickyState(false, \"showAccepted\");\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n useEffect(() => {\n init();\n return () => {\n dispatch({ type: \"CLEAR_SHIPMENTS\" });\n debugger;\n };\n }, []);\n\n const init = async () => {\n debugger;\n dispatch({ type: \"SET_LOADING\", payload: true });\n try {\n const data = await getShipments();\n setSearchShipments(data);\n dispatch({\n type: \"PLACED_SHIPPMENTS_LOADED\",\n payload: data,\n });\n } catch (err) {\n logError(\"ProcessShipments:init\", err, notify);\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n };\n\n const getShipmentSecondaryText = (shipment, isSmall) => {\n const carLabel =\n shipment.carrierType === CarrierType.RAIL ? \"Car No: \" : \"Trl No: \";\n if (isSmall) return shipment.railCarNumber;\n else\n return (\n carLabel + shipment.railCarNumber + \" - PO No: \" + shipment.poNumber\n );\n };\n\n const getIcon = (shipment) => {\n if (shipment.state === InboundState.PROCESS_INVENTORY)\n return <CheckIcon fontSize=\"inherit\" />;\n else if (shipment.state === InboundState.PROCESS_INVENTORY_REVIEW)\n return <ReviewOutlinedIcon fontSize=\"inherit\" />;\n else if (shipment.verificationRequired === \"true\")\n return <PendingApprovalIcon fontSize=\"inherit\" />;\n return <CloseOutlinedIcon fontSize=\"inherit\" />;\n };\n\n const getAvatarClassName = (shipment) => {\n if (\n shipment.verificationRequired === \"true\" ||\n shipment.verificationRequired === \"resolved\"\n ) {\n return classes.amber;\n } else if (shipment.state === InboundState.PROCESS_INVENTORY) {\n return classes.green;\n }\n return classes.unprocessedItem;\n };\n\n const handleSelect = (shipment) => {\n dispatch({ type: \"SET_CURRENT_SHIPPMENT\", payload: shipment });\n };\n\n const toggleChecked = () => {\n setShowAccepted(!showAccepted);\n showAcceptedShipment(!showAccepted);\n };\n\n const refresh = () => {\n init();\n };\n\n const showAcceptedShipment = (showAccepted) => {\n const acceptedShippments = showAccepted\n ? searchShipments.filter((itm) => {\n return itm.state === InboundState.PROCESS_INVENTORY;\n })\n : [...searchShipments];\n return acceptedShippments;\n };\n\n const handleSearch = (evt) => {\n debugger;\n const value = evt.target.value;\n setTerm(value);\n let searchResult = placedShipments;\n if (value) {\n const searchTerm = value.toLowerCase();\n searchResult = placedShipments.filter((itm) => {\n if (\n itm.accountName.toLowerCase().includes(searchTerm) ||\n itm.railCarNumber.toLowerCase().includes(searchTerm) ||\n itm.lotNumber?.toLowerCase().includes(searchTerm) ||\n itm.poNumber?.toLowerCase().includes(searchTerm)\n ) {\n return true;\n }\n return false;\n });\n }\n setSearchShipments(searchResult);\n };\n\n const handleSubmit = (evt) => {\n if (evt.key === \"Enter\") {\n handleSearch(evt);\n }\n };\n\n const clear = () => {\n setTerm(\"\");\n setSearchShipments(placedShipments);\n };\n\n const visibleShipments = showAcceptedShipment(showAccepted, searchShipments);\n\n return (\n <CrewCard\n title={isSmall ? \"Inbound\" : \"Inbound Shipments\"}\n icon={<InbounddOutlinedIcon fontSize=\"large\" />}\n action={\n <div className={classes.topActions}>\n <IconButton onClick={refresh}>\n <RefreshIcon fontSize=\"large\" />\n </IconButton>\n </div>\n }\n >\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Grid container spacing={2}>\n <Grid item xs={12} md={6}>\n <TextField\n id=\"search\"\n name=\"search\"\n size=\"small\"\n variant=\"outlined\"\n margin=\"dense\"\n onChange={handleSearch}\n value={term}\n placeholder=\"Search\"\n className={classes.searchField}\n onKeyDown={handleSubmit}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton disableRipple onClick={clear}>\n <XIcon className={classes.clearButton} />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <Box\n pl={isSmall ? 1.5 : 0}\n pt={0.5}\n display=\"flex\"\n justifyContent={isSmall ? \"flex-start\" : \"flex-end\"}\n >\n <FormControl>\n <FormControlLabel\n label=\"Accepted shipments\"\n labelPlacement=\"end\"\n control={\n <Switch\n color={showAccepted ? \"secondary\" : \"default\"}\n checked={showAccepted}\n onChange={toggleChecked}\n />\n }\n />\n </FormControl>\n </Box>\n </Grid>\n <Grid item xs={12}>\n <List>\n {visibleShipments ? (\n visibleShipments.map((shipment, idx) => {\n return (\n <Link\n className={classes.link}\n to={match.path + \"/\" + shipment.id}\n key={shipment.id}\n >\n <ListItem onClick={() => handleSelect(shipment)}>\n <ListItemAvatar>\n <Avatar className={getAvatarClassName(shipment)}>\n {getIcon(shipment)}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={\n <Typography>{shipment.accountName}</Typography>\n }\n secondary={\n <>\n <Typography\n variant=\"subtitle2\"\n color=\"textSecondary\"\n >\n {getShipmentSecondaryText(shipment, isSmall)}\n </Typography>\n <Typography\n variant=\"subtitle2\"\n color=\"textSecondary\"\n >\n {shipment.assignedTo}\n </Typography>\n </>\n }\n />\n <ListItemSecondaryAction>\n <IconButton\n edge=\"end\"\n onClick={() => handleSelect(shipment)}\n >\n <KeyboardArrowRightIcon fontSize=\"large\" />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n {idx < searchShipments.length - 1 ? <Divider /> : null}\n </Link>\n );\n })\n ) : (\n <Typography className={classes.notFound}>\n No shipments found.\n </Typography>\n )}\n </List>\n </Grid>\n </Grid>\n </CrewCard>\n );\n};\n","export const outboundReducer = function (state, action) {\n switch (action.type) {\n case \"OUTBOUND_SHIPPMENTS_LOADED\":\n return {\n ...state,\n outboundShipments: action.payload,\n };\n case \"CLEAR_NOTE\":\n const newNotes = { ...state.notes };\n delete newNotes[action.payload.id];\n debugger;\n return {\n ...state,\n notes: newNotes,\n };\n case \"UPDATE_CURRENT_SHIPMENT\":\n return {\n ...state,\n currentShipment: { ...action.payload },\n };\n case \"UPDATE_CURRENT_INVENTORY\":\n state.currentShipment.shipmentLineItems.items =\n state.currentShipment.shipmentLineItems.items.map((itm) =>\n itm.id === action.payload.id ? action.payload : itm\n );\n return {\n ...state,\n currentLineItem: { ...action.payload },\n currentShipment: { ...state.currentShipment },\n };\n case \"SET_CURRENT_SHIPPMENT\":\n return {\n ...state,\n currentShipment: { ...action.payload.outboundShipment },\n inventoryItems: action.payload.inventoryItems,\n };\n case \"SET_INBOUND_SHIPMENT\":\n return {\n ...state,\n inboundShipment: action.payload,\n };\n case \"SET_SHIPPMENT_NOTE\":\n const newShipmentNotes = { ...state.notes };\n newShipmentNotes[action.payload.id] = action.payload.value;\n return {\n ...state,\n notes: newShipmentNotes,\n };\n case \"SET_CURRENT_SHIPMENT_LINE_ITEM\":\n return {\n ...state,\n currentLineItem: { ...action.payload.currentLineItem },\n lineItemInventoryItem: action.payload.lineItemInventoryItem\n ? { ...action.payload.lineItemInventoryItem }\n : undefined,\n };\n case \"SET_MODE\":\n return {\n ...state,\n mode: action.payload,\n };\n case \"SET_LOADING\":\n return {\n ...state,\n loading: action.payload,\n };\n case \"UPDATE_YARD_IMG\":\n return {\n ...state,\n yardSignatureKey: action.payload,\n };\n case \"UPDATE_CARRIER_IMG\":\n return {\n ...state,\n carrierSignatureKey: action.payload,\n };\n case \"CLEAR_INVENTORY\":\n return {\n ...state,\n currentInventory: {},\n carrierSignatureKey: \"\",\n yardSignatureKey: \"\",\n currentLineItem: null,\n lineItemInventoryItem: null,\n inboundShipment: null,\n isCarValidated: false,\n };\n case \"SET_CAR_VALIDATED\":\n return {\n ...state,\n isCarValidated: action.payload,\n };\n default:\n break;\n }\n return state;\n};\n","import { createContext, useContext, useReducer } from \"react\";\nimport { outboundReducer } from \"./reducer\";\n\nconst initState = {\n outboundShipments: [],\n currentInventory: {},\n currentShipment: {},\n mode: \"LIST_SHIPMENTS\",\n yardSignatureImg: \"\",\n carrierSignatureImg: \"\",\n errors: {},\n notes: {},\n loading: false,\n};\n\nconst OutboundContext = createContext(initState);\n\nexport const OutboundProvider = ({ children }) => {\n const [state, dispatch] = useReducer(outboundReducer, initState);\n\n return (\n <OutboundContext.Provider value={{ state, dispatch }}>\n {children}\n </OutboundContext.Provider>\n );\n};\n\nexport const useOutboundContext = () => useContext(OutboundContext);\n","import React, { useState, useRef } from \"react\";\nimport {\n Dialog,\n Box,\n Typography,\n DialogContent,\n TextField,\n Button,\n ListItem,\n ListItemText,\n DialogActions,\n CircularProgress,\n List,\n ListItemAvatar,\n Avatar,\n ListItemSecondaryAction,\n Divider,\n Grid,\n} from \"@material-ui/core\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n Check as CheckIcon,\n Close as XIcon,\n LinkOff as LinkOffIcon,\n Link as LinkIcon,\n} from \"@material-ui/icons\";\nimport { beep } from \"./../../../utils/utils\";\nimport { QrBarcodeScanner } from \"../../../components/common/QrBarcodeScanner/QrBarcodeScanner\";\nimport { useNotify } from \"react-admin\";\nimport { logError } from \"../../../utils/appUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n iconContainer: {\n padding: theme.spacing(1),\n marginRight: theme.spacing(1),\n height: 38,\n width: 38,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: \"50%\",\n background: \"#e0e0e0\",\n },\n container: {\n padding: theme.spacing(2),\n },\n closeButton: {\n cursor: \"pointer\",\n },\n listItem: {\n paddingRight: 0,\n paddingLeft: 0,\n },\n emptyMessage: {\n textAlign: \"center\",\n marginTop: theme.spacing(2),\n },\n deleteButton: {\n color: theme.palette.error.main,\n },\n primaryColor: {\n color: theme.palette.primary.main,\n },\n}));\n\nexport const ScanSealsDialog = ({\n onClose,\n setApplySealOpen,\n revalidateSeal,\n inboundShipment,\n dispatch,\n setDeactivatedSeal,\n loading,\n setBreakSealOpen,\n}) => {\n const createdBy = window.appUser.fullName;\n const seals = inboundShipment?.seals?.items.filter((s) => s.active) || [];\n const sealsToBeBroken = inboundShipment?.seals?.items.some(\n (s) =>\n s.active &&\n s.reValidated &&\n !s.brokenAt &&\n !s.brokenBy &&\n s.status !== \"new\"\n );\n const notify = useNotify();\n const isValidating = seals.some((s) => s.status !== \"new\" && !s.reValidated);\n const styles = useStyles();\n const [sealsError, setSealsError] = useState(\"\");\n const [barcode, setBarcode] = useState(\"\");\n const [isScannerOpen, setIsScannerOpen] = useState(true);\n const ref = useRef();\n\n const onScanSuccess = (v) => {\n if (barcode !== ref.current.value) {\n setBarcode(v);\n beep(100, 520, 200);\n setIsScannerOpen(false);\n }\n };\n\n const onReValidate = async () => {\n try {\n if (!barcode) {\n setSealsError(\"Required\");\n return;\n }\n dispatch({ type: \"SET_LOADING\", payload: true });\n const seal = seals.find((s) => s.barcode === barcode);\n if (!seal) {\n throw Error(\"Seal not matching\");\n }\n await revalidateSeal({\n notify,\n createdBy,\n barcode,\n sealId: seal.id,\n dispatch,\n inboundShipment,\n });\n } catch (error) {\n logError(\"ScanSealDialog:onReValidate\", error, notify);\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n setBarcode(\"\");\n }\n };\n\n const applyNewSeal = async (br) => {\n try {\n const seal = seals.find((s) => s.barcode === br);\n if (!seal) {\n throw Error(\"Seal not matching\");\n }\n setDeactivatedSeal({\n barcode: br,\n id: seal.id,\n description: seal.description,\n });\n onClose();\n setApplySealOpen(true);\n } catch (error) {\n logError(\"ScanSealDialog:applyNewSeal\", error, notify);\n } finally {\n setBarcode(\"\");\n }\n };\n\n const openBreakSeal = () => {\n onClose();\n setBreakSealOpen(true);\n };\n\n const handleBarcodeInputChange = (e) => {\n if (e.target.value) {\n setSealsError(\"\");\n } else {\n setSealsError(\"Required\");\n }\n setBarcode(e.target.value);\n };\n\n return (\n <Dialog open={true} fullWidth={true}>\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">\n {isValidating ? \"Validate Seals\" : \"Manage Seals\"}\n </Typography>\n <CancelOutlinedIcon\n className={styles.closeButton}\n fontSize=\"large\"\n onClick={onClose}\n />\n </Box>\n <DialogContent className={styles.container}>\n <Grid item xs={12}>\n <Box display=\"flex\" justifyContent=\"center\" mb={2}>\n {!isValidating && sealsToBeBroken && (\n <>\n <Button\n disabled={loading}\n variant=\"contained\"\n onClick={openBreakSeal}\n >\n Break\n </Button>\n </>\n )}\n </Box>\n </Grid>\n {isValidating && (\n <>\n <Grid item xs={12}>\n {isScannerOpen ? (\n <QrBarcodeScanner onScanSuccess={onScanSuccess} />\n ) : (\n <Box display=\"flex\" justifyContent=\"center\" mb={2}>\n <Button\n onClick={() => setIsScannerOpen(true)}\n color=\"primary\"\n variant=\"outlined\"\n margin=\"dense\"\n >\n Rescan\n </Button>\n </Box>\n )}\n </Grid>\n <Grid item xs={12}>\n <Box\n display=\"flex\"\n gridGap={\"10px\"}\n alignItems=\"center\"\n justifyContent=\"space-between\"\n mt={2}\n >\n <TextField\n label=\"Barcode\"\n variant=\"outlined\"\n fullWidth\n onChange={handleBarcodeInputChange}\n margin=\"dense\"\n value={barcode}\n error={!!sealsError}\n helperText={sealsError}\n inputRef={ref}\n />\n {barcode && (\n <Button\n disabled={loading}\n variant=\"contained\"\n onClick={onReValidate}\n >\n {loading ? <CircularProgress size={24} /> : \"Validate\"}\n </Button>\n )}\n </Box>\n </Grid>\n </>\n )}\n {seals.length === 0 ? (\n <Typography className={styles.emptyMessage}>\n No seals available\n </Typography>\n ) : (\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <List>\n {seals.map((seal, idx) => {\n const {\n id,\n barcode,\n description,\n reValidated,\n status,\n brokenAt,\n brokenBy,\n } = seal;\n const isNew = status === \"new\";\n const isBroken = brokenAt && brokenBy && reValidated;\n const isRevalidated = !brokenAt && !brokenBy && reValidated;\n const isNotRevalidated =\n !brokenAt && !brokenBy && !reValidated && status !== \"new\";\n return (\n <React.Fragment key={id}>\n <ListItem className={styles.listItem}>\n <ListItemAvatar>\n <Avatar className={styles.iconContainer}>\n {isRevalidated && <CheckIcon fontSize=\"small\" />}\n {isNotRevalidated && <XIcon fontSize=\"small\" />}\n {isBroken && <LinkOffIcon fontSize=\"small\" />}\n {isNew && <LinkIcon fontSize=\"small\" />}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={barcode}\n secondary={description}\n />\n <ListItemSecondaryAction>\n {brokenAt && (\n <Button\n disabled={loading}\n variant=\"contained\"\n onClick={() => applyNewSeal(barcode)}\n >\n {loading ? (\n <CircularProgress size={24} />\n ) : (\n \"Replace\"\n )}\n </Button>\n )}\n </ListItemSecondaryAction>\n </ListItem>\n {idx < seals.length - 1 ? <Divider /> : null}\n </React.Fragment>\n );\n })}\n </List>\n </Grid>\n </Grid>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={loading}>\n {loading ? <CircularProgress size={24} /> : \"Close\"}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import React, { useState, useRef } from \"react\";\nimport {\n Dialog,\n Box,\n Typography,\n DialogContent,\n TextField,\n Button,\n DialogActions,\n Grid,\n CircularProgress,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport { QrBarcodeScanner } from \"../../../components/common/QrBarcodeScanner/QrBarcodeScanner\";\nimport { beep } from \"./../../../utils/utils\";\nimport { useNotify } from \"react-admin\";\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n padding: theme.spacing(2),\n },\n closeButton: {\n cursor: \"pointer\",\n },\n}));\n\nconst ConfirmDialog = ({ open, onClose, onConfirm, saving }) => {\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogContent>\n <Typography>\n This seal is already added in the inbound shipment. Do you want to\n scan again?\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={saving}>\n close\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport const ApplySealsDialog = ({\n onClose,\n saveSeal,\n deActivateSeal,\n seal,\n inboundShipment,\n dispatch,\n loading,\n}) => {\n const createdBy = window.appUser.fullName;\n const seals = inboundShipment?.seals?.items || [];\n const [barcode, setBarcode] = useState(\"\");\n const [sealError, setSealError] = useState(\"\");\n const [alreadyAddedDialogOpen, setAlreadyAddedDialogOpen] = useState(false);\n const [isScanned, setIsScanned] = useState(false);\n const styles = useStyles();\n const [isScannerOpen, setIsScannerOpen] = useState(true);\n const notify = useNotify();\n const ref = useRef();\n\n const save = async () => {\n if (!barcode) {\n setSealError(\"Required\");\n return;\n }\n\n if (seals.some((s) => s.barcode === barcode)) {\n setAlreadyAddedDialogOpen(true);\n return;\n }\n\n try {\n dispatch({ type: \"SET_LOADING\", payload: true });\n const updatedInbound = await deActivateSeal({\n notify,\n dispatch,\n inboundShipment,\n createdBy,\n barcode: seal.barcode,\n sealId: seal.id,\n });\n await saveSeal({\n notify,\n inboundShipment: updatedInbound,\n barcode,\n note: seal.description,\n createdBy,\n dispatch,\n scanned: isScanned,\n });\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n onClose();\n }\n };\n\n const handleScanSuccess = (v) => {\n if (ref.current?.value !== barcode) {\n setBarcode(v);\n setIsScanned(true);\n beep(100, 520, 200);\n }\n };\n\n const handleAlreadyAddedDialogClose = () => {\n setAlreadyAddedDialogOpen(false);\n setIsScanned(false);\n setBarcode(\"\");\n };\n\n const handleBarcodeInputChange = (e) => {\n if (e.target.value) {\n setSealError(\"\");\n } else {\n setSealError(\"Required\");\n }\n setBarcode(e.target.value);\n setIsScanned(false);\n };\n\n return (\n <>\n <Dialog open={true} fullWidth={true}>\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">Replace Seal</Typography>\n <CancelOutlinedIcon\n className={styles.closeButton}\n fontSize=\"large\"\n onClick={onClose}\n />\n </Box>\n <DialogContent>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n {isScannerOpen ? (\n <QrBarcodeScanner onScanSuccess={handleScanSuccess} />\n ) : (\n <Box display=\"flex\" justifyContent=\"center\" mb={2}>\n <Button\n onClick={() => setIsScannerOpen(true)}\n color=\"primary\"\n variant=\"outlined\"\n margin=\"dense\"\n >\n Rescan\n </Button>\n </Box>\n )}\n </Grid>\n <Grid item xs={12}>\n <TextField\n label=\"Barcode\"\n variant=\"outlined\"\n fullWidth\n margin=\"dense\"\n value={barcode}\n onChange={handleBarcodeInputChange}\n error={!!sealError}\n helperText={sealError}\n disabled={isScanned}\n inputRef={ref}\n />\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n {!loading && <Button onClick={onClose}>Close</Button>}\n <Button color=\"primary\" onClick={save}>\n {loading ? <CircularProgress color=\"inherit\" /> : \"Save\"}\n </Button>\n </DialogActions>\n </Dialog>\n\n <ConfirmDialog\n open={alreadyAddedDialogOpen}\n onClose={handleAlreadyAddedDialogClose}\n saving={loading}\n barcode={barcode}\n />\n </>\n );\n};\n","import { API, graphqlOperation } from \"aws-amplify\";\nimport {\n updateSeal,\n createSeal as createSealRequest,\n} from \"../../../graphql/mutations\";\nimport { updateInboundShipment as updateInboundShipmentRequest } from \"../../../graphql/inbound/custom-mutations\";\nimport { SealStatus } from \"../../../utils/constants\";\nimport { logError } from \"../../../utils/appUtils\";\n\nconst modifySeal = async ({ sealId, updatedSeal, notify }) => {\n try {\n if (!sealId) {\n throw new Error(\"Required fields are missing\");\n }\n const sealInput = {\n id: sealId,\n ...updatedSeal,\n };\n const result = await API.graphql(\n graphqlOperation(updateSeal, { input: sealInput })\n );\n return result.data.updateSeal;\n } catch (error) {\n logError(\"ModifySeal\", error, notify);\n throw error;\n }\n};\n// TODO SHOULD BE REMOVED\nconst updateInboundShipment = async (toUpdateShipment) => {\n toUpdateShipment = { ...toUpdateShipment };\n let response = await API.graphql(\n graphqlOperation(updateInboundShipmentRequest, {\n input: toUpdateShipment,\n })\n );\n return response.data.updateInboundShipment;\n};\n\nconst modifySealAction = async ({\n sealId,\n barcode,\n createdBy,\n dispatch,\n inboundShipment,\n updateSealData,\n actionType,\n actionText,\n notify,\n}) => {\n try {\n const seal = await modifySeal({\n notify,\n sealId,\n updatedSeal: updateSealData,\n });\n const newHistory = {\n date: new Date().toISOString(),\n by: createdBy,\n type: actionType,\n text: `Seal with barcode ${barcode} with ID ${sealId} was ${actionText}`,\n };\n const updatedHistory = inboundShipment.history\n ? [...inboundShipment.history, newHistory]\n : [newHistory];\n\n const inboundShipmentToUpdate = {\n id: inboundShipment.id,\n history: updatedHistory,\n };\n await updateInboundShipment(inboundShipmentToUpdate);\n\n const inboundShipmentToDispatch = {\n ...inboundShipment,\n history: updatedHistory,\n seals: {\n ...inboundShipment.seals,\n items: inboundShipment.seals.items.map((item) =>\n item.id === sealId ? seal : item\n ),\n },\n };\n dispatch({\n type: \"SET_INBOUND_SHIPMENT\",\n payload: inboundShipmentToDispatch,\n });\n return inboundShipmentToDispatch;\n } catch (error) {\n logError(\"modifySealAction\", error, notify);\n throw error;\n }\n};\n\nconst revalidateSeal = async (params) => {\n return modifySealAction({\n ...params,\n updateSealData: { reValidated: true },\n actionType: \"SEAL_REVALIDATED\",\n actionText: \"revalidated\",\n });\n};\n\nconst breakSeal = async (params) => {\n return modifySealAction({\n ...params,\n updateSealData: {\n brokenAt: new Date().toISOString(),\n brokenBy: params.createdBy,\n },\n actionType: \"SEAL_BROKEN\",\n actionText: \"broken\",\n });\n};\n\nconst deActivateSeal = async (params) => {\n return modifySealAction({\n ...params,\n updateSealData: { active: false },\n actionType: \"SEAL_DEACTIVATED\",\n actionText: \"deactivated\",\n });\n};\n\nconst createSeal = async ({\n currentShipment,\n barcode,\n createdBy,\n note = \"\",\n status,\n}) => {\n const sealInput = {\n barcode,\n description: note,\n referenceId: currentShipment.id,\n owner: currentShipment.owner,\n groups: currentShipment.groups,\n reloadYardId: currentShipment.reloadYardId,\n accountId: currentShipment.accountId,\n accountName: currentShipment.accountName,\n referenceName: \"InboundShipment\",\n validated: true,\n active: true,\n status,\n createdBy,\n };\n\n const result = await API.graphql(\n graphqlOperation(createSealRequest, { input: sealInput })\n );\n return result.data.createSeal;\n};\n\nconst createNewSeal = async ({\n barcode,\n createdBy,\n dispatch,\n note,\n inboundShipment,\n notify,\n}) => {\n try {\n const seal = await createSeal({\n currentShipment: inboundShipment,\n createdBy,\n barcode,\n note,\n status: SealStatus.NEW,\n });\n const newHistory = {\n date: new Date().toISOString(),\n by: createdBy,\n type: \"SEAL_ADDED\",\n text: `Seal added with barcode ${barcode}, with status NEW`,\n };\n const updatedHistory = inboundShipment.history\n ? [...inboundShipment.history, newHistory]\n : [newHistory];\n\n const inboundShipmentToUpdate = {\n id: inboundShipment.id,\n history: updatedHistory,\n };\n await updateInboundShipment(inboundShipmentToUpdate);\n const inboundShipmentToDispatch = {\n ...inboundShipment,\n history: updatedHistory,\n seals: {\n ...inboundShipment.seals,\n items: [...inboundShipment.seals.items, seal],\n },\n };\n dispatch({\n type: \"SET_INBOUND_SHIPMENT\",\n payload: inboundShipmentToDispatch,\n });\n } catch (error) {\n logError(\"createNewSeal\", error, notify);\n throw error;\n }\n};\n\nexport {\n revalidateSeal,\n breakSeal,\n createNewSeal,\n modifySeal,\n updateInboundShipment,\n deActivateSeal,\n};\n","import React, { useState, useRef } from \"react\";\nimport {\n Dialog,\n Box,\n Typography,\n DialogContent,\n TextField,\n Button,\n DialogActions,\n Grid,\n CircularProgress,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport { QrBarcodeScanner } from \"../../../components/common/QrBarcodeScanner/QrBarcodeScanner\";\nimport { useNotify } from \"react-admin\";\nimport { beep } from \"./../../../utils/utils\";\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n padding: theme.spacing(2),\n },\n closeButton: {\n cursor: \"pointer\",\n },\n primaryColor: {\n color: theme.palette.primary.main,\n },\n}));\n\nconst ConfirmDialog = ({\n open,\n onClose,\n saving,\n barcode,\n seals,\n onConfirm,\n}) => {\n const styles = useStyles();\n const toBeBrokenSeal = seals.find((s) => s.barcode === barcode);\n\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogContent>\n {!toBeBrokenSeal && (\n <Typography>\n This Barcode <Typography variant=\"overline\">\"{barcode}\"</Typography>{\" \"}\n is not in the list! You can not break it.\n </Typography>\n )}\n {toBeBrokenSeal && (\n <Typography>\n Are you sure you want to break the seal with barcode{\" \"}\n <Typography variant=\"overline\">\"{barcode}\"</Typography> ?\n </Typography>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={saving}>\n Cancel\n </Button>\n {toBeBrokenSeal && (\n <Button\n onClick={() => onConfirm(toBeBrokenSeal)}\n className={styles.deleteButton}\n disabled={saving}\n color=\"primary\"\n >\n {saving ? <CircularProgress size={24} /> : \"Break\"}\n </Button>\n )}\n </DialogActions>\n </Dialog>\n );\n};\n\nexport const BreakSealsDialog = ({\n onClose,\n inboundShipment,\n dispatch,\n loading,\n breakSealRequest,\n}) => {\n const brokenBy = window.appUser.fullName;\n const seals =\n inboundShipment?.seals?.items.filter(\n (s) => !s.brokenAt && !s.brokenBy && s.status !== \"new\"\n ) || [];\n const [barcode, setBarcode] = useState(\"\");\n const [confirmDialogOpen, setConfirmDialogOpen] = useState(false);\n const [sealError, setSealError] = useState(\"\");\n const [isScannerOpen, setIsScannerOpen] = useState(true);\n const ref = useRef();\n const notify = useNotify();\n const styles = useStyles();\n\n const breakSeal = async (seal) => {\n if (!barcode) {\n setSealError(\"Required\");\n return;\n }\n try {\n dispatch({ type: \"SET_LOADING\", payload: true });\n await breakSealRequest({\n notify,\n dispatch,\n inboundShipment,\n createdBy: brokenBy,\n barcode: seal.barcode,\n sealId: seal.id,\n });\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n onClose();\n }\n };\n\n const handleScanSuccess = (v) => {\n if (barcode !== ref.current.value) {\n setBarcode(v);\n beep(100, 520, 200);\n }\n setIsScannerOpen(false);\n };\n\n const handleBarcodeInputChange = (e) => {\n if (e.target.value) {\n setSealError(\"\");\n } else {\n setSealError(\"Required\");\n }\n setBarcode(e.target.value);\n };\n\n const handleConfirmBreak = (seal) => {\n breakSeal(seal);\n setConfirmDialogOpen(false);\n };\n\n const handleCancelBreak = () => {\n setConfirmDialogOpen(false);\n };\n\n const onBreakSeal = () => {\n if (!barcode) {\n setSealError(\"Required\");\n return;\n }\n setConfirmDialogOpen(true);\n };\n\n return (\n <>\n <Dialog open={true} fullWidth={true}>\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">Break Seal</Typography>\n <CancelOutlinedIcon\n className={styles.closeButton}\n fontSize=\"large\"\n onClick={onClose}\n />\n </Box>\n <DialogContent>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n {isScannerOpen ? (\n <QrBarcodeScanner onScanSuccess={handleScanSuccess} />\n ) : (\n <Box display=\"flex\" justifyContent=\"center\" mb={2}>\n <Button\n onClick={() => setIsScannerOpen(true)}\n color=\"primary\"\n variant=\"outlined\"\n margin=\"dense\"\n >\n Rescan\n </Button>\n </Box>\n )}\n </Grid>\n <Grid item xs={12}>\n <TextField\n label=\"Barcode\"\n variant=\"outlined\"\n fullWidth\n margin=\"dense\"\n value={barcode}\n onChange={handleBarcodeInputChange}\n error={!!sealError}\n helperText={sealError}\n inputRef={ref}\n />\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n {!loading && <Button onClick={onClose}>Close</Button>}\n <Button color=\"primary\" onClick={onBreakSeal}>\n {loading ? <CircularProgress color=\"inherit\" /> : \"Break\"}\n </Button>\n </DialogActions>\n </Dialog>\n\n <ConfirmDialog\n open={confirmDialogOpen}\n onClose={handleCancelBreak}\n onConfirm={handleConfirmBreak}\n saving={loading}\n barcode={barcode}\n seals={seals}\n />\n </>\n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Confirm, useNotify, useRedirect } from \"react-admin\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n getShipmentLineItemInventoryItemMobile,\n getShipmentLineItemLookup,\n getOutboundShipmentMobile,\n shipmentLineItemByInventoryForValidation,\n} from \"../../../graphql/outbound/custom-queries\";\nimport {\n getAisle,\n locationByAisleBySortKey,\n} from \"../../../graphql/reloadyard/custom-queries\";\nimport {\n updateShipmentLineItemInventoryItem,\n updateOutboundShipment,\n updateShipmentLineItem,\n} from \"../../../graphql/outbound/custom-mutations\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n CardActions,\n Button,\n Divider,\n Grid,\n IconButton,\n TextField,\n Typography,\n CircularProgress,\n Box,\n Backdrop,\n useMediaQuery,\n CardContent,\n MenuItem,\n} from \"@material-ui/core\";\nimport { deepOrange, grey } from \"@material-ui/core/colors\";\nimport CheckBoxOutlineBlankOutlinedIcon from \"@material-ui/icons/CheckBoxOutlineBlankOutlined\";\nimport FiberManualRecordIcon from \"@material-ui/icons/FiberManualRecord\";\nimport HighlightOffIcon from \"@material-ui/icons/HighlightOff\";\nimport { useOutboundContext } from \"./context\";\nimport { isAuthorized, logError } from \"../../../utils/appUtils\";\nimport {\n isCapacitySliderVisible,\n getLocationFullName,\n getLocationViewName,\n isTrack,\n promiseSetCapacityUsed,\n isBulkLocation,\n isUnmanagedLocation,\n} from \"../../../utils/locationUtils\";\nimport { getUnitName } from \"../../../utils/loadTypeUtils\";\nimport { getInventoryPrimaryField } from \"../../../utils/utils\";\nimport {\n AclType,\n barcodeExceptions,\n barcodeExceptionsChoices,\n LocationLoadType,\n LocationType,\n NoteType,\n OutboundState,\n OutboundStatus,\n SealStatus,\n ShipmentLineItemStatus,\n} from \"../../../utils/constants\";\nimport { CustomFieldsMobile } from \"../../../components/common/CustomFields\";\nimport ErrorCard from \"../../../components/ErrorCard\";\nimport InventoryPhotos from \"../../../components/common/InventoryPhotos\";\nimport LocationCapacity, {\n StructuredLocationCapacity,\n} from \"../../../components/common/LocationCapacity\";\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport { TrackLocation } from \"../trackManagement/TrackLocation\";\nimport { showWeight } from \"../../../managerApp/resources/inventory/InventoryUitls\";\nimport { getInboundShipmentSeals } from \"../../../graphql/inbound/custom-queries\";\nimport { ScanSealsDialog } from \"./ScanSealsDialog\";\nimport { ApplySealsDialog } from \"./ApplySealsDialog\";\nimport {\n revalidateSeal,\n breakSeal,\n createNewSeal,\n deActivateSeal,\n} from \"./utils\";\nimport { BreakSealsDialog } from \"./BreakSealDialog\";\nimport { BarcodeScanDialog } from \"../inboundShipments/BarcodeScanDialog\";\nimport { ScannerIcon } from \"../../../components/common\";\n\nconst useStyles = makeStyles((theme) => ({\n actions: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n progress: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 300,\n },\n location: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"center\",\n flexWrap: \"wrap\",\n padding: theme.spacing(0.5),\n marginTop: theme.spacing(2),\n },\n bayContainer: {\n display: \"flex\",\n flexDirection: \"column-reverse\",\n alignItems: \"center\",\n alignContent: \"space-between\",\n border: \"1px solid #b0bec5\",\n borderRadius: theme.spacing(1),\n minWidth: theme.spacing(30),\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n },\n levelContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n marginTop: theme.spacing(0.5),\n marginBottom: theme.spacing(0.5),\n },\n locationAvatar: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(grey[400]),\n backgroundColor: grey[400],\n borderRadius: theme.spacing(0.5),\n height: \"100%\",\n padding: theme.spacing(1),\n minWidth: \"5rem\",\n },\n locationToPickAvatar: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n borderRadius: theme.spacing(0.5),\n padding: theme.spacing(1),\n minWidth: \"5rem\",\n },\n divider: {\n border: \".5px solid\",\n borderColor: grey[400],\n marginBottom: theme.spacing(0.5),\n width: \"100%\",\n },\n backdrop: {\n zIndex: 90001,\n },\n}));\n\nconst InventoryItemCard = ({ history, match }) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const classes = useStyles();\n const imgRef = useRef();\n const isComponentMounted = useRef(true);\n const { state, dispatch } = useOutboundContext();\n const {\n currentLineItem,\n lineItemInventoryItem,\n currentShipment,\n inboundShipment,\n isCarValidated,\n loading,\n } = state;\n const [invalidIdError, setInvalidIdError] = useState();\n const [note, setNote] = useState();\n const [bayList, setBayList] = useState([]);\n const isMedium = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const [scanSealOpen, setScanSealOpen] = useState(false);\n const [applySealOpen, setApplySealOpen] = useState(false);\n const [breakSealOpen, setBreakSealOpen] = useState(false);\n const [deactivatedSeal, setDeactivatedSeal] = useState({});\n const [scanDialogOpen, setScanDialogOpen] = useState(false);\n const [barcode, setBarcode] = useState(\"\");\n const [isBarcodeScanned, setIsBarcodeScanned] = useState(false);\n const [exceptionDialogOpen, setExceptionDialogOpen] = useState(false);\n const [barcodeExceptionNote, setBarcodeExceptionNote] = useState(\"\");\n const [isHasException, setIsHasException] = useState(false);\n const chooseBarcodeDamage = useRef(null);\n\n const expectedBarcode = lineItemInventoryItem?.inventoryItem?.barcode?.trim();\n const isValidBarcode = barcode?.trim() === expectedBarcode;\n\n useEffect(() => {\n setBarcodeExceptionNote(lineItemInventoryItem?.barcodeExceptionNote);\n setIsHasException(lineItemInventoryItem?.hasException);\n }, [lineItemInventoryItem]);\n\n const isSaveButtonDisabled = () => {\n if (isValidBarcode) {\n return false;\n } else {\n return (\n (barcodeExceptionNote?.trim() === \"\" &&\n barcodeExceptionNote !== barcodeExceptions.MISMATCH) ||\n lineItemInventoryItem?.status === ShipmentLineItemStatus.VERIFIED\n );\n }\n };\n\n const exceptionInputChoices = [\n { id: \"\", value: \"\", name: <span> </span> },\n ...barcodeExceptionsChoices,\n ];\n\n const seals =\n inboundShipment?.seals?.items.filter(\n (s) => s.active && !s.brokenAt && !s.brokenBy\n ) || [];\n const isValidating = seals.some((s) => s.status !== \"new\" && !s.reValidated);\n\n useEffect(() => {\n getData(match.params.id);\n return () => (isComponentMounted.current = false);\n }, []);\n\n const closeApplySealsDialog = () => {\n setApplySealOpen(false);\n setScanSealOpen(true);\n };\n\n const closeBreakSealsDialog = () => {\n setBreakSealOpen(false);\n setScanSealOpen(true);\n };\n\n const closeScanSealsDialog = () => {\n setScanSealOpen(false);\n };\n\n const getData = async (id) => {\n debugger;\n try {\n dispatch({ type: \"SET_LOADING\", payload: true });\n let response = await API.graphql(\n graphqlOperation(getShipmentLineItemInventoryItemMobile, { id })\n );\n const lineItemInventoryItem =\n response.data.getShipmentLineItemInventoryItem;\n if (\n lineItemInventoryItem?.status !== ShipmentLineItemStatus.NEW &&\n lineItemInventoryItem?.status !== ShipmentLineItemStatus.PENDING\n ) {\n dispatch({ type: \"SET_CAR_VALIDATED\", payload: true });\n }\n response = await API.graphql(\n graphqlOperation(getShipmentLineItemLookup, {\n id: lineItemInventoryItem.shipmentLineItemId,\n })\n );\n\n const currentLineItem = response.data.getShipmentLineItem;\n if (currentLineItem) {\n if (!currentShipment?.id) {\n const response = await API.graphql(\n graphqlOperation(getOutboundShipmentMobile, {\n id: currentLineItem.outboundShipmentId,\n })\n );\n const inventoryItems = [];\n const outboundShipment = response.data.getOutboundShipment;\n outboundShipment.shipmentLineItems.items.forEach((lineItem) => {\n lineItem.inventoryItems.items.forEach((inventoryItem) => {\n inventoryItem.inventory = lineItem.inventory;\n inventoryItems.push(inventoryItem);\n });\n });\n dispatch({\n type: \"SET_CURRENT_SHIPPMENT\",\n payload: { outboundShipment, inventoryItems },\n });\n }\n const account = currentLineItem.inventory.account;\n\n // const location = lineItemInventoryItem.inventoryItem.location;\n // if (isBulk(location) && currentLineItem.inventory.product?.trackInventorySeals || account.trackInventorySeals) {\n // // TODO scan bulk inventory seals\n // } else\n if (account.trackInboundSeals) {\n // scan inboundShipment seals\n // Get seals\n const inboundResponse = await API.graphql(\n graphqlOperation(getInboundShipmentSeals, {\n id: currentLineItem.inventory.inboundShipmentId,\n })\n );\n const inboundShipment = inboundResponse.data.getInboundShipment;\n debugger;\n // if (inboundShipment.seals?.items.filter(itm => itm.active === true).length > 0) {\n dispatch({ type: \"SET_INBOUND_SHIPMENT\", payload: inboundShipment });\n // }\n }\n dispatch({\n type: \"SET_CURRENT_SHIPMENT_LINE_ITEM\",\n payload: { currentLineItem, lineItemInventoryItem },\n });\n } else {\n setInvalidIdError(`Line item ID ${id} doesn't exist.`);\n return;\n }\n if (\n lineItemInventoryItem.inventoryItem.location.type === LocationType.BULK\n ) {\n const aisle = await getLineItemAisle(\n lineItemInventoryItem.inventoryItem.location\n );\n setBayList(aisle.locations.items);\n } else if (\n lineItemInventoryItem.inventoryItem.location.type ===\n LocationType.STRUCTURED\n ) {\n const aisle = await getLineItemAisle(\n lineItemInventoryItem.inventoryItem.location\n );\n let bayList = [];\n for (let location of aisle.locations.items) {\n const bay = location.bay;\n if (!bayList[bay]) bayList[bay] = [];\n const level = location.level;\n if (!bayList[bay][level - 1]) bayList[bay][level - 1] = [];\n bayList[bay][level - 1].push(location);\n }\n bayList.splice(0, 1);\n for (let bay of bayList) {\n if (!bay || bay.length === 0) continue;\n for (let level of bay) {\n level.sort((a, b) => {\n return a.position - b.position;\n });\n }\n }\n setBayList(bayList);\n }\n } catch (err) {\n logError(\"InventoryItemCard:getLineItem\", err, notify);\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n };\n\n const getLineItemAisle = async (location) => {\n const aisleResponse = await API.graphql(\n graphqlOperation(getAisle, { id: location.aisle.id })\n );\n const aisle = aisleResponse.data.getAisle;\n if (aisle.locations.nextToken) {\n const locationResponse = await API.graphql(\n graphqlOperation(locationByAisleBySortKey, {\n aisleId: aisle.id,\n limit: 1000,\n })\n );\n aisle.locations.items =\n locationResponse.data.locationByAisleBySortKey.items.filter(\n (itm) => itm.active === \"true\"\n );\n } else {\n aisle.locations.items = aisle.locations.items.filter(\n (itm) => itm.active === \"true\"\n );\n }\n return aisle;\n };\n\n const saveLineItem = async (lineItem) => {\n debugger;\n lineItem = { ...lineItem };\n delete lineItem.updatedAt;\n delete lineItem.createdAt;\n delete lineItem.inventory;\n delete lineItem.product;\n delete lineItem.inventoryItems;\n\n const response = await API.graphql(\n graphqlOperation(updateShipmentLineItem, { input: lineItem })\n );\n dispatch({\n type: \"UPDATE_CURRENT_INVENTORY\",\n payload: response.data.updateShipmentLineItem,\n });\n debugger;\n };\n\n const setNextState = () => {\n if (lineItemInventoryItem.status === ShipmentLineItemStatus.PENDING) {\n lineItemInventoryItem.status = ShipmentLineItemStatus.LOADED;\n } else if (lineItemInventoryItem.status === ShipmentLineItemStatus.LOADED) {\n lineItemInventoryItem.status = ShipmentLineItemStatus.VERIFIED;\n } else if (\n lineItemInventoryItem.status === ShipmentLineItemStatus.REJECTED\n ) {\n lineItemInventoryItem.status = ShipmentLineItemStatus.LOADED;\n }\n };\n\n const handleSave = async (skipValidation = false, route = true) => {\n debugger;\n const previousStatus = currentLineItem.status;\n\n if (\n isTrack(lineItemInventoryItem.inventoryItem.location.area) &&\n currentLineItem.inventory.account.verifyInboundRailCar &&\n !isCarValidated\n ) {\n notify(\"Validate rail car before processing the shipment.\", \"error\");\n return;\n }\n if (inboundShipment?.seals?.items?.length > 0) {\n //\n let invalidSeals = inboundShipment.seals.items.filter(\n (itm) =>\n itm.active &&\n itm.reValidated !== true &&\n itm.status !== SealStatus.NEW\n );\n if (invalidSeals.length > 0) {\n notify(\"Validate all seals before processing the shipment.\", \"error\");\n return;\n }\n const response = await API.graphql(\n graphqlOperation(shipmentLineItemByInventoryForValidation, {\n inventoryId: currentLineItem?.inventoryId,\n })\n );\n const pendingOutBounds =\n response?.data?.shipmentLineItemByInventory?.items?.filter(\n (item) =>\n ShipmentLineItemStatus.PENDING &&\n item.outboundShipment.status === \"ARRIVED\" &&\n item.outboundShipment.id !== currentShipment?.id\n );\n\n if (pendingOutBounds.length === 0) {\n invalidSeals = inboundShipment.seals.items.filter(\n (itm) => itm.active && itm.brokenBy\n );\n const newSeals = inboundShipment.seals.items.filter(\n (itm) => itm.status === SealStatus.NEW\n );\n if (invalidSeals.length === 0 && newSeals.length === 0) {\n notify(\n \"Break/Replace old seals before processing the shipment.\",\n \"error\"\n );\n return;\n }\n if (invalidSeals.length > 0) {\n notify(\n \"Replace broken seals before processing the shipment.\",\n \"error\"\n );\n return;\n }\n }\n }\n\n if (!skipValidation) {\n setNextState();\n }\n dispatch({ type: \"SET_LOADING\", payload: true });\n try {\n if (note) {\n const newNote = {\n date: new Date(),\n by: window.appUser?.fullName,\n type: NoteType.GENERIC,\n text: note,\n };\n if (currentLineItem.notes) currentLineItem.notes.push(newNote);\n else currentLineItem.notes = [newNote];\n await saveLineItem(currentLineItem);\n }\n const promiseList = [];\n if (\n previousStatus === ShipmentLineItemStatus.PENDING &&\n lineItemInventoryItem.status === ShipmentLineItemStatus.LOADED\n ) {\n promiseList.push(setLocationCapacity());\n if (!currentShipment.startDateTime) {\n currentShipment.startDateTime = new Date().toISOString();\n promiseList.push(doSaveShipment(currentShipment));\n }\n await Promise.all(promiseList);\n }\n await saveLineItemInventoryItem();\n if (\n currentShipment.state === OutboundState.COMPLETED &&\n lineItemInventoryItem.status === ShipmentLineItemStatus.REJECTED\n ) {\n currentShipment.state = OutboundState.REJECTED;\n currentShipment.status = OutboundStatus.ARRIVED;\n await saveShipment(currentShipment);\n }\n route &&\n history.replace(\"/processOutboundShipments/\" + currentShipment.id);\n } catch (err) {\n logError(\n \"processOutboundShipments:ShipmetItem:handleSave\",\n err,\n notify,\n redirect\n );\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n };\n\n const saveShipment = async (toUpdateShipment) => {\n const response = await doSaveShipment(toUpdateShipment);\n dispatch({\n type: \"UPDATE_CURRENT_SHIPMENT\",\n payload: response.data.updateOutboundShipment,\n });\n return response.data.updateOutboundShipment;\n };\n\n const doSaveShipment = (toUpdateShipment) => {\n debugger;\n toUpdateShipment = { ...toUpdateShipment };\n delete toUpdateShipment.account;\n delete toUpdateShipment.area;\n delete toUpdateShipment.createdAt;\n delete toUpdateShipment.invoice;\n delete toUpdateShipment.location;\n delete toUpdateShipment.reloadYardCommodity;\n delete toUpdateShipment.seals;\n delete toUpdateShipment.shipmentLineItems;\n delete toUpdateShipment.timeslot;\n delete toUpdateShipment.updatedAt;\n\n return API.graphql(\n graphqlOperation(updateOutboundShipment, { input: toUpdateShipment })\n );\n };\n\n const saveLineItemInventoryItem = async () => {\n const lineItemInventoryItemInput = { ...lineItemInventoryItem };\n delete lineItemInventoryItemInput.updatedAt;\n delete lineItemInventoryItemInput.createdAt;\n delete lineItemInventoryItemInput.inventoryItem;\n const response = await API.graphql(\n graphqlOperation(updateShipmentLineItemInventoryItem, {\n input: lineItemInventoryItemInput,\n })\n );\n const lineItemInventoryItemResponse =\n response.data.updateShipmentLineItemInventoryItem;\n dispatch({\n type: \"SET_CURRENT_SHIPMENT_LINE_ITEM\",\n payload: {\n currentLineItem,\n lineItemInventoryItem: lineItemInventoryItemResponse,\n },\n });\n };\n\n const handleScanButtonClick = () => {\n setBarcode(\"\");\n setScanDialogOpen(true);\n };\n\n const handleScanClose = () => setScanDialogOpen(false);\n const handleExceptionDialogClose = () => setExceptionDialogOpen(false);\n\n const handleScanBarcode = async () => {\n setIsBarcodeScanned(true);\n if (isValidBarcode) {\n handleRemoveException();\n } else {\n // Open an exception dialog when the barcode doesn't match\n setExceptionDialogOpen(true);\n }\n // Close the scan dialog regardless\n setScanDialogOpen(false);\n };\n\n const notifyMessageByException = (exceptionValue) => {\n if (!!exceptionValue) {\n return notify(\"The barcode exception saved!\", \"warning\");\n }\n return notify(\n \"Select a reason for the barcode exception to proceed.\",\n \"warning\"\n );\n };\n\n const handleCreateException = async (exceptionNote) => {\n try {\n dispatch({ type: \"SET_LOADING\", payload: true });\n setExceptionDialogOpen(false);\n\n // Update line item with exception details\n lineItemInventoryItem.hasException = true;\n lineItemInventoryItem.barcodeException = true;\n if (exceptionNote) {\n lineItemInventoryItem.barcodeExceptionNote = exceptionNote;\n } else if (!isValidBarcode && barcode?.trim() !== \"\") {\n lineItemInventoryItem.barcodeExceptionNote = barcodeExceptions.MISMATCH;\n } else {\n chooseBarcodeDamage?.current?.focus();\n lineItemInventoryItem.barcodeExceptionNote = \"\";\n }\n\n // Update shipment to indicate there's an exception\n const updatedShipment = {\n ...currentShipment,\n hasException: true,\n };\n\n // Perform save operations concurrently\n await Promise.all([\n saveShipment(updatedShipment),\n saveLineItemInventoryItem(),\n ]);\n // Notify the user of a successful update\n notifyMessageByException(exceptionNote || barcodeExceptions.MISMATCH);\n } catch (error) {\n // Unified error logging and user notification\n logError(\"InventoryItemCard:handleAddException\", error, notify);\n } finally {\n // Ensure loading state is cleared\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n };\n\n const handleRemoveException = async () => {\n // If there's no exception to remove, return immediately\n if (\n !lineItemInventoryItem.hasException ||\n !lineItemInventoryItem.barcodeException\n ) {\n return;\n }\n\n try {\n dispatch({ type: \"SET_LOADING\", payload: true });\n setExceptionDialogOpen(false);\n\n // Reset exception details on the line item inventory\n lineItemInventoryItem.hasException = false;\n lineItemInventoryItem.barcodeException = false;\n lineItemInventoryItem.barcodeExceptionNote = \"\";\n\n // Check if the outbound shipment still has any exceptions\n const responseOutbound = await API.graphql(\n graphqlOperation(getOutboundShipmentMobile, {\n id: currentLineItem.outboundShipmentId,\n })\n );\n const shipmentHasExceptions =\n responseOutbound?.data?.getOutboundShipment?.shipmentLineItems.items.some(\n (shipmentLineItem) =>\n shipmentLineItem.inventoryItems.items.some(\n (inventoryItem) =>\n (inventoryItem.barcodeException ||\n inventoryItem.hasException) &&\n inventoryItem.id !== lineItemInventoryItem.id\n )\n );\n\n // Prepare operations to run concurrently\n const operations = [saveLineItemInventoryItem()];\n\n // If no exceptions remain on the shipment, update it\n if (!shipmentHasExceptions) {\n const updatedShipment = {\n ...currentShipment,\n hasException: false,\n };\n operations.push(saveShipment(updatedShipment));\n }\n\n // Perform all operations concurrently\n await Promise.all(operations);\n } catch (error) {\n // Log error and notify user\n logError(\"InventoryItemCard:handleRemoveException\", error, notify);\n } finally {\n // Clear loading state regardless of success or error\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n };\n\n const onExceptionChoiceChange = (e) => {\n const value = e.target.value;\n if (value) {\n return handleCreateException(value);\n } else {\n return handleRemoveException();\n }\n };\n\n const setLocationCapacity = () => {\n const currentInventory = currentLineItem.inventory;\n const currentLocation = lineItemInventoryItem.inventoryItem.location;\n\n if (isUnmanagedLocation(currentLocation)) return Promise.resolve({});\n\n let capacityUsed = currentLocation.capacityUsed;\n if (isBulkLocation(currentLocation)) {\n capacityUsed =\n currentLocation.capacityUsed - lineItemInventoryItem.quantityToPick;\n } else {\n const inventoryLoadType =\n currentInventory.reloadYardCommodity.commodity.locationLoadType;\n // TODO\n // isnt't this handled by isUnmanagedLocation ???\n if (inventoryLoadType === LocationLoadType.OTHER) return;\n if (currentLocation.aisle.type === LocationType.STRUCTURED) {\n const locationLoadType =\n currentLocation.locationLoad[inventoryLoadType];\n if (locationLoadType.selected) {\n capacityUsed =\n currentLocation.capacityUsed - locationLoadType.capacity;\n\n if (capacityUsed === 0) {\n currentLocation.productId = null;\n currentLocation.productName = null;\n }\n }\n }\n }\n\n return promiseSetCapacityUsed(currentLocation, capacityUsed);\n };\n\n const handleCancel = () => {\n history.push(\"/processOutboundShipments/\" + currentShipment.id);\n };\n\n const handleReject = () => {\n lineItemInventoryItem.status = ShipmentLineItemStatus.REJECTED;\n handleSave(true);\n };\n\n const getLocationAvatarClassname = (location) => {\n if (\n location.level === lineItemInventoryItem.inventoryItem.location.level &&\n location.position ===\n lineItemInventoryItem.inventoryItem.location.position\n )\n return classes.locationToPickAvatar;\n return classes.locationAvatar;\n };\n\n const getRailCar = (currentShipment) => {\n debugger;\n\n // rail to truck : cement / steel\n // inbound: [ rail, tracks, trackId ]\n // outbound: [ truck, tracks, no trackId ]\n // truck to rail : kitchen grease\n // inbound: [ truck, tracks, no trackId ]\n // outbound: [ rail, tracks, trackId ]\n\n // current inbound or outbound has trackId\n if (currentShipment.trackId) return currentShipment;\n\n // else rail-to-truck, picking from rail-based inbound\n return { id: currentLineItem.inventory.inboundShipmentId };\n };\n\n const getTrackLocationView = () => {\n return (\n <>\n <Grid item xs={12}>\n <Box>\n <Divider />\n </Box>\n </Grid>\n <TrackLocation\n readonly={true}\n stopLoadingFn={() => dispatch({ type: \"SET_LOADING\", payload: true })}\n currentShipment={getRailCar(currentShipment)}\n currentLineItem={currentLineItem}\n selectedInventoryItem={lineItemInventoryItem.inventoryItem}\n isValidated={isCarValidated}\n setIsValidated={() =>\n dispatch({ type: \"SET_CAR_VALIDATED\", payload: true })\n }\n />\n </>\n );\n };\n\n const getUnstructuredLocationView = () => {\n return (\n <>\n <Grid item xs={12}>\n <Box>\n <Divider />\n </Box>\n </Grid>\n <Grid item xs={12}>\n <Typography>\n {\" \"}\n Location: {\n lineItemInventoryItem.inventoryItem.locationFullName\n }{\" \"}\n </Typography>\n </Grid>\n </>\n );\n };\n\n const getBullLocationView = () => {\n return (\n bayList.length > 0 && (\n <div style={{ width: \"100%\" }}>\n <Grid item container spacing={2}>\n <Grid item xs={12} md={6}>\n <Typography component=\"span\">{`Area: ${lineItemInventoryItem.inventoryItem.location.area?.name}`}</Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Box display=\"flex\" alignItems=\"center\">\n <Typography component=\"span\">Zone:</Typography>\n <FiberManualRecordIcon\n style={{\n marginLeft: 2,\n color:\n lineItemInventoryItem.inventoryItem.location.zone?.color,\n }}\n />\n <Typography component=\"span\">\n {lineItemInventoryItem.inventoryItem.location.zone?.name}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={6} md={6}>\n <Typography>{`Aisle: ${lineItemInventoryItem.inventoryItem.location.aisle.name}`}</Typography>\n </Grid>\n <Grid item xs={12}>\n <Divider />\n </Grid>\n {\n <Grid item xs={12}>\n <Box mt={2} display=\"flex\" justifyContent=\"center\">\n <div className={classes.bayContainer}>\n <div className={classes.levelContainer}>\n <Grid container spacing={1}>\n {bayList.map((location) => (\n <Grid id={location.id} item>\n <div\n key={location.id}\n className={getLocationAvatarClassname(location)}\n >\n <Typography variant=\"body2\">\n {getLocationViewName(location)}\n </Typography>\n <Typography variant=\"body2\">\n {\" \"}\n {location.id ===\n lineItemInventoryItem.inventoryItem.location\n .id &&\n getInventoryPrimaryField(\n currentShipment.account,\n currentLineItem.inventory,\n lineItemInventoryItem\n )?.value}\n </Typography>\n </div>\n </Grid>\n ))}\n </Grid>\n </div>\n </div>\n </Box>\n </Grid>\n }\n </Grid>\n <Grid item xs={12}>\n <Typography\n variant=\"body2\"\n style={{\n marginTop: 8,\n display: \"flex\",\n justifyContent: \"center\",\n }}\n >\n {lineItemInventoryItem.inventoryItem.locationFullName}\n </Typography>\n </Grid>\n </div>\n )\n );\n };\n\n const getLocationView = () => {\n if (!lineItemInventoryItem) return null;\n const location = lineItemInventoryItem.inventoryItem.location;\n\n if (isTrack(location.area)) return getTrackLocationView();\n if (location.type === LocationType.UNSTRUCTURED)\n return getUnstructuredLocationView();\n if (location.type === LocationType.BULK) return getBullLocationView();\n\n const getCellSize = (list) => 12 / list.length;\n const bayIdx = location.bay - 1;\n const bay = bayList[bayIdx];\n const isFlat = !bay || (bay.length === 1 && bay[0].length === 1);\n\n return (\n <div style={{ width: \"100%\" }}>\n <Grid item container spacing={2}>\n <Grid item xs={12}>\n <Divider />\n </Grid>\n <Grid item xs={12} md={4}>\n <Typography component=\"span\">{`Area: ${lineItemInventoryItem.inventoryItem.location.area?.name}`}</Typography>\n </Grid>\n {isMedium && (\n <Grid item xs={12}>\n {\" \"}\n <Divider />\n </Grid>\n )}\n <Grid item xs={12} md={4}>\n <Box display=\"flex\" alignItems=\"center\">\n <Typography component=\"span\">Zone:</Typography>\n <FiberManualRecordIcon\n style={{\n marginLeft: 2,\n color:\n lineItemInventoryItem.inventoryItem.location.zone?.color,\n }}\n />\n <Typography component=\"span\">\n {lineItemInventoryItem.inventoryItem.location.zone?.name}\n </Typography>\n </Box>\n </Grid>\n {isMedium && (\n <Grid item xs={12}>\n {\" \"}\n <Divider />\n </Grid>\n )}\n <Grid item xs={6} md={4}>\n <Typography>{`Aisle: ${lineItemInventoryItem.inventoryItem.location.aisle.name}`}</Typography>\n </Grid>\n\n {!isMedium && (\n <Grid item xs={12}>\n {\" \"}\n <Divider />\n </Grid>\n )}\n <Grid item xs={6} md={4}>\n <Typography>\n {\" \"}\n {`Bay: ${lineItemInventoryItem.inventoryItem.location.bay}`}\n </Typography>\n </Grid>\n {isMedium && (\n <Grid item xs={12}>\n {\" \"}\n <Divider />\n </Grid>\n )}\n <Grid item xs={6} md={4}>\n <Typography>{`Position: ${lineItemInventoryItem.inventoryItem.location.position}`}</Typography>\n </Grid>\n <Grid item xs={6} md={4}>\n <Typography>{`Level: ${lineItemInventoryItem.inventoryItem.location.level}`}</Typography>\n </Grid>\n <Grid item xs={12}>\n {\" \"}\n <Divider />\n </Grid>\n {!isFlat && (\n <Grid item xs={12}>\n <div className={classes.location}>\n <div className={classes.bayContainer}>\n <Box m={1}>\n <Typography>{`Bay ${\n (bayIdx + 1 < 10 ? \" 0\" : \" \") + (bayIdx + 1)\n }`}</Typography>\n </Box>\n <Divider className={classes.divider} />\n {bay.map((level, idx) => (\n <div key={idx} className={classes.levelContainer}>\n <Grid container spacing={1}>\n {level.map((location) => {\n return (\n <Grid id={location.id} item xs={getCellSize(level)}>\n <div\n key={location.id}\n className={getLocationAvatarClassname(location)}\n >\n <Typography variant=\"body2\">\n {getLocationViewName(location)}\n </Typography>\n <Typography variant=\"body2\">\n {\" \"}\n {location.id ===\n lineItemInventoryItem.inventoryItem.location\n .id &&\n getInventoryPrimaryField(\n currentShipment.account,\n currentLineItem.inventory,\n lineItemInventoryItem\n )?.value}\n </Typography>\n </div>\n </Grid>\n );\n })}\n </Grid>\n </div>\n ))}\n </div>\n </div>\n </Grid>\n )}\n </Grid>\n <Grid item xs={12}>\n <Typography\n variant=\"body2\"\n style={{ marginTop: 8, display: \"flex\", justifyContent: \"center\" }}\n >\n {lineItemInventoryItem.inventoryItem.locationFullName}\n </Typography>\n </Grid>\n </div>\n );\n };\n\n const handleManagerCancelClick = () => {\n debugger;\n if (lineItemInventoryItem.status === ShipmentLineItemStatus.PENDING)\n handleCancel();\n else handleReject();\n };\n\n const getCardActions = () => {\n if (!isAuthorized(AclType.OUTBOUND_VERIFY)) {\n return [\n <Button\n color=\"primary\"\n size=\"large\"\n disabled={\n lineItemInventoryItem?.status === ShipmentLineItemStatus.LOADED\n }\n onClick={() => handleSave(false, true)}\n >\n Mark Loaded\n </Button>,\n <Button onClick={handleCancel} size=\"large\">\n Cancel\n </Button>,\n ];\n } else {\n return [\n <Button\n size=\"large\"\n disabled={\n lineItemInventoryItem?.status === ShipmentLineItemStatus.REJECTED\n }\n onClick={handleManagerCancelClick}\n >\n {lineItemInventoryItem?.status === ShipmentLineItemStatus.PENDING\n ? \"Cancel\"\n : \"Reject\"}\n </Button>,\n <Button\n color=\"primary\"\n size=\"large\"\n disabled={isSaveButtonDisabled()}\n onClick={() =>\n handleSave(\n false,\n lineItemInventoryItem.status !== ShipmentLineItemStatus.REJECTED\n )\n }\n >\n {lineItemInventoryItem?.status === ShipmentLineItemStatus.PENDING\n ? \"Mark Loaded\"\n : lineItemInventoryItem?.status === ShipmentLineItemStatus.REJECTED\n ? \"Mark Loaded\"\n : \"Approve\"}\n </Button>,\n ];\n }\n };\n\n const isSealValidationRequired = () => {\n return (\n inboundShipment?.sealNumbers?.length > 0 &&\n (currentLineItem?.inventory.account?.trackInboundSeals ||\n currentLineItem?.inventory.account?.trackInventorySeals)\n );\n };\n\n if (invalidIdError) return <ErrorCard error={invalidIdError} />;\n\n return (\n <div ref={imgRef}>\n <CrewCard\n title={currentLineItem?.inventory.productName}\n icon={<CheckBoxOutlineBlankOutlinedIcon fontSize=\"large\" />}\n subheader={\n currentLineItem?.inventory.accountName +\n \" - \" +\n currentLineItem?.inventory.lotNumber\n }\n action={[\n // <IconButton\n // edge=\"start\"\n // onClick={handleCancel}\n // >\n // <HelpOutlineOutlinedIcon fontSize=\"large\" />\n // </IconButton>,\n <IconButton edge=\"start\" onClick={handleCancel}>\n <HighlightOffIcon fontSize=\"large\" />\n </IconButton>,\n ]}\n showDivider={false}\n >\n <CardContent>\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Grid container spacing={2}>\n <Grid item sm={12} xs={12}>\n {currentLineItem?.inventory.photos?.length > 0 && (\n <InventoryPhotos\n id={currentLineItem?.inventory.id}\n maxSize={2}\n photos={\n currentLineItem?.inventory.photos\n ? currentLineItem?.inventory.photos\n : []\n }\n selectedIdx={0}\n hideActions={true}\n imgRef={imgRef}\n />\n )}\n </Grid>\n <Grid item sm={6} xs={12}>\n <Typography>\n {`Quantity: ${\n lineItemInventoryItem?.quantityToPick || \"\"\n } ${getUnitName(currentShipment?.totalUnits)}`}\n </Typography>\n </Grid>\n {showWeight(\n currentShipment.account,\n currentLineItem?.inventory\n ) && (\n <Grid item sm={6} xs={12}>\n <Typography>\n {`Weight: ${currentLineItem?.inventory.weight} ${currentLineItem?.inventory.weightUnits}/${currentLineItem?.inventory.inventoryUnits}`}\n </Typography>\n </Grid>\n )}\n {currentLineItem?.inventory.poNumber && (\n <Grid item sm={6} xs={12}>\n <Typography>\n {`PO Number: ${currentLineItem?.inventory.poNumber}`}\n </Typography>\n </Grid>\n )}\n {currentLineItem?.inventory.lotNumber && (\n <Grid item sm={6} xs={12}>\n <Typography>\n {`Lot Number: ${currentLineItem?.inventory.lotNumber}`}\n </Typography>\n </Grid>\n )}\n {currentLineItem?.inventory.productCode && (\n <Grid item sm={6} xs={12}>\n <Typography>\n {`Product code: ${currentLineItem?.inventory.productCode}`}\n </Typography>\n </Grid>\n )}\n {currentShipment.trackId && (\n <Grid item sm={6} xs={12}>\n <Typography>\n {`Location: ${getLocationFullName(currentShipment.location)}`}\n </Typography>\n </Grid>\n )}\n {currentLineItem?.inventory.customFields && (\n <Grid item xs={12}>\n <CustomFieldsMobile\n recordFields={currentLineItem?.inventory.customFields}\n accountFields={currentShipment.account?.inventoryCustomFields}\n width={6}\n />\n </Grid>\n )}\n <Grid container spacing={2}>\n <Grid item lg={1} md={6} xs={12}>\n <Button\n fullWidth\n variant=\"contained\"\n className={classes.iconButton}\n disabled={isBarcodeScanned && isHasException}\n onClick={handleScanButtonClick}\n startIcon={<ScannerIcon />}\n >\n Scan\n </Button>\n </Grid>\n {expectedBarcode !== null && !isValidBarcode && (\n <Grid item lg={2} md={6} xs={12}>\n <TextField\n ref={chooseBarcodeDamage}\n id=\"damage\"\n label=\"Scan Exception\"\n variant=\"outlined\"\n select\n size=\"small\"\n fullWidth\n error={\n isBarcodeScanned &&\n !barcodeExceptionNote &&\n isHasException\n }\n helperText={\n isBarcodeScanned &&\n !barcodeExceptionNote &&\n isHasException &&\n \"Choose Exception Option\"\n }\n value={barcodeExceptionNote}\n onChange={onExceptionChoiceChange}\n >\n {exceptionInputChoices.map((itm) => (\n <MenuItem\n selected={itm.value === barcodeExceptionNote}\n key={itm.id}\n value={itm.value}\n >\n {itm.name}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n )}\n </Grid>\n <BarcodeScanDialog\n open={scanDialogOpen}\n onClose={handleScanClose}\n onSave={handleScanBarcode}\n actionButtonText={barcode?.trim() ? \"Scan\" : \"Skip Scanning\"}\n disabled={false}\n barcode={barcode}\n setBarcode={setBarcode}\n />\n {exceptionDialogOpen && (\n <Confirm\n isOpen={exceptionDialogOpen}\n title=\"Barcode Exception\"\n content={\n barcode?.trim() !== \"\" ? (\n <>\n The scanned barcode: <b>\"{barcode}\"</b> does not match our\n records.\n <br />\n Click PROCEED to log this as an exception. CANCEL to try\n again.\n </>\n ) : (\n <>\n No barcode was scanned. Click PROCEED to log this as an\n exception. CANCEL to try again.\n </>\n )\n }\n onConfirm={() => handleCreateException()}\n onClose={handleExceptionDialogClose}\n />\n )}\n {isSealValidationRequired() && (\n <Grid item xs={12}>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n disabled={!isCarValidated}\n onClick={() => setScanSealOpen(true)}\n >\n {isValidating ? \"Validate Seals\" : \"Manage Seals\"}\n </Button>\n </Grid>\n )}\n {scanSealOpen && (\n <ScanSealsDialog\n setBreakSealOpen={setBreakSealOpen}\n setApplySealOpen={setApplySealOpen}\n setDeactivatedSeal={setDeactivatedSeal}\n onClose={closeScanSealsDialog}\n revalidateSeal={revalidateSeal}\n inboundShipment={inboundShipment}\n dispatch={dispatch}\n loading={loading}\n />\n )}\n {breakSealOpen && (\n <BreakSealsDialog\n onClose={closeBreakSealsDialog}\n inboundShipment={inboundShipment}\n dispatch={dispatch}\n loading={loading}\n breakSealRequest={breakSeal}\n />\n )}\n {applySealOpen && (\n <ApplySealsDialog\n onClose={closeApplySealsDialog}\n saveSeal={createNewSeal}\n deActivateSeal={deActivateSeal}\n seal={deactivatedSeal}\n inboundShipment={inboundShipment}\n dispatch={dispatch}\n loading={loading}\n />\n )}\n <Grid item xs={12}>\n {getLocationView()}\n </Grid>\n {lineItemInventoryItem?.inventoryItem.location.aisle.type ===\n LocationType.STRUCTURED &&\n isCapacitySliderVisible(\n lineItemInventoryItem?.inventoryItem.location\n ) ? (\n <Grid item xs={12}>\n <StructuredLocationCapacity\n location={lineItemInventoryItem?.inventoryItem.location}\n />\n </Grid>\n ) : (\n isCapacitySliderVisible(\n lineItemInventoryItem?.inventoryItem.location\n ) && (\n <Grid item xs={12}>\n <Box ml={2} mt={-1}>\n <LocationCapacity\n aisle={\n lineItemInventoryItem?.inventoryItem.location.aisle\n }\n />\n </Box>\n </Grid>\n )\n )}\n <Grid item sm={12} xs={12}>\n <TextField\n name=\"notes\"\n id=\"notes\"\n label=\"Notes\"\n multiline\n minRows={3}\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n disabled={\n lineItemInventoryItem?.status ===\n ShipmentLineItemStatus.VERIFIED\n }\n onChange={(evt) => setNote(evt.target.value)}\n />\n </Grid>\n {/* <BottomContainers inventory={currentLineItem.inventory} /> */}\n </Grid>\n </CardContent>\n <CardActions className={classes.actions}>\n {getCardActions()}\n </CardActions>\n </CrewCard>\n </div>\n );\n};\n\nexport default InventoryItemCard;\n","import React, { useState, useRef } from \"react\";\nimport {\n Box,\n Button,\n Typography,\n Dialog,\n DialogActions,\n DialogContent,\n TextField,\n Grid,\n CircularProgress,\n} from \"@material-ui/core\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport { QrBarcodeScanner } from \"../../../../components/common/QrBarcodeScanner/QrBarcodeScanner\";\nimport { beep } from \"../../../../utils/utils\";\nimport { logError } from \"../../../../utils/appUtils\";\nimport { useNotify } from \"react-admin\";\n\nexport const SealsCreate = ({ cancel, saveSeal, saving, addedSeals }) => {\n const [isScannerOpen, setIsScannerOpen] = useState(true);\n const [sealBarCode, setSealBarCode] = useState(\"\");\n const [notes, setNotes] = useState(\"\");\n const [sealError, setSealError] = useState(\"\");\n const [isScanned, setIsScanned] = useState(false);\n const [alreadyAddedDialogOpen, setAlreadyAddedDialogOpen] = useState(false);\n const [notInSealsNumberDialogOpen, setNotInSealsNumberDialogOpen] =\n useState(false);\n const notify = useNotify();\n const ref = useRef();\n\n const save = async () => {\n try {\n if (!sealBarCode) {\n setSealError(\"Required\");\n return;\n }\n\n if (addedSeals?.includes(sealBarCode)) {\n setAlreadyAddedDialogOpen(true);\n return;\n }\n\n await saveSeal({ sealBarCode, notes, validated: true, isScanned });\n cancel();\n } catch (error) {\n logError(\"OutboundShipments:Seals:SealsCreate:save\", error, notify);\n }\n };\n\n const handleScanSuccess = (barcode) => {\n debugger;\n if (barcode !== ref.current.value) {\n beep(100, 520, 200);\n }\n setSealBarCode(barcode);\n setIsScannerOpen(false);\n setIsScanned(true);\n };\n\n const handleAlreadyAddedDialogClose = () => {\n setAlreadyAddedDialogOpen(false);\n setIsScanned(false);\n setSealBarCode(\"\");\n };\n\n const handleNotInSealsNumberDialogClose = () => {\n setNotInSealsNumberDialogOpen(false);\n setIsScanned(false);\n setSealBarCode(\"\");\n };\n\n const handleSaveAnyway = async () => {\n await saveSeal({\n sealBarCode,\n notes,\n validated: false,\n scanned: isScanned,\n });\n handleNotInSealsNumberDialogClose();\n cancel();\n };\n\n const onBarcodeInputChange = (e) => {\n if (e.target.value) {\n setSealError(\"\");\n } else {\n setSealError(\"Required\");\n }\n setSealBarCode(e.target.value);\n setIsScanned(false);\n };\n\n return (\n <>\n <Dialog open={true} fullWidth={true}>\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">Create a Seal</Typography>\n <CancelOutlinedIcon fontSize=\"large\" onClick={cancel} />\n </Box>\n\n <DialogContent>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n {isScannerOpen ? (\n <QrBarcodeScanner onScanSuccess={handleScanSuccess} />\n ) : (\n <Box display=\"flex\" justifyContent=\"center\">\n <Button\n disabled={saving}\n onClick={() => setIsScannerOpen(true)}\n color=\"primary\"\n variant=\"outlined\"\n margin=\"dense\"\n >\n Rescan\n </Button>\n </Box>\n )}\n </Grid>\n <Grid item xs={12}>\n <TextField\n label=\"Seal Barcode\"\n variant=\"outlined\"\n fullWidth\n margin=\"dense\"\n value={sealBarCode}\n onChange={onBarcodeInputChange}\n error={!!sealError}\n helperText={sealError}\n disabled={isScanned}\n inputRef={ref}\n />\n </Grid>\n <Grid item xs={12}>\n <TextField\n label=\"Note\"\n variant=\"outlined\"\n fullWidth\n margin=\"dense\"\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n />\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={cancel} disabled={saving}>\n Cancel\n </Button>\n <Button onClick={save} color=\"primary\" disabled={saving}>\n {saving ? <CircularProgress size={24} /> : \"Save\"}\n </Button>\n </DialogActions>\n </Dialog>\n\n <Dialog\n open={alreadyAddedDialogOpen}\n onClose={handleAlreadyAddedDialogClose}\n >\n <DialogContent>\n <Typography>\n This seal is already added in the inbound shipment. Do you want to\n scan again?\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleAlreadyAddedDialogClose} color=\"primary\">\n Ok\n </Button>\n </DialogActions>\n </Dialog>\n\n <Dialog\n open={notInSealsNumberDialogOpen}\n onClose={handleNotInSealsNumberDialogClose}\n >\n <DialogContent>\n <Typography>\n This seal number does not match our records, do you want to save it\n anyways?\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleNotInSealsNumberDialogClose} disabled={saving}>\n Cancel\n </Button>\n <Button onClick={handleSaveAnyway} color=\"primary\" disabled={saving}>\n Save Anyway\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n","import React, { useState, useEffect } from \"react\";\nimport {\n Box,\n Button,\n List,\n ListItem,\n ListItemText,\n Typography,\n Dialog,\n DialogActions,\n DialogContent,\n CircularProgress,\n ListItemAvatar,\n Avatar,\n ListItemSecondaryAction,\n IconButton,\n Divider,\n Grid,\n} from \"@material-ui/core\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { CheckIcon, XIcon, DeleteIcon } from \"./../../../../components/common\";\nimport { green, red } from \"@material-ui/core/colors\";\nimport clsx from \"clsx\";\n\nconst useStyles = makeStyles((theme) => ({\n iconContainer: {\n height: 38,\n width: 38,\n },\n valid: {\n backgroundColor: green[300],\n },\n inValid: {\n backgroundColor: red[300],\n },\n container: {\n padding: theme.spacing(2),\n },\n deleteButton: {\n color: theme.palette.error.main,\n },\n primaryColor: {\n color: theme.palette.primary.main,\n },\n}));\n\nconst ConfirmDialog = ({ open, onClose, onConfirm, saving, barcode }) => {\n const styles = useStyles();\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogContent>\n <Typography>\n Are you sure you want to delete the seal with barcode{\" \"}\n <span className={styles.primaryColor}>{barcode}</span> ?\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={saving}>\n Cancel\n </Button>\n <Button\n onClick={onConfirm}\n className={styles.deleteButton}\n disabled={saving}\n >\n {saving ? <CircularProgress size={24} /> : \"Delete\"}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport const SealsList = ({\n close,\n handleDelete,\n onPressAddSeal,\n saving,\n sealsList,\n}) => {\n const styles = useStyles();\n const [confirmDialogOpen, setConfirmDialogOpen] = useState(false);\n const [selectedSeal, setSelectedSeal] = useState(null);\n\n useEffect(() => {\n if (!saving) {\n setConfirmDialogOpen(false);\n }\n }, [saving]);\n\n const onDeleteSeal = (seal) => {\n setSelectedSeal(seal);\n setConfirmDialogOpen(true);\n };\n\n const handleConfirmDelete = () => {\n handleDelete(selectedSeal.id);\n };\n\n const handleCancelDelete = () => {\n setSelectedSeal(null);\n setConfirmDialogOpen(false);\n };\n\n const getAvatarClass = (validated) => {\n return clsx(styles.iconContainer, {\n [styles.valid]: validated,\n [styles.inValid]: !validated,\n });\n };\n\n const getListItem = (id, validated, barcode, description, idx) => {\n return (\n <div key={id}>\n <ListItem>\n <ListItemAvatar>\n <Avatar className={getAvatarClass(validated)}>\n {validated ? <CheckIcon fontSize=\"small\" /> : <XIcon />}\n </Avatar>\n </ListItemAvatar>\n <ListItemText primary={barcode} secondary={description} />\n <ListItemSecondaryAction>\n <IconButton onClick={() => onDeleteSeal({ id, barcode })}>\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n {idx < sealsList.length - 1 ? <Divider /> : null}\n </div>\n );\n };\n\n return (\n <>\n <Dialog open={true} fullWidth={true}>\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">Create a Seal</Typography>\n <CancelOutlinedIcon fontSize=\"large\" onClick={close} />\n </Box>\n <DialogContent className={styles.container}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <List>\n {sealsList.map(({ id, validated, barcode, description }, idx) =>\n getListItem(id, validated, barcode, description, idx)\n )}\n </List>\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={close} disabled={saving}>\n Close\n </Button>\n <Button color=\"primary\" onClick={onPressAddSeal} disabled={saving}>\n Add Seal\n </Button>\n </DialogActions>\n </Dialog>\n <ConfirmDialog\n open={confirmDialogOpen}\n onClose={handleCancelDelete}\n onConfirm={handleConfirmDelete}\n saving={saving}\n barcode={selectedSeal?.barcode}\n />\n </>\n );\n};\n","import React, { useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { useNotify } from \"react-admin\";\n\nimport { useOutboundContext } from \"./../context\";\nimport { logError } from \"../../../../utils/appUtils\";\nimport { createSeal, deleteSeal } from \"../../../../graphql/mutations\";\nimport { SealsCreate } from \"./SealsCreate\";\nimport { SealsList } from \"./SealsList\";\n\nconst saveSeal = async ({\n currentShipment,\n sealBarCode,\n notes,\n createdBy,\n isScanned,\n}) => {\n debugger;\n const sealInput = {\n barcode: sealBarCode,\n description: notes,\n referenceId: currentShipment.id,\n owner: currentShipment.owner,\n groups: window.appUser.groups,\n reloadYardId: currentShipment.reloadYardId,\n accountId: currentShipment.accountId,\n accountName: currentShipment.accountName,\n referenceName: \"OutboundShipment\",\n validated: true,\n active: true,\n isScanned: !!isScanned,\n createdBy,\n };\n const result = await API.graphql(\n graphqlOperation(createSeal, { input: sealInput })\n );\n return result.data.createSeal;\n};\n\nconst deleteSealById = async (sealId) => {\n const deleteInput = {\n id: sealId,\n };\n\n const result = await API.graphql(\n graphqlOperation(deleteSeal, { input: deleteInput })\n );\n return result.data.deleteSeal;\n};\n\nconst modes = [\"list\", \"create\"];\n\nexport const SealDialog = ({ setIsSealDialogOpen, saveShipment }) => {\n const { state } = useOutboundContext();\n const { currentShipment } = state;\n const [saving, setSaving] = useState(false);\n const [mode, setMode] = useState(modes[0]);\n\n const seals = currentShipment.seals?.items || [];\n const sealsBarCodes = seals.map((seal) => seal.barcode);\n const createdBy = window.appUser.fullName;\n const notify = useNotify();\n\n const goToAddNewSeal = () => setMode(modes[1]);\n const goToSealsList = () => setMode(modes[0]);\n const close = () => setIsSealDialogOpen(false);\n\n const handleSave = async ({ notes, sealBarCode, validated }) => {\n setSaving(true);\n try {\n await saveSeal({\n currentShipment,\n sealBarCode,\n notes,\n createdBy,\n validated,\n });\n const newHistory = {\n date: new Date().toISOString(),\n by: createdBy,\n type: \"SEAL_ADDED\",\n text: `Seal added with barcode ${sealBarCode}`,\n };\n const updatedHistory = currentShipment.history\n ? [...currentShipment.history, newHistory]\n : [newHistory];\n const shipmentToUpdate = {\n id: currentShipment.id,\n history: updatedHistory,\n };\n await saveShipment(shipmentToUpdate);\n } catch (error) {\n logError(\"OutboundShipments:Seals:SealDialog:handleSave\", error, notify);\n } finally {\n setSaving(false);\n }\n };\n\n const handleDelete = async (sealId) => {\n setSaving(true);\n try {\n await deleteSealById(sealId);\n const { barcode } = currentShipment.seals.items.find(\n (seal) => seal.id === sealId\n );\n const newHistory = {\n date: new Date().toISOString(),\n by: createdBy,\n type: \"SEAL_DELETED\",\n text: `Seal deleted with barcode ${barcode}`,\n };\n const updatedHistory = currentShipment.history\n ? [...currentShipment.history, newHistory]\n : [newHistory];\n const shipmentToUpdate = {\n id: currentShipment.id,\n history: updatedHistory,\n };\n await saveShipment(shipmentToUpdate);\n } catch (error) {\n logError(\n \"OutboundShipments:Seals:SealDialog:handleDelete\",\n error,\n notify\n );\n } finally {\n setSaving(false);\n }\n };\n\n if (mode === modes[1]) {\n debugger;\n return (\n <SealsCreate\n cancel={goToSealsList}\n saving={saving}\n saveSeal={handleSave}\n addedSeals={sealsBarCodes}\n />\n );\n }\n\n return (\n <SealsList\n handleDelete={handleDelete}\n close={close}\n saving={saving}\n sealsList={seals}\n onPressAddSeal={goToAddNewSeal}\n />\n );\n};\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { Route, Link } from \"react-router-dom\";\nimport { API, graphqlOperation, Storage } from \"aws-amplify\";\nimport { getOutboundShipmentMobile } from \"../../../graphql/outbound/custom-queries\";\nimport {\n updateOutboundShipment,\n updateShipmentLineItemMini,\n} from \"../../../graphql/outbound/custom-mutations\";\nimport { useNotify, useRedirect } from \"react-admin\";\nimport {\n TextField,\n CardActions,\n Typography,\n Button,\n Grid,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n Avatar,\n ListItemSecondaryAction,\n IconButton,\n Divider,\n Dialog,\n DialogContent,\n DialogTitle,\n DialogContentText,\n DialogActions,\n CircularProgress,\n useMediaQuery,\n FormControlLabel,\n Switch,\n Box,\n Backdrop,\n CardContent,\n} from \"@material-ui/core\";\nimport HighlightOffIcon from \"@material-ui/icons/HighlightOff\";\nimport KeyboardArrowRightIcon from \"@material-ui/icons/KeyboardArrowRight\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport CheckIcon from \"@material-ui/icons/Check\";\nimport ClearIcon from \"@material-ui/icons/Clear\";\nimport DoneIcon from \"@material-ui/icons/Done\";\nimport DoubleCheckIcon from \"@material-ui/icons/DoneAll\";\nimport CloseOutlinedIcon from \"@material-ui/icons/CloseOutlined\";\nimport { ScannerIcon, TrainIcon, TruckIcon } from \"../../../components/common\";\nimport SignaturePad from \"react-signature-pad-wrapper\";\nimport {\n CarrierType,\n NoteType,\n OutboundStatus,\n OutboundState,\n ShipmentLineItemStatus,\n UserType,\n MAX_PHOTO_NUM_OUTBOUND,\n AclType,\n} from \"../../../utils/constants\";\nimport { useOutboundContext } from \"./context\";\nimport InventoryItemCard from \"./ShipmentItem\";\nimport ErrorCard from \"../../../components/ErrorCard\";\nimport { base64ToBlob, handleModelPhotos } from \"../../../utils/fileUtils\";\nimport { getUnitName } from \"../../../utils/loadTypeUtils\";\nimport {\n defaultNumberFormat,\n getInventoryPrimaryField,\n getLogState,\n} from \"../../../utils/utils\";\nimport { isAuthorized, logError } from \"../../../utils/appUtils\";\nimport InventoryPhotos from \"../../../components/common/InventoryPhotos\";\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport { CustomFieldsMobile } from \"../../../components/common/CustomFields\";\nimport useStickyState from \"../../../utils/stickyState\";\nimport { sortShipmentItemByLocation } from \"../../../utils/locationUtils\";\nimport { ChecklistDialog } from \"../../../components/common/ChecklistDialog\";\nimport { SealDialog } from \"./Seals/SealsDialog\";\n\nconst ProcessOutboundShipmentCard = ({ classes, match, history }) => {\n return (\n <>\n {\n <Route\n path={`${match.path}/inventories/:id`}\n render={(props) => <InventoryItemCard {...props} />}\n />\n }\n {\n <Route\n path={`${match.path}`}\n exact\n render={(props) => (\n <OutboundShipmentCard\n classes={classes}\n history={history}\n {...props}\n />\n )}\n />\n }\n </>\n );\n};\n\nexport default ProcessOutboundShipmentCard;\n\nfunction OutboundShipmentCard({ classes, match, history }) {\n const { state, dispatch } = useOutboundContext();\n const { currentShipment, outboundShipments, inventoryItems, notes, loading } =\n state;\n const notify = useNotify();\n const redirect = useRedirect();\n const imgRef = useRef();\n const [invalidIdError, setInvalidIdError] = useState();\n const isComponentMounted = useRef(true);\n const [signatureType, setSignatureType] = useState();\n const [open, setOpen] = useState(false);\n const [isChecklistDialogOpen, setIsChecklistDialogOpen] = useState(false);\n const [carrierSignatureImg, setCarrierSignatureImg] = useState();\n const [yardSignatureImg, setYardSignatureImg] = useState();\n const [photosErrorMsg, setPhotosErrorMsg] = useState(\"\");\n const [sigPad, setSigPad] = useState({});\n const [invalidSigMsg, setInvalidSigMsg] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const [isSealDialogOpen, setIsSealDialogOpen] = useState(false);\n const [isSealsConfirmationOpen, setIsSealsConfirmationOpen] = useState(false);\n\n const note = notes[currentShipment.id];\n\n useEffect(() => {\n getData();\n\n return () => {\n dispatch({ type: \"CLEAR_INVENTORY\" });\n };\n }, []);\n\n const getData = async () => {\n try {\n debugger;\n dispatch({ type: \"SET_LOADING\", payload: true });\n const response = await API.graphql(\n graphqlOperation(getOutboundShipmentMobile, {\n id: match.params.id,\n })\n );\n\n if (!response.data.getOutboundShipment) {\n setInvalidIdError(`Outbound shipment was not found.`);\n } else {\n const outboundShipment = response.data.getOutboundShipment;\n if (outboundShipment.status === OutboundStatus.RELEASED) {\n notify(`Outbound shipment was released.`, \"warning\");\n goToOutbound();\n }\n const inventoryItems = [];\n outboundShipment.shipmentLineItems.items.forEach((lineItem) => {\n lineItem.inventoryItems.items.forEach((inventoryItem) => {\n inventoryItem.inventory = lineItem.inventory;\n inventoryItems.push(inventoryItem);\n });\n });\n sortShipmentItemByLocation(inventoryItems, true);\n dispatch({\n type: \"SET_CURRENT_SHIPPMENT\",\n payload: { outboundShipment, inventoryItems },\n });\n debugger;\n }\n } catch (err) {\n logError(\"ProcessOutboundShipmentCard:getData\", err, notify);\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n };\n\n // const sortLineItems = (inventoryItems) => {\n // inventoryItems.sort((itemA, itemB) => {\n // const a = itemA.inventoryItem.location;\n // const isAStructured = a.type === LocationType.STRUCTURED;\n // const b = itemB.inventoryItem.location;\n // const isBStructured = b.type === LocationType.STRUCTURED;\n\n // if (isAStructured && isBStructured && a.aisle.topDownPickOrder && b.aisle.topDownPickOrder\n // && a.aisle.id === b.aisle.id && a.bay === b.bay) {\n // return (a.position * 1000 - a.level) - (b.position * 1000 - b.level);\n // }\n // const locationA = \"\" + 10 + a.area.sortKey + a.aisle.sortKey + (a.bay ? a.bay + 100 : 100) +\n // (a.position ? a.position + 100 : 100) + (a.level ? a.level + 10 : 10);\n // const locationB = \"\" + 10 + b.area.sortKey + b.aisle.sortKey + (b.bay ? b.bay + 100 : 100) +\n // (b.position ? b.position + 100 : 100) + (b.level ? b.level + 10 : 10);\n // return locationA.localeCompare(locationB);\n // });\n // }\n\n useEffect(() => {\n if (isComponentMounted && currentShipment.carrierSignatureKey)\n getSignature(currentShipment.carrierSignatureKey, setCarrierSignatureImg);\n\n return () => (isComponentMounted.current = false);\n }, [currentShipment.carrierSignatureKey]);\n\n useEffect(() => {\n if (isComponentMounted && currentShipment.yardSignatureKey)\n getSignature(currentShipment.yardSignatureKey, setYardSignatureImg);\n return () => (isComponentMounted.current = false);\n }, [currentShipment.yardSignatureKey]);\n\n const getSignature = async (key, fn) => {\n if (!key) return;\n try {\n let data = await Storage.get(key, { download: true });\n processS3Sig(data.Body, fn);\n debugger;\n } catch (err) {\n logError(\"OutboundShipmentCard::getSignature\", err, notify);\n }\n };\n\n const processS3Sig = (blob, fn) => {\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onloadend = function () {\n const base64data = reader.result;\n fn(base64data);\n };\n };\n\n const handleShipmentPhotos = async (photos, selectedPhotoIdx) => {\n await handleModelPhotos({\n photos,\n model: currentShipment,\n saveFn: saveShipment,\n maxNumOfPhotos: MAX_PHOTO_NUM_OUTBOUND,\n selectedPhotoIdx,\n notify,\n redirect,\n });\n };\n\n const saveShipment = async (toUpdateShipment) => {\n debugger;\n toUpdateShipment = { ...toUpdateShipment };\n if (!toUpdateShipment.startDateTime) {\n toUpdateShipment.startDateTime = new Date().toISOString();\n }\n\n const promiseList = [];\n toUpdateShipment.shipmentLineItems.items.forEach((shipmentLineItem) => {\n const toUpdateShipmentItem = {\n id: shipmentLineItem.id,\n inventoryId: shipmentLineItem.inventoryId,\n outboundShipmentId: shipmentLineItem.outboundShipmentId,\n sortKey: shipmentLineItem.sortKey,\n };\n if (\n shipmentLineItem.inventoryItems.items.some(\n (itm) => itm.status === ShipmentLineItemStatus.REJECTED\n )\n ) {\n toUpdateShipmentItem.status = ShipmentLineItemStatus.REJECTED;\n } else if (\n shipmentLineItem.inventoryItems.items.every(\n (itm) => itm.status === ShipmentLineItemStatus.LOADED\n )\n ) {\n toUpdateShipmentItem.status = ShipmentLineItemStatus.LOADED;\n } else if (\n shipmentLineItem.inventoryItems.items.every(\n (itm) => itm.status === ShipmentLineItemStatus.VERIFIED\n )\n ) {\n toUpdateShipmentItem.status = ShipmentLineItemStatus.VERIFIED;\n } else {\n toUpdateShipmentItem.status = ShipmentLineItemStatus.PENDING;\n }\n promiseList.push(\n API.graphql(\n graphqlOperation(updateShipmentLineItemMini, {\n input: toUpdateShipmentItem,\n })\n )\n );\n });\n\n delete toUpdateShipment.account;\n delete toUpdateShipment.area;\n delete toUpdateShipment.createdAt;\n delete toUpdateShipment.invoice;\n delete toUpdateShipment.location;\n delete toUpdateShipment.reloadYardCommodity;\n delete toUpdateShipment.seals;\n delete toUpdateShipment.shipmentLineItems;\n delete toUpdateShipment.timeslot;\n delete toUpdateShipment.updatedAt;\n promiseList.splice(\n 0,\n 0,\n API.graphql(\n graphqlOperation(updateOutboundShipment, {\n input: toUpdateShipment,\n })\n )\n );\n const response = await Promise.all(promiseList);\n debugger;\n dispatch({\n type: \"UPDATE_CURRENT_SHIPMENT\",\n payload: response[0].data.updateOutboundShipment,\n });\n return response[0].data.updateOutboundShipment;\n };\n\n const updateShipmentHistory = async (toUpdateShipment) => {\n toUpdateShipment = { ...toUpdateShipment };\n let response = await API.graphql(\n graphqlOperation(updateOutboundShipment, {\n input: toUpdateShipment,\n })\n );\n debugger;\n dispatch({\n type: \"UPDATE_CURRENT_SHIPMENT\",\n payload: response.data.updateOutboundShipment,\n });\n debugger;\n };\n\n const validateForm = () => {\n clearForm();\n let valid = true;\n debugger;\n\n if (currentShipment.status === OutboundStatus.ARRIVED) {\n valid = inventoryItems.reduce(\n (valid, itm) =>\n valid &&\n (itm.status === ShipmentLineItemStatus.LOADED ||\n itm.status === ShipmentLineItemStatus.VERIFIED ||\n itm.status === ShipmentLineItemStatus.REJECTED),\n valid\n );\n if (!valid) {\n notify(\n `Complete all line items before completing the outbound shipment.`,\n \"warning\"\n );\n }\n if (valid && isPickListVerified()) valid = validateSignature();\n } else if (currentShipment.status === OutboundStatus.LOADED) {\n if (!hasRejectedItems()) {\n valid = isPickListVerified();\n if (!valid) {\n notify(\n `Verify all line items before completing the outbound shipment.`,\n \"warning\"\n );\n }\n\n if (valid) valid = validateSignature();\n }\n }\n return valid;\n };\n\n const validateSignature = () => {\n let valid = true;\n if (!currentShipment.skipSignature) {\n if (!carrierSignatureImg || !yardSignatureImg) {\n valid = false;\n notify(`Signatures required.`, \"warning\");\n }\n }\n return valid;\n };\n\n const validatePhotos = (previousStatus, previousState) => {\n let valid = true;\n debugger;\n if (\n currentShipment.status === OutboundStatus.LOADED &&\n currentShipment.account?.outboundPhotos > 0\n ) {\n if (\n !currentShipment.photos ||\n currentShipment.photos.length < currentShipment.account.outboundPhotos\n ) {\n valid = false;\n setPhotosErrorMsg(\n `${currentShipment.account?.outboundPhotos} photos are required to complete this shipment.`\n );\n currentShipment.status = previousStatus;\n currentShipment.state = previousState;\n notify(\n `${currentShipment.account?.outboundPhotos} photos are required to complete this shipment.`,\n \"error\"\n );\n } else {\n setPhotosErrorMsg(\"\");\n }\n }\n return valid;\n };\n\n const clearForm = () => {\n setPhotosErrorMsg(\"\");\n };\n\n const handleSave = async ({ skipSealsValidation }) => {\n try {\n if (\n currentShipment?.account?.trackInboundSeals &&\n currentShipment?.seals?.items.length === 0 &&\n !skipSealsValidation\n ) {\n setIsSealsConfirmationOpen(true);\n return false;\n }\n debugger;\n setSaving(true);\n const previousStatus = currentShipment.status;\n const previousState = currentShipment.state;\n\n if (!validateForm()) return;\n setNextState(currentShipment);\n if (!validatePhotos(previousStatus, previousState)) return;\n if (note) {\n const newNote = {\n date: new Date(),\n type: NoteType.GENERIC,\n by: window.appUser?.fullName,\n text: note,\n };\n if (currentShipment.notes) currentShipment.notes.push(newNote);\n else currentShipment.notes = [newNote];\n }\n if (\n previousStatus !== currentShipment.status ||\n previousState !== currentShipment.state\n ) {\n const newHistory = {\n type: NoteType.SHIPMENT,\n date: new Date(),\n by: window.appUser?.fullName,\n text: `Shipment saved | status: ${\n currentShipment.status\n } ${getLogState(currentShipment.state)}`,\n };\n if (currentShipment.history) currentShipment.history.push(newHistory);\n else currentShipment.history = [newHistory];\n }\n\n const updatedShipment = await saveShipment(currentShipment);\n dispatch({ type: \"CLEAR_NOTE\", payload: updatedShipment });\n\n if (window.appUser.type === UserType.CREW) {\n outboundShipments.filter((itm) => itm.id !== currentShipment.id);\n }\n\n history && goToOutbound();\n } catch (err) {\n logError(\n \"ProcessShipmentsCard:OutboundShipmentCard:handleSave\",\n err,\n notify,\n redirect\n );\n } finally {\n setSaving(false);\n }\n };\n\n const handleSealsConfirmationClose = () => {\n setIsSealsConfirmationOpen(false);\n };\n\n const handleSealsConfirmationConfirm = () => {\n setIsSealsConfirmationOpen(false);\n handleSave({ skipSealsValidation: true });\n };\n\n const goToOutbound = () => {\n dispatch({\n type: \"CLEAR_INVENTORY\",\n payload: {\n currentInventory: {},\n selectedInventoryItem: [],\n },\n });\n history.push(\"/processOutboundShipments\");\n };\n\n const setNextState = (currentShipment) => {\n debugger;\n if (currentShipment.status === OutboundStatus.ARRIVED) {\n if (isPickListVerified()) {\n currentShipment.state = OutboundState.COMPLETED;\n currentShipment.endDateTime = new Date().toISOString();\n }\n currentShipment.status = OutboundStatus.LOADED;\n } else if (currentShipment.status === OutboundStatus.LOADED) {\n if (hasRejectedItems()) {\n currentShipment.endDateTime = null;\n currentShipment.state = OutboundState.REJECTED;\n currentShipment.status = OutboundStatus.ARRIVED;\n } else {\n currentShipment.endDateTime = new Date().toISOString();\n currentShipment.state = OutboundState.COMPLETED;\n currentShipment.status = OutboundStatus.LOADED;\n }\n }\n };\n\n const getSubmitButtonText = () => {\n if (window.appUser.type !== UserType.CREW && hasRejectedItems()) {\n return \"Reject\";\n }\n return \"Complete\";\n };\n\n const isSubmitButtonDisabled = () => {\n if (saving) return true;\n if (currentShipment.state === OutboundState.COMPLETED) return true;\n\n if (inventoryItems?.length === 0) return true;\n return inventoryItems?.some(\n (itm) => itm.status === ShipmentLineItemStatus.PENDING\n );\n };\n\n const isScanSealDisabled = () => {\n if (saving) return true;\n return inventoryItems?.some(\n (itm) => itm.status === ShipmentLineItemStatus.PENDING\n );\n };\n\n const hasRejectedItems = () => {\n let hasRejected = false;\n inventoryItems?.forEach((itm) => {\n if (itm.status === ShipmentLineItemStatus.REJECTED) hasRejected = true;\n });\n return hasRejected;\n };\n\n function handleCancel() {\n goToOutbound();\n }\n\n const isUploadEnabled = () => {\n return currentShipment.state !== OutboundState.COMPLETED;\n };\n\n const isPickListVerified = () => {\n let valid = inventoryItems.reduce(\n (valid, itm) => valid && itm.status === ShipmentLineItemStatus.VERIFIED,\n true\n );\n return valid;\n };\n\n const handleClickOpen = (sigType) => {\n debugger;\n setSignatureType(sigType);\n setInvalidSigMsg(\"\");\n setOpen(true);\n };\n\n const handleClose = (_, reason) => {\n if (reason !== \"backdropClick\") setOpen(false);\n };\n\n const clearSignature = () => {\n sigPad.clear();\n };\n\n const addSignature = async () => {\n if (sigPad.isEmpty()) {\n setInvalidSigMsg(\"Invalid signature\");\n } else {\n try {\n debugger;\n let dataUrl = sigPad.toDataURL(\"image/png\");\n const key =\n window.appUser.reloadYardId +\n \"/sig_\" +\n window.appUser?.reloadYardId +\n \"_\" +\n Date.now() +\n \".png\";\n const base64Img = dataUrl.split(\",\")[1];\n const binaryImg = base64ToBlob(base64Img, \"image/png\");\n await Storage.put(key, binaryImg, {\n level: \"public\",\n contentType: \"image/png\",\n });\n currentShipment[signatureType] = key;\n await saveShipment({ ...currentShipment });\n\n setOpen(false);\n if (signatureType === \"carrierSignatureKey\") {\n dispatch({ type: \"UPDATE_CARRIER_IMG\", payload: dataUrl });\n } else {\n dispatch({ type: \"UPDATE_YARD_IMG\", payload: dataUrl });\n }\n } catch (err) {\n logError(\n \"ProcessShipmentsCard:OutboundShipmentCard:addSignature\",\n err,\n notify\n );\n }\n }\n };\n\n const setSignaturePad = (ref) => {\n if (ref) {\n setSigPad(ref);\n if (signatureType === \"carrierSignatureKey\") {\n ref.fromDataURL(carrierSignatureImg);\n } else if (signatureType === \"yardSignatureKey\") {\n ref.fromDataURL(yardSignatureImg);\n }\n }\n };\n\n const setShipmentNote = (value) => {\n dispatch({\n type: \"SET_SHIPPMENT_NOTE\",\n payload: { id: currentShipment.id, value },\n });\n };\n\n const onEntered = (val) => {\n debugger;\n };\n\n const skipSignature = () => {\n debugger;\n dispatch({\n type: \"UPDATE_CURRENT_SHIPMENT\",\n payload: {\n ...currentShipment,\n skipSignature: !currentShipment.skipSignature,\n },\n });\n };\n\n const getShipmentIcon = () => {\n if (currentShipment.carrierType === CarrierType.RAIL)\n return <TrainIcon fontSize=\"large\" />;\n return <TruckIcon fontSize=\"large\" />;\n };\n\n const handleInputChange = (evt) => {\n const value = evt.target.value;\n const name = evt.target.name;\n debugger;\n const newShipment = { ...currentShipment, [name]: value };\n dispatch({ type: \"UPDATE_CURRENT_SHIPMENT\", payload: newShipment });\n };\n\n const getChecklist = () => {\n return (\n currentShipment.account?.outboundChecklist && (\n <Box component=\"span\">\n <Button\n variant=\"outlined\"\n onClick={() => setIsChecklistDialogOpen(true)}\n >\n Checklist\n </Button>\n <ChecklistDialog\n model={currentShipment}\n definition={currentShipment.account?.outboundChecklist}\n isOpen={isChecklistDialogOpen}\n setOpen={setIsChecklistDialogOpen}\n saveModel={saveShipment}\n title=\"Outbound Checklist\"\n // step={getSteps()[getActiveStep()]}\n ></ChecklistDialog>\n </Box>\n )\n );\n };\n\n const getNetWeight = () => {\n debugger;\n if (!currentShipment.netWeight) return <></>;\n const value = defaultNumberFormat.format(currentShipment.netWeight);\n\n return (\n currentShipment.carrierType === CarrierType.TRUCK && (\n <Grid item sm={6} xs={12}>\n <Typography>\n {`Net weight: ${value} ${currentShipment.weightUnits}`}\n </Typography>\n </Grid>\n )\n );\n };\n\n if (invalidIdError) return <ErrorCard error={invalidIdError} />;\n\n return (\n <div ref={imgRef}>\n <SealsConfirmationDialog\n open={isSealsConfirmationOpen}\n onClose={handleSealsConfirmationClose}\n onConfirm={handleSealsConfirmationConfirm}\n />\n <CrewCard\n title={\n currentShipment.transfer\n ? \"Transfer\"\n : currentShipment.pickupNumber || currentShipment.railCarNumber\n }\n icon={getShipmentIcon()}\n subheader={\n currentShipment.transfer\n ? currentShipment.transferToAccountName\n : currentShipment.carrier\n }\n action={\n <IconButton edge=\"start\" onClick={goToOutbound}>\n <HighlightOffIcon fontSize=\"large\" />\n </IconButton>\n }\n showDivider={false}\n >\n <CardContent>\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Grid container spacing={2}>\n <Grid item sm={12} xs={12}>\n <InventoryPhotos\n id={currentShipment.id}\n maxSize={MAX_PHOTO_NUM_OUTBOUND}\n saveModel={handleShipmentPhotos}\n photos={currentShipment.photos ? currentShipment.photos : []}\n disableButton={!isUploadEnabled()}\n disableDelete={!isUploadEnabled()}\n // handleLoading={setLoading}\n imgRef={imgRef}\n />\n <div className={classes.photoErrorSection}>\n {photosErrorMsg && (\n <Typography variant=\"caption\" display=\"block\" color=\"error\">\n {photosErrorMsg}\n </Typography>\n )}\n </div>\n </Grid>\n {!currentShipment?.skipSignature &&\n isAuthorized(AclType.OUTBOUND_SIGN) && (\n <Grid container spacing={2}>\n <Grid item>\n <div\n style={{\n marginLeft: 4,\n marginBottom: 8,\n marginTop: 8,\n }}\n >\n <Button\n onClick={() => handleClickOpen(\"yardSignatureKey\")}\n variant=\"outlined\"\n size=\"large\"\n disabled={!isUploadEnabled()}\n endIcon={\n currentShipment.yardSignatureKey ? (\n <CheckIcon fontSize=\"large\" />\n ) : (\n <ClearIcon fontSize=\"large\" />\n )\n }\n >\n {isSmall ? \"Yard Sig\" : \"Yard Signature\"}\n </Button>\n </div>\n </Grid>\n <Grid item>\n <div\n style={{\n marginBottom: 8,\n marginTop: 8,\n }}\n >\n <Button\n onClick={() => handleClickOpen(\"carrierSignatureKey\")}\n variant=\"outlined\"\n size=\"large\"\n disabled={!isUploadEnabled()}\n endIcon={\n currentShipment.carrierSignatureKey ? (\n <CheckIcon fontSize=\"large\" />\n ) : (\n <ClearIcon fontSize=\"large\" />\n )\n }\n >\n {isSmall ? \"Carrier Sig\" : \"Carrier Signature\"}\n </Button>\n </div>\n </Grid>\n </Grid>\n )}\n {(!carrierSignatureImg || !yardSignatureImg) &&\n isAuthorized(AclType.OUTBOUND_SIGN) && (\n <Grid item xs={12}>\n <FormControlLabel\n control={\n <Switch\n checked={currentShipment.skipSignature ? true : false}\n onChange={() => skipSignature()}\n />\n }\n label=\"Skip e-signatures\"\n />\n </Grid>\n )}\n {/* <Grid item sm={6} xs={12}>\n {getChecklist()}\n </Grid> */}\n\n <Grid item sm={6} xs={12}>\n {currentShipment.carrierType === CarrierType.RAIL ? (\n <Typography>\n Railcar number: {currentShipment.railCarNumber}\n </Typography>\n ) : (\n <Typography>\n Trailer number: {currentShipment.railCarNumber}\n </Typography>\n )}\n </Grid>\n {!currentShipment.transfer &&\n currentShipment.carrierType === CarrierType.TRUCK && (\n <Grid item sm={6} xs={12}>\n <Typography>\n Pickup number: {currentShipment.pickupNumber}\n </Typography>\n </Grid>\n )}\n <Grid item sm={6} xs={12}>\n <Typography>PO number: {currentShipment.poNumber}</Typography>\n </Grid>\n <Grid item sm={6} xs={12}>\n <Typography noWrap={true}>\n Account: {currentShipment.accountName}\n </Typography>\n </Grid>\n {!currentShipment.transfer &&\n currentShipment.carrierType === CarrierType.TRUCK && (\n <Grid item sm={6} xs={12}>\n <Typography>\n Must Tarp: {currentShipment.mustTarp ? \"Yes\" : \"No\"}\n </Typography>\n </Grid>\n )}\n {getNetWeight()}\n {currentShipment.customFields && (\n <Grid item xs={12}>\n <CustomFieldsMobile\n recordFields={currentShipment.customFields}\n accountFields={currentShipment.account?.outboundCustomFields}\n width={6}\n />\n </Grid>\n )}\n {currentShipment?.account?.trackInboundSeals && (\n <>\n <Grid item xs={12}>\n <Button\n color=\"primary\"\n variant=\"outlined\"\n startIcon={<ScannerIcon />}\n disabled={isScanSealDisabled()}\n onClick={() => setIsSealDialogOpen(true)}\n >\n Scan Seals\n </Button>\n </Grid>\n {isSealDialogOpen && (\n <SealDialog\n saveShipment={updateShipmentHistory}\n setIsSealDialogOpen={setIsSealDialogOpen}\n />\n )}\n </>\n )}\n <Grid item xs={12}>\n <TextField\n name=\"notes\"\n id=\"outlined-multiline-static\"\n label=\"Notes\"\n multiline\n minRows={3}\n disabled={!isUploadEnabled()}\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={note}\n onChange={(evt) => setShipmentNote(evt.target.value)}\n />\n </Grid>\n {currentShipment.instructions && (\n <Grid item xs={12}>\n <Typography>\n Instructinos: {currentShipment.instructions}\n </Typography>\n </Grid>\n )}\n </Grid>\n <>\n {currentShipment.shipmentLineItems ? (\n <InventoryList\n classes={classes}\n currentShipment={currentShipment}\n inventoryItems={inventoryItems}\n history={history}\n match={match}\n />\n ) : (\n <Typography className={classes.notFound}>\n No shipment items found.\n </Typography>\n )}\n </>\n <Dialog\n open={open}\n onClose={handleClose}\n maxWidth=\"xl\"\n style={isSmall ? {} : { margin: 32 }}\n fullWidth\n TransitionProps={{\n onEntered: onEntered,\n }}\n >\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">Capture Signature</Typography>\n <CancelOutlinedIcon fontSize=\"large\" onClick={handleCancel} />\n </Box>\n <DialogContent>\n <DialogContentText>\n <div className={classes.sigContainer}>\n <SignaturePad\n options={{\n minWidth: 1,\n maxWidth: 3,\n penColor: \"rgb(0, 0, 0)\",\n }}\n canvasProps={{\n className: isSmall\n ? classes.sigPadMobile\n : classes.sigPad,\n }}\n ref={(ref) => {\n setSignaturePad(ref);\n }}\n />\n <div>\n <Typography color=\"error\">{invalidSigMsg}</Typography>\n </div>\n </div>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"default\">\n Cancel\n </Button>\n <Button onClick={clearSignature} color=\"primary\" autoFocus>\n Clear\n </Button>\n <Button onClick={() => addSignature()} color=\"primary\" autoFocus>\n Save\n </Button>\n </DialogActions>\n </Dialog>\n </CardContent>\n <CardActions className={classes.actions}>\n <Button size=\"large\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n type=\"submit\"\n color=\"primary\"\n size=\"large\"\n disabled={isSubmitButtonDisabled()}\n onClick={handleSave}\n >\n {getSubmitButtonText()}\n </Button>\n </CardActions>\n </CrewCard>\n </div>\n );\n}\n\nconst InventoryList = ({\n classes,\n currentShipment,\n inventoryItems,\n history,\n}) => {\n const { dispatch } = useOutboundContext();\n const [showAll, setShowAll] = useStickyState(false, currentShipment.id);\n\n const getIcon = (lineItm) => {\n if (lineItm.status === ShipmentLineItemStatus.LOADED)\n return <DoneIcon fontSize=\"inherit\" />;\n else if (lineItm.status === ShipmentLineItemStatus.VERIFIED)\n return <DoubleCheckIcon fontSize=\"inherit\" />;\n return <CloseOutlinedIcon fontSize=\"inherit\" />;\n };\n\n const getAvatarClassName = (lineItm) => {\n if (lineItm.hasException) {\n return classes.amber;\n }\n if (\n lineItm.status === ShipmentLineItemStatus.LOADED ||\n lineItm.status === ShipmentLineItemStatus.VERIFIED\n )\n return classes.green;\n else if (lineItm.status === ShipmentLineItemStatus.REJECTED)\n return classes.orange;\n return classes.unprocessedItem;\n };\n\n const handleSelect = (lineItm) => {\n dispatch({ type: \"SET_LOADING\", payload: true });\n dispatch({\n type: \"SET_CURRENT_SHIPMENT_LINE_ITEM\",\n payload: { currentLineItem: lineItm },\n });\n };\n\n const getListDisplay = (currentShipment, lineItm) => {\n const primaryField = getInventoryPrimaryField(\n currentShipment.account,\n lineItm.inventory,\n lineItm\n );\n return (\n primaryField.label +\n \": \" +\n primaryField.value +\n \" - Qty: \" +\n lineItm.quantityToPick +\n \" \" +\n getUnitName(currentShipment.totalUnits)\n );\n };\n\n const getViewInventoryItems = () => {\n if (showAll) return inventoryItems;\n if (currentShipment.status !== OutboundStatus.LOADED) {\n return inventoryItems.filter(\n (itm) => itm.status !== ShipmentLineItemStatus.LOADED\n );\n }\n return inventoryItems.filter(\n (itm) => itm.status !== ShipmentLineItemStatus.VERIFIED\n );\n };\n\n return (\n <div className={classes.inventoriesSection}>\n <Grid container>\n <Grid item xs={6}>\n <Box mt={0.15} display=\"flex\" alignItems=\"center\">\n <Typography variant=\"h6\" color=\"textSecondary\">\n Pick List\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={6}>\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"flex-end\">\n <FormControlLabel\n control={\n <Switch\n checked={showAll}\n onChange={() => setShowAll(!showAll)}\n name=\"show-loaded\"\n />\n }\n label=\"Show all\"\n />\n </Box>\n </Grid>\n </Grid>\n <List>\n {getViewInventoryItems().map((lineItm) => {\n return (\n <div key={lineItm.id}>\n <Link\n className={classes.link}\n to={history.location.pathname + \"/inventories/\" + lineItm.id}\n >\n <ListItem onClick={() => handleSelect(lineItm)}>\n <ListItemAvatar>\n <Avatar className={getAvatarClassName(lineItm)}>\n {getIcon(lineItm)}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={\n <Typography>{lineItm.inventory.productName}</Typography>\n }\n secondary={\n <>\n <Typography variant=\"subtitle2\" color=\"textSecondary\">\n Location: {lineItm.inventoryItem.locationFullName}\n </Typography>\n <Typography variant=\"subtitle2\" color=\"textSecondary\">\n {getListDisplay(currentShipment, lineItm)}\n </Typography>\n </>\n }\n />\n <ListItemSecondaryAction>\n <IconButton\n edge=\"end\"\n onClick={() => handleSelect(lineItm)}\n >\n <KeyboardArrowRightIcon fontSize=\"large\" />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n </Link>\n <Divider />\n </div>\n );\n })}\n </List>\n </div>\n );\n};\n\nconst SealsConfirmationDialog = ({ open, onClose, onConfirm }) => {\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogTitle>Seals Confirmation</DialogTitle>\n <DialogContent>\n <Typography>\n No seals have been scanned for this outbound. Are you sure you want to\n proceed without adding seals?\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>Cancel</Button>\n <Button onClick={onConfirm} color=\"primary\">\n Proceed\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import React from \"react\";\nimport {\n ListItem,\n ListItemAvatar,\n ListItemText,\n Avatar,\n ListItemSecondaryAction,\n IconButton,\n Divider,\n makeStyles,\n} from \"@material-ui/core\";\nimport KeyboardArrowRightIcon from \"@material-ui/icons/KeyboardArrowRight\";\nimport CheckIcon from \"@material-ui/icons/Check\";\nimport DoubleCheckIcon from \"@material-ui/icons/DoneAll\";\nimport CloseOutlinedIcon from \"@material-ui/icons/CloseOutlined\";\nimport { useOutboundContext } from \"./context\";\nimport { Link } from \"react-router-dom\";\nimport {\n CarrierType,\n OutboundStatus,\n OutboundState,\n} from \"../../../utils/constants\";\nimport { amber, grey } from \"@material-ui/core/colors\";\n\nconst useStyles = makeStyles((theme) => ({\n amber: {\n color: theme.palette.getContrastText(amber[500]),\n backgroundColor: amber[500],\n },\n unprocessedItem: {\n color: theme.palette.getContrastText(grey[300]),\n backgroundColor: grey[300],\n },\n link: {\n color: \"inherit\",\n textDecoration: \"inherit\",\n },\n}));\n\nexport const ProcessOutboundShipmentItem = ({\n shipment,\n match,\n idx,\n searchShipments,\n}) => {\n const classes = useStyles();\n const { dispatch } = useOutboundContext();\n const secondaryText = shipment.transfer\n ? `Transfer to: ${shipment.transferToAccountName} - PO No: ${shipment.poNumber}`\n : shipment.carrierType === CarrierType.RAIL\n ? `Railcar No: ${shipment.railCarNumber} - PO No: ${shipment.poNumber}`\n : shipment.carrierType === CarrierType.TRUCK\n ? `Pickup No: ${shipment.pickupNumber} - PO No: ${shipment.poNumber}`\n : `PO No: ${shipment.poNumber}`;\n\n const getIcon = (shipment) => {\n if (shipment.status === OutboundStatus.LOADED) {\n if (shipment.state === OutboundState.COMPLETED)\n return <DoubleCheckIcon fontSize=\"inherit\" />;\n else return <CheckIcon fontSize=\"inherit\" />;\n }\n return <CloseOutlinedIcon fontSize=\"inherit\" />;\n };\n\n const getAvatarClassName = (shipment) => {\n if (shipment.hasException) {\n return classes.amber;\n }\n return classes.unprocessedItem;\n };\n\n const handleSelect = (shipment) => {\n dispatch({ type: \"SET_CURRENT_SHIPPMENT\", payload: shipment });\n };\n\n return (\n <Link\n className={classes.link}\n to={match.path + \"/\" + shipment.id}\n key={shipment.id}\n >\n <ListItem onClick={() => handleSelect(shipment)}>\n <ListItemAvatar>\n <Avatar className={getAvatarClassName(shipment)}>\n {getIcon(shipment)}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={shipment.accountName}\n secondary={secondaryText}\n primaryTypographyProps={{ display: \"block\", noWrap: false }}\n secondaryTypographyProps={{\n display: \"block\",\n noWrap: false,\n }}\n />\n <ListItemSecondaryAction>\n <IconButton edge=\"end\" onClick={() => handleSelect(shipment)}>\n <KeyboardArrowRightIcon fontSize=\"large\" />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n {idx < searchShipments.length - 1 ? <Divider /> : null}\n </Link>\n );\n};\n","import React, { useState, useEffect } from \"react\";\nimport { useNotify } from \"react-admin\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport OutbounddOutlinedIcon from \"@material-ui/icons/FastRewindOutlined\";\nimport {\n CircularProgress,\n List,\n IconButton,\n TextField,\n useMediaQuery,\n Grid,\n InputAdornment,\n Backdrop,\n} from \"@material-ui/core\";\nimport XIcon from \"@material-ui/icons/CloseOutlined\";\nimport RefreshIcon from \"@material-ui/icons/Refresh\";\nimport { useOutboundContext } from \"./context\";\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport { AclType, OutboundStatus } from \"../../../utils/constants\";\nimport { isAuthorized, logError } from \"../../../utils/appUtils\";\nimport useMounted from \"../../../utils/useMounted\";\nimport { outboundShipmentByStatus } from \"../../../graphql/outbound/custom-queries\";\nimport { ProcessOutboundShipmentItem } from \"./ProcessOutboundShipmentItem\";\n\nconst SearchField = ({ handleSearch, term, classes, handleSubmit, clear }) => (\n <TextField\n id=\"search\"\n name=\"search\"\n size=\"small\"\n variant=\"outlined\"\n margin=\"dense\"\n onChange={handleSearch}\n value={term}\n placeholder=\"Search\"\n className={classes.searchField}\n onKeyDown={handleSubmit}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton disableRipple onClick={clear}>\n <XIcon className={classes.clearButton} />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n);\n\nexport const ProcessOutboundShipmentList = (props) => {\n const { state, dispatch } = useOutboundContext();\n const { outboundShipments, loading } = state;\n const [term, setTerm] = useState(\"\");\n const [searchShipments, setSearchShipments] = useState([]);\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const { classes, match } = props;\n const isComponentMounted = useMounted();\n const notify = useNotify();\n\n useEffect(() => {\n init();\n\n return () => {\n dispatch({ type: \"OUTBOUND_SHIPPMENTS_LOADED\", payload: [] });\n setSearchShipments([]);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const init = async () => {\n if (!loading) {\n dispatch({ type: \"SET_LOADING\", payload: true });\n try {\n const arrivedResponse = await API.graphql(\n graphqlOperation(outboundShipmentByStatus, {\n reloadYardId: window.appUser?.reloadYardId,\n status: { eq: OutboundStatus.ARRIVED },\n limit: 100,\n })\n );\n\n let loadedResponse;\n if (isAuthorized(AclType.OUTBOUND_VERIFY)) {\n loadedResponse = await API.graphql(\n graphqlOperation(outboundShipmentByStatus, {\n reloadYardId: window.appUser?.reloadYardId,\n status: { eq: OutboundStatus.LOADED },\n limit: 100,\n })\n );\n }\n\n let response = arrivedResponse;\n if (loadedResponse) {\n response.data.outboundShipmentByStatus.items = [\n ...response.data.outboundShipmentByStatus.items,\n ...loadedResponse.data.outboundShipmentByStatus.items,\n ];\n }\n\n const data = response.data.outboundShipmentByStatus.items.sort(\n (a, b) => {\n const first = a.arrivalDateTime\n ? new Date(a.arrivalDateTime)\n : Date.now();\n const second = b.arrivalDateTime\n ? new Date(b.arrivalDateTime)\n : Date.now();\n return first - second;\n }\n );\n\n data.sort((a, b) => a.arrivalDateTime.localeCompare(b.arrivalDateTime));\n setSearchShipments(data);\n\n if (isComponentMounted) {\n dispatch({\n type: \"OUTBOUND_SHIPPMENTS_LOADED\",\n payload: data,\n });\n }\n } catch (err) {\n logError(\"ProcessOutboundShipments:init\", err, notify);\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n }\n };\n\n const refresh = () => {\n init();\n };\n\n const handleSearch = (evt) => {\n const value = evt.target.value;\n setTerm(value);\n let searchResult = outboundShipments;\n if (value) {\n const searchTerm = value.toLowerCase();\n searchResult = outboundShipments.filter((itm) => {\n return (\n itm.accountName.toLowerCase().includes(searchTerm) ||\n itm.poNumber.toLowerCase().includes(searchTerm) ||\n itm.pickupNumber.toLowerCase().includes(searchTerm)\n );\n });\n }\n setSearchShipments(searchResult);\n };\n\n const handleSubmit = (evt) => {\n if (evt.key === \"Enter\") {\n handleSearch(evt);\n }\n };\n\n const clear = () => {\n setTerm(\"\");\n setSearchShipments(outboundShipments);\n };\n\n return (\n <CrewCard\n title={isSmall ? \"Outbound\" : \"Outbound Shipments\"}\n icon={<OutbounddOutlinedIcon fontSize=\"large\" />}\n action={\n <div className={classes.topActions}>\n <IconButton onClick={refresh}>\n <RefreshIcon fontSize=\"large\" />\n </IconButton>\n </div>\n }\n >\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Grid container>\n <Grid item xs={12}>\n <SearchField\n value={term}\n classes={classes}\n handleSubmit={handleSubmit}\n clear={clear}\n handleSearch={handleSearch}\n />\n </Grid>\n <Grid item xs={12}>\n <List>\n {searchShipments.map((shipment, idx) => (\n <ProcessOutboundShipmentItem\n key={shipment.id}\n shipment={shipment}\n classes={classes}\n match={match}\n idx={idx}\n searchShipments={searchShipments}\n />\n ))}\n </List>\n </Grid>\n </Grid>\n </CrewCard>\n );\n};\n","import { useEffect, useRef } from \"react\";\n\nexport default function useMountedRef() {\n const mounted = useRef(false);\n useEffect(() => {\n mounted.current = true;\n return () => (mounted.current = false);\n });\n return mounted;\n}\n","import React from \"react\";\nimport { Title } from \"react-admin\";\nimport { Route } from \"react-router-dom\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { orange, amber, grey, green } from \"@material-ui/core/colors\";\nimport OutboundShipmentCardContainer from \"./ProcessShipmentsCard\";\nimport { OutboundProvider } from \"./context\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { ProcessOutboundShipmentList } from \"./ProcessOutboundShipmentList\";\n\nconst useStyles = makeStyles((theme) => ({\n summaryContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n margin: theme.spacing(2),\n },\n actions: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n progress: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 300,\n },\n button: {\n margin: theme.spacing(1),\n },\n settings: {\n marginTop: theme.spacing(2),\n },\n orange: {\n color: theme.palette.getContrastText(orange[100]),\n backgroundColor: orange[100],\n },\n green: {\n color: theme.palette.getContrastText(green[200]),\n backgroundColor: green[200],\n },\n amber: {\n color: theme.palette.getContrastText(amber[500]),\n backgroundColor: amber[500],\n },\n unprocessedItem: {\n color: theme.palette.getContrastText(grey[300]),\n backgroundColor: grey[300],\n },\n backToInventory: {\n display: \"flex\",\n justifyContent: \"space-between\",\n padding: theme.spacing(4),\n },\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n listAuditProgress: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n },\n inventoriesSection: {\n marginTop: theme.spacing(2),\n },\n photo: {\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: theme.spacing(2),\n },\n photoContainer: {\n display: \"flex\",\n alignItems: \"center\",\n },\n link: {\n color: \"inherit\",\n textDecoration: \"inherit\",\n },\n searchField: {\n marginLeft: theme.spacing(1),\n },\n shipmentFilter: {\n marginRight: theme.spacing(2),\n },\n photoErrorSection: {\n paddingLeft: theme.spacing(2),\n },\n notFound: {\n display: \"fles\",\n margin: theme.spacing(2),\n },\n finishButton: {\n display: \"flex\",\n justifyContent: \"center\",\n marginTop: theme.spacing(4),\n },\n sigContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n sigPadMobile: {\n height: 240,\n border: \"1px solid grey\",\n },\n sigPad: {\n height: 380,\n border: \"1px solid grey\",\n },\n topActions: {\n paddingTop: theme.spacing(2),\n },\n}));\n\nconst ProcessOutboundShipments = (props) => {\n const classes = useStyles();\n\n return (\n <OutboundProvider>\n <Title title={<ForceTitle title=\"Outbounds\" />} />\n <Route\n path={`${props.match.path}`}\n exact\n render={(props) => (\n <ProcessOutboundShipmentList classes={classes} {...props} />\n )}\n />\n <Route\n path={`${props.match.path}/:id`}\n render={(props) => (\n <OutboundShipmentCardContainer classes={classes} {...props} />\n )}\n />\n </OutboundProvider>\n );\n};\n\nexport default ProcessOutboundShipments;\n","import React, { useEffect, useState } from \"react\";\nimport {\n Button,\n Divider,\n Grid,\n MenuItem,\n TextField,\n Typography,\n InputAdornment,\n Box,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { useInventorySearchContext } from \"../context\";\nimport { LocationType } from \"../../../../utils/constants\";\nimport {\n canRelocateFrom,\n getLocationFullName,\n} from \"../../../../utils/locationUtils\";\nimport { isQuantityInUnits } from \"../../../../utils/loadTypeUtils\";\nimport { handleNumberFieldKeyDown } from \"../../../../utils/utils\";\n\nexport const AisleControl = ({\n handleSave,\n handleAisleChange,\n handleAreaChange,\n handleZoneChange,\n isSaveButtonDisabled,\n classes,\n}) => {\n const { state, dispatch } = useInventorySearchContext();\n const {\n aisles,\n selectedAisle,\n areas,\n zones,\n selectedArea,\n selectedZone,\n selectedLocation,\n selectedInventoryItem,\n disableRelocateValidation,\n inventoryItemBayList,\n originalInventoryItem,\n } = state;\n const [isDisabled, setIsDisabled] = useState();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n useEffect(() => {\n if (inventoryItemBayList) {\n setIsDisabled(\n !canRelocateFrom(\n selectedInventoryItem,\n disableRelocateValidation,\n inventoryItemBayList\n )\n );\n }\n }, [selectedInventoryItem, disableRelocateValidation, inventoryItemBayList]);\n\n const setDisableRelocateValidation = (value) => {\n dispatch({ type: \"SET_DISABLE_VALIDATION\", payload: value });\n };\n\n const getRelocateText = () => {\n if (\n selectedLocation &&\n selectedLocation.id !== selectedInventoryItem.location.id\n ) {\n return `Relocate from ${\n selectedInventoryItem.locationFullName\n } to ${getLocationFullName(selectedLocation)}`;\n }\n return `Relocate from ${selectedInventoryItem.locationFullName} to ...`;\n };\n\n const setQuantity = (value) => {\n if (value === \"\") {\n const newInventoryItem = { ...selectedInventoryItem, quantityOnHand: \"\" };\n dispatch({\n type: \"SET_SELECTED_INVENTORY_ITEM\",\n payload: newInventoryItem,\n });\n return;\n }\n\n const quantity = Number(value || 1);\n\n if (quantity < 1 || quantity > originalInventoryItem?.quantityOnHand)\n return;\n\n const newInventoryItem = {\n ...selectedInventoryItem,\n quantityOnHand: quantity,\n };\n dispatch({\n type: \"SET_SELECTED_INVENTORY_ITEM\",\n payload: newInventoryItem,\n });\n };\n\n const isQuantityDisabled = () => {\n if (!selectedAisle || !selectedInventoryItem) return true;\n if (selectedInventoryItem.location.id === selectedLocation?.id) return true;\n if (\n selectedInventoryItem.location.type === LocationType.STRUCTURED &&\n !selectedInventoryItem.location.locationLoad.other.selected\n )\n return true;\n if (\n selectedInventoryItem.location.type === LocationType.UNSTRUCTURED &&\n selectedAisle.type === LocationType.STRUCTURED &&\n !selectedAisle?.locationLoad?.other.selected &&\n isQuantityInUnits(selectedInventoryItem.inventory)\n )\n return true;\n return false;\n };\n\n return (\n <>\n {\n // selectedAisle?.type === LocationType.STRUCTURED && <Grid item xs={12}>\n // <FormControlLabel\n // control={\n // <Switch\n // checked={disableRelocateValidation}\n // onChange={() => setDisableRelocateValidation(!disableRelocateValidation)}\n // color=\"primary\"\n // />\n // }\n // label=\"Disable validation\"\n // />\n // </Grid>\n }\n <Grid item container xs={12} lg={8} xl={6} spacing={2}>\n <Grid item xs={6} sm={3}>\n <TextField\n select\n id=\"area\"\n label=\"Area\"\n variant=\"outlined\"\n size=\"small\"\n required\n fullWidth\n disabled={isDisabled}\n value={selectedArea ? selectedArea.id : \"\"}\n onChange={(e) => handleAreaChange(e.target.value)}\n >\n {areas.map((area) => (\n <MenuItem key={area.id} value={area.id}>\n {area.name}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n <Grid item xs={6} sm={3}>\n <TextField\n select\n id=\"zone\"\n label=\"Zone\"\n variant=\"outlined\"\n size=\"small\"\n required\n fullWidth\n disabled={isDisabled}\n value={selectedZone ? selectedZone.id : \"\"}\n onChange={(e) => handleZoneChange(e.target.value)}\n >\n {zones.map((zone) => (\n <MenuItem key={zone.id} value={zone.id}>\n {zone.name}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n <Grid item xs={6} sm={3}>\n <TextField\n select\n id=\"aisle\"\n label=\"Aisle\"\n variant=\"outlined\"\n size=\"small\"\n required\n fullWidth\n disabled={isDisabled}\n value={selectedAisle ? selectedAisle.id : \"\"}\n onChange={(evt) => handleAisleChange(evt.target.value)}\n autoFocus\n >\n {aisles &&\n [{ id: \"\", value: \"\", name: <span> </span> }, ...aisles].map(\n (itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {itm.name}\n </MenuItem>\n )\n )}\n </TextField>\n </Grid>\n <Grid item xs={6} sm={3}>\n <TextField\n id=\"quantity\"\n label=\"Quantity\"\n variant=\"outlined\"\n size=\"small\"\n type=\"number\"\n fullWidth\n inputProps={{ min: 0, max: originalInventoryItem?.quantityOnHand }}\n disabled={isQuantityDisabled()}\n value={selectedInventoryItem?.quantityOnHand}\n error={!selectedInventoryItem?.quantityOnHand}\n onChange={(evt) => setQuantity(evt.target.value)}\n onKeyDown={handleNumberFieldKeyDown}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {selectedInventoryItem?.inventory?.inventoryUnits}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12}>\n <Box>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={handleSave}\n disabled={\n isSaveButtonDisabled() || !selectedInventoryItem?.quantityOnHand\n }\n >\n Save\n </Button>\n {!isSmall && (\n <Typography\n component=\"span\"\n variant=\"subtitle1\"\n color=\"textSecondary\"\n style={{ marginLeft: 8 }}\n >\n {getRelocateText()}\n </Typography>\n )}\n </Box>\n </Grid>\n {isSmall && (\n <Grid item xs={12}>\n <Typography variant=\"subtitle1\" color=\"textSecondary\">\n {getRelocateText()}\n </Typography>\n </Grid>\n )}\n </Grid>\n <Grid item xs={12}>\n <Divider />\n </Grid>\n </>\n );\n};\n","import { Typography, Grid, Box, Divider } from \"@material-ui/core\";\nimport { deepOrange, grey, blueGrey, green } from \"@material-ui/core/colors\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { useMediaQuery } from \"@material-ui/core\";\nimport {\n canRelocate,\n getLocationViewName,\n} from \"../../../../utils/locationUtils\";\nimport { getInventoryQuantity } from \"../../../../utils/utils\";\nimport { useInventorySearchContext } from \"../context\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: 1001,\n },\n mapContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n flexWrap: \"wrap\",\n minHeight: theme.spacing(24),\n width: \"100%\",\n },\n mapContainerMobile: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"center\",\n flexWrap: \"wrap\",\n minHeight: theme.spacing(24),\n width: \"100%\",\n },\n bayContainer: {\n display: \"flex\",\n flexDirection: \"column-reverse\",\n alignItems: \"center\",\n alignContent: \"space-between\",\n border: \"1px solid #b0bec5\",\n borderRadius: theme.spacing(1),\n margin: theme.spacing(0.5),\n padding: theme.spacing(0.5),\n paddingTop: theme.spacing(1),\n },\n levelContainer: {\n border: \"1px solid\",\n borderColor: blueGrey[500],\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n },\n locationAvatar: {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(\n theme.palette.type === \"dark\" ? grey[400] : grey[300]\n ),\n backgroundColor: theme.palette.type === \"dark\" ? grey[400] : grey[300],\n borderColor: theme.palette.type === \"dark\" ? grey[400] : grey[300],\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"3px solid\",\n borderRadius: theme.spacing(0.5),\n width: \"100%\",\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n locationUsedAvatar: {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(\n theme.palette.type === \"dark\" ? grey[400] : grey[300]\n ),\n backgroundColor: theme.palette.type === \"dark\" ? grey[400] : grey[300],\n borderColor:\n theme.palette.type === \"dark\" ? deepOrange[500] : deepOrange[500],\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"3px solid\",\n borderRadius: theme.spacing(0.5),\n width: \"100%\",\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n selectedLocationAvatar: {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n borderColor: deepOrange[500],\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"3px solid\",\n borderRadius: theme.spacing(0.5),\n width: \"100%\",\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n locationAvailableAvatar: {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(green[600]),\n backgroundColor: green[600],\n borderColor: green[600],\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"3px solid\",\n borderRadius: theme.spacing(0.5),\n \"&:hover\": {\n cursor: \"pointer\",\n backgroundColor: green[600],\n color: theme.palette.getContrastText(green[600]),\n },\n width: \"100%\",\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n redCircle: {\n position: \"absolute\",\n top: -theme.spacing(1.25),\n left: -theme.spacing(1.25),\n width: theme.spacing(1.5),\n height: theme.spacing(1.5),\n borderStyle: \"solid\",\n borderWidth: theme.spacing(0.75),\n borderRadius: theme.spacing(0.75),\n borderColor: deepOrange[500],\n },\n}));\n\nexport const StructuredAisle = () => {\n const { state, dispatch } = useInventorySearchContext();\n const {\n currentInventory,\n selectedLocation,\n selectedInventoryItem,\n searchInventoryItemsMap,\n selectedAisle,\n bayList,\n originalInventoryItem,\n showInventoryQuantity,\n disableRelocateValidation,\n inventoryItemBayList,\n } = state;\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n const handleSelectLocation = (location) => {\n debugger;\n if (!location.capacityUsed) location.capacityUsed = 0;\n if (location.id === selectedLocation?.id) {\n dispatch({ type: \"SET_SELECTED_LOCATION\", payload: { location: null } });\n } else {\n dispatch({ type: \"SET_SELECTED_LOCATION\", payload: { location } });\n }\n };\n\n const getFullName = (location, size = 16) => {\n if (!location) return \"\";\n const name = getLocationViewName(location);\n if (!isSmall) return name;\n if (name.length <= size) return name;\n return name.substring(0, size - 3) + \"...\";\n };\n\n const getLocationAvatarClassName = (location) => {\n // if (location.bay === 1 && location.level === 2 && location.position === 3) {\n // debugger;\n // }\n\n if (location.id === selectedLocation?.id)\n return classes.selectedLocationAvatar;\n if (originalInventoryItem?.locationId === location.id) {\n if (!selectedLocation) return classes.selectedLocationAvatar;\n return classes.locationUsedAvatar;\n }\n const available = canRelocate(\n bayList,\n location,\n selectedInventoryItem,\n currentInventory,\n disableRelocateValidation,\n inventoryItemBayList\n );\n\n if (!available) return classes.locationAvatar;\n return classes.locationAvailableAvatar;\n };\n\n const getCapcityUsedText = (location) => {\n if (\n !showInventoryQuantity ||\n (!selectedLocation && selectedAisle?.locationLoad?.other.selected) ||\n selectedLocation?.locationLoad?.other.selected\n ) {\n return `${location.capacityUsed ? location.capacityUsed : 0}%`;\n } else {\n const inventoryLoadType =\n currentInventory.reloadYardCommodity.commodity.locationLoadType;\n if (inventoryLoadType === \"other\" || inventoryLoadType === \"container\")\n return \"\";\n return getInventoryQuantity(location, currentInventory).name;\n }\n };\n\n if (!selectedAisle?.id || bayList?.length === 0) return <></>;\n\n return (\n <>\n <Grid item xs={12}>\n <div\n className={\n isSmall ? classes.mapContainerMobile : classes.mapContainer\n }\n >\n {bayList?.map((bay, bayIdx) => (\n <div className={classes.bayContainer} key={bayIdx}>\n <Box m={1}>\n <Typography>{`Bay ${\n (bayIdx + 1 < 10 ? \" 0\" : \" \") + (bayIdx + 1)\n }`}</Typography>\n </Box>\n <Divider />\n {bay?.map((level, idx) => (\n <div className={classes.levelContainer} key={idx}>\n {level.map((location) => {\n return (\n <div\n key={location.id}\n className={getLocationAvatarClassName(location)}\n onClick={() => handleSelectLocation(location)}\n >\n <Typography align=\"center\" variant=\"body2\">\n {getFullName(location)}\n </Typography>\n <Typography align=\"center\" variant=\"body2\">\n {getCapcityUsedText(location)}\n </Typography>\n {searchInventoryItemsMap[location.id] && (\n <Box className={classes.redCircle}></Box>\n )}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n ))}\n </div>\n </Grid>\n </>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { useNotify } from \"react-admin\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n searchInventorys,\n inventoryItemByLocationByStatus,\n} from \"../../../../graphql/inventory/custom-queries\";\nimport { locationByAisleBySortKey } from \"../../../../graphql/reloadyard/custom-queries\";\nimport {\n Box,\n Grid,\n Divider,\n Button,\n Table,\n TableHead,\n TableBody,\n TableRow,\n TableCell,\n TableContainer,\n Backdrop,\n CircularProgress,\n Dialog,\n DialogContent,\n DialogActions,\n useMediaQuery,\n FormControlLabel,\n Switch,\n Typography,\n} from \"@material-ui/core\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n InventoryStatus,\n LocationLoadType,\n LocationType,\n} from \"../../../../utils/constants\";\nimport { getLocationFullName } from \"../../../../utils/locationUtils\";\nimport { getUnitName } from \"../../../../utils/loadTypeUtils\";\nimport CheckIcon from \"@material-ui/icons/Check\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport VisibilityIcon from \"@material-ui/icons/Visibility\";\nimport { green } from \"@material-ui/core/colors\";\nimport { logError } from \"../../../../utils/appUtils\";\nimport { AisleControl } from \"./AisleControl\";\nimport { StructuredAisle } from \"./StructuredAisle\";\nimport SearchInput from \"../../../../components/common/SearchInput\";\nimport LocationCapacity, {\n StructuredLocationCapacity,\n} from \"../../../../components/common/LocationCapacity\";\nimport { useInventorySearchContext } from \"../context\";\n\nconst useStyles = makeStyles((theme) => ({\n spacer: {\n marginTop: theme.spacing(1),\n },\n iconButton: {\n marginTop: theme.spacing(0.25),\n },\n backdrop: {\n zIndex: 1001,\n },\n}));\n\nexport const AisleMap = ({\n handleSave,\n handleAreaChange,\n handleZoneChange,\n isSaveButtonDisabled,\n}) => {\n const { state, dispatch } = useInventorySearchContext();\n const {\n currentInventory,\n selectedAisle,\n selectedLocation,\n selectedZone,\n showCapacityDisplay,\n showInventoryQuantity,\n selectedInventoryItem,\n aisles,\n originalInventoryItem,\n bayList,\n selectedLocationInventories,\n } = state;\n // const [loadTypeName, setLoadTypeName] = useState();\n // const [totalQuantity, setTotalQuantity] = useState();\n // const [showTotalQuantity, setShowTotalQuantity] = useState(false);\n const [showInventories, setShowInventories] = useState();\n const [mapLoading, setMapLoading] = useState();\n const [searchTerm, setSearchTerm] = useState(\"\");\n const isMedium = useMediaQuery((theme) => theme.breakpoints.up(\"md\"));\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n const classes = useStyles();\n const notify = useNotify();\n\n useEffect(() => {\n if (selectedZone) {\n init();\n }\n }, [selectedZone]);\n\n useEffect(() => {\n if (selectedLocation && selectedZone && bayList?.length !== 0) {\n handleLocation();\n }\n }, [bayList, selectedZone, selectedLocation]);\n\n const init = () => {\n if (selectedAisle) {\n handleAisleChange(selectedAisle.id, false, true);\n }\n };\n\n const handleLocation = async () => {\n dispatch({ type: \"SET_SELECTED_LOCATION_INVENTORIES\", payload: [] });\n getInventories();\n };\n\n const getInventories = async () => {\n try {\n debugger;\n const results = await Promise.all([\n API.graphql(\n graphqlOperation(inventoryItemByLocationByStatus, {\n locationId: selectedLocation.id,\n status: { beginsWith: InventoryStatus.IN_TRANSIT },\n })\n ),\n API.graphql(\n graphqlOperation(inventoryItemByLocationByStatus, {\n locationId: selectedLocation.id,\n status: { beginsWith: InventoryStatus.UNLOADED },\n })\n ),\n API.graphql(\n graphqlOperation(inventoryItemByLocationByStatus, {\n locationId: selectedLocation.id,\n status: { beginsWith: InventoryStatus.REVIEW },\n })\n ),\n API.graphql(\n graphqlOperation(inventoryItemByLocationByStatus, {\n locationId: selectedLocation.id,\n status: { beginsWith: InventoryStatus.STORED },\n })\n ),\n ]);\n const inventoryItemsList = [\n ...results[0].data.inventoryItemByLocationByStatus.items,\n ...results[1].data.inventoryItemByLocationByStatus.items,\n ...results[2].data.inventoryItemByLocationByStatus.items,\n ...results[3].data.inventoryItemByLocationByStatus.items,\n ];\n if (inventoryItemsList.length > 0) {\n inventoryItemsList.sort((a, b) => {\n // Sort by accountName ASCENDING\n const accountNameCompare = a.inventory.accountName.localeCompare(\n b.inventory.accountName\n );\n if (accountNameCompare !== 0) return accountNameCompare;\n\n // If accountName is the same, sort by productName ASCENDING\n const productNameNameCompare = a.inventory.productName.localeCompare(\n b.inventory.productName\n );\n if (productNameNameCompare !== 0) return productNameNameCompare;\n\n // If productName is also the same, sort by quantityOnHand DESCENDING\n return b.quantityOnHand - a.quantityOnHand;\n });\n\n // const loadTypeName = inventoryItemsList[0].inventory.reloadYardCommodity.commodity.locationLoadType.toLowerCase();\n // const sameLoadType = inventoryItemsList.reduce((accumulator, itm) =>\n // accumulator && itm.inventory.reloadYardCommodity.commodity.locationLoadType === loadTypeName, true);\n // if (sameLoadType && selectedLocation.type === LocationType.STRUCTURED\n // && selectedLocation.locationLoad[loadTypeName].selected) {\n // const totalQuantity = inventoryItemsList.reduce((accumulator, itm) => accumulator + itm.quantityOnHand, 0);\n // setTotalQuantity(totalQuantity);\n // setLoadTypeName(loadTypeName[0].toUpperCase() + loadTypeName.substring(1));\n // setShowTotalQuantity(true);\n // }\n dispatch({\n type: \"SET_SELECTED_LOCATION_INVENTORIES\",\n payload: inventoryItemsList,\n });\n }\n } catch (error) {\n logError(\"utilization:LocationCard:getInventories\", error, notify);\n } finally {\n // setMapLoading(false);\n }\n };\n\n const handleAisleChange = async (\n aisleId,\n loadingFlag = true,\n setOriginalLocationBayList = false\n ) => {\n try {\n debugger;\n setMapLoading(loadingFlag);\n if (!aisleId || aisles?.length === 0) return;\n const response = await API.graphql(\n graphqlOperation(locationByAisleBySortKey, { aisleId, limit: 1000 })\n );\n const aisle = aisles.find((itm) => itm.id === aisleId);\n aisle.locations = response.data.locationByAisleBySortKey.items.filter(\n (itm) => itm.active === \"true\"\n );\n\n const { showCapacityDisplay, bayList } = setupAisle(aisle);\n let location;\n if (aisle.type === LocationType.UNSTRUCTURED) {\n location = aisle.locations[0];\n }\n\n const payload = {\n aisle,\n bayList,\n showCapacityDisplay,\n selectedLocation: location,\n };\n if (setOriginalLocationBayList) {\n debugger;\n payload.inventoryItemBayList = bayList;\n }\n dispatch({ type: \"SET_SELECTED_AISLE\", payload });\n debugger;\n if (\n aisle.type === LocationType.STRUCTURED &&\n !aisle.locationLoad.other.selected\n ) {\n const inventoryLoadType =\n currentInventory.reloadYardCommodity.commodity.locationLoadType;\n const locationLoadType = aisle.locationLoad[inventoryLoadType];\n if (\n inventoryLoadType !== LocationLoadType.OTHER &&\n locationLoadType?.selected\n ) {\n dispatch({\n type: \"SET_SELECTED_INVENTORY_ITEM\",\n payload: {\n ...selectedInventoryItem,\n quantityOnHand: 1,\n },\n });\n }\n } else {\n dispatch({\n type: \"SET_SELECTED_INVENTORY_ITEM\",\n payload: {\n ...selectedInventoryItem,\n quantityOnHand: originalInventoryItem.quantityOnHand,\n },\n });\n }\n if (showCapacityDisplay) getShowQuantity();\n } catch (err) {\n logError(\n \"processInboundShipments:InboundAisleMap:handleAisleChange\",\n err,\n notify\n );\n } finally {\n setMapLoading(false);\n }\n };\n\n const getShowQuantity = () => {\n let showValue;\n if (\n currentInventory.reloadYardCommodity.commodity.locationLoadType ===\n \"other\"\n ) {\n showValue = false;\n } else {\n showValue = localStorage.getItem(\"locationCapacityDisplay\");\n showValue = showValue !== null ? JSON.parse(showValue) : false;\n }\n dispatch({ type: \"SET_SHOW_QUANTITY\", payload: showValue });\n };\n\n const setupAisle = (aisle) => {\n const bayList = [];\n if (aisle.type === LocationType.UNSTRUCTURED) {\n return { showCapacityDisplay: false, bayList: [null, [aisle.locations]] };\n }\n const capacityTypeMap = {\n pallet: {},\n box: {},\n container: {},\n superSack: {},\n };\n let showRadio = true;\n\n for (let location of aisle.locations) {\n const bay = location.bay;\n if (!bayList[bay]) bayList[bay] = [];\n const level = location.level;\n if (!bayList[bay][level - 1]) bayList[bay][level - 1] = [];\n bayList[bay][level - 1].push(location);\n\n if (location.locationLoad.other.selected) showRadio = false;\n if (location.locationLoad.pallet.selected)\n capacityTypeMap[\"pallet\"][location.locationLoad.pallet.capacity] = true;\n if (location.locationLoad.box.selected)\n capacityTypeMap[\"box\"][location.locationLoad.box.capacity] = true;\n if (location.locationLoad.container.selected)\n capacityTypeMap[\"container\"][\n location.locationLoad.container.capacity\n ] = true;\n if (location.locationLoad.superSack.selected)\n capacityTypeMap[\"superSack\"][\n location.locationLoad.superSack.capacity\n ] = true;\n }\n debugger;\n let showCapacityDisplay = false;\n if (showRadio) {\n const capacityTypeMapValues = Object.values(capacityTypeMap);\n const numberOfCapacities = capacityTypeMapValues.reduce(\n (total, itm) => (total += Object.keys(itm).length > 0 ? 1 : 0),\n 0\n );\n if (numberOfCapacities === 1) showCapacityDisplay = true;\n }\n\n bayList.splice(0, 1);\n for (let bay of bayList) {\n if (!bay || bay.length === 0) continue;\n for (let level of bay) {\n level.sort((a, b) => {\n return a.position - b.position;\n });\n }\n }\n\n return { showCapacityDisplay, bayList };\n };\n\n // const handleSaveBelow = async () => {\n // const bay = bayList[selectedLocation.bay - 1];\n // const topLocation = bay[bay.length - 1][selectedLocation.position - 1];\n // let levels = bay.filter(level => level[0].level >= selectedLocation.level);\n // if (selectedInventoryItem.location.bay === selectedLocation.bay\n // && selectedInventoryItem.position === selectedLocation.position) {\n // levels = levels.filter(level => level[0].level < selectedInventoryItem.location.level);\n // }\n // levels = levels.map(level => level.filter(\n // itm => itm.position === selectedLocation.position\n // && itm.id !== topLocation.id\n // && itm.id !== selectedInventoryItem.location.id));\n // levels = levels.filter(itm => itm.length > 0);\n // if (levels.length > 0) {\n // try {\n // dispatch({type: \"SET_LOADING\", payload: true});\n // const origLocationToNewLocation = {};\n // const newLocationToOrigLocation = {};\n // for (let level of levels) {\n // for (let location of level) {\n // const newLocation = bay[location.level][location.position - 1];\n // origLocationToNewLocation[location.id] = {...newLocation};\n // newLocationToOrigLocation[newLocation.id] = {...location};\n // }\n // }\n // let promiseList = Object.keys(origLocationToNewLocation).map(locationId => {\n // return API.graphql(graphqlOperation(inventoryItemByLocationByStatusLookup, { locationId }));\n // })\n // const response = await Promise.allSettled(promiseList);\n // const toUpdateInventoryItems = [];\n // for (let levelInveltoryItems of response) {\n // toUpdateInventoryItems.push(...levelInveltoryItems.value.data.inventoryItemByLocationByStatus.items);\n // }\n // debugger;\n // if (!currentInventory.history) currentInventory.history = [];\n // toUpdateInventoryItems.forEach(inventoryItem => {\n // const newLocation = origLocationToNewLocation[inventoryItem.locationId];\n // inventoryItem.locationId = newLocation.id;\n // inventoryItem.aisleId = newLocation.aisleId;\n // inventoryItem.zoneId = newLocation.zoneId;\n // inventoryItem.areaId = newLocation.areaId;\n // const newLocationFullName = getLocationFullName(newLocation);\n // const historyText = `${inventoryItem.quantityOnHand} ${getUnitName(currentInventory.inventoryUnits)} moved `\n // + `from ${inventoryItem.locationFullName} to ${newLocationFullName}`;\n // const newHistory = {\n // type: NoteType.SHIPMENT,\n // date: new Date(),\n // by: window.appUser?.fullName,\n // text: historyText\n // };\n // currentInventory.history.push(newHistory);\n // inventoryItem.locationFullName = newLocationFullName;\n // });\n // promiseList = toUpdateInventoryItems.map(itm => {\n // return API.graphql(graphqlOperation(updateInventoryItemMini, { input: itm }));\n // });\n // Object.values(origLocationToNewLocation).map(itm => {\n // const toUpdateLocation = {\n // id: itm.id,\n // aisleId: itm.aisleId,\n // zoneId: itm.zoneId,\n // areaId: itm.areaId,\n // reloadYardId: itm.reloadYardId,\n // sortKey: itm.sortKey,\n // capacityUsed: newLocationToOrigLocation[itm.id].capacityUsed,\n // };\n // return promiseList.push(API.graphql(graphqlOperation(updateLocationMini, { input: toUpdateLocation })));\n // });\n // const results = await Promise.allSettled(promiseList);\n // const resError = results.find(itm => itm.status === \"rejected\");\n // if (resError) {\n // logError(\"processInboundShipments:InboundAisleMap:handleSaveBelow\", resError, notify);\n // }\n // await handleSave(true);\n // debugger;\n // handleAisleChange(selectedAisle.id);\n // } catch (err) {\n // logError(\"processInboundShipments:InboundAisleMap:handleSaveBelow\", err, notify);\n // } finally {\n // dispatch({type: \"SET_LOADING\", payload: false});\n // }\n // }\n // }\n\n const getGeoLocation = (inventoryItem) => {\n if (navigator.geolocation) {\n try {\n navigator.geolocation.getCurrentPosition((position) => {\n if (position) {\n inventoryItem.latitude = position.coords.latitude;\n inventoryItem.longitude = position.coords.longitude;\n // TODO: fix this issue, happens after electedInventoryItem is updated\n // setSelectedInventoryItem({...selectedInventoryItem});\n }\n });\n } catch (err) {\n logError(\n \"processInboundShipments:InboundAisleMap:handleLocation\",\n err,\n notify\n );\n } finally {\n dispatch({\n type: \"SET_SELECTED_INVENTORY_ITEM\",\n payload: inventoryItem,\n });\n }\n }\n };\n\n const isShipmentInventoryItem = (itm) => {\n return itm.inventory.id === currentInventory.id;\n };\n\n const getFromAisleComponent = () => {\n if (selectedAisle?.id) {\n return selectedAisle.type === LocationType.STRUCTURED ? (\n <StructuredAisle />\n ) : null;\n }\n };\n\n const searchAisleInventories = async () => {\n try {\n if (searchTerm.length === 0) return;\n dispatch({ type: \"SET_LOADING\", payload: true });\n const searchInput = {\n sort: { field: \"productName\", direction: \"asc\" },\n filter: {\n reloadYardId: { eq: window.appUser.reloadYardId },\n status: { eq: InventoryStatus.STORED },\n aisleList: { match: selectedAisle.id },\n },\n limit: 1000,\n };\n const term = searchTerm.toLowerCase();\n searchInput.filter.or = [\n { productCode: { matchPhrasePrefix: `${term}` } },\n { productCode: { wildcard: `*${term}*` } },\n { productName: { matchPhrasePrefix: `${term}` } },\n { productName: { wildcard: `*${term}*` } },\n { accountName: { matchPhrasePrefix: `${term}` } },\n { accountName: { wildcard: `*${term}*` } },\n { lotNumber: { matchPhrase: `${term}` } },\n { lotNumber: { wildcard: `*${term}*` } },\n { railCarNumber: { matchPhrasePrefix: `${term}` } },\n { railCarNumber: { wildcard: `*${term}*` } },\n { customFields: { matchPhrasePrefix: `${term}` } },\n { customFields: { wildcard: `*${term}*` } },\n ];\n const response = await API.graphql(\n graphqlOperation(searchInventorys, searchInput)\n );\n const data = response.data.searchInventorys.items;\n setupAisleInventoryItems(data);\n debugger;\n } catch (err) {\n logError(\n \"processInboundShipments:InboundAisleMap:showInventory\",\n err,\n notify\n );\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n };\n\n const setupAisleInventoryItems = (inventories) => {\n const aisleInventories = [];\n inventories.forEach((inventory) => {\n const inventoryItems = inventory.inventoryItems.items.filter(\n (itm) => itm.aisleId === selectedAisle.id\n );\n aisleInventories.push(...inventoryItems);\n });\n const searchInventoryItemsMap = {};\n aisleInventories.forEach((itm) => {\n const locationInventories = searchInventoryItemsMap[itm.locationId];\n if (!locationInventories) searchInventoryItemsMap[itm.locationId] = [itm];\n else searchInventoryItemsMap[itm.locationId].push(itm);\n });\n dispatch({\n type: \"SET_AISLE_SEARCH_INVENTORIES\",\n payload: searchInventoryItemsMap,\n });\n };\n\n const clearSearchResults = () => {\n setSearchTerm(\"\");\n dispatch({ type: \"SET_AISLE_SEARCH_INVENTORIES\", payload: [] });\n };\n\n const handleDisplayChange = (evt) => {\n setShowQuantity(evt.target.checked);\n };\n\n const setShowQuantity = (value) => {\n // Switch between percentage and quantity\n localStorage.setItem(\"locationCapacityDisplay\", value);\n dispatch({ type: \"SET_SHOW_QUANTITY\", payload: value });\n };\n\n const getLocationCapacity = () => {\n const capacityList = [];\n if (originalInventoryItem.location.type === LocationType.UNSTRUCTURED) {\n capacityList.push(\n <Grid item xs={12}>\n <LocationCapacity aisle={selectedAisle} />\n </Grid>\n );\n } else if (originalInventoryItem.location.locationLoad[\"other\"].selected) {\n capacityList.push(\n <Grid item xs={12}>\n <StructuredLocationCapacity\n location={selectedLocation}\n updateFn={() => handleAisleChange(selectedAisle.id)}\n />\n </Grid>\n );\n }\n if (selectedLocation) {\n if (selectedLocation.type === LocationType.UNSTRUCTURED) {\n if (selectedLocation.id !== selectedInventoryItem.location.id) {\n capacityList.push(\n <Grid item xs={12}>\n <LocationCapacity aisle={selectedInventoryItem.location.aisle} />\n </Grid>\n );\n }\n } else if (selectedLocation.locationLoad[\"other\"].selected) {\n const isDisabled =\n selectedLocation.id === selectedInventoryItem.location.id;\n if (selectedLocation.id !== selectedInventoryItem.location.id) {\n capacityList.push(\n <Grid item xs={12}>\n <StructuredLocationCapacity\n location={selectedLocation}\n disabled={isDisabled}\n updateFn={() => handleAisleChange(selectedAisle.id)}\n />\n </Grid>\n );\n }\n }\n }\n return capacityList.reverse();\n };\n\n const getViewInventoriesAlignment = () => {\n return isMedium ? \"flex-end\" : \"flex-start\";\n };\n\n return (\n <>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <Divider />\n </Grid>\n <Backdrop\n className={classes.backdrop}\n style={{ zIndex: 1001 }}\n open={mapLoading}\n >\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <AisleControl\n handleSave={handleSave}\n handleAisleChange={handleAisleChange}\n handleAreaChange={handleAreaChange}\n handleZoneChange={handleZoneChange}\n isSaveButtonDisabled={isSaveButtonDisabled}\n classes={classes}\n />\n\n {selectedAisle?.type === LocationType.STRUCTURED && (\n <Grid item xs={12} md={6}>\n <SearchInput\n handleSearch={searchAisleInventories}\n clear={clearSearchResults}\n term={searchTerm}\n setTerm={setSearchTerm}\n termLength={3}\n />\n </Grid>\n )}\n {selectedAisle?.type === LocationType.STRUCTURED &&\n showCapacityDisplay && (\n <Grid item xs={12} sm={6} md={3}>\n <Box\n display=\"flex\"\n justifyContent={isMedium ? \"flex-end\" : \"flex-start\"}\n >\n <FormControlLabel\n className={isMedium ? classes.spacer : \"\"}\n style={{ paddingLeft: 4 }}\n control={\n <Switch\n checked={showInventoryQuantity}\n onChange={handleDisplayChange}\n color=\"primary\"\n />\n }\n label=\"Show quantity\"\n />\n </Box>\n </Grid>\n )}\n {\n <Grid\n item\n xs={12}\n sm={selectedAisle?.type === LocationType.STRUCTURED ? 6 : undefined}\n md={selectedAisle?.type === LocationType.STRUCTURED ? 3 : undefined}\n >\n <Box display=\"flex\" justifyContent={getViewInventoriesAlignment()}>\n <Button\n disabled={\n !selectedLocation || selectedLocationInventories.length === 0\n }\n onClick={() => setShowInventories(true)}\n startIcon={<VisibilityIcon />}\n size=\"large\"\n className={isMedium ? classes.spacer : \"\"}\n style={{ paddingLeft: 4 }}\n >\n View Inventories\n </Button>\n </Box>\n </Grid>\n }\n {getLocationCapacity()}\n </Grid>\n <Grid item xs={12}>\n <Box mt={2} mb={2}></Box>\n </Grid>\n <Grid container item xs={12}>\n {getFromAisleComponent()}\n </Grid>\n\n <Dialog\n open={showInventories}\n onClose={() => setShowInventories(false)}\n fullWidth={true}\n fullScreen={isSmall}\n maxWidth=\"md\"\n >\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">{`${getLocationFullName(\n selectedLocation\n )} inventories`}</Typography>\n <CancelOutlinedIcon\n fontSize=\"large\"\n onClick={() => setShowInventories(false)}\n />\n </Box>\n <DialogContent>\n {selectedLocationInventories.length > 0 && (\n <TableContainer>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Product</TableCell>\n <TableCell>Account</TableCell>\n <TableCell>\n {isSmall ? \"Onhd\" : \"Quantity Onhand\"}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {selectedLocationInventories.map((itm) => (\n <TableRow key={itm.id}>\n <TableCell scope=\"row\">\n <Box\n display=\"flex\"\n alignItems=\"center\"\n component=\"span\"\n >\n {isShipmentInventoryItem(itm) ? (\n <CheckIcon\n style={{ marginRight: 4, color: green[500] }}\n fontSize=\"small\"\n />\n ) : (\n <CloseIcon\n style={{ marginRight: 4 }}\n fontSize=\"small\"\n />\n )}\n {itm.inventory.productName}\n </Box>\n </TableCell>\n <TableCell>{itm.inventory.accountName}</TableCell>\n <TableCell>{`${itm.quantityOnHand} ${\n !isSmall\n ? getUnitName(currentInventory.inventoryUnits)\n : \"\"\n }`}</TableCell>\n {/* <TableCell align=\"right\">{getInventoryPrimaryField(itm.inventory)}</TableCell> */}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n )}\n {/* {\n showTotalQuantity && <Box mt={1}>\n {`Total quantity: ${totalQuantity} ${loadTypeName}`}\n </Box>\n } */}\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setShowInventories(false)}>Close</Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useNotify, useRedirect } from \"react-admin\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n getInventorieAiles,\n getInventoryItem,\n} from \"../../../../graphql/inventory/custom-queries\";\nimport { aisleByActiveByZoneBySortKey } from \"../../../../graphql/reloadyard/custom-queries\";\nimport {\n createInventoryItem,\n deleteInventoryItemMini,\n updateInventorySearch,\n updateInventoryItemMini,\n} from \"../../../../graphql/inventory/custom-mutations\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n CardActions,\n Button,\n Grid,\n IconButton,\n TextField,\n Typography,\n CircularProgress,\n Box,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n List,\n ListItem,\n ListItemText,\n Tabs,\n Tab,\n Backdrop,\n CardContent,\n} from \"@material-ui/core\";\nimport { ExpandMoreIcon } from \"../../../../components/common\";\nimport { format } from \"date-fns\";\nimport CheckBoxOutlineBlankOutlinedIcon from \"@material-ui/icons/CheckBoxOutlineBlankOutlined\";\nimport HighlightOffIcon from \"@material-ui/icons/HighlightOff\";\nimport {\n AreaType,\n LocationLoadType,\n LocationType,\n MAX_PHOTO_NUM_INVENTORY,\n} from \"../../../../utils/constants\";\nimport ErrorCard from \"../../../../components/ErrorCard\";\nimport { logError } from \"../../../../utils/appUtils\";\nimport { NoteType, LotTypeNames } from \"../../../../utils/constants\";\nimport { handleModelPhotos } from \"../../../../utils/fileUtils\";\nimport {\n canRelocate,\n filterAisles,\n filterAreas,\n filterZones,\n getLocationFullName,\n isUnmanagedLocation,\n promiseSetCapacityUsed,\n setInventoryAisleList,\n} from \"../../../../utils/locationUtils\";\nimport { getUnitName } from \"../../../../utils/loadTypeUtils\";\nimport { trimDecimal } from \"../../../../utils/utils\";\nimport InventoryPhotos from \"../../../../components/common/InventoryPhotos\";\nimport CrewCard from \"../../../../components/common/CrewCard\";\nimport { CustomFieldsMobile } from \"../../../../components/common/CustomFields\";\nimport { AisleMap } from \"./AisleMap\";\nimport { useInventorySearchContext } from \"../context\";\n\nfunction a11yProps(index) {\n return { id: `inventory-tab-${index}` };\n}\n\nconst useStyles = makeStyles((theme) => ({\n actions: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n photoErrorSection: {\n paddingLeft: theme.spacing(2),\n },\n progress: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 300,\n },\n notes: {\n border: \"0px solid rgba(0, 0, 0, .25)\",\n boxShadow: \"none\",\n \"&:not(:last-child)\": {\n borderBottom: 0,\n },\n \"&:before\": {\n display: \"none\",\n },\n \"&$expanded\": {\n margin: \"auto\",\n },\n },\n backdrop: {\n zIndex: 1001,\n },\n}));\n\nexport const InventoryRelocateCard = ({ history, match }) => {\n const notify = useNotify();\n const classes = useStyles();\n const redirect = useRedirect();\n const imgRef = useRef();\n const [invalidIdError, setInvalidIdError] = useState();\n const [note, setNote] = useState();\n const [tabValue, setTabValue] = React.useState(0);\n const { state, dispatch } = useInventorySearchContext();\n const {\n currentInventory,\n areas,\n zones,\n selectedArea,\n selectedInventoryItem,\n loading,\n bayList,\n selectedLocation,\n originalInventoryItem,\n disableRelocateValidation,\n inventoryItemBayList,\n selectedLocationInventories,\n } = state;\n\n useEffect(() => {\n doGetInventoryItem(match.params.id);\n return dispatch({ type: \"CLEAR_INVENTORY_ITEM\" });\n }, []);\n\n const doGetInventoryItem = async (id) => {\n dispatch({ type: \"SET_LOADING\", payload: true });\n debugger;\n try {\n const response = await API.graphql(\n graphqlOperation(getInventoryItem, { id })\n );\n const inventoryItem = response.data.getInventoryItem;\n if (inventoryItem) {\n const currentInventory = inventoryItem.inventory;\n const areas = filterAreas(\n window.appUser.reloadYard.areas.items,\n currentInventory?.reloadYardCommodity,\n AreaType.TRACK\n );\n areas.forEach((area) => {\n area.zones.items = filterZones(\n area.zones.items,\n currentInventory.reloadYardCommodityId,\n currentInventory.accountId\n );\n });\n dispatch({ type: \"SET_AREAS\", payload: areas });\n const inventoryArea = areas.find(\n (itm) => itm.id === inventoryItem.areaId\n );\n let zones = inventoryArea.zones.items.filter(\n (zone) => zone.active === \"true\"\n );\n zones = zones.filter(\n (zone) =>\n !zone.accountId ||\n zone.accountId === inventoryItem.inventory.accountId\n );\n\n const aisles = await getAisles(inventoryItem);\n dispatch({ type: \"SET_ZONES\", payload: { zones, aisles } });\n dispatch({\n type: \"SET_SELECTED_INVENTORY_ITEM\",\n payload: inventoryItem,\n });\n dispatch({\n type: \"SET_ORIGINAL_INVENTORY_ITEM\",\n payload: { ...inventoryItem },\n });\n } else {\n setInvalidIdError(`Inventory ID ${id} doesn't exist.`);\n }\n } catch (err) {\n logError(\n \"inventorySearch:InventoryRelocateCard:getInventory\",\n err,\n notify\n );\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n };\n\n const getAisles = async (inventoryItem) => {\n debugger;\n const aislesResponse = await API.graphql(\n graphqlOperation(aisleByActiveByZoneBySortKey, {\n zoneId: inventoryItem.zoneId,\n activeSortKey: { beginsWith: { active: \"true\" } },\n limit: 1000,\n })\n );\n const aisles = filterAisles(\n aislesResponse.data.aisleByActiveByZoneBySortKey.items,\n inventoryItem.inventory\n );\n return aisles;\n };\n\n const getZoneAisles = async (zone) => {\n try {\n const aislesResponse = await API.graphql(\n graphqlOperation(aisleByActiveByZoneBySortKey, {\n zoneId: zone.id,\n activeSortKey: { beginsWith: { active: \"true\" } },\n limit: 1000,\n })\n );\n const aisles = filterAisles(\n aislesResponse.data.aisleByActiveByZoneBySortKey.items,\n selectedInventoryItem.inventory\n );\n return aisles;\n } catch (err) {\n logError(\n \"inventorySearch:InventoryRelocateCard:getZoneAisles\",\n err,\n notify\n );\n }\n };\n\n const handleAreaChange = (areaId) => {\n debugger;\n if (!areaId) return;\n else {\n const area = areas.find((itm) => itm.id === areaId);\n let zones = area.zones.items.filter((zone) => zone.active === \"true\");\n zones = zones.filter(\n (zone) =>\n !zone.accountId ||\n zone.accountId === selectedInventoryItem.inventory.accountId\n );\n const zone = zones.length > 0 ? zones[0] : \"\";\n dispatch({\n type: \"SET_SELECTED_AREA\",\n payload: {\n zones,\n selectedArea: area,\n selectedZone: zone,\n },\n });\n }\n };\n\n const handleZoneChange = async (zoneId) => {\n if (!zoneId) return;\n const zone = zones.find((itm) => itm.id === zoneId);\n dispatch({ type: \"SET_SELECTED_ZONE\", payload: zone });\n const aisles = await getZoneAisles(zone);\n dispatch({ type: \"SET_AISLES\", payload: aisles });\n };\n\n const saveInventory = async (inventory) => {\n debugger;\n let response = await API.graphql(\n graphqlOperation(getInventorieAiles, { id: inventory.id })\n );\n const dbInventory = response.data.getInventorie;\n\n setInventoryAisleList(dbInventory);\n const toUpdateInventory = { ...inventory };\n toUpdateInventory.productId = toUpdateInventory.productId || \"\";\n toUpdateInventory.aisleList = dbInventory.aisleList;\n toUpdateInventory.locationId = \"\";\n delete toUpdateInventory.account;\n delete toUpdateInventory.inboundShipment;\n delete toUpdateInventory.outboundShipment;\n delete toUpdateInventory.shipmentLineItems;\n delete toUpdateInventory.reloadYardCommodity;\n delete toUpdateInventory.product;\n delete toUpdateInventory.location;\n delete toUpdateInventory.area;\n delete toUpdateInventory.createdAt;\n delete toUpdateInventory.updatedAt;\n delete toUpdateInventory.inventoryItems;\n response = await API.graphql(\n graphqlOperation(updateInventorySearch, { input: toUpdateInventory })\n );\n const updatedInventory = response.data.updateInventorie;\n dispatch({ type: \"UPDATE_CURRENT_INVENTORY\", payload: updatedInventory });\n };\n\n const handleInventoryPhotos = async (photos, selectedPhotoIdx) => {\n await handleModelPhotos({\n photos,\n model: currentInventory,\n saveFn: saveInventory,\n maxNumOfPhotos: MAX_PHOTO_NUM_INVENTORY,\n selectedPhotoIdx,\n notify,\n redirect,\n });\n };\n\n const isSaveButtonDisabled = () => {\n if (!selectedLocation || !selectedInventoryItem) return true;\n return !canRelocate(\n bayList,\n selectedLocation,\n selectedInventoryItem,\n currentInventory,\n disableRelocateValidation,\n inventoryItemBayList\n );\n };\n\n const handleSave = async () => {\n try {\n debugger;\n if (selectedLocation.id === originalInventoryItem.location.id) return;\n dispatch({ type: \"SET_LOADING\", payload: true });\n if (!currentInventory.history) currentInventory.history = [];\n const promiseList = [];\n const quantity = selectedInventoryItem.quantityOnHand;\n const moveHistoryText =\n `${quantity} ${getUnitName(currentInventory.inventoryUnits)} ` +\n `moved from ${getLocationFullName(originalInventoryItem.location)} ` +\n `to ${getLocationFullName(selectedLocation)}`;\n const newHistory = {\n type: NoteType.SHIPMENT,\n date: new Date(),\n by: window.appUser?.fullName,\n text: moveHistoryText,\n };\n let toUpdateInventoryItem = { ...selectedInventoryItem };\n if (!toUpdateInventoryItem.history) toUpdateInventoryItem.history = [];\n toUpdateInventoryItem.history.push(newHistory);\n const similarInventoryItem = selectedLocationInventories.find(\n (itm) => itm.inventory.id === originalInventoryItem.inventory.id\n );\n\n if (\n selectedInventoryItem.quantityOnHand ===\n originalInventoryItem.quantityOnHand\n ) {\n if (similarInventoryItem && isUnmanagedLocation(selectedLocation)) {\n // there is a similar inventory item in the new location, merge the two inventory items\n // and delete the from inventory item\n toUpdateInventoryItem = { ...similarInventoryItem };\n toUpdateInventoryItem.history.push(newHistory);\n toUpdateInventoryItem.quantityOnHand +=\n selectedInventoryItem.quantityOnHand;\n promiseList.push(setLocationCapacity(true, originalInventoryItem));\n promiseList.push(setLocationCapacity(false, toUpdateInventoryItem));\n promiseList.push(doDeleteInventoryItem(originalInventoryItem));\n promiseList.push(doUpdateInventoryItem(toUpdateInventoryItem));\n } else {\n // change the inventory item location to the new location\n toUpdateInventoryItem.areaId = selectedLocation.areaId;\n toUpdateInventoryItem.zoneId = selectedLocation.zoneId;\n toUpdateInventoryItem.aisleId = selectedLocation.aisleId;\n toUpdateInventoryItem.locationId = selectedLocation.id;\n toUpdateInventoryItem.location = selectedLocation;\n toUpdateInventoryItem.history.push(newHistory);\n toUpdateInventoryItem.locationFullName =\n getLocationFullName(selectedLocation);\n promiseList.push(setLocationCapacity(true, originalInventoryItem));\n promiseList.push(setLocationCapacity(false, toUpdateInventoryItem));\n promiseList.push(doUpdateInventoryItem(toUpdateInventoryItem));\n }\n } else {\n const remaingQuantity = trimDecimal(\n originalInventoryItem.quantityOnHand -\n selectedInventoryItem.quantityOnHand\n );\n const toUpdateOriginalInventoryItem = { ...originalInventoryItem };\n toUpdateOriginalInventoryItem.quantityOnHand = remaingQuantity;\n toUpdateOriginalInventoryItem.history.push(newHistory);\n promiseList.push(doUpdateInventoryItem(toUpdateOriginalInventoryItem));\n promiseList.push(\n setLocationCapacity(true, toUpdateOriginalInventoryItem)\n );\n if (similarInventoryItem && isUnmanagedLocation(selectedLocation)) {\n // there is a similar inventory item in the new location, merge the two\n toUpdateInventoryItem = { ...similarInventoryItem };\n toUpdateInventoryItem.quantityOnHand +=\n selectedInventoryItem.quantityOnHand;\n toUpdateInventoryItem.history.push(newHistory);\n promiseList.push(doUpdateInventoryItem(toUpdateInventoryItem));\n promiseList.push(setLocationCapacity(false, toUpdateInventoryItem));\n } else {\n // create a new inventory item\n toUpdateInventoryItem = { ...selectedInventoryItem };\n toUpdateInventoryItem.areaId = selectedLocation.areaId;\n toUpdateInventoryItem.zoneId = selectedLocation.zoneId;\n toUpdateInventoryItem.aisleId = selectedLocation.aisleId;\n toUpdateInventoryItem.locationId = selectedLocation.id;\n toUpdateInventoryItem.location = selectedLocation;\n toUpdateInventoryItem.locationFullName =\n getLocationFullName(selectedLocation);\n toUpdateInventoryItem.history.push(newHistory);\n promiseList.push(doCreateInventoryItem(toUpdateInventoryItem));\n promiseList.push(setLocationCapacity(false, toUpdateInventoryItem));\n }\n }\n\n const results = await Promise.allSettled(promiseList);\n const resError = results.find((itm) => itm.status === \"rejected\");\n if (resError) {\n logError(\n \"InventorySearch:InventoryRelocateCard:handleSave\",\n resError,\n notify\n );\n }\n\n if (note) {\n const newNote = {\n date: new Date(),\n by: window.appUser?.fullName,\n type: NoteType.GENERIC,\n text: note,\n };\n if (currentInventory.notes) currentInventory.notes.push(newNote);\n else currentInventory.notes = [newNote];\n }\n await saveInventory(currentInventory);\n dispatch({ type: \"CLEAR_SEARCH\", payload: \"\" });\n dispatch({ type: \"CLEAR_INVENTORY_ITEM\" });\n history.replace(\"/search\");\n } catch (err) {\n logError(\n \"inventorySearch:InventoryRelocateCard:handleSave\",\n err,\n notify,\n redirect\n );\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: false });\n }\n };\n\n // const handleSave = async (saveBelowFlag=false) => {\n // \ttry {\n // debugger;\n // if (selectedLocation.id === originalInventoryItem.location.id) return;\n // debugger;\n // setLoading(true);\n // let historyText;\n // if (!currentInventory.history) currentInventory.history = [];\n // const similarInventoryItem = selectedLocationInventories.find(itm => itm.inventory.id === originalInventoryItem.inventory.id);\n // const promiseList = [];\n // let toUpdateInventoryItem;\n\n // if (saveBelowFlag) {\n // toUpdateInventoryItem = {...selectedInventoryItem};\n // toUpdateInventoryItem.areaId = selectedLocation.areaId;\n // toUpdateInventoryItem.zoneId = selectedLocation.zoneId;\n // toUpdateInventoryItem.aisleId = selectedLocation.aisleId;\n // toUpdateInventoryItem.locationId = selectedLocation.id;\n // toUpdateInventoryItem.location = {...selectedLocation, capacityUsed: 0};\n // toUpdateInventoryItem.locationFullName = getLocationFullName(selectedLocation);\n // promiseList.push(setLocationCapacity(false, toUpdateInventoryItem));\n // if (!(selectedInventoryItem.location.bay === selectedLocation.bay\n // && selectedInventoryItem.location.position === selectedLocation.position)) {\n // promiseList.push(setLocationCapacity(true, originalInventoryItem));\n // }\n // promiseList.push(doUpdateInventoryItem(toUpdateInventoryItem));\n // } else {\n // if (selectedInventoryItem.quantityOnHand === originalInventoryItem.quantityOnHand) {\n // if (similarInventoryItem) {\n // toUpdateInventoryItem = {...similarInventoryItem};\n // toUpdateInventoryItem.quantityOnHand += selectedInventoryItem.quantityOnHand;\n // promiseList.push(doDeleteInventoryItem(originalInventoryItem));\n // promiseList.push(setLocationCapacity(true, originalInventoryItem));\n // promiseList.push(setLocationCapacity(false, toUpdateInventoryItem, similarInventoryItem));\n // } else {\n // toUpdateInventoryItem = {...selectedInventoryItem};\n // toUpdateInventoryItem.areaId = selectedLocation.areaId;\n // toUpdateInventoryItem.zoneId = selectedLocation.zoneId;\n // toUpdateInventoryItem.aisleId = selectedLocation.aisleId;\n // toUpdateInventoryItem.locationId = selectedLocation.id;\n // toUpdateInventoryItem.location = selectedLocation;\n // toUpdateInventoryItem.locationFullName = getLocationFullName(selectedLocation);\n // promiseList.push(setLocationCapacity(false, toUpdateInventoryItem));\n // promiseList.push(setLocationCapacity(true, originalInventoryItem));\n // }\n // promiseList.push(doUpdateInventoryItem(toUpdateInventoryItem));\n // } else {\n // const remaingQuantity = originalInventoryItem.quantityOnHand - selectedInventoryItem.quantityOnHand;\n // const toUpdateOriginalInventoryItem = {...originalInventoryItem};\n // toUpdateOriginalInventoryItem.quantityOnHand = remaingQuantity;\n // promiseList.push(doUpdateInventoryItem(toUpdateOriginalInventoryItem));\n // promiseList.push(setLocationCapacity(true, toUpdateOriginalInventoryItem, originalInventoryItem));\n // let toUpdateInventoryItem;\n // if (similarInventoryItem) {\n // toUpdateInventoryItem = {...similarInventoryItem};\n // toUpdateInventoryItem.quantityOnHand += selectedInventoryItem.quantityOnHand;\n // promiseList.push(doUpdateInventoryItem(similarInventoryItem));\n // promiseList.push(setLocationCapacity(false, toUpdateInventoryItem, similarInventoryItem));\n // } else {\n // toUpdateInventoryItem = {...selectedInventoryItem};\n // toUpdateInventoryItem.areaId = selectedLocation.areaId;\n // toUpdateInventoryItem.zoneId = selectedLocation.zoneId;\n // toUpdateInventoryItem.aisleId = selectedLocation.aisleId;\n // toUpdateInventoryItem.locationId = selectedLocation.id;\n // toUpdateInventoryItem.location = selectedLocation;\n // toUpdateInventoryItem.locationFullName = getLocationFullName(selectedLocation);\n // promiseList.push(doCreateInventoryItem(toUpdateInventoryItem));\n // promiseList.push(setLocationCapacity(false, toUpdateInventoryItem));\n // }\n // }\n // }\n\n // const results = await Promise.allSettled(promiseList)\n // const resError = results.find(itm => itm.status === \"rejected\");\n // if (resError) {\n // logError(\"InventorySearch:InventoryRelocateCard:handleSave\", resError, notify);\n // }\n\n // const quantity = selectedInventoryItem.quantityOnHand\n // historyText = `${quantity} ${getUnitName(currentInventory.inventoryUnits)} `\n // + `moved from ${getLocationFullName(originalInventoryItem.location)} `\n // + `to ${getLocationFullName(selectedLocation)}`;\n // const newHistory = {\n // type: NoteType.SHIPMENT,\n // date: new Date(),\n // by: window.appUser?.fullName,\n // text: historyText\n // };\n // currentInventory.history.push(newHistory);\n // \t\tif (note) {\n // \t\t\tconst newNote = {\n // \t\t\t\tdate: new Date(),\n // \t\t\t\tby: window.appUser?.fullName,\n // \t\t\t\ttype: NoteType.GENERIC,\n // \t\t\t\ttext: note,\n // \t\t\t};\n // \t\t\tif (currentInventory.notes)\n // \t\t\t\tcurrentInventory.notes.push(newNote);\n // \t\t\telse currentInventory.notes = [newNote];\n // \t\t}\n // await saveInventory(currentInventory);\n // // history.replace(\"/search\");\n // \t} catch (err) {\n // \t\tlogError(\"inventorySearch:InventoryRelocateCard:handleSave\", err, notify, redirect);\n // \t} finally {\n // setLoading(false);\n // }\n // };\n\n const doCreateInventoryItem = async (inventoryItem) => {\n const toCreateInventoryItem = { ...inventoryItem };\n delete toCreateInventoryItem.id;\n delete toCreateInventoryItem.location;\n delete toCreateInventoryItem.inventory;\n delete toCreateInventoryItem.createdAt;\n delete toCreateInventoryItem.updatedAt;\n return API.graphql(\n graphqlOperation(createInventoryItem, { input: toCreateInventoryItem })\n );\n };\n\n const doUpdateInventoryItem = async (inventoryItem) => {\n const toUpdateInventoryItem = { ...inventoryItem };\n delete toUpdateInventoryItem.createdAt;\n delete toUpdateInventoryItem.inventory;\n delete toUpdateInventoryItem.location;\n delete toUpdateInventoryItem.locationLoad;\n delete toUpdateInventoryItem.seals;\n delete toUpdateInventoryItem.updatedAt;\n return API.graphql(\n graphqlOperation(updateInventoryItemMini, {\n input: toUpdateInventoryItem,\n })\n );\n };\n\n const doDeleteInventoryItem = async (inventoryItem) => {\n const input = { id: inventoryItem.id };\n return API.graphql(graphqlOperation(deleteInventoryItemMini, { input }));\n };\n\n const handleCancel = () => {\n dispatch({ type: \"CLEAR_INVENTORY_ITEM\" });\n history.goBack();\n };\n\n const setLocationCapacity = async (removeFlag = false, inventoryItem) => {\n if (\n isUnmanagedLocation(inventoryItem.location) ||\n disableRelocateValidation\n )\n return Promise.resolve();\n const inventoryLoadType =\n currentInventory.reloadYardCommodity.commodity.locationLoadType;\n const locationLoadType =\n inventoryItem.location.locationLoad[inventoryLoadType];\n if (locationLoadType.selected) {\n let totalCapacity;\n // Adding or removing from structured location, always one load unit\n if (removeFlag) {\n totalCapacity =\n inventoryItem.location.capacityUsed - locationLoadType.capacity;\n } else {\n totalCapacity =\n inventoryItem.location.capacityUsed + locationLoadType.capacity;\n }\n if (totalCapacity === 0) {\n inventoryItem.location.productId = null;\n inventoryItem.location.productName = null;\n } else {\n inventoryItem.location.productId = currentInventory.productId;\n inventoryItem.location.productName = currentInventory.productName;\n }\n return promiseSetCapacityUsed(inventoryItem.location, totalCapacity);\n }\n };\n\n const getNoteText = (note) => {\n if (!note) return \"\";\n return `${format(new Date(note.date), \"MM/dd/yyyy hh:mm a\")} by ${\n note.by\n }: ${note.text}`;\n };\n\n const handleTabChange = (event, newValue) => {\n setTabValue(newValue);\n };\n\n const getRelocateText = () => {\n if (\n selectedLocation &&\n selectedLocation.type === LocationLoadType.STRUCTURED\n ) {\n if (selectedLocation.id !== selectedInventoryItem.location.id) {\n return (\n <Grid item xs={12}>\n <Typography>\n Relocate from {selectedInventoryItem.locationFullName} to{\" \"}\n {getLocationFullName(selectedLocation)}\n </Typography>\n </Grid>\n );\n }\n return (\n <Grid item xs={12}>\n <Typography>\n Relocate from {selectedInventoryItem.locationFullName} to ...\n </Typography>\n </Grid>\n );\n }\n return null;\n };\n\n if (invalidIdError) return <ErrorCard error={invalidIdError} />;\n\n return (\n <div ref={imgRef}>\n <CrewCard\n title={currentInventory.productName}\n icon={<CheckBoxOutlineBlankOutlinedIcon fontSize=\"large\" />}\n subheader={currentInventory.accountName}\n action={\n <IconButton edge=\"start\" onClick={handleCancel}>\n <HighlightOffIcon fontSize=\"large\" />\n </IconButton>\n }\n showDivider={false}\n >\n <CardContent>\n <Backdrop open={loading} className={classes.backdrop}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Grid container spacing={2}>\n <Grid item sm={12} xs={12}>\n <InventoryPhotos\n id={currentInventory.id}\n maxSize={MAX_PHOTO_NUM_INVENTORY}\n saveModel={handleInventoryPhotos}\n // handleLoading={handlePhotoLoading}\n photos={currentInventory.photos ? currentInventory.photos : []}\n imgRef={imgRef}\n />\n </Grid>\n <Grid item sm={6} xs={12}>\n <Typography>Lot number: {currentInventory.lotNumber}</Typography>\n </Grid>\n <Grid item sm={6} xs={12}>\n <Typography>\n Lot type: {LotTypeNames[currentInventory.lotType]}\n </Typography>\n </Grid>\n\n <Grid item sm={6} xs={12}>\n <Typography>\n Quantity onhand: {currentInventory.quantityOnHand}\n </Typography>\n </Grid>\n <Grid item sm={6} xs={12}>\n <Typography>\n Date received:{\" \"}\n {currentInventory.deliveryDateTime &&\n currentInventory.deliveryDateTime &&\n `${format(\n new Date(currentInventory.deliveryDateTime),\n \"MM/dd/yyyy\"\n )}`}\n </Typography>\n </Grid>\n {currentInventory.productCode && (\n <Grid item xs={12}>\n <Typography>\n Product code: {currentInventory.productCode}\n </Typography>\n </Grid>\n )}\n {currentInventory.customFields && (\n <Grid item xs={12}>\n <CustomFieldsMobile\n recordFields={currentInventory.customFields}\n accountFields={currentInventory.account.inventoryCustomFields}\n width={6}\n />\n </Grid>\n )}\n {selectedArea && (\n <>\n <Grid item sm={12}>\n <AisleMap\n handleSave={handleSave}\n handleAreaChange={handleAreaChange}\n handleZoneChange={handleZoneChange}\n isSaveButtonDisabled={isSaveButtonDisabled}\n />\n </Grid>\n {getRelocateText()}\n </>\n )}\n <Grid item sm={12} xs={12}>\n <TextField\n name=\"notes\"\n id=\"notes\"\n label=\"Notes\"\n multiline\n minRows={3}\n required={false}\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n onChange={(evt) => setNote(evt.target.value)}\n helperText={false}\n SelectProps={{\n native: true,\n }}\n />\n </Grid>\n <Grid item sm={12} xs={12}>\n <Accordion className={classes.notes}>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n id=\"notes-header\"\n >\n <Typography>Notes and History</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Grid item sm={12} xs={12}>\n <Tabs value={tabValue} onChange={handleTabChange}>\n <Tab label=\"Notes\" {...a11yProps(0)} />\n <Tab label=\"History\" {...a11yProps(1)} />\n </Tabs>\n\n <TabPanel value={tabValue} index={0}>\n {currentInventory.notes?.length > 0 && (\n <Grid item sm={12} xs={12}>\n <List dense disablePadding>\n {currentInventory.notes &&\n currentInventory.notes\n .map((note, idx) => (\n <ListItem disableGutters key={idx}>\n <ListItemText>\n {getNoteText(note)}\n </ListItemText>\n </ListItem>\n ))\n .reverse()}\n </List>\n </Grid>\n )}\n </TabPanel>\n <TabPanel value={tabValue} index={1}>\n {selectedInventoryItem?.history?.length > 0 && (\n <Grid item sm={12} xs={12}>\n <List dense disablePadding>\n {selectedInventoryItem.history\n .map((note, idx) => (\n <ListItem disableGutters key={idx}>\n <ListItemText>\n {getNoteText(note)}\n </ListItemText>\n </ListItem>\n ))\n .reverse()}\n </List>\n </Grid>\n )}\n </TabPanel>\n </Grid>\n </AccordionDetails>\n </Accordion>\n </Grid>\n </Grid>\n </CardContent>\n <CardActions className={classes.actions}>\n <Button\n onClick={handleSave}\n color=\"primary\"\n size=\"large\"\n disabled={isSaveButtonDisabled()}\n >\n Save\n </Button>\n <Button onClick={handleCancel} size=\"large\">\n Cancel\n </Button>\n </CardActions>\n </CrewCard>\n </div>\n );\n};\n\nconst TabPanel = (props) => {\n const { children, value, index, ...other } = props;\n\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`wrapped-tabpanel-${index}`}\n aria-labelledby={`wrapped-tab-${index}`}\n {...other}\n >\n {value === index && <Box p={2}>{children}</Box>}\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport {\n CardActions,\n Button,\n Typography,\n Grid,\n useMediaQuery,\n Dialog,\n TableContainer,\n Table,\n TableBody,\n TableHead,\n TableRow,\n TableCell,\n DialogActions,\n DialogContent,\n Box,\n Card,\n CardHeader,\n CardContent,\n} from \"@material-ui/core\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { format } from \"date-fns\";\nimport { AreaType } from \"../../../utils/constants\";\nimport { getUnitName } from \"../../../utils/loadTypeUtils\";\nimport { getInventoryPrimaryField } from \"../../../utils/utils\";\nimport { ExceptionIcon, ScannerIcon } from \"../../../components/common\";\n\nconst useStyles = makeStyles((theme) => ({\n link: {\n color: \"inherit\",\n textDecoration: \"none\",\n padding: theme.spacing(2),\n paddingBottom: theme.spacing(0),\n },\n}));\n\nexport const InventorySearchCard = ({\n inventory,\n match,\n history,\n scannedBarcode,\n}) => {\n const [open, setOpen] = useState(false);\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n if (!inventory) return <></>;\n\n const getFullName = (productName, size = 26) => {\n if (!productName) return \"\";\n if (!isXSmall) return productName;\n if (productName.length <= size) return productName;\n return productName.substring(0, size - 3) + \"...\";\n };\n\n const handleLinkClick = (inventoryItem) => {\n if (inventory.area.areaType === AreaType.TRACK) {\n history.push({\n pathname: \"/trackManagement\",\n state: {\n selectedInventoryItem: inventoryItem,\n returnPath: match.url,\n },\n });\n } else {\n history.push({ pathname: match.url + \"/relocate/\" + inventoryItem.id });\n }\n };\n\n const getPrimaryFieldTypgraphy = () => {\n const inventoryPrimaryField = getInventoryPrimaryField(\n inventory.account,\n inventory\n );\n return (\n <Typography\n color=\"textSecondary\"\n variant=\"body2\"\n >{`${inventoryPrimaryField.label}: ${inventoryPrimaryField.value}`}</Typography>\n );\n };\n\n const isRelocateDisable = (itm) => {\n if (itm.quantityCommitted > 0) return true;\n const area = window.appUser.reloadYard.areas.items.find(\n (area) => area.id === itm.areaId\n );\n return area.areaType === AreaType.BULK;\n };\n\n const getCardHeader = () => {\n return isXSmall ? (\n <CardHeader\n style={{ margin: 0, paddingBottom: 0 }}\n title={\n <Box width={isXSmall ? 300 : 320}>\n <Typography variant=\"h6\" noWrap>\n {inventory.productName}\n </Typography>\n </Box>\n }\n />\n ) : (\n <Typography className={classes.link} variant=\"h6\" noWrap>\n {inventory.productName}\n </Typography>\n );\n };\n\n const handleTimelineClick = () => {\n history.push({ pathname: match.url + \"/timeline/\" + inventory.id });\n };\n\n return (\n <Grid item xs={12} md={3} lg={4} key={inventory.id}>\n <Card elevation={0} variant=\"outlined\" style={{ width: \"100%\" }}>\n {getCardHeader()}\n <CardContent>\n {getPrimaryFieldTypgraphy()}\n <Typography color=\"textSecondary\" variant=\"body2\">\n Account Name: {getFullName(inventory.accountName)}\n </Typography>\n <Typography color=\"textSecondary\" variant=\"body2\">\n Quantity Onhand: {inventory.quantityOnHand}{\" \"}\n {inventory.inventoryUnits}\n </Typography>\n <Typography color=\"textSecondary\" variant=\"body2\">\n Date Received:{\" \"}\n {format(new Date(inventory.deliveryDateTime), \"MM/dd/yyyy\")}\n </Typography>\n <Typography color=\"textSecondary\" variant=\"body2\">\n Product Code:{\" \"}\n {inventory.productCode ? inventory.productCode : \"N/A\"}\n </Typography>\n </CardContent>\n <CardActions>\n <Button color=\"secondary\" onClick={() => setOpen(true)}>\n Locations\n </Button>\n <Button\n disabled={inventory.area.areaType === AreaType.BULK}\n onClick={handleTimelineClick}\n >\n Timeline\n </Button>\n </CardActions>\n </Card>\n <Dialog\n open={open}\n scroll={\"paper\"}\n fullWidth\n fullScreen={isXSmall ? true : false}\n maxWidth=\"md\"\n >\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">Locations</Typography>\n <CancelOutlinedIcon fontSize=\"large\" onClick={() => setOpen(false)} />\n </Box>\n <DialogContent>\n {\n <TableContainer>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell></TableCell>\n <TableCell></TableCell>\n <TableCell>{isXSmall ? \"Loc\" : \"Location\"}</TableCell>\n <TableCell>\n {isXSmall ? \"Onhand\" : \"Quantity Onhand\"}\n </TableCell>\n {!isXSmall && <TableCell>Quantity Committed</TableCell>}\n <TableCell></TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {inventory.inventoryItems.items.map((itm) => (\n <TableRow key={itm.id}>\n <TableCell\n align=\"right\"\n style={{\n padding: 0,\n margin: 0,\n width: 32,\n paddingTop: 8,\n }}\n >\n {scannedBarcode &&\n itm?.barcode?.includes(scannedBarcode) && (\n <ScannerIcon fontSize=\"small\" />\n )}\n </TableCell>\n <TableCell\n align=\"right\"\n style={{\n padding: 0,\n margin: 0,\n width: 32,\n paddingTop: 8,\n }}\n >\n {itm.hasException ? (\n <ExceptionIcon fontSize=\"small\" />\n ) : null}\n </TableCell>\n <TableCell>{itm.locationFullName}</TableCell>\n <TableCell>{`${itm.quantityOnHand} ${\n isXSmall ? \"\" : getUnitName(inventory.inventoryUnits)\n }`}</TableCell>\n {!isXSmall && (\n <TableCell>{`${\n itm.quantityCommitted ? itm.quantityCommitted : 0\n } ${getUnitName(inventory.inventoryUnits)}`}</TableCell>\n )}\n <TableCell>\n <Button\n size=\"small\"\n onClick={() => handleLinkClick(itm)}\n disabled={isRelocateDisable(itm)}\n color=\"primary\"\n >\n Relocate\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n }\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setOpen(false)}>Close</Button>\n </DialogActions>\n </Dialog>\n </Grid>\n );\n};\n","import React, { useState, useEffect } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n searchInventoryItems,\n searchInventorys,\n} from \"../../../graphql/inventory/custom-queries\";\nimport { accountByActiveByNameDropDown } from \"../../../graphql/account/custom-queries\";\nimport { Route } from \"react-router-dom\";\nimport { useNotify, Title } from \"react-admin\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n Grid,\n CircularProgress,\n TextField,\n MenuItem,\n Button,\n InputAdornment,\n IconButton,\n Box,\n Backdrop,\n} from \"@material-ui/core\";\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\nimport { ScannerIcon, SearchIcon, XIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { InventoryStatus } from \"../../../utils/constants\";\nimport { InventoryRelocateCard } from \"./relocate/InventoryRelocateCard\";\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport { InventoryTimeline } from \"./timeline/InventoryTimeline\";\nimport { getAisleFullName } from \"../../../utils/locationUtils\";\nimport { InventorySearchCard } from \"./InventorySearchCard\";\nimport {\n InventorySearchProvider,\n NO_ACCOUNT,\n SELECT_AN_ACCOUNT,\n useInventorySearchContext,\n} from \"./context\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { BarcodeScanDialog } from \"../inboundShipments/BarcodeScanDialog\";\n\nconst useStyles = makeStyles((theme) => ({\n menuSelection: {\n minHeight: \"1rem\",\n },\n searchButton: {\n marginTop: theme.spacing(0.25),\n },\n backdrop: {\n zIndex: 1001,\n },\n}));\n\nconst MAX_INVENTORY_LIMIT = 30;\n\nexport const InventorySearch = ({ match }) => {\n return (\n <InventorySearchProvider>\n <Title title={<ForceTitle title=\"Inventory\" />} />\n <Route\n path={`/search/relocate/:id`}\n exact\n render={(props) => <InventoryRelocateCard {...props} />}\n />\n <Route\n path={`${match.url}/timeline/:id`}\n render={(props) => <InventoryTimeline {...props} />}\n />\n <Route\n path={`${match.url}`}\n exact\n render={(props) => <InventorySearchContainer {...props} />}\n />\n </InventorySearchProvider>\n );\n};\n\nconst InventorySearchContainer = ({ match, history }) => {\n const { state, dispatch } = useInventorySearchContext();\n const {\n allAccounts,\n dbInventories,\n searchInventories,\n selectedSearchAisleId,\n searchAisles,\n noSearch,\n scannedBarcode,\n } = state;\n const [scanDialogOpen, setScanDialogOpen] = useState(false);\n\n const handleScanButtonClick = () => {\n setScanDialogOpen(true);\n };\n\n const handleClearBarcode = () => {\n dispatch({ type: \"SET_INVENTORY_ITEM_SCANNED_BARCODE\", payload: \"\" });\n };\n\n const handleScanClose = () => {\n setScanDialogOpen(false);\n };\n\n const handleSaveBarcode = (scannedBarcode) => {\n dispatch({\n type: \"SET_INVENTORY_ITEM_SCANNED_BARCODE\",\n payload: scannedBarcode,\n });\n setScanDialogOpen(false);\n };\n\n const { searchTerm, selectedAccount } = useSelector(\n (state) => state.data.searchState\n );\n const dispatchRa = useDispatch();\n const [narrowSearchMsg, setNarrowSearchMsg] = useState(\"\");\n const [loading, setLoading] = useState();\n const notify = useNotify();\n const classes = useStyles();\n\n useEffect(() => {\n debugger;\n if (allAccounts?.length === 1) getAccounts();\n if (noSearch) return;\n dispatch({ type: \"NO_SEARCH\", payload: false });\n return () => dispatch({ type: \"CLEAR_SEARCH\" });\n }, []);\n\n const getAccounts = async () => {\n try {\n setLoading(true);\n const response = await API.graphql(\n graphqlOperation(accountByActiveByNameDropDown, {\n reloadYardId: window.appUser?.reloadYardId,\n activeBusinessName: { beginsWith: { active: 'true' } },\n })\n );\n dispatch({\n type: \"SET_ALL_ACCOUNTS\",\n payload: [\n NO_ACCOUNT,\n ...response.data.accountByActiveByName.items.map((acct) => {\n return { id: acct.id, businessName: acct.businessName };\n }),\n ],\n });\n // if (searchTerm || (selectedAccount.businessName && selectedAccount.businessName !== SELECT_AN_ACCOUNT)) {\n // debugger;\n // handleSearch();\n // }\n } catch (err) {\n logError(\"InventorySearch:InventorySearchCard:getAccounts\", err, notify);\n } finally {\n setLoading(false);\n }\n };\n\n const handleSearch = async (searchTerm, selectedSearchAisleId) => {\n try {\n let ids = [];\n if (scannedBarcode) {\n ids = await getInventoriesByInventoryItemBarCode(scannedBarcode);\n }\n\n debugger;\n const limit = MAX_INVENTORY_LIMIT;\n setLoading(true);\n\n const searchInput = {\n sort: { field: \"productName\", direction: \"asc\" },\n filter: {\n reloadYardId: { eq: window.appUser.reloadYardId },\n status: { eq: InventoryStatus.STORED },\n },\n limit,\n };\n\n const andConditions = [];\n\n if (searchTerm) {\n andConditions.push({\n or: [\n { productCode: { matchPhrasePrefix: `${searchTerm}` } },\n { productCode: { wildcard: `*${searchTerm}*` } },\n { productName: { matchPhrasePrefix: `${searchTerm}` } },\n { productName: { wildcard: `*${searchTerm}*` } },\n { lotNumber: { matchPhrasePrefix: `${searchTerm}` } },\n { lotNumber: { wildcard: `*${searchTerm}*` } },\n { poNumber: { matchPhrasePrefix: `${searchTerm}` } },\n { poNumber: { wildcard: `*${searchTerm}*` } },\n { railCarNumber: { matchPhrasePrefix: `${searchTerm}` } },\n { railCarNumber: { wildcard: `*${searchTerm}*` } },\n { customFields: { matchPhrasePrefix: `${searchTerm}` } },\n { customFields: { wildcard: `*${searchTerm}*` } },\n ],\n });\n }\n\n if (ids.length) {\n andConditions.push({\n or: ids.map((id) => ({ id: { eq: id } })),\n });\n }\n\n if (andConditions.length > 0) {\n searchInput.filter.and = andConditions;\n }\n\n if (\n selectedAccount.businessName &&\n selectedAccount.businessName !== SELECT_AN_ACCOUNT\n ) {\n searchInput.filter = {\n ...searchInput.filter,\n accountId: { eq: selectedAccount.id },\n };\n }\n\n const response = await API.graphql(\n graphqlOperation(searchInventorys, searchInput)\n );\n const data = response.data.searchInventorys.items;\n if (data.length >= limit) {\n setNarrowSearchMsg(`More data available, please narrow your search.`);\n notify(\"More data available, narrow your search.\", \"warning\");\n } else {\n setNarrowSearchMsg(\"\");\n }\n dispatch({ type: \"SET_DB_INVENTORIES\", payload: data });\n dispatch({ type: \"SET_SEARCH_INVENTORIES\", payload: data });\n\n if (!selectedSearchAisleId) {\n const aisleMap = {};\n for (let inventory of data) {\n inventory.inventoryItems.items\n .filter(\n (itm) =>\n itm.status === InventoryStatus.STORED ||\n itm.status === InventoryStatus.AGGREGATED\n )\n .forEach((itm) => {\n if (itm.location) {\n const aisle = itm.location.aisle;\n aisle.area = itm.location.area;\n aisle.zone = itm.location.zone;\n aisleMap[aisle.id] = aisle;\n }\n });\n }\n const aisles = Object.values(aisleMap);\n aisles.sort((a, b) => {\n const aName = getAisleFullName(a);\n const bName = getAisleFullName(b);\n return aName.localeCompare(bName);\n });\n dispatch({\n type: \"SET_SEARCH_AISLES\",\n payload: [{ id: \"\", value: \"\" }, ...aisles],\n });\n } else {\n handleAisleChange(selectedSearchAisleId);\n }\n setLoading(false);\n } catch (err) {\n logError(\"InventorySearch:handleSearch\", err, notify);\n setLoading(false);\n }\n };\n\n const getInventoriesByInventoryItemBarCode = async (barcode) => {\n try {\n const searchInput = {\n filter: {\n reloadYardId: { eq: window.appUser.reloadYardId },\n or: [\n { barcode: { matchPhrasePrefix: barcode } },\n { barcode: { wildcard: `*${barcode}*` } },\n ],\n },\n limit: 1000,\n };\n\n const response = await API.graphql(\n graphqlOperation(searchInventoryItems, searchInput)\n );\n const items = response.data.searchInventoryItems.items;\n if (items.length) {\n return [...new Set(items.map((item) => item.inventoryId))];\n } else {\n return [];\n }\n } catch (err) {\n logError(\n \"InventorySearch:getInventoriesByInventoryItemBarCode\",\n err,\n notify\n );\n }\n };\n\n const setSearchTerm = (value) => {\n dispatch({ type: \"SET_LOADING\", payload: { isLoading: false } });\n dispatchRa({ type: \"SET_SEARCH_TERM\", payload: value });\n\n // dispatch({type: \"SET_SEARCH_INVENTORIES\", payload: []});\n // setAisles([]);\n // setSelectedAisle(null);\n };\n\n const handleAisleChange = (aisleId) => {\n debugger;\n dispatch({ type: \"SET_SEARCH_SELECTED_AISLE\", payload: aisleId });\n if (aisleId) {\n const newInventories = dbInventories.filter((itm) =>\n itm.inventoryItems.items.find((invItm) => invItm.aisleId === aisleId)\n );\n dispatch({ type: \"SET_SEARCH_INVENTORIES\", payload: newInventories });\n } else {\n dispatch({ type: \"SET_SEARCH_INVENTORIES\", payload: dbInventories });\n }\n };\n\n const clear = () => {\n debugger;\n dispatchRa({ type: \"SET_SEARCH_TERM\", payload: \"\" });\n dispatch({ type: \"SET_INVENTORY_ITEM_SCANNED_BARCODE\", payload: \"\" });\n dispatch({ type: \"SET_SEARCH_INVENTORIES\", payload: [] });\n dispatch({ type: \"SET_DB_INVENTORIES\", payload: [] });\n dispatch({ type: \"SET_SEARCH_AISLES\", payload: [] });\n dispatch({ type: \"SET_SEARCH_SELECTED_AISLE\", payload: \"\" });\n };\n\n const handleAccountChange = async (newValue) => {\n if (newValue === null) {\n dispatchRa({ type: \"SET_SELECTED_ACCOUNT\", payload: NO_ACCOUNT });\n return;\n }\n dispatchRa({ type: \"SET_SELECTED_ACCOUNT\", payload: newValue });\n };\n\n const handleSubmit = (evt) => {\n if (evt.key === \"Enter\") {\n handleSearch(searchTerm, selectedSearchAisleId);\n }\n };\n\n const isSearchDisabled = () => {\n if (selectedAccount === NO_ACCOUNT && !searchTerm && !scannedBarcode)\n return true;\n // if (selectedAccount === NO_ACCOUNT || !searchTerm || searchTerm.length < 3) return true;\n return false;\n };\n\n const isAislesSearchAvailable = () => {\n return searchInventories?.length > 0 && !narrowSearchMsg;\n };\n\n return (\n <CrewCard title=\"Search Inventory\" icon={<SearchIcon fontSize=\"large\" />}>\n <Backdrop open={loading} className={classes.backdrop}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Box mt={2} ml={1} mr={1}>\n <Grid container spacing={2}>\n <Grid item xs={12} md={4}>\n <Autocomplete\n id=\"accounts\"\n fullWidth\n onChange={(event, newValue) => handleAccountChange(newValue)}\n value={selectedAccount}\n options={allAccounts}\n getOptionLabel={(option) => option.businessName}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Account\"\n size=\"small\"\n variant=\"outlined\"\n />\n )}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextField\n name=\"search\"\n size=\"small\"\n variant=\"outlined\"\n onChange={(evt) => setSearchTerm(evt.target.value)}\n value={searchTerm}\n placeholder=\"Search\"\n helperText={narrowSearchMsg}\n fullWidth\n required\n onKeyDown={handleSubmit}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton disableRipple onClick={clear}>\n <XIcon className={classes.clearButton} />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid spacing={2} xs={12} md={4}>\n <Box mt={1} ml={1} mr={1}>\n <Grid container spacing={2}>\n <Grid item xs={6} md={6}>\n <Button\n fullWidth\n startIcon={<ScannerIcon />}\n variant=\"contained\"\n onClick={handleScanButtonClick}\n >\n Scan\n </Button>\n </Grid>\n <Grid item xs={6} md={6}>\n <Button\n color=\"primary\"\n fullWidth\n variant=\"contained\"\n onClick={() =>\n handleSearch(searchTerm, selectedSearchAisleId)\n }\n disabled={isSearchDisabled()}\n >\n Search\n </Button>\n </Grid>\n </Grid>\n </Box>\n </Grid>\n {scannedBarcode && (\n <Grid item xs={12} md={4}>\n <TextField\n name=\"search\"\n size=\"small\"\n label={\"Barcode\"}\n variant=\"outlined\"\n value={scannedBarcode}\n disabled\n fullWidth\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton disableRipple onClick={handleClearBarcode}>\n <XIcon className={classes.clearButton} />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n )}\n {isAislesSearchAvailable() && (\n <Grid item xs={12} md={4}>\n <TextField\n id=\"aisles\"\n size=\"small\"\n variant=\"outlined\"\n select\n label=\"Aisles\"\n fullWidth\n value={selectedSearchAisleId}\n onChange={(e) => handleAisleChange(e.target.value)}\n >\n {searchAisles.map((itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n <span className={classes.menuSelection}>\n {itm.id ? getAisleFullName(itm) : \"\"}\n </span>\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n )}\n {scanDialogOpen && (\n <BarcodeScanDialog\n open={scanDialogOpen}\n onClose={handleScanClose}\n onSave={handleSaveBarcode}\n actionButtonText=\"Scan\"\n />\n )}\n <Grid container item xs={12} spacing={0} />\n {searchInventories &&\n searchInventories.map((itm) => (\n <InventorySearchCard\n key={itm.id}\n inventory={itm}\n match={match}\n history={history}\n scannedBarcode={scannedBarcode}\n />\n ))}\n </Grid>\n </Box>\n </CrewCard>\n );\n};\n","import React, { useEffect } from \"react\";\nimport { differenceInDays } from \"date-fns\";\nimport jsonExport from \"jsonexport/dist\";\n\nimport { useMediaQuery, Typography } from \"@material-ui/core\";\n\nimport {\n downloadCSV,\n useListContext,\n BulkExportButton,\n Datagrid,\n DateField,\n DateInput,\n FilterButton,\n FunctionField,\n List,\n RefreshButton,\n SimpleList,\n TextField,\n TopToolbar,\n} from \"react-admin\";\n\nimport { ChevronRightIcon } from \"../../../components/common\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { CarrierType, InboundStatus } from \"../../../utils/constants\";\nimport { BackButton } from \"../../../components/common/BackButton\";\n\nconst exporter = (inbounds) => {\n const inboundsForExport = inbounds.map((inbound) => {\n const inboundForExport = {};\n inboundForExport.railCarNumber = inbound.railCarNumber;\n inboundForExport.notifyDateTime = new Date(\n inbound.notifyDateTime\n ).toLocaleDateString();\n inboundForExport.placedDateTime = new Date(\n inbound.placedDateTime\n ).toLocaleDateString();\n inboundForExport.releaseDateTime = new Date(\n inbound.releaseDateTime\n ).toLocaleDateString();\n inboundForExport.timeOnClock = inbound.daysOnDemurrageClock\n ? inbound.daysOnDemurrageClock\n : differenceInDays(\n new Date(inbound.releaseDateTime),\n new Date(inbound.notifyDateTime)\n );\n\n return inboundForExport;\n });\n\n jsonExport(\n inboundsForExport,\n {\n rename: [\n \"Car/Trl Number\",\n \"Time Notified\",\n \"Time Placed\",\n \"Time Released\",\n \"Time on Clock (Days)\",\n ],\n },\n (err, csv) => {\n downloadCSV(csv, `inboundDemurrage_${new Date().toLocaleDateString()}`); // download as 'inboundDemurrage.csv` file\n }\n );\n};\n\nconst InboundSearchField = (props) => {\n const { label, alwaysOn } = props;\n const { displayedFilters, filterValues, setFilters } = useListContext(props);\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n setFilters(\n {\n ...filterValues,\n or: [\n { railCarNumber: { matchPhrasePrefix: `${value}` } },\n { railCarNumber: { wildcard: `*${value}*` } },\n { originCarrier: { matchPhrasePrefix: `${value}` } },\n ],\n },\n displayedFilters\n );\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = () => [\n <InboundSearchField label=\"Search\" alwaysOn />,\n <DateInput\n source=\"notifyDateTime.lte\"\n label=\"Notified Before...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"notifyDateTime.gte\"\n label=\"Notified After...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"releaseDateTime.lte\"\n label=\"Released Before...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"releaseDateTime.gte\"\n label=\"Released After...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n];\n\nconst ListActions = (props) => {\n return (\n <TopToolbar>\n <FilterButton />\n <RefreshButton />\n <BackButton basePath=\"/reports\" />\n </TopToolbar>\n );\n};\n\nconst BulkListActions = (props) => (\n <BulkExportButton {...props} color=\"defalut\" />\n);\n\nexport const InboundDemurrageList = (props) => {\n const defaultSortOrder = { field: \"releaseDateTime\", order: \"ASC\" };\n const initFilterValues = {\n searchInboundShipments: {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: InboundStatus.RELEASED },\n carrierType: { eq: CarrierType.RAIL },\n },\n };\n\n return (\n <List\n {...props}\n title={<ForceTitle title=\"Inbound Demurrage\" />}\n filter={initFilterValues}\n filters={getListFilters()}\n sort={defaultSortOrder}\n actions={<ListActions />}\n bulkActionButtons={<BulkListActions />}\n exporter={exporter}\n pagination={<Pagination />}\n >\n <ShipmentGrid />\n </List>\n );\n};\n\nconst ShipmentGrid = (props) => {\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n return isXSmall ? (\n <SimpleList\n {...props}\n primaryText={(record) => record.railCarNumber}\n secondaryText={(record) => (\n <>\n <Typography>{`Notified: ${new Date(\n record.placedDateTime\n ).toLocaleDateString()}`}</Typography>\n <Typography color=\"textSecondary\">{`Released: ${new Date(\n record.releaseDateTime\n ).toLocaleDateString()}`}</Typography>\n </>\n )}\n tertiaryText={(record) =>\n `${\n record.daysOnDemurrageClock\n ? record.daysOnDemurrageClock\n : differenceInDays(\n new Date(record.releaseDateTime),\n new Date(record.notifyDateTime)\n )\n } Days`\n }\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n linkType=\"edit\"\n />\n ) : (\n <Datagrid rowClick=\"edit\" {...props}>\n <TextField source=\"railCarNumber\" label=\"Car/Trl No\" sortable={true} />\n <DateField\n source=\"notifyDateTime\"\n label=\"Time Notified\"\n showTime={true}\n sortable={true}\n />\n <DateField\n source=\"placedDateTime\"\n label=\"Time Placed\"\n showTime={true}\n sortable={true}\n />\n <DateField\n source=\"releaseDateTime\"\n label=\"Time Released\"\n showTime={true}\n sortable={true}\n />\n <FunctionField\n source=\"daysOnDemurrageClock\"\n label=\"Time on Clock\"\n render={(record) =>\n `${\n record.daysOnDemurrageClock\n ? record.daysOnDemurrageClock\n : differenceInDays(\n new Date(record.releaseDateTime),\n new Date(record.notifyDateTime)\n )\n } Days`\n }\n sortable={true}\n />\n </Datagrid>\n );\n};\n","import React from \"react\";\nimport { differenceInDays } from \"date-fns\";\nimport jsonExport from \"jsonexport/dist\";\n\nimport { useMediaQuery, Typography } from \"@material-ui/core\";\n\nimport {\n downloadCSV,\n useListContext,\n BulkExportButton,\n Datagrid,\n DateField,\n DateInput,\n FilterButton,\n FunctionField,\n List,\n RefreshButton,\n SimpleList,\n TextField,\n TopToolbar,\n} from \"react-admin\";\n\nimport { ChevronRightIcon } from \"../../../components/common\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { CarrierType, OutboundStatus } from \"../../../utils/constants\";\nimport { BackButton } from \"../../../components/common/BackButton\";\n\nconst exporter = (outbounds) => {\n const outboundsForExport = outbounds.map((outbound) => {\n const outboundForExport = {};\n outboundForExport.railCarNumber = outbound.railCarNumber;\n outboundForExport.placedDateTime = new Date(\n outbound.arrivalDateTime\n ).toLocaleDateString();\n outboundForExport.departureDateTime = new Date(\n outbound.departureDateTime\n ).toLocaleDateString();\n outboundForExport.timeOnClock = outbound.daysOnDemurrageClock\n ? outbound.daysOnDemurrageClock\n : differenceInDays(\n new Date(outbound.departureDateTime),\n new Date(outbound.arrivalDateTime)\n );\n\n return outboundForExport;\n });\n\n jsonExport(\n outboundsForExport,\n {\n rename: [\n \"Car/Trl Number\",\n \"Time Notified\",\n \"Time Placed\",\n \"Time Released\",\n \"Time on Clock (Days)\",\n ],\n },\n (err, csv) => {\n downloadCSV(csv, `outboundDemurrage_${new Date().toLocaleDateString()}`); // download as 'outboundDemurrage.csv` file\n }\n );\n};\n\nconst OutboundSearchField = (props) => {\n const { label, alwaysOn } = props;\n const { displayedFilters, filterValues, setFilters } = useListContext(props);\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n setFilters(\n {\n ...filterValues,\n or: [\n { railCarNumber: { matchPhrasePrefix: `${value}` } },\n { railCarNumber: { wildcard: `*${value}*` } },\n { pickupNumber: { matchPhrasePrefix: `${value}` } },\n { pickupNumber: { wildcard: `*${value}*` } },\n { carrier: { matchPhrasePrefix: `${value}` } },\n ],\n },\n displayedFilters\n );\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = () => [\n <OutboundSearchField label=\"Search\" alwaysOn />,\n <DateInput\n source=\"arrivalDateTime.lte\"\n label=\"Placed Before...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"arrivalDateTime.gte\"\n label=\"Placed After...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"departureDateTime.lte\"\n label=\"Released Before...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"departureDateTime.gte\"\n label=\"Released After...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n];\n\nconst ListActions = (props) => {\n return (\n <TopToolbar>\n <FilterButton />\n <RefreshButton />\n <BackButton basePath=\"/reports\" />\n </TopToolbar>\n );\n};\n\nconst BulkListActions = (props) => <BulkExportButton color=\"defalut\" />;\n\nexport const OutboundDemurrageList = (props) => {\n const defaultSortOrder = { field: \"departureDateTime\", order: \"ASC\" };\n const initFilterValues = {\n searchOutboundShipments: {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: OutboundStatus.RELEASED },\n carrierType: { eq: CarrierType.RAIL },\n },\n };\n\n return (\n <List\n {...props}\n title={<ForceTitle title=\"Outbound Demurrage\" />}\n filter={initFilterValues}\n filters={getListFilters()}\n sort={defaultSortOrder}\n actions={<ListActions />}\n bulkActionButtons={<BulkListActions />}\n exporter={exporter}\n pagination={<Pagination />}\n >\n <ShipmentGrid />\n </List>\n );\n};\n\nconst ShipmentGrid = (props) => {\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n return isXSmall ? (\n <SimpleList\n {...props}\n primaryText={(record) => record.railCarNumber}\n secondaryText={(record) => (\n <>\n <Typography>{`Notified: ${new Date(\n record.arrivalDateTime\n ).toLocaleDateString()}`}</Typography>\n <Typography color=\"textSecondary\">{`Released: ${new Date(\n record.departureDateTime\n ).toLocaleDateString()}`}</Typography>\n </>\n )}\n tertiaryText={(record) =>\n `${\n record.daysOnDemurrageClock\n ? record.daysOnDemurrageClock\n : differenceInDays(\n new Date(record.departureDateTime),\n new Date(record.arrivalDateTime)\n )\n } Days`\n }\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n linkType=\"edit\"\n />\n ) : (\n <Datagrid rowClick=\"edit\" {...props}>\n <TextField source=\"railCarNumber\" label=\"Car/Trl No\" sortable={true} />\n <DateField\n source=\"arrivalDateTime\"\n label=\"Time Placed\"\n showTime={true}\n sortable={true}\n />\n <DateField\n source=\"departureDateTime\"\n label=\"Time Released\"\n showTime={true}\n sortable={true}\n />\n <FunctionField\n source=\"daysOnDemurrageClock\"\n label=\"Time on Clock\"\n render={(record) =>\n `${\n record.daysOnDemurrageClock\n ? record.daysOnDemurrageClock\n : differenceInDays(\n new Date(record.departureDateTime),\n new Date(record.arrivalDateTime)\n )\n } Days`\n }\n sortable={true}\n />\n </Datagrid>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport jsonExport from \"jsonexport/dist\";\n\nimport { useMediaQuery, Card, Typography } from \"@material-ui/core\";\n\nimport {\n downloadCSV,\n useList,\n useListContext,\n useNotify,\n useQueryWithStore,\n Button,\n Datagrid,\n FilterButton,\n ListContextProvider,\n ListToolbar,\n NumberField,\n RefreshButton,\n SelectInput,\n SimpleList,\n TextField,\n Title,\n TopToolbar,\n} from \"react-admin\";\n\nimport { ChevronRightIcon, ExportIcon } from \"../../../components/common\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { InventoryStatus } from \"../../../utils/constants\";\n\nconst exporter = (inventories) => {\n debugger;\n const inventoriesForExport = inventories.map((inventory) => {\n const inventoryForExport = {\n accountName: inventory.accountName,\n productCode: inventory.productCode,\n productName: inventory.productName,\n totalInventoryQuantity: inventory.totalInventoryQuantity,\n inventoryUnits: inventory.inventoryUnits,\n };\n debugger;\n\n return inventoryForExport;\n });\n\n jsonExport(\n inventoriesForExport,\n { rename: [\"Customer\", \"Product Code\", \"Product\", \"Inventory Qty\", \"UOM\"] },\n (err, csv) => {\n downloadCSV(csv, `lowInventories_${new Date().toLocaleDateString()}`); // download as 'lowInventories_DATE.csv` file\n }\n );\n};\n\nconst InventorySearchField = (props) => {\n const { setSearchTerm, label, alwaysOn } = props;\n\n const handleSearch = (value) => {\n const searchTerm = value?.toLowerCase() || \"\";\n setSearchTerm(searchTerm);\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = (isSmall, setSearchTerm) => [\n <InventorySearchField\n label=\"Search\"\n alwaysOn\n setSearchTerm={setSearchTerm}\n />,\n <SelectInput\n source=\"reloadYardCommodityId\"\n label=\"Load Type\"\n variant=\"outlined\"\n alwaysOn={!isSmall}\n resettable\n choices={window.appUser.reloadYard.activeYardCommodities.items}\n optionText=\"commodity.name\"\n />,\n];\n\nconst ListActions = (props) => {\n const { data } = useListContext();\n const inventories = Object.values(data);\n\n return (\n <TopToolbar>\n <FilterButton />\n <Button\n label=\"Export\"\n disabled={inventories?.length === 0}\n onClick={() => exporter(inventories)}\n >\n <ExportIcon />\n </Button>\n <RefreshButton />\n <BackButton basePath=\"/reports\" />\n </TopToolbar>\n );\n};\n\nexport const LowInventoryList = (props) => {\n const notify = useNotify();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const fixedFilter = { lowInventoryAlert: true };\n const defaultSort = { field: \"accountName\", order: \"ASC\" };\n const defaultPerPage = 10;\n const searchInput = {\n filter: {\n searchInventorys: {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: InventoryStatus.STORED },\n productId: { exists: true },\n },\n },\n pagination: { page: 1, perPage: 1000 },\n sort: defaultSort,\n };\n\n const [finalData, setFinalData] = useState([]);\n const { data, error, loaded, loading } = useQueryWithStore({\n type: \"getList\",\n resource: \"inventories\",\n payload: searchInput,\n });\n if (error)\n logError(\"inventory:LowInventoryList:useQueryWithStore\", error, notify);\n\n useEffect(() => {\n debugger;\n if (data?.length > 0) {\n const dedupData = [\n ...new Map(\n data.map((item) => [\n item.productId,\n {\n id: item.id,\n accountName: item.accountName,\n productId: item.productId,\n productCode: item.productCode,\n productName: item.productName,\n category: item.product?.category,\n totalInventoryQuantity: item.product?.totalInventoryQuantity,\n inventoryUnits: item.inventoryUnits,\n reloadYardCommodityId: item.reloadYardCommodityId,\n lowInventoryAlert: item.product?.lowInventoryAlert,\n },\n ])\n ).values(),\n ];\n debugger;\n\n if (searchTerm) {\n const filteredData = dedupData.filter(\n (itm) =>\n itm.accountName?.toLowerCase().includes(searchTerm) ||\n itm.productName?.toLowerCase().includes(searchTerm) ||\n itm.productCode?.toLowerCase().includes(searchTerm) ||\n itm.category?.toLowerCase().includes(searchTerm)\n );\n setFinalData(filteredData);\n } else setFinalData(dedupData);\n } else setFinalData([]);\n }, [data, searchTerm]);\n\n const listContext = useList({\n ...props,\n data: finalData,\n ids: finalData.map(({ id }) => id),\n loading,\n loaded,\n filter: fixedFilter,\n sort: defaultSort,\n perPage: defaultPerPage,\n basePath: \"/inventories\",\n resource: \"inventories\",\n });\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Inventory\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters(isSmall, setSearchTerm)}\n actions={<ListActions />}\n />\n <Card>\n <InventoryGrid />\n <Pagination {...listContext} />\n </Card>\n </ListContextProvider>\n );\n};\n\nconst InventoryGrid = (props) => {\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n return isXSmall ? (\n <SimpleList\n {...props}\n primaryText={(record) => record.railCarNumber}\n secondaryText={(record) => (\n <>\n <Typography>{`${record.name}`}</Typography>\n <Typography color=\"textSecondary\">{`${record.productCode}`}</Typography>\n </>\n )}\n tertiaryText={(record) => `Qty: ${record.totalInventoryQuantity}`}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n linkType=\"edit\"\n />\n ) : (\n <Datagrid rowClick={false} {...props}>\n <TextField source=\"accountName\" label=\"Customer\" />\n <TextField source=\"productCode\" label=\"Product Code\" />\n <TextField source=\"productName\" label=\"Product Name\" />\n <TextField source=\"category\" label=\"Commodity Category\" />\n <NumberField source=\"totalInventoryQuantity\" label=\"Total Inventory\" />\n <TextField source=\"inventoryUnits\" label=\"UOM\" />\n <TextField source=\"lowInventoryAlert\" label=\"UOM\" />\n </Datagrid>\n );\n};\n","import React, { useEffect, useState, useRef } from \"react\";\nimport { keyBy } from \"lodash\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { serviceByAccountByStatusByName } from \"../../../graphql/queries\";\n\nimport { Grid, Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n useNotify,\n useShowController,\n ArrayField,\n Datagrid,\n FunctionField,\n Loading,\n NumberField,\n Show,\n SimpleShowLayout,\n TextField,\n} from \"react-admin\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { ServiceStatus } from \"../../../utils/constants\";\n\nconst useStyles = makeStyles((theme) => ({\n totals: {\n marginRight: theme.spacing(2),\n textAlign: \"right\",\n },\n}));\n\nexport const InvoicePeak = (props) => {\n const classes = useStyles();\n const notify = useNotify();\n const isComponentMounted = useRef(true);\n const { record } = useShowController(props);\n const [services, setServices] = useState({});\n\n var formatter = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n\n // These options are needed to round to whole numbers if that's what you want.\n //minimumFractionDigits: 0, // (this suffices for whole numbers, but will print 2500.10 as $2,500.1)\n //maximumFractionDigits: 0, // (causes 2500.99 to be printed as $2,501)\n });\n\n const serviceRender = (record) =>\n `${services[record.serviceId] ? services[record.serviceId]?.name : \"\"}`;\n\n useEffect(() => {\n debugger;\n if (isComponentMounted && record) getServices();\n return () => (isComponentMounted.current = false);\n }, []);\n\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n const getServices = async () => {\n try {\n debugger;\n setLoading(true);\n let resp = await API.graphql(\n graphqlOperation(serviceByAccountByStatusByName, {\n accountId: record.accountId,\n statusName: { beginsWith: { status: ServiceStatus.AVAILABLE } },\n sortDirection: \"ASC\",\n })\n );\n let serviceData = resp.data.serviceByAccountByStatusByName?.items;\n setServices(keyBy(serviceData, \"id\"));\n } catch (err) {\n setError(true);\n logError(\"invoices:InvoiceShow:getServices\", err, notify);\n }\n setLoading(false);\n };\n\n if (loading) return <Loading />;\n if (!record || !record?.lineItems || error) return null;\n return (\n <Show {...props} title=\" \" actions={false}>\n <SimpleShowLayout>\n <ArrayField source=\"lineItems.items\" label=\" \" fullWidth>\n <Datagrid>\n <FunctionField\n source=\"serviceId\"\n label=\"Goods & Services\"\n render={serviceRender}\n sortable={false}\n />\n <TextField source=\"serviceNote\" label=\"Notes\" sortable={false} />\n <NumberField source=\"quantity\" label=\"Qty.\" sortable={false} />\n <TextField source=\"units\" label=\"UOM\" sortable={false} />\n <NumberField\n source=\"unitCost\"\n label=\"Unit Cost\"\n sortable={false}\n options={{\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }}\n />\n <NumberField\n source=\"itemTax\"\n label=\"Tax\"\n sortable={false}\n options={{\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }}\n />\n <NumberField\n source=\"amount\"\n label=\"Amount Due\"\n sortable={false}\n options={{\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }}\n />\n </Datagrid>\n </ArrayField>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography className={classes.totals}>\n SUBTOTAL: {`${formatter.format(record.subtotal)}`}{\" \"}\n </Typography>\n <Typography className={classes.totals}>\n TAX: {`${formatter.format(record.tax)}`}{\" \"}\n </Typography>\n <Typography className={classes.totals}>\n TOTAL: {`${formatter.format(record.total)}`}{\" \"}\n </Typography>\n </Grid>\n </Grid>\n </SimpleShowLayout>\n </Show>\n );\n};\n","import React from \"react\";\n\nimport { Tooltip } from \"@material-ui/core\";\nimport InvoiceNewIcon from \"@material-ui/icons/RadioButtonUnchecked\";\nimport InvoicePaidIcon from \"@material-ui/icons/CheckCircleOutline\";\nimport InvoiceOverdueIcon from \"@material-ui/icons/Error\";\nimport InvoicePendingIcon from \"@material-ui/icons/RadioButtonUnchecked\";\nimport InvoiceCancelledIcon from \"@material-ui/icons/NotInterested\";\nimport { green, orange } from \"@material-ui/core/colors\";\n\nexport const InvoiceStatusIcon = (props) => {\n if (!props.record?.status) return null;\n const icon = () => {\n switch (props.record.status) {\n case \"PAID\":\n return (\n <Tooltip title=\"Settled\" placement=\"left\" arrow>\n <InvoicePaidIcon style={{ color: green[700] }} />\n </Tooltip>\n );\n case \"PENDING\":\n return (\n <Tooltip title=\"Pending\" placement=\"left\" arrow>\n <InvoicePendingIcon />\n </Tooltip>\n );\n case \"OVERDUE\":\n return (\n <Tooltip title=\"Overdue\" placement=\"left\" arrow>\n <InvoiceOverdueIcon style={{ color: orange[700] }} />\n </Tooltip>\n );\n case \"CANCELLED\":\n return (\n <Tooltip title=\"Cancelled\" placement=\"left\" arrow>\n <InvoiceCancelledIcon color=\"action\" />\n </Tooltip>\n );\n default:\n return (\n <Tooltip title=\"New\" placement=\"left\" arrow>\n <InvoiceNewIcon />\n </Tooltip>\n );\n }\n };\n\n return icon();\n};\n","import React, { useEffect, useState } from \"react\";\nimport jsonExport from \"jsonexport/dist\";\n\nimport {\n useMediaQuery,\n Card,\n Grid,\n Hidden,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport classnames from \"classnames\";\n\nimport {\n downloadCSV,\n useListContext,\n BulkActionsToolbar,\n Datagrid,\n DateField,\n DateInput,\n FilterButton,\n ListContextProvider,\n ListToolbar,\n NumberField,\n RefreshButton,\n SelectInput,\n SimpleList,\n TextField,\n Title,\n TopToolbar,\n BulkExportButton,\n} from \"react-admin\";\n\nimport { ChevronRightIcon } from \"../../components/common\";\nimport { ForceTitle } from \"../../components/common/ForceTitle\";\nimport { SearchField } from \"../../components/common/SearchField\";\nimport { Pagination } from \"../../components/Pagination\";\nimport { InvoiceStatus, PaymentTerms } from \"../../utils/constants\";\nimport { useSearchableList } from \"../../dataProvider/useSearchableList\";\nimport { InvoicePeak } from \"../resources/invoices/InvoicePeak\";\nimport { InvoiceStatusIcon } from \"../resources/invoices/InvoiceStatusIcon\";\nimport { BackButton } from \"../../components/common/BackButton\";\n\nconst useStyles = makeStyles((theme) => ({\n bulkActionsDisplayed: {\n marginTop: -theme.spacing(8),\n transition: theme.transitions.create(\"margin-top\"),\n },\n totals: {\n marginLeft: theme.spacing(2),\n },\n}));\n\nconst tabs = [\n { id: InvoiceStatus.NEW, name: \"New\" },\n { id: InvoiceStatus.PENDING, name: \"Pending\" },\n { id: InvoiceStatus.PAID, name: \"Settled\" },\n];\n\nconst exporter = (invoices) => {\n const handleUndefined = (item) => (item ? item : \"\");\n const getTerms = (paymentTerms) =>\n !paymentTerms\n ? \"\"\n : PaymentTerms.find((itm) => itm.id === paymentTerms).name;\n const getServiceName = (invoice, serviceId) => {\n return !invoice.account?.services\n ? \"\"\n : invoice.account.services.items.find((itm) => itm.id === serviceId).name;\n };\n const getServiceDate = (invoice, serviceDate) => {\n return new Date(\n serviceDate ? serviceDate : invoice.createdAt\n ).toLocaleDateString();\n };\n\n debugger;\n const invoicesForExport = invoices.map((invoice, idx) => {\n const invoiceForExport = {\n InvoiceNo: invoice.invoiceNumber,\n Customer: idx === 0 ? invoice.accountName : \"\",\n InvoiceDate:\n idx === 0 ? new Date(invoice.createdAt).toLocaleDateString() : \"\",\n DueDate: idx === 0 ? new Date(invoice.dueDate).toLocaleDateString() : \"\",\n Terms:\n idx === 0 && invoice.account\n ? getTerms(invoice.account.paymentTerms)\n : \"\",\n Memo: idx === 0 ? handleUndefined(invoice.notes) : \"\",\n };\n\n debugger;\n if (invoice.lineItems.items) {\n invoiceForExport.lineItems = invoice.lineItems.items.map((item) => {\n const lineItem = {\n GoodsServices: getServiceName(invoice, item.serviceId),\n Description: handleUndefined(item.serviceNote),\n Quantity: item.quantity,\n Rate: item.unitCost,\n ItemAmount: item.amount,\n ItemTaxCode: item.taxRate.taxCode,\n ItemTaxAmount: item.itemTax,\n Currency: \"USD\",\n ServiceDate: getServiceDate(invoice, item.serviceDate),\n };\n\n return lineItem;\n });\n }\n\n return invoiceForExport;\n });\n\n jsonExport(\n invoicesForExport,\n {\n rename: [\n \"InvoiceNo\",\n \"Customer\",\n \"InvoiceDate\",\n \"DueDate\",\n \"Terms\",\n \"Memo\",\n \"Item(Product/Service)\",\n \"ItemDescription\",\n \"ItemQuantity\",\n \"ItemRate\",\n \"ItemAmount\",\n \"ItemTaxCode\",\n \"ItemTaxAmount\",\n \"Currency\",\n \"ServiceDate\",\n ], // order fields in the export\n },\n (err, csv) => {\n downloadCSV(csv, `invoices_${new Date().toLocaleDateString()}`); // download as 'invoices_date.csv` file\n }\n );\n};\n\nconst InvoiceSearchField = (props) => {\n const { label, alwaysOn } = props;\n const { displayedFilters, filterValues, setFilters } = useListContext(props);\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n setFilters(\n {\n ...filterValues,\n or: [\n { accountName: { matchPhrasePrefix: `${value}` } },\n { invoiceNumber: { matchPhrasePrefix: `.*${value}.*` } },\n { invoiceNumber: { wildcard: `*${value}*` } },\n { poNumber: { matchPhrasePrefix: `${value}` } },\n { poNumber: { wildcard: `*${value}*` } },\n ],\n },\n displayedFilters\n );\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = () => {\n return [\n <InvoiceSearchField label=\"Search\" alwaysOn />,\n <SelectInput\n source=\"status.eq\"\n label=\"Status\"\n variant=\"outlined\"\n resettable\n alwaysOn\n choices={tabs || []}\n optionValue=\"id\"\n emptyText=\"Show All\"\n />,\n <DateInput\n source=\"createdAt.lte\"\n label=\"Issued Before...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"createdAt.gte\"\n label=\"Issued After...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"dueDate.lte\"\n label=\"Due Before...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"dueDate.gte\"\n label=\"Due After...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n ];\n};\n\nconst ListActions = (props) => {\n return (\n <TopToolbar>\n <FilterButton />\n <RefreshButton />\n <BackButton basePath=\"/reports\" />\n </TopToolbar>\n );\n};\n\n// /reportInvoiceAudit\nexport const InvoiceAuditReport = (props) => {\n const classes = useStyles();\n const [defaultFilter] = useState({\n reloadYardId: window.appUser.reloadYardId,\n });\n const [defaultSearchFilter] = useState({\n reloadYardId: { eq: window.appUser?.reloadYardId },\n });\n\n // Include key & search to display default sort order.\n const defaultSort = {\n field: `{\"key\":\"invoiceByDueDate\", \"search\":\"dueDate\"}`,\n order: \"DESC\",\n };\n const defaultPerPage = 10;\n\n const listContext = useSearchableList({\n ...props,\n defaultTitle: \"Invoices\",\n defaultFilter: defaultFilter,\n defaultSearchFilter: defaultSearchFilter,\n defaultPerPage: defaultPerPage,\n defaultSort: defaultSort,\n resource: \"invoices\",\n });\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Invoices\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters()}\n actions={<ListActions />}\n />\n\n <Card\n className={classnames(classes.root, {\n [classes.bulkActionsDisplayed]: listContext.selectedIds.length > 0,\n })}\n >\n <BulkActionsToolbar>\n <BulkExportButton {...props} exporter={exporter} color=\"default\" />\n </BulkActionsToolbar>\n <InvoiceGrid {...props} {...listContext} />\n <PaginationToolbar {...props} />\n </Card>\n </ListContextProvider>\n );\n};\n\nconst PaginationToolbar = (props) => {\n const classes = useStyles();\n const listContext = useListContext(props);\n\n var formatter = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n\n // These options are needed to round to whole numbers if that's what you want.\n //minimumFractionDigits: 0, // (this suffices for whole numbers, but will print 2500.10 as $2,500.1)\n //maximumFractionDigits: 0, // (causes 2500.99 to be printed as $2,501)\n });\n\n const [totals, setTotals] = useState({ subtotal: 0, tax: 0, total: 0 });\n\n useEffect(() => {\n debugger;\n if (listContext?.ids?.length > 0 && listContext?.data) {\n let subtotal = 0,\n tax = 0,\n total = 0;\n\n listContext.ids?.forEach((id) => {\n subtotal += listContext.data[id].subtotal;\n tax += listContext.data[id].tax;\n total += listContext.data[id].total;\n });\n\n setTotals({ subtotal, tax, total });\n }\n }, [listContext]);\n\n return (\n <Grid container direction=\"row\" spacing={1} alignItems=\"center\">\n <Hidden mdDown>\n <Grid item xs={0} md={5}>\n <Typography className={classes.totals}>\n {`SUBTOTAL: ${formatter.format(\n totals.subtotal\n )}, TAX: ${formatter.format(totals.tax)}, TOTAL: ${formatter.format(\n totals.total\n )}`}\n </Typography>\n </Grid>\n </Hidden>\n <Grid item xs={12} md={7}>\n <Pagination {...props} {...listContext} />\n </Grid>\n </Grid>\n );\n};\n\nconst InvoiceGrid = ({ ids, page, ...props }) => {\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const hasBulkActions = true;\n\n return isXSmall ? (\n <SimpleList\n primaryText={(record) => record.accountName}\n secondaryText={(record) =>\n `Invoice No: ${record.invoiceNumber} Amount $: ${record.totalAmount}`\n }\n tertiaryText={(record) => new Date(record.dueDate).toLocaleDateString()}\n leftIcon={(record) => <InvoiceStatusIcon record={record} />}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n linkType=\"edit\"\n />\n ) : (\n <Datagrid\n {...props}\n rowClick=\"edit\"\n expand={<InvoicePeak />}\n hasBulkActions={hasBulkActions}\n >\n <TextField source=\"accountName\" label=\"Customer\" sortable={true} />\n <NumberField\n source=\"total\"\n label=\"Amount Due\"\n sortable={true}\n options={{\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }}\n />\n <DateField\n source=\"dueDate\"\n sortable={true}\n sortBy={`{\"key\":\"invoiceByDueDate\", \"search\":\"dueDate\"}`}\n />\n <InvoiceStatusIcon source=\"status\" sortable={false} />\n <TextField source=\"poNumber\" label=\"PO No.\" sortable={true} />\n <TextField source=\"invoiceNumber\" label=\"Invoice No.\" sortable={true} />\n </Datagrid>\n );\n};\n","import React, { useState, useEffect } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\n\nimport {\n countInventoryTurns,\n listAccountNames,\n} from \"../../graphql/report-queries\";\n\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n Cell,\n ReferenceLine,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\n\nimport { startOfMonth, sub } from \"date-fns\";\n\nimport { useNotify, TopToolbar } from \"react-admin\";\n\nimport Title from \"./Title\";\nimport { ForceTitle } from \"../../components/common/ForceTitle\";\nimport { logError } from \"../../utils/appUtils\";\nimport { InventoryStatus } from \"../../utils/constants\";\nimport { BackButton } from \"../../components/common/BackButton\";\n\n// /reportTurnoverByAccount\nconst AvgInventoryTurnsByAccount = () => {\n const notify = useNotify();\n const [data, setData] = useState([]);\n const [average, setAverage] = useState(0);\n const [height, setHeight] = useState();\n\n useEffect(() => {\n getInventoryTurnsData();\n }, []);\n\n const getInventoryTurnsData = async () => {\n // Get the last 12 months, including current month\n const startDate = startOfMonth(sub(new Date(), { months: 11 }));\n let tempData = [];\n\n try {\n const queryList = [];\n\n let response = await API.graphql(\n graphqlOperation(listAccountNames, {\n reloadYardId: window.appUser?.reloadYardId,\n activeBusinessName: { beginsWith: { active: \"true\" } },\n })\n );\n const accounts = response.data.accountByActiveByName.items;\n setHeight(accounts.length * 50);\n\n accounts.forEach((account, idx) => {\n tempData[idx] = { name: account.businessName, days: 0, avg: 0 };\n\n queryList[idx] = API.graphql(\n graphqlOperation(countInventoryTurns, {\n filter: {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n accountId: { eq: account.id },\n status: { ne: InventoryStatus.IN_TRANSIT },\n deliveryDateTime: { gte: startDate },\n },\n })\n );\n });\n\n const promiseResults = await Promise.all(queryList);\n\n promiseResults.forEach((result, idx) => {\n if (result.data.searchInventorys.items?.length > 0) {\n let sum = result.data.searchInventorys.items.reduce(\n (accumulator, item) => {\n return accumulator + item.turnDays;\n },\n 0\n );\n\n tempData[idx].days = sum / result.data.searchInventorys.total;\n } else tempData[idx].days = 0;\n });\n\n let cumSum = tempData.reduce((accumulator, item) => {\n return accumulator + item.days;\n }, 0);\n let cumCount = tempData.reduce(\n (total, x) => (x.days > 0 ? total + 1 : total),\n 0\n );\n setAverage(cumSum / cumCount);\n\n setData(tempData);\n } catch (err) {\n logError(\"AvgInventoryTurnsByAccount:getInventoryTurnsData\", err, notify);\n }\n };\n\n return (\n <>\n <div style={{ display: \"none\" }}>\n <ForceTitle title=\"Reports\" />\n </div>\n <TopToolbar>\n <Title>Avg Inventory Turn Days by Account\n \n \n\n \n \n \n \n \n \n \n {data.map((entry, index) => (\n average ? \"orange\" : \"green\"} />\n ))}\n \n \n \n \n \n );\n};\n\nexport default AvgInventoryTurnsByAccount;\n","import React, { useState, useEffect } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { searchInventorys } from \"../../graphql/report-queries\";\n\nimport { addMonths, format, getMonth, startOfMonth, sub } from \"date-fns\";\n\nimport {\n CartesianGrid,\n Line,\n LineChart,\n ReferenceLine,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\n\nimport { Typography } from \"@material-ui/core\";\n\nimport { useNotify, TopToolbar } from \"react-admin\";\n\nimport Title from \"./Title\";\nimport { ForceTitle } from \"../../components/common/ForceTitle\";\nimport { logError } from \"../../utils/appUtils\";\nimport { InventoryStatus } from \"../../utils/constants\";\nimport { BackButton } from \"../../components/common/BackButton\";\n\nconst AvgInventoryTurnsByMonth = () => {\n const notify = useNotify();\n const [average, setAverage] = useState(0);\n const [data, setData] = useState([]);\n const dataMap = {};\n const height = window.innerHeight * 0.7;\n\n useEffect(() => {\n // Get the last 12 months, including current month\n const startDate = startOfMonth(sub(new Date(), { months: 11 }));\n\n for (let i = 0; i <= 11; i++) {\n const newDate = addMonths(startDate, i);\n const month = newDate.getMonth();\n const monthName = format(newDate, \"MMM\");\n dataMap[month] = { idx: i, name: monthName, count: 0, days: 0, avg: 0 };\n }\n\n getInventoryData(startDate);\n }, []);\n\n const getInventoryData = async (startDate) => {\n let tempData = [];\n debugger;\n\n try {\n const response = await API.graphql(\n graphqlOperation(searchInventorys, {\n // sort: {field: \"lastShipDateTime\", direction: \"asc\"},\n filter: {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: InventoryStatus.SHIPPED },\n and: [\n // { notifyDateTime: { lt: startDate }},\n { lastShipDateTime: { gte: startDate } },\n ],\n },\n limit: 1000,\n })\n );\n const items = response.data.searchInventorys.items;\n let totalAmt = 0;\n\n items.forEach((element) => {\n let elementMonth = getMonth(new Date(element.lastShipDateTime));\n dataMap[elementMonth].count++;\n dataMap[elementMonth].days =\n dataMap[elementMonth].days + element.turnDays;\n });\n\n Object.keys(dataMap).forEach((month) => {\n tempData[dataMap[month].idx] = dataMap[month];\n if (dataMap[month].count > 0) {\n const avgDays = dataMap[month].days / dataMap[month].count;\n dataMap[month].avg = avgDays;\n totalAmt += avgDays;\n }\n });\n\n const avg = Math.round(totalAmt / tempData.length);\n\n setData(tempData);\n setAverage(avg);\n } catch (err) {\n logError(\"AverageInventoryTurnover:getInventoryData\", err, notify);\n }\n };\n\n return (\n <>\n
    \n \n
    \n \n Avg Inventory Turn Days by Month\n \n \n\n \n \n \n \n \n {\n if (payload && payload.length) {\n const { date, amt } = payload[0].payload;\n return (\n \n {`Date: ${date}`}\n {`Value: ${amt}`}\n {`Average: ${average}`}\n \n );\n }\n return null;\n }}\n />\n {average && (\n \n )}\n \n \n \n \n );\n};\n\nexport default AvgInventoryTurnsByMonth;\n","import React, { useState, useEffect } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\n\nimport { countInboundShipments } from \"../../graphql/inbound/custom-queries\";\nimport { listAccountNames } from \"../../graphql/report-queries\";\n\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n Cell,\n ReferenceLine,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\n\nimport { startOfMonth, sub } from \"date-fns\";\n\nimport { useNotify, TopToolbar } from \"react-admin\";\n\nimport Title from \"./Title\";\nimport { ForceTitle } from \"../../components/common/ForceTitle\";\nimport { logError } from \"../../utils/appUtils\";\nimport { InventoryStatus } from \"../../utils/constants\";\nimport { BackButton } from \"../../components/common/BackButton\";\n\n// /reportCarsByAccount\nconst AvgInboundCarsByAccount = () => {\n const notify = useNotify();\n const [data, setData] = useState([]);\n const [average, setAverage] = useState(0);\n const [height, setHeight] = useState();\n\n useEffect(() => {\n getInboundsData();\n }, []);\n\n const getInboundsData = async () => {\n // Get the last 12 months, including current month\n const startDate = startOfMonth(sub(new Date(), { months: 11 }));\n let tempData = [];\n\n try {\n const queryList = [];\n\n let response = await API.graphql(\n graphqlOperation(listAccountNames, {\n reloadYardId: window.appUser?.reloadYardId,\n activeBusinessName: { beginsWith: { active: \"true\" } },\n })\n );\n const accounts = response.data.accountByActiveByName.items;\n setHeight(accounts.length * 50);\n\n accounts.forEach((account, idx) => {\n tempData[idx] = { name: account.businessName, cars: 0 };\n\n queryList[idx] = API.graphql(\n graphqlOperation(countInboundShipments, {\n filter: {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n accountId: { eq: account.id },\n status: { ne: InventoryStatus.IN_TRANSIT },\n notifyDateTime: { gte: startDate },\n },\n })\n );\n });\n\n const promiseResults = await Promise.all(queryList);\n let totalAmt = 0;\n\n promiseResults.forEach((result, idx) => {\n if (result.data.searchInboundShipments.total) {\n const amt = result.data.searchInboundShipments.total;\n tempData[idx].cars = amt;\n totalAmt += amt;\n } else tempData[idx].cars = 0;\n });\n\n const avg = Math.round(totalAmt / tempData.length);\n setAverage(avg);\n setData(tempData);\n } catch (err) {\n logError(\"AvgInboundCarsByAccount:getInboundsData\", err, notify);\n }\n };\n\n return (\n <>\n
    \n \n
    \n \n Avg Inbound Cars by Account\n \n \n \n \n \n \n \n \n \n {data.map((entry, index) => (\n average ? \"orange\" : \"blue\"}\n />\n ))}\n \n {average && (\n \n )}\n \n \n \n );\n};\n\nexport default AvgInboundCarsByAccount;\n","import React, { useState } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport {\n CardContent,\n CardActions,\n Button,\n Typography,\n Grid,\n Paper,\n useMediaQuery,\n Dialog,\n DialogTitle,\n TableContainer,\n Table,\n TableBody,\n TableHead,\n TableRow,\n TableCell,\n DialogActions,\n DialogContent,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { format } from \"date-fns\";\nimport { AreaType, UserType } from \"../../utils/constants\";\nimport { getLocationFullName } from \"../../utils/locationUtils\";\nimport { getUnitName } from \"../../utils/loadTypeUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n inventoryCardAvatar: {\n color: theme.palette.getContrastText(theme.palette.secondary.main),\n backgroundColor: theme.palette.secondary.main,\n width: theme.spacing(6),\n height: theme.spacing(6),\n },\n listHeader: {\n marginTop: theme.spacing(1.5),\n marginLeft: theme.spacing(2),\n },\n cardItemLeft: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n fontWeight: 500,\n },\n cardItemRight: {\n display: \"flex\",\n marginTop: theme.spacing(1),\n },\n progress: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 300,\n },\n link: {\n color: \"inherit\",\n textDecoration: \"inherit\",\n },\n searchContainer: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n },\n}));\n\nconst InventoryCard = ({ itm: inventory, match }) => {\n const [open, setOpen] = useState(false);\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n if (!inventory) return <>;\n\n const getFullName = (productName, size = 26) => {\n if (!productName) return \"\";\n if (!isSmall) return productName;\n if (productName.length <= size) return productName;\n return productName.substring(0, size - 3) + \"...\";\n };\n\n return (\n \n \n \n {window.appUser.type === UserType.CREW ? (\n \n {inventory.productName}\n \n ) : (\n \n \n {inventory.productName}\n \n \n )}\n \n Product Code: {inventory.productCode}\n \n \n Account Name: {getFullName(inventory.accountName)}\n \n \n Lot Number: {inventory.lotNumber}\n \n \n Quantity Onnand: {inventory.quantityOnHand}\n \n \n Date Received:{\" \"}\n {format(new Date(inventory.deliveryDateTime), \"MM/dd/yyyy\")}\n \n \n {match && (\n \n \n \n \n \n \n )}\n \n \n Locations\n \n {\n \n \n \n \n \n {isSmall ? \"Loc\" : \"Location\"}\n \n {isSmall ? \"Onhd\" : \"Quantity Onhand\"}\n \n \n {isSmall ? \"Cmtd\" : \"Quantity Committed\"}\n \n \n \n \n \n {inventory.inventoryItems.items.map((itm) => (\n \n \n {getLocationFullName(itm.location)}\n \n {`${itm.quantityOnHand} ${\n isSmall ? \"\" : getUnitName(inventory.inventoryUnits)\n }`}\n {`${\n itm.quantityCommitted ? itm.quantityCommitted : 0\n } ${\n isSmall ? \"\" : getUnitName(inventory.inventoryUnits)\n }`}\n \n \n \n \n \n \n ))}\n \n
    \n
    \n
    \n }\n
    \n \n \n \n \n
    \n );\n};\n\nexport default InventoryCard;\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { Route } from \"react-router-dom\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { accountByActiveByNameDropDown } from \"../../../graphql/account/custom-queries\";\nimport { inventoryByStatusByAccount } from \"../../../graphql/inventory/custom-queries\";\n\nimport { CircularProgress, Grid, TextField, Backdrop } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { green, grey, orange } from \"@material-ui/core/colors\";\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\n\nimport { useNotify, Title } from \"react-admin\";\n\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport { InventoryMapOutlinedIcon } from \"../../../components/common\";\nimport InventoryCard from \"../../../components/common/InventoryCard\";\nimport { InventoryStatus } from \"../../../utils/constants\";\nimport { logError } from \"../../../utils/appUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n locationContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n },\n locationItem: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n locationEmptyAvatar: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n minWidth: theme.spacing(12),\n color: theme.palette.getContrastText(green[200]),\n padding: theme.spacing(1),\n minHeight: theme.spacing(12),\n backgroundColor: green[200],\n margin: theme.spacing(1),\n },\n locationSelectedAvatar: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n minWidth: theme.spacing(12),\n color: theme.palette.getContrastText(orange[200]),\n padding: theme.spacing(1),\n minHeight: theme.spacing(12),\n backgroundColor: orange[200],\n margin: theme.spacing(1),\n },\n locationAvatar: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n minWidth: theme.spacing(12),\n color: theme.palette.getContrastText(grey[200]),\n padding: theme.spacing(1),\n minHeight: theme.spacing(12),\n backgroundColor: grey[200],\n margin: theme.spacing(1),\n },\n backdrop: {\n zIndex: 90001,\n },\n selectAccount: {\n display: \"flex\",\n justifyContent: \"center\",\n marginTop: theme.spacing(2),\n },\n inventoryCard: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n padding: theme.spacing(2),\n margin: theme.spacing(1),\n },\n searchField: {\n minWidth: \"20rem\",\n },\n}));\n\nconst YardLocations = ({ match }) => {\n return (\n <>\n }\n />\n }\n />\n \n );\n};\n\nconst MyYardLocations = (props) => {\n return (\n <>\n \n <CrewCard\n title=\"Inventory Map\"\n icon={<InventoryMapOutlinedIcon fontSize=\"large\" />}\n >\n <InventoryMapContent {...props} />\n </CrewCard>\n </>\n );\n};\n\nconst InventoryMapContent = ({\n account,\n setLocation,\n setAuditAccount,\n setAuditLocations,\n match,\n}) => {\n const SELECT_AN_ACCOUNT = \"Select an account\";\n const [loading, setLoading] = useState();\n const [value, setValue] = useState(\n account ? account : { id: null, businessName: SELECT_AN_ACCOUNT }\n );\n const [inputValue, setInputValue] = useState(\"\");\n const [allAccounts, setAllAccounts] = useState([]);\n const [accountLocations, setAccountLocations] = useState([]);\n const [locations, setLocations] = useState([]);\n const [aisles, setAisles] = useState([]);\n const [aisleMap, setAisleMap] = useState([]);\n const [selectedAisle, setSelectedAisle] = useState();\n const isComponentMounted = useRef(true);\n const notify = useNotify();\n const classes = useStyles();\n\n useEffect(() => {\n getAccounts();\n return () => (isComponentMounted.current = false);\n }, []);\n\n const getAccounts = async () => {\n try {\n const response = await API.graphql(\n graphqlOperation(accountByActiveByNameDropDown, {\n reloadYardId: window.appUser?.reloadYardId,\n activeBusinessName: { beginsWith: { active: 'true' } },\n })\n );\n isComponentMounted &&\n setAllAccounts([\n { id: null, businessName: SELECT_AN_ACCOUNT },\n ...response.data.accountByActiveByName.items.map((acct) => {\n return { id: acct.id, businessName: acct.businessName };\n }),\n ]);\n } catch (err) {\n logError(\"Locations:YardLocations:getAccounts\", err, notify);\n }\n };\n\n const getInventories = async (accountName) => {\n setLoading(true);\n try {\n let query = {\n reloadYardId: window.appUser.reloadYardId,\n statusAccountNameProductNameLotNumber: {\n beginsWith: {\n status: InventoryStatus.STORED,\n accountName: accountName,\n },\n },\n limit: 1000,\n };\n let resp = await API.graphql(\n graphqlOperation(inventoryByStatusByAccount, query)\n );\n let inventoryData =\n resp.data.inventoryByStatusByAccountByProductByLot.items;\n const result = {};\n const LocationMap = {};\n const aisleMap = {};\n\n debugger;\n inventoryData.forEach((itm) => {\n if (itm.location) {\n itm.location.aisle.area = itm.location.area;\n itm.location.aisle.zone = itm.location.zone;\n aisleMap[itm.location.aisleId] = itm.location.aisle;\n LocationMap[itm.location.id] = itm.location;\n\n if (!result[itm.location.aisleId])\n result[itm.location.aisleId] = { quantity: 0 };\n if (!result[itm.location.aisleId][itm.accountId])\n result[itm.location.aisleId][itm.accountId] = [];\n result[itm.location.aisleId][itm.accountId].push(itm);\n result[itm.location.aisleId].quantity =\n result[itm.location.aisleId][itm.accountId].length;\n }\n });\n\n setAisleMap(aisleMap);\n const ailses = Object.values(aisleMap);\n setAisles(ailses);\n\n result.createdAt = new Date().toISOString();\n const accountLocations = Object.values(aisleMap);\n debugger;\n setLocations(result);\n setAccountLocations(accountLocations);\n return result;\n } catch (err) {\n logError(\"Locations:YardLocations:getInventories\", err, notify);\n } finally {\n setLoading(false);\n }\n };\n\n const setSelectedAccount = async (newValue, locations) => {\n setValue(newValue);\n\n if (setAuditAccount) setAuditAccount(newValue);\n if (!newValue || newValue.businessName === SELECT_AN_ACCOUNT) {\n setAccountLocations([]);\n if (setAuditLocations) setAuditLocations([]);\n } else {\n await getInventories(newValue.businessName);\n }\n setSelectedAisle(\"\");\n };\n\n const selectLocation = (locationId) => {\n setSelectedAisle(locationId);\n\n if (setLocation) setLocation(locationId);\n };\n\n const getAvatarClass = (locationId) => {\n if (!locationId) return classes.locationAvatar;\n let avatarClass = classes.locationEmptyAvatar;\n if (locationId === selectedAisle)\n avatarClass = classes.locationSelectedAvatar;\n else {\n const qty = locations[locationId] ? locations[locationId].quantity : 0;\n if (qty > 0) {\n avatarClass = classes.locationAvatar;\n }\n }\n return avatarClass;\n };\n\n const setAccountInputValue = (event, newInputValue) => {\n setInputValue(newInputValue);\n };\n\n return loading ? (\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n ) : (\n <>\n <Grid container justifyContent=\"center\" alignItems=\"center\">\n <Grid item xs={12}>\n <div className={classes.selectAccount}>\n <Autocomplete\n id=\"accounts\"\n defaultValue={value}\n inputValue={inputValue}\n options={allAccounts}\n getOptionLabel={(option) => option.businessName}\n onChange={(event, newValue) =>\n setSelectedAccount(newValue, locations)\n }\n onInputChange={setAccountInputValue}\n className={classes.searchField}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Select account\"\n size=\"small\"\n variant=\"outlined\"\n />\n )}\n />\n </div>\n </Grid>\n </Grid>\n {selectedAisle && (\n <Grid container spacing={2}>\n {locations[selectedAisle] &&\n Object.keys(locations[selectedAisle]).map((key) =>\n key === \"quantity\"\n ? null\n : locations[selectedAisle][key].map((itm) => (\n <InventoryCard key={itm.id} itm={itm} match={match} />\n ))\n )}\n </Grid>\n )}\n </>\n );\n};\n\n// export const InventoryMap = ({account, setLocation}) => (\n// \t<MyYardLocations account={account} setLocation={setLocation} />\n// )\n\nexport const AuditMap = ({ setAuditAccount, setAuditLocations }) => (\n <InventoryMapContent\n setAuditAccount={setAuditAccount}\n setAuditLocations={setAuditLocations}\n />\n);\n\nconst LocationSearch = (props) => <YardLocations {...props} />;\nexport default LocationSearch;\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { Loading, Title } from \"react-admin\";\nimport { CardContent, CardMedia, Grid } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { getPhotoUrl } from \"../../../utils/fileUtils\";\nimport MapOutlinedIcon from \"@material-ui/icons/MapOutlined\";\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\n\nconst useStyles = makeStyles((theme) => ({\n media: {\n margin: \"auto\",\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n borderRadius: \"6px\",\n boxShadow: \"010px20pxrgba(0,0,0,0.19),06px6pxrgba(0,0,0,0.23)\",\n },\n}));\n\nexport const Maps = (props) => {\n const record = { mapImage: window.appUser.reloadYard.mapImage };\n\n return (\n <>\n <Title title={<ForceTitle title=\"Map\" />} />\n <CrewCard title=\"Yard Map\" icon={<MapOutlinedIcon fontSize=\"large\" />}>\n <CardContent>\n <MapContent {...props} record={record} />\n </CardContent>\n </CrewCard>\n </>\n );\n};\n\nexport const MapContent = ({ record, ...props }) => {\n const classes = useStyles();\n const isComponentMounted = useRef(true);\n const photoSize = window.innerWidth < 1280 ? 1280 : window.innerWidth;\n\n const [loading, setLoading] = useState(true);\n const [photo, setPhoto] = useState();\n\n useEffect(() => {\n if (isComponentMounted) getMap();\n return () => (isComponentMounted.current = false);\n }, []);\n\n const getMap = () => {\n debugger;\n if (record?.mapImage) {\n const fullSizeUrl = getPhotoUrl(record.mapImage.key, photoSize);\n setPhoto(fullSizeUrl);\n } else setPhoto(null);\n\n setLoading(false);\n };\n\n if (loading) return <Loading />;\n return (\n <Grid container justifyContent=\"center\" alignItems=\"center\" spacing={2}>\n <Grid item xs={12}>\n {photo ? (\n <CardMedia className={classes.media} image={photo} component=\"img\" />\n ) : null}\n </Grid>\n </Grid>\n );\n};\n","import React, { useState, useEffect } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { countOutboundShipments } from \"../../graphql/outbound/custom-queries\";\n\nimport { addMonths, format, startOfMonth, sub } from \"date-fns\";\n\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n Cell,\n ReferenceLine,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\n\nimport { Typography } from \"@material-ui/core\";\n\nimport { useNotify } from \"ra-core\";\n\nimport Title from \"./Title\";\nimport { logError } from \"../../utils/appUtils\";\nimport { OutboundStatus } from \"../../utils/constants\";\n\nconst CustomizedLabel = (props) => {\n const { x, y, fill, value } = props;\n\n return (\n <text\n x={x}\n y={y}\n dy={-4}\n fontSize=\"16\"\n fontFamily=\"sans-serif\"\n fill={fill}\n textAnchor=\"middle\"\n >\n {value}\n </text>\n );\n};\n\nconst OutboundCarsByMonth = ({ reloadYardId, ...props }) => {\n const notify = useNotify();\n const [average, setAverage] = useState(0);\n const [data, setData] = useState([]);\n\n useEffect(() => {\n getOutboundCarsData();\n }, []);\n\n const getOutboundCarsData = async () => {\n // Get the last 12 months, including current month\n const startDate = startOfMonth(sub(new Date(), { months: 11 }));\n let tempData = [];\n\n try {\n const queryList = [];\n const yardId = reloadYardId ? reloadYardId : window.appUser?.reloadYardId;\n debugger;\n\n for (let i = 0; i <= 11; i++) {\n const newDate = addMonths(startDate, i);\n const nextDate = addMonths(newDate, 1);\n const monthName = format(newDate, \"MMM\");\n const options = { month: \"2-digit\", year: \"numeric\" };\n const barDate = newDate.toLocaleDateString(\"en-US\", options);\n\n tempData[i] = { name: monthName, date: barDate, amt: 0 };\n\n queryList[i] = API.graphql(\n graphqlOperation(countOutboundShipments, {\n filter: {\n reloadYardId: { eq: yardId },\n status: { eq: OutboundStatus.RELEASED },\n and: [\n { departureDateTime: { gte: newDate } },\n { departureDateTime: { lt: nextDate } },\n ],\n },\n limit: 1000,\n })\n );\n }\n\n const promiseResults = await Promise.all(queryList);\n let totalAmt = 0;\n\n promiseResults.forEach((result, idx) => {\n const amt = result.data.searchOutboundShipments.total;\n tempData[idx].amt = amt;\n totalAmt += amt;\n });\n\n const avg = Math.round(totalAmt / tempData.length);\n\n setData(tempData);\n setAverage(avg);\n } catch (err) {\n logError(\"OutboundCarsByMonth:getOutboundCarsData\", err, notify);\n }\n };\n\n return (\n <>\n <Title>Outbounds per Month\n \n \n \n \n \n {\n if (payload && payload.length) {\n const { date, amt } = payload[0].payload;\n return (\n \n {`Date: ${date}`}\n {`Value: ${amt}`}\n {`Average: ${average}`}\n \n );\n }\n return null;\n }}\n />\n {average && (\n \n )}\n \n label={}\n {data.map((entry, index) => (\n average ? \"green\" : \"orange\"} />\n ))}\n \n \n \n \n );\n};\n\nexport default OutboundCarsByMonth;\n","import React, { useState, useEffect } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { countInboundShipments } from \"../../graphql/inbound/custom-queries\";\n\nimport { addDays, format, startOfDay, sub } from \"date-fns\";\n\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\n\nimport { Typography } from \"@material-ui/core\";\n\nimport { useNotify } from \"ra-core\";\n\nimport Title from \"./Title\";\nimport { logError } from \"../../utils/appUtils\";\nimport { InboundStatus } from \"../../utils/constants\";\n\nconst CustomizedLabel = (props) => {\n const { x, y, fill, value } = props;\n\n return (\n \n {value}\n \n );\n};\n\nconst DailyInbounds = ({ reloadYardId, ...props }) => {\n const notify = useNotify();\n const [data, setData] = useState([]);\n\n useEffect(() => {\n getInboundCarsData();\n }, []);\n\n const getInboundCarsData = async () => {\n // Get the last 14 days, excluding today\n const startDate = startOfDay(sub(new Date(), { days: 14 }));\n let tempData = [];\n\n try {\n const queryList = [];\n const yardId = reloadYardId ? reloadYardId : window.appUser?.reloadYardId;\n debugger;\n\n for (let i = 0; i <= 13; i++) {\n const newDate = addDays(startDate, i);\n const nextDate = addDays(newDate, 1);\n const dayName = format(newDate, \"EEE\");\n const options = { month: \"2-digit\", day: \"2-digit\", year: \"numeric\" };\n const barDate = newDate.toLocaleDateString(\"en-US\", options);\n\n tempData[i] = { name: dayName, date: barDate, amt: 0 };\n\n queryList[i] = API.graphql(\n graphqlOperation(countInboundShipments, {\n filter: {\n reloadYardId: { eq: yardId },\n status: { eq: InboundStatus.RELEASED },\n and: [\n { releaseDateTime: { gte: newDate.toISOString() } },\n { releaseDateTime: { lt: nextDate.toISOString() } },\n ],\n },\n limit: 1000,\n })\n );\n }\n\n const promiseResults = await Promise.all(queryList);\n\n promiseResults.forEach((result, idx) => {\n const amt = result.data.searchInboundShipments.total;\n tempData[idx].amt = amt;\n });\n\n setData(tempData);\n } catch (err) {\n logError(\"DailyInbounds:getInboundCarsData\", err, notify);\n }\n };\n\n return (\n <>\n Daily Inbounds\n \n \n \n \n \n {\n if (payload && payload.length) {\n const { date, amt } = payload[0].payload;\n return (\n \n {`Date: ${date}`}\n {`Value: ${amt}`}\n \n );\n }\n return null;\n }}\n />\n } />\n \n \n \n );\n};\n\nexport default DailyInbounds;\n","import React, { useState, useEffect } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { countOutboundShipments } from \"../../graphql/outbound/custom-queries\";\n\nimport { addDays, format, startOfDay, sub } from \"date-fns\";\n\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\n\nimport { Typography } from \"@material-ui/core\";\n\nimport { useNotify } from \"ra-core\";\n\nimport Title from \"./Title\";\nimport { logError } from \"../../utils/appUtils\";\nimport { OutboundStatus } from \"../../utils/constants\";\n\nconst CustomizedLabel = (props) => {\n const { x, y, fill, value } = props;\n\n return (\n \n {value}\n \n );\n};\n\nconst DailyOutbounds = ({ reloadYardId, ...props }) => {\n const notify = useNotify();\n const [data, setData] = useState([]);\n\n useEffect(() => {\n getInboundCarsData();\n }, []);\n\n const getInboundCarsData = async () => {\n // Get the last 14 days, excluding current day\n const startDate = startOfDay(sub(new Date(), { days: 14 }));\n let tempData = [];\n\n try {\n const queryList = [];\n const yardId = reloadYardId ? reloadYardId : window.appUser?.reloadYardId;\n debugger;\n\n for (let i = 0; i <= 13; i++) {\n const newDate = addDays(startDate, i);\n const nextDate = addDays(newDate, 1);\n const dayName = format(newDate, \"EEE\");\n const options = { month: \"2-digit\", day: \"2-digit\", year: \"numeric\" };\n const barDate = newDate.toLocaleDateString(\"en-US\", options);\n\n tempData[i] = { name: dayName, date: barDate, amt: 0 };\n\n queryList[i] = API.graphql(\n graphqlOperation(countOutboundShipments, {\n filter: {\n reloadYardId: { eq: yardId },\n status: { eq: OutboundStatus.RELEASED },\n and: [\n { departureDateTime: { gte: newDate.toISOString() } },\n { departureDateTime: { lt: nextDate.toISOString() } },\n ],\n },\n limit: 1000,\n })\n );\n }\n\n const promiseResults = await Promise.all(queryList);\n\n promiseResults.forEach((result, idx) => {\n const amt = result.data.searchOutboundShipments.total;\n tempData[idx].amt = amt;\n });\n\n setData(tempData);\n } catch (err) {\n logError(\"InboundCars:getInboundCarsData\", err, notify);\n }\n };\n\n return (\n <>\n Daily Outbounds\n \n \n \n \n \n {\n if (payload && payload.length) {\n const { date, amt } = payload[0].payload;\n return (\n \n {`Date: ${date}`}\n {`Value: ${amt}`}\n \n );\n }\n return null;\n }}\n />\n } />\n \n \n \n );\n};\n\nexport default DailyOutbounds;\n","import React from \"react\";\nimport clsx from \"clsx\";\n\nimport { MenuItemLink } from \"react-admin\";\n\nimport { Grid, MenuList, Paper } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport Title from \"./Title\";\nimport { ForceTitle } from \"../../components/common/ForceTitle\";\nimport {\n BarChartIcon,\n PieChartIcon,\n TableChartIcon,\n TimelineIcon,\n} from \"../../components/common\";\nimport InboundCarsByMonth from \"./InboundCarsByMonth\";\nimport OutboundCarsByMonth from \"./OutboundCarsByMonth\";\nimport DailyInbounds from \"./DailyInbounds\";\nimport DailyOutbounds from \"./DailyOutbounds\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n width: \"100%\",\n marginTop: theme.spacing(1),\n },\n paper: {\n padding: theme.spacing(2),\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n fixedHeight: {\n height: 240,\n },\n report: {\n display: \"flex\",\n alignItems: \"center\",\n },\n}));\n\nconst Reports = (props) => {\n const classes = useStyles();\n const fixedHeightPaper = clsx(classes.paper, classes.fixedHeight);\n\n return (\n
    \n
    \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Reports\n \n \n \n {/*\n \n \n Inbound Cars by Account per month \n \n \n \n  Top Revenue per account \n \n*/}\n }\n dense={true}\n />\n }\n dense={true}\n />\n }\n dense={true}\n />\n }\n dense={true}\n />\n }\n dense={true}\n />\n \n \n \n \n }\n dense={true}\n />\n }\n dense={true}\n />\n }\n dense={true}\n />\n }\n dense={true}\n />\n }\n dense={true}\n />\n }\n dense={true}\n />\n }\n dense={true}\n />\n }\n dense={true}\n />\n }\n dense={true}\n />\n }\n dense={true}\n />\n \n \n \n \n \n \n
    \n );\n};\n\nexport default Reports;\n","import React from \"react\";\nimport {\n Paper,\n Table,\n TableCell,\n TableHead,\n TableContainer,\n TableRow,\n TableBody,\n useMediaQuery,\n Box,\n Typography,\n} from \"@material-ui/core\";\nimport { getUnitName } from \"../../../utils/loadTypeUtils\";\n\nexport const LocationInventories = ({ inventoryItems }) => {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n return inventoryItems.length === 0 ? (\n \n \n No Inventories found\n \n \n ) : (\n \n \n \n \n {isSmall ? \"Product\" : \"Product Name\"}\n Account\n {isSmall ? \"Onhd\" : \"Quantity Onhand\"}\n \n \n \n {inventoryItems?.length > 0 &&\n inventoryItems.map((inventoryItem) => (\n \n {inventoryItem.inventory.productName}\n {inventoryItem.inventory.accountName}\n {`${inventoryItem.quantityOnHand} ${\n !isSmall\n ? getUnitName(inventoryItem.inventory.inventoryUnits)\n : \"\"\n }`}\n \n ))}\n \n
    \n
    \n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { updateLocation } from \"../../../graphql/mutations\";\nimport {\n getAisle,\n locationByAisleBySortKey,\n} from \"../../../graphql/reloadyard/custom-queries\";\nimport {\n inventoryItemByAisleByStatusLookup,\n inventoryItemByLocationByStatus,\n} from \"../../../graphql/inventory/custom-queries\";\nimport {\n Backdrop,\n Box,\n Button,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormControl,\n FormControlLabel,\n Grid,\n IconButton,\n Paper,\n Radio,\n RadioGroup,\n Slider,\n Table,\n TableContainer,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport HighlightOffIcon from \"@material-ui/icons/HighlightOff\";\nimport SpeedIcon from \"@material-ui/icons/Speed\";\nimport { blueGrey, green, deepOrange } from \"@material-ui/core/colors\";\nimport {\n ListToolbar,\n RefreshButton,\n Title,\n TopToolbar,\n useNotify,\n} from \"react-admin\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { LinearProgress } from \"ra-ui-materialui\";\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n InventoryStatus,\n LocationLoadTypeOptions,\n PortalType,\n} from \"../../../utils/constants\";\nimport {\n getAisleFullName,\n getLocationFullName,\n getLocationViewName,\n isUnmanagedLocation,\n} from \"../../../utils/locationUtils\";\nimport { LocationInventories } from \"./LocationInventories\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: \"#fff\",\n },\n mapContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"center\",\n flexWrap: \"wrap\",\n minHeight: theme.spacing(24),\n width: \"100%\",\n },\n mapContainerMobile: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"center\",\n flexWrap: \"wrap\",\n minHeight: theme.spacing(24),\n width: \"100%\",\n },\n bayContainer: {\n display: \"flex\",\n flexDirection: \"column-reverse\",\n alignItems: \"center\",\n alignContent: \"space-between\",\n border: \"1px solid #b0bec5\",\n borderRadius: theme.spacing(1),\n margin: theme.spacing(0.5),\n padding: theme.spacing(0.5),\n paddingTop: theme.spacing(1),\n },\n levelContainer: {\n border: \"1px solid\",\n borderColor: blueGrey[500],\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n },\n locationAvatar: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(deepOrange[900]),\n backgroundColor: deepOrange[700],\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"1px solid\",\n borderColor: deepOrange[500],\n borderRadius: theme.spacing(0.5),\n \"&:hover\": {\n cursor: \"pointer\",\n backgroundColor: deepOrange[500],\n color: theme.palette.getContrastText(deepOrange[500]),\n },\n width: \"100%\",\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n locationAvailableAvatar: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(green[600]),\n backgroundColor: green[600],\n borderColor: green[600],\n margin: theme.spacing(0.5),\n whiteSpace: \"nowrap\",\n border: \"3px solid\",\n borderRadius: theme.spacing(0.5),\n \"&:hover\": {\n cursor: \"pointer\",\n backgroundColor: green[600],\n color: theme.palette.getContrastText(green[600]),\n },\n width: \"100%\",\n paddingRight: theme.spacing(2),\n paddingLeft: theme.spacing(2),\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n },\n}));\n\nconst ListActions = ({ init, backPath, ...props }) => {\n return (\n \n \n \n \n );\n};\n\nexport const StructuredAisle = ({ match, history, ...props }) => {\n const classes = useStyles();\n const notify = useNotify();\n const [aisle, setAisle] = useState();\n const [bayList, setBayList] = useState([]);\n const [uomMap, setUomMap] = useState({});\n const [utilization, setUtilization] = useState(\"\");\n const portalType = window.appUser.portalType;\n const backPath = [\"/utilization\"];\n const dispatch = useDispatch();\n const loading = useSelector((state) => state.data.isLoading);\n\n useEffect(() => {\n window.scrollTo(0, 0);\n getAisleUtilization();\n }, []);\n\n const getAisleUtilization = async () => {\n try {\n dispatch({ type: \"SET_LOADING\", payload: { isLoading: true } });\n debugger;\n const aisleResponse = await API.graphql(\n graphqlOperation(getAisle, { id: match.params.id })\n );\n const aisle = aisleResponse.data.getAisle;\n if (aisle.locations.nextToken) {\n const locationResponse = await API.graphql(\n graphqlOperation(locationByAisleBySortKey, {\n aisleId: match.params.id,\n limit: 1000,\n })\n );\n aisle.locations.items =\n locationResponse.data.locationByAisleBySortKey.items.filter(\n (itm) => itm.active === \"true\"\n );\n } else {\n aisle.locations.items = aisle.locations.items.filter(\n (itm) => itm.active === \"true\"\n );\n }\n setAisle(aisle);\n setupAisle(aisle);\n const aisleUtilzation =\n aisle.locations.items.reduce(\n (total, itm) => (total += itm.capacityUsed ? itm.capacityUsed : 0),\n 0\n ) / aisle.locations.items.length;\n setUtilization(aisleUtilzation);\n getAisleInventories(aisle);\n } catch (error) {\n logError(\"StructuredAisle:getAreaUtilization\", error, notify);\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: { isLoading: false } });\n }\n };\n\n const setupAisle = (aisle) => {\n debugger;\n const bayList = [];\n\n for (let location of aisle.locations.items) {\n const bay = location.bay;\n if (!bayList[bay]) bayList[bay] = [];\n const level = location.level;\n if (!bayList[bay][level - 1]) bayList[bay][level - 1] = [];\n bayList[bay][level - 1].push(location);\n }\n bayList.splice(0, 1);\n for (let bay of bayList) {\n if (!bay || bay.length === 0) continue;\n for (let level of bay) {\n level.sort((a, b) => {\n return a.position - b.position;\n });\n }\n }\n setBayList(bayList);\n };\n\n const getAisleInventories = async (aisle) => {\n try {\n dispatch({ type: \"SET_LOADING\", payload: { isLoading: true } });\n const inventoryItemsList = [];\n const searchInput = {\n aisleId: aisle.id,\n status: { beginsWith: InventoryStatus.STORED },\n limit: 1000,\n };\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { ...searchInput, nextToken };\n const results = await API.graphql(\n graphqlOperation(inventoryItemByAisleByStatusLookup, input)\n );\n inventoryItemsList.splice(\n -1,\n 0,\n ...results.data.inventoryItemByAisleByStatus.items\n );\n nextToken = results.data.inventoryItemByAisleByStatus.nextToken;\n }\n\n if (inventoryItemsList.length > 0) {\n const uomMap = {};\n inventoryItemsList.forEach((itm) => {\n if (!uomMap[itm.inventory.inventoryUnits])\n uomMap[itm.inventory.inventoryUnits] = 0;\n uomMap[itm.inventory.inventoryUnits] += itm.quantityOnHand;\n });\n setUomMap(uomMap);\n }\n debugger;\n } catch (error) {\n logError(\"utilization:LocationCard:getInventories\", error, notify);\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: { isLoading: false } });\n }\n };\n\n const handleCancel = () => {\n window.scrollTo(0, 0);\n history.push(\"/utilization\");\n };\n\n return portalType === PortalType.MANAGER ? (\n
    \n } />\n <ListToolbar\n {...props}\n actions={<ListActions backPath={backPath} init={getAisleUtilization} />}\n />\n <CrewCard title={\"Aisle \" + getAisleFullName(aisle)} showDivider={false}>\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <AisleContent\n classes={classes}\n notify={notify}\n bayList={bayList}\n uomMap={uomMap}\n utilization={utilization}\n getAisleUtilization={getAisleUtilization}\n />\n </CrewCard>\n </div>\n ) : (\n <CrewCard\n title=\"Yard Utilization\"\n subheader={\"Aisle \" + getAisleFullName(aisle)}\n showDivider={false}\n icon={<SpeedIcon fontSize=\"large\" />}\n action={\n <IconButton edge=\"start\" onClick={handleCancel}>\n <HighlightOffIcon fontSize=\"large\" />\n </IconButton>\n }\n >\n <>\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <AisleContent\n classes={classes}\n notify={notify}\n bayList={bayList}\n uomMap={uomMap}\n utilization={utilization}\n getAisleUtilization={getAisleUtilization}\n />\n <Grid container xs={12} justifyContent=\"flex-end\">\n <Box>\n <Button onClick={() => handleCancel()} color=\"default\">\n Close\n </Button>\n </Box>\n </Grid>\n </>\n </CrewCard>\n );\n};\n\nconst AisleContent = ({\n classes,\n notify,\n bayList,\n uomMap,\n utilization,\n getAisleUtilization,\n}) => {\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n // const [loadType, setLoadType] = useState();\n // const [totalQuantity, setTotalQuantity] = useState();\n // const [loadTypeName, setLoadTypeName] = useState();\n // const [showQuantity, setShowQuantity] = useState();\n const [inventoryItems, setInventoryItems] = useState([]);\n const [capacityUsed, setCapacityUsed] = useState();\n const [selectedLocation, setSelectedLocation] = useState();\n const [openDialog, setOpenDialog] = useState();\n const dispatch = useDispatch();\n\n // const [marks, setMarks] = useState(Array.from({length: 6}, (_, i) => ({label: `${i * 20}%`, value: i * 20})));\n // useEffect(() => {\n // const step = isXSmall ? 20 : 10;\n // const newMarks = [];\n // for (let i = 0; i <= 100; i += step) {\n // newMarks.push({label: `${i}%`, value: i});\n // }\n // setMarks(newMarks);\n // }, [isXSmall]);\n\n const getInventories = async (location) => {\n try {\n debugger;\n dispatch({ type: \"SET_LOADING\", payload: { isLoading: true } });\n const results = await API.graphql(\n graphqlOperation(inventoryItemByLocationByStatus, {\n locationId: location.id,\n status: { beginsWith: InventoryStatus.STORED },\n })\n );\n const inventoryItemsList =\n results.data.inventoryItemByLocationByStatus.items;\n if (inventoryItemsList.length > 0) {\n inventoryItemsList.sort((a, b) => b.quantityOnHand - a.quantityOnHand);\n // const loadTypeName = inventoryItemsList[0].inventory.reloadYardCommodity.commodity.locationLoadType.toLowerCase();\n // const sameLoadType = inventoryItemsList.reduce((accumulator, itm) =>\n // accumulator && itm.inventory.reloadYardCommodity.commodity.locationLoadType === loadTypeName, true);\n // if (sameLoadType && location.locationLoad[loadTypeName].selected) {\n // setLoadType(location.locationLoad[loadTypeName]);\n // const totalQuantity = inventoryItemsList.reduce((accumulator, itm) => accumulator + itm.quantityOnHand, 0);\n // setShowQuantity(true);\n // setTotalQuantity(totalQuantity);\n // setLoadTypeName(loadTypeName[0].toUpperCase() + loadTypeName.substring(1));\n // }\n } else {\n // setTotalQuantity(null);\n // setShowQuantity(false);\n }\n\n setInventoryItems(inventoryItemsList);\n debugger;\n } catch (error) {\n logError(\"utilization:LocationCard:getInventories\", error, notify);\n } finally {\n dispatch({ type: \"SET_LOADING\", payload: { isLoading: false } });\n }\n };\n\n const handleSelectLocation = async (location) => {\n debugger;\n setSelectedLocation(location);\n setCapacityUsed(location.capacityUsed);\n await getInventories(location);\n setOpenDialog(true);\n };\n\n const saveLocationCapacity = async () => {\n try {\n debugger;\n const toUpdateLocation = { id: selectedLocation.id, capacityUsed };\n await API.graphql(\n graphqlOperation(updateLocation, { input: toUpdateLocation })\n );\n getAisleUtilization();\n } catch (err) {\n logError(\"StructuredAisle:saveLocationCapacity\", err, notify);\n } finally {\n setOpenDialog(false);\n }\n };\n\n const handleCapacityChange = (event, newValue) => {\n debugger;\n setCapacityUsed(newValue);\n };\n\n const getFullName = (location, size = 16) => {\n if (!location) return \"\";\n const name = getLocationViewName(location);\n if (!isXSmall) return name;\n if (name.length <= size) return name;\n return name.substring(0, size - 3) + \"...\";\n };\n\n const getLocationAvatarClassname = (location) => {\n if (location.capacityUsed === 100) return classes.locationAvatar;\n return classes.locationAvailableAvatar;\n };\n\n const getLocationCapcity = () => {\n debugger;\n let capacity = \"\";\n LocationLoadTypeOptions.forEach((item) => {\n const locationLoadType = selectedLocation?.locationLoad[item.id];\n\n if (locationLoadType?.selected && locationLoadType.capacity) {\n if (capacity === \"\")\n capacity += `${100 / locationLoadType.capacity} ${item.name}(s)`;\n else\n capacity += `, ${100 / locationLoadType?.capacity} ${item.name}(s)`;\n }\n });\n\n return capacity;\n };\n\n // let quantity;\n // if (showQuantity) {\n // debugger;\n // quantity = Math.floor(capacityUsed / loadType.capacity);\n // }\n\n return (\n <Paper elevation={0}>\n <Box mr={2} ml={2} mb={2} justifyContent=\"center\" display=\"flex\">\n <LinearProgress\n color=\"secondary\"\n variant=\"determinate\"\n value={utilization}\n style={{ minWidth: isXSmall ? \"80%\" : \"92%\" }}\n />\n  {\" \"}\n {utilization.toLocaleString(\"en-US\", { maximumFractionDigits: 2 })}%\n </Box>\n <Grid container>\n {Object.keys(uomMap).length > 0 && (\n <Grid item xs={12}>\n <Box mb={2}>\n <UomQuantityTable uomMap={uomMap} />\n </Box>\n </Grid>\n )}\n <Grid item xs={12}>\n <div\n className={\n isXSmall ? classes.mapContainerMobile : classes.mapContainer\n }\n >\n {bayList.map((bay, bayIdx) => (\n <div className={classes.bayContainer}>\n <Box m={1}>\n <Typography>{`Bay ${\n (bayIdx + 1 < 10 ? \" 0\" : \" \") + (bayIdx + 1)\n }`}</Typography>\n </Box>\n {bay.map((level) => (\n <div className={classes.levelContainer}>\n {level.map((location) => {\n return (\n <div\n key={location.id}\n className={getLocationAvatarClassname(location)}\n onClick={() => handleSelectLocation(location)}\n >\n <Typography variant=\"body2\">\n {getFullName(location)}\n </Typography>\n <Typography variant=\"body2\">{`${\n location.capacityUsed ? location.capacityUsed : 0\n }%`}</Typography>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n ))}\n </div>\n </Grid>\n <Dialog\n open={openDialog}\n fullWidth\n maxWidth={isXSmall ? \"xl\" : \"md\"}\n fullScreen={isXSmall ? true : false}\n >\n <DialogTitle>Change Utilization</DialogTitle>\n <DialogContent>\n <Box mb={2}>\n <Typography variant=\"subtitle1\" gutterBottom>\n Location Capacity\n </Typography>\n {getLocationCapcity()}\n </Box>\n {!selectedLocation?.locationLoad.container.selected ? (\n <Box m={2}>\n <Typography\n variant=\"caption\"\n color=\"textSecondary\"\n gutterBottom\n >\n {`${getLocationFullName(selectedLocation)} - ${\n capacityUsed ? capacityUsed : 0\n }% used`}\n {/* {showQuantity && ` - ${quantity} ${loadTypeName}`} */}\n </Typography>\n <StructuredCapacitySlider\n selectedLocation={selectedLocation}\n capacityUsed={capacityUsed}\n inventoryItems={inventoryItems}\n isXSmall={isXSmall}\n handleCapacityChange={handleCapacityChange}\n />\n {/* <Slider\n step={5}\n max={100}\n value={capacityUsed ? capacityUsed : 0}\n onChange={handleCapacityChange}\n marks={marks}\n fullWidth\n /> */}\n </Box>\n ) : (\n <FormControl component=\"fieldset\">\n {/* <FormLabel component=\"legend\">{ `Location ${getLocationFullName(selectedLocation)}`}</FormLabel> */}\n <Typography\n variant=\"caption\"\n color=\"textSecondary\"\n gutterBottom\n >\n {\" \"}\n {`Location ${getLocationFullName(selectedLocation)}`}\n </Typography>\n <RadioGroup\n name=\"containerCapacityChange\"\n onChange={(evt) => setCapacityUsed(evt.target.value)}\n defaultValue={\"\" + capacityUsed}\n >\n <FormControlLabel\n value=\"0\"\n control={<Radio />}\n label=\"Empty\"\n />\n <FormControlLabel\n value=\"100\"\n control={<Radio />}\n label=\"Full\"\n />\n </RadioGroup>\n </FormControl>\n )}\n <Box mb={2}>\n <Typography variant=\"subtitle1\" gutterBottom>\n Inventories\n </Typography>\n <LocationInventories inventoryItems={inventoryItems} />\n {/* {\n showQuantity && <Box mt={1}>\n {`Total quantity: ${totalQuantity} ${loadTypeName}`}\n </Box>\n } */}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button\n autoFocus\n onClick={() => setOpenDialog(false)}\n color=\"default\"\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n onClick={() => saveLocationCapacity()}\n color=\"primary\"\n autoFocus\n >\n Save\n </Button>\n </DialogActions>\n </Dialog>\n </Grid>\n </Paper>\n );\n};\n\nconst UomQuantityTable = ({ uomMap }) => {\n return (\n <TableContainer>\n <Table size=\"small\" dense>\n <TableHead>\n <TableRow>\n <TableCell>Load type</TableCell>\n <TableCell align=\"right\">Quantity</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {Object.keys(uomMap).map((key) => (\n <TableRow key={key}>\n <TableCell component=\"th\" scope=\"row\">\n {key}\n </TableCell>\n <TableCell align=\"right\">{uomMap[key]}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n );\n};\n\nconst StructuredCapacitySlider = ({\n capacityUsed,\n selectedLocation,\n inventoryItems,\n isXSmall,\n handleCapacityChange,\n}) => {\n const [marks, setMarks] = useState(\n Array.from({ length: 2 }, (_, i) => ({\n label: `${i * 50}%`,\n value: i * 50,\n }))\n );\n\n useEffect(() => {\n if (isUnmanagedLocation(selectedLocation)) {\n // locationLoadType = OTHER\n const step = isXSmall ? 20 : 10;\n const steps = 100 / step + 1;\n setMarks(\n Array.from({ length: steps }, (_, i) => ({\n label: `${i * step}%`,\n value: i * step,\n }))\n );\n } else {\n // Extract unique capacities\n const uniqueCapacities = [\n ...new Set(\n inventoryItems\n .map((itm) => {\n const loadTypeName =\n itm.inventory.reloadYardCommodity.commodity.locationLoadType;\n\n // Check if the locationLoad for the load type is selected and has a capacity\n if (\n selectedLocation.locationLoad[loadTypeName] &&\n selectedLocation.locationLoad[loadTypeName].selected\n ) {\n return selectedLocation.locationLoad[loadTypeName].capacity;\n }\n\n return null;\n })\n .filter((capacity) => capacity !== null)\n ),\n ];\n\n const tickSet = new Set([0, 100]);\n let currentCapacity = 0;\n\n while (currentCapacity < 100) {\n let canAddMore = false;\n\n for (let capacity of uniqueCapacities) {\n if (currentCapacity + capacity <= 100) {\n currentCapacity += capacity;\n tickSet.add(currentCapacity);\n canAddMore = true;\n break;\n }\n }\n\n if (!canAddMore) {\n break; // Break if no more load types can be added without exceeding 100%\n }\n }\n\n const ticks = Array.from(tickSet)\n .sort((a, b) => a - b)\n .map((value) => ({ value, label: `${value}%` }));\n setMarks(ticks);\n }\n }, [selectedLocation, inventoryItems, isXSmall]);\n\n return (\n <Slider\n value={capacityUsed ? capacityUsed : 0}\n onChange={handleCapacityChange}\n step={null}\n marks={marks}\n max={100}\n fullWidth\n />\n );\n};\n","import React, { useState, useContext, useCallback } from \"react\";\n\nimport { UserType } from \"../utils/constants\";\nimport { logError } from \"../utils/appUtils\";\n\n// Define the context\nconst UserContext = React.createContext();\n\nexport const UserProvider = ({ children }) => {\n const [appUser, setAppUserInternal] = useState(null);\n\n // Update both React state and window.appUser\n const setAppUser = (newUser) => {\n setAppUserInternal(newUser);\n window.appUser = newUser;\n try {\n if (newUser.reloadYardId) {\n localStorage.setItem(\"reloadYardId\", newUser.reloadYardId);\n }\n } catch (err) {\n logError(\"UserProvider:setAppUser\", err, false);\n }\n };\n\n const isAuthorized = useCallback(\n (permission) => {\n const userType = appUser?.type;\n if (userType === UserType.MANAGER || userType === UserType.ADMIN) {\n return true;\n }\n if (typeof appUser?.permissionList === \"object\") {\n return !!appUser.permissionList[permission];\n }\n return false;\n },\n [appUser]\n );\n\n const isMultiTenant = useCallback(() => {\n // check if customer has access to multiple transloads\n if (Array.isArray(appUser?.reloadYardAccounts?.items)) {\n return appUser.reloadYardAccounts.items.length > 1;\n }\n return false;\n }, [appUser]);\n\n return (\n <UserContext.Provider\n value={{ appUser, setAppUser, isAuthorized, isMultiTenant }}\n >\n {children}\n </UserContext.Provider>\n );\n};\n\n// Custom hook to use the context\nexport const useUser = () => useContext(UserContext);\n\nexport default UserContext;\n","import React, { useState, useEffect } from \"react\";\nimport { Route, useHistory } from \"react-router-dom\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { aisleByActiveByAreaBySortKey } from \"../../../graphql/reloadyard/custom-queries\";\nimport { locationByAreaBySortKey } from \"../../../graphql/queries\";\nimport {\n inventoryItemByAisleByStatus,\n inventoryItemByLocationByStatus,\n} from \"../../../graphql/inventory/custom-queries\";\nimport {\n Backdrop,\n Box,\n Button,\n CardContent,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n Grid,\n IconButton,\n InputAdornment,\n LinearProgress,\n MenuItem,\n Paper,\n TextField,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport SpeedIcon from \"@material-ui/icons/Speed\";\nimport FiberManualRecordIcon from \"@material-ui/icons/FiberManualRecord\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport { Title, useNotify } from \"react-admin\";\nimport LocationCapacity from \"../../../components/common/LocationCapacity\";\nimport { XIcon } from \"../../../components/common\";\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport {\n AreaType,\n InventoryStatus,\n LocationType,\n PortalType,\n} from \"../../../utils/constants\";\nimport {\n getAisleFullName,\n getLocationFullName,\n getLocationViewName,\n isBulkArea,\n} from \"../../../utils/locationUtils\";\nimport { StructuredAisle } from \"./StructuredAisle\";\nimport { LocationInventories } from \"./LocationInventories\";\nimport { useUser } from \"../../../authenticatorApp/UserContext\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n marginTop: theme.spacing(1),\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(1),\n marginBottom: theme.spacing(1),\n },\n clearButton: {\n marginRight: theme.spacing(-2),\n },\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n link: {\n color: \"inherit\",\n textDecoration: \"inherit\",\n },\n list: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n },\n}));\n\nexport const YardUtilization = ({ match }) => {\n return (\n <>\n <Title title={<ForceTitle title=\"Utilization\" />} />\n <Route\n path={`${match.path}/:id`}\n render={(props) => <StructuredAisle {...props} />}\n />\n <Route\n path={`${match.path}`}\n exact\n render={(props) => <Utilization {...props} />}\n />\n </>\n );\n};\n\nconst capacityArray = [\"Any\", 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100];\n\nconst Utilization = ({ match }) => {\n const classes = useStyles();\n const portalType = localStorage.getItem(\"portalType\");\n\n return portalType === PortalType.MANAGER ? (\n <div className={classes.root}>\n <UtilizationView classes={classes} match={match} />\n </div>\n ) : (\n <CrewCard\n title=\"Yard Utilization\"\n showDivider={false}\n icon={<SpeedIcon fontSize=\"large\" />}\n >\n <UtilizationView classes={classes} match={match} />\n </CrewCard>\n );\n};\n\nconst UtilizationView = ({ classes, match }) => {\n const { appUser } = useUser();\n const [areas, setAreas] = useState(\n appUser.reloadYard.areas.items.filter(\n (itm) => itm.areaType !== AreaType.TRACK\n )\n );\n const [selectedArea, setSelectedArea] = useState(areas[0]);\n const [aisles, setAisles] = useState();\n const [locations, setLocations] = useState();\n const [areaUtilization, setAreaUtilization] = useState();\n const [searchResult, setSearchResult] = useState([]);\n const [term, setTerm] = useState(\"\");\n const [capacitySearchTerm, setCapacitySearchTerm] = useState(\n capacityArray[0]\n );\n const [capacitySearchOperator, setCapacitySearchOperator] = useState(\"<=\");\n const [loading, setLoading] = useState(false);\n const showTotalCapacity =\n areaUtilization && !term && capacitySearchTerm === \"Any\";\n\n useEffect(() => {\n return () => {\n setAreas([]);\n setAisles([]);\n setLocations([]);\n setSearchResult([]);\n };\n }, []);\n useEffect(() => {\n if (selectedArea) {\n debugger;\n getAreaUtilization(selectedArea);\n }\n }, [selectedArea]);\n\n useEffect(() => {\n if (loading) return;\n if (selectedArea && aisles) {\n debugger;\n selectedArea.areaType === AreaType.BULK\n ? setSearchResult(locations)\n : setSearchResult(aisles);\n }\n }, [aisles, locations, selectedArea, loading]);\n\n const getAreaUtilization = async (currentArea) => {\n debugger;\n setLoading(true);\n const response = await API.graphql(\n graphqlOperation(aisleByActiveByAreaBySortKey, {\n areaId: currentArea.id,\n activeSortKey: { beginsWith: { active: \"true\" } },\n limit: 500,\n })\n );\n const aisles = response.data.aisleByActiveByAreaBySortKey.items;\n if (currentArea.areaType === AreaType.BULK) {\n await getBulkAreaUtilization(currentArea, aisles);\n } else {\n await getNonBulkAreaUtilization(currentArea, aisles);\n }\n debugger;\n setLoading(false);\n };\n\n const getNonBulkAreaUtilization = async (area, aisles) => {\n aisles.forEach((aisle) => {\n if (aisle.type === LocationType.STRUCTURED) {\n const aisleUtilzation =\n aisle.locations.items.reduce(\n (total, itm) => (total += itm.capacityUsed ? itm.capacityUsed : 0),\n 0\n ) / aisle.locations.items.length;\n aisle.capacityUsed = aisleUtilzation;\n }\n });\n setAisles(aisles);\n const areaUtilzation =\n aisles.reduce((total, itm) => {\n if (area.id === itm.areaId) {\n return (total += itm.capacityUsed ? itm.capacityUsed : 0);\n }\n return total;\n }, 0) / aisles.length;\n setAreaUtilization(areaUtilzation);\n };\n\n const getBulkAreaUtilization = async (area, aisles) => {\n debugger;\n const response = await API.graphql(\n graphqlOperation(locationByAreaBySortKey, {\n reloadYardId: window.appUser.reloadYardId,\n areaIdSortKey: { beginsWith: { areaId: area.id } },\n })\n );\n debugger;\n response.data.locationByAreaBySortKey.items.sort((a, b) => {\n if (a.aisle.sortKey !== b.aisle.sortKey)\n return a.aisle.sortKey - b.aisle.sortKey;\n return (\"\" + a.name).localeCompare(\"\" + b.name);\n });\n const bulkLocations = response.data.locationByAreaBySortKey.items;\n setAisles(aisles);\n setLocations(bulkLocations);\n };\n\n const refreshFn = () => {\n getAreaUtilization(selectedArea);\n };\n\n const handleAreaChange = async (areaId) => {\n debugger;\n const area = areas.find((itm) => itm.id === areaId);\n setLoading(true);\n setSelectedArea(area);\n setTerm(\"\");\n setCapacitySearchTerm(capacityArray[0]);\n setCapacitySearchOperator(\"<=\");\n };\n\n const clear = () => {\n setTerm(\"\");\n doSearch({ capacitySearchOperator, capacitySearchTerm });\n };\n\n const handleSearchTermChange = (value) => {\n setTerm(value);\n doSearch({ term: value, capacitySearchOperator, capacitySearchTerm });\n };\n\n const handleCapacitySearchTermChange = (value) => {\n value = value !== capacityArray[0] ? Number(value) : value;\n setCapacitySearchTerm(value);\n doSearch({ term, capacitySearchOperator, capacitySearchTerm: value });\n };\n\n const doSearch = ({ term, capacitySearchOperator, capacitySearchTerm }) => {\n debugger;\n let searchItems =\n selectedArea.areaType === AreaType.BULK ? locations : aisles;\n if (capacitySearchTerm !== capacityArray[0]) {\n searchItems = searchItems.filter((itm) => {\n if (selectedArea.AreaType === AreaType.BULK) {\n const percentage = (itm.capacityUsed / itm.totalCapacity) * 100;\n if (capacitySearchOperator === \"<=\")\n return percentage <= capacitySearchTerm;\n return percentage >= capacitySearchTerm;\n } else {\n if (capacitySearchOperator === \"<=\")\n return itm.capacityUsed <= capacitySearchTerm;\n return itm.capacityUsed >= capacitySearchTerm;\n }\n });\n }\n\n if (term) {\n const searchTerm = term.toLowerCase().replace(/-/g, \"\");\n searchItems = searchItems.filter((itm) => {\n let match;\n let name;\n debugger;\n if (selectedArea.areaType === AreaType.BULK) {\n if (itm.productName)\n match = match || itm.productName.toLowerCase().includes(searchTerm);\n name = itm.name ? itm.name : \"\" + itm.sortKey;\n } else if (itm.type === LocationType.STRUCTURED) {\n name = getAisleFullName(itm).replace(/-/g, \"\");\n } else {\n name = getAisleFullName(itm).replace(/-/g, \"\");\n }\n match = match || name.toLowerCase().includes(searchTerm);\n return match || itm.zone.name.toLowerCase().includes(searchTerm);\n });\n }\n setSearchResult(searchItems);\n };\n\n const handleCapacitySearchOperator = (value) => {\n setCapacitySearchOperator(value);\n doSearch({ term, capacitySearchTerm, capacitySearchOperator: value });\n };\n\n return (\n <>\n <Box ml={1} mr={1} pb={0.5}>\n <Grid container spacing={2}>\n {selectedArea && (\n <Grid item xs={12} md={6} lg={4} variant=\"outlined\">\n <TextField\n id=\"area\"\n label=\"Area\"\n margin=\"dense\"\n variant=\"outlined\"\n select\n fullWidth\n value={selectedArea.id ? selectedArea.id : \"\"}\n onChange={(evt) => handleAreaChange(evt.target.value)}\n >\n {areas.map((itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {itm.name}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n )}\n <Grid item xs={12} md={6} lg={4} variant=\"outlined\">\n <Grid container spacing={2}>\n <Grid item xs={3}>\n <TextField\n select\n id=\"capacityOperator\"\n name=\"capacityOperator\"\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={capacitySearchOperator}\n onChange={(evt) =>\n handleCapacitySearchOperator(evt.target.value)\n }\n >\n {[\"<=\", \">=\"].map((option) => (\n <MenuItem key={option} value={option}>\n {option}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n <Grid item xs={9}>\n <TextField\n select\n id=\"capacitySearch\"\n name=\"capacitySearch\"\n label=\"Capacity Used\"\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={capacitySearchTerm}\n onChange={(evt) =>\n handleCapacitySearchTermChange(evt.target.value)\n }\n >\n {capacityArray.map((option) => (\n <MenuItem key={option} value={option}>\n {option}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} md={6} lg={4} variant=\"outlined\">\n <TextField\n name=\"search\"\n size=\"small\"\n variant=\"outlined\"\n margin=\"dense\"\n value={term}\n placeholder={\n selectedArea?.areaType === AreaType.BULK\n ? \"Aisle/Zone/Product\"\n : \"Aisle/Zone\"\n }\n fullWidth\n onChange={(evt) => handleSearchTermChange(evt.target.value)}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton disableRipple onClick={clear}>\n <XIcon className={classes.clearButton} />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n </Grid>\n </Box>\n <UtilizationResults\n match={match}\n classes={classes}\n showTotalCapacity={showTotalCapacity}\n selectedArea={selectedArea}\n refreshFn={refreshFn}\n areaUtilization={areaUtilization}\n loading={loading}\n data={searchResult}\n />\n </>\n );\n};\n\nconst UtilizationResults = ({\n match,\n classes,\n loading,\n showTotalCapacity,\n selectedArea,\n refreshFn,\n areaUtilization,\n data,\n}) => {\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n\n const getUtilizationSlider = () => {\n if (!selectedArea) return null;\n if (selectedArea.areaType === AreaType.BULK) {\n return <Box m={1} />;\n }\n if (showTotalCapacity) {\n return (\n <Box\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n pt={1}\n pb={2}\n >\n <LinearProgress\n color=\"secondary\"\n variant=\"determinate\"\n value={areaUtilization}\n style={{ minWidth: \"90%\" }}\n />\n  {\" \"}\n {Number(areaUtilization || 0).toLocaleString(\"en-US\", {\n maximumFractionDigits: 0,\n })}\n %\n </Box>\n );\n }\n };\n\n return (\n <>\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Box\n ml={1}\n mr={1}\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"center\"\n pt={0.25}\n >\n {getUtilizationSlider()}\n <Grid container spacing={2}>\n {data.map((itm) => (\n <LocationCard\n key={itm.id}\n aisle={itm}\n match={match}\n selectedArea={selectedArea}\n refreshFn={() => refreshFn(selectedArea)}\n />\n ))}\n </Grid>\n </Box>\n </>\n );\n};\n\nconst LocationCard = ({ aisle, refreshFn, match, selectedArea }) => {\n const [inventoryItems, setInventoryItems] = useState();\n const [loading, setLoading] = useState(false);\n const [open, setOpen] = useState();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const history = useHistory();\n const notify = useNotify();\n\n const getAisleTypeText = () => {\n if (!aisle.locations) return \"\";\n\n if (selectedArea.areaType === AreaType.BULK) {\n return \"Bulk\";\n }\n if (aisle.type === LocationType.UNSTRUCTURED) {\n return `${\n aisle.type.toLowerCase()[0].toUpperCase() +\n aisle.type.toLowerCase().substring(1)\n }`;\n }\n const set = new Set();\n aisle.locations.items.forEach((itm) => set.add(itm.bay));\n const text = `\n ${\n aisle.type.toLowerCase()[0].toUpperCase() +\n aisle.type.toLowerCase().substring(1)\n },\n ${set.size} bays, ${aisle.levels} levels`;\n return text;\n };\n\n const goToLocations = () => {\n debugger;\n history.replace(match.path + \"/\" + aisle.id);\n };\n\n const getInventories = async () => {\n if (aisle.type === LocationType.STRUCTURED) return;\n try {\n debugger;\n setLoading(true);\n setOpen(true);\n let inventoryItemsList;\n if (isBulkArea(selectedArea)) {\n const results = await API.graphql(\n graphqlOperation(inventoryItemByLocationByStatus, {\n locationId: aisle.id,\n status: { beginsWith: InventoryStatus.STORED },\n })\n );\n inventoryItemsList = results.data.inventoryItemByLocationByStatus.items;\n } else {\n const results = await API.graphql(\n graphqlOperation(inventoryItemByAisleByStatus, {\n aisleId: aisle.id,\n status: { beginsWith: InventoryStatus.STORED },\n })\n );\n inventoryItemsList = results.data.inventoryItemByAisleByStatus.items;\n }\n inventoryItemsList.sort((a, b) =>\n a.inventory.accountName.localeCompare(b.inventory.accountName)\n );\n setInventoryItems(inventoryItemsList);\n debugger;\n } catch (error) {\n logError(\"utilization:LocationCard:getInventories\", error, notify);\n } finally {\n setLoading(false);\n }\n };\n\n const isLocationCapacityDisabled = (aisle) => {\n if (selectedArea.areaType === AreaType.BULK) return true;\n if (aisle.type === LocationType.STRUCTURED) return true;\n return false;\n };\n\n const getCardContent = () => {\n if (isBulkArea(selectedArea)) return getBulkContent();\n return getNonBulkContent();\n };\n\n const getBulkContent = () => {\n return (\n <>\n <Grid item xs={3}>\n <Typography color=\"textSecondary\" component=\"span\" variant=\"body2\">\n Zone:\n </Typography>\n </Grid>\n <Grid item xs={9}>\n <Box display=\"flex\" alignItems=\"center\">\n <FiberManualRecordIcon style={{ color: aisle.zone.color }} />\n <Typography color=\"textSecondary\" component=\"span\" variant=\"body2\">\n {aisle.zone.name}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={3}>\n <Typography color=\"textSecondary\" component=\"span\" variant=\"body2\">\n Aisle:\n </Typography>\n </Grid>\n <Grid item xs={9}>\n <Box display=\"flex\" alignItems=\"center\">\n <Typography color=\"textSecondary\" component=\"span\" variant=\"body2\">\n {aisle.aisle?.name}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={3}>\n <Typography\n color=\"textSecondary\"\n component=\"span\"\n variant=\"body2\"\n gutterBottom\n >\n Capacity:\n </Typography>\n </Grid>\n <Grid item xs={9}>\n <Typography\n color=\"textSecondary\"\n component=\"span\"\n variant=\"body2\"\n gutterBottom\n >\n {Number(aisle.bulkCapacity || 0).toLocaleString()} {aisle.bulkUnits}\n </Typography>\n </Grid>\n {\n <>\n <Grid item xs={3}>\n <Typography\n color=\"textSecondary\"\n component=\"span\"\n variant=\"body2\"\n gutterBottom\n >\n Product:\n </Typography>\n </Grid>\n <Grid item xs={9}>\n <Typography\n color=\"textSecondary\"\n component=\"span\"\n variant=\"body2\"\n gutterBottom\n >\n {aisle.productId ? aisle.productName : \"N/A\"}\n </Typography>\n </Grid>\n </>\n }\n </>\n );\n };\n\n const getNonBulkContent = () => {\n return (\n <>\n <Grid item xs={3}>\n <Typography color=\"textSecondary\" component=\"span\" variant=\"body2\">\n Area:\n </Typography>\n </Grid>\n <Grid item xs={9}>\n <Typography color=\"textSecondary\" component=\"span\" variant=\"body2\">\n {aisle.area.name}\n </Typography>\n </Grid>\n <Grid item xs={3}>\n <Typography color=\"textSecondary\" component=\"span\" variant=\"body2\">\n Zone:\n </Typography>\n </Grid>\n <Grid item xs={9}>\n <Box display=\"flex\" alignItems=\"center\">\n <FiberManualRecordIcon style={{ color: aisle.zone.color }} />\n <Typography color=\"textSecondary\" component=\"span\" variant=\"body2\">\n {aisle.zone.name}\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={3}>\n <Typography\n color=\"textSecondary\"\n component=\"span\"\n variant=\"body2\"\n gutterBottom\n >\n Type:\n </Typography>\n </Grid>\n <Grid item xs={9}>\n <Typography\n color=\"textSecondary\"\n component=\"span\"\n variant=\"body2\"\n gutterBottom\n >\n {getAisleTypeText()}\n </Typography>\n </Grid>\n </>\n );\n };\n\n const getCardActions = () => {\n return aisle.type === LocationType.UNSTRUCTURED ||\n selectedArea.areaType === AreaType.BULK ? (\n <Button type=\"submit\" onClick={getInventories} size=\"large\">\n Inventories\n </Button>\n ) : (\n <Button type=\"submit\" onClick={() => goToLocations()} size=\"large\">\n Open\n </Button>\n );\n };\n\n const getLocationCapacity = () => {\n const disabled = isLocationCapacityDisabled(aisle);\n return (\n <Grid item xs={12}>\n <Box mt={2}>\n <LocationCapacity\n disabled={disabled}\n showName={false}\n aisle={aisle}\n refreshFn={refreshFn}\n />\n </Box>\n </Grid>\n );\n };\n\n const getLocationInventoriesDialogTitle = (aisle) => {\n if (aisle.type === LocationType.BULK) {\n return `${getLocationFullName(aisle)} Inventories`;\n }\n return `${getAisleFullName(aisle)} Inventories`;\n };\n\n return (\n <Grid item xs={12} md={6} lg={4} variant=\"outlined\" key={aisle.id}>\n <Paper variant=\"outlined\">\n <CardContent>\n <Typography variant=\"h6\" component=\"span\" gutterBottom>\n {isBulkArea(selectedArea)\n ? getLocationViewName(aisle)\n : getAisleFullName(aisle)}\n </Typography>\n <Box mt={2} mb={0}>\n <Grid container>\n {getCardContent()}\n {getLocationCapacity()}\n </Grid>\n </Box>\n </CardContent>\n <Box width=\"100%\" display=\"flex\" m={0} justifyContent={\"center\"}>\n {getCardActions()}\n </Box>\n </Paper>\n <Dialog\n open={open}\n scroll={\"paper\"}\n fullWidth\n maxWidth={isSmall ? \"xl\" : \"md\"}\n fullScreen={isSmall ? true : false}\n >\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">\n {getLocationInventoriesDialogTitle(aisle)}\n </Typography>\n <CancelOutlinedIcon fontSize=\"large\" onClick={() => setOpen(false)} />\n </Box>\n <DialogContent>\n {loading ? (\n <Box\n m={4}\n display=\"flex\"\n alignContent=\"center\"\n justifyContent=\"center\"\n >\n <CircularProgress color=\"inherit\" />\n </Box>\n ) : (\n <LocationInventories inventoryItems={inventoryItems} />\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setOpen(false)}>Close</Button>\n </DialogActions>\n </Dialog>\n </Grid>\n );\n};\n","import React, { useState, useEffect } from \"react\";\nimport { API, graphqlOperation, Storage } from \"aws-amplify\";\nimport { searchFiles } from \"../../../graphql/queries\";\nimport {\n Typography,\n Avatar,\n CircularProgress,\n IconButton,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n ListItemSecondaryAction,\n Divider,\n Backdrop,\n} from \"@material-ui/core\";\nimport { useNotify, Title } from \"react-admin\";\nimport { formatDistanceToNow } from \"date-fns\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { ChevronRightIcon } from \"../../../components/common\";\nimport FolderSpecialOutlinedIcon from \"@material-ui/icons/FolderSpecialOutlined\";\nimport DescriptionOutlinedIcon from \"@material-ui/icons/DescriptionOutlined\";\nimport { logError } from \"../../../utils/appUtils\";\nimport SearchInput from \"../../../components/common/SearchInput\";\nimport CrewCard from \"../../../components/common/CrewCard\";\nimport { UserFileVisibility } from \"../../../utils/constants\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\n\nconst useStyles = makeStyles((theme) => ({\n listHeader: {\n marginTop: theme.spacing(1),\n },\n inventoryCardAvatar: {\n color: theme.palette.getContrastText(theme.palette.secondary.main),\n backgroundColor: theme.palette.secondary.main,\n width: theme.spacing(6),\n height: theme.spacing(6),\n },\n progress: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 300,\n },\n backdrop: {\n zIndex: 90001,\n },\n}));\n\nexport const Documents = () => {\n const classes = useStyles();\n const notify = useNotify();\n const [loading, setLoading] = useState();\n const [term, setTerm] = useState(\"\");\n const [docs, setDocs] = useState([]);\n\n useEffect(() => {\n getDocs(term);\n }, []);\n\n const getDocs = async (term) => {\n try {\n setLoading(true);\n const searchInput = {\n sort: { field: \"displayName\", direction: \"asc\" },\n filter: {\n reloadYardId: { eq: window.appUser.reloadYardId },\n visibility: { lte: UserFileVisibility[window.appUser.type] },\n },\n limit: 20,\n };\n if (term) {\n searchInput.filter.or = [\n { displayName: { matchPhrasePrefix: `.*${term}.*` } },\n { displayName: { wildcard: `*${term}*` } },\n { rawFileName: { matchPhrasePrefix: `.*${term}.*` } },\n { rawFileName: { wildcard: `*${term}*` } },\n ];\n }\n const response = await API.graphql(\n graphqlOperation(searchFiles, searchInput)\n );\n let data = response.data.searchFiles.items;\n setDocs(data);\n } catch (err) {\n logError(\"Documents:getDocs\", err, notify);\n } finally {\n setLoading(false);\n }\n };\n\n const handleSearch = async () => {\n getDocs(term);\n };\n\n const handleSelect = async (itm) => {\n try {\n const response = await Storage.get(itm.file.key);\n window.open(response);\n } catch (err) {\n const error = `Storage error getting ${itm.fullName}`;\n logError(\"Documents:handleSelect\", error, notify);\n }\n };\n\n const clear = () => {\n setTerm(\"\");\n getDocs(null);\n };\n\n return (\n <>\n <Title title={<ForceTitle title=\"Documents\" />} />\n <CrewCard\n title=\"Documents\"\n icon={<FolderSpecialOutlinedIcon fontSize=\"large\" />}\n >\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <List component=\"nav\">\n <SearchInput\n handleSearch={handleSearch}\n clear={clear}\n term={term}\n setTerm={setTerm}\n />\n {docs.map((itm, idx) => (\n <div key={itm.id}>\n <ListItem onClick={() => handleSelect(itm)}>\n <ListItemAvatar>\n <Avatar>\n <DescriptionOutlinedIcon fontSize=\"inherit\" />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={\n <Typography>\n {itm.displayName +\n (itm.category ? \" - \" + itm.category : \"\")}\n </Typography>\n }\n secondary={\n \"Created \" +\n formatDistanceToNow(new Date(itm.contentDate)) +\n \" ago\"\n }\n />\n <ListItemSecondaryAction>\n <IconButton edge=\"end\" onClick={() => handleSelect(itm)}>\n <ChevronRightIcon fontSize=\"large\" />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n {idx < docs.length - 1 && <Divider />}\n </div>\n ))}\n </List>\n </CrewCard>\n </>\n );\n};\n","import React, { useEffect, useRef } from \"react\";\nimport { useLocation } from \"react-router\";\n\nimport { Button, Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport CloudOffTwoToneIcon from \"@material-ui/icons/CloudOffTwoTone\";\nimport HistoryIcon from \"@material-ui/icons/History\";\n\nimport { Title } from \"react-admin\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n container: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n [theme.breakpoints.down(\"sm\")]: {\n padding: \"1em\",\n },\n fontFamily: \"Roboto, sans-serif\",\n opacity: 0.5,\n },\n title: {\n display: \"flex\",\n alignItems: \"center\",\n },\n icon: {\n width: \"10em\",\n height: \"10em\",\n marginRight: \"0.5em\",\n },\n toolbar: {\n marginTop: \"2em\",\n },\n }),\n { name: \"RaError\" }\n);\n\nfunction goBack() {\n window.history.go(-1);\n}\n\n// in src/MyLayout.js\n// import { Layout } from 'react-admin';\n// import NetorkError from './NetworkError';\n// const MyLayout = (props) => <Layout {...props} error={MyError} />;\n\nconst NetworkError = (props) => {\n const classes = useStyles(props);\n const { pathname } = useLocation();\n const originalPathname = useRef(pathname);\n const { error, errorInfo, resetErrorBoundary, history, ...rest } = props;\n\n // Effect that resets the error state whenever the location changes\n useEffect(() => {\n if (pathname !== originalPathname.current) {\n resetErrorBoundary();\n }\n }, [pathname, resetErrorBoundary]);\n\n return (\n <>\n <Title title=\"Network Error\" />\n <div className={classes.container} {...rest}>\n <h1 className={classes.title} role=\"alert\">\n <CloudOffTwoToneIcon className={classes.icon} />\n </h1>\n <h1 className={classes.title} role=\"alert\">\n Network Error\n </h1>\n <Typography>\n Your internet connectino is unstable. Please check your connection and\n try again.\n </Typography>\n\n <div className={classes.toolbar}>\n <Button\n variant=\"contained\"\n startIcon={<HistoryIcon />}\n onClick={goBack}\n >\n Back\n </Button>\n </div>\n </div>\n </>\n );\n};\n\nexport default NetworkError;\n","import React, { useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { keyBy } from \"lodash\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n areaBySortKey,\n searchInboundShipments,\n searchOutboundShipments,\n} from \"../../../graphql/queries\";\nimport { aisleByActiveByAreaBySortKeyLocations } from \"../../../graphql/reloadyard/custom-queries\";\nimport {\n updateInboundShipment,\n updateOutboundShipment,\n} from \"../../../graphql/mutations\";\n\nimport { Card, Chip, Grid, Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { blueGrey, green, grey, red } from \"@material-ui/core/colors\";\n\nimport {\n Confirm,\n FilterButton,\n ListToolbar,\n Loading,\n RefreshButton,\n Title,\n TopToolbar,\n useNotify,\n useRedirect,\n} from \"react-admin\";\n\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n DeleteIcon,\n InboundIcon,\n OutboundIcon,\n SearchIcon,\n} from \"../../../components/common\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport {\n AreaType,\n CarrierType,\n InboundState,\n InboundStatus,\n} from \"../../../utils/constants\";\nimport { getAisleFullName, sortLinkedCars } from \"../../../utils/locationUtils\";\nimport { deepRedirect, getBackPath } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles((theme) => ({\n list: {\n marginRight: 0,\n },\n locationTitle: {\n marginTop: theme.spacing(2),\n marginLeft: theme.spacing(1),\n },\n trackContainer: {\n padding: theme.spacing(2),\n },\n track: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"flex-start\",\n padding: theme.spacing(2),\n minHeight: theme.spacing(12),\n minWidth: theme.spacing(25),\n border: \"1px dashed\",\n borderRadius: theme.spacing(1),\n borderColor: grey[400],\n },\n item: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n margin: theme.spacing(0.5),\n },\n}));\n\nconst ListSearchField = ({\n setSearchTerm,\n processedCars,\n setFoundCarMap,\n ...props\n}) => {\n const handleSearch = (value) => {\n if (value) {\n const searchTerm = value?.toLowerCase() || \"\";\n debugger;\n const foundCars =\n processedCars?.filter((itm) =>\n itm.railCarNumber?.toLowerCase().includes(searchTerm)\n ) || [];\n const foundCarMap = foundCars ? keyBy(foundCars, \"id\") : {};\n setFoundCarMap(foundCarMap);\n setSearchTerm(searchTerm);\n } else setFoundCarMap({});\n };\n\n return (\n <Grid container spacing={1}>\n <Grid item xs={6} sm={3}>\n <SearchField\n label=\"Search railcar\"\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn\n fullWidth\n handleSearch={handleSearch}\n />\n </Grid>\n </Grid>\n );\n};\n\nconst getListFilters = (setSearchTerm, processedCars, setFoundCarMap) => {\n const filters = [\n <ListSearchField\n setSearchTerm={setSearchTerm}\n processedCars={processedCars}\n setFoundCarMap={setFoundCarMap}\n alwaysOn\n />,\n ];\n\n return filters;\n};\n\nconst ListActions = ({ init, backPath, ...props }) => {\n return (\n <TopToolbar>\n <FilterButton />\n <RefreshButton onClick={init} />\n {backPath[0] && <BackButton backPath={backPath} />}\n </TopToolbar>\n );\n};\n\nexport const TrackManagementAdmin = (props) => {\n const classes = useStyles();\n const notify = useNotify();\n const [loading, setLoading] = useState(true);\n const [processedCars, setProcessedCars] = useState([]);\n const [processedCarsMap, setProcessedCarsMap] = useState({});\n const [foundCarMap, setFoundCarMap] = useState({});\n const [outboundMap, setOutboundMap] = useState({});\n const [searchTerm, setSearchTerm] = useState(\n props.location?.state?.railCarNumber\n ? props.location.state.railCarNumber.toLowerCase()\n : null\n );\n const backPath = getBackPath(props);\n\n useEffect(() => {\n getShipments();\n }, []);\n\n const getShipments = async () => {\n debugger;\n try {\n let searchInput = {\n filter: {\n carrierType: { eq: CarrierType.RAIL },\n isCollected: { eq: false },\n trackId: { exists: true },\n },\n limit: 500,\n };\n let response = await API.graphql(\n graphqlOperation(searchInboundShipments, searchInput)\n );\n const inbounds = response.data.searchInboundShipments.items;\n\n searchInput = {\n filter: {\n carrierType: { eq: CarrierType.RAIL },\n isCollected: { eq: false },\n trackId: { exists: true },\n },\n limit: 500,\n };\n response = await API.graphql(\n graphqlOperation(searchOutboundShipments, searchInput)\n );\n const outbounds = response.data.searchOutboundShipments.items;\n outbounds.forEach((itm) => (outboundMap[itm.id] = itm));\n setOutboundMap(outboundMap);\n\n const processedCarsList = inbounds.concat(outbounds);\n const processedCarsMap = {};\n const foundCarMap = {};\n processedCarsList.forEach((car) => {\n if (processedCarsMap[car.trackId])\n processedCarsMap[car.trackId].push(car);\n else processedCarsMap[car.trackId] = [car];\n\n if (\n searchTerm &&\n car.railCarNumber?.toLowerCase().includes(searchTerm)\n ) {\n foundCarMap[car.id] = car;\n }\n });\n setFoundCarMap(foundCarMap);\n\n for (let [key, value] of Object.entries(processedCarsMap)) {\n if (value) processedCarsMap[key] = sortLinkedCars(value);\n }\n\n setProcessedCars(processedCarsList);\n setProcessedCarsMap(processedCarsMap);\n } catch (err) {\n logError(\"InboundTrackManagement:init\", err, notify);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <div>\n <Title title={<ForceTitle title=\"Track Management\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters(setSearchTerm, processedCars, setFoundCarMap)}\n actions={<ListActions backPath={backPath} init={getShipments} />}\n />\n <Card className={classes.list}>\n <TrackGrid\n {...props}\n loading={loading}\n setLoading={setLoading}\n processedCars={processedCars}\n setProcessedCars={setProcessedCars}\n processedCarsMap={processedCarsMap}\n setProcessedCarsMap={setProcessedCarsMap}\n outboundMap={outboundMap}\n foundCarMap={foundCarMap}\n backPath={backPath}\n />\n </Card>\n </div>\n );\n};\n\nconst TrackGrid = ({\n loading,\n setLoading,\n processedCars,\n setProcessedCars,\n processedCarsMap,\n setProcessedCarsMap,\n outboundMap,\n foundCarMap,\n backPath,\n ...props\n}) => {\n const classes = useStyles();\n const history = useHistory();\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n const [selectedShipment, setSelectedShipment] = useState();\n const [selectedShipmentIdx, setSelectedShipmentIdx] = useState();\n const [deleteConfirmMessage, setDeleteConfirmMessage] = useState(\"\");\n const [tracks, setTracks] = useState([]);\n\n useEffect(() => {\n getTracks();\n }, []);\n\n const getTracks = async () => {\n debugger;\n try {\n let response = await API.graphql(\n graphqlOperation(areaBySortKey, {\n reloadYardId: window.appUser.reloadYardId,\n })\n );\n const areas = response.data.areaBySortKey.items.filter(\n (itm) => itm.active === \"true\" && itm.areaType === AreaType.TRACK\n );\n const area = areas[0];\n\n if (area) {\n response = await API.graphql(\n graphqlOperation(aisleByActiveByAreaBySortKeyLocations, {\n areaId: area.id,\n activeSortKey: { beginsWith: { active: \"true\" } },\n limit: 1000,\n })\n );\n let tracks = response.data.aisleByActiveByAreaBySortKey.items;\n setTracks(tracks);\n }\n } catch (err) {\n logError(\"inboundShipment:inboundTrackManagement:getTracks\", err, notify);\n }\n };\n\n const isOutbound = (shipment) => {\n return outboundMap[shipment.id] ? true : false;\n };\n\n const saveShipment = (toUpdateShipment) => {\n if (isOutbound(toUpdateShipment)) return saveOutbound(toUpdateShipment);\n else return saveInbound(toUpdateShipment);\n };\n\n const saveInbound = (toUpdateShipment) => {\n toUpdateShipment = { ...toUpdateShipment };\n delete toUpdateShipment.account;\n delete toUpdateShipment.area;\n delete toUpdateShipment.createdAt;\n delete toUpdateShipment.inventories;\n delete toUpdateShipment.invoice;\n delete toUpdateShipment.location;\n delete toUpdateShipment.reloadYardCommodity;\n delete toUpdateShipment.seals;\n delete toUpdateShipment.timeslot;\n delete toUpdateShipment.updatedAt;\n delete toUpdateShipment.zone;\n\n return API.graphql(\n graphqlOperation(updateInboundShipment, {\n input: toUpdateShipment,\n })\n );\n };\n\n const saveOutbound = (toUpdateShipment) => {\n toUpdateShipment = { ...toUpdateShipment };\n\n delete toUpdateShipment.account;\n delete toUpdateShipment.area;\n delete toUpdateShipment.createdAt;\n delete toUpdateShipment.invoice;\n delete toUpdateShipment.location;\n delete toUpdateShipment.reloadYardCommodity;\n delete toUpdateShipment.seals;\n delete toUpdateShipment.shipmentLineItems;\n delete toUpdateShipment.timeslot;\n delete toUpdateShipment.updatedAt;\n\n return API.graphql(\n graphqlOperation(updateOutboundShipment, {\n input: toUpdateShipment,\n })\n );\n };\n\n const canDelete = (itm) => itm.status === InboundStatus.RELEASED;\n\n const deleteItem = (shipment, idx) => {\n setOpen(true);\n setSelectedShipmentIdx(idx);\n setSelectedShipment(shipment);\n setDeleteConfirmMessage(\n `This will mark railcar ${shipment.railCarNumber} as collected and permanently remove it from Track Management. Proceed?`\n );\n };\n const handleDialogClose = () => setOpen(false);\n\n const handleDeleteItem = async () => {\n try {\n debugger;\n setLoading(true);\n const carsOnTrack = processedCarsMap[selectedShipment.trackId];\n const toDeleteShipment = selectedShipment;\n const promiseList = [];\n\n if (selectedShipmentIdx < carsOnTrack.length - 1) {\n const bottomCar = carsOnTrack[selectedShipmentIdx + 1];\n bottomCar.previousCar = toDeleteShipment.previousCar;\n promiseList.push(saveShipment(bottomCar));\n }\n toDeleteShipment.trackId = null;\n toDeleteShipment.previousCar = null;\n toDeleteShipment.isCollected = true;\n toDeleteShipment.collectedDateTime = new Date().toISOString();\n promiseList.push(saveShipment(toDeleteShipment));\n await Promise.all(promiseList);\n\n carsOnTrack.splice(selectedShipmentIdx, 1);\n processedCarsMap[selectedShipment.trackId] = carsOnTrack;\n setProcessedCarsMap(processedCarsMap);\n setProcessedCars(\n processedCars.filter((itm) => itm.id !== selectedShipment.id)\n );\n } catch (err) {\n logError(\n \"inboundShipment:inboundTrackManagement:deleteItem\",\n err,\n notify,\n redirect\n );\n } finally {\n setLoading(false);\n setOpen(false);\n setSelectedShipmentIdx(null);\n setSelectedShipment(null);\n }\n };\n\n const openShipment = (itm) => {\n if (outboundMap[itm.id]) {\n const toPath = `/outboundShipments/${itm.id}`;\n deepRedirect(history, toPath, props.location.pathname, backPath, {});\n } else {\n const toPath = `/inboundShipments/${itm.id}`;\n deepRedirect(history, toPath, props.location.pathname, backPath, {});\n }\n };\n\n const getShipmentColor = (itm) => {\n if (itm.status === InboundStatus.RELEASED) return red[500];\n if (itm.state === InboundState.COMPLETED) return green[500];\n return blueGrey[600];\n };\n\n const getShipmentRadius = (itm) => {\n if (outboundMap[itm.id]) return 50;\n return 2;\n };\n\n if (loading) return <Loading />;\n debugger;\n return (\n <Grid\n container\n direction=\"row\"\n spacing={2}\n className={classes.trackContainer}\n >\n {tracks.map((track) => (\n <Grid item xs={12} sm={6} md={4} lg={3}>\n <Typography variant=\"subtitle2\" className={classes.locationTitle}>\n {getAisleFullName(track)}\n </Typography>\n <div className={classes.track}>\n {processedCarsMap[track.locations.items[0].id]?.map(\n (shipment, idx) => {\n return (\n <div key={shipment.id} className={classes.item}>\n {foundCarMap[shipment.id] ? <SearchIcon /> : null}\n <Chip\n label={\n <span>\n {`${idx + 1}`}   {\" \"}\n {`${shipment.railCarNumber}`}\n </span>\n }\n draggable=\"false\"\n clickable\n icon={\n isOutbound(shipment) ? (\n <OutboundIcon />\n ) : (\n <InboundIcon />\n )\n }\n onClick={() => openShipment(shipment)}\n onDelete={\n canDelete(shipment)\n ? () => deleteItem(shipment, idx)\n : null\n }\n deleteIcon={<DeleteIcon />}\n style={{\n fontWeight: \"bold\",\n color: \"#ffffff\",\n backgroundColor: getShipmentColor(shipment),\n borderRadius: getShipmentRadius(shipment),\n width: \"100%\",\n }}\n />\n </div>\n );\n }\n )}\n </div>\n </Grid>\n ))}\n <Grid item xs={0}>\n <Confirm\n isOpen={open}\n loading={loading}\n title=\"Delete Confirmation\"\n content={deleteConfirmMessage}\n onConfirm={handleDeleteItem}\n onClose={handleDialogClose}\n />\n </Grid>\n </Grid>\n );\n};\n\nexport default TrackManagementAdmin;\n","import React from \"react\";\n\nimport { add, format } from \"date-fns\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getAccount } from \"../../graphql/queries\";\n\nimport { MenuItem, TextField as FilterField, Slider } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { logError } from \"../../utils/appUtils\";\n\nexport const handleAccountChange = async (value, setAccount, setAccountId) => {\n const accountId = value?.id;\n setAccountId(accountId);\n try {\n if (!accountId) {\n setAccount(\"\");\n return;\n }\n const response = await API.graphql(\n graphqlOperation(getAccount, { id: accountId })\n );\n setAccount(response.data.getAccount);\n } catch (err) {\n logError(\"InboundInvoiceReport:ListActions:handleAccountChange\", err);\n }\n};\n\nconst useStyles = makeStyles((theme) => ({\n monthSlider: {\n marginLeft: theme.spacing(1),\n marginBottom: theme.spacing(-2.5),\n },\n}));\n\nfunction generateYearArray(startYear) {\n const currentYear = new Date().getFullYear();\n return Array.from({ length: currentYear - startYear + 1 }, (_, index) =>\n (startYear + index).toString()\n );\n}\n\nexport const YearSelect = ({ year, setYear, ...props }) => {\n const yearList = generateYearArray(\n new Date(window.appUser?.reloadYard.createdAt).getFullYear()\n );\n\n return (\n <FilterField\n select\n id=\"year\"\n source=\"year\"\n label=\"Year\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n required\n alwaysOn\n value={year}\n onChange={(evt) => setYear(evt?.target?.value)}\n >\n {yearList.map((item) => (\n <MenuItem key={item} value={item}>\n {\" \"}\n {item}{\" \"}\n </MenuItem>\n ))}\n </FilterField>\n );\n};\n\nexport const MonthRangeSlider = ({\n maxMonths = 3,\n monthRnage,\n setMontRange,\n ...props\n}) => {\n const classes = useStyles();\n const maxValue = maxMonths - 1;\n\n const handleMonthChange = (event, newValue) => {\n const oldValue = monthRnage;\n if (oldValue[0] !== newValue[0]) {\n const maxRange =\n newValue[1] - newValue[0] > maxValue\n ? newValue[0] + maxValue\n : newValue[1];\n newValue = [newValue[0], maxRange];\n } else {\n const maxRange =\n newValue[1] - newValue[0] > maxValue\n ? newValue[1] - maxValue\n : newValue[0];\n newValue = [maxRange, newValue[1]];\n }\n setMontRange(newValue);\n };\n\n return (\n <Slider\n min={1}\n max={12}\n step={1}\n value={monthRnage}\n onChange={handleMonthChange}\n valueLabelDisplay=\"on\"\n fullWidth\n className={classes.monthSlider}\n marks={[\n { label: `J`, value: 1 },\n { label: `F`, value: 2 },\n { label: `M`, value: 3 },\n { label: `A`, value: 4 },\n { label: `M`, value: 5 },\n { label: `J`, value: 6 },\n { label: `J`, value: 7 },\n { label: `A`, value: 8 },\n { label: `S`, value: 9 },\n { label: `O`, value: 10 },\n { label: `N`, value: 11 },\n { label: `D`, value: 12 },\n ]}\n />\n );\n};\n\nexport const createDateRangeParams = (year, monthRnage) => {\n const startDate = new Date(`${year}-${monthRnage[0]}-01`);\n const duration = monthRnage[1] - monthRnage[0] + 1;\n const endDate = format(add(startDate, { months: duration }), \"yyyy-MM-dd\");\n return { startDate: format(startDate, \"yyyy-MM-dd\"), endDate };\n};\n","import React, { useState } from \"react\";\nimport jsonExport from \"jsonexport/dist\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { searchInboundInvoices } from \"../../graphql/report-queries\";\nimport {\n Card,\n Grid,\n TextField as FilterField,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n Button,\n DateField,\n downloadCSV,\n ListContextProvider,\n NumberField,\n TextField,\n Title,\n TopToolbar,\n useList,\n useListContext,\n useNotify,\n SimpleForm,\n required,\n} from \"react-admin\";\n\nimport { AccountDropDown } from \"../../components/common/AccountDropDown\";\nimport { ExportIcon } from \"../../components/common\";\nimport { BackButton } from \"../../components/common/BackButton\";\nimport { ForceTitle } from \"../../components/common/ForceTitle\";\nimport { Pagination } from \"../../components/Pagination\";\nimport { logError } from \"../../utils/appUtils\";\nimport { CustomField } from \"../../components/common/CustomFields\";\nimport CustomizableDatagrid from \"../../components/common/ra-customizable-datagrid\";\n\nimport { exportCustomField } from \"../../utils/utils\";\nimport {\n createDateRangeParams,\n MonthRangeSlider,\n YearSelect,\n handleAccountChange,\n} from \"./ReportsUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n submitButton: {\n position: \"absolute\",\n bottom: theme.spacing(2),\n },\n totals: {\n marginLeft: theme.spacing(2),\n },\n}));\n\nconst exporter = (finalData) => {\n const customHeaderMap = new Map();\n debugger;\n\n const reportForExport = finalData.map((shipment) => {\n const shipmentForExport = {\n inboundDate: new Date(shipment.placedDateTime).toLocaleDateString(),\n poNumber: shipment.poNumber,\n lotNumber: shipment.lotNumber,\n carTrlNumber: shipment.railCarNumber,\n qtyReceived: shipment.totalQuantity,\n UOM: shipment.totalUnits,\n };\n\n if (shipment.customFields?.length > 0) {\n debugger;\n shipment.customFields.forEach((field) => {\n exportCustomField(field, shipmentForExport, customHeaderMap);\n });\n }\n\n shipmentForExport.invoiceNumber = shipment.invoice?.invoiceNumber;\n shipmentForExport.invoiceTotal = shipment.invoice?.total;\n\n if (shipment.invoice?.lineItems?.items?.length > 0) {\n debugger;\n shipment.invoice.lineItems.items.forEach((item) => {\n shipmentForExport[item.service.name] = item.amount;\n });\n }\n\n return shipmentForExport;\n });\n\n jsonExport(\n reportForExport,\n {\n rename: [\n // \"Shipment Id\", \"Shipment Type\", \"Shipment Date\", \"subtotal\", \"UOM\"\n ],\n },\n (err, csv) => {\n downloadCSV(\n csv,\n `report_in_out_totals_${new Date().toLocaleDateString()}`\n ); // download as 'report_in_out_totals_date.csv` file\n }\n );\n};\n\nconst ListActions = (props) => {\n const classes = useStyles();\n const validateRequired = required();\n const {\n finalData,\n setAccountId,\n account,\n setAccount,\n year,\n setYear,\n monthRnage,\n setMontRange,\n searchTerm,\n setSearchTerm,\n getReportData,\n } = props;\n\n return (\n <TopToolbar>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item container xs={10} spacing={1}>\n <Grid item xs={12} md={4}>\n <AccountDropDown\n source=\"accountId\"\n label=\"Account\"\n onAccountChange={(value) =>\n handleAccountChange(value, setAccount, setAccountId)\n }\n validate={validateRequired}\n allowEmpty={false}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <YearSelect year={year} setYear={setYear} />\n </Grid>\n <Grid item xs={12} md={5}>\n <MonthRangeSlider\n monthRnage={monthRnage}\n setMontRange={setMontRange}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <FilterField\n id=\"search\"\n label=\"Search by Number\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n alwaysOn\n value={searchTerm}\n onChange={(evt) => setSearchTerm(evt?.target?.value)}\n />\n </Grid>\n </Grid>\n <Grid item xs={2}>\n <Button\n label=\"Run\"\n variant=\"contained\"\n color=\"default\"\n alwaysOn\n className={classes.submitButton}\n onClick={getReportData}\n disabled={!account?.id || !year}\n />\n </Grid>\n </Grid>\n\n <Button\n label=\"Export\"\n disabled={finalData?.length === 0}\n onClick={() => exporter(finalData)}\n >\n <ExportIcon />\n </Button>\n <BackButton basePath=\"/reports\" />\n </TopToolbar>\n );\n};\n\n// /reportInboundInvoices\nexport const InboundInvoiceReport = (props) => {\n const notify = useNotify();\n\n const [accountId, setAccountId] = useState(\"\");\n const [account, setAccount] = useState(\"\");\n\n const [year, setYear] = useState();\n const [monthRnage, setMontRange] = useState([1, 1]);\n const [searchTerm, setSearchTerm] = useState(\"\");\n debugger;\n\n const [invoiceTotal, setInvoicetotal] = useState(0);\n const [finalData, setFinalData] = useState([]);\n const [loading, setLoading] = useState(false);\n\n const getReportData = async () => {\n try {\n setLoading(true);\n debugger;\n const inbounds = [];\n let invoiceRunningTotal = 0;\n const { startDate, endDate } = createDateRangeParams(year, monthRnage);\n const limit = 1000;\n const inboundSearchInput = {\n sort: { field: \"placedDateTime\", direction: \"asc\" },\n filter: {\n accountId: { eq: `${accountId}` },\n and: [\n { placedDateTime: { gte: `${startDate}` } },\n { placedDateTime: { lt: `${endDate}` } },\n ],\n },\n limit,\n };\n\n if (searchTerm)\n inboundSearchInput.filter.or = [\n { poNumber: { matchPhrasePrefix: `${searchTerm}` } },\n { poNumber: { wildcard: `*${searchTerm}*` } },\n { railCarNumber: { matchPhrasePrefix: `${searchTerm}` } },\n { railCarNumber: { wildcard: `*${searchTerm}*` } },\n { lotNumber: { matchPhrasePrefix: `${searchTerm}` } },\n { lotNumber: { wildcard: `*${searchTerm}*` } },\n { customFields: { matchPhrasePrefix: `${searchTerm}` } },\n { customFields: { wildcard: `*${searchTerm}*` } },\n ];\n\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true\n ? inboundSearchInput\n : { ...inboundSearchInput, nextToken };\n const result = await API.graphql(\n graphqlOperation(searchInboundInvoices, input)\n );\n inbounds.splice(-1, 0, ...result.data.searchInboundShipments.items);\n if (result.data.searchInboundShipments.items.length < limit) break;\n nextToken = result.data.searchInboundShipments.nextToken;\n }\n\n inbounds.forEach((inbound) => {\n if (inbound.invoice) {\n invoiceRunningTotal += inbound.invoice.total;\n }\n });\n\n setInvoicetotal(invoiceRunningTotal);\n setFinalData(inbounds);\n } catch (err) {\n logError(\"InboundInvoiceReport:getReportData\", err, notify);\n setFinalData([]);\n } finally {\n setLoading(false);\n }\n };\n\n const fixedFilter = \"\"; // {\"lowInventoryAlert\": true};\n const defaultSort = { field: \"shipmentDate\", order: \"ASC\" };\n const defaultPerPage = 25;\n\n const listContext = useList({\n ...props,\n data: finalData,\n ids: finalData.map(({ id }) => id),\n loading,\n loaded: !loading,\n filter: fixedFilter,\n sort: defaultSort,\n perPage: defaultPerPage,\n });\n\n return (\n <SimpleForm toolbar={false}>\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Report Inbound Invoices\" />} />\n <ListActions\n {...props}\n finalData={finalData}\n setAccountId={setAccountId}\n account={account}\n setAccount={setAccount}\n year={year}\n setYear={setYear}\n monthRnage={monthRnage}\n setMontRange={setMontRange}\n searchTerm={searchTerm}\n setSearchTerm={setSearchTerm}\n getReportData={getReportData}\n />\n <Card>\n <ReportGrid account={account} />\n <PaginationToolbar invoiceTotal={invoiceTotal} />\n </Card>\n </ListContextProvider>\n </SimpleForm>\n );\n};\n\nconst ReportGrid = ({ account, ...props }) => {\n const listContext = useListContext(props);\n const accountFields =\n account?.inboundCustomFields?.length > 0 ? account.inboundCustomFields : [];\n const customGridFields = accountFields\n ? accountFields.map((field, index) => {\n return (\n <CustomField\n source={`customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={true}\n />\n );\n })\n : [];\n\n if (!account?.id) return null;\n return (\n <CustomizableDatagrid\n {...listContext}\n rowClick={false}\n hasBulkActions={false}\n storageProp={`InboundInvoiceReport_${account.id}_$large`}\n defaultColumns={[\n \"placedDateTime\",\n \"poNumber\",\n \"lotNumber\",\n \"railCarNumber\",\n \"totalQuantity\",\n \"totalUnits\",\n \"invoice.invoiceNumber\",\n \"invoice.total\",\n ]}\n >\n {[\n <DateField source=\"placedDateTime\" label=\"Inbound Date\" />,\n <TextField source=\"poNumber\" label=\"PO Number\" />,\n <TextField source=\"lotNumber\" label=\"Lot Number\" />,\n <TextField source=\"railCarNumber\" label=\"Car/Trl Number\" />,\n <NumberField source=\"totalQuantity\" label=\"Qty. Received\" />,\n <TextField source=\"totalUnits\" label=\"UOM\" />,\n <TextField source=\"invoice.invoiceNumber\" label=\"Invoice Number\" />,\n <NumberField\n source=\"invoice.total\"\n label=\"Invoice Total\"\n sortable={true}\n options={{\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }}\n />,\n ...customGridFields,\n ]}\n </CustomizableDatagrid>\n );\n};\n\nconst PaginationToolbar = ({ invoiceTotal, ...props }) => {\n const classes = useStyles();\n const listContext = useListContext(props);\n var formatter = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n });\n\n return (\n <Grid container direction=\"row\" spacing={1} alignItems=\"center\">\n <Grid item xs={4}>\n <Typography className={classes.totals}>\n {Number(invoiceTotal) >= 0 &&\n `Total Invoiced: ${formatter.format(invoiceTotal)}`}\n </Typography>\n </Grid>\n <Grid item xs={8}>\n <Pagination {...props} {...listContext} />\n </Grid>\n </Grid>\n );\n};\n","import React, { useState } from \"react\";\nimport jsonExport from \"jsonexport/dist\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { searchOutboundInvoices } from \"../../graphql/report-queries\";\n\nimport {\n Card,\n Grid,\n TextField as FilterField,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n Button,\n DateField,\n downloadCSV,\n ListContextProvider,\n NumberField,\n TextField,\n Title,\n TopToolbar,\n useList,\n useListContext,\n useNotify,\n SimpleForm,\n required,\n} from \"react-admin\";\n\nimport { AccountDropDown } from \"../../components/common/AccountDropDown\";\nimport { ExportIcon } from \"../../components/common\";\nimport { BackButton } from \"../../components/common/BackButton\";\nimport { ForceTitle } from \"../../components/common/ForceTitle\";\nimport { Pagination } from \"../../components/Pagination\";\nimport { logError } from \"../../utils/appUtils\";\nimport { CustomField } from \"../../components/common/CustomFields\";\nimport CustomizableDatagrid from \"../../components/common/ra-customizable-datagrid\";\n\nimport { exportCustomField } from \"../../utils/utils\";\nimport {\n createDateRangeParams,\n handleAccountChange,\n MonthRangeSlider,\n YearSelect,\n} from \"./ReportsUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n submitButton: {\n position: \"absolute\",\n bottom: theme.spacing(2),\n },\n totals: {\n marginLeft: theme.spacing(2),\n },\n}));\n\nconst exporter = (finalData) => {\n const customHeaderMap = new Map();\n debugger;\n\n const shipmentsForExport = finalData.map((shipment) => {\n const shipmentForExport = {\n outboundDate: new Date(shipment.departureDateTime).toLocaleDateString(),\n poNumber: shipment.poNumber,\n pickupNumber: shipment.pickupNumber,\n carTrlNumber: shipment.railCarNumber,\n qtyReceived: shipment.totalQuantity,\n UOM: shipment.totalUnits,\n };\n\n if (shipment.customFields?.length > 0) {\n debugger;\n shipment.customFields.forEach((field) => {\n exportCustomField(field, shipmentForExport, customHeaderMap);\n });\n }\n\n shipmentForExport.invoiceNumber = shipment.invoice?.invoiceNumber;\n shipmentForExport.invoiceTotal = shipment.invoice?.total;\n\n if (shipment.invoice?.lineItems?.items?.length > 0) {\n debugger;\n shipment.invoice.lineItems.items.forEach((item) => {\n shipmentForExport[item.service.name] = item.amount;\n });\n }\n\n return shipmentForExport;\n });\n\n jsonExport(\n shipmentsForExport,\n {\n rename: [\n // \"Shipment Id\", \"Shipment Type\", \"Shipment Date\", \"subtotal\", \"UOM\"\n ],\n },\n (err, csv) => {\n downloadCSV(\n csv,\n `report_in_out_totals_${new Date().toLocaleDateString()}`\n ); // download as 'report_in_out_totals_date.csv` file\n }\n );\n};\n\nconst ListActions = (props) => {\n const classes = useStyles();\n const validateRequired = required();\n const {\n finalData,\n account,\n setAccountId,\n setAccount,\n year,\n setYear,\n monthRnage,\n setMontRange,\n searchTerm,\n setSearchTerm,\n getInOutTotalsData,\n } = props;\n\n return (\n <TopToolbar>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item container xs={10} spacing={1}>\n <Grid item xs={12} md={4}>\n <AccountDropDown\n source=\"accountId\"\n label=\"Account\"\n onAccountChange={(value) =>\n handleAccountChange(value, setAccount, setAccountId)\n }\n validate={validateRequired}\n allowEmpty={false}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <YearSelect year={year} setYear={setYear} />\n </Grid>\n <Grid item xs={12} md={5}>\n <MonthRangeSlider\n monthRnage={monthRnage}\n setMontRange={setMontRange}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <FilterField\n id=\"search\"\n label=\"Search by Number\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n alwaysOn\n value={searchTerm}\n onChange={(evt) => setSearchTerm(evt?.target?.value)}\n />\n </Grid>\n </Grid>\n <Grid item xs={2}>\n <Button\n label=\"Run\"\n variant=\"contained\"\n color=\"default\"\n alwaysOn\n className={classes.submitButton}\n onClick={getInOutTotalsData}\n disabled={!account?.id || !year}\n />\n </Grid>\n </Grid>\n\n <Button\n label=\"Export\"\n disabled={finalData?.length === 0}\n onClick={() => exporter(finalData)}\n >\n <ExportIcon />\n </Button>\n <BackButton basePath=\"/reports\" />\n </TopToolbar>\n );\n};\n\n// /reportOutboundInvoices\nexport const OutboundInvoiceReport = (props) => {\n const notify = useNotify();\n\n const [accountId, setAccountId] = useState(\"\");\n const [account, setAccount] = useState(\"\");\n\n const [year, setYear] = useState();\n const [monthRnage, setMontRange] = useState([1, 1]);\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const [invoiceTotal, setInvoicetotal] = useState(0);\n const [finalData, setFinalData] = useState([]);\n const [loading, setLoading] = useState(false);\n\n const getInOutTotalsData = async () => {\n try {\n setLoading(true);\n debugger;\n\n const outbounds = [];\n let invoiceRunningTotal = 0;\n const { startDate, endDate } = createDateRangeParams(year, monthRnage);\n const limit = 1000;\n const outboundSearchInput = {\n sort: { field: \"departureDateTime\", direction: \"asc\" },\n filter: {\n accountId: { eq: `${accountId}` },\n and: [\n { departureDateTime: { gte: `${startDate}` } },\n { departureDateTime: { lt: `${endDate}` } },\n ],\n },\n limit,\n };\n\n if (searchTerm)\n outboundSearchInput.filter.or = [\n { poNumber: { matchPhrasePrefix: `${searchTerm}` } },\n { poNumber: { wildcard: `*${searchTerm}*` } },\n { pickupNumber: { matchPhrasePrefix: `${searchTerm}` } },\n { pickupNumber: { wildcard: `*${searchTerm}*` } },\n { railCarNumber: { matchPhrasePrefix: `${searchTerm}` } },\n { railCarNumber: { wildcard: `*${searchTerm}*` } },\n { customFields: { matchPhrasePrefix: `${searchTerm}` } },\n { customFields: { wildcard: `*${searchTerm}*` } },\n ];\n\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true\n ? outboundSearchInput\n : { ...outboundSearchInput, nextToken };\n const result = await API.graphql(\n graphqlOperation(searchOutboundInvoices, input)\n );\n outbounds.splice(-1, 0, ...result.data.searchOutboundShipments.items);\n if (result.data.searchOutboundShipments.items.length < limit) break;\n nextToken = result.data.searchOutboundShipments.nextToken;\n }\n\n outbounds.forEach((outbound) => {\n if (outbound.invoice) {\n invoiceRunningTotal += outbound.invoice.total;\n }\n });\n\n setInvoicetotal(invoiceRunningTotal);\n setFinalData(outbounds);\n } catch (err) {\n logError(\"OutboundInvoiceReport:getInOutTotalsData\", err, notify);\n setFinalData([]);\n } finally {\n setLoading(false);\n }\n };\n\n const fixedFilter = \"\"; // {\"lowInventoryAlert\": true};\n const defaultSort = { field: \"shipmentDate\", order: \"ASC\" };\n const defaultPerPage = 25;\n\n const listContext = useList({\n ...props,\n data: finalData,\n ids: finalData.map(({ id }) => id),\n loading,\n loaded: !loading,\n filter: fixedFilter,\n sort: defaultSort,\n perPage: defaultPerPage,\n });\n\n return (\n <SimpleForm toolbar={false}>\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Report Outbound Invoices\" />} />\n <ListActions\n {...props}\n finalData={finalData}\n account={account}\n setAccountId={setAccountId}\n setAccount={setAccount}\n year={year}\n setYear={setYear}\n monthRnage={monthRnage}\n setMontRange={setMontRange}\n searchTerm={searchTerm}\n setSearchTerm={setSearchTerm}\n getInOutTotalsData={getInOutTotalsData}\n />\n <Card>\n <ReportGrid account={account} />\n <PaginationToolbar invoiceTotal={invoiceTotal} />\n </Card>\n </ListContextProvider>\n </SimpleForm>\n );\n};\n\nconst ReportGrid = ({ account, ...props }) => {\n const listContext = useListContext(props);\n const accountFields =\n account?.outboundCustomFields?.length > 0\n ? account.outboundCustomFields\n : [];\n const customGridFields = accountFields\n ? accountFields.map((field, index) => {\n return (\n <CustomField\n source={`customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={true}\n />\n );\n })\n : [];\n\n if (!account?.id) return null;\n return (\n <CustomizableDatagrid\n {...listContext}\n rowClick={false}\n hasBulkActions={false}\n storageProp={`OutboundInvoiceReport_${account.id}_large`}\n defaultColumns={[\n \"placedDateTime\",\n \"poNumber\",\n \"lotNumber\",\n \"railCarNumber\",\n \"totalQuantity\",\n \"totalUnits\",\n \"invoice.invoiceNumber\",\n \"invoice.total\",\n ]}\n >\n {[\n <DateField source=\"departureDateTime\" label=\"Outbound Date\" />,\n <TextField source=\"poNumber\" label=\"PO Number\" />,\n <TextField source=\"pickupNumber\" label=\"Pickup Number\" />,\n <TextField source=\"railCarNumber\" label=\"Car/Trl Number\" />,\n <NumberField source=\"totalQuantity\" label=\"Qty. Shipped\" />,\n <TextField source=\"totalUnits\" label=\"UOM\" />,\n <TextField source=\"invoice.invoiceNumber\" label=\"Invoice Number\" />,\n <NumberField\n source=\"invoice.total\"\n label=\"Invoice Total\"\n sortable={true}\n options={{\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }}\n />,\n ...customGridFields,\n ]}\n </CustomizableDatagrid>\n );\n};\n\nconst PaginationToolbar = ({ invoiceTotal, ...props }) => {\n const classes = useStyles();\n const listContext = useListContext(props);\n var formatter = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n });\n\n return (\n <Grid container direction=\"row\" spacing={1} alignItems=\"center\">\n <Grid item xs={4}>\n <Typography className={classes.totals}>\n {Number(invoiceTotal) >= 0 &&\n `Total Invoiced: ${formatter.format(invoiceTotal)}`}\n </Typography>\n </Grid>\n <Grid item xs={8}>\n <Pagination {...props} {...listContext} />\n </Grid>\n </Grid>\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport jsonExport from \"jsonexport/dist\";\nimport DateFnsUtils from \"@date-io/date-fns\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n searchInboundTotal,\n searchOutboundTotal,\n} from \"../../graphql/report-queries\";\nimport { getProduct } from \"../../graphql/queries\";\n\nimport {\n Card,\n Grid,\n MenuItem,\n TextField as FilterField,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { MuiPickersUtilsProvider } from \"@material-ui/pickers\";\n\nimport {\n Button,\n Datagrid,\n DateField,\n downloadCSV,\n ListContextProvider,\n NumberField,\n TextField,\n Title,\n TopToolbar,\n useList,\n useListContext,\n useNotify,\n SimpleForm,\n required,\n} from \"react-admin\";\n\nimport { ExportIcon } from \"../../components/common\";\nimport { BackButton } from \"../../components/common/BackButton\";\nimport { ForceTitle } from \"../../components/common/ForceTitle\";\nimport { Pagination } from \"../../components/Pagination\";\nimport { logError } from \"../../utils/appUtils\";\nimport { UnitOptions } from \"../../utils/constants\";\nimport { convertUnits } from \"../../utils/loadTypeUtils\";\nimport {\n createDateRangeParams,\n MonthRangeSlider,\n YearSelect,\n} from \"./ReportsUtils\";\nimport { AccountDropDown } from \"../../components/common/AccountDropDown\";\n\nconst useStyles = makeStyles((theme) => ({\n submitButton: {\n position: \"absolute\",\n bottom: theme.spacing(2),\n },\n totals: {\n marginLeft: theme.spacing(2),\n },\n}));\n\nconst exporter = (finalData) => {\n debugger;\n const shipmentsForExport = finalData.map((shipment) => {\n const shipmentForExport = {\n accountName: shipment.accountName,\n shipmentId: shipment.id,\n shipmentType: shipment.shipmentType,\n shipmentDate: new Date(shipment.shipmentDate).toLocaleDateString(),\n poNumber: shipment.poNumber,\n subtotal: shipment.subtotal,\n UOM: shipment.units,\n };\n\n return shipmentForExport;\n });\n\n jsonExport(\n shipmentsForExport,\n {\n rename: [\n // \"Shipment Id\", \"Shipment Type\", \"Shipment Date\", \"subtotal\", \"UOM\"\n ],\n },\n (err, csv) => {\n downloadCSV(\n csv,\n `report_in_out_totals_${new Date().toLocaleDateString()}`\n ); // download as 'report_in_out_totals_date.csv` file\n }\n );\n};\n\nconst ListActions = (props) => {\n const classes = useStyles();\n const validateRequired = required();\n const {\n finalData,\n accountId,\n setAccountId,\n loadTypes,\n loadType,\n setLoadType,\n units,\n setUnits,\n year,\n setYear,\n monthRnage,\n setMontRange,\n searchTerm,\n setSearchTerm,\n getInOutTotalsData,\n } = props;\n\n return (\n <TopToolbar>\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item container xs={10} spacing={1}>\n <Grid item xs={12} md={4}>\n <AccountDropDown\n source=\"accountId\"\n label=\"Account\"\n onAccountChange={(value) => setAccountId(value?.id)}\n validate={validateRequired}\n allowEmpty={false}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <YearSelect year={year} setYear={setYear} />\n </Grid>\n <Grid item xs={12} md={5}>\n <MonthRangeSlider\n maxMonths={accountId ? 6 : 3}\n monthRnage={monthRnage}\n setMontRange={setMontRange}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <FilterField\n select\n id=\"units\"\n label=\"Units\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n required\n alwaysOn\n value={units}\n onChange={(evt) => setUnits(evt?.target?.value)}\n >\n {UnitOptions.map((unit) => (\n <MenuItem key={unit.id} value={unit.id}>\n {\" \"}\n {unit.name}{\" \"}\n </MenuItem>\n ))}\n </FilterField>\n </Grid>\n <Grid item xs={12} md={4}>\n <FilterField\n select\n id=\"loadType\"\n label=\"Load Type\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n alwaysOn\n value={loadType}\n onChange={(evt) => setLoadType(evt?.target?.value)}\n >\n {loadTypes.map((load) => (\n <MenuItem key={load.id} value={load.id}>\n {\" \"}\n {load.id ? load.commodity?.name : <span> </span>}{\" \"}\n </MenuItem>\n ))}\n </FilterField>\n </Grid>\n <Grid item xs={12} md={4}>\n <FilterField\n id=\"search\"\n label=\"Product Name / Code\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n alwaysOn\n value={searchTerm}\n onChange={(evt) => setSearchTerm(evt?.target?.value)}\n />\n </Grid>\n </Grid>\n <Grid item xs={2}>\n <Button\n label=\"Run\"\n variant=\"contained\"\n color=\"default\"\n alwaysOn\n className={classes.submitButton}\n onClick={getInOutTotalsData}\n disabled={!units || !year}\n />\n </Grid>\n </Grid>\n </MuiPickersUtilsProvider>\n\n <Button\n label=\"Export\"\n disabled={finalData?.length === 0}\n onClick={() => exporter(finalData)}\n >\n <ExportIcon />\n </Button>\n <BackButton basePath=\"/reports\" />\n </TopToolbar>\n );\n};\n\n// /reportTotalInOut\nexport const TotalInOutReport = (props) => {\n const notify = useNotify();\n const [loadTypes] = useState([\n { id: null, name: null },\n ...window.appUser.reloadYard.activeYardCommodities.items,\n ]);\n\n const [accountId, setAccountId] = useState(\"\");\n const [loadType, setLoadType] = useState(\"\");\n const [units, setUnits] = useState(\"\");\n const [year, setYear] = useState();\n const [monthRnage, setMontRange] = useState([1, 1]);\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const [inboundTotal, setInboundTotal] = useState(0);\n const [outboundTotal, setOutboundTotal] = useState(0);\n\n const [finalData, setFinalData] = useState([]);\n const [loading, setLoading] = useState(false);\n\n const getInOutTotalsData = async () => {\n try {\n setLoading(true);\n debugger;\n\n let inboundRunningTotal = 0;\n let outboundRunningTotal = 0;\n const inbounds = [];\n const outbounds = [];\n const productMap = {};\n let globalError = false;\n const { startDate, endDate } = createDateRangeParams(year, monthRnage);\n const limit = 1000;\n\n const inboundSearchInput = {\n sort: { field: \"placedDateTime\", direction: \"asc\" },\n filter: {\n and: [\n { placedDateTime: { gte: `${startDate}` } },\n { placedDateTime: { lt: `${endDate}` } },\n ],\n },\n limit,\n };\n const outboundSearchInput = {\n sort: { field: \"departureDateTime\", direction: \"asc\" },\n filter: {\n and: [\n { departureDateTime: { gte: `${startDate}` } },\n { departureDateTime: { lte: `${endDate}` } },\n ],\n },\n limit,\n };\n if (accountId) {\n inboundSearchInput.filter.accountId = { eq: accountId };\n outboundSearchInput.filter.accountId = { eq: accountId };\n } else {\n inboundSearchInput.filter.reloadYardId = {\n eq: window.appUser.reloadYardId,\n };\n outboundSearchInput.filter.reloadYardId = {\n eq: window.appUser.reloadYardId,\n };\n }\n if (loadType) {\n inboundSearchInput.filter.reloadYardCommodityId = { eq: loadType };\n outboundSearchInput.filter.reloadYardCommodityId = { eq: loadType };\n }\n\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true\n ? inboundSearchInput\n : { ...inboundSearchInput, nextToken };\n const result = await API.graphql(\n graphqlOperation(searchInboundTotal, input)\n );\n inbounds.splice(-1, 0, ...result.data.searchInboundShipments.items);\n if (result.data.searchInboundShipments.items.length < limit) break;\n nextToken = result.data.searchInboundShipments.nextToken;\n }\n nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true\n ? outboundSearchInput\n : { ...outboundSearchInput, nextToken };\n const result = await API.graphql(\n graphqlOperation(searchOutboundTotal, input)\n );\n outbounds.splice(-1, 0, ...result.data.searchOutboundShipments.items);\n if (result.data.searchOutboundShipments.items.length < limit) break;\n nextToken = result.data.searchOutboundShipments.nextToken;\n }\n\n inbounds.forEach((inbound) => {\n inbound.inventories.items.forEach((itm) => {\n if (itm.productId && !productMap[itm.productId]) {\n productMap[itm.productId] = itm.productId;\n }\n });\n });\n\n outbounds.forEach((outbound) => {\n outbound.shipmentLineItems.items.forEach((itm) => {\n if (itm.inventory.productId && !productMap[itm.inventory.productId]) {\n productMap[itm.inventory.productId] = itm.inventory.productId;\n }\n });\n });\n\n const promiseList = [];\n Object.values(productMap).forEach((productId) => {\n promiseList.push(\n API.graphql(graphqlOperation(getProduct, { id: productId }))\n );\n });\n const response = await Promise.all(promiseList);\n response.forEach(\n (itm) => (productMap[itm.data.getProduct.id] = itm.data.getProduct)\n );\n inbounds.forEach((inbound) => {\n let subtotal = 0;\n let convertError = false;\n\n inbound.inventories.items.forEach((itm) => {\n if (!convertError) {\n if (!loadType || itm.reloadYardCommodityId === loadType) {\n if (\n !searchTerm ||\n itm.productName.toLowerCase().includes(searchTerm) ||\n itm.productCode?.toLowerCase().includes(searchTerm)\n ) {\n const conversion = convertUnits(\n itm.quantityShipped,\n itm.inventoryUnits,\n units,\n productMap[itm.productId]\n );\n if (conversion.error) {\n if (!globalError)\n notify(\n \"Inventory not linked to Product or Product missing unit conversion rate.\",\n \"warning\"\n );\n convertError = true;\n globalError = true;\n } else subtotal += conversion.value;\n }\n }\n }\n });\n if (!convertError) {\n inbound.subtotal = subtotal;\n inboundRunningTotal += subtotal;\n } else {\n inbound.subtotal = \"MISSING\";\n }\n inbound.shipmentDate = inbound.placedDateTime;\n inbound.shipmentType = \"Inbound\";\n });\n\n outbounds.forEach((outbound) => {\n let subtotal = 0;\n let convertError = false;\n\n outbound.shipmentLineItems.items.forEach((itm) => {\n if (!convertError) {\n if (!loadType || itm.inventory.reloadYardCommodityId === loadType) {\n if (\n !searchTerm ||\n itm.inventory.productName.toLowerCase().includes(searchTerm) ||\n itm.inventory.productCode?.toLowerCase().includes(searchTerm)\n ) {\n const conversion = convertUnits(\n itm.totalQuantityToPick,\n itm.inventory.inventoryUnits,\n units,\n productMap[itm.inventory.productId]\n );\n if (conversion.error) {\n if (!globalError)\n notify(\n \"Inventory not linked to Product or Product missing unit conversion rate.\",\n \"warning\"\n );\n convertError = true;\n globalError = true;\n } else subtotal += conversion.value;\n }\n }\n }\n });\n\n if (!convertError) {\n outbound.subtotal = subtotal;\n outboundRunningTotal += subtotal;\n } else {\n outbound.subtotal = \"MISSING\";\n }\n outbound.shipmentDate = outbound.departureDateTime;\n outbound.shipmentType = \"Outbound\";\n });\n\n let totalData = inbounds.concat(outbounds);\n totalData = totalData.filter((itm) => itm.subtotal !== 0);\n\n if (!globalError) {\n setInboundTotal(inboundRunningTotal);\n setOutboundTotal(outboundRunningTotal);\n } else {\n setInboundTotal(0);\n setOutboundTotal(0);\n }\n setFinalData(totalData);\n } catch (err) {\n logError(\"TotalInOutLoads:getInOutTotalsData\", err, notify);\n setFinalData([]);\n } finally {\n setLoading(false);\n }\n };\n\n const fixedFilter = \"\"; // {\"lowInventoryAlert\": true};\n const defaultSort = { field: \"shipmentDate\", order: \"ASC\" };\n const defaultPerPage = 25;\n\n const listContext = useList({\n ...props,\n data: finalData,\n ids: finalData.map(({ id }) => id),\n loading,\n loaded: !loading,\n filter: fixedFilter,\n sort: defaultSort,\n perPage: defaultPerPage,\n });\n\n return (\n <SimpleForm toolbar={false}>\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Report In/Out Totals\" />} />\n <ListActions\n {...props}\n finalData={finalData}\n accountId={accountId}\n setAccountId={setAccountId}\n loadTypes={loadTypes}\n loadType={loadType}\n setLoadType={setLoadType}\n units={units}\n setUnits={setUnits}\n year={year}\n setYear={setYear}\n monthRnage={monthRnage}\n setMontRange={setMontRange}\n searchTerm={searchTerm}\n setSearchTerm={setSearchTerm}\n getInOutTotalsData={getInOutTotalsData}\n />\n <Card>\n <ReportGrid accountId={accountId} />\n <PaginationToolbar\n inboundTotal={inboundTotal}\n outboundTotal={outboundTotal}\n units={units}\n />\n </Card>\n </ListContextProvider>\n </SimpleForm>\n );\n};\n\nconst ReportGrid = ({ accountId, ...props }) => {\n const listContext = useListContext(props);\n\n return (\n <Datagrid rowClick={false} {...listContext}>\n {!accountId && <TextField source=\"accountName\" label=\"Account\" />}\n <DateField source=\"shipmentDate\" label=\"Date\" />\n <TextField source=\"shipmentType\" label=\"Shipment\" />\n <TextField source=\"poNumber\" label=\"PO Number\" />\n <NumberField source=\"subtotal\" label=\"Subtotal\" />\n <TextField source=\"totalUnits\" label=\"UOM\" />\n </Datagrid>\n );\n};\n\nconst PaginationToolbar = ({\n inboundTotal,\n outboundTotal,\n units,\n ...props\n}) => {\n const classes = useStyles();\n const listContext = useListContext(props);\n var formatter = new Intl.NumberFormat(\"en-US\");\n\n return (\n <Grid container direction=\"row\" spacing={1} alignItems=\"center\">\n <Grid item xs={4}>\n <Typography className={classes.totals}>\n {(Number(inboundTotal) >= 0 || Number(outboundTotal) >= 0) &&\n `Inbound: ${formatter.format(\n inboundTotal\n )} ${units} Outbound: ${formatter.format(outboundTotal)} ${units}`}\n </Typography>\n </Grid>\n <Grid item xs={8}>\n <Pagination {...props} {...listContext} />\n </Grid>\n </Grid>\n );\n};\n","import React, { useState, useEffect } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { countInventoryByCommodity } from \"../../graphql/report-queries\";\nimport {\n Cell,\n Legend,\n Pie,\n PieChart,\n ResponsiveContainer,\n Tooltip,\n} from \"recharts\";\n\nimport { useNotify, TopToolbar } from \"react-admin\";\n\nimport Title from \"./Title\";\nimport { ForceTitle } from \"../../components/common/ForceTitle\";\nimport { logError } from \"../../utils/appUtils\";\nimport {\n colorsDark,\n colorsLight,\n InventoryStatus,\n} from \"../../utils/constants\";\nimport { BackButton } from \"../../components/common/BackButton\";\n\nconst InventoryByLoadType = () => {\n const notify = useNotify();\n const [data, setData] = useState([]);\n const dataMap = {};\n const height = window.innerHeight * 0.6;\n\n useEffect(() => {\n getInventoryData();\n }, []);\n\n const getInventoryData = async () => {\n let tempData = [];\n let commodityMap = {};\n const limit = 500;\n try {\n const searchInput = {\n sort: { field: \"inboundShipmentId\", direction: \"asc\" },\n filter: {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: InventoryStatus.STORED },\n },\n limit,\n };\n let nextToken = true;\n let inventories = [];\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { nextToken, ...searchInput };\n const result = await API.graphql(\n graphqlOperation(countInventoryByCommodity, input)\n );\n inventories = inventories.concat(result.data.searchInventorys.items);\n if (result.data.searchInventorys.items.length < limit) break;\n nextToken = result.data.locationBySortKey.nextToken;\n }\n\n inventories.forEach((inventory) => {\n let commodity = inventory?.reloadYardCommodity?.commodity?.id;\n let inbound = inventory.inboundShipmentId;\n\n if (dataMap[commodity]) {\n dataMap[commodity] = {\n ...dataMap[commodity],\n [inbound]: dataMap[commodity][inbound]\n ? dataMap[commodity][inbound] + 1\n : 1,\n };\n } else {\n commodityMap[commodity] =\n inventory?.reloadYardCommodity?.commodity?.name;\n dataMap[commodity] = { [inbound]: 1 };\n }\n });\n\n Object.keys(dataMap).forEach((commodity, idx) => {\n let count = 0;\n Object.keys(dataMap[commodity]).forEach((inbound) => {\n count += dataMap[commodity][inbound];\n });\n tempData[idx] = { name: commodityMap[commodity], cars: count };\n });\n\n setData(tempData);\n } catch (err) {\n logError(\"InventoryByCommodity:getInventoryData\", err, notify);\n }\n };\n\n return (\n <>\n <div style={{ display: \"none\" }}>\n <ForceTitle title=\"Reports\" />\n </div>\n <TopToolbar>\n <Title>Inventory by Commodity\n \n \n \n \n \n \n \n {data.map((entry, index) => (\n \n ))}\n \n \n \n \n );\n};\n\nexport default InventoryByLoadType;\n","import React, { useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport {\n addDays,\n addMonths,\n addWeeks,\n differenceInDays,\n endOfMonth,\n format,\n getDate,\n isAfter,\n startOfDay,\n startOfMonth,\n startOfWeek,\n subDays,\n} from \"date-fns\";\n\nimport jsonExport from \"jsonexport/dist\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { searchInventoryStorage } from \"../../graphql/report-queries\";\nimport { getAccount } from \"../../graphql/queries\";\n\nimport {\n Box,\n Card,\n Grid,\n MenuItem,\n Paper,\n TextField as FilterField,\n Typography,\n} from \"@material-ui/core\";\n\nimport {\n ArrayField,\n Button,\n Datagrid,\n DateField,\n downloadCSV,\n FunctionField,\n ListContextProvider,\n NumberField,\n required,\n SimpleForm,\n TextField,\n Title,\n TopToolbar,\n useList,\n useListContext,\n useNotify,\n} from \"react-admin\";\n\nimport { AccountDropDown } from \"../../components/common/AccountDropDown\";\nimport { CreateIcon, ExportIcon } from \"../../components/common\";\nimport { BackButton } from \"../../components/common/BackButton\";\nimport { ForceTitle } from \"../../components/common/ForceTitle\";\nimport { Pagination } from \"../../components/Pagination\";\nimport { logError } from \"../../utils/appUtils\";\nimport CustomizableDatagrid from \"../../components/common/ra-customizable-datagrid\";\nimport {\n InventoryStatus,\n ShipmentLineItemStatus,\n Unit,\n UnitToColumn,\n} from \"../../utils/constants\";\nimport { convertUnits, getUnitName } from \"../../utils/loadTypeUtils\";\nimport { deepRedirect, trimDecimal } from \"../../utils/utils\";\n\nconst reportFrequencyOptions = [\n { id: \"MONTHLY\", name: \"Monthly\" },\n { id: \"BIWEEKLY\", name: \"Biweekly\" },\n { id: \"WEEKLY\", name: \"Weekly\" },\n];\n\nconst accrualOptions = [\n { id: \"FLAT\", name: \"Flat rate\" },\n { id: \"DAILY\", name: \"Prorated (Daily)\" },\n];\n\nexport const UnitColumnsOptions = Object.values(UnitToColumn);\n\nconst csvGenerate = (finalData, accrual) => {\n debugger;\n let reportForExport = [];\n\n // if (accrual === \"FLAT\") {\n // reportForExport = finalData.map(inventory => {\n // const inventoryForExport = {\n // // endDate = format(startOfMonth(inventory.deliveryDateTime), 'yyyy-MM-dd');\n\n // \"Received\": new Date(inventory.deliveryDateTime).toLocaleDateString(),\n // \"Product Code\": `${inventory.productCode}`,\n // \"Product Name\": inventory.productName,\n // \"Order No.\": `${inventory.poNumber}`,\n // \"Car/Trl No.\": `${inventory.railCarNumber}`,\n // \"Days Stored\": inventory.totalDaysStored,\n // \"Days Billable\": inventory.billableDaysTotal,\n // \"Quantity\": inventory.quantityOnHand,\n // \"UOM\": inventory.inventoryUnits,\n // \"Weight\": inventory.weight ? inventory.weight : \"\",\n // \"Weight UOM\": inventory.weightUnits ? inventory.weightUnits : \"\",\n // \"Total Fee\": inventory.totalFees,\n // };\n // return inventoryForExport;\n // });\n // } else {\n reportForExport = finalData.map((inventory) => {\n const inventoryForExport = {\n Received: new Date(inventory.deliveryDateTime).toLocaleDateString(),\n \"Product Code\": inventory.productCode,\n \"Product Name\": inventory.productName,\n \"Order No.\": `${inventory.poNumber}`,\n \"Car/Trl No.\": `${inventory.railCarNumber}`,\n \"Total Fee\": inventory.totalFees,\n };\n\n if (inventory.billableItems?.length) {\n inventoryForExport.billable = inventory.billableItems.map((item) => {\n const lineItem = {\n Quantity: item.quantity,\n UOM: item.inventoryUnits,\n Weight: item.weight ? inventory.weight : \"\",\n \"Weight UOM\": item.weightUnits ? inventory.weightUnits : \"\",\n Days: item.billableDays,\n Shipped: item.dateShipped\n ? new Date(item.dateShipped).toLocaleDateString()\n : \"\",\n Fee: item.fees,\n };\n return lineItem;\n });\n }\n\n return inventoryForExport;\n });\n // }\n\n return reportForExport;\n};\n\n/**\n * downloadExporter\n * @param {Array} finalData - The data array to be converted to CSV.\n * @param {string} accrual - Unused in this snippet, but kept for compatibility.\n */\nconst downloadExporter = (finalData, accrual) => {\n debugger;\n let reportForExport = csvGenerate(finalData, accrual);\n\n jsonExport(\n reportForExport,\n {\n rename: [\n // \"Shipment Id\", \"Shipment Type\", \"Shipment Date\", \"subtotal\", \"UOM\"\n ],\n },\n (err, csv) => {\n downloadCSV(\n csv,\n `report_inventory_storage_${new Date().toLocaleDateString()}`\n ); // download as 'report_inventory_storage_date.csv` file\n }\n );\n};\n\n/**\n * fileExporter\n * @param {Array} finalData - The data array to be converted to CSV.\n * @param {string} accrual - Unused in this snippet, but kept for compatibility.\n * @returns {Promise} - Returns a promise that resolves a File object.\n */\nconst fileExporter = async (finalData, accrual) => {\n debugger;\n let reportForExport = csvGenerate(finalData, accrual);\n const dateString = new Date().toLocaleDateString().replace(/\\//g, \"_\");\n\n return new Promise((resolve, reject) => {\n jsonExport(\n reportForExport,\n {\n rename: [\n // \"Shipment Id\", \"Shipment Type\", \"Shipment Date\", \"subtotal\", \"UOM\"\n ],\n },\n (err, csv) => {\n if (err) return reject(err);\n const blob = new Blob([csv], { type: \"text/csv\" });\n const file = new File(\n [blob],\n `inventory_storage_report_${dateString}.csv`,\n { type: \"text/csv\" }\n );\n resolve(file);\n }\n );\n });\n};\n\nconst getServiceRates = (service) => {\n const rates = [];\n // Iterate over the UnitColumnsOptions array to check for non-zero rates in the service object\n UnitColumnsOptions.forEach((column) => {\n if (service[column]) {\n // Check for non-zero rates in the service object\n const unit = Object.keys(UnitToColumn).find(\n (key) => UnitToColumn[key] === column\n );\n rates.push({ unit, column, rate: service[column] });\n }\n });\n\n return rates;\n};\n\nconst getServiceHelperText = (serviceRates) => {\n if (serviceRates.length > 0) {\n return serviceRates\n .map(\n (rate) =>\n `${getUnitName(rate.unit)}: ${(rate.rate || 0).toLocaleString(\n \"en-US\",\n { style: \"currency\", currency: \"USD\" }\n )}`\n )\n .join(\", \");\n }\n return \"\";\n};\n\nconst setupFilters = async (setAreas, notify) => {\n try {\n debugger;\n const selectAreas = [{ id: \"\", name: \"Select area...\" }];\n window.appUser.reloadYard.areas?.items.forEach((itm) => {\n const selectedArea = { ...itm };\n selectedArea.zones = {\n items: [\n { id: \"\", name: \"Select zone...\" },\n ...selectedArea.zones.items,\n ],\n };\n selectAreas.push(selectedArea);\n });\n setAreas(selectAreas);\n } catch (err) {\n logError(\"InventoryStorageReport:getAccounts\", err, notify);\n setAreas([]);\n }\n};\n\nconst handleInvoiceCreate = async (\n history,\n pathname,\n finalData,\n service,\n unitTotals,\n startDate,\n endDate,\n frequency,\n accrual\n) => {\n const reportFile = await fileExporter(finalData, accrual);\n console.log(\"Received File object:\", reportFile);\n debugger;\n\n deepRedirect(history, \"/invoices/create\", pathname, null, {\n accountId: service.accountId,\n serviceId: service.id,\n unitTotals: unitTotals,\n frequency: frequency,\n accrual: accrual,\n serviceDate: new Date(endDate).toLocaleDateString(),\n dateRange: getReportDates(startDate, endDate),\n reportFile: reportFile,\n });\n};\n\nconst ListActions = (props) => {\n const history = useHistory();\n const notify = useNotify();\n const validateRequired = required();\n const {\n finalData,\n account,\n setAccount,\n areas,\n areaId,\n setAreaId,\n zoneId,\n setZoneId,\n service,\n setService,\n serviceRates,\n setServiceRates,\n frequency,\n setFrequency,\n accrual,\n setAccrual,\n startDate,\n endDate,\n getReportData,\n clearReportData,\n unitTotals,\n } = props;\n const [zones, setZones] = useState([{ id: \"\", name: \"\" }]);\n const [services, setServices] = useState([{ id: \"\", name: \"\" }]);\n\n const handleAccountChange = async (value) => {\n try {\n debugger;\n const accountId = value?.id;\n if (accountId) {\n const response = await API.graphql(\n graphqlOperation(getAccount, { id: accountId })\n );\n setAccount(response.data.getAccount);\n\n let reportFrequency =\n localStorage.getItem(`storageReportFrequency_${accountId}`) || \"\";\n setFrequency(reportFrequency);\n\n let accrual = localStorage.getItem(`storageAccrual_${accountId}`) || \"\";\n setAccrual(accrual);\n\n const services = response.data.getAccount.services?.items;\n const activeServices = services?.filter((itm) => itm.active === \"true\");\n setServices(activeServices);\n\n const serviceId =\n localStorage.getItem(`storageService_${accountId}`) || \"\";\n if (serviceId) {\n const service = services?.find((itm) => itm.id === serviceId);\n setService(service);\n const rates = getServiceRates(service);\n setServiceRates(rates);\n } else {\n setService(null);\n setServiceRates([]);\n }\n } else {\n setAccount(null);\n setFrequency(\"\");\n setAccrual(\"\");\n setService(null);\n setServiceRates([]);\n clearReportData();\n }\n } catch (err) {\n logError(\n \"InventoryStorageReport:ListActions:handleAccountChange\",\n err,\n notify\n );\n } finally {\n clearReportData();\n }\n };\n\n const handleAreaChange = (value) => {\n setAreaId(value);\n setZoneId(\"\");\n clearReportData();\n\n const areaZones = areas.find((itm) => itm.id === value).zones;\n if (areaZones?.items.length > 0) setZones(areaZones.items);\n else setZones([{ id: \"\", name: \"\" }]);\n };\n\n const handleFrequencyChange = (value) => {\n try {\n localStorage.setItem(`storageReportFrequency_${account.id}`, value);\n setFrequency(value);\n } catch (err) {\n logError(\"InventoryStorageReport:ListActions:handleFrequencyChange\", err);\n } finally {\n clearReportData();\n }\n };\n\n const handleAccrualChange = (value) => {\n try {\n localStorage.setItem(`storageAccrual_${account.id}`, value);\n setAccrual(value);\n } catch (err) {\n logError(\"InventoryStorageReport:ListActions:handleAccrualChange\", err);\n } finally {\n clearReportData();\n }\n };\n\n const handleServiceChange = (value) => {\n try {\n debugger;\n localStorage.setItem(`storageService_${account.id}`, value);\n const service = services.find((itm) => itm.id === value);\n setService(service);\n setServiceRates(getServiceRates(service));\n } catch (err) {\n logError(\"InventoryStorageReport:ListActions:handleServiceChange\", err);\n } finally {\n clearReportData();\n }\n };\n\n const isRunDisabled = () => {\n return !account?.id || !frequency || !service || !accrual;\n };\n\n return (\n \n \n \n handleAccountChange(value)}\n validate={validateRequired}\n allowEmpty={false}\n fullWidth\n />\n \n \n handleAreaChange(evt?.target?.value)}\n >\n {areas.map((itm) => (\n \n {itm.name}\n \n ))}\n \n \n \n setZoneId(evt?.target?.value)}\n >\n {zones?.map((itm) => (\n \n {itm.name}\n \n ))}\n \n \n \n handleServiceChange(evt?.target?.value)}\n helperText={getServiceHelperText(serviceRates)}\n >\n {services?.map((itm) => (\n \n {itm.name}\n \n ))}\n \n \n \n handleFrequencyChange(evt?.target?.value)}\n helperText={getReportDates(startDate, endDate)}\n >\n {reportFrequencyOptions.map((itm) => (\n \n {itm.name}\n \n ))}\n \n \n \n handleAccrualChange(evt?.target?.value)}\n >\n {accrualOptions.map((itm) => (\n \n {itm.name}\n \n ))}\n \n \n \n \n \n \n \n \n\n {/* Toolbar Section */}\n \n \n handleInvoiceCreate(\n history,\n props.location.pathname,\n finalData,\n service,\n unitTotals,\n startDate,\n endDate,\n frequency,\n accrual\n )\n }\n >\n \n \n \n \n downloadExporter(finalData, accrual)}\n >\n \n \n \n \n \n );\n};\n\nconst getTotalFee = (inv, billableItem) => {\n if (\n inv.totalFees === \"MISSING RATE\" ||\n billableItem.fees === \"MISSING RATE\"\n ) {\n return \"MISSING RATE\";\n } else {\n return inv.totalFees + billableItem.fees;\n }\n};\n\nconst getSumTotal = (runningUnitTotals, billableUom, totalFees) => {\n if (totalFees === \"MISSING RATE\") return \"MISSING RATE\";\n return (runningUnitTotals[billableUom] || 0) + totalFees;\n};\n\nconst calculatePeriodDates = (frequency) => {\n let startDate;\n let endDate;\n const today = new Date();\n const currentDayOfMonth = getDate(today); // Get the current day of the month\n\n if (frequency === \"MONTHLY\") {\n startDate = format(startOfMonth(addMonths(today, -1)), \"yyyy-MM-dd\");\n endDate = format(startOfMonth(today), \"yyyy-MM-dd\");\n } else if (frequency === \"BIWEEKLY\") {\n if (currentDayOfMonth <= 15) {\n // If it's the first half of the month, start from the middle of the last month\n const startOfLastMonth = startOfMonth(addMonths(today, -1)); // Start of last month\n const middleOfLastMonth = addDays(startOfLastMonth, 14); // 15th of last month\n\n startDate = format(middleOfLastMonth, \"yyyy-MM-dd\");\n endDate = format(startOfMonth(today), \"yyyy-MM-dd\"); // Beginning of the current month\n } else {\n // If it's the second half of the month, start from the 1st of the current month to the 15th\n const startOfThisMonth = startOfMonth(today); // 1st of the current month\n const middleOfThisMonth = addDays(startOfThisMonth, 14); // 15th of the current month\n\n startDate = format(startOfThisMonth, \"yyyy-MM-dd\");\n endDate = format(middleOfThisMonth, \"yyyy-MM-dd\");\n }\n } else if (frequency === \"WEEKLY\") {\n startDate = format(\n startOfWeek(addWeeks(today, -1), { weekStartsOn: 0 }),\n \"yyyy-MM-dd\"\n );\n endDate = format(startOfWeek(today, { weekStartsOn: 0 }), \"yyyy-MM-dd\");\n }\n return { startDate, endDate };\n};\n\nconst getReportDates = (startDate, endDate) => {\n // console.log(\"dates\", startDate, endDate)\n\n if (startDate && endDate) {\n const dateRange = `${new Date(\n startDate + \"T00:00:00\"\n ).toLocaleDateString()} - ${new Date(endDate).toLocaleDateString()}`;\n // console.log(\"dateRange\", dateRange)\n return dateRange;\n }\n return \"\";\n};\n\nconst getStorageFees = (inventory, billableItem, rates, accrual) => {\n // when billing for railcar/truck, ignore unit quantity, bill 1 shipment\n const quantity =\n inventory.inventoryUnits === Unit.CAR ||\n inventory.inventoryUnits === Unit.TL\n ? 1\n : billableItem.quantity;\n const days = billableItem.billableDays;\n\n // Find the rate for the inventory's units in the rates array\n let rateInfo = rates.find((rate) => rate.unit === inventory.inventoryUnits);\n // if billing per month, ignore days\n const billablePeriods = accrual === \"FLAT\" ? 1 : days;\n\n if (rateInfo) {\n // If rate for the inventory units is found, calculate the fees\n return {\n amount: trimDecimal(rateInfo.rate * quantity * billablePeriods),\n uom: inventory.inventoryUnits,\n };\n } else {\n // If no direct rate is found, iterate over all rates to attempt conversion\n for (let rate of rates) {\n const conversionResult = convertUnits(\n 1,\n inventory.inventoryUnits,\n rate.unit,\n inventory.product\n );\n if (!conversionResult.error) {\n const convertedRate = conversionResult.value * rate.rate; // Use the converted unit rate\n return {\n amount: trimDecimal(convertedRate * quantity * billablePeriods),\n uom: rate.unit,\n };\n }\n }\n // If no conversion is successful, return \"MISSING RATE\"\n return {\n amount: \"MISSING RATE\",\n uom: \"\",\n };\n }\n};\n\nconst getBillableDays = (\n account,\n startDate,\n endDate,\n receivedDate,\n shippedDate,\n accrual\n) => {\n let billableDays = 0;\n const freeDays = account.inventoryStorageThreshold;\n\n if (accrual === \"FLAT\") {\n // fees accrued once per billing period\n billableDays = differenceInDays(new Date(endDate), new Date(startDate));\n // console.log(\"startDate, endDate\", startDate, endDate)\n // console.log(\"billableDays\", billableDays)\n } else {\n // prorated fees accrued DAILY\n const firtBillingDay = format(\n addDays(startOfDay(new Date(receivedDate)), freeDays),\n \"yyyy-MM-dd\"\n );\n const billingStartDate = isAfter(\n new Date(firtBillingDay),\n new Date(startDate)\n )\n ? firtBillingDay\n : startDate;\n\n let billingEndDate = endDate;\n if (shippedDate) {\n billingEndDate =\n shippedDate > endDate\n ? endDate\n : format(addDays(new Date(shippedDate), 1), \"yyyy-MM-dd\");\n }\n billableDays = differenceInDays(\n new Date(billingEndDate),\n new Date(billingStartDate)\n );\n\n // console.log(\"startDate, endDate\", startDate, endDate)\n // console.log(\"receivedDate\", receivedDate)\n // console.log(\"firtBillingDay\", firtBillingDay)\n // console.log(\"billingStartDate, billingEndDate\", billingStartDate, billingEndDate)\n // shippedDate && console.log(\"shippedDate, billingEndDate\", shippedDate, billingEndDate)\n // console.log(\"billableDays\", billableDays)\n }\n return billableDays;\n};\n\nconst processReportData = async (\n account,\n inventories,\n startDate,\n endDate,\n accrual,\n serviceRates,\n setFinalData,\n setUnitTotals,\n setHasWeight\n) => {\n const runningTotalFees = {};\n let hasWeight = false;\n\n inventories.forEach((inv) => {\n inv.billableItems = [];\n inv.totalFees = 0;\n if (inv.weightUnits && inv.weightUnits !== inv.inventoryUnits) {\n hasWeight = true;\n }\n\n if (inv.poNumber.includes(\"MRKU9308580\")) debugger;\n\n if (inv.status === InventoryStatus.STORED) {\n inv.totalDaysStored = differenceInDays(\n new Date(endDate),\n new Date(inv.deliveryDateTime)\n );\n inv.billableDaysTotal =\n inv.totalDaysStored - account.inventoryStorageThreshold;\n\n if (inv.shipmentLineItems?.items.length === 0) {\n // All of quantityOnHand is billable since all of it is stored past the threshold\n // nothing was shipped out yet.\n const billableItem = {\n quantity: inv.quantityOnHand,\n inventoryUnits: inv.inventoryUnits,\n weight: trimDecimal(inv.weight * inv.quantityOnHand),\n weightUnits: inv.weightUnits,\n shippedDate: \"\",\n billableDays: getBillableDays(\n account,\n startDate,\n endDate,\n inv.deliveryDateTime,\n \"\",\n accrual\n ),\n };\n const fees = getStorageFees(inv, billableItem, serviceRates, accrual);\n billableItem.fees = fees.amount;\n inv.billableItems.push(billableItem);\n inv.billableUom = fees.uom;\n inv.totalFees = getTotalFee(inv, billableItem);\n } else {\n // some inventory shipped and some remaing on hand.\n inv.shipmentLineItems.items.forEach((item) => {\n // Calculate based on shipmentLineItems during the current billing cycle\n // assume item.updatedAt == item.outboundShipment.departureDateTime\n if (\n item.status === ShipmentLineItemStatus.SHIPPED &&\n item.updatedAt > startDate &&\n item.updatedAt <= endDate\n ) {\n // if shipped during billing month\n // Calculate how long the inventory was stored before being shipped\n const daysStored = differenceInDays(\n new Date(item.updatedAt),\n new Date(inv.deliveryDateTime)\n );\n\n if (daysStored > account.inventoryStorageThreshold) {\n // If the inventory was stored past the threshold, it's billable\n const billableItem = {\n quantity: item.totalQuantityToPick,\n inventoryUnits: inv.inventoryUnits,\n weight: trimDecimal(inv.weight * item.totalQuantityToPick),\n weightUnits: inv.weightUnits,\n dateShipped: item.updatedAt, // item.updatedAt == item.outboundShipment.departureDateTime\n billableDays: getBillableDays(\n account,\n startDate,\n endDate,\n inv.deliveryDateTime,\n item.updatedAt,\n accrual\n ),\n };\n const fees = getStorageFees(\n inv,\n billableItem,\n serviceRates,\n accrual\n );\n billableItem.fees = fees.amount;\n inv.billableItems.push(billableItem);\n inv.billableUom = fees.uom;\n inv.totalFees = getTotalFee(inv, billableItem);\n }\n } else if (item.updatedAt > startDate && item.updatedAt >= endDate) {\n // item stored during billing cycle and shipped out after end of reporting period\n // bill only through the end of the billing cycle\n const daysStored = differenceInDays(\n new Date(endDate),\n new Date(inv.deliveryDateTime)\n );\n\n if (daysStored > account.inventoryStorageThreshold) {\n // If the inventory was stored past the threshold, it's billable\n\n const billableItem = {\n quantity: item.totalQuantityToPick,\n inventoryUnits: inv.inventoryUnits,\n weight: trimDecimal(inv.weight * item.totalQuantityToPick),\n weightUnits: inv.weightUnits,\n dateShipped: \"\", // item.updatedAt == item.outboundShipment.departureDateTime\n billableDays: getBillableDays(\n account,\n startDate,\n endDate,\n inv.deliveryDateTime,\n item.updatedAt,\n accrual\n ),\n };\n const fees = getStorageFees(\n inv,\n billableItem,\n serviceRates,\n accrual\n );\n billableItem.fees = fees.amount;\n inv.billableItems.push(billableItem);\n inv.billableUom = fees.uom;\n inv.totalFees = getTotalFee(inv, billableItem);\n }\n }\n });\n\n // Any remaining quantity on hand is billable as it's already confirmed to have exceeded the threshold\n const billableItem = {\n quantity: inv.quantityOnHand,\n inventoryUnits: inv.inventoryUnits,\n weight: trimDecimal(inv.weight * inv.quantityOnHand),\n weightUnits: inv.weightUnits,\n shippedDate: \"\",\n billableDays: getBillableDays(\n account,\n startDate,\n endDate,\n inv.deliveryDateTime,\n \"\",\n accrual\n ),\n };\n const fees = getStorageFees(inv, billableItem, serviceRates, accrual);\n billableItem.fees = fees.amount;\n inv.billableItems.push(billableItem);\n inv.billableUom = fees.uom;\n inv.totalFees = getTotalFee(inv, billableItem);\n }\n } else if (inv.status === InventoryStatus.SHIPPED) {\n // Fully shipped inventory\n if (inv.lastShipDateTime > endDate) {\n // last item shipped after end of the billing period\n inv.totalDaysStored = differenceInDays(\n new Date(endDate),\n new Date(inv.deliveryDateTime)\n );\n } else {\n // last item shipped during the billing period\n inv.totalDaysStored = differenceInDays(\n new Date(inv.lastShipDateTime),\n new Date(inv.deliveryDateTime)\n );\n }\n inv.billableDaysTotal =\n inv.totalDaysStored - account.inventoryStorageThreshold;\n\n inv.shipmentLineItems.items.forEach((item) => {\n // Calculate based on shipmentLineItems during the current billing cycle\n // assume item.updatedAt == item.outboundShipment.departureDateTime\n // assume item.status === ShipmentLineItemStatus.SHIPPED since inv is SHIPPED\n if (item.updatedAt > startDate && item.updatedAt < endDate) {\n // item stored during billing cycle and not shipped out before end of reporting period\n const daysStored = differenceInDays(\n new Date(item.updatedAt),\n new Date(inv.deliveryDateTime)\n );\n\n if (daysStored > account.inventoryStorageThreshold) {\n // If the inventory was stored past the threshold, it's billable\n const billableItem = {\n quantity: item.totalQuantityToPick,\n inventoryUnits: inv.inventoryUnits,\n weight: trimDecimal(inv.weight * item.totalQuantityToPick),\n weightUnits: inv.weightUnits,\n dateShipped: item.updatedAt, // item.updatedAt == item.outboundShipment.departureDateTime\n billableDays: getBillableDays(\n account,\n startDate,\n endDate,\n inv.deliveryDateTime,\n item.updatedAt,\n accrual\n ),\n };\n const fees = getStorageFees(\n inv,\n billableItem,\n serviceRates,\n accrual\n );\n billableItem.fees = fees.amount;\n inv.billableItems.push(billableItem);\n inv.billableUom = fees.uom;\n inv.totalFees = getTotalFee(inv, billableItem);\n }\n } else if (item.updatedAt > startDate && item.updatedAt >= endDate) {\n // item stored during billing cycle and shipped out after end of reporting period\n // bill only through the end of the billing cycle\n const daysStored = differenceInDays(\n new Date(endDate),\n new Date(inv.deliveryDateTime)\n );\n\n if (daysStored > account.inventoryStorageThreshold) {\n // If the inventory was stored past the threshold, it's billable\n\n const billableItem = {\n quantity: item.totalQuantityToPick,\n inventoryUnits: inv.inventoryUnits,\n weight: trimDecimal(inv.weight * item.totalQuantityToPick),\n weightUnits: inv.weightUnits,\n dateShipped: \"\", // item.updatedAt == item.outboundShipment.departureDateTime\n billableDays: getBillableDays(\n account,\n startDate,\n endDate,\n inv.deliveryDateTime,\n item.updatedAt,\n accrual\n ),\n };\n const fees = getStorageFees(\n inv,\n billableItem,\n serviceRates,\n accrual\n );\n billableItem.fees = fees.amount;\n inv.billableItems.push(billableItem);\n inv.billableUom = fees.uom;\n inv.totalFees = getTotalFee(inv, billableItem);\n }\n }\n });\n }\n\n // Calculate totals\n runningTotalFees[inv.billableUom] = getSumTotal(\n runningTotalFees,\n inv.billableUom,\n inv.totalFees\n );\n // if (hasWeight) {\n // runningUnitTotals[inv.weightUnits] = (runningUnitTotals[inv.weightUnits] || 0) + inv.weight;\n // }\n });\n\n // console.log(\"inventories\", inventories)\n setFinalData(inventories);\n setUnitTotals(runningTotalFees);\n setHasWeight(hasWeight);\n};\n\n// /reportInventoryStorage\n// Get all inventories that were in storage during last billing cycle (last month)\nexport const InventoryStorageReport = (props) => {\n const notify = useNotify();\n\n // filter state vars\n const [account, setAccount] = useState(null);\n const [areas, setAreas] = useState([]);\n const [areaId, setAreaId] = useState(\"\");\n const [zoneId, setZoneId] = useState(\"\");\n const [service, setService] = useState(null);\n const [serviceRates, setServiceRates] = useState([]);\n const [frequency, setFrequency] = useState(\"\");\n const [accrual, setAccrual] = useState(\"\");\n\n // report state vars\n const [finalData, setFinalData] = useState([]);\n const [unitTotals, setUnitTotals] = useState({});\n const [loading, setLoading] = useState(false);\n const [hasWeight, setHasWeight] = useState(false);\n\n // Get the first & last day of last month\n const [startDate, setStartDate] = useState(\"\");\n const [endDate, setEndDate] = useState(\"\");\n\n useEffect(() => {\n setupFilters(setAreas, notify);\n }, []);\n\n useEffect(() => {\n if (frequency) {\n const { startDate, endDate } = calculatePeriodDates(frequency);\n // console.log(\"set Dates\", startDate, endDate);\n\n setStartDate(startDate);\n setEndDate(endDate);\n } else {\n // console.log(\"set Dates\", \"\");\n setStartDate(\"\");\n setEndDate(\"\");\n }\n }, [frequency]);\n\n const clearReportData = () => {\n setFinalData([]);\n setUnitTotals({});\n setHasWeight(false);\n };\n\n const getReportData = async () => {\n try {\n setLoading(true);\n debugger;\n setHasWeight(false);\n\n // Calculate the billing start date by subtracting inventoryStorageThreshold days from the end date.\n // inventoryStorageThreshold is meant to represent “free days” before billing starts.\n // Everything received before (endOfMonth - freeDays) is eligible for billing.\n // Everything received after (endOfMonth - freeDays) is still in freeDays.\n const today = new Date();\n const lastMonthEnd = endOfMonth(addMonths(today, -1));\n const billingStartDate = format(\n subDays(lastMonthEnd, account?.inventoryStorageThreshold || 0),\n \"yyyy-MM-dd\"\n );\n\n const inventories = [];\n\n const limit = 250;\n const searchInput = {\n sort: { field: \"deliveryDateTime\", direction: \"asc\" },\n filter: {\n accountId: { eq: account.id },\n or: [\n {\n and: [\n { status: { eq: InventoryStatus.STORED } },\n { deliveryDateTime: { lte: billingStartDate } },\n ],\n },\n {\n and: [\n { status: { eq: InventoryStatus.SHIPPED } },\n { deliveryDateTime: { lte: billingStartDate } },\n {\n turnDays: {\n gt: Number(account?.inventoryStorageThreshold || 0),\n },\n },\n { lastShipDateTime: { gt: startDate } },\n { lastShipDateTime: { lt: endDate } },\n ],\n },\n ],\n },\n limit,\n };\n if (areaId) searchInput.filter.areaId = { eq: areaId };\n if (zoneId) searchInput.filter.zoneId = { eq: zoneId };\n\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { ...searchInput, nextToken };\n const result = await API.graphql(\n graphqlOperation(searchInventoryStorage, input)\n );\n inventories.splice(-1, 0, ...result.data.searchInventorys.items);\n if (result.data.searchInventorys.items.length < limit) break;\n nextToken = result.data.searchInventorys.nextToken;\n }\n\n processReportData(\n account,\n inventories,\n startDate,\n endDate,\n accrual,\n serviceRates,\n setFinalData,\n setUnitTotals,\n setHasWeight\n );\n } catch (err) {\n logError(\"InventoryStorageReport:getReportData\", err, notify);\n clearReportData();\n } finally {\n setLoading(false);\n }\n };\n\n const fixedFilter = \"\"; // {\"lowInventoryAlert\": true};\n const defaultSort = { field: \"deliveryDateTime\", order: \"ASC\" };\n const defaultPerPage = 25;\n\n const listContext = useList({\n ...props,\n data: finalData,\n ids: finalData.map(({ id }) => id),\n loading,\n loaded: !loading,\n filter: fixedFilter,\n sort: defaultSort,\n perPage: defaultPerPage,\n });\n\n return (\n \n \n } />\n <ListActions\n {...props}\n finalData={finalData}\n account={account}\n setAccount={setAccount}\n areas={areas}\n areaId={areaId}\n setAreaId={setAreaId}\n zoneId={zoneId}\n setZoneId={setZoneId}\n service={service}\n setService={setService}\n serviceRates={serviceRates}\n setServiceRates={setServiceRates}\n frequency={frequency}\n setFrequency={setFrequency}\n accrual={accrual}\n setAccrual={setAccrual}\n startDate={startDate}\n endDate={endDate}\n getReportData={getReportData}\n clearReportData={clearReportData}\n unitTotals={unitTotals}\n />\n <Card>\n <ReportGrid\n account={account}\n startDate={startDate}\n endDate={endDate}\n hasWeight={hasWeight}\n />\n <PaginationToolbar unitTotals={unitTotals} />\n </Card>\n </ListContextProvider>\n </SimpleForm>\n );\n};\n\nconst ReportGrid = ({ account, startDate, endDate, hasWeight, ...props }) => {\n const listContext = useListContext(props);\n const label = getReportDates(startDate, endDate);\n\n if (!account?.id || !startDate) return null;\n return (\n <CustomizableDatagrid\n {...listContext}\n label={label}\n rowClick=\"expand\"\n expand={<BillableItemsDataGrid hasWeight={hasWeight} />}\n basePath=\"/inventories\"\n resource=\"inventories\"\n storageProp={`InventoryStorageReport_${account?.id}_large`}\n defaultColumns={[\n \"deliveryDateTime\",\n \"productName\",\n \"poNumber\",\n \"railCarNumber\",\n \"totalFees\",\n ]}\n >\n {[\n <DateField\n source=\"deliveryDateTime\"\n label=\"Reveived\"\n showTime={false}\n />,\n <TextField source=\"productCode\" label=\"Product Code\" />,\n <TextField source=\"productName\" label=\"Product Name\" />,\n <TextField source=\"poNumber\" label=\"PO Number\" />,\n <TextField source=\"railCarNumber\" label=\"Car/Trl No.\" />,\n <NumberField source=\"totalDaysStored\" label=\"Total Stored Days\" />,\n <NumberField source=\"billableDaysTotal\" label=\"Total Billable Days\" />,\n <NumberField\n source=\"totalFees\"\n label=\"Total Fee\"\n options={{\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }}\n />,\n ]}\n </CustomizableDatagrid>\n );\n};\n\nexport const BillableItemsDataGrid = ({ record, hasWeight, ...props }) => {\n return (\n <Paper variant=\"outlined\">\n <ArrayField source=\"billableItems\" record={record} label=\"Billable Items\">\n <Datagrid>\n <NumberField source=\"quantity\" label=\"Quantity\" />\n <FunctionField\n source=\"inventoryUnits\"\n label=\"UOM\"\n render={(record) => getUnitName(record.inventoryUnits)}\n />\n {hasWeight && <NumberField source=\"weight\" label=\"Weight\" />}\n {hasWeight && (\n <FunctionField\n source=\"weightUnits\"\n label=\"Weight UOM\"\n render={(record) => getUnitName(record.weightUnits)}\n />\n )}\n <NumberField source=\"billableDays\" label=\"Billable Days\" />\n <DateField source=\"dateShipped\" label=\"Shipped\" showTime={false} />\n <NumberField\n source=\"fees\"\n label=\"Fee\"\n options={{\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }}\n />\n </Datagrid>\n </ArrayField>\n </Paper>\n );\n};\n\nconst PaginationToolbar = ({ unitTotals, ...props }) => {\n const listContext = useListContext(props);\n const formatter = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n });\n const totalElements = [];\n const totalsArray = Object.entries(unitTotals);\n let sumTotal = 0;\n\n for (const [key, value] of totalsArray) {\n sumTotal += Number(value) || 0;\n if (totalsArray.length > 1) {\n totalElements.push(\n <Typography key={key}>\n {key}: {typeof value === \"string\" ? value : formatter.format(value)}\n </Typography>\n );\n }\n }\n totalElements.push(\n <Typography key=\"Total\">Total: {formatter.format(sumTotal)}</Typography>\n );\n\n return (\n <Grid container direction=\"row\" spacing={1} alignItems=\"center\">\n <Grid item xs={4}>\n <Box pl={2}>{totalElements.length > 0 ? totalElements : <></>}</Box>\n </Grid>\n <Grid item xs={8}>\n <Pagination {...props} {...listContext} />\n </Grid>\n </Grid>\n );\n};\n","import React, { useState } from \"react\";\n\nimport jsonExport from \"jsonexport/dist\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { searchInventorysRecall } from \"../../graphql/report-queries\";\nimport { Card, Grid, TextField as FilterField } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n Button,\n DateField,\n downloadCSV,\n ListContextProvider,\n NumberField,\n required,\n SimpleForm,\n TextField,\n Title,\n TopToolbar,\n useList,\n useListContext,\n useNotify,\n} from \"react-admin\";\nimport { AccountDropDown } from \"../../components/common/AccountDropDown\";\nimport { ExportIcon } from \"../../components/common\";\nimport { BackButton } from \"../../components/common/BackButton\";\nimport { ForceTitle } from \"../../components/common/ForceTitle\";\nimport { Pagination } from \"../../components/Pagination\";\nimport { logError } from \"../../utils/appUtils\";\nimport CustomizableDatagrid from \"../../components/common/ra-customizable-datagrid\";\nimport { CustomField } from \"../../components/common/CustomFields\";\nimport { exportCustomField } from \"../../utils/utils\";\nimport { handleAccountChange } from \"./ReportsUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n submitButton: {\n position: \"absolute\",\n bottom: theme.spacing(2),\n },\n totals: {\n marginLeft: theme.spacing(2),\n },\n}));\n\nconst validateRequired = required();\n\nconst exporter = (inventories, searchTerm) => {\n const customHeaderMap = new Map();\n debugger;\n\n const inventoriesForExport = inventories.map((inventory) => {\n const inventoryForExport = {\n inventoryId: inventory.id,\n productCode: inventory.productCode,\n productName: inventory.productName,\n locationFullName: inventory.locationFullName,\n lotNumber: inventory.lotNumber,\n deliveryDateTime: inventory.deliveryDateTime,\n inventoryUnits: inventory.inventoryUnits,\n status: inventory.status,\n quantityReceived: `${inventory.quantityDelivered}`,\n quantityOnHand: `${inventory.quantityOnHand}`,\n };\n\n if (inventory.customFields?.length > 0) {\n inventory.customFields.forEach((field) => {\n exportCustomField(field, inventoryForExport, customHeaderMap);\n });\n }\n\n inventoryForExport.inbound = {\n shipmentId: inventory.inboundShipmentId,\n poNumber: inventory.poNumber,\n carTrlNumber: inventory.railCarNumber,\n };\n\n if (inventory.inboundShipment.customFields?.length > 0) {\n inventory.inboundShipment.customFields.forEach((field) => {\n exportCustomField(field, inventoryForExport.inbound, customHeaderMap);\n });\n }\n\n if (inventory.shipmentLineItems?.items.length > 0) {\n inventoryForExport.outbound = inventory.shipmentLineItems?.items.map(\n (itm) => {\n debugger;\n const outbound = {\n shipmentId: itm.outboundShipmentId,\n quantityShipped: itm.totalQuantityToPick,\n poNumber: itm.outboundShipment.poNumber,\n pickupNumber: itm.outboundShipment.pickupNumber,\n carTrlNumber: itm.outboundShipment.railCarNumber,\n carrier: itm.outboundShipment.carrier,\n status: itm.outboundShipment.status,\n shippedDateTime: itm.outboundShipment.departureDateTime,\n \"shipTo.name\": itm.outboundShipment.shipTo?.name,\n \"shipTo.address\": itm.outboundShipment.shipTo?.address,\n \"shipTo.city\": itm.outboundShipment.shipTo?.city,\n \"shipTo.state\": itm.outboundShipment.shipTo?.state,\n \"shipTo.zipCode\": itm.outboundShipment.shipTo?.zipCode,\n \"shipTo.country\": itm.outboundShipment.shipTo?.country,\n };\n\n if (itm.outboundShipment.customFields?.length > 0) {\n itm.outboundShipment.customFields.forEach((field) => {\n exportCustomField(field, outbound, customHeaderMap);\n });\n }\n\n return outbound;\n }\n );\n }\n\n return inventoryForExport;\n });\n\n jsonExport(\n inventoriesForExport,\n {\n rename: [\n // \"Customer\", \"Product Code\", \"Product\", \"Inventory Qty\", \"UOM\"\n ],\n },\n (err, csv) => {\n downloadCSV(csv, `report_inventory_recall_${searchTerm}`); // download as 'report_inventory_recall_searchTerm.csv` file\n }\n );\n};\n\nconst ListActions = (props) => {\n const classes = useStyles();\n\n const {\n finalData,\n setAccountId,\n account,\n setAccount,\n searchTerm,\n setSearchTerm,\n getReportData,\n } = props;\n\n return (\n <TopToolbar>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <AccountDropDown\n source=\"accountId\"\n label=\"Account\"\n onAccountChange={(value) =>\n handleAccountChange(value, setAccount, setAccountId)\n }\n validate={validateRequired}\n allowEmpty={false}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <FilterField\n id=\"search\"\n label=\"Inventory Search\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n alwaysOn\n value={searchTerm}\n onChange={(evt) => setSearchTerm(evt?.target?.value)}\n />\n </Grid>\n\n <Grid item xs={2}>\n <Button\n label=\"Run\"\n variant=\"contained\"\n color=\"default\"\n alwaysOn\n className={classes.submitButton}\n onClick={getReportData}\n disabled={!account?.id || !searchTerm}\n />\n </Grid>\n </Grid>\n <Button\n label=\"Export\"\n disabled={finalData?.length === 0}\n onClick={() => exporter(finalData, searchTerm)}\n >\n <ExportIcon />\n </Button>\n <BackButton basePath=\"/reports\" />\n </TopToolbar>\n );\n};\n\n// /reportInventoryRecall\nexport const InventoryRecallReport = (props) => {\n const notify = useNotify();\n\n const [accountId, setAccountId] = useState(\"\");\n const [account, setAccount] = useState(\"\");\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const [finalData, setFinalData] = useState([]);\n const [loading, setLoading] = useState(false);\n\n const getReportData = async () => {\n try {\n debugger;\n setLoading(true);\n const limit = 1000;\n const searchInput = {\n sort: { field: \"deliveryDateTime\", direction: \"asc\" },\n filter: {\n reloadYardId: { eq: window.appUser.reloadYardId },\n },\n limit,\n };\n if (accountId) {\n searchInput.filter.accountId = { eq: `${accountId}` };\n }\n if (searchTerm) {\n searchInput.filter.or = [\n { productCode: { matchPhrasePrefix: `${searchTerm}` } },\n { productCode: { wildcard: `*${searchTerm}*` } },\n { productName: { matchPhrasePrefix: `${searchTerm}` } },\n { productName: { wildcard: `*${searchTerm}*` } },\n { lotNumber: { matchPhrasePrefix: `${searchTerm}` } },\n { lotNumber: { wildcard: `*${searchTerm}*` } },\n { poNumber: { matchPhrasePrefix: `${searchTerm}` } },\n { poNumber: { wildcard: `*${searchTerm}*` } },\n { railCarNumber: { matchPhrasePrefix: `${searchTerm}` } },\n { railCarNumber: { wildcard: `*${searchTerm}*` } },\n { customFields: { matchPhrasePrefix: `${searchTerm}` } },\n { customFields: { wildcard: `*${searchTerm}*` } },\n ];\n }\n\n let inventorys = [];\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true ? searchInput : { ...searchInput, nextToken };\n const result = await API.graphql(\n graphqlOperation(searchInventorysRecall, input)\n );\n inventorys.splice(-1, 0, ...result.data.searchInventorys.items);\n if (result.data.searchInventorys.items.length < limit) break;\n nextToken = result.data.searchInventorys.nextToken;\n }\n\n setFinalData(inventorys);\n } catch (err) {\n logError(\"InventoryRecallReport:getReportData\", err, notify);\n setFinalData([]);\n } finally {\n setLoading(false);\n }\n };\n\n const fixedFilter = \"\"; // {\"lowInventoryAlert\": true};\n const defaultSort = { field: \"deliveryDateTime\", order: \"ASC\" };\n const defaultPerPage = 25;\n\n const listContext = useList({\n ...props,\n data: finalData,\n ids: finalData.map(({ id }) => id),\n loading,\n loaded: !loading,\n filter: fixedFilter,\n sort: defaultSort,\n perPage: defaultPerPage,\n });\n\n return (\n <SimpleForm toolbar={false}>\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Inventory Recall Report\" />} />\n <ListActions\n {...props}\n finalData={finalData}\n setAccountId={setAccountId}\n account={account}\n setAccount={setAccount}\n searchTerm={searchTerm}\n setSearchTerm={setSearchTerm}\n getReportData={getReportData}\n />\n <Card>\n <ReportGrid account={account} />\n <Pagination {...props} {...listContext} />\n </Card>\n </ListContextProvider>\n </SimpleForm>\n );\n};\n\nconst ReportGrid = ({ account, ...props }) => {\n const listContext = useListContext(props);\n const accountFields =\n account?.inventoryCustomFields?.length > 0\n ? account.inventoryCustomFields\n : [];\n const customGridFields = accountFields\n ? accountFields.map((field, index) => {\n return (\n <CustomField\n source={`customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={true}\n />\n );\n })\n : [];\n\n if (!account?.id) return null;\n return (\n <CustomizableDatagrid\n {...listContext}\n rowClick={false}\n hasBulkActions={false}\n storageProp={`InventoryStorageReport_${account?.id}_large`}\n defaultColumns={[\n \"productCode\",\n \"productName\",\n \"poNumber\",\n \"deliveryDateTime\",\n \"railCarNumber\",\n \"quantityOnHand\",\n ]}\n >\n {[\n <TextField source=\"productCode\" label=\"Product Code\" />,\n <TextField source=\"productName\" label=\"Product Name\" />,\n <DateField\n source=\"deliveryDateTime\"\n label=\"Received\"\n showTime={false}\n />,\n <TextField source=\"poNumber\" label=\"PO Number\" />,\n <TextField source=\"railCarNumber\" label=\"Car/Trl No.\" />,\n <NumberField source=\"quantityOnHand\" label=\"Qty. OnHand\" />,\n <TextField source=\"inventoryUnits\" label=\"UOM\" />,\n ...customGridFields,\n ]}\n </CustomizableDatagrid>\n );\n};\n","import React, { useState } from \"react\";\nimport jsonExport from \"jsonexport/dist\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { Card, Grid, Box, Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n Button,\n DateField,\n Datagrid,\n downloadCSV,\n ListContextProvider,\n NumberField,\n TextField,\n Title,\n TopToolbar,\n useList,\n useListContext,\n useNotify,\n SimpleForm,\n required,\n} from \"react-admin\";\nimport { AccountDropDown } from \"../../components/common/AccountDropDown\";\nimport { ExportIcon } from \"../../components/common\";\nimport { BackButton } from \"../../components/common/BackButton\";\nimport { ForceTitle } from \"../../components/common/ForceTitle\";\nimport { Pagination } from \"../../components/Pagination\";\nimport { logError } from \"../../utils/appUtils\";\nimport { format } from \"date-fns\";\nimport {\n handleAccountChange,\n MonthRangeSlider,\n YearSelect,\n} from \"./ReportsUtils\";\nimport { searchInvoicesForReport } from \"../../graphql/report-queries\";\nimport { createDateRangeParams } from \"./ReportsUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n submitButton: {\n position: \"absolute\",\n bottom: theme.spacing(2),\n },\n totals: {\n marginLeft: theme.spacing(2),\n },\n}));\n\nconst exporter = (finalData) => {\n debugger;\n const reportForExport = finalData.map((invoice) => {\n const shipmentForExport = {\n serviceDate: new Date(invoice.serviceDate).toLocaleDateString(),\n total: invoice.total,\n };\n return shipmentForExport;\n });\n\n jsonExport(reportForExport, { rename: [] }, (err, csv) => {\n downloadCSV(csv, `daily_revenues_${new Date().toLocaleDateString()}`);\n });\n};\n\nconst ListActions = (props) => {\n const classes = useStyles();\n const validateRequired = required();\n const {\n finalData,\n setAccountId,\n setAccount,\n year,\n setYear,\n monthRnage,\n setMontRange,\n getReportData,\n } = props;\n\n return (\n <TopToolbar>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item container xs={10} spacing={1}>\n <Grid item xs={12} md={4}>\n <AccountDropDown\n source=\"accountId\"\n label=\"Account\"\n onAccountChange={(value) =>\n handleAccountChange(value, setAccount, setAccountId)\n }\n validate={validateRequired}\n allowEmpty={false}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <YearSelect year={year} setYear={setYear} />\n </Grid>\n <Grid item xs={12} md={5}>\n <MonthRangeSlider\n monthRnage={monthRnage}\n setMontRange={setMontRange}\n />\n </Grid>\n </Grid>\n <Grid item xs={2}>\n <Box ml={2}>\n <Button\n label=\"Run\"\n variant=\"contained\"\n color=\"default\"\n alwaysOn\n className={classes.submitButton}\n onClick={getReportData}\n disabled={!year}\n />\n </Box>\n </Grid>\n </Grid>\n <Button\n label=\"Export\"\n disabled={finalData?.length === 0}\n onClick={() => exporter(finalData)}\n >\n <ExportIcon />\n </Button>\n <BackButton basePath=\"/reports\" />\n </TopToolbar>\n );\n};\n\nexport const DailyRevenueReport = (props) => {\n const [accountId, setAccountId] = useState(\"\");\n const [account, setAccount] = useState(\"\");\n const [year, setYear] = useState();\n const [monthRnage, setMontRange] = useState([1, 1]);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [invoiceTotal, setInvoicetotal] = useState(0);\n const [finalData, setFinalData] = useState([]);\n const [loading, setLoading] = useState(false);\n const notify = useNotify();\n\n const getReportData = async () => {\n try {\n setLoading(true);\n debugger;\n const invoices = [];\n let invoiceRunningTotal = 0;\n const { startDate, endDate } = createDateRangeParams(year, monthRnage);\n const limit = 1000;\n const searchInvoicesInput = {\n filter: {\n // or: [\n // {inboundShipmentId: {exists: true}},\n // {outboundShipmentId: {exists: true}}\n // ],\n and: [\n { serviceDate: { gte: `${startDate}` } },\n { serviceDate: { lt: `${endDate}` } },\n ],\n },\n sort: { field: \"serviceDate\", direction: \"asc\" },\n limit,\n };\n if (accountId)\n searchInvoicesInput.filter.accountId = { eq: `${accountId}` };\n let nextToken = true;\n while (nextToken) {\n const input =\n nextToken === true\n ? searchInvoicesInput\n : { ...searchInvoicesInput, nextToken };\n const result = await API.graphql(\n graphqlOperation(searchInvoicesForReport, input)\n );\n invoices.splice(-1, 0, ...result.data.searchInvoices.items);\n if (result.data.searchInvoices.items.length < limit) break;\n nextToken = result.data.searchInvoices.nextToken;\n }\n\n const aggregatedData = {};\n invoices.forEach((invoice) => {\n invoiceRunningTotal += invoice.total;\n const serviceDate = format(new Date(invoice.serviceDate), \"yyyy-MM-dd\");\n if (!aggregatedData[serviceDate])\n aggregatedData[serviceDate] = invoice.total;\n else aggregatedData[serviceDate] += invoice.total;\n });\n\n const reportData = [];\n Object.keys(aggregatedData).forEach((key, idx) => {\n const record = {\n id: idx,\n serviceDate: key,\n total: aggregatedData[key],\n };\n if (accountId) record.accountName = invoices[0].accountName;\n reportData.push(record);\n });\n setInvoicetotal(invoiceRunningTotal);\n setFinalData(reportData);\n } catch (err) {\n logError(\"DailyRevenueReport:getReportData\", err, notify);\n setFinalData([]);\n } finally {\n setLoading(false);\n }\n };\n\n const fixedFilter = \"\";\n const defaultSort = { field: \"serviceDate\", order: \"ASC\" };\n const defaultPerPage = 25;\n\n const listContext = useList({\n ...props,\n data: finalData,\n ids: finalData.map(({ id }) => id),\n loading,\n loaded: !loading,\n filter: fixedFilter,\n sort: defaultSort,\n perPage: defaultPerPage,\n });\n\n return (\n <SimpleForm toolbar={false}>\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Daily Revenue Report\" />} />\n <ListActions\n {...props}\n finalData={finalData}\n setAccountId={setAccountId}\n setAccount={setAccount}\n year={year}\n setYear={setYear}\n monthRnage={monthRnage}\n setMontRange={setMontRange}\n searchTerm={searchTerm}\n setSearchTerm={setSearchTerm}\n getReportData={getReportData}\n />\n <Card>\n <ReportGrid account={account} />\n <PaginationToolbar invoiceTotal={invoiceTotal} />\n </Card>\n </ListContextProvider>\n </SimpleForm>\n );\n};\n\nconst ReportGrid = ({ account, ...props }) => {\n const listContext = useListContext(props);\n\n const getColumns = () => {\n const columns = [<DateField source=\"serviceDate\" label=\"Service Date\" />];\n if (account)\n columns.push(<TextField source=\"accountName\" label=\"Account Name\" />);\n columns.push(\n <NumberField\n source=\"total\"\n label=\"Invoice Total\"\n sortable={true}\n options={{\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }}\n />\n );\n return columns;\n };\n\n return (\n <Datagrid {...listContext} rowClick={false} hasBulkActions={false}>\n {getColumns()}\n </Datagrid>\n );\n};\n\nconst PaginationToolbar = ({ invoiceTotal, ...props }) => {\n const classes = useStyles();\n const listContext = useListContext(props);\n var formatter = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n });\n\n return (\n <Grid container direction=\"row\" spacing={1} alignItems=\"center\">\n <Grid item xs={4}>\n <Typography className={classes.totals}>\n {Number(invoiceTotal) >= 0 &&\n `Total Invoiced: ${formatter.format(invoiceTotal)}`}\n </Typography>\n </Grid>\n <Grid item xs={8}>\n <Pagination {...props} {...listContext} />\n </Grid>\n </Grid>\n );\n};\n","import * as React from \"react\";\nimport { Route } from \"react-router-dom\";\n\nimport { Tasks } from \"./crewApp/pages/myTasks/MyTasks\";\nimport Audit from \"./crewApp/pages/audit/Audit\";\nimport { ProcessShipments } from \"./crewApp/pages/inboundShipments/ProcessShipments\";\nimport ProcessOutboundShipments from \"./crewApp/pages/outboundShipments/ProcessOutboundShipments\";\nimport { InventorySearch } from \"./crewApp/pages/inventorySearch/InventorySearch\";\nimport { InboundDemurrageList } from \"./managerApp/resources/inboundShipments/InboundDemurrageList\";\nimport { OutboundDemurrageList } from \"./managerApp/resources/outboundShipments/OutboundDemurrageList\";\nimport { LowInventoryList } from \"./managerApp/resources/inventory/LowInventoryList\";\nimport { InvoiceAuditReport } from \"./managerApp/reports/InvoiceAuditReport\";\nimport AvgInventoryTurnsByAccount from \"./managerApp/reports/AvgInventoryTurnsByAccount\";\nimport AvgInventoryTurnsByMonth from \"./managerApp/reports/AvgInventoryTurnsByMonth\";\nimport AvgInboundCarsByAccount from \"./managerApp/reports/AvgInboundCarsByAccount\";\nimport Locations from \"./crewApp/pages/locationSearch/Locations\";\nimport { Maps } from \"./crewApp/pages/yardMap/Maps\";\nimport Reports from \"./managerApp/reports/Reports\";\nimport Logout from \"./components/Logout\";\nimport { YardUtilization } from \"./crewApp/pages/utilization/YardUtilization\";\nimport { Documents } from \"./crewApp/pages/documents/Documents\";\nimport TrackLocationContainer from \"./crewApp/pages/trackManagement/TrackLocation\";\nimport NetworkError from \"./components/NetworkError\";\nimport TrackManagementAdmin from \"./managerApp/resources/tracks/TrackManagementAdmin\";\nimport { InventoryActivityReport } from \"./managerApp/reports/InventoryActivityReport\";\nimport { InboundInvoiceReport } from \"./managerApp/reports/InboundInvoiceReport\";\nimport { OutboundInvoiceReport } from \"./managerApp/reports/OutboundInvoiceReport\";\nimport { TotalInOutReport } from \"./managerApp/reports/TotalInOutReport\";\nimport InventoryByLoadType from \"./managerApp/reports/InventoryByLoadType\";\nimport { InventoryStorageReport } from \"./managerApp/reports/InventoryStorageReport\";\nimport { InventoryRecallReport } from \"./managerApp/reports/InventoryRecallReport\";\nimport { DailyRevenueReport } from \"./managerApp/reports/DailyRevenueReport\";\n\nconst Routes = [\n <Route path=\"/mytasks\" render={(props) => <Tasks {...props} />} />,\n <Route exact path=\"/logout\" render={() => <Logout />} />,\n <Route path=\"/processAudit\" render={(props) => <Audit {...props} />} />,\n <Route\n path=\"/processShipments\"\n render={(props) => <ProcessShipments {...props} />}\n />,\n <Route\n path=\"/processOutboundShipments\"\n render={(props) => <ProcessOutboundShipments {...props} />}\n />,\n <Route path=\"/search\" render={(props) => <InventorySearch {...props} />} />,\n <Route path=\"/locations\" render={(props) => <Locations {...props} />} />,\n <Route path=\"/reports\" render={(props) => <Reports {...props} />} />,\n <Route\n path=\"/reportInventoryByLoadType\"\n render={(props) => <InventoryByLoadType {...props} />}\n />,\n <Route\n path=\"/reportTurnoverByMonth\"\n render={(props) => <AvgInventoryTurnsByMonth {...props} />}\n />,\n <Route\n path=\"/reportTurnoverByAccount\"\n render={(props) => <AvgInventoryTurnsByAccount {...props} />}\n />,\n <Route\n path=\"/reportCarsByAccount\"\n render={(props) => <AvgInboundCarsByAccount {...props} />}\n />,\n <Route\n path=\"/reportInboundDemurrage\"\n render={(props) => (\n <InboundDemurrageList\n resource=\"inboundShipments\"\n basePath=\"/inboundShipments\"\n {...props}\n />\n )}\n />,\n <Route\n path=\"/reportOutboundDemurrage\"\n render={(props) => (\n <OutboundDemurrageList\n resource=\"outboundShipments\"\n basePath=\"/outboundShipments\"\n {...props}\n />\n )}\n />,\n <Route\n path=\"/reportLowInventory\"\n render={(props) => (\n <LowInventoryList\n resource=\"inventories\"\n basePath=\"/inventories\"\n {...props}\n />\n )}\n />,\n <Route\n path=\"/reportInventoryActivity\"\n render={(props) => (\n <InventoryActivityReport\n resource=\"inventories\"\n basePath=\"/inventories\"\n {...props}\n />\n )}\n />,\n <Route\n path=\"/reportInvoiceAudit\"\n render={(props) => (\n <InvoiceAuditReport resource=\"invoices\" basePath=\"/invoices\" {...props} />\n )}\n />,\n <Route\n path=\"/dailyRevenue\"\n render={(props) => (\n <DailyRevenueReport resource=\"invoices\" basePath=\"/invoices\" {...props} />\n )}\n />,\n <Route\n path=\"/reportInboundInvoices\"\n render={(props) => (\n <InboundInvoiceReport\n resource=\"inboundShipments\"\n basePath=\"/inboundShipments\"\n {...props}\n />\n )}\n />,\n <Route\n path=\"/reportOutboundInvoices\"\n render={(props) => (\n <OutboundInvoiceReport\n resource=\"outboundShipments\"\n basePath=\"/outboundShipments\"\n {...props}\n />\n )}\n />,\n\n <Route\n path=\"/reportInventoryStorage\"\n render={(props) => (\n <InventoryStorageReport\n resource=\"inventories\"\n basePath=\"/inventories\"\n {...props}\n />\n )}\n />,\n <Route\n path=\"/reportInventoryRecall\"\n render={(props) => (\n <InventoryRecallReport\n resource=\"inventories\"\n basePath=\"/inventories\"\n {...props}\n />\n )}\n />,\n <Route\n path=\"/reportTotalInOut\"\n render={(props) => <TotalInOutReport {...props} />}\n />,\n <Route path=\"/maps\" render={(props) => <Maps {...props} />} />,\n <Route\n path=\"/utilization\"\n render={(props) => <YardUtilization {...props} />}\n />,\n <Route\n path=\"/trackManagement\"\n render={(props) => <TrackLocationContainer {...props} />}\n />,\n <Route\n path=\"/trackManagementAdmin\"\n render={(props) => <TrackManagementAdmin {...props} />}\n />,\n <Route path=\"/documents\" render={(props) => <Documents {...props} />} />,\n <Route\n path=\"/networkError\"\n render={(props) => <NetworkError {...props} />}\n />,\n];\n\nexport default Routes;\n","import React, { useEffect } from \"react\";\n\nimport { Error } from \"react-admin\";\nimport { logError } from \"../utils/appUtils\";\n\n// in src/MyLayout.js\n// import { Layout } from 'react-admin';\n// import DefaultError from './DefaultError';\n// const MyLayout = (props) => <Layout {...props} error={DefaultError} />;\n\nconst DefaultError = (props) => {\n const { error, errorInfo } = props;\n\n useEffect(() => {\n debugger;\n logError(error.toString(), errorInfo.componentStack, false);\n }, []);\n\n return <Error {...props} />;\n};\n\nexport default DefaultError;\n","import React from \"react\";\n\nimport {\n Avatar,\n Box,\n Button,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Grid,\n Link,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles, ThemeProvider } from \"@material-ui/core/styles\";\n\nimport { ExportIcon } from \".\";\nimport { APP_VERSION } from \"../../utils/constants.js\";\nimport { useThemeState } from \"../../ThemeStateProvider.js\";\nimport { isTWA } from \"../../utils/appUtils.js\";\nimport { theme, darkTheme } from \"../../withRoot.js\";\n\nconst useStyles = makeStyles((theme) => ({\n avatar: {\n color: theme.palette.getContrastText(theme.palette.primary.main),\n backgroundColor: theme.palette.primary.main,\n width: theme.spacing(6),\n height: theme.spacing(6),\n },\n}));\n\nexport const AppInfoDialog = ({ isOpen, onClose, ...props }) => {\n const classes = useStyles();\n const { palette } = useThemeState();\n\n const handleUpdate = (event) => {\n event.preventDefault();\n window.location.reload(true);\n };\n\n return (\n <ThemeProvider theme={palette === \"light\" ? theme : darkTheme}>\n <Dialog open={isOpen} onClose={onClose} maxWidth=\"xs\" fullWidth>\n <DialogTitle>\n <Grid container spacing={1}>\n <Grid item xs={1}>\n <Avatar className={classes.avatar}>\n <Typography variant=\"h4\">i</Typography>\n </Avatar>\n </Grid>\n <Grid item xs={11}>\n <Box ml={3} mt={1}>\n <Typography variant=\"h5\">About transloads.co</Typography>\n </Box>\n </Grid>\n </Grid>\n </DialogTitle>\n <DialogContent>\n <Grid container direction=\"row\" spacing={0}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textPrimary\">\n <strong>version: {APP_VERSION}</strong>\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textPrimary\">\n Policies:\n </Typography>\n <ul>\n <li>\n <Link\n href=\"https://transloads.co/terms-of-service/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n underline=\"hover\"\n >\n Terms of Service\n </Link>\n </li>\n <li>\n <Link\n href=\"https://transloads.co/privacy-policy\"\n target=\"_blank\"\n rel=\"noreferrer\"\n underline=\"hover\"\n >\n Privacy Policy\n </Link>\n </li>\n <li>\n <Link\n href=\"https://transloads.co/acceptable-use-policy/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n underline=\"hover\"\n >\n Acceptable Use Policy\n </Link>\n </li>\n <li>\n <Link\n href=\"https://transloads.co/service-level-agreement/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n underline=\"hover\"\n >\n Service Level Agreement\n </Link>\n </li>\n {!isTWA() && (\n <li>\n <Link\n href=\"https://transloads.co/pricing-policy/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n underline=\"hover\"\n >\n Fees and Pricing Policy\n </Link>\n </li>\n )}\n </ul>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textPrimary\">\n © Copyright 2021\n </Typography>\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"default\">\n Close\n </Button>\n <Button\n onClick={handleUpdate}\n color=\"primary\"\n startIcon={<ExportIcon />}\n >\n Update\n </Button>\n </DialogActions>\n </Dialog>\n </ThemeProvider>\n );\n};\n","import React, { useCallback } from \"react\";\n\nimport { ListItemIcon, MenuItem, Typography } from \"@material-ui/core\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles((theme) => ({\n icon: {\n minWidth: theme.spacing(5),\n },\n}));\n\nexport const MenuItemClickable = ({\n primaryText,\n leftIcon,\n clickHandler,\n ...props\n}) => {\n const classes = useStyles();\n const { onClick } = props;\n\n const handleMenuTap = useCallback(\n (e) => {\n debugger;\n clickHandler && clickHandler();\n onClick && onClick(e);\n },\n [onClick]\n );\n\n return (\n <MenuItem onClick={handleMenuTap}>\n {leftIcon && (\n <ListItemIcon className={classes.icon}>{leftIcon}</ListItemIcon>\n )}\n <Typography variant=\"inherit\" color=\"textSecondary\">\n {primaryText}\n </Typography>\n </MenuItem>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\n\nimport {\n FormControl,\n makeStyles,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport classnames from \"classnames\";\n\nimport { DashboardMenuItem, MenuItemLink } from \"react-admin\";\n\nimport { useUser } from \"../../authenticatorApp/UserContext\";\nimport {\n InboundIcon,\n InventoryIcon,\n InvoicesIcon,\n LogoutIcon,\n OutboundIcon,\n ProfileIcon,\n // ReportsIcon,\n // TaskListIcon,\n UserIcon,\n} from \"../../components/common\";\nimport { AclType } from \"../../utils/constants\";\nimport { truncateText } from \"../../utils/utils\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n paddingTop: theme.spacing(2),\n },\n open: {\n width: 210,\n },\n closed: {\n width: 55,\n },\n formControlOpen: {\n marginLeft: theme.spacing(2),\n height: theme.spacing(4),\n minWidth: 192,\n },\n formControlClosed: {\n display: \"none\",\n },\n}));\n\nexport const CustomerMenu = ({ onMenuClick, dense }) => {\n const classes = useStyles();\n useSelector((state) => state.theme);\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const open = useSelector((state) => state.admin.ui.sidebarOpen);\n const { appUser, isAuthorized, isMultiTenant } = useUser();\n\n return (\n <div\n className={classnames(classes.root, {\n [classes.open]: open,\n [classes.closed]: !open,\n })}\n >\n {isMultiTenant() && (\n <FormControl\n className={classnames({\n [classes.formControlOpen]: open,\n [classes.formControlClosed]: !open,\n })}\n >\n <Typography variant=\"body1\">\n {truncateText(appUser?.reloadYard?.name, 23)}\n </Typography>\n </FormControl>\n )}\n\n <DashboardMenuItem\n onClick={onMenuClick}\n sidebarIsOpen={open}\n primaryText=\"Dashboard\"\n />\n <MenuItemLink\n to={`/inboundShipments`}\n primaryText=\"Inbound Shipments\"\n leftIcon={<InboundIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n <MenuItemLink\n to={`/outboundShipments`}\n primaryText=\"Outbound Shipments\"\n leftIcon={<OutboundIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n <MenuItemLink\n to={`/inventories`}\n primaryText=\"Inventory\"\n leftIcon={<InventoryIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n {isAuthorized(AclType.INVOICES_VIEW) && (\n <MenuItemLink\n to={`/invoices`}\n primaryText=\"Invoices\"\n leftIcon={<InvoicesIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n )}\n {isAuthorized(AclType.USERS) ? (\n <MenuItemLink\n to={`/customers`}\n primaryText=\"Users\"\n leftIcon={<UserIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n ) : (\n <MenuItemLink\n to={`/customers/${appUser?.id}`}\n primaryText=\"Profile\"\n leftIcon={<ProfileIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n )}\n {/* <MenuItemLink\n\t\t\t\tto={`/tasks`}\n\t\t\t\tprimaryText=\"Tasks\"\n\t\t\t\tleftIcon={<TaskListIcon />}\n\t\t\t\tonClick={onMenuClick}\n\t\t\t\tsidebarIsOpen={open}\n\t\t\t\tdense={dense}\n\t\t\t/> */}\n {/* {\n\t\t\t\t!isXSmall &&\n\t\t\t\t<MenuItemLink\n\t\t\t\t\tto={`/reports`}\n\t\t\t\t\tprimaryText=\"Reports\"\n\t\t\t\t\tleftIcon={<ReportsIcon />}\n\t\t\t\t\tonClick={onMenuClick}\n\t\t\t\t\tsidebarIsOpen={open}\n\t\t\t\t\tdense={dense}\n\t\t\t\t/>\n\t\t\t} */}\n {isXSmall && (\n <MenuItemLink\n to=\"/logout\"\n primaryText=\"Logout\"\n leftIcon={<LogoutIcon />}\n sidebarIsOpen={open}\n />\n )}\n </div>\n );\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\n\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n makeStyles,\n} from \"@material-ui/core\";\nimport { alpha } from \"@material-ui/core/styles\"; // Updated import here\n\nimport { Button } from \"react-admin\";\nimport { useTranslate } from \"ra-core\";\n\nimport { CancelIcon, OKIcon } from \".\";\n\nimport classnames from \"classnames\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n confirmPrimary: {\n color: theme.palette.primary.main,\n },\n confirmWarning: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaConfirm\" }\n);\n\n/**\n * Confirmation dialog\n *\n * @example\n * <Confirm\n * isOpen={true}\n * title=\"Delete Item\"\n * content=\"Are you sure you want to delete this item?\"\n * confirm=\"Yes\"\n * confirmColor=\"primary\"\n * ConfirmIcon=ActionCheck\n * CancelIcon=AlertError\n * cancel=\"Cancel\"\n * onConfirm={() => { // if null do nothing else do something }}\n * onClose={() => { // do something }}\n * />\n */\nexport const ConditionalConfirm = (props) => {\n const {\n cancel = \"ra.action.cancel\",\n confirm = \"ra.action.confirm\",\n confirmColor = \"primary\",\n ConfirmIcon = OKIcon,\n CloseIcon = CancelIcon,\n isOpen = false,\n loading,\n title,\n content,\n onClose,\n onConfirm,\n translateOptions = {},\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n\n const handleConfirm = useCallback(\n (e) => {\n e.stopPropagation();\n onConfirm(e);\n },\n [onConfirm]\n );\n\n const handleClick = useCallback((e) => {\n e.stopPropagation();\n }, []);\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n onClick={handleClick}\n aria-labelledby=\"alert-dialog-title\"\n >\n <DialogTitle id=\"alert-dialog-title\">\n {translate(title, { _: title, ...translateOptions })}\n </DialogTitle>\n <DialogContent>\n {typeof content === \"string\" ? (\n <DialogContentText>\n {translate(content, {\n _: content,\n ...translateOptions,\n })}\n </DialogContentText>\n ) : (\n content\n )}\n </DialogContent>\n <DialogActions>\n <Button\n label={translate(cancel, { _: cancel })}\n color=\"default\"\n disabled={loading}\n onClick={onClose}\n >\n <CloseIcon />\n </Button>\n {onConfirm && (\n <Button\n label={translate(confirm, { _: confirm })}\n disabled={loading}\n onClick={handleConfirm}\n className={classnames(\"ra-confirm\", {\n [classes.confirmWarning]: confirmColor === \"warning\",\n [classes.confirmPrimary]: confirmColor === \"primary\",\n })}\n autoFocus\n >\n <ConfirmIcon />\n </Button>\n )}\n </DialogActions>\n </Dialog>\n );\n};\n","import React, { useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { announcementsByUrgencyByDate } from \"../../graphql/queries\";\n\nimport { Box, Grid, Paper, Typography } from \"@material-ui/core\";\nimport UpdateIcon from \"@material-ui/icons/Update\";\nimport NotificationImportantIcon from \"@material-ui/icons/NotificationImportant\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { ConditionalConfirm } from \"./ConditionalConfirm\";\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n width: \"100%\",\n },\n annpuncment: {\n display: \"flex\",\n alignItems: \"center\",\n \"&:hover\": {\n cursor: \"pointer\",\n },\n },\n}));\n\nconst ANNOUNCEMENT_INTERVAL = 30 * 60000; // 30 min\nconst APP_UPDATE_DELAY = 1 * 60000; // 1 min\nconst APP_UPDATE_DELAY_TEXT = \"one minute\";\n\nconst Announcements = () => {\n const dispatch = useDispatch();\n const classes = useStyles();\n const data = useSelector((state) => state.data.announcements);\n const {\n isConfirmOpen,\n showAnnouncements,\n lastAnnouncmentCheck,\n fetchTimestamp,\n announcementList,\n } = data;\n\n useEffect(() => {\n const lastCheck = lastAnnouncmentCheck ? Number(lastAnnouncmentCheck) : 0;\n const difference = Date.now() - lastCheck;\n if (difference > ANNOUNCEMENT_INTERVAL) {\n dispatch({\n type: \"SET_LAST_ANNOUNCEMENTS_CHECK_TIMESTAMP\",\n payload: Date.now(),\n });\n getAnnouncements();\n }\n }, []);\n\n const getAnnouncements = async () => {\n let lastAnnouncmentTimestamp = localStorage.getItem(\n \"lastAnnouncmentTimestamp\"\n );\n lastAnnouncmentTimestamp = lastAnnouncmentTimestamp\n ? Number(lastAnnouncmentTimestamp)\n : 0;\n const response = await API.graphql(\n graphqlOperation(announcementsByUrgencyByDate, {\n active: true,\n limit: 3,\n })\n );\n const data = response.data.announcementsByUrgencyByDate.items;\n if (data.length > 0) {\n let announcementTimestamp = lastAnnouncmentTimestamp;\n data.forEach((itm) => {\n announcementTimestamp = new Date(itm.updatedAt).getTime();\n if (announcementTimestamp > lastAnnouncmentTimestamp) {\n lastAnnouncmentTimestamp = announcementTimestamp;\n }\n });\n\n if (announcementTimestamp >= lastAnnouncmentTimestamp) {\n dispatch({\n type: \"SET_ANNOUNCEMENTS\",\n payload: {\n showAnnouncements: true,\n announcementList: data,\n fetchTimestamp: lastAnnouncmentTimestamp,\n isConfirmOpen: true,\n },\n });\n }\n }\n };\n\n const handleUpdate = () => {\n localStorage.setItem(\"lastAnnouncmentTimestamp\", fetchTimestamp + 1);\n window.location.reload(true);\n };\n\n const handleClose = () => {\n dispatch({ type: \"SET_IS_CONFIRM_OPEN\", payload: false });\n setTimeout(handleUpdate, APP_UPDATE_DELAY);\n };\n\n return showAnnouncements && announcementList?.length > 0 ? (\n <Grid item xs={12}>\n <Paper>\n <Box className={classes.container}>\n <Box>\n {announcementList.map((itm, idx) => (\n <Typography\n className={classes.annpuncment}\n variant=\"body2\"\n color=\"textSecondary\"\n key={idx}\n >\n <NotificationImportantIcon\n fontSize=\"small\"\n color={itm.urgency === 1 ? \"action\" : \"error\"}\n />\n  {itm.message}\n </Typography>\n ))}\n </Box>\n <Box mt={0.2} display=\"flex\" justifyContent=\"flex-end\">\n <UpdateIcon\n fontSize=\"small\"\n color=\"action\"\n onClick={handleUpdate}\n />\n </Box>\n </Box>\n <ConditionalConfirm\n isOpen={isConfirmOpen}\n title={\"Update application\"}\n content={`An update is required, the application will be updated automatically in ${APP_UPDATE_DELAY_TEXT}.`}\n onClose={handleClose}\n onConfirm={handleUpdate}\n confirm=\"Update Now\"\n cancel=\"Close\"\n />\n </Paper>\n </Grid>\n ) : null;\n};\n\nexport default Announcements;\n","import React, { Fragment } from \"react\";\n\nimport { Typography, useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { AppBar } from \"react-admin\";\n\nimport Announcements from \"../../components/common/Announcements\";\n\nconst useStyles = makeStyles((theme) => ({\n title: {\n flex: 1,\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n },\n hidden: {\n display: \"none\",\n },\n logo: {\n margin: \"auto\",\n paddingTop: theme.spacing(1),\n },\n spacer: { flex: 1 },\n selector: {\n marginLeft: theme.spacing(2),\n minWidth: 192,\n },\n}));\n\nexport const CustomerAppBar = (props, userMenu) => {\n const classes = useStyles();\n const lteSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const svgLogo = \"/logo_transloads_white.svg\";\n\n return lteSmall ? (\n <>\n <AppBar {...props} color=\"primary\" userMenu={userMenu}>\n <span className={classes.spacer} />\n <Typography\n variant=\"h6\"\n color=\"inherit\"\n id=\"react-admin-title\"\n className={classes.hidden}\n />\n <div className={classes.logo}>\n <img src={svgLogo} alt=\"transloads.co logo\" height=\"30px\" />\n </div>\n <span className={classes.spacer} />\n </AppBar>\n <Announcements />\n </>\n ) : (\n <>\n {/* container={Fragment} makes the appBar fixed */}\n <AppBar\n {...props}\n color=\"primary\"\n userMenu={userMenu}\n container={Fragment}\n >\n <Typography\n variant=\"h6\"\n color=\"inherit\"\n id=\"react-admin-title\"\n className={classes.title}\n />\n <div className={classes.logo}>\n <img src={svgLogo} alt=\"transloads.co logo\" height=\"30px\" />\n </div>\n <span className={classes.spacer} />\n </AppBar>\n <Announcements />\n </>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { Layout, Notification, UserMenu, MenuItemLink } from \"react-admin\";\n\nimport MoreVertIcon from \"@material-ui/icons/MoreVert\";\n\nimport { useUser } from \"../../authenticatorApp/UserContext\";\nimport DefaultError from \"../../components/DefaultError\";\nimport {\n AppInfoIcon,\n BugIcon,\n LogoutIcon,\n ProfileIcon,\n ThemeToggleIcon,\n} from \"../../components/common\";\nimport { AppInfoDialog } from \"../../components/common/AppInfoDialog\";\nimport { useThemeState } from \"../../ThemeStateProvider\";\nimport { MenuItemClickable } from \"../../components/MenuItemClickable\";\n\nimport { CustomerMenu } from \"./CustomerMenu\";\nimport { CustomerAppBar } from \"./CustomerAppBar\";\n\nconst CustomerUserMenu = ({ toggleAppInfoOpen, ...props }) => {\n const { appUser } = useUser();\n const { toggleTheme } = useThemeState();\n const profilePath = `/customers/${appUser?.id}`;\n\n const handleBugReport = () => {\n window.open(\"https://transloads.co/submit-a-ticket/\", \"_blank\");\n };\n\n return (\n <UserMenu label=\"USER\" icon={<MoreVertIcon />}>\n <MenuItemLink\n to={profilePath}\n primaryText=\"Profile\"\n leftIcon={<ProfileIcon />}\n />\n <MenuItemClickable\n primaryText=\"Theme\"\n leftIcon={<ThemeToggleIcon />}\n clickHandler={toggleTheme}\n />\n <MenuItemClickable\n primaryText=\"App Info\"\n leftIcon={<AppInfoIcon />}\n clickHandler={toggleAppInfoOpen}\n />\n <MenuItemClickable\n primaryText=\"Log a Ticket\"\n leftIcon={<BugIcon />}\n clickHandler={handleBugReport}\n />\n <MenuItemLink\n to=\"/logout\"\n primaryText=\"Logout\"\n leftIcon={<LogoutIcon />}\n />\n </UserMenu>\n );\n};\n\nexport const CustomerLayout = (props) => {\n const [appInfoOpen, setAppInfoOpen] = useState(false);\n const toggleAppInfoOpen = (_, reason) => {\n if (reason !== \"backdropClick\") setAppInfoOpen(!appInfoOpen);\n };\n const userMenu = <CustomerUserMenu toggleAppInfoOpen={toggleAppInfoOpen} />;\n\n return (\n <>\n <Layout\n {...props}\n appBar={(props) => CustomerAppBar(props, userMenu)}\n menu={CustomerMenu}\n notification={Notification}\n error={DefaultError}\n />\n <AppInfoDialog isOpen={appInfoOpen} onClose={toggleAppInfoOpen} />\n </>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { countInboundShipments } from \"../../graphql/inbound/custom-queries\";\nimport { countOutboundShipments } from \"../../graphql/outbound/custom-queries\";\nimport {\n getCustomerReloadYardAccountMini,\n getReloadYard,\n} from \"../../graphql/reloadyard/custom-queries\";\n\nimport {\n Button,\n CardActions,\n CircularProgress,\n Grid,\n MenuItem,\n TextField,\n Typography,\n CardContent,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { useNotify, Title } from \"react-admin\";\n\nimport {\n InbounddOutlinedIcon,\n OutbounddOutlinedIcon,\n YardSetupIcon,\n} from \"../../components/common\";\nimport { ImageField } from \"../../components/common/ImageField\";\nimport CrewCard from \"../../components/common/CrewCard\";\n\nimport {\n logError,\n setupCommodityMaps,\n setupLocationMaps,\n} from \"../../utils/appUtils\";\nimport { InboundStatus, OutboundStatus } from \"../../utils/constants\";\nimport { useUser } from \"../../authenticatorApp/UserContext\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n marginTop: theme.spacing(1),\n },\n card: {\n minHeight: 150,\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n flex: \"1\",\n \"& a\": {\n textDecoration: \"none\",\n color: \"inherit\",\n },\n },\n cardAvatar: {\n color: theme.palette.getContrastText(theme.palette.primary.main),\n backgroundColor: theme.palette.primary.main,\n width: theme.spacing(6),\n height: theme.spacing(6),\n },\n cardItemLeft: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n },\n cardItemRight: {\n display: \"flex\",\n marginTop: theme.spacing(0.5),\n marginLeft: theme.spacing(1),\n },\n cardActions: {\n marginTop: \"auto\",\n \"& a\": {\n textDecoration: \"none\",\n color: \"inherit\",\n },\n },\n centerLogo: {\n display: \"flex\",\n justifyContent: \"center\", // Center horizontally\n alignItems: \"center\", // Center vertically\n // height: '100%',\n },\n}));\n\nexport const CustomerDashboard = (props) => {\n const classes = useStyles();\n const { appUser, setAppUser, isMultiTenant } = useUser();\n\n return (\n <div className={classes.root}>\n <Title title=\" \" />\n <Grid container>\n <Grid item xs={12}>\n {isMultiTenant() ? (\n <ReloadYardsCard\n appUser={appUser}\n setAppUser={setAppUser}\n classes={classes}\n />\n ) : (\n <ReloadYardCard appUser={appUser} classes={classes} />\n )}\n </Grid>\n <Grid item xs={12} sm={6}>\n <InboundCard appUser={appUser} classes={classes} />\n </Grid>\n <Grid item xs={12} sm={6}>\n <OutboundCard appUser={appUser} classes={classes} />\n </Grid>\n </Grid>\n </div>\n );\n};\n\nconst ReloadYardCard = ({ appUser, classes, ...props }) => {\n const [reloadYard] = useState(appUser?.reloadYard);\n\n if (!reloadYard) return <></>;\n return (\n <CrewCard\n showDivider={false}\n title={reloadYard.name}\n icon={<YardSetupIcon fontSize=\"large\" />}\n addMargin={true}\n >\n <Grid container spacing={2}>\n <Grid item xs={6} className={classes.centerLogo}>\n <ImageField\n source=\"logoImage\"\n record={reloadYard}\n thumbWidth={300}\n thumbHeight={160}\n scaleThumb={true}\n />\n </Grid>\n <Grid item xs={6}>\n <Typography variant=\"overline\">Address:</Typography>\n <Typography variant=\"body2\">{reloadYard.street}</Typography>\n <Typography variant=\"body2\">{`${reloadYard.city}, ${reloadYard.state} ${reloadYard.zipCode}, ${reloadYard.country}`}</Typography>\n <Typography variant=\"overline\">Email:</Typography>\n <Typography variant=\"body2\">{reloadYard.email}</Typography>\n <Typography variant=\"overline\">Phone:</Typography>\n <Typography variant=\"body2\">{reloadYard.phone}</Typography>\n <Typography variant=\"overline\">Fax:</Typography>\n <Typography variant=\"body2\">{reloadYard.fax}</Typography>\n </Grid>\n </Grid>\n </CrewCard>\n );\n};\n\nconst ReloadYardsCard = ({ appUser, setAppUser, classes, ...props }) => {\n const notify = useNotify();\n const [loading, setLoading] = useState(false);\n const [reloadYards] = useState(\n appUser.reloadYardAccounts.items.map((item) => item.reloadYard)\n );\n const reloadYard = appUser?.reloadYard;\n\n const handleYardChange = async (event) => {\n debugger;\n try {\n setLoading(true);\n const reloadYardId = event.target.value;\n const reloadYardAccountId = appUser.reloadYardAccounts.items.find(\n (item) => item.reloadYardId === reloadYardId\n ).id;\n\n // Create two promises for customerAccount and reloadYard\n const accountPromise = API.graphql(\n graphqlOperation(getCustomerReloadYardAccountMini, {\n id: reloadYardAccountId,\n })\n );\n const reloadYardPromise = API.graphql(\n graphqlOperation(getReloadYard, { id: reloadYardId })\n );\n\n // Use Promise.all to wait for both promises to resolve\n const [accountResponse, reloadYardResponse] = await Promise.all([\n accountPromise,\n reloadYardPromise,\n ]);\n\n const reloadYardAccount =\n accountResponse.data.getCustomerReloadYardAccount;\n const reloadYard = reloadYardResponse.data.getReloadYard;\n setupLocationMaps(reloadYard);\n setupCommodityMaps(reloadYard);\n\n // transform ACL Permissions\n appUser.permissionList = {};\n reloadYardAccount.acl?.forEach((itm) => {\n appUser.permissionList[itm] = true;\n });\n\n debugger;\n setAppUser({\n ...appUser,\n accountId: reloadYardAccount.accountId,\n accountName: reloadYardAccount.accountName,\n account: reloadYardAccount.account,\n reloadYardId,\n reloadYard,\n });\n } catch (err) {\n logError(\n \"CustomerDashboard:ReloadYardCard::handleYardChange\",\n err,\n notify\n );\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <CrewCard\n showDivider={false}\n title=\"Transloads\"\n icon={<YardSetupIcon fontSize=\"large\" />}\n addMargin={true}\n >\n <Grid container spacing={2}>\n <Grid item xs={6}>\n <Grid container direction=\"column\" spacing={2}>\n <Grid item xs={12}>\n <TextField\n select\n id=\"site-select\"\n label=\"Transload\"\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n required\n value={reloadYard.id}\n onChange={handleYardChange}\n helperText=\"Select a transload to manage\"\n >\n {reloadYards.map((yard) => (\n <MenuItem key={yard.id} value={yard.id}>\n {yard.name}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n <Grid item xs={12} className={classes.centerLogo}>\n {loading ? (\n <CircularProgress color=\"inherit\" />\n ) : (\n <ImageField\n source=\"logoImage\"\n record={reloadYard}\n thumbWidth={300}\n thumbHeight={105}\n scaleThumb={true}\n />\n )}\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={6}>\n <Typography variant=\"overline\">Address:</Typography>\n <Typography variant=\"body2\">{reloadYard.street}</Typography>\n <Typography variant=\"body2\">{`${reloadYard.city}, ${reloadYard.state} ${reloadYard.zipCode}, ${reloadYard.country}`}</Typography>\n <Typography variant=\"overline\">Email:</Typography>\n <Typography variant=\"body2\">{reloadYard.email}</Typography>\n <Typography variant=\"overline\">Phone:</Typography>\n <Typography variant=\"body2\">{reloadYard.phone}</Typography>\n <Typography variant=\"overline\">Fax:</Typography>\n <Typography variant=\"body2\">{reloadYard.fax}</Typography>\n </Grid>\n </Grid>\n </CrewCard>\n );\n};\n\nconst InboundCard = ({ appUser, classes }) => {\n const [loaded, setLoaded] = useState();\n const [summary, setSummary] = useState({\n rolling: 0,\n notified: 0,\n placed: 0,\n });\n const notify = useNotify();\n\n useEffect(() => {\n !loaded && init();\n }, []);\n\n const init = async () => {\n setLoaded(true);\n try {\n const queryList = [];\n queryList[0] = API.graphql(\n graphqlOperation(countInboundShipments, {\n filter: {\n reloadYardId: { eq: appUser?.reloadYardId },\n status: { eq: InboundStatus.IN_TRANSIT },\n },\n })\n );\n\n queryList[1] = API.graphql(\n graphqlOperation(countInboundShipments, {\n filter: {\n reloadYardId: { eq: appUser?.reloadYardId },\n status: { eq: InboundStatus.ARRIVED },\n },\n })\n );\n\n queryList[2] = API.graphql(\n graphqlOperation(countInboundShipments, {\n filter: {\n reloadYardId: { eq: appUser?.reloadYardId },\n status: { eq: InboundStatus.PLACED },\n },\n })\n );\n\n const promiseResults = await Promise.all(queryList);\n\n let rollingCount = promiseResults[0].data.searchInboundShipments.total;\n let notifiedCount = promiseResults[1].data.searchInboundShipments.total;\n let placedCount = promiseResults[2].data.searchInboundShipments.total;\n\n setSummary({\n rolling: rollingCount ? rollingCount : 0,\n notified: notifiedCount ? notifiedCount : 0,\n placed: placedCount ? placedCount : 0,\n });\n } catch (err) {\n logError(\"components:Dashboard:InboundCard:init\", err, notify);\n }\n };\n\n return (\n <CrewCard\n showDivider={false}\n title=\"Inbound\"\n icon={<InbounddOutlinedIcon fontSize=\"large\" />}\n addMargin={true}\n >\n <CardContent>\n <div className={classes.card}>\n <Grid container spacing={1}>\n <Grid item xs={2}>\n <Typography className={classes.cardItemLeft} variant=\"h4\">\n {summary.rolling}\n </Typography>\n </Grid>\n <Grid item xs={10}>\n <Typography\n className={classes.cardItemRight}\n variant=\"h6\"\n color=\"textSecondary\"\n >\n In Transit\n </Typography>\n </Grid>\n <Grid item xs={2}>\n <Typography className={classes.cardItemLeft} variant=\"h4\">\n {summary.notified}\n </Typography>\n </Grid>\n <Grid item xs={10}>\n <Typography\n className={classes.cardItemRight}\n variant=\"h6\"\n color=\"textSecondary\"\n >\n Notified\n </Typography>\n </Grid>\n <Grid item xs={2}>\n <Typography className={classes.cardItemLeft} variant=\"h4\">\n {summary.placed}\n </Typography>\n </Grid>\n <Grid item xs={10}>\n <Typography\n className={classes.cardItemRight}\n variant=\"h6\"\n color=\"textSecondary\"\n >\n Placed\n </Typography>\n </Grid>\n </Grid>\n </div>\n </CardContent>\n <CardActions className={classes.cardActions}>\n <Link to={\"/inboundShipments\"}>\n <Button size=\"large\">View</Button>\n </Link>\n </CardActions>\n </CrewCard>\n );\n};\n\nconst OutboundCard = ({ appUser, classes }) => {\n const [loaded, setLoaded] = useState();\n const [summary, setSummary] = useState({ pending: 0, arrived: 0, loaded: 0 });\n const notify = useNotify();\n\n useEffect(() => {\n !loaded && init();\n }, []);\n\n const init = async () => {\n if (!loaded) {\n setLoaded(true);\n try {\n const queryList = [];\n queryList[0] = API.graphql(\n graphqlOperation(countOutboundShipments, {\n filter: {\n reloadYardId: { eq: appUser?.reloadYardId },\n status: { eq: OutboundStatus.PENDING },\n },\n })\n );\n\n queryList[1] = API.graphql(\n graphqlOperation(countOutboundShipments, {\n filter: {\n reloadYardId: { eq: appUser?.reloadYardId },\n status: { eq: OutboundStatus.ARRIVED },\n },\n })\n );\n\n queryList[2] = API.graphql(\n graphqlOperation(countOutboundShipments, {\n filter: {\n reloadYardId: { eq: appUser?.reloadYardId },\n status: { eq: OutboundStatus.LOADED },\n },\n })\n );\n\n const promiseResults = await Promise.all(queryList);\n\n let pendingCount = promiseResults[0].data.searchOutboundShipments.total;\n let arrivedCount = promiseResults[1].data.searchOutboundShipments.total;\n let loadedCount = promiseResults[2].data.searchOutboundShipments.total;\n\n setSummary({\n pending: pendingCount ? pendingCount : 0,\n arrived: arrivedCount ? arrivedCount : 0,\n loaded: loadedCount ? loadedCount : 0,\n });\n } catch (err) {\n logError(\"components:Dashboard:OutboundCard:init\", err, notify);\n }\n }\n };\n\n return (\n <CrewCard\n showDivider={false}\n title=\"Outbound\"\n icon={<OutbounddOutlinedIcon fontSize=\"large\" />}\n addMargin={true}\n >\n <CardContent>\n <div className={classes.card}>\n <Grid container spacing={1}>\n <Grid item xs={2}>\n <Typography className={classes.cardItemLeft} variant=\"h4\">\n {summary.pending}\n </Typography>\n </Grid>\n <Grid item xs={10}>\n <Typography\n className={classes.cardItemRight}\n variant=\"h6\"\n color=\"textSecondary\"\n >\n Pending\n </Typography>\n </Grid>\n <Grid item xs={2}>\n <Typography className={classes.cardItemLeft} variant=\"h4\">\n {summary.arrived}\n </Typography>\n </Grid>\n <Grid item xs={10}>\n <Typography\n className={classes.cardItemRight}\n variant=\"h6\"\n color=\"textSecondary\"\n >\n Arrived\n </Typography>\n </Grid>\n <Grid item xs={2}>\n <Typography className={classes.cardItemLeft} variant=\"h4\">\n {summary.loaded}\n </Typography>\n </Grid>\n <Grid item xs={10}>\n <Typography\n className={classes.cardItemRight}\n variant=\"h6\"\n color=\"textSecondary\"\n >\n Loaded\n </Typography>\n </Grid>\n </Grid>\n </div>\n </CardContent>\n <CardActions className={classes.cardActions}>\n <Link to={\"/outboundShipments\"}>\n <Button size=\"large\">View</Button>\n </Link>\n </CardActions>\n </CrewCard>\n );\n};\n","import { UnitToColumn } from \"../../../utils/constants\";\n\nexport const getPrice = (service, billUnit) => {\n const foundUnit = Object.entries(UnitToColumn).filter(\n ([unit, column]) => billUnit === unit && service[column]\n );\n\n if (foundUnit[0]) return service[foundUnit[0][1]];\n\n return 0;\n};\n","import { v4 as uuidv4 } from \"uuid\";\n\nimport {\n AreaType,\n InvoiceStatus,\n NoteType,\n PaymentTermsType,\n ServiceType,\n} from \"../../../utils/constants\";\nimport { getPrice } from \"./common\";\n\nimport { addBusinessDays, endOfDay } from \"date-fns\";\nimport { getArea } from \"../../../utils/locationUtils\";\nimport { trimDecimal } from \"../../../utils/utils\";\n\nexport const setupShipmentInvoice = (\n account,\n inboundShipment,\n outboundShipment\n) => {\n debugger;\n const serviceData = account.services.items;\n const shipment = inboundShipment || outboundShipment;\n\n let initValues = {\n groups: shipment.groups,\n reloadYardId: shipment.reloadYardId,\n accountId: account.id,\n accountName: account.businessName,\n account: account,\n poNumber: shipment.poNumber,\n inboundShipment: inboundShipment,\n inboundShipmentId: inboundShipment?.id,\n outboundShipment: outboundShipment,\n outboundShipmentId: outboundShipment?.id,\n dueDate: addBusinessDays(\n new Date(),\n PaymentTermsType[account.paymentTerms]\n ),\n serviceDate: inboundShipment\n ? inboundShipment.releaseDateTime\n : outboundShipment\n ? outboundShipment.departureDateTime\n : new Date(),\n contact:\n account.billingContacts?.length > 0\n ? account.billingContacts[0]\n : undefined,\n };\n\n const areaId = shipment.areaId;\n const area = getArea(areaId);\n const billQuantity = shipment.billQuantity;\n const billUnits = shipment.billUnits;\n const tareWeight = shipment.tareWeight;\n const ladenWeight = shipment.ladenWeight;\n const weightUnits = shipment.weightUnits;\n let service = null;\n\n debugger;\n if (area?.areaType === AreaType.WAREHOUSE) {\n service = serviceData?.find(\n (itm) => itm.name === ServiceType.INSIDE_HANDLING\n );\n } else {\n service = serviceData?.find(\n (itm) => itm.name === ServiceType.OUTSIDE_HANDLING\n );\n }\n\n if (\n inboundShipment &&\n service &&\n ((billQuantity && billUnits) || (tareWeight && ladenWeight && weightUnits))\n ) {\n const weight = Number(ladenWeight) - Number(tareWeight);\n let quantity = Number(billQuantity);\n if (weightUnits === billUnits && weight) quantity = weight;\n\n const price = getPrice(service, billUnits);\n initValues.lineItems = {\n items: [\n {\n serviceId: service.id,\n serviceDate: inboundShipment.releaseDateTime,\n quantity: quantity,\n units: billUnits,\n unitCost: price,\n amount: quantity * price,\n taxRate: service.taxRate,\n itemTax: quantity * price * (service.taxRate.taxRate / 100),\n },\n ],\n };\n } else if (\n outboundShipment &&\n service &&\n ((billQuantity && billUnits) || (tareWeight && ladenWeight && weightUnits))\n ) {\n const weight = Number(ladenWeight) - Number(tareWeight);\n let quantity = Number(billQuantity);\n if (weightUnits === billUnits && weight) quantity = weight;\n\n const price = getPrice(service, billUnits);\n initValues.lineItems = {\n items: [\n {\n serviceId: service.id,\n serviceDate: outboundShipment.departureDateTime,\n quantity: quantity,\n units: billUnits,\n unitCost: price,\n amount: quantity * price,\n taxRate: service.taxRate,\n itemTax: quantity * price * (service.taxRate.taxRate / 100),\n },\n ],\n };\n }\n\n return initValues;\n};\n\nconst getServiceNote = (value, price, key, accrual) => {\n return `${trimDecimal(value / price)} at ${price} / ${key} / ${accrual}`;\n};\n\nexport const setupStorageInvoice = (\n account,\n serviceId,\n unitTotals,\n frequency,\n accrual,\n serviceDate,\n dateRange,\n reportFile\n) => {\n const serviceData = account.services.items;\n const service = serviceData?.find((itm) => itm.id === serviceId);\n\n console.log(\n \"inpugs\",\n account,\n serviceId,\n service,\n unitTotals,\n frequency,\n accrual,\n serviceDate,\n dateRange,\n reportFile\n );\n\n debugger;\n let initValues = {\n groups: account.groups,\n reloadYardId: account.reloadYardId,\n accountId: account.id,\n accountName: account.businessName,\n account: account,\n poNumber: \"\",\n serviceDate: new Date(serviceDate),\n dueDate: addBusinessDays(\n new Date(),\n PaymentTermsType[account.paymentTerms]\n ),\n notes: \"Storage invoice for \" + dateRange + \" billed \" + frequency,\n contact:\n account.billingContacts?.length > 0\n ? account.billingContacts[0]\n : undefined,\n };\n\n if (reportFile) {\n initValues.attachments = [\n {\n src: URL.createObjectURL(reportFile), // For a preview or link\n title: reportFile.name,\n rawFile: reportFile, // Important for react-admin to treat it as an uploaded file\n },\n ];\n }\n\n console.log(\"initValues.attachments\", initValues.attachments);\n\n debugger;\n const totalsArray = Object.entries(unitTotals);\n\n if (totalsArray.length > 0) {\n initValues.lineItems = { items: [] };\n for (const [key, value] of totalsArray) {\n const price = getPrice(service, key);\n initValues.lineItems.items.push({\n serviceId: service.id,\n serviceDate: serviceDate,\n quantity: trimDecimal(value / price),\n units: key,\n unitCost: price,\n amount: value,\n taxRate: service.taxRate,\n itemTax: value * (service.taxRate.taxRate / 100),\n serviceNote: getServiceNote(value, price, key, accrual),\n });\n }\n }\n\n return initValues;\n};\n\nexport const calcSubtotal = (lineItems) => {\n if (lineItems?.items)\n return lineItems.items\n .map((item) => (item ? item.amount : 0))\n .reduce((accum, curr) => (accum += curr), 0);\n return 0.0;\n};\n\nexport const calcTaxTotal = (lineItems) => {\n if (lineItems?.items)\n return lineItems.items\n .map((item) => (item ? item.itemTax : 0))\n .reduce((accum, curr) => (accum += curr), 0);\n return 0.0;\n};\n\nexport const createTransform = (data, prefix, counter) => {\n debugger;\n data.active = \"true\";\n data.groups = window.appUser?.groups;\n data.reloadYardId = window.appUser?.reloadYardId;\n data.accountName = data.accountName\n ? data.accountName\n : data.account?.businessName;\n data.status = InvoiceStatus.NEW;\n data.dueDate = endOfDay(data.dueDate).toISOString();\n data.invoiceNumber = `${prefix}-${counter}`;\n\n data.railCarNumber =\n data.inboundShipment?.railCarNumber || data.outboundShipment?.railCarNumber;\n data.pickupNumber = data.outboundShipment?.pickupNumber;\n\n const subtotal = calcSubtotal(data.lineItems);\n data.subtotal = subtotal ? Number(subtotal).toFixed(2) : 0.0;\n data.adjustment = 0.0;\n data.discount = 0.0;\n const taxTotal = calcTaxTotal(data.lineItems);\n data.tax = taxTotal ? Number(taxTotal).toFixed(2) : 0.0;\n data.total = Number(Number(data.subtotal) + Number(data.tax)).toFixed(2);\n data.balance = data.total ? data.total : 0.0;\n\n data.contact = !data.contact ? null : data.contact;\n\n data.history = [\n {\n text: `Invoice created : total due: ${data.total}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.GENERIC,\n },\n ];\n\n const transData = { ...data };\n\n delete transData.account;\n delete transData.lineItems;\n delete transData.inboundShipment;\n delete transData.outboundShipment;\n delete transData.areaId;\n delete transData.commodity;\n delete transData.billQuantity;\n delete transData.billUnits;\n delete transData.tareWeight;\n delete transData.ladenWeight;\n delete transData.weightUnits;\n\n return transData;\n};\n\nexport const createLambdaTransform = (data, prefix, counter) => {\n debugger;\n data.id = uuidv4();\n data.__typename = \"Invoice\";\n data.owner = window.appUser?.owner;\n data.createdAt = new Date().toISOString();\n data.updatedAt = data.createdAt;\n\n let transData = createTransform(data, prefix, counter);\n\n // transData[\"status#dueDate#accountName\"] = `${transData.status}#${transData.dueDate}#${transData.accountName}`;\n\n return transData;\n};\n\nexport const createLambdaInvoiceServices = (data) => {\n const lineItems = data.lineItems?.items;\n let invoiceServiceList = [];\n debugger;\n\n if (lineItems) {\n invoiceServiceList = lineItems.map((item) => {\n const input = {\n id: uuidv4(),\n __typename: \"InvoiceService\",\n owner: data.owner,\n groups: data.groups,\n createdAt: data.createdAt,\n updatedAt: data.createdAt,\n invoiceId: data.id,\n serviceId: item.serviceId,\n accountId: data.accountId,\n reloadYardId: data.reloadYardId,\n serviceNote: item.serviceNote,\n quantity: item.quantity,\n units: item.units,\n unitCost: item.unitCost,\n amount: Number(item.amount).toFixed(2),\n taxRate: item.taxRate,\n itemTax: Number(item.itemTax).toFixed(2),\n serviceDate: new Date(\n item.serviceDate || data.serviceDate\n ).toLocaleDateString(),\n };\n\n return input;\n });\n }\n\n return invoiceServiceList;\n};\n\nexport const updateLambdaInbound = (invoiceData) => {\n const inbound = invoiceData.inboundShipment;\n const historyNote = {\n text: `Invoice created`,\n by: window.appUser?.fullName,\n date: invoiceData.createdAt,\n type: NoteType.GENERIC,\n };\n\n debugger;\n const inboundUpdateInput = {\n ...inbound,\n updatedAt: invoiceData.createdAt,\n invoiceId: invoiceData.id,\n history: [...inbound.history, historyNote],\n };\n\n delete inboundUpdateInput.account;\n delete inboundUpdateInput.area;\n delete inboundUpdateInput.location;\n delete inboundUpdateInput.notes;\n delete inboundUpdateInput.reloadYardCommodity;\n delete inboundUpdateInput.sealNumbers;\n delete inboundUpdateInput.seals;\n delete inboundUpdateInput.zone;\n\n return inboundUpdateInput;\n};\n\nexport const updateLambdaOutbound = (invoiceData) => {\n const outbound = invoiceData.outboundShipment;\n const historyNote = {\n text: `Invoice created`,\n by: window.appUser?.fullName,\n date: invoiceData.createdAt,\n type: NoteType.GENERIC,\n };\n\n debugger;\n const outboundUpdateInput = {\n ...outbound,\n updatedAt: invoiceData.createdAt,\n invoiceId: invoiceData.id,\n history: [...outbound.history, historyNote],\n };\n\n delete outboundUpdateInput.account;\n delete outboundUpdateInput.area;\n delete outboundUpdateInput.reloadYardCommodity;\n delete outboundUpdateInput.shipmentLineItems;\n delete outboundUpdateInput.zone;\n\n return outboundUpdateInput;\n};\n\nexport const updateLambdaTransform = (invoices) => {\n const exportDate = new Date().toISOString();\n let invoiceUpdateList = [];\n debugger;\n\n const historyNote = {\n text: `Invoice Exported`,\n by: window.appUser?.fullName,\n date: exportDate,\n type: NoteType.GENERIC,\n };\n\n if (invoices) {\n invoices.forEach((item) => {\n if (item.status === InvoiceStatus.NEW) {\n const invoiceUpdateInput = {\n ...item,\n updatedAt: exportDate,\n status: InvoiceStatus.PENDING,\n history: [...item.history, historyNote],\n };\n // invoiceUpdateInput[\"status#dueDate#accountName\"] = `${invoiceUpdateInput.status}#${item.dueDate}#${item.accountName}`;\n\n delete invoiceUpdateInput.account;\n delete invoiceUpdateInput.inboundShipment;\n delete invoiceUpdateInput.lineItems;\n delete invoiceUpdateInput.outboundShipment;\n delete invoiceUpdateInput.reloadYard;\n\n invoiceUpdateList.push(invoiceUpdateInput);\n }\n });\n }\n\n return invoiceUpdateList;\n};\n\nexport const getMemo = (invoice) => {\n let memo = \"\";\n if (invoice.poNumber) memo = memo + `PO Number: ${invoice.poNumber}\\n`;\n if (invoice.railCarNumber)\n memo = memo + `Car/Trl Number: ${invoice.railCarNumber}\\n`;\n if (invoice.pickupNumber)\n memo = memo + `Pickup Number Number: ${invoice.pickupNumber}\\n`;\n if (invoice.notes) memo = memo + invoice.notes;\n\n return memo;\n};\n","import React, { useEffect, useState } from \"react\";\nimport jsonExport from \"jsonexport/dist\";\n\nimport {\n Card,\n Divider,\n Grid,\n Hidden,\n Tab,\n Tabs,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport classnames from \"classnames\";\n\nimport {\n BulkActionsToolbar,\n BulkExportButton,\n Datagrid,\n DateField,\n DateInput,\n downloadCSV,\n FilterButton,\n ListContextProvider,\n ListToolbar,\n NumberField,\n RefreshButton,\n SimpleList,\n ShowButton,\n TextField,\n Title,\n TopToolbar,\n useListContext,\n useNotify,\n} from \"react-admin\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { ChevronRightIcon } from \"../../../components/common\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { InvoiceStatus, PaymentTerms } from \"../../../utils/constants\";\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\nimport { InvoicePeak } from \"../../../managerApp/resources/invoices/InvoicePeak\";\nimport { InvoiceStatusIcon } from \"../../../managerApp/resources/invoices/InvoiceStatusIcon\";\nimport { getMemo } from \"../../../managerApp/resources/invoices/InvoiceUtils\";\nimport { useUser } from \"../../../authenticatorApp/UserContext\";\n\nconst useStyles = makeStyles((theme) => ({\n listRoot: {\n transition: theme.transitions.create([\"all\"], {\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginTop: 0,\n },\n bulkActions: {\n // [classes.bulkActions] remove to restore original behavior\n marginTop: -theme.spacing(8),\n transition: theme.transitions.create(\"margin-top\"),\n },\n totals: {\n marginLeft: theme.spacing(2),\n },\n}));\n\nconst tabs = [\n { id: InvoiceStatus.PENDING, name: \"Pending\", showSmall: true },\n { id: InvoiceStatus.PAID, name: \"Settled\", showSmall: true },\n];\n\nconst exporter = (invoices, notify, onUnselectItems) => {\n const invoicesForExport = [];\n\n const handleUndefined = (item) => (item ? item : \"\");\n const getTerms = (paymentTerms) =>\n !paymentTerms\n ? \"\"\n : PaymentTerms.find((itm) => itm.id === paymentTerms).name;\n const getServiceName = (invoice, serviceId) => {\n return !invoice.account?.services\n ? \"\"\n : invoice.account.services.items.find((itm) => itm.id === serviceId).name;\n };\n const getServiceDate = (invoice, serviceDate) => {\n return new Date(\n serviceDate ? serviceDate : invoice.createdAt\n ).toLocaleDateString();\n };\n\n try {\n invoices.forEach((invoice) => {\n invoice.lineItems.items.forEach((element, idx) => {\n invoicesForExport.push({\n InvoiceNo: invoice.invoiceNumber,\n Customer: idx === 0 ? invoice.accountName : \"\",\n InvoiceDate:\n idx === 0 ? new Date(invoice.createdAt).toLocaleDateString() : \"\",\n DueDate:\n idx === 0 ? new Date(invoice.dueDate).toLocaleDateString() : \"\",\n Terms:\n idx === 0 && invoice.account\n ? getTerms(invoice.account.paymentTerms)\n : \"\",\n Memo: idx === 0 ? getMemo(invoice) : \"\",\n Item: getServiceName(invoice, element.serviceId),\n ItemDescription: handleUndefined(element.serviceNote),\n ItemQuantity: element.quantity,\n ItemRate: element.unitCost,\n ItemAmount: element.amount,\n ItemTaxCode: element.taxRate.taxCode,\n ItemTaxAmount: element.itemTax,\n Currency: \"USD\",\n ServiceDate: getServiceDate(invoice, element.serviceDate),\n });\n });\n });\n\n jsonExport(\n invoicesForExport,\n {\n rename: [\n \"InvoiceNo\",\n \"Customer\",\n \"InvoiceDate\",\n \"DueDate\",\n \"Terms\",\n \"Memo\",\n \"Item(Product/Service)\",\n \"ItemDescription\",\n \"ItemQuantity\",\n \"ItemRate\",\n \"ItemAmount\",\n \"ItemTaxCode\",\n \"ItemTaxAmount\",\n \"Currency\",\n \"ServiceDate\",\n ], // order fields in the export\n },\n (err, csv) => {\n downloadCSV(csv, `invoices_${new Date().toLocaleDateString()}`); // download as 'invoices_date.csv` file\n }\n );\n } catch (err) {\n logError(\"invoices:InvoiceList:exporter\", err, notify);\n } finally {\n onUnselectItems();\n }\n};\n\nconst InvoiceSearchField = (props) => {\n const { label, alwaysOn } = props;\n const { displayedFilters, filterValues, setFilters } = useListContext(props);\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n setFilters(\n {\n ...filterValues,\n or: [\n { invoiceNumber: { matchPhrasePrefix: `.*${value}.*` } },\n { invoiceNumber: { wildcard: `*${value}*` } },\n { poNumber: { matchPhrasePrefix: `${value}` } },\n { poNumber: { wildcard: `*${value}*` } },\n { railCarNumber: { matchPhrasePrefix: `${value}` } },\n { railCarNumber: { wildcard: `*${value}*` } },\n { pickupNumber: { matchPhrasePrefix: `${value}` } },\n { pickupNumber: { wildcard: `*${value}*` } },\n ],\n },\n displayedFilters\n );\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = (tabValue) => {\n return [\n <InvoiceSearchField label=\"Search\" tabValue={tabValue} alwaysOn />,\n <DateInput\n source=\"createdAt.lte\"\n label=\"Issued Before...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"createdAt.gte\"\n label=\"Issued After...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"dueDate.lte\"\n label=\"Due Before...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"dueDate.gte\"\n label=\"Due After...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n ];\n};\n\nconst BulkListActions = ({ tabValue, ...props }) => {\n const notify = useNotify();\n const { onUnselectItems } = useListContext();\n\n return (\n <BulkExportButton\n {...props}\n exporter={(data) => exporter(data, notify, onUnselectItems)}\n color=\"default\"\n />\n );\n};\n\nconst ListActions = (props) => {\n const { isXSmall } = props;\n\n return !isXSmall ? (\n <TopToolbar>\n <FilterButton />\n <RefreshButton />\n </TopToolbar>\n ) : null;\n};\n\nconst getSessionTab = (appUser) => {\n const sessionTab = Number(\n sessionStorage.getItem(`InvoicesTab_${appUser.id}`)\n );\n if (sessionTab && tabs[sessionTab]) {\n return sessionTab;\n }\n return 0; // Default to the first visible tab if the sessionTab is not valid\n};\n\nexport const InvoiceList = (props) => {\n const { appUser } = useUser();\n const classes = useStyles();\n const isMedium = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n const [tabValue, setStateTabValue] = useState(getSessionTab(appUser));\n\n const [defaultFilter, setDefaultFilter] = useState({\n reloadYardId: appUser.reloadYardId,\n accountIdStatusDueDate: {\n beginsWith: {\n accountId: appUser.accountId,\n status: tabs[tabValue].id,\n },\n },\n });\n const [defaultSearchFilter, setDefaultSearchFilter] = useState({\n reloadYardId: { eq: appUser?.reloadYardId },\n accountId: { eq: appUser.accountId },\n status: { eq: tabs[tabValue].id },\n });\n\n const setTabValue = (value) => {\n debugger;\n setStateTabValue(value);\n setDefaultFilter({\n reloadYardId: appUser.reloadYardId,\n accountIdStatusDueDate: {\n beginsWith: {\n accountId: appUser.accountId,\n status: tabs[value].id,\n },\n },\n });\n setDefaultSearchFilter({\n reloadYardId: { eq: appUser?.reloadYardId },\n accountId: { eq: appUser.accountId },\n status: { eq: tabs[value].id },\n });\n };\n\n // Include key & search to display default sort order.\n const defaultSort = {\n field: `{\"key\":\"invoiceByAccountByStatusByDate\", \"search\":\"dueDate\"}`,\n order: \"DESC\",\n };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = Number(\n localStorage.getItem(`${props.resource}_perPage`)\n );\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? sessionPerPage : 10\n );\n\n const listContext = useSearchableList({\n ...props,\n defaultTitle: \"Invoices\",\n defaultFilter: defaultFilter,\n defaultSearchFilter: defaultSearchFilter,\n defaultPerPage: defaultPerPage,\n defaultSort: defaultSort,\n resource: \"invoices\",\n });\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Invoices\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters(tabValue)}\n actions={<ListActions isXSmall={isXSmall} />}\n />\n <Card\n className={classnames(\n classes.listRoot,\n { [classes.bulkActions]: listContext.selectedIds.length > 0 }\n // [classes.bulkActions] remove to restore original behavior\n )}\n >\n <BulkActionsToolbar>\n <BulkListActions tabValue={tabValue} />\n </BulkActionsToolbar>\n <InvoiceTabs\n {...props}\n {...listContext}\n appUser={appUser}\n tabValue={tabValue}\n setTabValue={setTabValue}\n isXSmall={isXSmall}\n isMedium={isMedium}\n />\n <PaginationToolbar {...props} />\n </Card>\n </ListContextProvider>\n );\n};\n\nconst PaginationToolbar = (props) => {\n const classes = useStyles();\n const listContext = useListContext(props);\n\n var formatter = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n // These options are needed to round to whole numbers if that's what you want.\n //minimumFractionDigits: 0, // (this suffices for whole numbers, but will print 2500.10 as $2,500.1)\n //maximumFractionDigits: 0, // (causes 2500.99 to be printed as $2,501)\n });\n\n const [totals, setTotals] = useState({ subtotal: 0, tax: 0, total: 0 });\n\n useEffect(() => {\n debugger;\n if (listContext?.ids?.length > 0 && listContext?.data) {\n let subtotal = 0,\n tax = 0,\n total = 0;\n\n listContext.ids?.forEach((id) => {\n subtotal += listContext.data[id].subtotal;\n tax += listContext.data[id].tax;\n total += listContext.data[id].total;\n });\n\n setTotals({ subtotal, tax, total });\n }\n }, [listContext]);\n\n return (\n <Grid container direction=\"row\" spacing={1} alignItems=\"center\">\n <Hidden mdDown>\n <Grid item xs={0} md={5}>\n <Typography className={classes.totals}>\n {`SUBTOTAL: ${formatter.format(\n totals.subtotal\n )}, TAX: ${formatter.format(totals.tax)}, TOTAL: ${formatter.format(\n totals.total\n )}`}\n </Typography>\n </Grid>\n </Hidden>\n <Grid item xs={12} md={7}>\n <Pagination {...props} {...listContext} />\n </Grid>\n </Grid>\n );\n};\n\nconst InvoiceTabs = ({ tabValue, setTabValue, setPage, ...props }) => {\n const { isXSmall, appUser } = props;\n\n const handleChange = (event, value) => {\n sessionStorage.setItem(`InvoicesTab_${appUser.id}`, value);\n setPage(1);\n setTabValue(value);\n };\n\n return (\n <>\n <Tabs\n value={Number(tabValue)}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n onChange={handleChange}\n >\n {tabs.map(\n (itm, idx) =>\n (!isXSmall || itm.showSmall) && (\n <Tab key={itm.id} label={itm.name} id={`invoice-${idx}`} />\n )\n )}\n </Tabs>\n <Divider />\n {tabs.map(\n (itm) =>\n itm.id === tabs[tabValue].id && (\n <InvoiceGrid {...props} key={itm.id} tabValue={itm.id} />\n )\n )}\n </>\n );\n};\n\nconst InvoiceGrid = ({ ids, page, tabValue, ...props }) => {\n const { isXSmall, isMedium } = props;\n const hasBulkActions = true;\n\n return isXSmall ? (\n <SimpleList\n primaryText={(record) => record.accountName}\n secondaryText={(record) =>\n `Invoice No: ${record.invoiceNumber} - Due: ${new Date(\n record.dueDate\n ).toLocaleDateString()}`\n }\n tertiaryText={(record) =>\n record.total.toLocaleString(undefined, {\n style: \"currency\",\n currency: \"USD\",\n })\n }\n leftIcon={(record) => <InvoiceStatusIcon record={record} />}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n linkType=\"show\"\n />\n ) : isMedium ? (\n <Datagrid {...props} rowClick=\"show\" hasBulkActions={hasBulkActions}>\n <TextField source=\"invoiceNumber\" label=\"Invoice No.\" sortable={true} />\n <NumberField\n source=\"total\"\n label=\"Amount\"\n sortable={true}\n options={{\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }}\n />\n <InvoiceStatusIcon source=\"status\" label=\"Status\" sortable={false} />\n </Datagrid>\n ) : (\n <Datagrid\n {...props}\n rowClick=\"show\"\n hasBulkActions={hasBulkActions}\n expand={<InvoicePeak />}\n >\n <TextField source=\"poNumber\" label=\"PO Number\" sortable={true} />\n <TextField source=\"invoiceNumber\" label=\"Invoice No.\" sortable={true} />\n <NumberField\n source=\"total\"\n label=\"Amount Due\"\n sortable={true}\n options={{\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }}\n />\n <DateField\n source=\"dueDate\"\n sortable={true}\n sortBy={`{\"key\":\"invoiceByStatusByAccountByDate\", \"search\":\"dueDate\"}`}\n />\n <InvoiceStatusIcon source=\"status\" label=\"Status\" sortable={false} />\n {tabValue === InvoiceStatus.PENDING ? (\n <DateField source=\"sentDate\" label=\"Sent\" sortable={true} />\n ) : null}\n {tabValue === InvoiceStatus.PAID ? (\n <DateField source=\"paidDate\" label=\"Settled\" sortable={true} />\n ) : null}\n <ShowButton />\n </Datagrid>\n );\n};\n","import * as React from \"react\";\n\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from \"@material-ui/core\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles({\n text: {\n \"@media print\": {\n color: \"#000\",\n },\n },\n});\n\nconst ServiceRow = ({ item, services }) => {\n const classes = useStyles();\n const service = services.find((itm) => itm.id === item.serviceId);\n let serviceName = service ? service.name : null;\n\n if (!serviceName) return null;\n return (\n <TableRow key={item.serviceId} id={item.serviceId}>\n <TableCell\n colSpan={2}\n style={{ textAlign: \"left\" }}\n className={classes.text}\n >\n {serviceName}\n {item.quantity && item.units ? ` : ${item.quantity} ${item.units}` : ``}\n {item.quantity && item.units\n ? ` @ ${item.unitCost.toLocaleString(undefined, {\n style: \"currency\",\n currency: \"USD\",\n })} / ${item.units}`\n : ``}\n {item.serviceNote ? (\n <>\n <br /> <strong> Note: </strong> {item.serviceNote}\n </>\n ) : null}\n </TableCell>\n <TableCell style={{ textAlign: \"right\" }} className={classes.text}>\n {item.amount\n ? item.amount.toLocaleString(undefined, {\n style: \"currency\",\n currency: \"USD\",\n })\n : \"$ 0.00\"}\n </TableCell>\n <TableCell style={{ textAlign: \"right\" }} className={classes.text}>\n {item.itemTax\n ? item.amount.toLocaleString(undefined, {\n style: \"currency\",\n currency: \"USD\",\n })\n : \"$ 0.00\"}\n </TableCell>\n </TableRow>\n );\n};\n\nexport const Ledger = ({ record, services }) => {\n const classes = useStyles();\n\n if (!record.lineItems?.items) return null;\n return (\n <Table id=\"ledger\" key=\"ledger\" style={{ width: \"100%\" }}>\n <TableHead>\n <TableRow>\n <TableCell\n colSpan={2}\n style={{ textAlign: \"left\" }}\n className={classes.text}\n >\n <Typography variant=\"h5\"> Services(s) </Typography>\n </TableCell>\n <TableCell style={{ textAlign: \"right\" }} className={classes.text}>\n <Typography variant=\"h5\"> Charges </Typography>\n </TableCell>\n <TableCell style={{ textAlign: \"right\" }} className={classes.text}>\n <Typography variant=\"h5\"> Tax </Typography>\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {record.lineItems.items.map((item) => (\n <ServiceRow item={item} services={services} />\n ))}\n <TableRow>\n <TableCell\n colSpan={3}\n style={{ textAlign: \"right\" }}\n className={classes.text}\n >\n <strong> Sub-total: </strong>\n </TableCell>\n <TableCell style={{ textAlign: \"right\" }} className={classes.text}>\n {record.subtotal.toLocaleString(undefined, {\n style: \"currency\",\n currency: \"USD\",\n })}\n </TableCell>\n </TableRow>\n {record.discount && Number(record.discount) > 0 ? (\n <TableRow>\n <TableCell\n colSpan={3}\n style={{ textAlign: \"right\" }}\n className={classes.text}\n >\n <strong> Discount: </strong>\n </TableCell>\n <TableCell style={{ textAlign: \"right\" }} className={classes.text}>\n {record.discount.toLocaleString(undefined, {\n style: \"currency\",\n currency: \"USD\",\n })}\n </TableCell>\n </TableRow>\n ) : null}\n {record.adjustment && Number(record.adjustment) > 0 ? (\n <TableRow>\n <TableCell\n colSpan={3}\n style={{ textAlign: \"right\" }}\n className={classes.text}\n >\n <strong> Adjustment: </strong>\n </TableCell>\n <TableCell style={{ textAlign: \"right\" }} className={classes.text}>\n {record.adjustment.toLocaleString(undefined, {\n style: \"currency\",\n currency: \"USD\",\n })}\n </TableCell>\n </TableRow>\n ) : null}\n <TableRow>\n <TableCell\n colSpan={3}\n style={{ textAlign: \"right\" }}\n className={classes.text}\n >\n <strong> Taxes: </strong>\n </TableCell>\n <TableCell style={{ textAlign: \"right\" }} className={classes.text}>\n {record.tax.toLocaleString(undefined, {\n style: \"currency\",\n currency: \"USD\",\n })}\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell\n colSpan={3}\n style={{ textAlign: \"right\" }}\n className={classes.text}\n >\n <strong> Total: </strong>\n </TableCell>\n <TableCell style={{ textAlign: \"right\" }} className={classes.text}>\n {record.total.toLocaleString(undefined, {\n style: \"currency\",\n currency: \"USD\",\n })}\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell colSpan={4}> </TableCell>\n </TableRow>\n <TableRow>\n <TableCell colSpan={4} className={classes.text}>\n {\" \"}\n <strong> Notes: </strong> {record.notes}{\" \"}\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n );\n};\n","// OutboundShoe: Latest commit 061d83c on Apr 2, 2022\n\nimport React from \"react\";\nimport { TextField, NumberField } from \"react-admin\";\n\nimport {\n Divider,\n Grid,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n padding: theme.spacing(2),\n \"@media print\": {\n display: \"block\",\n minWidth: \"1200px\",\n margin: \"0\",\n padding: \"50px !important\",\n },\n },\n break: {\n \"@media print\": {\n display: \"block\",\n pageBreakBefore: \"auto\",\n },\n },\n text: {\n \"@media print\": {\n color: \"#000\",\n },\n },\n}));\n\nconst HeaderBlock = ({ record, ...props }) => {\n return (\n <Grid container fullwidth spacing={3}>\n <Grid item xs={12} align=\"center\">\n <Typography variant=\"h6\" gutterBottom>\n {\" \"}\n INBOUND MANIFEST{\" \"}\n </Typography>\n </Grid>\n <Grid item xs={12} align=\"center\">\n {\" \"}\n <Divider />{\" \"}\n </Grid>\n </Grid>\n );\n};\n\nconst InfoBlock = ({ record, ...props }) => {\n const classes = useStyles();\n\n return (\n <Table style={{ width: \"100%\" }}>\n <TableBody>\n <TableRow>\n <TableCell style={{ textAlign: \"center\" }} className={classes.text}>\n <Typography variant=\"h6\"> Shipment Date: </Typography>\n {new Date(\n record.inboundShipment.placedDateTime\n ).toLocaleDateString()}{\" \"}\n <br />\n </TableCell>\n <TableCell style={{ textAlign: \"center\" }} className={classes.text}>\n <Typography variant=\"h6\"> Carrier: </Typography>\n {record.inboundShipment.originCarrier} <br />\n </TableCell>\n <TableCell style={{ textAlign: \"center\" }} className={classes.text}>\n <Typography variant=\"h6\"> Car/Trl Number: </Typography>\n {record.inboundShipment.railCarNumber} <br />\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n );\n};\n\nconst LineItemsBlock = ({ record, ...props }) => {\n const classes = useStyles();\n\n return (\n <Grid container fullwidth spacing={3}>\n <Grid item xs={12} align=\"center\">\n {\" \"}\n <Divider />{\" \"}\n </Grid>\n <Grid item xs={12}>\n {\" \"}\n <Typography variant=\"h6\"> Inbound Inventory: </Typography>{\" \"}\n </Grid>\n <Grid item xs={12}>\n <Table\n id=\"inboundInventory\"\n key=\"inboundInventory\"\n style={{ width: \"100%\" }}\n >\n <TableHead>\n <TableRow>\n <TableCell\n colSpan={2}\n style={{ textAlign: \"left\" }}\n className={classes.text}\n >\n <Typography variant=\"overline\"> Product Code </Typography>\n </TableCell>\n <TableCell style={{ textAlign: \"left\" }} className={classes.text}>\n <Typography variant=\"overline\"> Product Name </Typography>\n </TableCell>\n <TableCell style={{ textAlign: \"left\" }} className={classes.text}>\n <Typography variant=\"overline\"> Lot Number </Typography>\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\" }}\n className={classes.text}\n >\n <Typography variant=\"overline\"> Quantity </Typography>\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {record.inboundShipment.inventories?.items?.map((lineItem) => (\n <TableRow>\n <TableCell\n colSpan={2}\n style={{ textAlign: \"left\" }}\n className={classes.text}\n >\n <TextField\n source=\"productCode\"\n label=\"Product Code\"\n record={lineItem}\n />\n </TableCell>\n <TableCell\n style={{ textAlign: \"left\" }}\n className={classes.text}\n >\n <TextField\n source=\"productName\"\n label=\"Product Name\"\n record={lineItem}\n />\n </TableCell>\n <TableCell\n style={{ textAlign: \"left\" }}\n className={classes.text}\n >\n <TextField\n source=\"lotNumber\"\n label=\"Lot Number\"\n record={lineItem}\n />\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\" }}\n className={classes.text}\n >\n <NumberField\n source=\"quantityShipped\"\n label=\"Quantity\"\n record={lineItem}\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Grid>\n </Grid>\n );\n};\n\nconst InvoiceShowInboundBlock = ({ record, ...props }) => {\n return (\n <Grid\n container\n fullwidth\n spacing={3}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <Grid item xs={12} align=\"center\">\n <HeaderBlock record={record} {...props} />\n <InfoBlock record={record} {...props} />\n <LineItemsBlock record={record} {...props} />\n </Grid>\n </Grid>\n );\n};\n\nexport default InvoiceShowInboundBlock;\n","// OutboundShoe: Latest commit 061d83c on Apr 2, 2022\n\nimport React from \"react\";\nimport { TextField, NumberField } from \"react-admin\";\n\nimport {\n Divider,\n Grid,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n padding: theme.spacing(2),\n \"@media print\": {\n display: \"block\",\n minWidth: \"1200px\",\n margin: \"0\",\n padding: \"50px !important\",\n },\n },\n break: {\n \"@media print\": {\n display: \"block\",\n pageBreakBefore: \"auto\",\n },\n },\n text: {\n \"@media print\": {\n color: \"#000\",\n },\n },\n}));\n\nconst HeaderBlock = (props) => {\n return (\n <Grid container fullwidth spacing={3}>\n <Grid item xs={12} align=\"center\">\n <Typography variant=\"h6\" gutterBottom>\n {\" \"}\n OUTBOUND MANIFEST\n </Typography>\n </Grid>\n <Grid item xs={12} align=\"center\">\n {\" \"}\n <Divider />{\" \"}\n </Grid>\n </Grid>\n );\n};\n\nconst InfoBlock = ({ record, ...props }) => {\n const classes = useStyles();\n\n return (\n <Table style={{ width: \"100%\" }}>\n <TableBody>\n <TableRow>\n <TableCell style={{ textAlign: \"center\" }} className={classes.text}>\n <Typography variant=\"h6\"> Shipment Date: </Typography>\n {new Date(\n record.outboundShipment.departureDateTime\n ).toLocaleDateString()}{\" \"}\n <br />\n </TableCell>\n <TableCell style={{ textAlign: \"center\" }} className={classes.text}>\n <Typography variant=\"h6\"> Pickup Number: </Typography>\n {record.outboundShipment.pickupNumber} <br />\n </TableCell>\n <TableCell style={{ textAlign: \"center\" }} className={classes.text}>\n <Typography variant=\"h6\"> Carrier: </Typography>\n {record.outboundShipment.carrier} <br />\n </TableCell>\n <TableCell style={{ textAlign: \"center\" }} className={classes.text}>\n <Typography variant=\"h6\"> Car/Trl Number: </Typography>\n {record.outboundShipment.railCarNumber} <br />\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n );\n};\n\nconst LineItemsBlock = ({ record, ...props }) => {\n const classes = useStyles();\n\n return (\n <Grid container fullwidth spacing={3}>\n <Grid item xs={12} align=\"center\">\n {\" \"}\n <Divider />{\" \"}\n </Grid>\n <Grid item xs={12}>\n {\" \"}\n <Typography variant=\"h6\"> Outbound Inventory: </Typography>{\" \"}\n </Grid>\n <Grid item xs={12}>\n <Table\n id=\"outboundInventory\"\n key=\"outboundInventory\"\n style={{ width: \"100%\" }}\n >\n <TableHead>\n <TableRow>\n <TableCell\n colSpan={2}\n style={{ textAlign: \"left\" }}\n className={classes.text}\n >\n <Typography variant=\"overline\"> Product Code </Typography>\n </TableCell>\n <TableCell style={{ textAlign: \"left\" }} className={classes.text}>\n <Typography variant=\"overline\"> Product Name </Typography>\n </TableCell>\n <TableCell style={{ textAlign: \"left\" }} className={classes.text}>\n <Typography variant=\"overline\"> Lot Number </Typography>\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\" }}\n className={classes.text}\n >\n <Typography variant=\"overline\"> Quantity </Typography>\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {record.outboundShipment.shipmentLineItems.items.map((lineItem) => (\n <TableRow>\n <TableCell\n colSpan={2}\n style={{ textAlign: \"left\" }}\n className={classes.text}\n >\n <TextField\n source=\"inventory.productCode\"\n label=\"Product Code\"\n record={lineItem}\n />\n </TableCell>\n <TableCell\n style={{ textAlign: \"left\" }}\n className={classes.text}\n >\n <TextField\n source=\"inventory.productName\"\n label=\"Product Name\"\n record={lineItem}\n />\n </TableCell>\n <TableCell\n style={{ textAlign: \"left\" }}\n className={classes.text}\n >\n <TextField\n source=\"inventory.lotNumber\"\n label=\"Lot Number\"\n record={lineItem}\n />\n </TableCell>\n <TableCell\n style={{ textAlign: \"right\" }}\n className={classes.text}\n >\n <NumberField\n source=\"totalQuantityToPick\"\n label=\"Quantity\"\n record={lineItem}\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Grid>\n </Grid>\n );\n};\n\nconst InvoiceShowOutboundBlock = ({ record, ...props }) => {\n const classes = useStyles();\n\n return (\n <Grid\n container\n fullwidth\n spacing={3}\n alignItems=\"center\"\n justifyContent=\"center\"\n className={classes.root}\n >\n <Grid item xs={12} align=\"center\">\n <HeaderBlock {...props} />\n <InfoBlock record={record} {...props} />\n <LineItemsBlock record={record} {...props} />\n </Grid>\n </Grid>\n );\n};\n\nexport default InvoiceShowOutboundBlock;\n","import React, { useEffect, useState, useRef } from \"react\";\nimport ReactDOMServer from \"react-dom/server\";\n\nimport ReactToPrint from \"react-to-print\";\n// import prettier from \"prettier\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { serviceByAccountByStatusByName } from \"../../../graphql/queries\";\n\nimport {\n Backdrop,\n CircularProgress,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Divider,\n Grid,\n makeStyles,\n Paper,\n Switch,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n TextField as InputField,\n Typography,\n} from \"@material-ui/core\";\n\nimport {\n Button,\n Loading,\n Show,\n SimpleShowLayout,\n TopToolbar,\n useNotify,\n useShowController,\n} from \"react-admin\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n InvoiceStatus,\n PaymentTerms,\n REGEX_MULTI_EMAIL,\n ServiceStatus,\n} from \"../../../utils/constants\";\nimport {\n getFilePublicURL,\n getKeyFilename,\n getPhotoUrl,\n} from \"../../../utils/fileUtils\";\nimport { getBackPath, splitEmails } from \"../../../utils/utils\";\n\nimport { CancelIcon, EmailIcon, PrintIcon } from \"../../../components/common\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { getCustomFieldsTable } from \"../../../components/common/CustomFields\";\nimport { Ledger } from \"../../../managerApp/resources/invoices/Ledger\";\nimport InvoiceShowInboundBlock from \"../../../managerApp/resources/invoices/InvoiceShowInboundBlock\";\nimport InvoiceShowOutboundBlock from \"../../../managerApp/resources/invoices/InvoiceShowOutboundBlock\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n padding: \"0px\",\n \"@media print\": {\n display: \"block\",\n minWidth: \"1200px\",\n margin: \"0\",\n padding: \"50px !important\",\n },\n },\n logo: {\n margin: \"0 auto 0\",\n width: \"auto\",\n maxWidth: \"90%\",\n height: \"auto\",\n minHeight: \"5em\",\n maxHeight: \"5em\",\n borderRadius: \"6px\",\n },\n text: {\n \"@media print\": {\n color: \"#000\",\n },\n },\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: \"#fff\",\n },\n}));\n\nconst sendInvoice = (\n services,\n notify,\n toEmail,\n cc,\n encloseAttachments,\n setSending,\n setEmailOpen,\n props\n) => {\n debugger;\n setSending(true);\n const record = props.data;\n\n let htmlDoc = ReactDOMServer.renderToString(\n <EmailInvoiceBody\n record={record}\n services={services}\n encloseAttachments={encloseAttachments}\n {...props}\n />\n );\n // let prettyHtml = prettier.format(htmlDoc, { parser: \"html\" });\n\n const subject = record.poNumber\n ? `Invoice No: ${record.invoiceNumber}, PO No: ${record.poNumber} from ${record.reloadYard.name}`\n : `Invoice No: ${record.invoiceNumber} from ${record.reloadYard.name}`;\n\n const emailBody = {\n from: \"no_reply transloads.co <invoices@transloads.co>\",\n to: splitEmails(toEmail),\n cc: cc ? splitEmails(cc) : undefined,\n // bcc: [\"support@transloads.co\"],\n // replyTo: getReplyToAddress(),\n subject: subject,\n template: \"emailTemplateWide.html\",\n htmlContent: htmlDoc,\n attachPDF: true,\n };\n\n // Asynchronous function to handle email sending and conditional invoice update\n const handleEmailSending = async () => {\n try {\n const response = await API.post(\"transREST\", \"/sendEmail\", {\n body: emailBody,\n });\n\n if (response.status !== \"success\") {\n notify(\"Error occurred while sending email.\", \"error\");\n logError(\n \"invoices:InvoiceShow:sendInvoice:handleEmailSending:\" + emailBody,\n response,\n false\n );\n\n throw new Error(\"Email delivery failed\");\n }\n notify(\"Email sent.\", \"info\");\n } catch (error) {\n logError(\"invoices:InvoiceShow:sendInvoice\", error, false);\n }\n };\n\n // Call the handleEmailSending function without awaiting it\n handleEmailSending();\n setEmailOpen(false);\n setSending(false);\n};\n\nconst HeaderBlock = ({ record, ...props }) => {\n const classes = useStyles();\n const logoImage = window.appUser?.reloadYard?.logoImage;\n const logoURL = logoImage ? getPhotoUrl(logoImage.key, 128) : null;\n\n return (\n <Table style={{ width: \"100%\" }} className={classes.text}>\n <TableHead>\n <TableRow>\n <TableCell style={{ textAlign: \"left\" }}>\n {logoURL && (\n <img alt=\"Yard Logo\" src={logoURL} className={classes.logo} />\n )}\n </TableCell>\n <TableCell style={{ textAlign: \"center\" }} className={classes.text}>\n <Typography variant=\"h5\"> Invoice No: </Typography>\n <Typography variant=\"h6\"> {record.invoiceNumber} </Typography>\n </TableCell>\n <TableCell style={{ textAlign: \"right\" }} className={classes.text}>\n <Typography variant=\"h5\"> Invoice Date: </Typography>\n <Typography variant=\"h6\">\n {\" \"}\n {new Date(record.createdAt).toLocaleDateString()}{\" \"}\n </Typography>\n </TableCell>\n </TableRow>\n </TableHead>\n </Table>\n );\n};\n\nconst FromToBlock = ({ record, ...props }) => {\n const classes = useStyles();\n var reloadYard = record.reloadYard;\n const toAddress = record.account?.billingAddress;\n\n return (\n <Table style={{ width: \"100%\" }}>\n <TableHead>\n <TableRow>\n <TableCell style={{ textAlign: \"left\" }} className={classes.text}>\n <Typography variant=\"h5\"> Remit To: </Typography>\n </TableCell>\n <TableCell style={{ textAlign: \"left\" }} className={classes.text}>\n <Typography variant=\"h5\"> Bill To: </Typography>\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell style={{ textAlign: \"left\" }} className={classes.text}>\n <strong> {record.reloadYard.name} </strong> <br />\n {reloadYard.street} <br />\n {reloadYard.city} {reloadYard.state} {reloadYard.zipCode} <br />\n Phone: {record.reloadYard.phone} <br />\n </TableCell>\n <TableCell style={{ textAlign: \"left\" }} className={classes.text}>\n <strong> {toAddress?.name || record.accountName} </strong> <br />\n {record.contact ? (\n <>\n Attn: {record.contact.name} <br />{\" \"}\n </>\n ) : (\n \"\"\n )}\n {toAddress?.street} <br />\n {toAddress?.city} {toAddress?.state} {toAddress?.zipCode} <br />\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n );\n};\n\nconst getTerms = (paymentTerms) => {\n const term = !paymentTerms\n ? \"\"\n : PaymentTerms.find((itm) => itm.id === paymentTerms);\n return term?.name ? term.name : \"\";\n};\n\nconst InfoBlock = ({ record, ...props }) => {\n const classes = useStyles();\n\n return (\n <div style={{ width: \"100%\" }}>\n <Table id=\"InfoBlock1\" key=\"InfoBlock1\" style={{ width: \"100%\" }}>\n <TableBody>\n <TableRow>\n <TableCell style={{ textAlign: \"center\" }} className={classes.text}>\n <Typography variant=\"h5\"> Due Date: </Typography>\n {new Date(record.dueDate).toLocaleDateString()} <br />\n </TableCell>\n <TableCell style={{ textAlign: \"center\" }} className={classes.text}>\n {record.status === InvoiceStatus.PAID ? (\n <Typography variant=\"h5\"> SETTLED </Typography>\n ) : (\n <>\n <Typography variant=\"h5\"> Terms: </Typography>\n {getTerms(record.account.paymentTerms)} <br />\n </>\n )}\n </TableCell>\n <TableCell style={{ textAlign: \"center\" }} className={classes.text}>\n <Typography variant=\"h5\"> PO Number: </Typography>\n {record.poNumber} <br />\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </div>\n );\n};\n\nconst LedgerBlock = ({ record, services, ...props }) => {\n // using Grid instead of table does not require classes for text\n return (\n <Grid container spacing={2}>\n <Grid item xs={12}>\n {\" \"}\n <Typography variant=\"h6\"> Services & Charges: </Typography>{\" \"}\n </Grid>\n <Grid item xs={12}>\n <Ledger record={record} services={services} />\n </Grid>\n <Grid item xs={12}>\n {getCustomFieldsTable(\n record?.account?.invoiceCustomFields,\n record.customFields\n )}\n </Grid>\n </Grid>\n );\n};\n\nconst FooterBlock = ({ record, ...props }) => {\n if (record.inboundShipment)\n return <InvoiceShowInboundBlock record={record} />;\n if (record.outboundShipment)\n return <InvoiceShowOutboundBlock record={record} />;\n return null;\n};\n\nconst AttachmentsBlock = ({ record }) => {\n const attachments =\n record.attachments?.length > 0 ? record.attachments : null;\n\n if (!attachments) return <></>;\n return (\n <div style={{ width: \"100%\" }}>\n <div>\n <Divider />\n </div>\n <Table id=\"invoiceDocs\" key=\"invoiceDocs\" style={{ width: \"100%\" }}>\n <TableBody>\n {attachments?.map((row) => (\n <TableRow>\n <TableCell style={{ textAlign: \"left\" }}>\n {row.key && (\n <a\n href={getFilePublicURL(row.key)}\n style={{\n margin: \"0 auto\",\n width: \"auto\",\n maxWidth: \"90%\",\n }}\n >\n {getKeyFilename(row.key)}\n </a>\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nconst PrintableInvoiceBlock = ({\n record,\n services,\n encloseAttachments,\n ...props\n}) => {\n const classes = useStyles();\n\n if (!record) return null;\n return (\n <Grid\n container\n spacing={1}\n alignItems=\"center\"\n justifyContent=\"center\"\n className={classes.root}\n >\n <Grid item xs={12} align=\"center\">\n <HeaderBlock record={record} {...props} />\n <Divider />\n <FromToBlock record={record} {...props} />\n <Divider />\n <InfoBlock record={record} {...props} />\n <Divider />\n <span> </span>\n <LedgerBlock record={record} services={services} {...props} />\n <FooterBlock record={record} {...props} />\n {encloseAttachments && <AttachmentsBlock record={record} />}\n </Grid>\n </Grid>\n );\n};\n\nconst EmailInvoiceBody = ({\n record,\n services,\n encloseAttachments,\n ...props\n}) => {\n return (\n <Paper elevation={0} style={{ maxWidth: \"800px\", margin: \"auto\" }}>\n <PrintableInvoiceBlock\n record={record}\n services={services}\n encloseAttachments={encloseAttachments}\n {...props}\n />\n </Paper>\n );\n};\n\nclass PrintableInvoice extends React.PureComponent {\n render() {\n const { record, services, ...props } = this.props;\n return (\n <PrintableInvoiceBlock record={record} services={services} {...props} />\n );\n }\n}\n\nconst InvoiceActions = ({\n record,\n services,\n backPath,\n invRef,\n notify,\n ...props\n}) => {\n const classes = useStyles();\n const [email, setEmail] = useState(\n props.data?.account ? props.data.account.billingEmail : undefined\n );\n const [isEmailValid, setIsEmailValid] = useState(true);\n const [cc, setCC] = useState(\n props.data?.account?.billingContacts\n ? props.data.account.billingContacts\n .map((contact) => contact.email)\n .join(\", \")\n : \"\"\n );\n const [encloseAttachments, setEncloseAttachments] = useState(\n record.account?.invoiceAttachments\n );\n const [emailOpen, setEmailOpen] = useState(false);\n const [sending, setSending] = useState(false);\n\n const handleEmailChange = (event) => {\n const emailInput = event.target.value;\n setEmail(emailInput);\n };\n\n const handleEmailBlur = () => {\n setIsEmailValid(validateEmail(email));\n };\n\n const validateEmail = (email) => {\n if (email) return REGEX_MULTI_EMAIL.test(email.trim());\n return true;\n };\n\n const handleSubmit = () => {\n const valid = validateEmail(email);\n if (valid) setIsEmailValid(valid);\n else return;\n\n sendInvoice(\n services,\n notify,\n email,\n cc,\n encloseAttachments,\n setSending,\n setEmailOpen,\n props\n );\n };\n\n return (\n <TopToolbar>\n <Button\n {...props}\n label=\"Send\"\n color=\"primary\"\n onClick={() => setEmailOpen(true)}\n >\n <EmailIcon />\n </Button>\n <ReactToPrint\n trigger={() => (\n <Button\n {...props}\n label=\"Print\"\n color=\"primary\"\n startIcon={<PrintIcon />}\n />\n )}\n content={() => invRef.current}\n documentTitle={\"Transloads_Invoice\"}\n />\n <BackButton {...props} backPath={backPath} />\n <Dialog\n open={emailOpen}\n maxWidth=\"sm\"\n onClose={() => setEmailOpen(false)}\n fullWidth\n >\n <DialogTitle>Send Invoice</DialogTitle>\n <DialogContent>\n <Backdrop className={classes.backdrop} open={sending}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <InputField\n label=\"To email\"\n size=\"small\"\n variant=\"outlined\"\n fullWidth\n required\n value={email}\n error={!isEmailValid} // Display error state based on validation\n helperText={\n !isEmailValid ? \"Please enter a valid email address.\" : false\n }\n onChange={handleEmailChange}\n onBlur={handleEmailBlur}\n />\n </Grid>\n <Grid item xs={12}>\n <InputField\n label=\"CC\"\n size=\"small\"\n variant=\"outlined\"\n fullWidth\n helperText=\"Comma-seperated email(s)\"\n value={cc}\n onChange={(event) => setCC(event.target.value)}\n />\n </Grid>\n <Grid item xs={12}>\n <Switch\n name=\"enclose-attachments\"\n color=\"primary\"\n checked={encloseAttachments}\n onChange={() => setEncloseAttachments(!encloseAttachments)}\n />\n <Typography component=\"span\">Enclose Attachments</Typography>\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button\n label=\"CANCEL\"\n color=\"default\"\n onClick={() => setEmailOpen(false)}\n >\n <CancelIcon />\n </Button>\n <Button\n label=\"SEND\"\n color=\"primary\"\n disabled={!email}\n onClick={handleSubmit}\n >\n <EmailIcon />\n </Button>\n </DialogActions>\n </Dialog>\n </TopToolbar>\n );\n};\n\nexport const InvoiceShow = (props) => {\n const notify = useNotify();\n const invRef = useRef();\n const isComponentMounted = useRef(true);\n const { record } = useShowController(props);\n const [services, setServices] = useState([]);\n const backPath = getBackPath(props);\n\n useEffect(() => {\n debugger;\n if (isComponentMounted && record) getServices();\n return () => (isComponentMounted.current = false);\n }, []);\n\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n const getServices = async () => {\n try {\n setLoading(true);\n let resp = await API.graphql(\n graphqlOperation(serviceByAccountByStatusByName, {\n accountId: record.accountId,\n statusName: { beginsWith: { status: ServiceStatus.AVAILABLE } },\n sortDirection: \"ASC\",\n })\n );\n let serviceData = resp.data.serviceByAccountByStatusByName?.items;\n setServices(serviceData);\n debugger;\n } catch (err) {\n setError(true);\n logError(\"invoices:InvoiceShow:getServices\", err, notify);\n }\n setLoading(false);\n };\n\n if (loading) return <Loading />;\n if (!record || !record.reloadYard || error) return null;\n return (\n <Show\n {...props}\n title=\" \"\n actions={\n <InvoiceActions\n record={record}\n services={services}\n backPath={backPath}\n invRef={invRef}\n notify={notify}\n />\n }\n >\n <SimpleShowLayout>\n <PrintableInvoice record={record} services={services} ref={invRef} />\n </SimpleShowLayout>\n </Show>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { CircularProgress, MenuItem } from \"@material-ui/core\";\nimport DownloadIcon from \"@material-ui/icons/GetApp\";\n\nimport {\n fetchRelatedRecords,\n useDataProvider,\n useNotify,\n useListContext,\n useResourceContext,\n} from \"ra-core\";\n\nimport { Button } from \"react-admin\";\nimport { logError } from \"../../utils/appUtils\";\nimport { MAX_INVENTORY_QUERY_LIMIT } from \"../../utils/constants\";\n\nconst BaseExport = ({\n maxResults = MAX_INVENTORY_QUERY_LIMIT,\n onClick,\n exporter: customExporter,\n disabled: disabledProp,\n renderView,\n ...rest\n}) => {\n const {\n filter,\n filterValues,\n exporter: exporterFromContext,\n total,\n ids,\n } = useListContext(rest);\n const resource = useResourceContext(rest);\n const exporter = customExporter || exporterFromContext;\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const [loading, setLoading] = useState(false);\n\n const handleClick = async (event) => {\n if (typeof onClick === \"function\") {\n onClick(event);\n }\n setLoading(true);\n debugger;\n try {\n let data = [];\n\n if (total !== 0 || ids.length !== 0) {\n let page = 1;\n let runningTotal = 0;\n\n const combinedFilter = filter\n ? { ...filterValues, ...filter }\n : filterValues;\n\n let response = await dataProvider.getList(resource, {\n sort: {}, // remove sort to eliminate duplicates (DataProvider querySignature)\n filter: combinedFilter,\n pagination: { page: page, perPage: maxResults },\n });\n data = data.concat(response.data);\n runningTotal = response.data.length;\n\n while (response.total > runningTotal) {\n page++;\n response = await dataProvider.getList(resource, {\n sort: {},\n filter: combinedFilter,\n pagination: { page: page, perPage: maxResults },\n });\n data = data.concat(response.data);\n runningTotal += response.data.length;\n }\n }\n\n exporter &&\n (await exporter(\n data,\n fetchRelatedRecords(dataProvider),\n dataProvider,\n resource,\n filter\n ));\n } catch (error) {\n logError(\"common:BaseExport:handleClick\", error, notify);\n } finally {\n setLoading(false);\n }\n };\n\n return renderView({\n handleClick,\n loading,\n disabled: disabledProp || total === 0 || ids.length === 0 || loading,\n ...rest,\n });\n};\n\nconst ExportButton = (props) => (\n <BaseExport\n {...props}\n renderView={({ handleClick, loading, disabled }) => (\n <Button\n label={props.label || \"ra.action.export\"}\n disabled={disabled}\n onClick={handleClick}\n >\n {loading ? (\n <CircularProgress color=\"inherit\" size={17} />\n ) : (\n <DownloadIcon />\n )}\n </Button>\n )}\n />\n);\n\nexport const ExportMenuItem = ({ children, ...props }) => (\n <BaseExport\n {...props}\n renderView={({ handleClick, disabled }) => (\n <MenuItem disabled={disabled} onClick={handleClick}>\n {props.label}\n {children}\n </MenuItem>\n )}\n />\n);\n\nexport default ExportButton;\n","import React from \"react\";\n\nimport { Tooltip } from \"@material-ui/core\";\nimport AcceptedIcon from \"@material-ui/icons/CheckCircleOutline\";\nimport AcceptedStoredIcon from \"@material-ui/icons/OfflinePinOutlined\";\nimport VerifiedStoredIcon from \"@material-ui/icons/ErrorOutline\";\nimport RejectedIcon from \"@material-ui/icons/HighlightOff\";\nimport SecondaryReviewIcon from \"@material-ui/icons/RotateRight\";\nimport { green, orange, red } from \"@material-ui/core/colors\";\n\nimport { RemoveIcon, WarningIcon } from \"../../../components/common\";\nimport { InboundState } from \"../../../utils/constants\";\n\nexport const InboundStateIcon = ({ record, ...props }) => {\n if (!record) return null;\n else\n return record.verificationRequired === \"true\" ? (\n <Tooltip title=\"Approval Required\" placement=\"right\" arrow>\n <WarningIcon style={{ color: orange[600] }} />\n </Tooltip>\n ) : record.verificationRequired === \"resolved\" &&\n record.state === InboundState.PROCESS_INVENTORY ? (\n <Tooltip title=\"Verified & Accepted\" placement=\"right\" arrow>\n <WarningIcon style={{ color: green[600] }} />\n </Tooltip>\n ) : record.verificationRequired === \"resolved\" &&\n record.state === InboundState.COMPLETED ? (\n <Tooltip title=\"Verified, Accepted, Stored\" placement=\"right\" arrow>\n <VerifiedStoredIcon style={{ color: green[600] }} />\n </Tooltip>\n ) : (!record.verificationRequired ||\n record.verificationRequired === \"false\") &&\n record.state === InboundState.PROCESS_INVENTORY ? (\n <Tooltip title=\"Accepted\" placement=\"right\" arrow>\n <AcceptedIcon style={{ color: green[600] }} />\n </Tooltip>\n ) : (!record.verificationRequired ||\n record.verificationRequired === \"false\") &&\n record.state === InboundState.COMPLETED ? (\n <Tooltip title=\"Accepted, Stored\" placement=\"right\" arrow>\n <AcceptedStoredIcon style={{ color: green[600] }} />\n </Tooltip>\n ) : record.state === InboundState.PROCESS_INVENTORY_REVIEW ? (\n <Tooltip title=\"Secondary Review\" placement=\"right\" arrow>\n <SecondaryReviewIcon style={{ color: green[700] }} />\n </Tooltip>\n ) : record.state === InboundState.APPROVE_INVENTORY_REVIEW ? (\n <Tooltip title=\"Review Approval Required\" placement=\"right\" arrow>\n <SecondaryReviewIcon style={{ color: red[700] }} />\n </Tooltip>\n ) : record.state === InboundState.REJECTED ? (\n <Tooltip title=\"Rejected\" placement=\"right\" arrow>\n <RejectedIcon style={{ color: red[700] }} />\n </Tooltip>\n ) : (\n <Tooltip title=\"Not Accepted\" placement=\"right\" arrow>\n <RemoveIcon color=\"disabled\" />\n </Tooltip>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport jsonExport from \"jsonexport/dist\";\n\nimport { Card, Divider, Tab, Tabs, useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n CreateButton,\n Datagrid,\n DateField,\n DateInput,\n downloadCSV,\n FilterButton,\n FunctionField,\n ListContextProvider,\n ListToolbar,\n RefreshButton,\n ShowButton,\n SimpleList,\n TextField,\n Title,\n TopToolbar,\n useListContext,\n} from \"react-admin\";\n\nimport { ChevronRightIcon } from \"../../../components/common\";\nimport { BetaBadge } from \"../../../components/common/FeatureBadges\";\nimport ExportButton from \"../../../components/common/ExportButton\";\nimport { Empty } from \"../../../components/common/Empty\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\nimport { isAuthorized } from \"../../../utils/appUtils\";\nimport {\n AclType,\n InboundStatus,\n MAX_INVENTORY_QUERY_LIMIT,\n} from \"../../../utils/constants\";\nimport {\n exceptionRenderer,\n exportCustomField,\n truncateText,\n} from \"../../../utils/utils\";\nimport { InboundStateIcon } from \"../../../managerApp/resources/inboundShipments/InboundStateIcon\";\nimport { useUser } from \"../../../authenticatorApp/UserContext\";\n\nconst useStyles = makeStyles((theme) => ({\n listRoot: {\n transition: theme.transitions.create([\"all\"], {\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: 0,\n },\n}));\n\nconst tabs = [\n {\n id: InboundStatus.ADVICE_ALL,\n name: (\n <span>\n Advices <BetaBadge />\n </span>\n ),\n sortKey: \"scheduledDateTime\",\n sortOrder: \"ASC\",\n showSmall: false,\n },\n {\n id: InboundStatus.IN_TRANSIT,\n name: \"In Transit\",\n sortKey: \"scheduledDateTime\",\n sortOrder: \"ASC\",\n showSmall: true,\n },\n {\n id: InboundStatus.ARRIVED,\n name: \"Notified\",\n sortKey: \"notifyDateTime\",\n sortOrder: \"ASC\",\n showSmall: true,\n },\n {\n id: InboundStatus.PLACED,\n name: \"PLACED\",\n sortKey: \"placedDateTime\",\n sortOrder: \"ASC\",\n showSmall: true,\n },\n {\n id: InboundStatus.RELEASED,\n name: \"Released\",\n sortKey: \"releaseDateTime\",\n sortOrder: \"DESC\",\n showSmall: false,\n },\n];\n\nconst getVisibleTabs = (lteMedium, appUser) => {\n return tabs.filter(\n (tab) => isTabEnabled(tab.id, appUser) && (!lteMedium || tab.showSmall)\n );\n};\n\nconst isAdviceEnabled = (appUser) => {\n return (\n isAuthorized(AclType.INBOUND_ADVICE) &&\n appUser?.account?.inboundAdviceInputs?.length > 0\n );\n};\n\nconst isTabEnabled = (tabId, appUser) => {\n if (tabId === InboundStatus.ADVICE_ALL) return isAdviceEnabled(appUser);\n return true;\n};\n\nconst exporter = (inbounds) => {\n const customHeaderMap = new Map();\n debugger;\n\n const inboundsForExport = inbounds.map((inbound) => {\n const inboundForExport = { ...inbound };\n\n if (inbound.inventories?.items) {\n inboundForExport.tallySheet = inbound.inventories.items.map(\n (inventory) => {\n const lineItem = {\n inventoryId: inventory.id,\n productCode: inventory.productCode,\n productName: inventory.productName,\n lotNumber: inbound.lotNumber,\n dateReceived: inbound.placedDateTime\n ? new Date(inbound.placedDateTime).toLocaleDateString()\n : \"\",\n quantityReceived: inventory.quantityDelivered,\n units: inbound.totalUnits,\n pieces: inbound.pcs,\n };\n\n return lineItem;\n }\n );\n }\n delete inboundForExport.inventories;\n\n if (inbound.customFields?.length > 0) {\n debugger;\n inbound.customFields.forEach((field) => {\n exportCustomField(field, inboundForExport, customHeaderMap);\n });\n }\n\n delete inboundForExport.account;\n delete inboundForExport.accountId;\n delete inboundForExport.area;\n delete inboundForExport.areaId;\n delete inboundForExport.assignedTo;\n delete inboundForExport.carrierType;\n delete inboundForExport.createdAt;\n delete inboundForExport.createDateTime;\n delete inboundForExport.daysOnDemurrageClock;\n delete inboundForExport.endDateTime;\n delete inboundForExport.groups;\n delete inboundForExport.history;\n delete inboundForExport.invoiceId;\n delete inboundForExport.notes;\n delete inboundForExport.owner;\n delete inboundForExport.attachments;\n delete inboundForExport.photos;\n delete inboundForExport.reloadYardCommodity;\n delete inboundForExport.reloadYardCommodityId;\n delete inboundForExport.reloadYardId;\n delete inboundForExport.seals;\n delete inboundForExport.startDateTime;\n delete inboundForExport.state;\n delete inboundForExport.stripeBillingDateTime;\n delete inboundForExport.updatedAt;\n delete inboundForExport.verificationRequired;\n delete inboundForExport.zone;\n delete inboundForExport.zoneId;\n\n return inboundForExport;\n });\n\n jsonExport(\n inboundsForExport,\n { rename: [\"inboundShipmentId\"] },\n (err, csv) => {\n downloadCSV(csv, `inboundShipments_${new Date().toLocaleDateString()}`); // download as 'inboundShipments.csv` file\n }\n );\n};\n\nconst InboundSearchField = (props) => {\n const { label, alwaysOn } = props;\n const { displayedFilters, filterValues, setFilters } = useListContext(props);\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n setFilters(\n {\n ...filterValues,\n or: [\n { shipFrom: { matchPhrasePrefix: `${value}` } },\n { poNumber: { matchPhrasePrefix: `${value}` } },\n { poNumber: { wildcard: `*${value}*` } },\n { railCarNumber: { matchPhrasePrefix: `${value}` } },\n { railCarNumber: { wildcard: `*${value}*` } },\n { lotNumber: { matchPhrasePrefix: `${value}` } },\n { lotNumber: { wildcard: `*${value}*` } },\n { customFields: { matchPhrasePrefix: `${value}` } },\n { customFields: { wildcard: `*${value}*` } },\n ],\n },\n displayedFilters\n );\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = (visibleTabs, tabIndex) => {\n const filters = [<InboundSearchField label=\"Search\" alwaysOn />];\n\n if (visibleTabs[tabIndex].id === InboundStatus.RELEASED) {\n filters.push(\n <DateInput\n source=\"releaseDateTime.lte\"\n label=\"Released Before...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"releaseDateTime.gte\"\n label=\"Released After...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />\n );\n }\n return filters;\n};\n\nconst ListActions = (props) => {\n const { appUser, isXSmall } = props;\n const { resource, total } = useListContext();\n\n return !isXSmall ? (\n <TopToolbar>\n <FilterButton />\n {isAdviceEnabled(appUser) && <CreateButton />}\n <ExportButton\n disabled={total === 0}\n resource={resource}\n exporter={exporter}\n maxResults={MAX_INVENTORY_QUERY_LIMIT}\n />\n <RefreshButton />\n </TopToolbar>\n ) : null;\n};\n\nconst getSortOrder = (visibleTabs, tabIndex) => {\n return visibleTabs[tabIndex].sortOrder;\n};\n\nconst getSortBy = (visibleTabs, tabValue) => {\n const tabIndex = visibleTabs.findIndex((tab) => tab.id === tabValue);\n return `{\"key\":\"inboundShipmentByAccountByStatusByDates\", \"search\":\"${visibleTabs[tabIndex].sortKey}\"}`;\n};\n\nconst getSessionTab = (visibleTabs, appUser) => {\n const sessionTab = Number(sessionStorage.getItem(`InboundTab_${appUser.id}`));\n if (sessionTab && visibleTabs[sessionTab]) {\n return sessionTab;\n }\n return 0; // Default to the first visible tab if the sessionTab is not valid\n};\n\nexport const InboundList = (props) => {\n const { appUser } = useUser();\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const lteMedium = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const [visibleTabs, setVisibleTabs] = useState(\n getVisibleTabs(lteMedium, appUser)\n );\n const [tabIndex, setTabIndex] = useState(getSessionTab(visibleTabs, appUser));\n\n const [defaultFilter, setDefaultFilter] = useState({\n accountId: appUser.accountId,\n statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime:\n {\n beginsWith: {\n status: visibleTabs[tabIndex].id,\n },\n },\n });\n const [defaultSearchFilter, setDefaultSearchFilter] = useState({\n reloadYardId: { eq: appUser?.reloadYardId },\n accountId: { eq: appUser.accountId },\n status: { eq: visibleTabs[tabIndex].id },\n });\n const defaultSort = {\n field: getSortBy(visibleTabs, visibleTabs[tabIndex].id),\n order: getSortOrder(visibleTabs, tabIndex),\n };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = Number(\n localStorage.getItem(`${props.resource}_perPage`)\n );\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? sessionPerPage : 10\n );\n\n const listContext = useSearchableList({\n ...props,\n defaultTitle: \"Inbound\",\n defaultFilter: defaultFilter,\n defaultSearchFilter: defaultSearchFilter,\n defaultPerPage: defaultPerPage,\n defaultSort: defaultSort,\n resource: \"inboundShipments\",\n });\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n useEffect(() => {\n if (listContext?.filter) {\n // Extract the key query from defaultSort\n const fieldObj = JSON.parse(defaultSort.field);\n const keyToCheck = fieldObj.key;\n\n // Check for the key's presence in filter\n const hasKey = keyToCheck in listContext.filter;\n const hasFilterValues = Object.keys(listContext.filterValues).length > 0;\n if (hasKey && hasFilterValues) listContext.setFilters({});\n }\n }, [listContext?.filter]);\n\n useEffect(() => {\n setVisibleTabs(getVisibleTabs(lteMedium, appUser));\n }, [lteMedium, appUser]);\n\n const handleTabChange = (value) => {\n debugger;\n setTabIndex(value);\n setDefaultFilter({\n accountId: appUser.accountId,\n statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime:\n {\n beginsWith: {\n status: visibleTabs[value].id,\n },\n },\n });\n setDefaultSearchFilter({\n reloadYardId: { eq: appUser?.reloadYardId },\n accountId: { eq: appUser.accountId },\n status: { eq: visibleTabs[value].id },\n });\n listContext.setSort(\n getSortBy(visibleTabs, visibleTabs[value].id),\n getSortOrder(visibleTabs, value)\n );\n listContext.setPage(1);\n };\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Inbound\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters(visibleTabs, tabIndex)}\n actions={<ListActions isXSmall={isXSmall} />}\n />\n <Card className={classes.listRoot}>\n <ShipmentTabs\n {...props}\n {...listContext}\n appUser={appUser}\n visibleTabs={visibleTabs}\n tabIndex={tabIndex}\n setTabIndex={handleTabChange}\n isXSmall={isXSmall}\n isMedium={lteMedium}\n />\n <Pagination {...listContext} />\n </Card>\n </ListContextProvider>\n );\n};\n\nconst ShipmentTabs = ({ tabIndex, setTabIndex, setPage, ...props }) => {\n const { visibleTabs, appUser } = props;\n\n const handleChange = (event, value) => {\n const adjustedValue = visibleTabs[value] ? value : 0; // Adjust tab index to the first visible tab if needed\n sessionStorage.setItem(`InboundTab_${appUser.id}`, adjustedValue);\n setTabIndex(adjustedValue);\n };\n\n return (\n <>\n <Tabs\n value={Number(tabIndex)}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n onChange={handleChange}\n >\n {visibleTabs.map((tab, idx) => (\n <Tab key={tab.id} label={tab.name} id={`shipment-${idx}`} />\n ))}\n </Tabs>\n <Divider />\n {visibleTabs.map(\n (tab) =>\n tab.id === visibleTabs[tabIndex].id && (\n <ShipmentGrid {...props} key={tab.id} tabValue={tab.id} />\n )\n )}\n </>\n );\n};\n\nconst ShipmentGrid = ({ ids, page, visibleTabs, tabValue, ...props }) => {\n const { isXSmall, isMedium } = props;\n\n if (tabValue === InboundStatus.ADVICE_ALL && ids.length === 0 && page === 1)\n return <Empty {...props} message=\"Create inbound advice\" />;\n return isXSmall ? (\n <SimpleList\n linkType=\"show\"\n primaryText={(record) => record.accountName}\n secondaryText={(record) => `Car/Trl No:: ${record.railCarNumber}`}\n tertiaryText={(record) =>\n record.assignedTo ? truncateText(record.assignedTo, 12) : null\n }\n leftIcon={(record) => <InboundStateIcon record={record} />}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n />\n ) : isMedium ? (\n <Datagrid rowClick=\"show\">\n {tabValue === InboundStatus.PLACED ||\n tabValue === InboundStatus.RELEASED ? (\n <InboundStateIcon />\n ) : null}\n {tabValue === InboundStatus.PLACED ||\n tabValue === InboundStatus.RELEASED ? (\n <FunctionField\n source=\"hasException\"\n label=\" \"\n render={exceptionRenderer}\n />\n ) : null}\n {tabValue === InboundStatus.IN_TRANSIT ? (\n <DateField\n source=\"scheduledDateTime\"\n label=\"Scheduled Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n {tabValue === InboundStatus.ARRIVED ? (\n <DateField\n source=\"notifyDateTime\"\n label=\"Notify Date\"\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n {tabValue === InboundStatus.PLACED ? (\n <DateField\n source=\"placedDateTime\"\n label=\"Placed Date\"\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n {tabValue === InboundStatus.RELEASED ? (\n <DateField\n source=\"releaseDateTime\"\n label=\"Release Date\"\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n <TextField source=\"railCarNumber\" label=\"Car/Trl No\" sortable={true} />\n <TextField source=\"poNumber\" label=\"PO Number\" sortable={true} />\n </Datagrid>\n ) : (\n <Datagrid rowClick=\"show\" hasBulkActions={false}>\n {tabValue === InboundStatus.PLACED ||\n tabValue === InboundStatus.RELEASED ? (\n <InboundStateIcon />\n ) : null}\n {tabValue === InboundStatus.PLACED ||\n tabValue === InboundStatus.RELEASED ? (\n <FunctionField\n source=\"hasException\"\n label=\" \"\n render={exceptionRenderer}\n />\n ) : null}\n {tabValue === InboundStatus.IN_TRANSIT ? (\n <DateField\n source=\"scheduledDateTime\"\n label=\"Scheduled Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n {tabValue === InboundStatus.ARRIVED ? (\n <DateField\n source=\"notifyDateTime\"\n label=\"Notify Date\"\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n {tabValue === InboundStatus.PLACED ? (\n <DateField\n source=\"placedDateTime\"\n label=\"Placed Date\"\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n {tabValue === InboundStatus.RELEASED ? (\n <DateField\n source=\"releaseDateTime\"\n label=\"Release Date\"\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n <TextField source=\"railCarNumber\" label=\"Car/Trl No\" sortable={true} />\n <TextField source=\"poNumber\" label=\"PO Number\" sortable={true} />\n <ShowButton />\n </Datagrid>\n );\n};\n","import React from \"react\";\n\nimport { Button } from \"react-admin\";\n\nimport { ShowIcon } from \"./\";\nimport { deepRedirect } from \"../../utils/utils\";\n\nexport const ShowButton = ({\n label = \"Show\",\n basePath,\n record,\n idSource,\n history,\n backPath,\n state,\n ...props\n}) => {\n const handleRedirect = () => {\n const toPath = `${basePath}/${\n idSource ? record[idSource] : record.id\n }/show`;\n deepRedirect(history, toPath, props.location.pathname, backPath, state);\n };\n\n return basePath && record ? (\n <Button label={label} onClick={handleRedirect}>\n <ShowIcon />\n </Button>\n ) : null;\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport {\n Backdrop,\n CircularProgress,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Grid,\n Typography,\n Switch,\n TextField as InputField,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { Button, useNotify, useRefresh } from \"react-admin\";\n\nimport { CancelIcon, EmailIcon } from \".\";\nimport { REGEX_MULTI_EMAIL } from \"../../utils/constants\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: \"#fff\",\n },\n}));\n\nexport const SendPOSDialogButton = ({\n record,\n label,\n title,\n email,\n enclosePhotosDefault,\n encloseDocsDefault,\n handleSend,\n ...props\n}) => {\n const classes = useStyles();\n const notify = useNotify();\n const refresh = useRefresh();\n const [toEmail, setToEmail] = useState(email);\n const [isEmailValid, setIsEmailValid] = useState(true);\n const [ccEmail, setCcEmail] = useState(\"\");\n const [enclosePhotos, setEnclosePhotos] = useState(enclosePhotosDefault);\n const [encloseDocs, setEncloseDocs] = useState(encloseDocsDefault);\n const [emailOpen, setEmailOpen] = useState(false);\n const [sending, setSending] = useState(false);\n\n const handleEmailChange = (event) => {\n const emailInput = event.target.value;\n setToEmail(emailInput);\n };\n\n const handleEmailBlur = () => {\n setIsEmailValid(validateEmail(toEmail));\n };\n\n const validateEmail = (email) => {\n if (email) return REGEX_MULTI_EMAIL.test(email.trim());\n return true;\n };\n\n useEffect(() => {\n if (email) {\n setToEmail(email);\n setEnclosePhotos(enclosePhotosDefault);\n setEncloseDocs(encloseDocsDefault);\n }\n }, [email]);\n\n const handleDialogOpen = () => setEmailOpen(true);\n const handleDialogClose = () => setEmailOpen(false);\n\n const handleSubmit = async () => {\n const valid = validateEmail(toEmail);\n if (valid) setIsEmailValid(valid);\n else return;\n\n setSending(true);\n await handleSend(\n record,\n toEmail,\n ccEmail,\n enclosePhotos || false,\n encloseDocs || false,\n notify,\n refresh\n );\n setSending(false);\n setEmailOpen(false);\n };\n\n return (\n <>\n <Button\n {...props}\n label={label}\n color=\"primary\"\n disabled={sending}\n onClick={handleDialogOpen}\n >\n <EmailIcon />\n </Button>\n <Dialog\n open={emailOpen}\n maxWidth=\"sm\"\n onClose={handleDialogClose}\n fullWidth\n >\n <DialogTitle>{title}</DialogTitle>\n <DialogContent>\n <Backdrop className={classes.backdrop} open={sending}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <InputField\n label=\"To email\"\n size=\"small\"\n variant=\"outlined\"\n fullWidth\n required\n value={toEmail}\n error={!isEmailValid} // Display error state based on validation\n helperText={\n !isEmailValid ? \"Please enter a valid email address.\" : false\n }\n onChange={handleEmailChange}\n onBlur={handleEmailBlur}\n />\n </Grid>\n <Grid item xs={12}>\n <InputField\n label=\"CC\"\n size=\"small\"\n variant=\"outlined\"\n fullWidth\n helperText=\"Comma-seperated email(s)\"\n value={ccEmail}\n onChange={(event) => setCcEmail(event.target.value)}\n />\n </Grid>\n <Grid item xs={6}>\n <Switch\n name=\"attach-photos\"\n color=\"primary\"\n checked={enclosePhotos}\n onChange={() => setEnclosePhotos(!enclosePhotos)}\n />\n <Typography component=\"span\">Enclose Photos</Typography>\n </Grid>\n <Grid item xs={6}>\n <Switch\n name=\"attach-docs\"\n color=\"primary\"\n checked={encloseDocs}\n onChange={() => setEncloseDocs(!encloseDocs)}\n />\n <Typography component=\"span\">Enclose Attachments</Typography>\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button label=\"CANCEL\" color=\"default\" onClick={handleDialogClose}>\n <CancelIcon />\n </Button>\n <Button\n label=\"SEND\"\n color=\"primary\"\n disabled={!toEmail}\n onClick={handleSubmit}\n >\n <EmailIcon />\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\n\nimport {\n Card,\n CardContent,\n CardMedia,\n Dialog,\n Grid,\n Tooltip,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { orange } from \"@material-ui/core/colors\";\n\nimport { Button, SelectField, TextField } from \"react-admin\";\n\nimport { ExceptionIcon, PhotoIcon } from \"../../../components/common\";\nimport { isAuthorized } from \"../../../utils/appUtils\";\nimport {\n AclType,\n InboundStates,\n InboundStatuses,\n} from \"../../../utils/constants\";\nimport { getPhoto, getPhotoUrl } from \"../../../utils/fileUtils\";\nimport { getFormTab } from \"../../../utils/utils\";\nimport { InboundStateIcon } from \"../../../managerApp/resources/inboundShipments/InboundStateIcon\";\n\nconst useAsideStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n width: \"18em\",\n minWidth: \"18em\",\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(0.5),\n overflow: \"initial\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n status: {\n marginTop: theme.spacing(0.3),\n },\n exceptionButton: {\n textAlign: \"center\",\n },\n tableIcon: {\n marginTop: theme.spacing(0.7),\n },\n photoButton: { marginLeft: -theme.spacing(1) },\n media: {\n margin: \"0 auto 0\",\n marginTop: theme.spacing(1),\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n maxHeight: \"20em\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n mediaFull: {\n margin: \"0 auto 0\",\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n}));\n\nexport const InboundAside = ({ backPath, record, exceptions, ...props }) => {\n const classes = useAsideStyles();\n const imgRef = useRef();\n const location = useLocation(); // used to force refresh photos on every visit.\n const [photo, setPhoto] = useState();\n const [selectedPhoto, setSelectedPhoto] = useState();\n const [isOpen, setIsOpen] = useState(false);\n var tab = getFormTab(props);\n const linkBackPath = backPath\n ? [...backPath, props.location.pathname]\n : [props.location.pathname];\n\n useEffect(() => {\n if (record?.photos && record.photos.length > 0 && imgRef.current) {\n setSelectedPhoto(record.photos[0].key);\n getPhoto(record.photos[0].key, setPhoto, imgRef.current.clientWidth);\n }\n }, [imgRef, record, location.key]);\n\n const handleSelectPhoto = (evt) => {\n debugger;\n setSelectedPhoto(evt.currentTarget.id);\n getPhoto(evt.currentTarget.id, setPhoto, imgRef.current.clientWidth);\n };\n\n const handleMagnifyPhoto = (evt) => {\n setIsOpen(!isOpen);\n };\n\n if (!record || tab === \"1\") return null;\n return (\n <Card className={classes.root} ref={imgRef}>\n <CardContent>\n <Grid container direction=\"column\" spacing={1} fullWidth>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Status\n </Typography>\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <InboundStateIcon record={record} />\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <SelectField\n source=\"status\"\n choices={InboundStatuses}\n record={record}\n />\n , \n <SelectField\n source=\"state\"\n choices={InboundStates}\n record={record}\n />\n </Grid>\n </Grid>\n {exceptions.hasException && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Exceptions\n </Typography>\n </Grid>\n )}\n {exceptions.hasException && exceptions.unsafeShipment && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip\n title={\n exceptions.unsafeShipmentNote\n ? exceptions.unsafeShipmentNote\n : \"Unsafe Shipment\"\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">Unsafe Shipment</Typography>\n </Grid>\n </Grid>\n )}\n {exceptions.hasException && exceptions.brokenSeal && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip\n title={\n exceptions.brokenSealNote\n ? exceptions.brokenSealNote\n : \"Broken Seal\"\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">Broken Seal</Typography>\n </Grid>\n </Grid>\n )}\n {exceptions.hasException && exceptions.otherException && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip\n title={\n exceptions.otherExceptionNote\n ? exceptions.otherExceptionNote\n : \"Other Exception\"\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">Other Exception</Typography>\n </Grid>\n </Grid>\n )}\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n PO Number\n </Typography>\n <br />\n <TextField source=\"poNumber\" record={record} />\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Lot Number\n </Typography>\n <br />\n <TextField source=\"lotNumber\" record={record} />\n </Grid>\n {record.invoice && isAuthorized(AclType.INVOICES) && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Invoice\n </Typography>\n <br />\n <Link\n to={{\n pathname: `/invoices/${record.invoiceId}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {record.invoice.invoiceNumber} : $\n {record.invoice.total.toLocaleString(undefined, {\n style: \"currency\",\n currency: \"USD\",\n })}\n </Typography>\n </Link>\n </Grid>\n )}\n {record.photos && (\n <Grid item container direction=\"row\" xs={12}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Photos\n </Typography>\n <br />\n </Grid>\n {record.photos.map((file, index) => (\n <Grid item xs={3}>\n <Button\n label={`${index + 1}`}\n id={file.key}\n key={file.key}\n onClick={handleSelectPhoto}\n size=\"small\"\n className={classes.photoButton}\n >\n <PhotoIcon fontSize=\"small\" />\n </Button>\n </Grid>\n ))}\n <Grid item xs={12}>\n <CardMedia\n component=\"img\"\n image={photo}\n className={classes.media}\n onClick={handleMagnifyPhoto}\n />\n </Grid>\n </Grid>\n )}\n </Grid>\n </CardContent>\n {isOpen && (\n <Dialog open={isOpen} onClick={handleMagnifyPhoto} maxWidth=\"xl\">\n <img\n src={getPhotoUrl(selectedPhoto, window.innerWidth)}\n alt=\"Inventory\"\n className={classes.mediaFull}\n onClick={handleMagnifyPhoto}\n />\n </Dialog>\n )}\n </Card>\n );\n};\n","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { Grid, Typography, useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n ArrayField,\n BooleanField,\n Datagrid,\n DateField,\n FunctionField,\n Labeled,\n NumberField,\n ReferenceField,\n SelectField,\n Show,\n Tab,\n TabbedShowLayout,\n TextField,\n TopToolbar,\n useShowController,\n} from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport {\n CustomField,\n CustomFieldsMobile,\n} from \"../../../components/common/CustomFields\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { ShowButton } from \"../../../components/common/ShowButton\";\nimport CustomizableDatagrid from \"../../../components/common/ra-customizable-datagrid\";\nimport { SendPOSDialogButton } from \"../../../components/common/SendPOSDialogButton\";\n\nimport {\n CarrierType,\n CarrierTypes,\n InboundStatus,\n LotTypes,\n} from \"../../../utils/constants\";\nimport { deepRedirect, getBackPath } from \"../../../utils/utils\";\n\nimport * as utils from \"../../../managerApp/resources/inboundShipments/InboundUtils\";\n\nimport { InboundAside } from \"./InboundAside\";\nimport { NotesTabShow } from \"../../../components/common/NotesTab\";\n\nconst useStyles = makeStyles({\n alignRight: {\n textAlign: \"right\",\n },\n});\n\nconst QuantityWithUnitsRenderer = ({ record, source, units }) => {\n return (\n <div style={{ display: \"flex\", justifyContent: \"flex-end\" }}>\n <NumberField record={record} source={source} />\n  {record[units]}\n </div>\n );\n};\n\nconst ShipmentSetupTab = ({ gteMedium, ...props }) => {\n const { record } = props;\n\n return (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Origin\">\n <TextField source=\"shipFrom\" />\n </Labeled>\n </Grid>\n </Grid>\n <Grid container item direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Load Type\">\n <ReferenceField\n {...props}\n source=\"reloadYardCommodityId\"\n reference=\"reloadYardCommoditys\"\n link={false}\n >\n <TextField source=\"commodity.name\" />\n </ReferenceField>\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Carrier Type\">\n <SelectField source=\"carrierType\" choices={CarrierTypes} />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Origin Carrier\">\n <TextField source=\"originCarrier\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled\n label={\n record.carrierType === CarrierType.RAIL\n ? \"Railcar Number\"\n : \"Trailer Number\"\n }\n >\n <TextField source=\"railCarNumber\" />\n </Labeled>\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"PO Number\">\n <TextField source=\"poNumber\" />\n </Labeled>\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Default Area\">\n <ReferenceField\n {...props}\n source=\"areaId\"\n reference=\"areas\"\n link={false}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Default Zone\">\n <ReferenceField\n {...props}\n source=\"zoneId\"\n reference=\"zones\"\n link={false}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n </Labeled>\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Lot Type\">\n <SelectField source=\"lotType\" choices={LotTypes} />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Lot Number\">\n <TextField source=\"lotNumber\" />\n </Labeled>\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Labeled label=\"Special Instructions\">\n <TextField source=\"instructions\" multiline />\n </Labeled>\n </Grid>\n </Grid>\n {record.customFields && (\n <CustomFieldsMobile\n recordFields={record.customFields}\n accountFields={record.account?.inboundCustomFields}\n width={6}\n />\n )}\n {record?.account?.trackInboundSeals && (\n <Grid container xs={12} md={6}>\n <Labeled label=\"Seals\" fullWidth>\n <ArrayField source=\"seals.items\">\n <Datagrid>\n <BooleanField source=\"validated\" />\n <TextField source=\"barcode\" />\n <TextField source=\"discribtion\" />\n </Datagrid>\n </ArrayField>\n </Labeled>\n </Grid>\n )}\n {gteMedium && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={6}>\n <Labeled label=\"ATTACHMENTS\">\n <FileField\n source=\"attachments\"\n src=\"src\"\n title=\"title\"\n target=\"_blank\"\n />\n </Labeled>\n </Grid>\n </Grid>\n )}\n <Grid container>\n <Grid item xs={12}></Grid>  {\" \"}\n </Grid>\n </Grid>\n );\n};\n\nconst TallySheetTab = (props) => {\n const classes = useStyles();\n const { history, backPath, record } = props;\n const account = record.account;\n\n const accountFields =\n account?.inventoryCustomFields?.length > 0\n ? account.inventoryCustomFields\n : [];\n const customColumns = [];\n const customGridFields = accountFields\n ? accountFields.map((field, index) => {\n customColumns.push(field.name);\n return (\n <CustomField\n source={`customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={true}\n />\n );\n })\n : [];\n\n const openInventory = (jsonRecord) => {\n const jsonObject = JSON.parse(jsonRecord);\n const toPath = `/inventories/${jsonObject.id}/show`;\n deepRedirect(history, toPath, props.location.pathname, backPath, {\n inboundRecord: record,\n });\n };\n\n return (\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12}>\n <ArrayField\n source=\"inventories.items\"\n basePath=\"/inventories\"\n fullWidth\n >\n <CustomizableDatagrid\n label=\"INBOUND INVENTORY\"\n hasBulkActions={false}\n rowClick={openInventory}\n storageProp={`InboundShoww_${account?.id}`}\n defaultColumns={[\n \"productName\",\n \"quantityShipped\",\n \"quantityDelivered\",\n ...customColumns,\n ]}\n >\n {[\n <TextField source=\"productName\" label=\"Product Name\" />,\n <FunctionField\n label=\"Qty. Advised\"\n render={(record) => (\n <QuantityWithUnitsRenderer\n record={record}\n source=\"quantityShipped\"\n units=\"inventoryUnits\"\n />\n )}\n headerClassName={classes.alignRight}\n cellClassName={classes.alignRight}\n />,\n <FunctionField\n label=\"Qty. Received\"\n render={(record) => (\n <QuantityWithUnitsRenderer\n record={record}\n source=\"quantityDelivered\"\n units=\"inventoryUnits\"\n />\n )}\n headerClassName={classes.alignRight}\n cellClassName={classes.alignRight}\n />,\n ...customGridFields,\n <ShowButton {...props} state={{ inboundRecord: record }} />,\n ]}\n </CustomizableDatagrid>\n </ArrayField>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n TOTAL LOAD\n </Typography>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={6} md={3}>\n <Labeled label=\"Total Quantity\">\n <TextField source=\"totalQuantity\" />\n </Labeled>\n </Grid>\n <Grid item xs={6} md={3}>\n <Labeled label=\"Inventory Units\">\n <TextField source=\"totalUnits\" />\n </Labeled>\n </Grid>\n <Grid item xs={6} md={3}>\n <Labeled label=\"Billing Quantity\">\n <TextField source=\"billQuantity\" />\n </Labeled>\n </Grid>\n <Grid item xs={6} md={3}>\n <Labeled label=\"Billing Units\">\n <TextField source=\"billUnits\" />\n </Labeled>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n );\n};\n\nconst grossRender = (record) => {\n if (\n record.tareWeight !== null &&\n record.tareWeight >= 0 &&\n record.ladenWeight >= 0\n ) {\n return `${(record.ladenWeight - record.tareWeight).toLocaleString()} ${\n record.weightUnits ? record.weightUnits : record.scaleWeightUnits\n }`;\n } else\n return `0 ${\n record.weightUnits ? record.weightUnits : record.scaleWeightUnits\n }`;\n};\n\nconst ShipmentTraceTab = (props) => {\n const { record } = props;\n\n return (\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Scheduled\">\n <DateField source=\"scheduledDateTime\" showTime />\n </Labeled>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Notified\">\n <DateField source=\"notifyDateTime\" showTime />\n </Labeled>\n </Grid>\n {record.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} md={4}>\n <Labeled label=\"Origin Carrier\">\n <TextField source=\"originCarrier\" />\n </Labeled>\n </Grid>\n )}\n {record.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} md={4}>\n <Labeled label=\"Trailer Number\">\n <TextField source=\"railCarNumber\" />\n </Labeled>\n </Grid>\n )}\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Placed\">\n <DateField source=\"placedDateTime\" showTime />\n </Labeled>\n </Grid>\n {record.carrierType === CarrierType.TRUCK && (\n <>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Laden Weight\">\n <NumberField source=\"ladenWeight\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Units\">\n <TextField source=\"scaleWeightUnits\" />\n </Labeled>\n </Grid>\n </>\n )}\n </Grid>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Unload Start Time\">\n <DateField source=\"startDateTime\" showTime />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Unload End Time\">\n <DateField source=\"endDateTime\" showTime />\n </Labeled>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Released\">\n <DateField source=\"releaseDateTime\" showTime />\n </Labeled>\n </Grid>\n {record.carrierType === CarrierType.TRUCK && (\n <>\n <Grid item xs={12} md={2}>\n <Labeled label=\"Tare Weight\">\n <NumberField source=\"tareWeight\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={2}>\n <Labeled label=\"Gross Weight\">\n <FunctionField render={grossRender} />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={2}>\n <Labeled label=\"Net Weight\">\n <NumberField source=\"netWeight\" />\n </Labeled>\n </Grid>\n </>\n )}\n </Grid>\n {record.carrierType === CarrierType.RAIL && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Collected\">\n <DateField source=\"collectedDateTime\" showTime />\n </Labeled>\n </Grid>\n </Grid>\n )}\n </Grid>\n );\n};\n\nconst ShowActions = ({ data, ...props }) => (\n <TopToolbar>\n {data?.status === InboundStatus.RELEASED && (\n <SendPOSDialogButton\n label=\"POD\"\n title=\"Send POD\"\n record={data}\n email={data.account?.podEmail}\n enclosePhotosDefault={data.account?.podPhotos}\n encloseDocsDefault={data.account?.podAttachments}\n handleSend={utils.handleSendPOD}\n />\n )}\n <BackButton {...props} />\n </TopToolbar>\n);\n\nexport const InboundShow = (props) => {\n const gteMedium = useMediaQuery((theme) => theme.breakpoints.up(\"md\"));\n const { record } = useShowController(props);\n const backPath = getBackPath(props);\n const history = useHistory();\n const exceptions = !record\n ? {}\n : {\n hasException: record.hasException,\n unsafeShipment: record.unsafeShipment,\n unsafeShipmentNote: record.unsafeShipmentNote,\n brokenSeal: record.brokenSeal,\n brokenSealNote: record.brokenSealNote,\n otherException: record.otherException,\n otherExceptionNote: record.otherExceptionNote,\n };\n\n return (\n <Show\n {...props}\n title={<ForceTitle title=\"View Inbound\" />}\n actions={<ShowActions {...props} backPath={backPath} />}\n aside={\n <InboundAside\n {...props}\n history={history}\n backPath={backPath}\n exceptions={exceptions}\n />\n }\n >\n <TabbedShowLayout>\n <Tab label=\"Inbound Setup\">\n <ShipmentSetupTab {...props} gteMedium={gteMedium} />\n </Tab>\n <Tab label=\"Tally Sheet\">\n <TallySheetTab {...props} history={history} backPath={backPath} />\n </Tab>\n <Tab label=\"Dispatch\">\n <ShipmentTraceTab />\n </Tab>\n <Tab label=\"Notes\">\n <NotesTabShow {...props} hidePrivate={true} />\n </Tab>\n </TabbedShowLayout>\n </Show>\n );\n};\n","import React from \"react\";\nimport { Chip } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nconst useQuickFilterStyles = makeStyles((theme) => ({\n chip: {\n marginBottom: theme.spacing(1),\n },\n}));\n\nexport const QuickFilter = ({ label }) => {\n const classes = useQuickFilterStyles();\n return <Chip className={classes.chip} label={label} />;\n};\n","import React from \"react\";\n\nimport { Tooltip } from \"@material-ui/core\";\nimport RejectedIcon from \"@material-ui/icons/HighlightOff\";\nimport { red } from \"@material-ui/core/colors\";\n\nimport { RemoveIcon } from \"../../../components/common\";\nimport { OutboundStatus } from \"../../../utils/constants\";\n\nexport const AdviceStatusIcon = ({ record, ...props }) => {\n if (!record) return null;\n else\n return record.status === OutboundStatus.ADVICE_REJECTED ? (\n <Tooltip title=\"Rejected\" placement=\"right\" arrow>\n <RejectedIcon style={{ color: red[700] }} />\n </Tooltip>\n ) : (\n <Tooltip title=\"Pending Review\" placement=\"right\" arrow>\n <RemoveIcon color=\"disabled\" />\n </Tooltip>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport jsonExport from \"jsonexport/dist\";\n\nimport {\n Card,\n Divider,\n makeStyles,\n Tab,\n Tabs,\n useMediaQuery,\n} from \"@material-ui/core\";\n\nimport {\n CreateButton,\n Datagrid,\n DateField,\n DateInput,\n downloadCSV,\n EditButton,\n FilterButton,\n ListContextProvider,\n ListToolbar,\n RefreshButton,\n SimpleList,\n ShowButton,\n TextField,\n Title,\n TopToolbar,\n useListContext,\n FunctionField,\n} from \"react-admin\";\n\nimport { ChevronRightIcon } from \"../../../components/common\";\nimport { Empty } from \"../../../components/common/Empty\";\nimport ExportButton from \"../../../components/common/ExportButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { QuickFilter } from \"../../../components/common/QuickFilter\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\nimport { isAuthorized } from \"../../../utils/appUtils\";\nimport {\n AclType,\n MAX_INVENTORY_QUERY_LIMIT,\n OutboundStatus,\n} from \"../../../utils/constants\";\nimport { exportCustomField, truncateText } from \"../../../utils/utils\";\nimport { useUser } from \"../../../authenticatorApp/UserContext\";\nimport { BetaBadge } from \"../../../components/common/FeatureBadges\";\nimport { AdviceStatusIcon } from \"./AdviceStatusIcon\";\n\nconst useStyles = makeStyles((theme) => ({\n listRoot: {\n transition: theme.transitions.create([\"all\"], {\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: 0,\n },\n}));\n\nconst tabs = [\n {\n id: OutboundStatus.ADVICE_ALL,\n name: (\n <span>\n Advices <BetaBadge />\n </span>\n ),\n sortKey: \"scheduledDateTime\",\n sortOrder: \"ASC\",\n showSmall: false,\n },\n {\n id: OutboundStatus.PENDING,\n name: \"Pending\",\n sortKey: \"scheduledDateTime\",\n sortOrder: \"ASC\",\n showSmall: true,\n },\n {\n id: OutboundStatus.ARRIVED,\n name: \"PLACED\",\n sortKey: \"arrivalDateTime\",\n sortOrder: \"ASC\",\n showSmall: true,\n },\n {\n id: OutboundStatus.LOADED,\n name: \"Loaded\",\n sortKey: \"endDateTime\",\n sortOrder: \"ASC\",\n showSmall: true,\n },\n {\n id: OutboundStatus.RELEASED,\n name: \"Released\",\n sortKey: \"endDateTime\",\n sortOrder: \"DESC\",\n showSmall: false,\n },\n];\n\nconst getVisibleTabs = (lteMedium, appUser) => {\n return tabs.filter(\n (tab) => isTabEnabled(tab.id, appUser) && (!lteMedium || tab.showSmall)\n );\n};\n\nconst isAdviceEnabled = (appUser) => {\n return (\n isAuthorized(AclType.OUTBOUND_ADVICE) &&\n appUser?.account?.outboundAdviceInputs?.length > 0\n );\n};\n\nconst isTabEnabled = (tabId, appUser) => {\n if (tabId === OutboundStatus.ADVICE_ALL) return isAdviceEnabled(appUser);\n return true;\n};\n\nconst getRowClickAction = (record) => {\n switch (record.status) {\n case OutboundStatus.ADVICE_PENDING:\n return \"show\";\n case OutboundStatus.ADVICE_REJECTED:\n return \"edit\";\n default:\n return \"show\"; // Default action if status does not match any case\n }\n};\n\nconst renderActionButtons = (record) => {\n if (record.status === \"ADVICE_REJECTED\") {\n return <EditButton record={record} />;\n } else {\n return <ShowButton record={record} />;\n }\n};\n\nconst exporter = (outbounds) => {\n const customHeaderMap = new Map();\n debugger;\n const outboundsForExport = outbounds.map((outbound) => {\n const outboundForExport = { ...outbound };\n\n if (outbound.shipmentLineItems.items) {\n outboundForExport.pickList = [];\n\n outbound.shipmentLineItems.items.forEach((lineItem) => {\n lineItem.inventoryItems.items.forEach((inventoryItem) => {\n const exportlineItem = {\n inventoryId: lineItem.inventoryId,\n productCode: lineItem.inventory.productCode,\n productName: lineItem.inventory.productName,\n lotNumber: lineItem.lotNumber,\n quantityOutbound: lineItem.totalQuantityToPick,\n units: outbound.totalUnits,\n location: inventoryItem.inventoryItem.locationFullName,\n quantityOnHand: inventoryItem.inventoryItem.quantityOnHand,\n };\n\n outboundForExport.pickList.push(exportlineItem);\n });\n });\n }\n delete outboundForExport.shipmentLineItems;\n\n if (outbound.customFields?.length > 0) {\n debugger;\n outbound.customFields.forEach((field) => {\n exportCustomField(field, outboundForExport, customHeaderMap);\n });\n }\n delete outboundForExport.customFields;\n\n delete outboundForExport.account;\n delete outboundForExport.assignedTo;\n delete outboundForExport.bolFile;\n delete outboundForExport.createdAt;\n delete outboundForExport.createDateTime;\n delete outboundForExport.daysOnDemurrageClock;\n delete outboundForExport.didTarp;\n delete outboundForExport.endDateTime;\n delete outboundForExport.history;\n delete outboundForExport.invoiceId;\n delete outboundForExport.mustTarp;\n delete outboundForExport.reloadYardId;\n delete outboundForExport.startDateTime;\n delete outboundForExport.updatedAt;\n\n return outboundForExport;\n });\n\n jsonExport(\n outboundsForExport,\n { rename: [\"outboundShipmentId\"] },\n (err, csv) => {\n downloadCSV(csv, `outboundShipments_${new Date().toLocaleDateString()}`); // download as 'outboundShipments.csv` file\n }\n );\n};\n\nconst OutboundSearchField = (props) => {\n const { label, alwaysOn } = props;\n const { displayedFilters, filterValues, setFilters } = useListContext(props);\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n setFilters(\n {\n ...filterValues,\n or: [\n { carrier: { matchPhrasePrefix: `${value}` } },\n { bolNumber: { matchPhrasePrefix: `${value}` } },\n { bolNumber: { wildcard: `*${value}*` } },\n { pickupNumber: { matchPhrasePrefix: `${value}` } },\n { pickupNumber: { wildcard: `*${value}*` } },\n { poNumber: { matchPhrasePrefix: `${value}` } },\n { poNumber: { wildcard: `*${value}*` } },\n { railCarNumber: { matchPhrasePrefix: `${value}` } },\n { railCarNumber: { wildcard: `*${value}*` } },\n { customFields: { matchPhrasePrefix: `${value}` } },\n { customFields: { wildcard: `*${value}*` } },\n ],\n },\n displayedFilters\n );\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = (visibleTabs, tabIndex) => {\n const filters = [<OutboundSearchField label=\"Search\" alwaysOn />];\n\n if (visibleTabs[tabIndex].id === OutboundStatus.RELEASED) {\n filters.push(\n <DateInput\n source=\"departureDateTime.lte\"\n label=\"Shipped Before...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"departureDateTime.gte\"\n label=\"Shipped After...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />\n );\n }\n return filters;\n};\n\nconst ListActions = (props) => {\n const { appUser, isXSmall } = props;\n const { resource, total } = useListContext();\n\n return !isXSmall ? (\n <TopToolbar>\n <FilterButton />\n {isAdviceEnabled(appUser) && <CreateButton />}\n <ExportButton\n disabled={total === 0}\n resource={resource}\n exporter={exporter}\n maxResults={MAX_INVENTORY_QUERY_LIMIT}\n />\n <RefreshButton />\n </TopToolbar>\n ) : null;\n};\n\nconst getSortOrder = (visibleTabs, tabIndex) => {\n return visibleTabs[tabIndex].sortOrder;\n};\n\nconst getSortBy = (visibleTabs, tabValue) => {\n const tabIndex = visibleTabs.findIndex((tab) => tab.id === tabValue);\n return `{\"key\":\"outboundShipmentByAccountByStatusByDates\", \"search\":\"${visibleTabs[tabIndex].sortKey}\"}`;\n};\n\nconst getSessionTab = (visibleTabs, appUser) => {\n const sessionTab = Number(\n sessionStorage.getItem(`OutboundTab_${appUser.id}`)\n );\n if (sessionTab && visibleTabs[sessionTab]) {\n return sessionTab;\n }\n return 0; // Default to the first visible tab if the sessionTab is not valid\n};\n\nexport const OutboundList = (props) => {\n const { appUser } = useUser();\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const lteMedium = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const [visibleTabs, setVisibleTabs] = useState(\n getVisibleTabs(lteMedium, appUser)\n );\n const [tabIndex, setTabIndex] = useState(getSessionTab(visibleTabs, appUser));\n\n const [defaultFilter, setDefaultFilter] = useState({\n accountId: appUser.accountId,\n statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime: {\n beginsWith: {\n status: visibleTabs[tabIndex].id,\n },\n },\n });\n const [defaultSearchFilter, setDefaultSearchFilter] = useState({\n reloadYardId: { eq: appUser?.reloadYardId },\n accountId: { eq: appUser.accountId },\n status: { matchPhrasePrefix: visibleTabs[tabIndex].id },\n });\n const defaultSort = {\n field: getSortBy(visibleTabs, visibleTabs[tabIndex].id),\n order: getSortOrder(visibleTabs, tabIndex),\n };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = Number(\n localStorage.getItem(`${props.resource}_perPage`)\n );\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? sessionPerPage : 10\n );\n\n const listContext = useSearchableList({\n ...props,\n defaultTitle: \"Outbound\",\n defaultFilter: defaultFilter,\n defaultSearchFilter: defaultSearchFilter,\n defaultPerPage: defaultPerPage,\n defaultSort: defaultSort,\n resource: \"outboundShipments\",\n });\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n useEffect(() => {\n if (listContext?.filter) {\n // Extract the key query from defaultSort\n const fieldObj = JSON.parse(defaultSort.field);\n const keyToCheck = fieldObj.key;\n\n // Check for the key's presence in filter\n const hasKey = keyToCheck in listContext.filter;\n const hasFilterValues = Object.keys(listContext.filterValues).length > 0;\n if (hasKey && hasFilterValues) listContext.setFilters({});\n }\n }, [listContext?.filter]);\n\n useEffect(() => {\n setVisibleTabs(getVisibleTabs(lteMedium, appUser));\n }, [lteMedium, appUser]);\n\n const handleTabChange = (value) => {\n debugger;\n setTabIndex(value);\n setDefaultFilter({\n accountId: appUser.accountId,\n statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime: {\n beginsWith: {\n status: visibleTabs[value].id,\n },\n },\n });\n setDefaultSearchFilter({\n reloadYardId: { eq: appUser?.reloadYardId },\n accountId: { eq: appUser.accountId },\n status: { eq: visibleTabs[value].id },\n });\n listContext.setSort(\n getSortBy(visibleTabs, visibleTabs[value].id),\n getSortOrder(visibleTabs, value)\n );\n listContext.setPage(1);\n };\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Outbound\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters(visibleTabs, tabIndex)}\n actions={<ListActions appUser={appUser} isXSmall={isXSmall} />}\n />\n <Card className={classes.listRoot}>\n <ShipmentTabs\n {...props}\n {...listContext}\n appUser={appUser}\n visibleTabs={visibleTabs}\n tabIndex={tabIndex}\n setTabIndex={handleTabChange}\n isXSmall={isXSmall}\n lteMedium={lteMedium}\n />\n <Pagination {...listContext} />\n </Card>\n </ListContextProvider>\n );\n};\n\nconst ShipmentTabs = ({ tabIndex, setTabIndex, setPage, ...props }) => {\n const { visibleTabs, appUser } = props;\n\n const handleChange = (event, value) => {\n const adjustedValue = visibleTabs[value] ? value : 0; // Adjust tab index to the first visible tab if needed\n sessionStorage.setItem(`OutboundTab_${appUser.id}`, adjustedValue);\n setTabIndex(adjustedValue);\n };\n\n return (\n <>\n <Tabs\n value={Number(tabIndex)}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n onChange={handleChange}\n >\n {visibleTabs.map((tab, idx) => (\n <Tab key={tab.id} label={tab.name} id={`shipment-${idx}`} />\n ))}\n </Tabs>\n <Divider />\n {visibleTabs.map(\n (tab) =>\n tab.id === visibleTabs[tabIndex].id && (\n <ShipmentGrid {...props} key={tab.id} tabValue={tab.id} />\n )\n )}\n </>\n );\n};\n\nconst ShipmentGrid = ({ ids, page, visibleTabs, tabValue, ...props }) => {\n const { isXSmall, lteMedium } = props;\n\n if (tabValue === OutboundStatus.ADVICE_ALL && ids.length === 0 && page === 1)\n return <Empty {...props} message=\"Create outbound advice\" />;\n return isXSmall ? (\n <SimpleList\n linkType={(jsonRecord, basePath, record) => getRowClickAction(record)}\n primaryText={(record) => record.accountName}\n secondaryText={(record) => `Pickup No: ${record.pickupNumber}`}\n tertiaryText={(record) =>\n record.assignedTo ? truncateText(record.assignedTo, 12) : null\n }\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n />\n ) : lteMedium ? (\n <Datagrid\n rowClick={(jsonRecord, basePath, record) => getRowClickAction(record)}\n >\n <TextField source=\"poNumber\" label=\"PO Number\" sortable={true} />\n <TextField source=\"pickupNumber\" label=\"Pickup No.\" sortable={true} />\n <TextField source=\"carrier\" label=\"Carrier\" sortable={true} />\n {tabValue === OutboundStatus.ADVICE_ALL ||\n tabValue === OutboundStatus.PENDING ? (\n <DateField\n source=\"scheduledDateTime\"\n label=\"Scheduled Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n {tabValue === OutboundStatus.ARRIVED ? (\n <DateField\n source=\"arrivalDateTime\"\n label=\"Arrival Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n {tabValue === OutboundStatus.LOADED ? (\n <DateField\n source=\"endDateTime\"\n label=\"Loaded Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n {tabValue === OutboundStatus.RELEASED ? (\n <DateField\n source=\"departureDateTime\"\n label=\"Ship Date\"\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n </Datagrid>\n ) : (\n <Datagrid\n rowClick={(jsonRecord, basePath, record) => getRowClickAction(record)}\n hasBulkActions={false}\n >\n {tabValue === OutboundStatus.ADVICE_ALL ? <AdviceStatusIcon /> : null}\n <TextField source=\"poNumber\" label=\"PO Number\" sortable={true} />\n <TextField source=\"pickupNumber\" label=\"Pickup No.\" sortable={true} />\n <TextField source=\"carrier\" label=\"Carrier\" sortable={true} />\n {tabValue === OutboundStatus.ADVICE_ALL ||\n tabValue === OutboundStatus.PENDING ? (\n <DateField\n source=\"scheduledDateTime\"\n label=\"Scheduled Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n {tabValue === OutboundStatus.ARRIVED ? (\n <DateField\n source=\"arrivalDateTime\"\n label=\"Arrival Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n {tabValue === OutboundStatus.LOADED ? (\n <DateField\n source=\"endDateTime\"\n label=\"Loaded Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n {tabValue === OutboundStatus.RELEASED ? (\n <DateField\n source=\"departureDateTime\"\n label=\"Ship Date\"\n sortable={true}\n sortBy={getSortBy(visibleTabs, tabValue)}\n />\n ) : null}\n {tabValue === OutboundStatus.RELEASED ? (\n <TextField source=\"bolNumber\" label=\"BOL Number\" sortable={true} />\n ) : null}\n <FunctionField render={(record) => renderActionButtons(record)} />\n </Datagrid>\n );\n};\n","import {\n add,\n format,\n isAfter,\n isBefore,\n lastDayOfMonth,\n set,\n setDay,\n} from \"date-fns\";\n\nimport { usHolidays } from \"../../../utils/constants\";\nimport { isSameDay } from \"../../../utils/utils\";\n\nexport const isWorkday = (evtType, date) =>\n evtType.schedule.workdays[date.getDay()].selected;\n\nexport const isDateAfterMaxSchedulingDay = (evtType, day) =>\n isAfter(day, evtType.maxScheduleDay);\n\nexport const isDateBeforeMinSchedulingDay = (evtType, day) =>\n isSameDay(day, evtType.minScheduleDay)\n ? false\n : isBefore(day, evtType.minScheduleDay);\n\nexport const isHoliday = (evtType, date) =>\n evtType.holidays.find((itm) => isSameDay(itm, date)) !== undefined;\n\nexport const shouldDisableDate = (evtType, day, override) => {\n if (!evtType) return true;\n if (override) return false;\n const workday = isWorkday(evtType, day);\n const isBefore = isDateBeforeMinSchedulingDay(evtType, day);\n const isAfter = isDateAfterMaxSchedulingDay(evtType, day);\n const isYardHoliday = isHoliday(evtType, day);\n return !workday || isBefore || isAfter || isYardHoliday;\n};\n\nconst getHolidayDate = (year, month, week, day) => {\n let date;\n if (week < 0) {\n date = lastDayOfMonth(new Date(year, month, 1));\n date = setDay(date, day);\n if (date.getMonth() > month) {\n date = add(date, { days: -7 });\n }\n } else {\n date = new Date(year, month, 1);\n date = setDay(date, day);\n if (year > date.getFullYear() || month > date.getMonth()) week++;\n date = add(date, { days: week * 7 });\n }\n return date;\n};\n\nexport const calculateHolidays = (eventType, override) => {\n const holidays = [];\n if (!override) {\n const today = new Date();\n const year = today.getFullYear();\n\n window.appUser.reloadYard.schedule.holidays.forEach((itm) => {\n const definition = usHolidays[itm];\n const dList = definition.split(\",\");\n let holidayYear = year;\n const month = Number(dList[0]);\n if (month < today.getMonth()) holidayYear++;\n if (dList.length === 2)\n holidays.push(new Date(holidayYear, month, Number(dList[1])));\n else if (itm !== \"Day after Thanksgiving\") {\n const holidayDate = getHolidayDate(\n holidayYear,\n month,\n Number(dList[1]),\n Number(dList[2])\n );\n holidays.push(holidayDate);\n if (\n itm === \"Thanksgiving Day\" &&\n window.appUser.reloadYard.schedule.holidays.includes(\n \"Day after Thanksgiving\"\n )\n ) {\n holidays.push(add(holidayDate, { days: 1 }));\n }\n }\n });\n }\n eventType.holidays = holidays;\n};\n\n// Helper function to get workday start time\nconst getWorkdayStartTime = (date, workDay) => {\n const [hourStr, rest] = workDay.startDayTime.split(\":\");\n let hour = Number(hourStr);\n const minutes = Number(rest.substring(0, 2));\n const ampm = rest.substring(2).toLowerCase();\n if (ampm === \"pm\" && hour !== 12) hour += 12;\n if (ampm === \"am\" && hour === 12) hour = 0;\n\n return set(date, { hours: hour, minutes, seconds: 0, milliseconds: 0 });\n};\n\n// Helper function to get workday end time\nconst getWorkdayEndTime = (date, workDay) => {\n const [hourStr, rest] = workDay.endDayTime.split(\":\");\n let hour = Number(hourStr);\n const minutes = Number(rest.substring(0, 2));\n const ampm = rest.substring(2).toLowerCase();\n if (ampm === \"pm\" && hour !== 12) hour += 12;\n if (ampm === \"am\" && hour === 12) hour = 0;\n\n return set(date, { hours: hour, minutes, seconds: 0, milliseconds: 0 });\n};\n\nexport const getMinScheduleDay = (eventType, override) => {\n // Start with today’s date\n const now = new Date();\n let provisional = now;\n debugger;\n\n if (override) {\n // If override is enabled, ignore minNoticeHours and start today current time, even if after hours.\n const nowWorkDay = eventType.schedule.workdays[now.getDay()];\n const dayStart = getWorkdayStartTime(now, nowWorkDay);\n const dayEnd = getWorkdayEndTime(now, nowWorkDay);\n\n if (now < dayStart) {\n // If current time is before today's work start, use start time\n provisional = dayStart;\n } else if (now > dayEnd) {\n // If current time is after today's work end, move to the next day and use its start time.\n const nextDay = add(now, { days: 1 });\n const nextWorkDay = eventType.schedule.workdays[nextDay.getDay()];\n provisional = getWorkdayStartTime(nextDay, nextWorkDay);\n }\n } else {\n // Else (if now is within working hours), keep it unchanged.\n\n // First, add the minNoticeHours to get the provisional time.\n provisional = add(now, { hours: eventType.schedule.minNoticeHours });\n\n // Now, adjust provisional until it falls on a valid workday and within workday hours.\n while (true) {\n // If the provisional day is a holiday, skip to the next day.\n if (isHoliday(eventType, provisional)) {\n provisional = add(provisional, { days: 1 });\n // After moving a day forward, reset to the new day’s workday start if available.\n const newWorkDay = eventType.schedule.workdays[provisional.getDay()];\n if (newWorkDay && newWorkDay.selected) {\n provisional = getWorkdayStartTime(provisional, newWorkDay);\n }\n continue;\n }\n\n // Get the workday for the current provisional day.\n const workDay = eventType.schedule.workdays[provisional.getDay()];\n // If that day isn’t selected, skip to the next day.\n if (!workDay.selected) {\n provisional = add(provisional, { days: 1 });\n const newWorkDay = eventType.schedule.workdays[provisional.getDay()];\n if (newWorkDay && newWorkDay.selected) {\n provisional = getWorkdayStartTime(provisional, newWorkDay);\n }\n continue;\n }\n\n // Get the start and end times for that day.\n const dayStart = getWorkdayStartTime(provisional, workDay);\n const dayEnd = getWorkdayEndTime(provisional, workDay);\n\n // If the provisional time is before the day's start, reset it to dayStart.\n if (provisional < dayStart) {\n provisional = dayStart;\n break; // It now falls within the workday.\n }\n\n // If the provisional time is after the day's end, skip to the next day.\n if (provisional > dayEnd) {\n provisional = add(provisional, { days: 1 });\n const newWorkDay = eventType.schedule.workdays[provisional.getDay()];\n if (newWorkDay && newWorkDay.selected) {\n provisional = getWorkdayStartTime(provisional, newWorkDay);\n }\n continue;\n }\n\n // Otherwise, the provisional time is within valid workday hours.\n break;\n }\n }\n\n return provisional;\n};\n\nconst getStartDate = (workDay, day) => {\n const startDateTimeList = workDay.startDayTime.split(\":\");\n let startHour = Number(startDateTimeList[0]);\n const startAmPm = startDateTimeList[1].substring(2);\n if (startAmPm !== 12 && startAmPm === \"pm\") startHour += 12;\n const startMinutes = Number(startDateTimeList[1].substring(0, 2));\n const startDate = set(day, { hours: startHour, minutes: startMinutes });\n return startDate;\n};\n\nconst getEndDate = (workDay, day) => {\n const endDateTimeList = workDay.endDayTime.split(\":\");\n let endHour = Number(endDateTimeList[0]);\n const endMinutes = Number(endDateTimeList[1].substring(0, 2));\n const endAmPm = endDateTimeList[1].substring(2);\n if (endHour !== 12 && endAmPm === \"pm\") endHour += 12;\n const endDate = set(day, { hours: endHour, minutes: endMinutes });\n return endDate;\n};\n\nexport const generateDayTimeslots = (\n day,\n eventType,\n override,\n setValidationError\n) => {\n debugger;\n const timeslots = [];\n const workDay = eventType.schedule.workdays[day.getDay()];\n\n // If the workday is selected or override is enabled, generate timeslots\n if (workDay.selected || override) {\n let startDate = getStartDate(workDay, day);\n\n // Ensure we don't allow times before the min schedule day\n while (startDate < eventType.minScheduleDay) {\n startDate = add(startDate, {\n minutes: eventType.duration + eventType.bufferTime,\n });\n }\n let endDate = getEndDate(workDay, day);\n while (startDate < endDate) {\n const slot = format(startDate, \"h:mmaaa\");\n timeslots.push(slot);\n\n // Move to the next timeslot\n startDate = add(startDate, {\n minutes: eventType.duration + eventType.bufferTime,\n });\n }\n }\n\n // Handle case where no timeslots are available for a day\n if (timeslots.length === 0) {\n setValidationError(\"Date unavailable, please select abother date.\");\n } else {\n setValidationError(\"\");\n }\n return timeslots;\n};\n","import React, { useState, useEffect } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { timeslotByEventTypeByDateByTime } from \"../../../graphql/queries\";\n\nimport DateFnsUtils from \"@date-io/date-fns\";\nimport { add, format, getWeek } from \"date-fns\";\n\nimport {\n Avatar,\n Backdrop,\n Box,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n FormControlLabel,\n Grid,\n IconButton,\n makeStyles,\n MenuItem,\n Button as MuiButton,\n TextField as MuiTextfield,\n Switch,\n Typography,\n} from \"@material-ui/core\";\nimport HighlightOffIcon from \"@material-ui/icons/HighlightOff\";\nimport PublicIcon from \"@material-ui/icons/Public\";\nimport ScheduleIcon from \"@material-ui/icons/Schedule\";\nimport { blue } from \"@material-ui/core/colors\";\nimport { Calendar, MuiPickersUtilsProvider } from \"@material-ui/pickers\";\n\nimport { Button, useNotify } from \"react-admin\";\n\nimport { AppType, EventType } from \"../../../utils/constants\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { isSameDay, validateAppointment } from \"../../../utils/utils\";\nimport { CancelIcon, CheckIcon, ClearIcon } from \"..\";\nimport \"./Scheduler.css\";\nimport { fetchEventTypes } from \"../../../managerApp/resources/eventTypes/EventTypeUtils\";\nimport {\n calculateHolidays,\n generateDayTimeslots,\n getMinScheduleDay,\n shouldDisableDate,\n} from \"./SchedulerUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: 9999,\n },\n timeslots: {\n flex: 1,\n overflowX: \"clip\",\n overflowY: \"auto\",\n marginLeft: theme.spacing(1),\n paddingLeft: theme.spacing(1),\n },\n timeslot: {\n textTransform: \"none\",\n marginTop: \"2px\",\n },\n dialogActions: {\n marginRight: theme.spacing(2),\n },\n dialogContent: {\n // https://stackoverflow.com/questions/47698037/how-can-i-set-a-height-to-a-dialog-in-material-ui\n height: \"100vh\",\n maxWidth: \"500px\",\n padding: theme.spacing(2),\n },\n dialogCloseIcon: {\n position: \"absolute\",\n right: theme.spacing(0.5),\n top: theme.spacing(0.5),\n },\n selectedDateAvatar: {\n // backgroundColor: theme.palette.type === \"dark\" ? blue[400] : blue[50],\n margin: theme.spacing(0.15),\n backgroundColor: blue[600],\n width: theme.spacing(4.5),\n height: theme.spacing(4.5),\n color: \"white\",\n fontSize: 14,\n },\n dateAvatar: {\n margin: theme.spacing(0.15),\n width: theme.spacing(4.5),\n height: theme.spacing(4.5),\n color: \"white\",\n fontSize: 14,\n },\n spacer: {\n flexGrow: 1, // Takes up all available space\n },\n}));\n\nconst init = (selectedTimeslot, eventType, override) => {\n debugger;\n const today = new Date();\n\n // If no eventType is provided (YARD OutboundCreate case), default to null\n let initializedEventType = eventType?.schedule ? { ...eventType } : null;\n\n // If eventType is defined, calculate scheduling days and holidays\n if (initializedEventType) {\n debugger;\n calculateHolidays(initializedEventType, override);\n\n initializedEventType.minScheduleDay = getMinScheduleDay(\n initializedEventType,\n override\n );\n initializedEventType.maxScheduleDay = add(today, {\n days: initializedEventType.schedule?.maxDaysIntoFuture || 30,\n });\n }\n\n // Determine initial scheduling data\n let schedulingData = {};\n if (selectedTimeslot?.time) {\n schedulingData = {\n date: new Date(\n selectedTimeslot.year,\n selectedTimeslot.month,\n selectedTimeslot.day\n ),\n slot: selectedTimeslot.time,\n };\n } else {\n schedulingData = {\n date: initializedEventType?.minScheduleDay || today,\n slot: \"\",\n };\n }\n\n // Return the initialized event type and scheduling data\n return { initializedEventType, schedulingData };\n};\n\nconst getCapitalizedResourceName = (eventType) => {\n if (!eventType.resourceName) return \"\";\n return (\n eventType.resourceName[0].toUpperCase() +\n eventType.resourceName.substring(1)\n );\n};\n\nconst getTitle = (evtType, appType) => {\n // Showw asset name only to yard managerr / supervisor\n if (appType === AppType.YARD && evtType?.resourceName) {\n const name = getCapitalizedResourceName(evtType);\n return `Schedule a ${name}`;\n }\n // Show default title to customers\n return `Schedule an Appointment`;\n};\n\nconst getTimeslotsForDate = async (\n evtType,\n schedulingData,\n setLoading,\n setUnavailableTimeSlots,\n notify\n) => {\n if (!evtType?.id) return;\n\n try {\n debugger;\n setLoading(true);\n\n // Fetch timeslots for the given eventType and date\n const results = await API.graphql(\n graphqlOperation(timeslotByEventTypeByDateByTime, {\n eventTypeId: evtType.id,\n yearMonthDayTime: {\n beginsWith: {\n year: schedulingData.date.getFullYear(),\n month: schedulingData.date.getMonth(),\n day: schedulingData.date.getDate(),\n },\n },\n })\n );\n\n // Extract timeslots from the API response\n const timeslots = results.data.timeslotByEventTypeByDateByTime.items;\n\n // Create a map to count occurrences of each timeslot\n const timeslotMap = {};\n timeslots.forEach((itm) => {\n let count = timeslotMap[itm.time] || 0;\n timeslotMap[itm.time] = count + 1;\n });\n\n // Initialize an object to track unavailable timeslots\n let unavailableTimeSlots = {};\n\n // cannot override max number of resources per timeslot.\n // Shipment Save validation checks max concurrent bookings\n Object.keys(timeslotMap).forEach((key) => {\n // If the number of scheduled events exceeds the available resources, mark as unavailable\n if (timeslotMap[key] >= evtType.numberOfResources) {\n unavailableTimeSlots[key] = true;\n }\n });\n\n setUnavailableTimeSlots(unavailableTimeSlots);\n } catch (err) {\n logError(\"Scheduler:getTimeslotsForDate\", err, notify);\n } finally {\n setLoading(false);\n }\n};\n\nexport const Scheduler = ({\n eventType,\n appType = window.appUser.appType,\n account,\n open,\n setIsOpen,\n resettable,\n selectedTimeslot,\n setSelectedTimeslot,\n}) => {\n const notify = useNotify();\n const classes = useStyles();\n const [evtType, setEvtType] = useState(eventType);\n const [eventTypes, setEventTypes] = useState([]);\n const [schedulingData, setSchedulingData] = useState({ date: new Date() });\n const [timeslots, setTimeslots] = useState([]);\n const [unavailableTimeSlots, setUnavailableTimeSlots] = useState({});\n const [validationError, setValidationError] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [override, setOverride] = useState(false);\n\n useEffect(() => {\n // Fetch event types only for YARD users\n if (appType === \"YARD\") {\n fetchEventTypes(setEventTypes, notify);\n }\n }, [appType]);\n\n useEffect(() => {\n // set default eventType\n if (eventTypes?.length === 1) {\n const defaultEventType = eventTypes[0];\n handleEventTypeChange(defaultEventType?.id);\n }\n }, [eventTypes]);\n\n useEffect(() => {\n debugger;\n if (eventType) {\n // Initialize state when an eventType is provided\n const { initializedEventType, schedulingData } = init(\n selectedTimeslot,\n eventType,\n override\n );\n\n setEvtType(initializedEventType);\n setSchedulingData(schedulingData);\n }\n }, [eventType]);\n\n useEffect(() => {\n debugger;\n if (evtType) {\n // Initialize state when override changes.\n const { initializedEventType, schedulingData } = init(\n selectedTimeslot,\n evtType,\n override\n );\n\n setEvtType(initializedEventType);\n setSchedulingData(schedulingData);\n }\n }, [override]);\n\n useEffect(() => {\n debugger;\n if (evtType?.holidays && evtType?.minScheduleDay) {\n handleDateChange(evtType.minScheduleDay);\n }\n }, [evtType]);\n\n const handleEventTypeChange = async (value) => {\n debugger;\n setLoading(true);\n\n if (!value) return;\n const selectedEventType = eventTypes.find((et) => et.id === value);\n if (!selectedEventType) return; // Prevent unnecessary re-renders\n\n debugger;\n // Reinitialize state with new eventType and scheduling data and validate\n const { initializedEventType, schedulingData } = init(\n selectedTimeslot,\n selectedEventType,\n override\n );\n setSchedulingData(schedulingData);\n setEvtType(initializedEventType);\n };\n\n const handleSelection = async (property, value) => {\n debugger;\n schedulingData[property] = value;\n\n if (property === \"date\") {\n schedulingData.slot = \"\";\n\n // If the selectedTimeslot exists and matches the current date, highlight it\n if (\n selectedTimeslot &&\n isSameDay(\n value,\n new Date(\n selectedTimeslot.year,\n selectedTimeslot.month,\n selectedTimeslot.day\n )\n ) &&\n selectedTimeslot.eventTypeId === evtType.id\n ) {\n schedulingData.slot = selectedTimeslot.time; // Pre-select the slot\n }\n\n await getTimeslotsForDate(\n evtType,\n schedulingData,\n setLoading,\n setUnavailableTimeSlots,\n notify\n ); // Load timeslots for the selected date\n }\n\n setSchedulingData({ ...schedulingData });\n };\n\n const isValid = () => {\n return schedulingData.date && schedulingData.slot ? true : false;\n };\n\n const handleCreateAppointment = async () => {\n if (!account && !setSelectedTimeslot) setIsOpen(false);\n try {\n debugger;\n setLoading(true);\n const tempTimeslot = {\n groups: account.groups,\n status: EventType.RESERVED,\n reloadYardId: account.reloadYardId,\n accountId: account?.id,\n accountName: account?.businessName,\n eventTypeId: evtType.id,\n eventType: evtType,\n year: schedulingData.date.getFullYear(),\n month: schedulingData.date.getMonth(),\n week: getWeek(schedulingData.date),\n day: schedulingData.date.getDate(),\n time: schedulingData.slot,\n };\n const error = await validateAppointment(tempTimeslot);\n if (error) {\n setValidationError(`${tempTimeslot.time} is no longer available.`);\n return;\n }\n setSelectedTimeslot(tempTimeslot);\n setIsOpen(false);\n } catch (err) {\n logError(\"Scheduler:handleCreateAppointment\", err, notify);\n } finally {\n setLoading(false);\n }\n };\n\n const handleClearAppointment = () => {\n setSelectedTimeslot(null);\n setIsOpen(false);\n };\n\n const handleDateChange = async (newValue) => {\n debugger;\n if (evtType) {\n setLoading(true);\n if (\n shouldDisableDate(evtType, newValue, override) &&\n newValue < evtType.maxScheduleDay\n ) {\n while (shouldDisableDate(evtType, newValue, override)) {\n newValue = add(newValue, { days: 1 });\n }\n }\n setTimeslots(\n generateDayTimeslots(newValue, evtType, override, setValidationError)\n );\n await handleSelection(\"date\", newValue);\n setLoading(false);\n }\n };\n\n const handleMonthChange = async (newValue) => {\n debugger;\n handleDateChange(newValue);\n };\n\n const handleTimeSlotChange = (newValue) => {\n debugger;\n newValue = timeslots && schedulingData.slot === newValue ? \"\" : newValue;\n handleSelection(\"slot\", newValue);\n };\n\n const getSelectedDateText = () => {\n if (schedulingData.date && schedulingData.date) {\n return (\n format(schedulingData.date, \"EEEE, MMMM d\") + \" \" + schedulingData.slot\n );\n } else if (schedulingData.date) {\n return \"Select a timeslot\";\n }\n return \"Select a date\";\n };\n\n const isDateDisabled = (day) => {\n return shouldDisableDate(evtType, day, override);\n };\n\n const renderDayInPicker = (\n date,\n selectedDate,\n dayInCurrentMonth,\n dayComponent\n ) => {\n debugger;\n // if (shouldDisableDate(date) || !dayInCurrentMonth) return dayComponent;\n if (isSameDay(date, selectedDate))\n return (\n <Box display=\"flex\">\n <Avatar className={classes.selectedDateAvatar}>\n {selectedDate.getDate()}\n </Avatar>\n </Box>\n );\n\n if (isSameDay(date, new Date())) {\n return <Avatar className={classes.dateAvatar}>{date.getDate()}</Avatar>;\n }\n return dayComponent;\n };\n\n const isTimeslotDisabled = (itm) =>\n !schedulingData.date || unavailableTimeSlots[itm] !== undefined;\n\n return (\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <Dialog open={open}>\n <DialogTitle component=\"span\">{getTitle(evtType, appType)}</DialogTitle>\n <IconButton\n onClick={() => setIsOpen(false)}\n edge=\"start\"\n className={classes.dialogCloseIcon}\n >\n <HighlightOffIcon fontSize=\"large\" />\n </IconButton>\n <DialogContent dividers className={classes.dialogContent}>\n <Grid container spacing={0} style={{ height: \"100%\" }}>\n <Grid item xs={12}>\n {appType === AppType.YARD ? (\n <MuiTextfield\n select\n label=\"Event Type\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n required\n value={evtType?.id || \"\"}\n onChange={(event) =>\n handleEventTypeChange(event.target.value)\n }\n SelectProps={{\n displayEmpty: true, // Ensures the placeholder works\n }}\n InputLabelProps={{ shrink: true }}\n >\n <MenuItem value=\"\" disabled>\n Select an Event Type\n </MenuItem>\n {eventTypes.map((eventType) => (\n <MenuItem key={eventType.id} value={eventType.id}>\n {eventType.name}\n </MenuItem>\n ))}\n </MuiTextfield>\n ) : (\n <>\n <Typography variant=\"body1\" color=\"textPrimary\">\n {evtType?.description}\n </Typography>\n <Box mb={2} mt={2}>\n <Divider />\n </Box>\n </>\n )}\n </Grid>\n\n {/* Left side: fixed content */}\n <Grid item xs={9}>\n {/* Wrap the left side content in a Box that does not scroll */}\n <Box\n // this box horizontally centers the inner calendar box\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <Box\n // this box constrain the calendar to width=300\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"strech\"\n >\n {\n <Backdrop open={loading} className={classes.backdrop}>\n <CircularProgress />\n </Backdrop>\n }\n <Calendar\n theme={{\n todayTextColor: \"blue\",\n selectedDayBackgroundColor: \"red\",\n }}\n // date={schedulingData.date || new Date()} // Ensure date defaults to today\n date={schedulingData.date}\n disablePast\n onChange={handleDateChange}\n onMonthChange={handleMonthChange}\n shouldDisableDate={isDateDisabled}\n maxDate={evtType ? evtType.maxScheduleDay : undefined} // Only set if evtType is present\n allowKeyboardControl={false}\n renderDay={renderDayInPicker}\n disabled={!evtType}\n />\n </Box>\n </Box>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"space-between\"\n alignItems=\"strech\"\n flex={2}\n >\n <Box mt={2} mb={1}>\n <Typography gutterBottom variant=\"subtitle2\">\n {getSelectedDateText()}\n </Typography>\n <Box mb={0.5} display=\"flex\" alignItems=\"center\">\n <ScheduleIcon fontSize=\"sm\"></ScheduleIcon>\n <Typography\n variant=\"subtitle2\"\n color=\"textSecondary\"\n component=\"span\"\n >\n   {evtType?.duration} mins\n </Typography>\n </Box>\n <Box mb={0.5} display=\"flex\" alignItems=\"center\">\n <PublicIcon fontSize=\"sm\"></PublicIcon>\n <Typography\n variant=\"subtitle2\"\n color=\"textSecondary\"\n component=\"span\"\n >\n   {window.appUser.reloadYard.timeZone}\n </Typography>\n </Box>\n {appType === AppType.YARD && (\n <Box mb={0.5} display=\"flex\" alignItems=\"center\">\n <FormControlLabel\n control={\n <Switch\n checked={override}\n onChange={() => setOverride(!override)}\n disabled={!evtType}\n />\n }\n label=\"Override Validation\"\n />\n </Box>\n )}\n {validationError && (\n <Typography variant=\"caption\" color=\"error\">\n {validationError}\n </Typography>\n )}\n </Box>\n </Box>\n </Grid>\n {/* Right side: timeslots */}\n <Grid\n item\n xs={3}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n height: \"90%\",\n }}\n >\n {/* This Box will fill the remaining space and scroll vertically */}\n <Box className={classes.timeslots}>\n {timeslots.map((itm) => (\n <MuiButton\n key={itm}\n color=\"primary\"\n fullWidth\n variant={\n schedulingData.slot === itm ? \"contained\" : \"outlined\"\n }\n onClick={() => handleTimeSlotChange(itm)}\n disabled={isTimeslotDisabled(itm)}\n className={classes.timeslot}\n >\n {itm}\n </MuiButton>\n ))}\n </Box>\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions className={classes.dialogActions}>\n {resettable && (\n <Button\n label=\"CLEAR\"\n variant=\"text\"\n color=\"default\"\n onClick={handleClearAppointment}\n >\n <ClearIcon />\n </Button>\n )}\n <div className={classes.spacer}></div>\n <Button\n label=\"Cancel\"\n variant=\"text\"\n color=\"default\"\n onClick={() => setIsOpen(false)}\n >\n <CancelIcon />\n </Button>\n <Button\n label=\"Confirm\"\n variant=\"text\"\n color=\"primary\"\n disabled={!isValid()}\n onClick={handleCreateAppointment}\n >\n <CheckIcon />\n </Button>\n </DialogActions>\n </Dialog>\n </MuiPickersUtilsProvider>\n );\n};\n","import React from \"react\";\n\nimport { Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n AddIcon,\n EditIcon,\n InfoOutlinedIcon,\n InvoiceIcon,\n LinkOffIcon,\n RemoveIcon,\n} from \"../../../components/common\";\nimport { getFormTab } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles((theme) => ({\n icon: {\n verticalAlign: \"middle\",\n display: \"inline-flex\",\n },\n}));\n\nexport const OutboundCreateHelp = (props) => {\n const classes = useStyles();\n var tab = getFormTab(props);\n\n return (\n <>\n {(() => {\n switch (tab) {\n case \"0\":\n return (\n <>\n <Typography variant=\"overline\">\n <strong>Outbound Setup</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>PO Number: </strong>\n Purchase Order number provided by Customer.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Carrier Name: </strong>\n Rail line / truck line name.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Carrier Type: </strong>\n Select carrier type - determines \"Pickup Number\" or\n \"Railcar Number\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Pickup Number: </strong> Required if Carrier Type\n = \"Truck\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Railcar Number: </strong>\n Required if shipping by Rail and Carrier Type = \"Rail\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Must Tarp: </strong>\n Required if Carrier Type = \"Truck\". Indicate if load needs\n to be covered with tarp.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Destination Name & Address: </strong>\n Optional - can be left blank for \"Blind Shipments\". If\n Destination entered, address is required.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Attachments: </strong>\n Attach the original PO from customer.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup. These fields are\n Account-specific, so they may differ from one inbound to\n another.\n </Typography>\n </li>\n </ul>\n </>\n );\n case \"1\":\n return (\n <>\n <Typography variant=\"overline\">\n <strong>Pick List</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Product Name: </strong>\n Product name as displayed in the Inventories. Items linked\n to Product Catalog will have an{\" \"}\n <InfoOutlinedIcon className={classes.icon} /> Info Bubble\n in the right corner. Those not linked to a Product, will\n display <LinkOffIcon className={classes.icon} /> broken\n link icon.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. On Hand: </strong>Stock quantity in storage.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Committed: </strong>\n Stock quantity Reserved across all Outbound Shipments,\n including this one - dynamically updated.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Available: </strong>\n Stock quantity available of Outbound Shipment, inclusive\n of Qty. Committed in this shipment.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Outbound: </strong>Stock quantity Reserved\n for this shipment.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup or Product Catalog. These\n fields are Account- and Product-specific, so they may\n differ from one inbound to another.\n </Typography>\n </li>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>\n Add new Line Item to Pick List. Launches \"Inventory\n Search\" dialog. Account must be selected on Shipment Setup\n Tab to enable the Add button. Inventory Search dialog\n allows you to search for All Inventories by hitting the\n Search button, or narrowing down results by product name,\n or lot number.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Pick List Line Item and adjust global\n Inventory counts.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Total Quantity & Shipping Units: </strong>\n Sum total of Qty. Outbound. Indicate units of measure for\n counting Qty shipped.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Bill Quantity & Units: </strong>\n Total Qty. Outbound and Units used for invoicing customer.\n If Billing Units = Weight Units, the measured truck weight\n will be used for invoicing.\n </Typography>\n </li>\n </ul>\n </>\n );\n default:\n return (\n <>\n <Typography variant=\"overline\">\n <strong>Notes</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Use the Notes Tab to document key events and changes made to\n the Shipment record.\n </Typography>\n <ul>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>Add new Note Line Item.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Note Line Item - this info will be\n permanently lost.\n </Typography>\n </li>\n </ul>\n </>\n );\n }\n })()}\n </>\n );\n};\n\nexport const OutboundEditHelp = (props) => {\n const classes = useStyles();\n var tab = getFormTab(props);\n\n return (\n <>\n {(() => {\n switch (tab) {\n case \"0\":\n return (\n <>\n <Typography variant=\"overline\">\n <strong>Outbound Setup</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Carrier Name: </strong>\n Rail line / truck line name.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Carrier Type: </strong>\n Select carrier type - determines \"Pickup Number\" or\n \"Railcar Number\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Pickup Number: </strong> Required if Carrier Type\n = \"Truck\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Railcar Number: </strong>\n Required if shipping by Rail and Carrier Type = \"Rail\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Must Tarp: </strong>\n Required if Carrier Type = \"Truck\". Indicate if load needs\n to be covered with tarp.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Destination Name & Address: </strong>\n Optional - can be left blank for \"Blind Shipments\". If\n Destination entered, address is required.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Attachemnts: </strong>\n Attach the original PO from customer.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup. These fields are\n Account-specific, so they may differ from one inbound to\n another.\n </Typography>\n </li>\n <li>\n <Typography>\n <InvoiceIcon className={classes.icon} />\n <strong> INVOICE: </strong>Generate new Invoice for this\n Outbound Shipment.\n </Typography>\n </li>\n </ul>\n </>\n );\n case \"1\":\n return (\n <>\n <Typography variant=\"overline\">\n <strong>Pick List</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Product Name: </strong>\n Product name as displayed in the Inventories. Items linked\n to Product Catalog will have an{\" \"}\n <InfoOutlinedIcon className={classes.icon} /> Info Bubble\n in the right corner. Those not linked to a Product, will\n display <LinkOffIcon className={classes.icon} /> broken\n link icon.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. On Hand: </strong>Stock quantity in storage.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Committed: </strong>\n Stock quantity Reserved across all Outbound Shipments,\n including this one - dynamically updated.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Available: </strong>\n Stock quantity available of Outbound Shipment, inclusive\n of Qty. Committed in this shipment.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Outbound: </strong>Stock quantity Reserved\n for this shipment.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup or Product Catalog. These\n fields are Account- and Product-specific, so they may\n differ from one inbound to another.\n </Typography>\n </li>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>\n Add new Line Item to Pick List. Launches \"Inventory\n Search\" dialog. Account must be selected on Shipment Setup\n Tab to enable the Add button. Inventory Search dialog\n allows you to search for All Inventories by hitting the\n Search button, or narrowing down results by product name,\n or lot number.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Pick List Line Item and adjust global\n Inventory counts.\n </Typography>\n </li>\n <li>\n <Typography>\n <EditIcon className={classes.icon} />\n <strong> EDIT: </strong>\n Edit Qty. Outbound of selected Line Item. After saving or\n cancelling changes, you will be brought back to this\n screen.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Total Quantity & Shipping Units: </strong>\n Sum total of Qty. Outbound. Indicate units of measure for\n counting Qty shipped.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Bill Quantity & Units: </strong>\n Total Qty. Outbound and Units used for invoicing customer.\n If Billing Units = Weight Units, the measured truck weight\n will be used for invoicing.\n </Typography>\n </li>\n </ul>\n </>\n );\n case \"2\":\n return (\n <>\n <Typography variant=\"overline\">\n <strong>Dispatch</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Use the Dispatch Tab to capture key event timestamps when the\n shipment is advanced from Pending > Placed > Released status.\n Alternatively, you can advance a record directly from the\n \"Outboud Shipment\" List view.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Date Created: </strong>\n Date customer advised of Outbound Shipment.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Time Placed: </strong>\n Time of Arrival when the Carrier arrives and checks in\n with the Yard.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Empty Weight & Units: </strong>\n Empty truck weight at time of Arrival. Used for invoicing\n if Units = Billing Units.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Load Start Time:</strong> Time when Crew started\n loading outbound inventory.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Load End Time:</strong> Time when Crew finished\n loading outbound inventory.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Time Released:</strong> Time shipment was approved\n and Released.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Loaded Weight & Units: </strong>\n Loaded truck weight at time of Departure. Used for\n invoicing if Units = Billing Units.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Seal Number: </strong>\n Seal tag number for shipments that require sealing.\n </Typography>\n </li>\n </ul>\n </>\n );\n case \"3\":\n return (\n <>\n <Typography variant=\"overline\">\n <strong>Notes</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Use the Notes Tab to document key events and changes made to\n the Shipment record.\n </Typography>\n <ul>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>Add new Note Line Item.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Note Line Item - this info will be\n permanently lost.\n </Typography>\n </li>\n </ul>\n </>\n );\n default:\n return (\n <>\n <Typography variant=\"overline\">\n <strong>History</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n The History Tab provides an automated, chronological Audit\n Trail of key events and record changes.\n </Typography>\n </>\n );\n }\n })()}\n </>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { API } from \"aws-amplify\";\n\nimport { Backdrop, CircularProgress, makeStyles } from \"@material-ui/core\";\n\nimport { SaveButton, useNotify, useRedirect } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { getCustomFieldsToSave } from \"../../../components/common/CustomFields\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { FilePaths, NoteType, OutboundStatus } from \"../../../utils/constants\";\nimport { saveRemoveFile, saveRemoveFiles } from \"../../../utils/fileUtils\";\nimport {\n createLambdaAppointment,\n validateAppointment,\n} from \"../../../utils/utils\";\nimport { ConditionalConfirm } from \"../../../components/common/ConditionalConfirm\";\nimport {\n autogenPickupNumber,\n formValidate,\n} from \"../../../managerApp/resources/outboundShipments/OutboundUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n}));\n\nexport const ValidateCreateButton = (props) => {\n const classes = useStyles();\n const form = useForm();\n const notify = useNotify();\n const redirect = useRedirect();\n const [isSaving, setIsSaving] = useState(false);\n const [open, setOpen] = useState(false);\n const [confirmMessage, setConfirmMessage] = useState(\"\");\n const { appUser, account, selectedTimeslot } = props;\n\n const handleValidateSave = async () => {\n debugger;\n let error = null;\n const isValid = formValidate(form, notify);\n\n if (isValid) {\n error = await validateAppointment(selectedTimeslot);\n }\n\n if (error) {\n setConfirmMessage(\n `${selectedTimeslot.time} is no longer available. Please select a new time.`\n );\n setOpen(true);\n } else handleSave();\n };\n\n const handleDialogClose = () => setOpen(false);\n\n const handleSave = async () => {\n debugger;\n setOpen(false);\n props.handleSubmit();\n };\n\n const transform = async (data) => {\n setIsSaving(true);\n data = { ...data };\n debugger;\n\n data.active = \"true\";\n data.status = OutboundStatus.ADVICE_PENDING;\n data.groups = account?.groups;\n data.reloadYardId = appUser?.reloadYardId;\n data.accountId = account.id;\n data.billToAccountId = account.id;\n data.accountName = account.businessName;\n data.transfer = null;\n data.transferToAccountId = \"\";\n data.advisedBy = appUser.email;\n\n data.totalQuantity = data.totalQuantity || 0;\n data.billUnits = account.outboundBillingUnits;\n data.instructions = account.outboundInstructions;\n data.skipSignature = account.outboundSkipSignature;\n\n data.createDateTime = new Date();\n data.scheduledDateTime = data.scheduledDateTime\n ? data.scheduledDateTime\n : null;\n data.arrivalDateTime = null;\n data.endDateTime = null;\n data.departureDateTime = null;\n\n data.poNumber = data.poNumber ? data.poNumber : \"\";\n data.carrierType = data.carrierType ? data.carrierType : \"\";\n data.carrier = data.carrier ? data.carrier : null;\n data.railCarNumber = data.railCarNumber ? data.railCarNumber : null;\n\n data.mustTarp = data.mustTarp ? data.mustTarp : false;\n data.scaleWeightUnits = data.weightUnits;\n\n if (data.shipTo?.state) {\n data.shipTo.state = data.shipTo.state.toUpperCase();\n data.shipTo.zipCode = data.shipTo.zipCode.toUpperCase();\n }\n\n data.history = [\n {\n text: `Created outbound advice.`,\n by: window.appUser?.fullName,\n date: data.createDateTime,\n type: NoteType.SHIPMENT,\n },\n ];\n\n if (data.notes?.length > 0) {\n data.notes.forEach((element) => {\n element.type = NoteType.GENERIC;\n element.date = new Date();\n element.by = window.appUser?.fullName;\n });\n } else data.notes = undefined;\n\n try {\n data.customFields = getCustomFieldsToSave(\n data.customFields,\n account?.outboundCustomFields\n );\n\n if (account.generatePickupNumber) {\n data.pickupNumber = await autogenPickupNumber(account);\n } else {\n data.pickupNumber = data.pickupNumber ? data.pickupNumber : \"\";\n }\n\n await Promise.all([\n saveRemoveFiles(\n undefined,\n data,\n \"attachments\",\n `${FilePaths.OUTBOUND}/${Date.now()}`\n ),\n saveRemoveFile(\n undefined,\n data,\n \"bolFile\",\n `${FilePaths.OUTBOUND}/${Date.now()}`\n ),\n ]);\n } catch (err) {\n logError(\"outbounds:ValidateCreateButton:transform\", err);\n return Promise.reject();\n }\n\n return data;\n };\n\n const onSuccess = async ({ data }) => {\n try {\n debugger;\n let outboundUpdateInput = null;\n let timeslotCreateInput = null;\n\n if (selectedTimeslot) {\n timeslotCreateInput = createLambdaAppointment(\n selectedTimeslot,\n null,\n data.id,\n data.accountId,\n data.accountName\n );\n outboundUpdateInput = {\n ...data,\n timeslotId: timeslotCreateInput.id,\n };\n delete outboundUpdateInput.account;\n delete outboundUpdateInput.area;\n delete outboundUpdateInput.invoice;\n delete outboundUpdateInput.location;\n delete outboundUpdateInput.reloadYardCommodity;\n delete outboundUpdateInput.seals;\n delete outboundUpdateInput.shipmentLineItems;\n delete outboundUpdateInput.timeslot;\n }\n\n // console.log(\"outboundUpdateInput\", outboundUpdateInput);\n // console.log(\"timeslotCreateInput\", timeslotCreateInput);\n\n if (outboundUpdateInput || timeslotCreateInput) {\n const response = await API.post(\"transREST\", \"/outboundCreate\", {\n body: {\n outboundUpdateInput,\n accountUpdateinput: null,\n timeslotCreateInput,\n shipmentLineItemCreateList: null,\n shipmentItemInventoryItemCreateList: null,\n inventoryItemUpdateList: null,\n inventoryUpdateList: null,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n if (response.error) throw response.error;\n }\n\n // if (selectedTimeslot) {\n // await createAppointment(\n // selectedTimeslot,\n // null,\n // data.id,\n // appUser.accountId,\n // appUser.accountName\n // );\n // }\n\n notify(\"Outbound advice created successfully\");\n redirect(\"/outboundShipments\");\n } catch (error) {\n logError(\n `outbounds:ValidateCreateButton:onSuccess`,\n error,\n notify,\n redirect\n );\n } finally {\n setIsSaving(false);\n }\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\"outbounds:ValidateCreateButton:onFailure\", error, notify);\n };\n\n return (\n <>\n <Backdrop className={classes.backdrop} open={isSaving}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <SaveButton\n label=\"Save\"\n submitOnEnter={false}\n undoable={false}\n saving={isSaving}\n handleSubmitWithRedirect={() => handleValidateSave()}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <ConditionalConfirm\n isOpen={open}\n loading={isSaving}\n title=\"Save Confirmation\"\n content={confirmMessage}\n cancel=\"Ok\"\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getAccount } from \"../../../graphql/account/custom-queries\";\nimport { getEventType } from \"../../../graphql/queries\";\n\nimport {\n Box,\n Grid,\n InputAdornment,\n TextField as TextFieldMui,\n Typography,\n} from \"@material-ui/core\";\n\nimport {\n Create,\n DateTimeInput,\n FileInput,\n FormDataConsumer,\n FormTab,\n Loading,\n RadioButtonGroupInput,\n required,\n SelectInput,\n TabbedForm,\n TextInput,\n Toolbar,\n TopToolbar,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { useUser } from \"../../../authenticatorApp/UserContext\";\nimport { AttachFileIcon, CreatedAtIcon } from \"../../../components/common\";\nimport { AddressInput } from \"../../../components/common/AddressInput\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { CustomFields } from \"../../../components/common/CustomFields\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { handleFileChange } from \"../../../utils/fileUtils\";\nimport { getDateTimeFromTimeslot } from \"../../../utils/utils\";\nimport {\n ACCEPTED_FILES,\n AppType,\n CarrierType,\n CarrierTypes,\n MAX_FILES,\n TrueOrFalse,\n} from \"../../../utils/constants\";\nimport * as utils from \"../../../managerApp/resources/outboundShipments/OutboundUtils\";\nimport { Scheduler } from \"../../../components/common/scheduler/Scheduler\";\nimport { OutboundCreateHelp } from \"./OutboundHelp\";\nimport { ValidateCreateButton } from \"./ValidateCreateButton\";\n\nconst validateRequired = required();\n\nconst fetchData = async (\n appUser,\n setAccount,\n setEventType,\n setLoading,\n notify\n) => {\n try {\n setLoading(true);\n let resp = await API.graphql(\n graphqlOperation(getAccount, { id: appUser.accountId })\n );\n const accountData = resp.data.getAccount;\n\n let eventTypeData = null;\n if (accountData?.outboundEventTypeId) {\n resp = await API.graphql(\n graphqlOperation(getEventType, { id: accountData.outboundEventTypeId })\n );\n eventTypeData = resp.data.getEventType;\n }\n\n // Single batch state update to prevent multiple re-renders\n setAccount(accountData);\n setEventType(eventTypeData);\n } catch (err) {\n logError(\"outbounds:OutboundAdviceCreate:fetchData\", err, notify);\n } finally {\n setLoading(false);\n }\n};\n\nconst ShipmentSetupTab = ({\n appUser,\n account,\n eventType,\n selectedTimeslot,\n setSelectedTimeslot,\n ...props\n}) => {\n const form = useForm();\n const notify = useNotify();\n const [selectedAddress, setSelectedAddress] = useState(\"\");\n const CarrierTypesReversed = [].concat(CarrierTypes).reverse();\n const [isSchedulerOpen, setIsSchedulerOpen] = useState(false);\n\n const handleShipToSelect = (event) => {\n const value = event.target.value ? event.target.value : \"\";\n setSelectedAddress(value);\n form.change(\"shipTo\", value ? value : null);\n };\n\n const getSpacing = () => {\n const spacing = 12 - (account?.outboundAdviceInputs?.length || 1) * 2;\n return Math.max(spacing, 0);\n };\n\n const handleSchedulerOpen = (event) => {\n event.preventDefault();\n event.stopPropagation();\n if (eventType) setIsSchedulerOpen(true);\n };\n\n const ignoreEvent = (event) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const handleTimeslot = (timeslot) => {\n const scheduledDate = getDateTimeFromTimeslot(timeslot);\n form.change(\"scheduledDateTime\", scheduledDate);\n setSelectedTimeslot(timeslot);\n };\n\n const getSchedulerHelperText = () => {\n if (!eventType)\n return `Contact ${appUser.reloadYard.name} to setup an event type.`;\n return false;\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"row\" spacing={3}>\n <Grid item container direction=\"column\" spacing={0} lg={8}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <TextFieldMui\n label=\"Transload Yard\"\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={appUser?.reloadYard?.name}\n disabled\n helperText={false}\n />\n </Grid>\n {/* <Grid item xs={12} md={4} >\n <SelectInput source=\"site\" label=\"Site\" variant=\"outlined\" fullWidth\n choices={[\n {id:\"1\", name: \"Crescent 1\"},\n {id:\"2\", name: \"Crescent 2\"},\n {id:\"2\", name: \"Dallas 2\"},\n ]}\n helperText={false}\n />\n </Grid> */}\n {account?.outboundAdviceInputs?.includes(\"scheduledDateTime\") && (\n <Grid item xs={12} md={4}>\n <DateTimeInput\n source=\"scheduledDateTime\"\n label=\"Schedule Pickup\"\n variant=\"outlined\"\n fullWidth\n disabled={!eventType}\n onClick={handleSchedulerOpen}\n onKeyPress={ignoreEvent}\n validate={validateRequired}\n options={{\n readOnly: true,\n InputProps: {\n readOnly: true,\n endAdornment: (\n <InputAdornment position=\"end\">\n <CreatedAtIcon onClick={handleSchedulerOpen} />\n </InputAdornment>\n ),\n },\n }}\n helperText={getSchedulerHelperText()}\n />\n {eventType && (\n <Scheduler\n eventType={eventType}\n account={account}\n appType={AppType.CUSTOMER}\n open={isSchedulerOpen}\n setIsOpen={setIsSchedulerOpen}\n resettable={false}\n selectedTimeslot={selectedTimeslot}\n setSelectedTimeslot={handleTimeslot}\n />\n )}\n </Grid>\n )}\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n {account?.outboundAdviceInputs?.includes(\"carrierType\") && (\n <Grid item xs={12} sm={6} md={4}>\n <SelectInput\n source=\"carrierType\"\n label=\"Carrier Type\"\n variant=\"outlined\"\n fullWidth\n choices={CarrierTypesReversed}\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n )}\n {account?.outboundAdviceInputs?.includes(\"carrier\") && (\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"carrier\"\n label=\"Carrier Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n )}\n {account?.outboundAdviceInputs?.includes(\"railCarNumber\") && (\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"railCarNumber\"\n label={\n formData.carrierType === CarrierType.RAIL\n ? \"Railcar Number\"\n : \"Trailer Number\"\n }\n variant=\"outlined\"\n fullWidth\n parse={(v) => v.toUpperCase()}\n validate={validateRequired}\n inputProps={{ style: { textTransform: \"uppercase\" } }}\n helperText={false}\n />\n </Grid>\n )}\n {formData.carrierType === CarrierType.TRUCK &&\n account?.outboundAdviceInputs?.includes(\"mustTarp\") && (\n <Grid item xs={12} md={4}>\n <RadioButtonGroupInput\n source=\"mustTarp\"\n label=\"Must Tarp?\"\n row\n fullWidth\n choices={TrueOrFalse}\n defaultValue={utils.getMustTarpDefaultValue(account)}\n validate={\n formData?.carrierType === CarrierType.TRUCK\n ? validateRequired\n : undefined\n }\n style={{ marginTop: 0, marginLeft: 8 }}\n helperText={false}\n />\n </Grid>\n )}\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n {account?.outboundAdviceInputs?.includes(\"poNumber\") && (\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"poNumber\"\n label=\"PO Number\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n validate={validateRequired}\n inputProps={{ style: { textTransform: \"uppercase\" } }}\n />\n </Grid>\n )}\n {formData.carrierType === CarrierType.TRUCK &&\n account?.outboundAdviceInputs?.includes(\"pickupNumber\") && (\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"pickupNumber\"\n label=\"Pickup Number\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => v.toUpperCase()}\n validate={validateRequired}\n />\n </Grid>\n )}\n {account?.outboundAdviceInputs?.includes(\"shipTo\") && (\n <Grid item xs={12}>\n <Typography\n gutterBottom\n variant=\"overline\"\n color=\"textSecondary\"\n >\n Destination Address\n </Typography>\n {utils.getAddressBook(\n account,\n account,\n selectedAddress,\n handleShipToSelect\n )}\n {!selectedAddress && (\n <>\n <AddressInput\n source=\"shipTo\"\n variant=\"outlined\"\n fullWidth\n showBusinessName={true}\n required={true}\n parse={(v) => (v !== \"\" ? v : undefined)}\n allValues={formData}\n />\n </>\n )}\n </Grid>\n )}\n </Grid>\n {account?.outboundAdviceInputs?.includes(\n \"outboundCustomFields\"\n ) && (\n <Box mt={2}>\n <CustomFields\n {...props}\n // showHeader={false}\n accountFields={account?.outboundCustomFields}\n width={4}\n disabled={false}\n />\n </Box>\n )}\n </Grid>\n <Grid item container direction=\"row\" spacing={0} xs={false} md={4}>\n {account?.outboundAdviceInputs?.includes(\"attachments\") && (\n <Grid item xs={12}>\n <FileInput\n source=\"attachments\"\n label=\"ATTACHMENTS\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop files to\n upload, or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n multiple\n maxFiles={MAX_FILES}\n options={{ maxFiles: MAX_FILES }}\n onChange={(value) =>\n handleFileChange(\"attachments\", value, form, notify)\n }\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n )}\n {account?.outboundAdviceInputs?.includes(\"bolFile\") && (\n <Grid item xs={12}>\n <FileInput\n source=\"bolFile\"\n label=\"BOL FILE\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop BOL file\n to upload, or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n onChange={(value) =>\n handleFileChange(\"bolFile\", value, form, notify)\n }\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n )}\n </Grid>\n <Grid item xs={12}>\n <Box mt={getSpacing()}></Box>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst OutboundCreateActions = ({ basePath, ...props }) => (\n <TopToolbar>\n <HelpButton>\n <OutboundCreateHelp {...props} />\n </HelpButton>\n <BackButton basePath={basePath} />\n </TopToolbar>\n);\n\nconst OutboundCreateToolbar = ({\n appUser,\n account,\n selectedTimeslot,\n ...props\n}) => {\n return (\n <Toolbar {...props}>\n <ValidateCreateButton\n label=\"Save\"\n appUser={appUser}\n account={account}\n selectedTimeslot={selectedTimeslot}\n />\n </Toolbar>\n );\n};\n\nexport const OutboundAdviceCreate = (props) => {\n const notify = useNotify();\n const { appUser } = useUser();\n const [account, setAccount] = useState();\n const [loading, setLoading] = useState(false);\n const [eventType, setEventType] = useState();\n const [selectedTimeslot, setSelectedTimeslot] = useState();\n // const [shipmentLineItems, setShipmentLineItems] = useState({ items: [] });\n\n useEffect(() => {\n fetchData(appUser, setAccount, setEventType, setLoading, notify);\n }, [appUser]);\n\n if (loading) return <Loading />;\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New Outbound\" />}\n actions={<OutboundCreateActions {...props} />}\n >\n <TabbedForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={\n <OutboundCreateToolbar\n appUser={appUser}\n account={account}\n selectedTimeslot={selectedTimeslot}\n />\n }\n >\n <FormTab label=\"Outbound Setup\">\n <ShipmentSetupTab\n {...props}\n appUser={appUser}\n account={account}\n eventType={eventType}\n selectedTimeslot={selectedTimeslot}\n setSelectedTimeslot={setSelectedTimeslot}\n />\n </FormTab>\n {/* {\n TODO: consider pickList design for customers. if FIFO show products, elee if CARLOT shoe Inventories\n account?.outboundAdviceInputs?.includes(\"shipmentLineItems\") &&\n <FormTab label=\"Pick List\">\n <PickListTab {...props}\n account={account}\n shipmentLineItems={shipmentLineItems} setShipmentLineItems={setShipmentLineItems}\n />\n </FormTab>\n } */}\n </TabbedForm>\n </Create>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { API } from \"aws-amplify\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport { Button, Confirm, useNotify, useRedirect } from \"react-admin\";\n\nimport { DeleteIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { NoteType, OutboundStatus } from \"../../../utils/constants\";\nimport { deepRedirect, trimDecimal } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeepDeleteButton = ({\n record,\n resource,\n className,\n backPath,\n isSaving,\n isDeleting,\n setIsDeleting,\n ...props\n}) => {\n const classes = useStyles();\n const history = useHistory();\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n const handleDelete = async (event) => {\n debugger;\n setIsDeleting(true);\n try {\n const shipmentLineItemDeleteList = [];\n const shipmentItemInventoryItemDeleteList = [];\n const inventoryItemUpdateList = [];\n const inventoryUpdateList = [];\n const updateDate = new Date().toISOString();\n\n const outboundDeleteInput = {\n id: record.id,\n attachments: record.attachments,\n bolFile: record.bolFile,\n photos: record.photos,\n timeslotId: record.timeslot?.id,\n };\n\n if (record.shipmentLineItems?.items?.length > 0) {\n record.shipmentLineItems.items.forEach((lineItem) => {\n shipmentLineItemDeleteList.push({ id: lineItem.id });\n\n if (lineItem.inventoryItems?.items?.length > 0) {\n lineItem.inventoryItems.items.forEach((invItm) => {\n shipmentItemInventoryItemDeleteList.push({\n id: invItm.id,\n shipmentLineItemId: invItm.shipmentLineItemId,\n });\n\n const inventoryItemToUpdate = {\n ...invItm.inventoryItem,\n updatedAt: updateDate,\n };\n debugger;\n inventoryItemToUpdate.quantityCommitted = trimDecimal(\n inventoryItemToUpdate.quantityCommitted - invItm.quantityToPick\n );\n const historyNote = {\n type: NoteType.INVENTORY,\n text: `Deleted Outbound Qty. of ${invItm.quantityToPick} ${lineItem.inventory.inventoryUnits}`,\n date: updateDate,\n by: window.appUser?.fullName,\n };\n inventoryItemToUpdate.history = [\n ...inventoryItemToUpdate.history,\n historyNote,\n ];\n delete inventoryItemToUpdate.area;\n delete inventoryItemToUpdate.inventory;\n delete inventoryItemToUpdate.location;\n delete inventoryItemToUpdate.zone;\n inventoryItemUpdateList.push(inventoryItemToUpdate);\n });\n }\n\n debugger;\n const newQuantityOnHand = trimDecimal(\n lineItem.inventory.quantityCommitted - lineItem.totalQuantityToPick\n );\n const inventoryUpdateInput = {\n ...lineItem.inventory,\n updatedAt: updateDate,\n quantityCommitted: newQuantityOnHand,\n };\n const historyNote = {\n type: NoteType.INVENTORY,\n text: `Deleted Outbound Qty. of ${lineItem.totalQuantityToPick}`,\n date: new Date(),\n by: window.appUser?.fullName,\n };\n inventoryUpdateInput.history = [\n ...inventoryUpdateInput.history,\n historyNote,\n ];\n\n delete inventoryUpdateInput.account;\n delete inventoryUpdateInput.area;\n delete inventoryUpdateInput.inboundShipment;\n delete inventoryUpdateInput.location;\n delete inventoryUpdateInput.notes;\n delete inventoryUpdateInput.photos;\n delete inventoryUpdateInput.product;\n delete inventoryUpdateInput.reloadYardCommodity;\n delete inventoryUpdateInput.shipmentLineItems;\n delete inventoryUpdateInput.zone;\n inventoryUpdateList.push(inventoryUpdateInput);\n });\n }\n\n // console.log(\"outboundDeleteInput\", outboundDeleteInput);\n // console.log(\"shipmentLineItemDeleteList\", shipmentLineItemDeleteList);\n // console.log(\"shipmentItemInventoryItemDeleteList\", shipmentItemInventoryItemDeleteList);\n // console.log(\"inventoryItemUpdateList\", inventoryItemUpdateList);\n // console.log(\"inventoryUpdateList\", inventoryUpdateList);\n\n const response = await API.post(\"transREST\", \"/outboundDelete\", {\n body: {\n outboundDeleteInput,\n shipmentLineItemDeleteList,\n shipmentItemInventoryItemDeleteList,\n inventoryItemUpdateList,\n inventoryUpdateList,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n if (response.error) throw response.error;\n\n notify(\"Outbound deleted successfully\");\n deepRedirect(history, backPath);\n } catch (err) {\n logError(\n \"outboundShipment:DeepDeleteButton:handleDelete\",\n err,\n notify,\n redirect\n );\n } finally {\n setIsDeleting(false);\n }\n };\n\n if (\n !record ||\n record.status === OutboundStatus.LOADED ||\n record.status === OutboundStatus.RELEASED\n )\n return null;\n return (\n <>\n <Button\n {...props}\n label=\"Delete\"\n disabled={isDeleting || isSaving}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={isDeleting}\n title={\"Delete Confirmation\"}\n content={\"Are you sure you want to delete this Outbound Shipment?\"}\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { SaveButton, useNotify, useRedirect } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { getCustomFieldsToSave } from \"../../../components/common/CustomFields\";\nimport { ConditionalConfirm } from \"../../../components/common/ConditionalConfirm\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n FilePaths,\n NoteType,\n OutboundStatus,\n VALIDATION_MSG,\n} from \"../../../utils/constants\";\nimport { saveRemoveFile, saveRemoveFiles } from \"../../../utils/fileUtils\";\nimport {\n areTimeslotsEqual,\n deepRedirect,\n historyAutoGen,\n validateAppointment,\n} from \"../../../utils/utils\";\nimport * as utils from \"../../../managerApp/resources/outboundShipments/OutboundUtils\";\n\nexport const DialogSaveButton = ({\n record,\n backPath,\n selectedTimeslot,\n isSaving,\n setIsSaving,\n isDeleting,\n ...props\n}) => {\n const form = useForm();\n const history = useHistory();\n const notify = useNotify();\n const redirect = useRedirect();\n const formState = form.getState();\n const [open, setOpen] = useState(false);\n const [message, setMessage] = useState(\"\");\n\n const formValidate = () => {\n const newFormState = form.getState();\n if (newFormState.invalid) notify(VALIDATION_MSG, \"warning\");\n };\n\n const handleValidateSave = async () => {\n let tempMsg = null;\n debugger;\n\n if (selectedTimeslot) {\n if (!areTimeslotsEqual(record.timeslot, selectedTimeslot)) {\n const error = await validateAppointment(selectedTimeslot);\n if (error) {\n tempMsg = `${selectedTimeslot.time} is no longer available. Please select a new time.`;\n }\n }\n }\n\n if (tempMsg) {\n setMessage(tempMsg);\n setOpen(true);\n } else handleSave();\n };\n\n const handleDialogClose = () => setOpen(false);\n // const handleDialogCconfirm = () => handleSave();\n\n const handleSave = () => {\n formValidate();\n setOpen(false);\n props.handleSubmit();\n };\n\n const transform = async (data) => {\n setIsSaving(true);\n data = { ...data };\n debugger;\n\n // Set new Outbound Status & State\n data.status = OutboundStatus.ADVICE_PENDING;\n data.state = \"\";\n let statusNote = null;\n const newStatus = data.status;\n const oldStatus = formState.initialValues.status;\n\n if (newStatus !== oldStatus) {\n statusNote = {\n text: `Advice submitted | status: ${data.status}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.SHIPMENT,\n };\n\n data.history = [...data.history, statusNote];\n }\n\n data.totalQuantity = data.totalQuantity || 0;\n\n data.customFields = getCustomFieldsToSave(\n data.customFields,\n data.account.outboundCustomFields\n );\n\n const ignoreList = [\n \"status\",\n \"carrierType\",\n \"transferToAccoundId\",\n \"createdAt\",\n ];\n const includeArrayList = [\"customFields\"];\n const includeObjectList = [\"shipTo\"];\n data.history = historyAutoGen(\n form,\n data,\n ignoreList,\n includeArrayList,\n includeObjectList\n );\n\n data.pickupNumber = data.pickupNumber ? data.pickupNumber : \"\";\n\n if (data.address?.state)\n data.address.state = data.address.state.toUpperCase();\n if (data.address?.zipCode)\n data.address.zipCode = data.address.zipCode.toUpperCase();\n\n if (data.notes?.length > 0) {\n data.notes.forEach((element) => {\n if (!element.date) {\n element.type = NoteType.GENERIC;\n element.date = new Date();\n element.by = window.appUser?.fullName;\n }\n });\n } else data.notes = undefined;\n\n try {\n const isAdvance = false;\n const isRollback = false;\n data.timeslot = selectedTimeslot;\n const response = await utils.updateLambdaOutbound(\n record,\n data,\n isAdvance,\n isRollback\n );\n if (response.error) throw response.error;\n\n const promises = [\n saveRemoveFiles(\n record,\n data,\n \"attachments\",\n `${FilePaths.OUTBOUND}/${Date.now()}`\n ),\n saveRemoveFile(\n record,\n data,\n \"bolFile\",\n `${FilePaths.OUTBOUND}/${Date.now()}`\n ),\n ];\n await Promise.all(promises);\n } catch (err) {\n logError(\"outbounds:DialogSaveButton:transform\", err, notify, redirect);\n setIsSaving(false);\n return Promise.reject();\n }\n\n debugger;\n delete data.account;\n delete data.area;\n delete data.invoice;\n delete data.location;\n delete data.reloadYardCommodity;\n delete data.seals;\n delete data.shipmentLineItems;\n delete data.timeslot;\n\n // clear extra form fields\n delete data.customFieldSelect;\n delete data.saveAddress;\n\n // clear inventorySearchDialog filters\n delete data.lotType;\n delete data.searchArea;\n delete data.searchTerm;\n delete data.showAll;\n\n return data;\n };\n\n const onSuccess = (data) => {\n notify(\"Outbound updated successfully\");\n deepRedirect(history, backPath);\n setIsSaving(false);\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\"outbound:DialogSaveButton:onFailure\", error, notify);\n };\n\n const isPristine = () => {\n const formState = form.getState();\n return formState.pristine;\n };\n\n return (\n <>\n <SaveButton\n {...props}\n label=\"Submit\"\n submitOnEnter={false}\n undoable={false}\n disabled={isPristine() || isDeleting}\n saving={isSaving}\n handleSubmitWithRedirect={handleValidateSave}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <ConditionalConfirm\n isOpen={open}\n loading={isSaving}\n title=\"Save Confirmation\"\n content={message}\n // onConfirm={handleDialogCconfirm}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\n\nimport { TextField, Button, FunctionField } from \"react-admin\";\n\nimport {\n Card,\n CardMedia,\n CardContent,\n Grid,\n Typography,\n Dialog,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { PhotoIcon } from \"../../../components/common\";\nimport { isAuthorized } from \"../../../utils/appUtils\";\nimport { AclType } from \"../../../utils/constants\";\nimport { getPhoto, getPhotoUrl } from \"../../../utils/fileUtils\";\nimport { getFormTab } from \"../../../utils/utils\";\nimport { statusRenderer } from \"../../../managerApp/resources/outboundShipments/OutboundUtils\";\n\nconst useAsideStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n width: \"18em\",\n minWidth: \"18em\",\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(0.5),\n overflow: \"initial\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n photoButton: { marginLeft: -theme.spacing(1) },\n media: {\n margin: \"0 auto 0\",\n marginTop: theme.spacing(1),\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n maxHeight: \"20em\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n mediaFull: {\n margin: \"0 auto 0\",\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n}));\n\nexport const OutboundAdviceAside = ({ backPath, record, ...props }) => {\n const classes = useAsideStyles();\n const imgRef = useRef();\n const location = useLocation(); // used to force refresh photos on every visit.\n const [photo, setPhoto] = useState();\n const [selectedPhoto, setSelectedPhoto] = useState();\n const [isOpen, setIsOpen] = useState(false);\n var tab = getFormTab(props);\n const linkBackPath = backPath\n ? [...backPath, props.location.pathname]\n : [props.location.pathname];\n\n useEffect(() => {\n if (record?.photos && record.photos.length > 0 && imgRef.current) {\n setSelectedPhoto(record.photos[0].key);\n getPhoto(record.photos[0].key, setPhoto, imgRef.current.clientWidth);\n }\n }, [imgRef, record, location.key]);\n\n const handleSelectPhoto = (evt) => {\n setSelectedPhoto(evt.currentTarget.id);\n getPhoto(evt.currentTarget.id, setPhoto, imgRef.current.clientWidth);\n };\n\n const handleMagnifyPhoto = () => {\n setIsOpen(!isOpen);\n };\n\n if (!record || tab === \"1\") return null;\n return (\n <Card className={classes.root} ref={imgRef}>\n <CardContent>\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Status:\n </Typography>\n <br />\n <FunctionField\n source=\"status\"\n record={record}\n render={statusRenderer}\n />\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n PO Number:\n </Typography>\n <br />\n <TextField source=\"poNumber\" record={record} />\n </Grid>\n {record.pickupNumber && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Pickup Number:\n </Typography>\n <br />\n <TextField source=\"pickupNumber\" record={record} />\n </Grid>\n )}\n {record.invoice && isAuthorized(AclType.INVOICES) && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Invoice\n </Typography>\n <br />\n <Link\n to={{\n pathname: `/invoices/${record.invoiceId}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {record.invoice.invoiceNumber} : $\n {record.invoice.total.toLocaleString(undefined, {\n style: \"currency\",\n currency: \"USD\",\n })}\n </Typography>\n </Link>\n </Grid>\n )}\n {record.bolNumber && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n BOL Number:\n </Typography>\n <br />\n <TextField source=\"bolNumber\" record={record} />\n </Grid>\n )}\n {record.photos && (\n <Grid item container direction=\"row\" xs={12}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Photos\n </Typography>\n <br />\n </Grid>\n {record.photos.map((file, index) => (\n <Grid item xs={3}>\n <Button\n label={`${index + 1}`}\n id={file.key}\n key={file.key}\n onClick={handleSelectPhoto}\n size=\"small\"\n className={classes.photoButton}\n >\n <PhotoIcon fontSize=\"small\" />\n </Button>\n </Grid>\n ))}\n <Grid item xs={12}>\n <CardMedia\n component=\"img\"\n image={photo}\n className={classes.media}\n onClick={handleMagnifyPhoto}\n />\n </Grid>\n </Grid>\n )}\n </Grid>\n </CardContent>\n {isOpen && (\n <Dialog open={isOpen} onClick={handleMagnifyPhoto} maxWidth=\"xl\">\n <img\n src={getPhotoUrl(selectedPhoto, window.innerWidth)}\n alt=\"Outbound Load\"\n className={classes.mediaFull}\n onClick={handleMagnifyPhoto}\n />\n </Dialog>\n )}\n </Card>\n );\n};\n","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { isEmpty } from \"lodash\";\nimport { differenceInDays } from \"date-fns\";\n\nimport { Grid, Typography, useMediaQuery } from \"@material-ui/core\";\n\nimport {\n ArrayField,\n BooleanField,\n DateField,\n FunctionField,\n Labeled,\n Loading,\n NumberField,\n SelectField,\n Show,\n Tab,\n TabbedShowLayout,\n TextField,\n TopToolbar,\n useEditController,\n Datagrid,\n} from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { NotesTabShow } from \"../../../components/common/NotesTab\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport {\n CustomField,\n CustomFieldsMobile,\n} from \"../../../components/common/CustomFields\";\nimport CustomizableDatagrid from \"../../../components/common/ra-customizable-datagrid\";\n\nimport {\n CarrierType,\n CarrierTypes,\n OutboundStatus,\n} from \"../../../utils/constants\";\nimport {\n deepRedirect,\n getBackPath,\n getHoursMinutesDuration,\n quantityRenderer,\n} from \"../../../utils/utils\";\nimport { OutboundAdviceAside } from \"./OutboundAdviceAside\";\nimport * as utils from \"../../../managerApp/resources/outboundShipments/OutboundUtils\";\nimport { ShowButton } from \"../../../components/common/ShowButton\";\nimport { SendPOSDialogButton } from \"../../../components/common/SendPOSDialogButton\";\n\nconst ShipmentSetupTab = ({ gteMedium, ...props }) => {\n const { record } = props;\n const CarrierTypesReversed = [].concat(CarrierTypes).reverse();\n\n return (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} sm={6} md={4}>\n <Labeled label=\"PO Number\">\n <TextField source=\"poNumber\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <Labeled label=\"Inventory Transfer\">\n <TextField source=\"transfer\" />\n </Labeled>\n </Grid>\n </Grid>\n {isEmpty(record.transfer) ? (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} sm={6} md={4}>\n <Labeled label=\"Carrier Type\">\n <SelectField\n source=\"carrierType\"\n choices={CarrierTypesReversed}\n />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <Labeled label=\"Carrier Name\">\n <TextField source=\"carrier\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <Labeled\n label={\n record.carrierType === CarrierType.RAIL\n ? \"Railcar Number\"\n : \"Trailer Number\"\n }\n >\n <TextField source=\"railCarNumber\" />\n </Labeled>\n </Grid>\n {record.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} sm={6} md={4}>\n <Labeled label=\"Pickup Number\">\n <TextField source=\"pickupNumber\" />\n </Labeled>\n </Grid>\n )}\n {record?.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} md={4}>\n <Labeled label=\"Must Tarp?\">\n <BooleanField source=\"mustTarp\" />\n </Labeled>\n </Grid>\n )}\n {record.shipTo && (\n <Grid item xs={12}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography\n gutterBottom\n variant=\"overline\"\n color=\"textSecondary\"\n >\n Destination Address\n </Typography>\n </Grid>\n <Grid item xs={12} sm={6}>\n <Labeled label=\"Destination Name\">\n <TextField source=\"shipTo.name\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6}>\n <Labeled label=\"Street Address\">\n <TextField source=\"shipTo.street\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6} md={3}>\n <Labeled label=\"CIty\">\n <TextField source=\"shipTo.city\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6} md={3}>\n <Labeled label=\"State\">\n <TextField source=\"shipTo.state\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6} md={3}>\n <Labeled label=\"Zip Code\">\n <TextField source=\"shipTo.zipCode\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6} md={3}>\n <Labeled label=\"Country\">\n <TextField source=\"shipTo.country\" />\n </Labeled>\n </Grid>\n </Grid>\n </Grid>\n )}\n <Grid item xs={12}>\n <Labeled label=\"Special Instructions\">\n <TextField source=\"instructions\" />\n </Labeled>\n </Grid>\n </Grid>\n ) : (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography gutterBottom variant=\"overline\" color=\"textSecondary\">\n Destination Account\n </Typography>\n </Grid>\n <Grid item xs={12} sm={4}>\n <Labeled label=\"To Account\">\n <TextField source=\"transferToAccountName\" />\n </Labeled>\n </Grid>\n </Grid>\n )}\n <CustomFieldsMobile\n recordFields={record.customFields}\n accountFields={record.account.outboundCustomFields}\n width={4}\n />\n {gteMedium && (\n <Grid container direction=\"row\" spacing={2}>\n <Grid item xs={6}>\n <Labeled label=\"ATTACHMENTS\">\n <FileField\n source=\"attachments\"\n src=\"src\"\n title=\"title\"\n target=\"_blank\"\n />\n </Labeled>\n </Grid>\n <Grid item xs={6}>\n <Labeled label=\"BOL FILE\">\n <FileField\n source=\"bolFile\"\n src=\"src\"\n title=\"title\"\n target=\"_blank\"\n />\n </Labeled>\n </Grid>\n </Grid>\n )}\n </Grid>\n );\n};\n\nexport const PickListTab = (props) => {\n const { history, backPath, record } = props;\n\n const accountFields =\n record.account?.inventoryCustomFields?.length > 0\n ? record.account.inventoryCustomFields\n : [];\n const customColumns = [];\n const customGridFields = accountFields\n ? accountFields.map((field, index) => {\n customColumns.push(field.name);\n return (\n <CustomField\n source={`customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={true}\n />\n );\n })\n : [];\n\n const openShipmentLineItem = (jsonRecord) => {\n const jsonObject = JSON.parse(jsonRecord);\n const toPath = `/inventories/${jsonObject.inventoryId}/show`;\n deepRedirect(history, toPath, props.location.pathname, backPath);\n };\n\n return (\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <ArrayField\n source=\"shipmentLineItems.items\"\n basePath=\"/inventories\"\n fullWidth\n >\n <CustomizableDatagrid\n label=\"OUTBOUND INVENTORY\"\n hasBulkActions={false}\n rowClick={openShipmentLineItem}\n expand={<utils.InventoryItemsEditGridInput />}\n storageProp={`OutboundShipmentLineItems_${record.account?.id}_$large`}\n defaultColumns={[\n \"inventory.productName\",\n \"lotNumber\",\n \"inventory.quantityOnHand\",\n \"inventory.quantityCommitted\",\n \"inventory.quantityAvaiable\",\n \"totalQuantityToPick\",\n \"inventory.inventoryUnits\",\n ...customColumns,\n ]}\n >\n {[\n <FunctionField\n source=\"inventory.productName\"\n label=\"Product Name\"\n sortable={true}\n render={(record) =>\n record?.inventory && (\n <>\n {record.inventory.productName}{\" \"}\n {utils.getInfoBubble(record, record)}{\" \"}\n </>\n )\n }\n />,\n <TextField source=\"lotNumber\" label=\"Lot Number\" />,\n <TextField source=\"inventory.poNumber\" label=\"PO Number\" />,\n <NumberField\n source=\"inventory.quantityOnHand\"\n label=\"Qty. On Hand\"\n />,\n <NumberField\n source=\"inventory.quantityCommitted\"\n label=\"Qty. Committed\"\n />,\n <FunctionField\n source=\"inventory.quantityAvaiable\"\n label=\"Qty. Available\"\n sortable={false}\n render={(record) =>\n record &&\n `${\n record.inventory?.quantityOnHand -\n record.inventory?.quantityCommitted\n }`\n }\n />,\n <NumberField\n source=\"totalQuantityToPick\"\n label=\"Qty. Outbound\"\n />,\n <TextField source=\"inventory.inventoryUnits\" label=\"UOM\" />,\n ...customGridFields,\n <ShowButton {...props} idSource=\"inventoryId\" />,\n ]}\n </CustomizableDatagrid>\n </ArrayField>\n </Grid>\n\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Total Load\n </Typography>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={6} md={3}>\n <Labeled label=\"Total Quantity\">\n <FunctionField\n render={(record) =>\n quantityRenderer(record.totalQuantity, record.totalUnits)\n }\n />\n </Labeled>\n </Grid>\n <Grid item xs={6} md={3}>\n <Labeled label=\"Net Weight\">\n <FunctionField\n render={(record) =>\n quantityRenderer(record.netWeight, record.weightUnits)\n }\n />\n </Labeled>\n </Grid>\n <Grid item xs={6} md={3}>\n <Labeled label=\"Billing Quantity\">\n <FunctionField\n render={(record) =>\n quantityRenderer(record.billQuantity, record.billUnits)\n }\n />\n </Labeled>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n );\n};\n\nconst grossRender = (record) => {\n if (\n record.tareWeight !== null &&\n record.tareWeight >= 0 &&\n record.ladenWeight >= 0\n ) {\n return `${record.ladenWeight - record.tareWeight} ${\n record.weightUnits ? record.weightUnits : record.scaleWeightUnits\n }`;\n } else\n return `0 ${\n record.weightUnits ? record.weightUnits : record.scaleWeightUnits\n }`;\n};\n\nconst ShipmentTraceTab = ({ record, ...props }) => {\n return (\n <Grid container direction=\"column\" spacing={1}>\n <Grid item container direction=\"row\">\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Scheduled\">\n <DateField source=\"scheduledDateTime\" showTime />\n </Labeled>\n </Grid>\n {record.carrierType === CarrierType.TRUCK &&\n isEmpty(record.transfer) && (\n <Grid item xs={12} md={4}>\n <Labeled label=\"Carrier Name\">\n <TextField source=\"carrier\" />\n </Labeled>\n </Grid>\n )}\n {record.carrierType === CarrierType.TRUCK &&\n isEmpty(record.transfer) && (\n <Grid item xs={12} md={4}>\n <Labeled label=\"Trailer Number\">\n <TextField source=\"railCarNumber\" />\n </Labeled>\n </Grid>\n )}\n </Grid>\n <Grid item container direction=\"row\">\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Placed\">\n <DateField source=\"arrivalDateTime\" showTime />\n </Labeled>\n </Grid>\n {record.carrierType === CarrierType.TRUCK &&\n isEmpty(record.transfer) && (\n <>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Tare Weight\">\n <FunctionField\n render={(record) =>\n quantityRenderer(\n record.tareWeight,\n record.scaleWeightUnits\n )\n }\n />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Laden Weight\">\n <FunctionField\n render={(record) =>\n quantityRenderer(\n record.ladenWeight,\n record.scaleWeightUnits\n )\n }\n />\n </Labeled>\n </Grid>\n </>\n )}\n </Grid>\n <Grid item container direction=\"row\">\n <Grid item xs={12} md={4}>\n <Labeled label=\"Load Start Time\">\n <DateField source=\"startDateTime\" showTime />\n </Labeled>\n </Grid>\n {record.carrierType === CarrierType.TRUCK &&\n isEmpty(record.transfer) && (\n <>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Net Weight\">\n <FunctionField\n render={(record) =>\n quantityRenderer(\n record.netWeight || 0,\n record.scaleWeightUnits\n )\n }\n />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Gross Weight\">\n <FunctionField render={grossRender} />\n </Labeled>\n </Grid>\n </>\n )}\n </Grid>\n <Grid item container direction=\"row\">\n <Grid item xs={12} md={4}>\n <Labeled label=\"Load End Time\">\n <DateField source=\"endDateTime\" showTime />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Total Load Time\">\n <FunctionField\n render={(record) =>\n getHoursMinutesDuration(\n \"\",\n record.startDateTime,\n record.endDateTime\n )\n }\n />\n </Labeled>\n </Grid>\n </Grid>\n <Grid item container direction=\"row\">\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Released\">\n <DateField source=\"departureDateTime\" showTime />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Cycle Time\">\n <FunctionField\n render={(record) =>\n getHoursMinutesDuration(\n \"\",\n record.arrivalDateTime,\n record.departureDateTime\n )\n }\n />\n </Labeled>\n </Grid>\n </Grid>\n {record.carrierType === CarrierType.RAIL && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Collected\">\n <DateField source=\"collectedDateTime\" showTime />\n </Labeled>\n </Grid>\n {record.collectedDateTime && (\n <Grid item xs={12} md={4}>\n <Labeled label=\"Demmurage Days\">\n <FunctionField\n render={(record) =>\n `: ${\n record.departureDateTime\n ? differenceInDays(\n new Date(record.departureDateTime),\n new Date(record.arrivalDateTime)\n )\n : 0\n }`\n }\n />\n </Labeled>\n </Grid>\n )}\n </Grid>\n )}\n {record.carrier !== \"TRANSFER\" && isEmpty(record.transfer) && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Delivered\">\n <DateField source=\"deliveryDateTime\" showTime />\n </Labeled>\n </Grid>\n </Grid>\n )}\n {record?.account?.trackOutboundSeals && record.carrier !== \"TRANSFER\" && (\n <Grid item xs={12} md={6}>\n <Labeled label=\"Seals\" fullWidth>\n <ArrayField source=\"seals.items\">\n <Datagrid>\n <BooleanField source=\"validated\" />\n <TextField source=\"barcode\" />\n <TextField source=\"discribtion\" />\n </Datagrid>\n </ArrayField>\n </Labeled>\n </Grid>\n )}\n </Grid>\n );\n};\n\nconst ShowActions = ({ data, backPath, ...props }) => (\n <TopToolbar>\n {data?.status === OutboundStatus.RELEASED && (\n <SendPOSDialogButton\n label=\"POS\"\n title=\"Send POS\"\n record={data}\n email={data.account?.posEmail}\n enclosePhotosDefault={data.account?.posPhotos}\n encloseDocsDefault={data.account?.posAttachments}\n handleSend={utils.handleSendPOS}\n />\n )}\n <BackButton {...props} backPath={backPath} />\n </TopToolbar>\n);\n\nexport const OutboundShow = (props) => {\n const { record } = useEditController(props);\n const history = useHistory();\n const gteMedium = useMediaQuery((theme) => theme.breakpoints.up(\"md\"));\n const backPath = getBackPath(props);\n\n if (!record) return <Loading />;\n return (\n <Show\n {...props}\n title={<ForceTitle title=\"View Outbound\" />}\n actions={<ShowActions {...props} backPath={backPath} />}\n aside={\n <OutboundAdviceAside {...props} history={history} backPath={backPath} />\n }\n >\n <TabbedShowLayout>\n <Tab label=\"Outbound Setup\">\n <ShipmentSetupTab {...props} gteMedium={gteMedium} />\n </Tab>\n <Tab label=\"Pick List\">\n <PickListTab {...props} history={history} backPath={backPath} />\n </Tab>\n <Tab label=\"Dispatch\">\n <ShipmentTraceTab {...props} />\n </Tab>\n <Tab label=\"Notes\">\n <NotesTabShow {...props} hidePrivate={true} />\n </Tab>\n </TabbedShowLayout>\n </Show>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getEventType } from \"../../../graphql/queries\";\n\nimport {\n Backdrop,\n Box,\n CircularProgress,\n Grid,\n InputAdornment,\n makeStyles,\n MenuItem,\n TextField as TextFieldMui,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\n\nimport {\n DateTimeInput,\n Edit,\n FileInput,\n FormTab,\n FormDataConsumer,\n Loading,\n RadioButtonGroupInput,\n required,\n SelectInput,\n TabbedForm,\n TextInput,\n Toolbar,\n TopToolbar,\n useEditController,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { AttachFileIcon, CreatedAtIcon } from \"../../../components/common\";\nimport { AddressInput } from \"../../../components/common/AddressInput\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { CustomFields } from \"../../../components/common/CustomFields\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { NotesTab } from \"../../../components/common/NotesTab\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n ACCEPTED_FILES,\n CarrierType,\n CarrierTypes,\n MAX_FILES,\n OutboundStatus,\n TrueOrFalse,\n} from \"../../../utils/constants\";\nimport { handleFileChange } from \"../../../utils/fileUtils\";\nimport { getBackPath, getDateTimeFromTimeslot } from \"../../../utils/utils\";\nimport { DeepDeleteButton } from \"../../../managerApp/resources/outboundShipments/DeepDeleteButton\";\nimport { useUser } from \"../../../authenticatorApp/UserContext\";\nimport { Scheduler } from \"../../../components/common/scheduler/Scheduler\";\nimport { OutboundEditHelp } from \"./OutboundHelp\";\nimport { DialogSaveButton } from \"./DialogSaveButton\";\nimport { OutboundAdviceAside } from \"./OutboundAdviceAside\";\nimport { PickListTab } from \"./OutboundShow\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: \"#fff\",\n },\n}));\n\nconst validateRequired = required();\n\nconst fetchEventType = async (record, setEventType, notify) => {\n try {\n let eventTypeData = null;\n if (record?.account?.outboundEventTypeId) {\n const resp = await API.graphql(\n graphqlOperation(getEventType, {\n id: record.account.outboundEventTypeId,\n })\n );\n eventTypeData = resp.data.getEventType;\n }\n\n setEventType(eventTypeData);\n } catch (err) {\n logError(\"outbounds:OutboundAdviceEdit:fetchEventType\", err, notify);\n }\n};\n\nconst ShipmentSetupTab = ({\n appUser,\n record,\n eventType,\n selectedTimeslot,\n setSelectedTimeslot,\n notify,\n ...props\n}) => {\n const form = useForm();\n const mdUp = useMediaQuery((theme) => theme.breakpoints.up(\"md\"));\n const [selectedAddress, setSelectedAddress] = useState(\"\");\n const CarrierTypesReversed = [].concat(CarrierTypes).reverse();\n const [isCalendarOpen, setIsCalendarOpen] = useState(false);\n const { account } = record;\n\n const handleShipToSelect = (event) => {\n const value = event.target.value ? event.target.value : \"\";\n setSelectedAddress(value);\n form.change(\"shipTo\", value ? value : null);\n };\n\n const getSpacing = () => {\n const spacing = 12 - (account?.outboundAdviceInputs?.length || 1) * 2;\n return Math.max(spacing, 0);\n };\n\n const handleSchedulerOpen = (event) => {\n event.preventDefault();\n event.stopPropagation();\n if (eventType) setIsCalendarOpen(true);\n };\n\n const ignoreEvent = (event) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const handleTimeslot = (timeslot) => {\n const scheduledDate = getDateTimeFromTimeslot(timeslot);\n form.change(\"scheduledDateTime\", scheduledDate);\n setSelectedTimeslot(timeslot);\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} sm={6} md={4}>\n <TextFieldMui\n label=\"Transload Yard\"\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={appUser?.reloadYard?.name}\n disabled\n helperText={false}\n />\n </Grid>\n {/* <Grid item xs={12} md={4} >\n <SelectInput source=\"site\" label=\"Site\" variant=\"outlined\" fullWidth\n choices={[\n {id:\"1\", name: \"Crescent 1\"},\n {id:\"2\", name: \"Crescent 2\"},\n {id:\"2\", name: \"Dallas 2\"},\n ]}\n helperText={false}\n />\n </Grid> */}\n {account?.outboundAdviceInputs?.includes(\"scheduledDateTime\") && (\n <Grid item xs={12} sm={6} md={4}>\n <DateTimeInput\n source=\"scheduledDateTime\"\n label=\"Schedule Pickup\"\n variant=\"outlined\"\n fullWidth\n disabled={!eventType}\n onClick={handleSchedulerOpen}\n onKeyPress={ignoreEvent}\n validate={validateRequired}\n options={{\n readOnly: true,\n InputProps: {\n readOnly: true,\n endAdornment: (\n <InputAdornment position=\"end\">\n <CreatedAtIcon onClick={handleSchedulerOpen} />\n </InputAdornment>\n ),\n },\n }}\n helperText={false}\n />\n {eventType && (\n <Scheduler\n eventType={eventType}\n account={record.account}\n open={isCalendarOpen}\n setIsOpen={setIsCalendarOpen}\n resettable={false}\n selectedTimeslot={selectedTimeslot}\n setSelectedTimeslot={handleTimeslot}\n />\n )}\n </Grid>\n )}\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n {account?.outboundAdviceInputs?.includes(\"carrierType\") && (\n <Grid item xs={12} sm={6} md={4}>\n <SelectInput\n source=\"carrierType\"\n label=\"Carrier Type\"\n variant=\"outlined\"\n fullWidth\n disabled={\n !record.status.startsWith(OutboundStatus.ADVICE_ALL)\n }\n choices={CarrierTypesReversed}\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n )}\n {account?.outboundAdviceInputs?.includes(\"carrierType\") && (\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"carrier\"\n label=\"Carrier Name\"\n variant=\"outlined\"\n fullWidth\n disabled={\n record.carrier && record.status === OutboundStatus.RELEASED\n }\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n )}\n {account?.outboundAdviceInputs?.includes(\"carrierType\") && (\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"railCarNumber\"\n label={\n formData.carrierType === CarrierType.RAIL\n ? \"Railcar Number\"\n : \"Trailer Number\"\n }\n variant=\"outlined\"\n fullWidth\n disabled={\n record.railCarNumber &&\n record.status === OutboundStatus.RELEASED\n }\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n validate={validateRequired}\n inputProps={{ style: { textTransform: \"uppercase\" } }}\n helperText={false}\n />\n </Grid>\n )}\n {formData?.carrierType === CarrierType.TRUCK &&\n account?.outboundAdviceInputs?.includes(\"mustTarp\") && (\n <Grid item xs={12} sm={6} md={4}>\n <RadioButtonGroupInput\n source=\"mustTarp\"\n label=\"Must Tarp?\"\n row\n fullWidth\n validate={\n formData?.carrierType === CarrierType.TRUCK\n ? validateRequired\n : undefined\n }\n choices={TrueOrFalse}\n disabled={record.status === OutboundStatus.RELEASED}\n style={{ marginTop: 0, marginLeft: 8 }}\n helperText={false}\n />\n </Grid>\n )}\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n {account?.outboundAdviceInputs?.includes(\"poNumber\") && (\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"poNumber\"\n label=\"PO Number\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n disabled={record.status === OutboundStatus.RELEASED}\n validate={validateRequired}\n inputProps={{ style: { textTransform: \"uppercase\" } }}\n />\n </Grid>\n )}\n {formData.carrierType === CarrierType.TRUCK &&\n account?.outboundAdviceInputs?.includes(\"pickupNumber\") && (\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"pickupNumber\"\n label=\"Pickup Number\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => v.toUpperCase()}\n validate={validateRequired}\n disabled={\n record.account?.generatePickupNumber ||\n !record.status.startsWith(OutboundStatus.ADVICE_ALL)\n }\n />\n </Grid>\n )}\n {account?.outboundAdviceInputs?.includes(\"shipTo\") && (\n <Grid item xs={12}>\n <Typography\n gutterBottom\n variant=\"overline\"\n color=\"textSecondary\"\n >\n Destination Address\n </Typography>\n {formData?.account?.addressBook?.length > 0 &&\n record.status !== OutboundStatus.RELEASED && (\n <TextFieldMui\n select\n label=\"Address Book\"\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n helperText={false}\n onChange={handleShipToSelect}\n >\n {[\n <MenuItem key=\"\" value=\"\">\n <span>​</span>\n </MenuItem>,\n ...formData.account.addressBook.map((itm) => (\n <MenuItem key={itm.name} value={itm}>\n {itm.name}, {itm.street}, {itm.city}, {itm.state}{\" \"}\n {itm.zipCode}, {itm.country}\n </MenuItem>\n )),\n ]}\n </TextFieldMui>\n )}\n {!selectedAddress && (\n <>\n <AddressInput\n source=\"shipTo\"\n variant=\"outlined\"\n fullWidth\n showBusinessName={true}\n required={true}\n parse={(v) => (v !== \"\" ? v : undefined)}\n disabled={record.status === OutboundStatus.RELEASED}\n allValues={formData}\n />\n </>\n )}\n </Grid>\n )}\n </Grid>\n {account?.outboundAdviceInputs?.includes(\"outboundCustomFields\") && (\n <CustomFields\n {...props}\n recordFields={record.customFields}\n accountFields={record.account.outboundCustomFields}\n disabled={formData.status === OutboundStatus.RELEASED}\n width={4}\n />\n )}\n {mdUp && (\n <Grid container direction=\"row\" spacing={2}>\n {account?.outboundAdviceInputs?.includes(\"attachments\") && (\n <Grid item xs={6}>\n <FileInput\n source=\"attachments\"\n label=\"ATTACHMENTS\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop files to\n upload, or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n multiple\n maxFiles={MAX_FILES}\n options={{ maxFiles: MAX_FILES }}\n onChange={(value) =>\n handleFileChange(\"attachments\", value, form, notify)\n }\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n )}\n {account?.outboundAdviceInputs?.includes(\"bolFile\") && (\n <Grid item xs={6}>\n <FileInput\n source=\"bolFile\"\n label=\"BOL FILE\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop a BOL\n File to upload, or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n onChange={(value) =>\n handleFileChange(\"bolFile\", value, form, notify)\n }\n disabled={false}\n helperText={false}\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n )}\n </Grid>\n )}\n <Grid item xs={12}>\n <Box mt={getSpacing()}></Box>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst EditActions = ({ data, ...props }) => {\n return (\n <TopToolbar>\n <HelpButton>\n <OutboundEditHelp {...props} />\n </HelpButton>\n <BackButton {...props} />\n </TopToolbar>\n );\n};\n\nconst EditToolbar = ({ record, backPath, selectedTimeslot, ...props }) => {\n const classes = useStyles();\n const [isSaving, setIsSaving] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n\n return (\n <Toolbar style={{ justifyContent: \"space-between\" }}>\n <Backdrop className={classes.backdrop} open={isSaving || isDeleting}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <DialogSaveButton\n {...props}\n record={record}\n backPath={backPath}\n selectedTimeslot={selectedTimeslot}\n isSaving={isSaving}\n setIsSaving={setIsSaving}\n isDeleting={isDeleting}\n />\n <DeepDeleteButton\n {...props}\n record={record}\n backPath={backPath}\n isSaving={isSaving}\n isDeleting={isDeleting}\n setIsDeleting={setIsDeleting}\n />\n </Toolbar>\n );\n};\n\nexport const OutboundAdviceEdit = (props) => {\n const { appUser } = useUser();\n const history = useHistory();\n const notify = useNotify();\n const { record } = useEditController(props);\n const [eventType, setEventType] = useState(record?.timeslot?.eventType);\n const [selectedTimeslot, setSelectedTimeslot] = useState();\n const backPath = getBackPath(props);\n\n useEffect(() => {\n debugger;\n if (record?.timeslot) {\n setSelectedTimeslot(record.timeslot);\n setEventType(record.timeslot.eventType);\n } else {\n fetchEventType(record, setEventType, notify);\n }\n }, [record]);\n\n if (!record) return <Loading />;\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Outbound Advice\" />}\n mutationMode=\"pessimistic\"\n actions={<EditActions {...props} backPath={backPath} />}\n aside={\n <OutboundAdviceAside {...props} backPath={backPath} history={history} />\n }\n >\n <TabbedForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={\n <EditToolbar\n {...props}\n record={record}\n selectedTimeslot={selectedTimeslot}\n backPath={backPath}\n />\n }\n // validate={values => validateOutboundEdit(values)}\n >\n <FormTab label=\"Outbound Setup\">\n <ShipmentSetupTab\n {...props}\n appUser={appUser}\n record={record}\n eventType={eventType}\n selectedTimeslot={selectedTimeslot}\n setSelectedTimeslot={setSelectedTimeslot}\n notify={notify}\n />\n </FormTab>\n <FormTab label=\"Pick List\">\n <PickListTab {...props} history={history} backPath={backPath} />\n </FormTab>\n <FormTab label=\"Notes\">\n <NotesTab />\n </FormTab>\n </TabbedForm>\n </Edit>\n );\n};\n","import React from \"react\";\n\nimport { Tooltip } from \"@material-ui/core\";\nimport { OKIcon, LowInventoryAlertIcon } from \".\";\nimport { green, orange } from \"@material-ui/core/colors\";\n\nexport const LowInventoryIcon = ({ record, ...props }) => {\n if (!record) return null;\n\n const alert = record.lowInventoryAlert || record.product?.lowInventoryAlert;\n\n if (alert)\n return (\n <Tooltip title={`Low Inventory`} placement=\"right\" arrow>\n <LowInventoryAlertIcon style={{ color: orange[600] }} />\n </Tooltip>\n );\n else\n return (\n <Tooltip title=\"Inventory Levels OK\" placement=\"right\" arrow>\n <OKIcon style={{ color: green[600] }} />\n </Tooltip>\n );\n};\n","import React from \"react\";\nimport { differenceInDays } from \"date-fns\";\n\nimport { Typography } from \"@material-ui/core\";\nimport { BlankIcon, InventoryStaleIcon } from \"../../../components/common\";\nimport { orange } from \"@material-ui/core/colors\";\n\nimport { InventoryStatus } from \"../../../utils/constants\";\n\nexport const TurnDaysIcon = ({ record, ...props }) => {\n if (\n !record ||\n (record.status !== InventoryStatus.STORED &&\n record.status !== InventoryStatus.SHIPPED)\n )\n return <BlankIcon color=\"disabled\" />;\n const daysDIff = differenceInDays(\n new Date(),\n new Date(record.deliveryDateTime)\n );\n return daysDIff > record.account.inventoryStorageThreshold ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"nowrap\",\n }}\n >\n <InventoryStaleIcon style={{ color: orange[600] }} />{\" \"}\n <Typography variant=\"subtitle2\"> {daysDIff} </Typography>\n </div>\n ) : (\n <Typography variant=\"subtitle2\"> {daysDIff} </Typography>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport jsonExport from \"jsonexport/dist\";\n\nimport {\n Card,\n Grid,\n Hidden,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n DateField,\n DateInput,\n downloadCSV,\n FilterButton,\n FunctionField,\n ListContextProvider,\n ListToolbar,\n NumberField,\n RefreshButton,\n SelectInput,\n ShowButton,\n SimpleList,\n TextField,\n Title,\n TopToolbar,\n useListContext,\n} from \"react-admin\";\n\nimport { Pagination } from \"../../../components/Pagination\";\nimport { ChevronRightIcon } from \"../../../components/common\";\nimport { CustomField } from \"../../../components/common/CustomFields\";\nimport ExportButton from \"../../../components/common/ExportButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { LowInventoryIcon } from \"../../../components/common/LowInventoryIcon\";\nimport { ProductLinkIcon } from \"../../../components/common/ProductLinkIcon\";\nimport { QuickFilter } from \"../../../components/common/QuickFilter\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport CustomizableDatagrid from \"../../../components/common/ra-customizable-datagrid\";\nimport {\n InventoryStatus,\n LotTypes,\n MAX_INVENTORY_QUERY_LIMIT,\n} from \"../../../utils/constants\";\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\nimport {\n exceptionRenderer,\n exportCustomField,\n piecesRenderer,\n} from \"../../../utils/utils\";\nimport { TurnDaysIcon } from \"../../../managerApp/resources/inventory/TurnDaysIcon\";\nimport { useUser } from \"../../../authenticatorApp/UserContext\";\n\nconst useStyles = makeStyles((theme) => ({\n totals: {\n marginLeft: theme.spacing(2),\n },\n}));\n\nconst exporter = (inventories) => {\n const customHeaderMap = new Map();\n debugger;\n\n const inventoriesForExport = inventories.map((inventory) => {\n const inventoryForExport = {\n inventoryId: inventory.id,\n productCode: inventory.productCode,\n productName: inventory.productName,\n lotNumber: inventory.lotNumber,\n poNumber: inventory.poNumber,\n carTralNumber: inventory.inboundShipment?.railCarNumber\n ? inventory.inboundShipment.railCarNumber\n : \"\",\n dateReceived: inventory.deliveryDateTime\n ? new Date(inventory.deliveryDateTime).toLocaleDateString()\n : \"\",\n quantityOnHand: inventory.quantityOnHand,\n quantityCommitted: inventory.quantityCommitted,\n units: inventory.inventoryUnits,\n pieces: inventory.pcs || inventory.product?.pcs || \"\",\n };\n\n if (inventory.customFields?.length > 0) {\n debugger;\n inventory.customFields.forEach((field) => {\n exportCustomField(field, inventoryForExport, customHeaderMap);\n });\n }\n\n return inventoryForExport;\n });\n\n jsonExport(inventoriesForExport, { rename: [\"inventoryId\"] }, (err, csv) => {\n downloadCSV(csv, `inventories_${new Date().toLocaleDateString()}`); // download as 'inventories_DATE.csv` file\n });\n};\n\nconst InventorySearchField = (props) => {\n const listContext = useListContext(props);\n const { displayedFilters, filterValues, setFilters } = listContext;\n const { label, alwaysOn } = props;\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n setFilters(\n {\n ...filterValues,\n or: [\n { productName: { matchPhrasePrefix: `${value}` } },\n { productName: { wildcard: `*${value}*` } },\n { productCode: { matchPhrasePrefix: `${value}` } },\n { productCode: { wildcard: `*${value}*` } },\n { lotNumber: { matchPhrasePrefix: `${value}` } },\n { lotNumber: { wildcard: `*${value}*` } },\n { railCarNumber: { matchPhrasePrefix: `${value}` } },\n { railCarNumber: { wildcard: `*${value}*` } },\n { poNumber: { matchPhrasePrefix: `${value}` } },\n { poNumber: { wildcard: `*${value}*` } },\n { customFields: { matchPhrasePrefix: `${value}` } },\n { customFields: { wildcard: `*${value}*` } },\n ],\n },\n displayedFilters\n );\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = (appUser, isXSmall) => {\n const commodities = appUser.reloadYard.activeYardCommodities.items;\n\n return [\n <SelectInput\n source=\"areaId.eq\"\n label=\"Area\"\n variant=\"outlined\"\n resettable\n alwaysOn={!isXSmall}\n choices={appUser?.reloadYard.areas.items}\n allowEmpty\n />,\n <InventorySearchField label=\"Search\" alwaysOn />,\n <SelectInput\n source=\"reloadYardCommodityId.eq\"\n label=\"Load Type\"\n variant=\"outlined\"\n resettable\n choices={commodities}\n optionText=\"commodity.name\"\n allowEmpty\n />,\n // <QuickFilter source=\"quantityMismatch\" label=\"Failed Audit\" defaultValue={{ eq: true }} />,\n <QuickFilter\n source=\"hasException\"\n label=\"Has Exception\"\n defaultValue={{ eq: true }}\n />,\n <SelectInput\n source=\"lotType.eq\"\n label=\"Lot Type\"\n choices={LotTypes}\n allowEmpty\n variant=\"outlined\"\n resettable\n />,\n <DateInput\n source=\"deliveryDateTime.lte\"\n label=\"Received before...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"deliveryDateTime.gte\"\n label=\"Received after...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n ];\n};\n\nconst ListActions = (props) => {\n const { isXSmall } = props;\n const { resource, total } = useListContext();\n\n return !isXSmall ? (\n <TopToolbar>\n <FilterButton />\n <ExportButton\n disabled={total === 0}\n resource={resource}\n exporter={exporter}\n maxResults={MAX_INVENTORY_QUERY_LIMIT}\n />\n <RefreshButton />\n </TopToolbar>\n ) : null;\n};\n\nexport const InventoryList = (props) => {\n const { appUser } = useUser();\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const isMedium = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n\n const [defaultFilter] = useState({\n reloadYardId: appUser.reloadYardId,\n statusAccountIdProductNameLotNumber: {\n beginsWith: {\n status: InventoryStatus.STORED,\n accountId: appUser.accountId,\n },\n },\n });\n\n const defaultSearchFilter = {\n reloadYardId: { eq: appUser?.reloadYardId },\n status: { eq: InventoryStatus.STORED },\n accountId: { eq: appUser.accountId },\n };\n\n // Include key & search to display default sort order.\n const defaultSort = {\n field: `{\"key\":\"inventoryByStatusByAccountIdByProductByLot\", \"search\":\"productName\"}`,\n order: \"ASC\",\n };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = Number(\n localStorage.getItem(`${props.resource}_perPage`)\n );\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? sessionPerPage : 10\n );\n\n const listContext = useSearchableList({\n ...props,\n defaultTitle: \"Inventory\",\n defaultFilter: defaultFilter,\n defaultSearchFilter: defaultSearchFilter,\n defaultPerPage: defaultPerPage,\n defaultSort: defaultSort,\n resource: \"inventories\",\n });\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n useEffect(() => {\n if (listContext?.filter) {\n // Extract the key query from defaultSort\n const fieldObj = JSON.parse(defaultSort.field);\n const keyToCheck = fieldObj.key;\n\n // Check for the key's presence in filter\n const hasKey = keyToCheck in listContext.filter;\n const hasFilterValues = Object.keys(listContext.filterValues).length > 0;\n if (hasKey && hasFilterValues) listContext.setFilters({});\n }\n }, [listContext?.filter]);\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Inventory\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters(appUser, isMedium)}\n actions={<ListActions isXSmall={isXSmall} />}\n />\n <Card className={classes.root}>\n <InventoryGrid\n appUser={appUser}\n isXSmall={isXSmall}\n isMedium={isMedium}\n />\n <PaginationToolbar {...props} />\n </Card>\n </ListContextProvider>\n );\n};\n\nconst PaginationToolbar = (props) => {\n const classes = useStyles();\n const listContext = useListContext(props);\n const [total, setTotal] = useState(\"\");\n var formatter = new Intl.NumberFormat(\"en-US\");\n\n useEffect(() => {\n let totalsMap = {};\n\n if (listContext?.ids?.length > 0 && listContext?.data) {\n for (const id of listContext.ids) {\n const uom = listContext.data[id].inventoryUnits;\n\n if (totalsMap[uom]) {\n totalsMap[uom] += listContext.data[id].quantityOnHand;\n } else {\n totalsMap[uom] = listContext.data[id].quantityOnHand;\n }\n }\n }\n\n const totals = Object.keys(totalsMap)?.length;\n let totalString = \"\";\n\n if (totals >= 0) {\n totalString = \"Total \";\n for (const [key, value] of Object.entries(totalsMap)) {\n totalString = totalString + \" \" + key + \": \" + formatter.format(value);\n }\n }\n\n setTotal(totalString);\n }, [listContext]);\n\n return (\n <Grid container direction=\"row\" spacing={1} alignItems=\"center\">\n <Hidden mdDown>\n <Grid item xs={0} md={5}>\n <Typography className={classes.totals}>\n {\" \"}\n {total && `${total}`}{\" \"}\n </Typography>\n </Grid>\n </Hidden>\n <Grid item xs={12} md={7}>\n <Pagination {...props} {...listContext} />\n </Grid>\n </Grid>\n );\n};\n\nconst InventoryGrid = ({ appUser, ...props }) => {\n const { isXSmall, isMedium } = props;\n const account = appUser.account;\n\n const accountFields =\n account?.inventoryCustomFields?.length > 0\n ? account.inventoryCustomFields\n : [];\n const customColumns = [];\n const customGridFields = accountFields\n ? accountFields.map((field, index) => {\n customColumns.push(field.name);\n return (\n <CustomField\n source={`customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={true}\n />\n );\n })\n : [];\n\n return isXSmall ? (\n <SimpleList\n primaryText={(record) => record.productName}\n secondaryText={(record) =>\n `${record.quantityOnHand} ${record.inventoryUnits}`\n }\n tertiaryText={(record) => record.lotNumber}\n leftIcon={exceptionRenderer}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n linkType=\"show\"\n />\n ) : isMedium ? (\n <CustomizableDatagrid\n rowClick=\"show\"\n storageProp={`InventoryList_${account?.id}_small`}\n defaultColumns={[\"productName\", \"lotNumber\", \"quantityOnHand\"]}\n >\n {[\n <ProductLinkIcon sortable={false} />,\n <TextField\n source=\"productName\"\n label=\"Product\"\n sortable={true}\n sortBy={`{\"key\":\"inventoryByStatusByAccountIdByProductByLot\", \"search\":\"productName\"}`}\n />,\n <FunctionField source=\"pcs\" label=\"Pieces\" render={piecesRenderer} />,\n <TextField source=\"lotNumber\" label=\"Lot Number\" sortable={true} />,\n <TextField source=\"poNumber\" label=\"PO Number\" sortable={true} />,\n <NumberField source=\"quantityOnHand\" label=\"On Hand\" sortable={true} />,\n <FunctionField\n source=\"hasException\"\n label=\"Exceptions\"\n render={exceptionRenderer}\n />,\n ...customGridFields,\n ]}\n </CustomizableDatagrid>\n ) : (\n <CustomizableDatagrid\n rowClick=\"show\"\n storageProp={`InventoryList_${account?.id}_large`}\n defaultColumns={[\n \"productCode\",\n \"productName\",\n \"lotNumber\",\n \"deliveryDateTime\",\n \"quantityOnHand\",\n ...customColumns,\n ]}\n >\n {[\n <ProductLinkIcon sortable={false} />,\n <TextField source=\"productCode\" label=\"Product Code\" sortable={true} />,\n <TextField\n source=\"productName\"\n label=\"Product\"\n sortable={true}\n sortBy={`{\"key\":\"inventoryByStatusByAccountIdByProductByLot\", \"search\":\"productName\"}`}\n />,\n <FunctionField source=\"pcs\" label=\"Pieces\" render={piecesRenderer} />,\n <TextField source=\"lotNumber\" label=\"Lot Number\" sortable={true} />,\n <TextField source=\"poNumber\" label=\"PO Number\" sortable={true} />,\n <TextField\n source=\"railCarNumber\"\n label=\"Car/Trl. No.\"\n sortable={false}\n />,\n <DateField\n source=\"deliveryDateTime\"\n label=\"Received\"\n sortable={true}\n />,\n <TurnDaysIcon source=\"ageAlert\" label=\"Age (Days)\" sortable={false} />,\n <NumberField\n source=\"quantityOnHand\"\n label=\"Qty. OnHand\"\n sortable={true}\n />,\n <NumberField\n source=\"quantityCommitted\"\n label=\"Qty. Committed\"\n sortable={true}\n />,\n <TextField source=\"inventoryUnits\" label=\"UOM\" sortable={false} />,\n <FunctionField\n source=\"hasException\"\n label=\"Exceptions\"\n render={exceptionRenderer}\n sortable={false}\n />,\n <LowInventoryIcon source=\"lowAlert\" label=\"Low\" sortable={false} />,\n ...customGridFields,\n <ShowButton />,\n ]}\n </CustomizableDatagrid>\n );\n};\n","import React from \"react\";\n\nimport { Tooltip } from \"@material-ui/core\";\nimport AcceptedIcon from \"@material-ui/icons/CheckCircleOutline\";\nimport AcceptedStoredIcon from \"@material-ui/icons/OfflinePinOutlined\";\nimport ErrorIcon from \"@material-ui/icons/Error\";\nimport InTransitIcon from \"@material-ui/icons/PauseCircleOutline\";\nimport ShippeedIcon from \"@material-ui/icons/RemoveCircleOutline\";\nimport WarningIcon from \"@material-ui/icons/Warning\";\nimport { green, orange } from \"@material-ui/core/colors\";\n\nimport { InventoryStatus } from \"../../../utils/constants\";\n\nexport const InventoryStatusIcon = ({\n inventory,\n placement = \"left\",\n classes,\n ...props\n}) => {\n if (!inventory) return null;\n\n return inventory.status === InventoryStatus.IN_TRANSIT ? (\n <Tooltip title=\"In Transit\" placement={placement} arrow>\n <InTransitIcon color=\"inherit\" className={classes} />\n </Tooltip>\n ) : inventory.verificationRequired === \"true\" ? (\n <Tooltip title=\"Verification Required\" placement={placement} arrow>\n <WarningIcon className={classes} style={{ color: orange[600] }} />\n </Tooltip>\n ) : inventory.verificationRequired === \"resolved\" ? (\n <Tooltip title=\"Verified & Accepted\" placement={placement} arrow>\n <ErrorIcon className={classes} style={{ color: green[600] }} />\n </Tooltip>\n ) : inventory.status === InventoryStatus.ARRIVED ? (\n <Tooltip title=\"Arrived\" placement={placement} arrow>\n <InTransitIcon className={classes} style={{ color: green[600] }} />\n </Tooltip>\n ) : inventory.status === InventoryStatus.UNLOADED ? (\n <Tooltip title=\"Accepted & Unloaded\" placement={placement} arrow>\n <AcceptedIcon className={classes} style={{ color: green[600] }} />\n </Tooltip>\n ) : inventory.status === InventoryStatus.STORED ? (\n <Tooltip title=\"Accepted & Stored\" placement={placement} arrow>\n <AcceptedStoredIcon className={classes} style={{ color: green[600] }} />\n </Tooltip>\n ) : inventory.status === InventoryStatus.SHIPPED ? (\n <Tooltip title=\"Shipped\" placement={placement} arrow>\n <ShippeedIcon className={classes} style={{ color: green[600] }} />\n </Tooltip>\n ) : null;\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\n\nimport {\n Card,\n CardContent,\n CardMedia,\n Dialog,\n Grid,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Tooltip,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { orange } from \"@material-ui/core/colors\";\n\nimport { Button, DateField, NumberField, SelectField } from \"react-admin\";\n\nimport {\n ExceptionIcon,\n PhotoIcon,\n TimelineIcon,\n} from \"../../../components/common\";\nimport { LowInventoryIcon } from \"../../../components/common/LowInventoryIcon\";\nimport { isAuthorized } from \"../../../utils/appUtils\";\nimport {\n AclType,\n InventoryStatus,\n InventoryStatuses,\n} from \"../../../utils/constants\";\nimport { getPhoto, getPhotoUrl } from \"../../../utils/fileUtils\";\nimport { InventoryStatusIcon } from \"../../../managerApp/resources/inventory/InventoryStatusIcon\";\n\nconst useAsideStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n width: \"18em\",\n minWidth: \"18em\",\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(0.5),\n overflow: \"initial\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n photoButton: { marginLeft: -theme.spacing(1) },\n centerAlign: {\n textAlign: \"center\",\n },\n status: {\n marginTop: theme.spacing(0.3),\n },\n tableIcon: {\n marginTop: theme.spacing(0.7),\n },\n media: {\n margin: \"0 auto 0\",\n marginTop: theme.spacing(1),\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n maxHeight: \"20em\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n mediaFull: {\n margin: \"0 auto 0\",\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n}));\n\nexport const InventoryAside = ({ backPath, record, exceptions, ...props }) => {\n const classes = useAsideStyles();\n const imgRef = useRef();\n const location = useLocation(); // used to force refresh photos on every visit.\n const [photo, setPhoto] = useState();\n const [selectedPhoto, setSelectedPhoto] = useState();\n const [isOpen, setIsOpen] = useState(false);\n const linkBackPath = backPath\n ? [...backPath, props.location.pathname]\n : [props.location.pathname];\n\n useEffect(() => {\n if (record?.photos && record.photos.length > 0 && imgRef.current) {\n setSelectedPhoto(record.photos[0].key);\n getPhoto(record.photos[0].key, setPhoto, imgRef.current.clientWidth);\n }\n }, [imgRef, record, location.key]);\n\n const handleSelectPhoto = (evt) => {\n setSelectedPhoto(evt.currentTarget.id);\n getPhoto(evt.currentTarget.id, setPhoto, imgRef.current.clientWidth);\n };\n\n const handleMagnifyPhoto = () => {\n setIsOpen(!isOpen);\n };\n\n if (!record) return null;\n return (\n <Card className={classes.root} ref={imgRef}>\n <CardContent>\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Status:\n </Typography>\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <InventoryStatusIcon inventory={record} />\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <SelectField\n source=\"status\"\n record={record}\n choices={InventoryStatuses}\n />\n </Grid>\n </Grid>\n {record.status === InventoryStatus.STORED &&\n record.product?.lowInventoryAlert && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <LowInventoryIcon record={record} />\n </Grid>\n <Grid item xs={10} className={classes.status}>\n Low Inventory\n </Grid>\n </Grid>\n )}\n {exceptions.hasException && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Exceptions\n </Typography>\n </Grid>\n )}\n {exceptions.hasException && exceptions.overShipment && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip\n title={\n exceptions.overShipmentNote\n ? exceptions.overShipmentNote\n : `Overshipment`\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">\n Overshipment: {exceptions.overShipmentQuantity}\n </Typography>\n </Grid>\n </Grid>\n )}\n {exceptions.hasException && exceptions.underShipment && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip\n title={\n exceptions.underShipmentNote\n ? exceptions.underShipmentNote\n : `Undershipment`\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">\n Undershipment: {exceptions.underShipmentQuantity}\n </Typography>\n </Grid>\n </Grid>\n )}\n {exceptions.hasException && exceptions.isDamaged && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip title=\"Damaged\" placement=\"left\" arrow>\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">Damaged</Typography>\n </Grid>\n </Grid>\n )}\n {exceptions.isRecalled && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip\n title={\n exceptions.recallNote ? exceptions.recallNote : \"Recalled\"\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">Recalled</Typography>\n </Grid>\n </Grid>\n )}\n {exceptions.hasException && exceptions.otherException && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip\n title={\n exceptions.otherExceptionNote\n ? exceptions.otherExceptionNote\n : \"Other Exception\"\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">Other Exception</Typography>\n </Grid>\n </Grid>\n )}\n </Grid>\n {/* {record.productId &&\n <Grid item xs={12} >\n <Typography variant=\"overline\" color=\"textSecondary\">Product:</Typography><br/>\n <Link to={{ pathname: `/products/${record.productId}/show`, state: { account: record.account, backPath: linkBackPath } }} >\n <Typography variant=\"body2\" color=\"primary\">Product Code: {record.productCode}</Typography>\n </Link>\n </Grid>\n } */}\n {record.deliveryDateTime && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Date Received:\n </Typography>\n <br />\n <DateField source=\"deliveryDateTime\" record={record} />\n </Grid>\n )}\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Inbound Shipment:\n </Typography>\n <br />\n <Link\n to={{\n pathname: `/inboundShipments/${record.inboundShipmentId}/show`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n PO no. {record.poNumber}\n </Typography>\n </Link>\n {record.status === InventoryStatus.STORED ||\n record.status === InventoryStatus.SHIPPED ? (\n <Table size=\"small\" padding=\"none\">\n <TableHead>\n <TableRow>\n <TableCell>\n <Typography variant=\"caption\">Qty. Advised</Typography>\n </TableCell>\n <TableCell>\n <Typography variant=\"caption\">Qty. Received</Typography>\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell>\n <NumberField source=\"quantityShipped\" record={record} />\n </TableCell>\n <TableCell>\n <NumberField source=\"quantityDelivered\" record={record} />\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n ) : null}\n </Grid>\n {record.shipmentLineItems?.items &&\n record.shipmentLineItems.items.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Outbound Shipments:\n </Typography>\n <br />\n <Table size=\"small\" padding=\"none\">\n <TableHead>\n <TableRow>\n <TableCell>\n <Typography variant=\"caption\">Quantity</Typography>\n </TableCell>\n <TableCell>\n <Typography variant=\"caption\">PO No.</Typography>\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {record.shipmentLineItems.items.map((itm) => (\n <TableRow>\n <TableCell>\n <NumberField\n source=\"totalQuantityToPick\"\n record={itm}\n />\n </TableCell>\n <TableCell>\n <Link\n to={{\n pathname: `/outboundShipments/${itm.outboundShipmentId}/show`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {itm.poNumber}\n </Typography>\n </Link>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Grid>\n )}\n {/* <Grid item xs={12} className={classes.centerAlign} >\n <Link to={`/search/timeline/${record.id}`} >\n <Button label=\"View Timeline\" color=\"default\" >\n <TimelineIcon fontSize=\"small\" />\n </Button>\n </Link>\n </Grid> */}\n {record.photos && (\n <Grid item container direction=\"row\" xs={12}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Photos\n </Typography>\n <br />\n </Grid>\n {record.photos.map((file, index) => (\n <Grid item xs={3}>\n <Button\n label={`${index + 1}`}\n id={file.key}\n key={file.key}\n onClick={handleSelectPhoto}\n size=\"small\"\n className={classes.photoButton}\n >\n <PhotoIcon fontSize=\"small\" />\n </Button>\n </Grid>\n ))}\n <Grid item xs={12}>\n <CardMedia\n component=\"img\"\n image={photo}\n className={classes.media}\n onClick={handleMagnifyPhoto}\n />\n </Grid>\n </Grid>\n )}\n </Grid>\n </CardContent>\n {isOpen ? (\n <Dialog open={isOpen} onClick={handleMagnifyPhoto} maxWidth=\"xl\">\n <img\n src={getPhotoUrl(selectedPhoto, window.innerWidth)}\n alt=\"Inventory\"\n className={classes.mediaFull}\n onClick={handleMagnifyPhoto}\n />\n </Dialog>\n ) : null}\n </Card>\n );\n};\n","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { Grid, Typography } from \"@material-ui/core\";\n\nimport {\n ArrayField,\n Datagrid,\n FunctionField,\n Labeled,\n Loading,\n NumberField,\n SelectField,\n Show,\n Tab,\n TabbedShowLayout,\n TextField,\n TopToolbar,\n useShowController,\n} from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { CustomFieldsMobile } from \"../../../components/common/CustomFields\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { ProductLinkIcon } from \"../../../components/common/ProductLinkIcon\";\nimport { ShowButton } from \"../../../components/common/ShowButton\";\nimport { InventoryStatus, LotTypes } from \"../../../utils/constants\";\nimport { getAreaName, getZoneName } from \"../../../utils/locationUtils\";\nimport { getUnitName } from \"../../../utils/loadTypeUtils\";\nimport {\n deepRedirect,\n exceptionRenderer,\n getBackPath,\n quantityRenderer,\n} from \"../../../utils/utils\";\nimport { InventoryAside } from \"./InventoryAside\";\nimport { useUser } from \"../../../authenticatorApp/UserContext\";\nimport { showWeight } from \"../../../managerApp/resources/inventory/InventoryUitls\";\n\nconst InventorySetupTab = (props) => {\n const { appUser } = useUser();\n const { history, backPath, record } = props;\n const yardCommodities = appUser.reloadYard.activeYardCommodities.items || [];\n const inventoryItems = {\n items:\n record?.inventoryItems?.items?.sort((a, b) =>\n a.locationFullName.localeCompare(b.locationFullName)\n ) || [],\n };\n\n const isOnHand = (formData) => {\n return (\n formData.status !== InventoryStatus.IN_TRANSIT &&\n formData.status !== InventoryStatus.ARRIVED\n );\n };\n\n const getQtyLablel = (formData) => {\n return isOnHand(formData) ? \"Qty. On Hand\" : \"Putaway Qty.\";\n };\n\n const renderUnits = () => getUnitName(record.inventoryUnits);\n\n const openInventoryItem = (jsonRecord) => {\n const jsonObject = JSON.parse(jsonRecord);\n const toPath = `/inventoryItems/${jsonObject.id}/show`;\n deepRedirect(history, toPath, props.location.pathname, backPath, {\n inventory: record,\n });\n };\n\n return (\n <Grid container direction=\"column\" spacing={0}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Product Name\">\n <TextField source=\"productName\" />\n </Labeled>\n <ProductLinkIcon {...props} />\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Lot Number\">\n <TextField source=\"lotNumber\" />\n </Labeled>\n </Grid>\n </Grid>\n\n {record.status !== InventoryStatus.STORED &&\n record.status !== InventoryStatus.SHIPPED && (\n <Grid container item direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Quantity Advised\">\n <NumberField source=\"quantityShipped\" />\n </Labeled>\n <Typography>{getUnitName(record.inventoryUnits)}</Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Quantity Received\">\n <NumberField source=\"quantityDelivered\" />\n </Labeled>\n </Grid>\n </Grid>\n )}\n\n {(record.status === InventoryStatus.STORED ||\n record.status === InventoryStatus.SHIPPED) && (\n <Grid container item direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Quantity On Hand\">\n <NumberField source=\"quantityOnHand\" />\n </Labeled>\n <Typography>{getUnitName(record.inventoryUnits)}</Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n {record.quantityMismatch ? (\n <>\n <Labeled label=\"Quantity Physical\">\n <NumberField source=\"quantityPhysical\" />\n </Labeled>\n </>\n ) : null}\n </Grid>\n </Grid>\n )}\n {(record.status === InventoryStatus.STORED ||\n record.status === InventoryStatus.SHIPPED) && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Quantity Committed\">\n <NumberField source=\"quantityCommitted\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Quantity Available\">\n <NumberField source=\"quantityAvailable\" />\n </Labeled>\n </Grid>\n </Grid>\n )}\n {showWeight(record?.account, record) && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Weight\">\n <FunctionField\n render={(record) =>\n quantityRenderer(\n record.weight,\n `${record.weightUnits}/${record.inventoryUnits}`\n )\n }\n />\n </Labeled>\n </Grid>\n </Grid>\n )}\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Lot Type\">\n <SelectField source=\"lotType\" choices={LotTypes} />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Load Type\">\n <SelectField\n source=\"reloadYardCommodityId\"\n choices={yardCommodities}\n optionText=\"commodity.name\"\n />\n </Labeled>\n </Grid>\n {record.customFields && (\n <CustomFieldsMobile\n recordFields={record.customFields}\n accountFields={record.account?.inventoryCustomFields}\n width={6}\n />\n )}\n </Grid>\n\n <Grid item container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Locations:\n </Typography>\n <br />\n </Grid>\n {inventoryItems?.items?.length === 0 && (\n <>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Default Area\">\n <FunctionField\n render={(record) => getAreaName(record.areaId)}\n />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Default Zone\">\n <FunctionField\n render={(record) => getZoneName(record.areaId, record.zoneId)}\n />\n </Labeled>\n </Grid>\n </>\n )}\n {inventoryItems?.items?.length > 0 && (\n <Grid item xs={12}>\n <ArrayField\n source=\"items\"\n record={inventoryItems}\n basePath=\"/inventoryItems\"\n >\n <Datagrid rowClick={openInventoryItem}>\n <FunctionField\n source=\"hasException\"\n label=\" \"\n render={exceptionRenderer}\n />\n <TextField source=\"locationFullName\" label=\"Location\" />\n <NumberField\n source=\"quantityOnHand\"\n label={getQtyLablel(record)}\n />\n {isOnHand(record) && (\n <NumberField\n source=\"quantityCommitted\"\n label=\"Qty. Committed\"\n />\n )}\n <FunctionField label=\"UOM\" render={renderUnits} />\n {record.status !== InventoryStatus.IN_TRANSIT && (\n <TextField source=\"unloadedBy\" label=\"Unloaded By\" />\n )}\n <ShowButton {...props} state={{ inventory: record }} />\n </Datagrid>\n </ArrayField>\n </Grid>\n )}\n </Grid>\n </Grid>\n );\n};\n\nconst ShowActions = (props) => (\n <TopToolbar>\n <BackButton {...props} />\n </TopToolbar>\n);\n\nexport const InventoryShow = (props) => {\n const { record } = useShowController(props);\n const history = useHistory();\n\n const backPath = getBackPath(props);\n const inbound =\n props.location?.state?.inboundRecord || record?.inboundShipment;\n\n const exceptions = !record\n ? {}\n : {\n hasException: record.hasException,\n overShipment: record.overShipment,\n overShipmentQuantity: record.overShipmentQuantity,\n overShipmentNote: record.overShipmentNote,\n underShipment: record.underShipment,\n underShipmentQuantity: record.underShipmentQuantity,\n underShipmentNote: record.underShipmentNote,\n isDamaged: record.isDamaged,\n isRecalled: record.isRecalled,\n recallNote: record.recallNote,\n otherException: record.otherException,\n otherExceptionNote: record.otherExceptionNote,\n };\n\n if (!record?.account || !inbound) return <Loading />;\n return (\n <Show\n {...props}\n title={<ForceTitle title=\"View Inventory\" />}\n actions={<ShowActions {...props} backPath={backPath} />}\n aside={\n <InventoryAside\n {...props}\n history={history}\n backPath={backPath}\n exceptions={exceptions}\n />\n }\n >\n <TabbedShowLayout>\n <Tab label=\"Inventory Setup\">\n <InventorySetupTab {...props} history={history} backPath={backPath} />\n </Tab>\n </TabbedShowLayout>\n </Show>\n );\n};\n","import React from \"react\";\n\nimport {\n ArrayField,\n Datagrid,\n TextField,\n DateField,\n Labeled,\n} from \"react-admin\";\n\nexport const HistoryTab = (props) => (\n <Labeled label=\"EVENT HISTORY\" fullWidth>\n <ArrayField source=\"history\">\n <Datagrid>\n <TextField source=\"text\" label=\"Event\" />\n <DateField source=\"date\" label=\"Event Time\" showTime={true} />\n <TextField source=\"by\" label=\"Performed By\" />\n </Datagrid>\n </ArrayField>\n </Labeled>\n);\n","import React, { useEffect, useState } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n createInventoryItem,\n updateInventorie,\n} from \"../../../../graphql/mutations\";\n\nimport {\n Box,\n Checkbox,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormControl,\n FormControlLabel,\n FormGroup,\n FormLabel,\n Grid,\n IconButton,\n MenuItem,\n TextField,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { Button } from \"react-admin\";\n\nimport { CancelIcon, CloseIcon } from \"../../../../components/common\";\nimport {\n InventoryStatus,\n LocationType,\n NoteType,\n originDamageList,\n Unit,\n} from \"../../../../utils/constants\";\nimport {\n getLocationFullName,\n promiseSetCapacityUsed,\n} from \"../../../../utils/locationUtils\";\nimport { getUnitName } from \"../../../../utils/loadTypeUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n dialogTitle: {\n display: \"flex\",\n paddingTop: theme.spacing(0),\n paddingBottom: theme.spacing(0),\n justifyContent: \"space-between\",\n },\n title: {\n paddingTop: theme.spacing(1),\n },\n dialogContent: {\n // https://stackoverflow.com/questions/47698037/how-can-i-set-a-height-to-a-dialog-in-material-ui\n minHeight: \"50vh\",\n },\n}));\n\nexport const isOnHand = (record) => {\n return (\n record?.status !== InventoryStatus.IN_TRANSIT &&\n record?.status !== InventoryStatus.ARRIVED\n );\n};\n\nexport const ExceptionDialog = ({\n record,\n isExceptionDialogOpen,\n setIsExceptionDialogOpen,\n inventory,\n exceptions,\n setExceptions,\n isQtyDisabled,\n}) => {\n const classes = useStyles();\n const [damageExceptionNoteError, setDamageExceptionError] = useState();\n const [otherExceptionNoteError, setOtherExceptionError] = useState();\n const [tempExceptions, setTempExceptinos] = useState({ ...exceptions });\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n useEffect(() => {\n if (isExceptionDialogOpen) {\n setTempExceptinos({ ...exceptions });\n }\n }, [isExceptionDialogOpen]);\n\n const validate = () => {\n let isValid = true;\n setDamageExceptionError(\"\");\n setOtherExceptionError(\"\");\n\n if (tempExceptions.isDamaged) {\n isValid = isValid && tempExceptions.originOfDamage;\n !isValid && setDamageExceptionError(\"Required\");\n }\n if (tempExceptions.otherException) {\n isValid = isValid && tempExceptions.otherExceptionNote;\n !tempExceptions.otherExceptionNote && setOtherExceptionError(\"Required\");\n }\n\n return isValid;\n };\n\n const handleSave = async () => {\n debugger;\n if (!validate()) return;\n const prevExceptions = { ...tempExceptions };\n\n prevExceptions.hasException =\n tempExceptions.isDamaged || tempExceptions.otherException;\n setExceptions({ ...prevExceptions });\n setIsExceptionDialogOpen(false);\n };\n\n const handleChange = (evt) => {\n const type = evt.target.name;\n const value = evt.target.checked;\n const prevExceptions = { ...tempExceptions };\n debugger;\n\n if (type === \"overShipment\") {\n prevExceptions.overShipment = value;\n prevExceptions.underShipment = value\n ? false\n : tempExceptions.underShipment;\n if (!value) tempExceptions.overShipmentNote = inventory.overShipmentNote;\n } else if (type === \"underShipment\") {\n prevExceptions.underShipment = value;\n prevExceptions.overShipment = value ? false : tempExceptions.overShipment;\n if (!value)\n prevExceptions.underShipmentNote = inventory.underShipmentNote;\n } else if (type === \"isDamaged\") {\n prevExceptions.isDamaged = value;\n if (!value) prevExceptions.originOfDamage = \"\";\n } else {\n prevExceptions.otherException = value;\n if (!value) {\n prevExceptions.otherExceptionNote = \"\";\n setOtherExceptionError(\"\");\n }\n }\n\n setTempExceptinos({ ...prevExceptions });\n };\n\n const handleCancel = () => {\n setIsExceptionDialogOpen(false);\n setTempExceptinos({});\n };\n\n const setNote = (prop, value) => {\n debugger;\n setTempExceptinos((tempExceptions) => ({\n ...tempExceptions,\n [prop]: value,\n }));\n if (prop === \"originOfDamage\" && value) setDamageExceptionError(\"\");\n };\n\n return (\n <Dialog\n open={isExceptionDialogOpen}\n maxWidth={isSmall ? \"xl\" : \"md\"}\n fullWidth={true}\n >\n <DialogTitle disableTypography className={classes.dialogTitle}>\n <Typography className={classes.title} variant=\"h6\">\n Exception Manager\n </Typography>\n <IconButton aria-label=\"close\" onClick={handleCancel}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n <DialogContent className={classes.dialogContent}>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <FormControl component=\"fieldset\" className={classes.formControl}>\n <FormLabel>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Exception Type\n </Typography>\n </FormLabel>\n <FormGroup row={!isSmall}>\n {!isQtyDisabled && (\n <FormControlLabel\n control={\n <Checkbox\n name=\"overShipment\"\n checked={tempExceptions.overShipment}\n onChange={handleChange}\n // disabled={tempExceptions.underShipment}\n />\n }\n label=\"Overshipment\"\n />\n )}\n {isOnHand(record) && !isQtyDisabled && (\n <FormControlLabel\n control={\n <Checkbox\n name=\"underShipment\"\n checked={tempExceptions.underShipment}\n onChange={handleChange}\n // disabled={tempExceptions.overShipment}\n />\n }\n label=\"Undershipment\"\n />\n )}\n <FormControlLabel\n control={\n <Checkbox\n checked={tempExceptions.isDamaged}\n onChange={handleChange}\n name=\"isDamaged\"\n disabled={inventory.status === InventoryStatus.IN_TRANSIT}\n />\n }\n label=\"Damaged\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={tempExceptions.otherException}\n onChange={handleChange}\n name=\"other\"\n />\n }\n label=\"Other\"\n />\n </FormGroup>\n </FormControl>\n </Grid>\n {tempExceptions.overShipment && (\n <Grid item xs={12}>\n <TextField\n name=\"overShipmentNote\"\n label=\"Overshipment Notes\"\n multiline\n minRows={3}\n autoFocus\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={\n tempExceptions.overShipmentNote\n ? tempExceptions.overShipmentNote\n : \"\"\n }\n onChange={(evt) =>\n setNote(\"overShipmentNote\", evt.target.value)\n }\n helperText={`Overshipment Qty: ${tempExceptions.overShipmentQuantity}`}\n />\n </Grid>\n )}\n {tempExceptions.underShipment && (\n <Grid item xs={12}>\n <TextField\n name=\"underShipmentNote\"\n label=\"Undershipment Notes\"\n multiline\n minRows={3}\n autoFocus\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={\n tempExceptions.underShipmentNote\n ? tempExceptions.underShipmentNote\n : \"\"\n }\n onChange={(evt) =>\n setNote(\"underShipmentNote\", evt.target.value)\n }\n helperText={`Undershipment Qty: ${tempExceptions.underShipmentQuantity}`}\n />\n </Grid>\n )}\n {tempExceptions.isDamaged && (\n <Grid item xs={12}>\n <TextField\n select\n id=\"originOfDamage\"\n label=\"Damage Origin\"\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n required\n value={\n tempExceptions.originOfDamage\n ? tempExceptions.originOfDamage\n : \"\"\n }\n onChange={(evt) => setNote(\"originOfDamage\", evt.target.value)}\n error={damageExceptionNoteError}\n helperText={damageExceptionNoteError}\n >\n {[\n { id: \"\", value: \"\", name: <span> </span> },\n ...originDamageList,\n ].map((itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {itm.name}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n )}\n {tempExceptions.otherException && (\n <Grid item xs={12}>\n <TextField\n name=\"otherExceptionNote\"\n label=\"Other Notes\"\n multiline\n minRows={3}\n autoFocus\n error={otherExceptionNoteError}\n helperText={otherExceptionNoteError}\n margin=\"dense\"\n variant=\"outlined\"\n required\n fullWidth\n value={\n tempExceptions.otherExceptionNote\n ? tempExceptions.otherExceptionNote\n : \"\"\n }\n onChange={(evt) =>\n setNote(\"otherExceptionNote\", evt.target.value)\n }\n />\n </Grid>\n )}\n </Grid>\n </DialogContent>\n <DialogActions>\n <Box>\n <Box>\n <Button\n label=\"Cancel\"\n color=\"default\"\n onClick={() => handleCancel()}\n >\n <CancelIcon />\n </Button>\n <Button\n label=\"Submit\"\n onClick={() => handleSave()}\n color=\"primary\"\n />\n </Box>\n </Box>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport const updateIventory = (inventory) => {\n let toUpdateInventory = { ...inventory };\n\n delete toUpdateInventory.account;\n delete toUpdateInventory.area;\n delete toUpdateInventory.createdAt;\n delete toUpdateInventory.location;\n delete toUpdateInventory.inboundShipment;\n delete toUpdateInventory.inventoryItems;\n delete toUpdateInventory.outboundShipment;\n delete toUpdateInventory.product;\n delete toUpdateInventory.reloadYardCommodity;\n delete toUpdateInventory.shipmentLineItems;\n delete toUpdateInventory.updatedAt;\n\n return API.graphql(\n graphqlOperation(updateInventorie, { input: toUpdateInventory })\n );\n};\n\nexport const handleAreaZoneLocation = (\n area,\n zone,\n aisle,\n location,\n outboundShipment,\n form\n) => {\n // area is required. areaId already set in AreaZonePicker\n form.change(\"area\", area);\n\n if (zone) {\n form.change(\"zoneId\", zone.id);\n form.change(\"zone\", zone);\n } else {\n form.change(\"zoneId\", \"\");\n form.change(\"zone\", null);\n }\n\n if (aisle) {\n form.change(\"aisleId\", aisle.id);\n form.change(\"aisle\", aisle);\n } else {\n form.change(\"aisleId\", \"\");\n form.change(\"aisle\", null);\n form.change(\"quantityOnHand\", null);\n }\n\n if (location) {\n location.area = area;\n location.zone = zone;\n location.aisle = aisle;\n form.change(\"location\", location);\n form.change(\"locationId\", location.id);\n form.change(\"locationFullName\", getLocationFullName(location));\n } else {\n form.change(\"locationId\", \"\");\n form.change(\"location\", null);\n form.change(\"locationFullName\", \"\");\n }\n\n if (outboundShipment) {\n form.change(\"outboundShipmentId\", outboundShipment.id);\n } else {\n form.change(\"outboundShipmentId\", \"\");\n }\n};\n\nexport const isAllocatable = (inventory) => {\n return (\n inventory?.status === InventoryStatus.IN_TRANSIT ||\n inventory?.status === InventoryStatus.ARRIVED\n );\n};\n\nexport const getInventoryItemStatus = (inventory) => {\n if (inventory.status === InventoryStatus.IN_TRANSIT)\n return InventoryStatus.IN_TRANSIT;\n else if (inventory.status === InventoryStatus.ARRIVED)\n return InventoryStatus.IN_TRANSIT;\n return inventory.status;\n};\n\nexport const getInventoryItem = (\n data,\n inventory,\n location,\n putawayQuantity,\n exceptions\n) => {\n const locationFullName = getLocationFullName(location);\n\n const toCreateInventoryItem = {\n groups: inventory.groups,\n status: getInventoryItemStatus(inventory),\n inventoryId: inventory.id,\n accountId: inventory.accountId,\n inboundShipmentId: inventory.inboundShipmentId,\n reloadYardId: inventory.reloadYardId,\n areaId: location.areaId,\n zoneId: location.zoneId,\n aisleId: location.aisleId,\n locationId: location.id,\n location: location,\n outboundShipmentId: data?.outboundShipmentId,\n locationFullName: locationFullName,\n quantityOnHand:\n inventory.inventoryUnits === Unit.UNIT ? 1 : putawayQuantity,\n quantityCommitted: 0,\n hasException: exceptions?.hasException,\n isDamaged: exceptions?.isDamaged,\n originOfDamage: exceptions?.originOfDamage,\n otherException: exceptions?.otherException,\n otherExceptionNote: exceptions?.otherExceptionNote,\n // createdAt: new Date() // used for sorting only. delete on transform.\n };\n\n toCreateInventoryItem.history = [\n {\n type: NoteType.INVENTORY,\n date: new Date(),\n by: window.appUser?.fullName,\n text: `Allocated ${toCreateInventoryItem.quantityOnHand} ${getUnitName(\n inventory.inventoryUnits\n )} to ${locationFullName}`,\n },\n ];\n\n return toCreateInventoryItem;\n};\n\nexport const promiseCreateInventoryItem = (inventoryItem) => {\n const toCreateInventoryItem = { ...inventoryItem };\n debugger;\n delete toCreateInventoryItem.aisle;\n delete toCreateInventoryItem.area;\n delete toCreateInventoryItem.inventory;\n delete toCreateInventoryItem.location;\n delete toCreateInventoryItem.outboundShipment;\n delete toCreateInventoryItem.putawayQuantity;\n delete toCreateInventoryItem.zone;\n return API.graphql(\n graphqlOperation(createInventoryItem, { input: toCreateInventoryItem })\n );\n};\n\nexport const promiseSetCapacityAllocated = async (\n location,\n capacityAllocated\n) => {\n promiseSetCapacityUsed(location, location.capacityUsed, capacityAllocated);\n};\n\nexport const allocateCapacity = (inventory, inventoryItem) => {\n const location = inventoryItem.location;\n\n if (location.type === LocationType.BULK) {\n // perform BULK capacity update\n location.capacityAllocated =\n (location.capacityAllocated || 0) + inventoryItem.putawayQuantity;\n } else if (\n location.type === LocationType.STRUCTURED &&\n !location.locationLoad?.other.selected\n ) {\n // if STRUCTURED & not OTHER, update Capacity Used\n // if (inventory.inventoryUnits !== Unit.UNIT) {\n const inventoryLoadType =\n inventory.reloadYardCommodity?.commodity?.locationLoadType;\n const locationLoadType = location.locationLoad[inventoryLoadType];\n location.capacityAllocated =\n (location.capacityAllocated || 0) + locationLoadType.capacity;\n if (!location.productId && inventory.productId)\n location.productId = inventory.productId;\n // }\n }\n};\n\nexport const compareObjects = (obj1, obj2) => {\n for (let key in obj1) {\n if (obj1[key] !== obj2[key]) {\n return false; // Return false as soon as one value does not match\n }\n }\n return true; // Return true if all values match\n};\n","import React from \"react\";\n\nimport { Box, Grid, Tooltip, Typography } from \"@material-ui/core\";\nimport { orange } from \"@material-ui/core/colors\";\n\nimport {\n FunctionField,\n Labeled,\n Loading,\n Show,\n Tab,\n TabbedShowLayout,\n TextField,\n TopToolbar,\n useShowController,\n} from \"react-admin\";\n\nimport { ExceptionIcon } from \"../../../../components/common\";\nimport { BackButton } from \"../../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../../components/common/ForceTitle\";\nimport { HistoryTab } from \"../../../../components/common/HistoryTab\";\nimport { getUnitName } from \"../../../../utils/loadTypeUtils\";\nimport { getBackPath, trimDecimal } from \"../../../../utils/utils\";\nimport { isOnHand } from \"./InventoryItemUtils\";\n\nconst InventoryItemForm = ({\n backPath,\n record,\n inventory,\n putawayQuantity,\n maxPutawayQty,\n minPutawayQty,\n ...props\n}) => {\n return (\n <>\n <Grid container spacing={1}>\n <Grid item xs={12} sm={6}>\n <Labeled label=\"Product Name\">\n <TextField source=\"inventory.productName\" />\n </Labeled>\n </Grid>\n {!isOnHand(record) && (\n <Grid item xs={12} sm={3}>\n <Labeled label=\"Quantity Avaialble\">\n <FunctionField\n source=\"quantityOnHand\"\n render={() =>\n `${maxPutawayQty} ${getUnitName(inventory.inventoryUnits)}`\n }\n />\n </Labeled>\n </Grid>\n )}\n </Grid>\n <Grid container spacing={1}>\n <Grid item container xs={12} sm={6}>\n <Grid item xs={12} sm={6}>\n <Labeled\n label={isOnHand(record) ? \"Quantity On Hand\" : \"Putaway Quantity\"}\n >\n <FunctionField\n source=\"quantityOnHand\"\n render={() =>\n `${record.quantityOnHand} ${getUnitName(\n inventory.inventoryUnits\n )}`\n }\n />\n </Labeled>\n </Grid>\n {isOnHand(record) && (\n <Grid item xs={12} sm={6}>\n <Labeled label=\"Quantity Committed\">\n <FunctionField\n source=\"quantityCommitted\"\n render={() =>\n `${record.quantityCommitted} ${getUnitName(\n inventory.inventoryUnits\n )}`\n }\n />\n </Labeled>\n </Grid>\n )}\n </Grid>\n {inventory.overShipment && (\n <Grid container item xs={12} sm={3} spacing={1}>\n <Grid item xs={3}>\n <Box mt={1} display=\"flex\" justifyContent=\"flex-end\">\n <Tooltip\n arrow\n placement=\"left\"\n title={\n inventory.overShipmentQuantity\n ? `Qty. Over: ${inventory.overShipmentQuantity || \"\"}`\n : \"Overshipment\"\n }\n >\n <ExceptionIcon\n fontSize=\"large\"\n style={{ color: orange[600] }}\n />\n </Tooltip>\n </Box>\n </Grid>\n <Grid item xs={9}>\n <Box mt={2}>\n <Typography variant=\"body2\">\n Overshipment\n {inventory.overShipmentQuantity\n ? `: ${inventory.overShipmentQuantity}`\n : \"\"}\n </Typography>\n </Box>\n </Grid>\n </Grid>\n )}\n {inventory.underShipment && (\n <Grid container item xs={12} sm={3} spacing={1}>\n <Grid item xs={3}>\n <Box mt={1} display=\"flex\" justifyContent=\"flex-end\">\n <Tooltip\n arrow\n placement=\"left\"\n title={\n inventory.underShipmentQuantity\n ? `Qty. Under: ${inventory.underShipmentQuantity || \"\"}`\n : \"Undershipment\"\n }\n >\n <ExceptionIcon\n fontSize=\"large\"\n style={{ color: orange[600] }}\n />\n </Tooltip>\n </Box>\n </Grid>\n <Grid item xs={9}>\n <Box mt={2}>\n <Typography variant=\"body2\">\n Undershipment\n {inventory.underShipmentQuantity\n ? `: ${inventory.underShipmentQuantity}`\n : \"\"}\n </Typography>\n </Box>\n </Grid>\n </Grid>\n )}\n {record.otherException && (\n <Grid container item xs={12} sm={3} spacing={1}>\n <Grid item xs={3}>\n <Box mt={1} display=\"flex\" justifyContent=\"flex-end\">\n <Tooltip\n title={record.otherExceptionNote || \"\"}\n placement=\"left\"\n arrow\n >\n <ExceptionIcon\n fontSize=\"large\"\n style={{ color: orange[600] }}\n />\n </Tooltip>\n </Box>\n </Grid>\n <Grid item xs={9}>\n <Box mt={2}>\n <Typography variant=\"body2\">Other Exception</Typography>\n </Box>\n </Grid>\n </Grid>\n )}\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Location:\n </Typography>\n <br />\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n {record.locationFullName}\n </Typography>\n <br />\n </Grid>\n </Grid>\n </>\n );\n};\n\nconst ShowActions = (props) => (\n <TopToolbar>\n <BackButton {...props} />\n </TopToolbar>\n);\n\nexport const InventoryItemShow = (props) => {\n const { record } = useShowController(props);\n const backPath = getBackPath(props);\n const inventory = props.location?.state?.inventory || record?.inventory;\n\n const initQtyAllocated = inventory.inventoryItems?.items?.reduce(\n (total, item) => {\n return total + item.quantityOnHand;\n },\n 0\n );\n\n const maxPutawayQty =\n initQtyAllocated <= inventory.quantityShipped\n ? inventory.quantityShipped - initQtyAllocated + record?.quantityOnHand\n : 0;\n\n const minPutawayQty =\n record?.quantityCommitted > 0\n ? trimDecimal(record?.quantityOnHand - record?.quantityCommitted)\n : 0;\n\n if (!record || !inventory.inboundShipment) return <Loading />;\n return (\n <Show\n {...props}\n title={<ForceTitle title={`View Inventory Item`} />}\n actions={<ShowActions {...props} backPath={backPath} />}\n >\n <TabbedShowLayout>\n <Tab label=\"Location\">\n <InventoryItemForm\n {...props}\n record={record}\n inventory={inventory}\n maxPutawayQty={maxPutawayQty}\n minPutawayQty={minPutawayQty}\n />\n </Tab>\n <Tab label=\"History Log\">\n <HistoryTab />\n </Tab>\n </TabbedShowLayout>\n </Show>\n );\n};\n","import React from \"react\";\n\nimport { Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n CopyIcon,\n DeleteIcon,\n LowInventoryAlertIcon,\n} from \"../../../components/common\";\n\nconst useStyles = makeStyles((theme) => ({\n icon: {\n verticalAlign: \"middle\",\n display: \"inline-flex\",\n },\n}));\n\nexport const ProductCreateHelp = () => {\n const classes = useStyles();\n\n return (\n <>\n <Typography>\n Manually creating a new Product can be done from scratch, or by cloning\n an existing, similar Product.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Product Name: </strong> Descriptive product name. If product\n comes as a UNIT/Bundle, we commend adding # of PIECES in product\n name.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Product Code: </strong> a unique, manufacturer-provided SKU,\n Product Code, or UPC registered with GS1 US. Once product is created\n or uploaded, a Product Code cannot be modified.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Load Type: </strong> Select from pre-configured set of\n product Load Types.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Commodity Category: </strong> Custom Product / commodity\n categorization.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Low Inventory Alert: </strong> Inventory quantity threshold\n at which the <LowInventoryAlertIcon className={classes.icon} /> \"Low\n Inventory Alert\" is triggered.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>UOM: </strong> Units of measure used to count/measure\n inventory levels. A corresponding unit of measure should be filled\n with \"1\" as a unit-to-unit conversion base.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Billing Units: </strong> Units of measure used to\n count/measure inventory for billing purposes. Can be different from\n Default UOM. For excample, you can measure inventory in Gallons, but\n bill customer in Lbs. A corresponding unit of measure should be\n filled with amount corresponding to 1 Default Unit.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>CUSTOM FIELDS: </strong>\n </Typography>\n <Typography>\n Product Catalog supports definition of Custom Fields to extend the\n capabilities of the platform. Custom Fields can be added directly\n through a Product Catalog upload, and defined in Account \"CUSTOM\n SETTINGS\" tab. To add a new Custom Field, navigate to the \"INVENTORY\n FIELDS\" section and enter it there.\n </Typography>\n </li>\n </ul>\n </>\n );\n};\n\nexport const ProductEditHelp = () => {\n const classes = useStyles();\n\n return (\n <>\n <Typography variant=\"overline\"></Typography>\n <ul>\n <li>\n <Typography>\n <strong>Product Name: </strong> Descriptive product name. If product\n comes as a UNIT/Bundle, we commend adding # of PIECES in product\n name.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Product Code: </strong> a unique, manufacturer-provided SKU,\n Product Code, or UPC registered with GS1 US. Once product is created\n or uploaded, a Product Code cannot be modified.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Load Type: </strong> Select from pre-configured set of\n product Load types.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Commodity Category: </strong> Custom Product / commodity\n categorization.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Low Inventory Alert: </strong> Inventory quantity threshold\n at which the <LowInventoryAlertIcon className={classes.icon} /> \"Low\n Inventory Alert\" is triggered.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>UOM: </strong> Units of measure used to count/measure\n inventory levels. A corresponding unit of measure should be filled\n with \"1\" as a unit-to-unit conversion base.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Billing Units: </strong> Units of measure used to\n count/measure inventory for billing purposes. Can be different from\n Default UOM. For excample, you can measure inventory in Gallons, but\n bill customer in Lbs. A corresponding unit of measure should be\n filled with amount corresponding to 1 Default Unit.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>CUSTOM FIELDS: </strong>\n </Typography>\n <Typography>\n Product Catalog supports definition of Custom Fields to extend the\n capabilities of the platform. Custom Fields can be added directly\n through a Product Catalog upload, and defined in Account \"CUSTOM\n SETTINGS\" tab. To add a new Custom Field, navigate to the \"INVENTORY\n FIELDS\" section and enter it there.\n </Typography>\n </li>\n <li>\n <Typography>\n <CopyIcon className={classes.icon} />\n <strong> CLONE: </strong>\n Copy current record to create a new Product. Cloned product needs to\n have a unique Product Code added.\n </Typography>\n </li>\n <li>\n <Typography>\n <DeleteIcon className={classes.icon} />\n <strong> DELETE: </strong>\n Removes the Product from the platform making it unavailable for\n future use. It does not affect past inventory records linked to this\n Product.\n </Typography>\n </li>\n </ul>\n </>\n );\n};\n","import React from \"react\";\n\nimport { Box, Grid, InputAdornment, Typography } from \"@material-ui/core\";\n\nimport {\n Button,\n FormDataConsumer,\n minValue,\n number,\n NumberInput,\n required,\n SelectInput,\n TextInput,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { CalculateIcon } from \"../../../components/common\";\nimport { CustomFields } from \"../../../components/common/CustomFields\";\n\nimport {\n InventoryField,\n Unit,\n UnitOptions,\n UnitToColumn,\n} from \"../../../utils/constants\";\n\nimport {\n getUnitLabel,\n isPanelsCommodity,\n isLumberCommodity,\n unitOptionRenderer,\n isPieceDimensionsVisible,\n isInventoryFieldVisible,\n calculateMbf,\n calculateSqf,\n} from \"../../../utils/loadTypeUtils\";\n\nconst validateRequired = required();\nconst validateUOM = (value) =>\n required()(value) || number()(value) || minValue(0)(value);\nconst validateRequiredNumber = [required(), number(), minValue(0)];\nconst validateNumber = [number(), minValue(0)];\n\nconst getCalculateButton = (form, formData) => {\n const isLumber = isLumberCommodity(formData?.reloadYardCommodityId);\n const isPanels = isPanelsCommodity(formData?.reloadYardCommodityId);\n\n if (!isLumber && !isPanels) {\n return null;\n }\n\n let label = \"\";\n\n if (isLumber) {\n label = \"Calculate MBF\";\n } else if (isPanels) {\n label = \"Calculate SF\";\n }\n\n let isDisabled = false;\n\n if (isLumber) {\n isDisabled =\n !formData?.pcs ||\n !formData?.pcsWidth ||\n !formData?.pcsHeight ||\n !formData?.pcsLength;\n } else if (isPanels) {\n isDisabled = !formData?.pcs || !formData?.pcsWidth || !formData?.pcsHeight;\n }\n\n const onClick = () => {\n let value = null;\n let field = null;\n if (isLumber) {\n value = calculateMbf(formData);\n field = UnitToColumn[Unit.MBF];\n } else if (isPanels) {\n value = calculateSqf(formData);\n field = UnitToColumn[Unit.SF];\n }\n form.change(field, value);\n };\n\n return (\n <Grid item xs={12} md={3}>\n <Box mt={1}>\n <Button\n label={label}\n size=\"large\"\n variant=\"outlined\"\n disabled={isDisabled}\n onClick={onClick}\n >\n <CalculateIcon />\n </Button>\n </Box>\n </Grid>\n );\n};\n\nconst getValidUOM = ({ yardCommodities, reloadYardCommodityId }) => {\n const validUom = yardCommodities?.find(\n ({ id }) => id === reloadYardCommodityId\n )?.commodity?.validUom;\n if (!validUom || !validUom.length) {\n return UnitOptions;\n }\n return UnitOptions.filter(({ id }) => validUom.includes(id));\n};\n\nconst isLengthDisabled = (formData) => {\n return isPanelsCommodity(formData?.reloadYardCommodityId);\n};\n\nconst handleLoadTypeChange = (form, event) => {\n const value = event.target.value;\n if (isPanelsCommodity(value)) {\n form.change(\"length\", null);\n }\n};\n\nexport const ProductForm = ({ account }) => {\n const form = useForm();\n const yardCommodities = window.appUser.reloadYard.activeYardCommodities.items;\n\n return (\n <FormDataConsumer>\n {({ formData }) => {\n const loadTypeValidUOM = getValidUOM({\n yardCommodities,\n reloadYardCommodityId: formData?.reloadYardCommodityId,\n });\n const unitEntries = loadTypeValidUOM.filter(\n (e) => e.id !== Unit.CAR && e.id !== Unit.TL\n );\n return (\n <Grid container item direction=\"column\" spacing={1} lg={12}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"name\"\n label=\"Product Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <TextInput\n source=\"productCode\"\n label=\"Product Code\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n />\n </Grid>\n <Grid item xs={false} md={3}></Grid>\n </Grid>\n\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={3}>\n <SelectInput\n source=\"reloadYardCommodityId\"\n label=\"Load Type\"\n variant=\"outlined\"\n fullWidth\n choices={yardCommodities ? yardCommodities : []}\n optionText=\"commodity.name\"\n optionValue=\"id\"\n validate={validateRequired}\n onChange={(event) => handleLoadTypeChange(form, event)}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <TextInput\n source=\"category\"\n label=\"Commodity Category\"\n variant=\"outlined\"\n fullWidth\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <NumberInput\n source=\"lowInventoryThreshold\"\n label=\"Low Inventory Alert\"\n variant=\"outlined\"\n fullWidth\n placeholder=\"0\"\n min=\"0\"\n validate={validateRequiredNumber}\n />\n </Grid>\n </Grid>\n\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Account Overrides\n </Typography>\n </legend>\n\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={3}>\n <SelectInput\n source=\"defaultWeightUnits\"\n label=\"Default Weight Units\"\n variant=\"outlined\"\n fullWidth\n choices={loadTypeValidUOM}\n optionText={unitOptionRenderer}\n allowEmpty\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <SelectInput\n source=\"inboundBillingUnits\"\n label=\"Inbound Billing Units\"\n variant=\"outlined\"\n fullWidth\n choices={loadTypeValidUOM}\n optionText={unitOptionRenderer}\n allowEmpty\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <SelectInput\n source=\"outboundBillingUnits\"\n label=\"Outbound Billing Units\"\n variant=\"outlined\"\n fullWidth\n choices={loadTypeValidUOM}\n optionText={unitOptionRenderer}\n allowEmpty\n />\n </Grid>\n </Grid>\n </fieldset>\n </Grid>\n\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n UNIT CONVERSION MATRIX\n </Typography>\n </legend>\n\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={3}>\n <SelectInput\n source=\"defaultUnits\"\n label=\"Units of Measure\"\n variant=\"outlined\"\n fullWidth\n choices={loadTypeValidUOM}\n optionText={unitOptionRenderer}\n validate={validateRequired}\n />\n </Grid>\n </Grid>\n\n <Grid container direction=\"row\" spacing={1}>\n {unitEntries.map((unit) => (\n <Grid item xs={12} md={3}>\n <NumberInput\n source={unit.column}\n label={getUnitLabel(unit.id)}\n variant=\"outlined\"\n fullWidth\n placeholder=\"0\"\n min=\"0\"\n format={(v) => (Number(v) === 0 ? undefined : v)}\n parse={(v) => (v === \"0\" ? undefined : v)}\n validate={(value, allValues) =>\n (allValues?.defaultUnits === unit.id ||\n allValues?.inboundBillingUnits === unit.id ||\n allValues?.outboundBillingUnits === unit.id) &&\n // allValues.defaultWeightUnits === unit.id weight is optional\n validateUOM(value)\n }\n InputProps={{ inputMode: \"numeric\" }}\n InputLabelProps={{ shrink: true }}\n />\n </Grid>\n ))}\n </Grid>\n </fieldset>\n </Grid>\n\n {isPieceDimensionsVisible(formData?.reloadYardCommodityId) && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography\n variant=\"overline\"\n color=\"textSecondary\"\n gutterBottom\n >\n PIECE DIMENSIONS\n </Typography>\n </Grid>\n {isInventoryFieldVisible(\n InventoryField.WIDTH,\n formData?.reloadYardCommodityId\n ) && (\n <Grid item xs={12} md={3}>\n <NumberInput\n source=\"pcsHeight\"\n label=\"Piece Height\"\n variant=\"outlined\"\n fullWidth\n placeholder=\"0.00\"\n min=\"0\"\n format={(v) => (Number(v) === 0 ? null : v)}\n parse={(v) => (v === null || Number(v) === 0 ? null : v)}\n validate={validateNumber}\n InputProps={{\n inputMode: \"decimal\",\n endAdornment: (\n <InputAdornment position=\"end\">IN</InputAdornment>\n ),\n }}\n />\n </Grid>\n )}\n\n {isInventoryFieldVisible(\n InventoryField.WIDTH,\n formData?.reloadYardCommodityId\n ) && (\n <Grid item xs={12} md={3}>\n <NumberInput\n source=\"pcsWidth\"\n label=\"Piece Width\"\n variant=\"outlined\"\n fullWidth\n placeholder=\"0.00\"\n min=\"0\"\n format={(v) => (Number(v) === 0 ? null : v)}\n parse={(v) => (v === null || Number(v) === 0 ? null : v)}\n validate={validateNumber}\n InputProps={{\n inputMode: \"decimal\",\n endAdornment: (\n <InputAdornment position=\"end\">IN</InputAdornment>\n ),\n }}\n />\n </Grid>\n )}\n {isInventoryFieldVisible(\n InventoryField.LENGTH,\n formData?.reloadYardCommodityId\n ) && (\n <Grid item xs={12} md={3}>\n <NumberInput\n source=\"pcsLength\"\n label=\"Piece Length\"\n variant=\"outlined\"\n fullWidth\n placeholder=\"0.00\"\n min=\"0\"\n format={(v) => (Number(v) === 0 ? null : v)}\n parse={(v) => (v === null || Number(v) === 0 ? null : v)}\n disabled={isLengthDisabled(formData)}\n validate={validateNumber}\n InputProps={{\n inputMode: \"decimal\",\n endAdornment: (\n <InputAdornment position=\"end\">FT</InputAdornment>\n ),\n }}\n />\n </Grid>\n )}\n {getCalculateButton(form, formData)}\n </Grid>\n )}\n\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography\n variant=\"overline\"\n color=\"textSecondary\"\n gutterBottom\n >\n UNIT DIMENSIONS\n </Typography>\n </Grid>\n <Grid item xs={12} md={3}>\n <NumberInput\n source=\"height\"\n label=\"Height\"\n variant=\"outlined\"\n fullWidth\n placeholder=\"0.00\"\n min=\"0\"\n format={(v) => (Number(v) === 0 ? null : v)}\n parse={(v) => (v === null || Number(v) === 0 ? null : v)}\n validate={validateNumber}\n InputProps={{\n inputMode: \"decimal\",\n }}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <NumberInput\n source=\"width\"\n label=\"Width\"\n variant=\"outlined\"\n fullWidth\n placeholder=\"0.00\"\n min=\"0\"\n format={(v) => (Number(v) === 0 ? null : v)}\n parse={(v) => (v === null || Number(v) === 0 ? null : v)}\n validate={validateNumber}\n InputProps={{\n inputMode: \"decimal\",\n }}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <NumberInput\n source=\"length\"\n label=\"Length\"\n variant=\"outlined\"\n fullWidth\n placeholder=\"0.00\"\n min=\"0\"\n format={(v) => (Number(v) === 0 ? null : v)}\n parse={(v) => (v === null || Number(v) === 0 ? null : v)}\n validate={validateNumber}\n InputProps={{\n inputMode: \"decimal\",\n }}\n />\n </Grid>\n </Grid>\n\n <CustomFields\n recordFields={formData.customFields}\n accountFields={account?.inventoryCustomFields}\n header={true}\n width={3}\n />\n </Grid>\n );\n }}\n </FormDataConsumer>\n );\n};\n","import { API, graphqlOperation } from \"aws-amplify\";\nimport { productByAccountByActiveByProductCode } from \"../../../graphql/account/custom-queries\";\n\nimport { logError } from \"../../../utils/appUtils\";\n\nexport const validateProductCodeUnicity = async (allValues, formState) => {\n if (formState && !formState.dirtyFields?.productCode) {\n return null;\n }\n\n if (allValues.productCode) {\n try {\n const resp = await API.graphql(\n graphqlOperation(productByAccountByActiveByProductCode, {\n accountId: allValues.accountId,\n activeProductCode: {\n eq: { active: \"true\", productCode: allValues.productCode },\n },\n })\n );\n\n debugger;\n if (resp.data.productByAccountByActiveByProductCode.items.length !== 0) {\n return {\n message: `Product Code: ${allValues.productCode} is already in use.`,\n };\n }\n } catch (error) {\n logError(\"products:ProductUtils:validateProductCodeUnicity\", error, null);\n }\n }\n\n return null;\n};\n\nexport const handleValidateSave =\n (form, setSaving, handleSave, notify) => async () => {\n debugger;\n const formState = form.getState();\n const isValid = formState.valid;\n if (isValid) {\n setSaving(true);\n const errors = await validateProductCodeUnicity(\n formState.values,\n formState\n );\n if (errors) {\n notify(errors.message, \"warning\");\n setSaving(false);\n return;\n }\n }\n handleSave();\n };\n","import React, { useState } from \"react\";\n\nimport { useNotify, SaveButton } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\nimport { Backdrop, CircularProgress } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { getCustomFieldsToSave } from \"../../../components/common/CustomFields\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { NoteType, Unit, UnitToColumn } from \"../../../utils/constants\";\nimport { deepRedirect } from \"../../../utils/utils\";\nimport { handleValidateSave } from \"./ProductUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n}));\n\nexport const ValidateCreateButton = (props) => {\n const form = useForm();\n const notify = useNotify();\n const classes = useStyles();\n const [saving, setSaving] = useState(false);\n const { backPath, history, savedRecord, account } = props;\n\n const transform = (data) => {\n try {\n debugger;\n data = { ...data };\n const unitEntries = Object.entries(UnitToColumn).filter(\n (e) => e[0] !== Unit.CAR && e[0] !== Unit.TL\n );\n\n data.active = \"true\";\n data.reloadYardId = window.appUser?.reloadYardId;\n data.groups = window.appUser?.groups;\n\n data.height = parseFloat(data[\"height\"]);\n data.width = parseFloat(data[\"width\"]);\n data.length = parseFloat(data[\"length\"]);\n\n unitEntries.forEach(([unit, column]) => {\n data[column] = parseFloat(data[column]);\n });\n\n data.totalInventoryQuantity = 0;\n data.lowInventoryAlert = false;\n\n data.history = [\n {\n text: `Product Created`,\n type: NoteType.GENERIC,\n date: new Date(),\n by: window.appUser?.fullName,\n },\n ];\n\n data.customFields = getCustomFieldsToSave(\n data.customFields,\n account.inventoryCustomFields\n );\n } catch (err) {\n logError(\"products:ValidateCreateButton:transform\", err, notify);\n return Promise.reject();\n }\n\n delete data.accountName;\n delete data.createdAt;\n delete data.updatedAt;\n\n return data;\n };\n\n const onSuccess = async ({ data }) => {\n debugger;\n notify(`Product created successfully.`);\n setSaving(false);\n deepRedirect(history, backPath, null, null, {\n account: account,\n savedRecord: savedRecord,\n });\n };\n\n const onFailure = (error) => {\n debugger;\n setSaving(false);\n logError(\"product:ValidateCreateButton:onFailure\", error, notify);\n };\n\n const isPristine = () => {\n const formState = form.getState();\n return formState.pristine;\n };\n\n return (\n <>\n <Backdrop className={classes.backdrop} open={saving}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <SaveButton\n label=\"Save\"\n disabled={isPristine()}\n saving={saving}\n submitOnEnter={false}\n undoable={false}\n handleSubmitWithRedirect={handleValidateSave(\n form,\n setSaving,\n props.handleSubmit,\n notify\n )}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n </>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { Create, SimpleForm, Toolbar, TopToolbar } from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { ProductCreateHelp } from \"./ProductHelp\";\nimport { ProductForm } from \"./ProductForm\";\nimport { ValidateCreateButton } from \"./ValidateCreateButton\";\nimport { getBackPath } from \"../../../utils/utils\";\n\nconst CreateActions = ({ backPath, savedRecord, ...props }) => (\n <TopToolbar>\n <HelpButton>\n <ProductCreateHelp {...props} />\n </HelpButton>\n <BackButton {...props} backPath={backPath} state={{ savedRecord }} />\n </TopToolbar>\n);\n\nconst CreateToolbar = ({ backPath, savedRecord, ...props }) => (\n <Toolbar>\n <ValidateCreateButton\n {...props}\n backPath={backPath}\n savedRecord={savedRecord}\n />\n </Toolbar>\n);\n\nexport const ProductCreate = (props) => {\n const history = useHistory();\n const [account] = useState(props.location?.state?.account);\n const cloneRecord = props.location?.state?.clone || {};\n const backPath = getBackPath(props);\n const savedRecord = props.location?.state?.savedRecord;\n const initValues = {\n ...cloneRecord,\n id: undefined,\n productCode: undefined,\n accountId: account ? account.id : cloneRecord.accountId,\n };\n\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New Product\" />}\n actions={\n <CreateActions\n backPath={backPath}\n savedRecord={savedRecord}\n history={history}\n />\n }\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n initialValues={initValues}\n toolbar={\n <CreateToolbar\n {...props}\n backPath={backPath}\n savedRecord={savedRecord}\n history={history}\n account={account}\n />\n }\n >\n <ProductForm account={account} />\n </SimpleForm>\n </Create>\n );\n};\n","import React from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport { Loading, NumberField } from \"react-admin\";\n\nimport { Card, CardContent, Grid, Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { LowInventoryIcon } from \"../../../components/common/LowInventoryIcon\";\nimport { isAuthorized } from \"../../../utils/appUtils\";\nimport { AclType } from \"../../../utils/constants\";\n\nconst useAsideStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n width: \"18em\",\n minWidth: \"18em\",\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(0.5),\n overflow: \"initial\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n status: {\n marginTop: theme.spacing(0.3),\n },\n}));\n\nexport const ProductEditAside = ({\n backPath,\n history,\n record,\n account,\n ...props\n}) => {\n const classes = useAsideStyles();\n const linkBackPath = backPath\n ? [...backPath, props.location.pathname]\n : [props.location.pathname];\n\n if (!record) return <Loading />;\n return (\n <Card className={classes.root}>\n <CardContent>\n <Grid container direction=\"column\" spacing={1}>\n {account?.businessName && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"secondary\">\n Account:\n </Typography>\n <br />\n {isAuthorized(AclType.ACCOUNTS) ? (\n <Link\n to={{\n pathname: `/accounts/${account.id}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {account.businessName}\n </Typography>\n </Link>\n ) : (\n <Link\n to={{\n pathname: `/accounts/${account.id}/show`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {account.businessName}\n </Typography>\n </Link>\n )}\n </Grid>\n )}\n {record?.lowInventoryAlert && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"secondary\">\n Status:\n </Typography>\n <br />\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <LowInventoryIcon record={record} />\n </Grid>\n <Grid item xs={10} className={classes.status}>\n Low Inventory\n </Grid>\n </Grid>\n </Grid>\n )}\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Total Inventory:\n </Typography>\n <br />\n <NumberField source=\"totalInventoryQuantity\" record={record} />{\" \"}\n {record.defaultUnits}\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { searchInventorys } from \"../../../graphql/queries\";\nimport { updateProduct, deleteProduct } from \"../../../graphql/mutations\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport { Button, Confirm, useNotify } from \"react-admin\";\n\nimport { DeleteIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { deepRedirect } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeleteInactivateButton = ({\n record,\n history,\n backPath,\n className,\n ...props\n}) => {\n const notify = useNotify();\n const classes = useStyles();\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n const handleDelete = async (event) => {\n setLoading(true);\n try {\n debugger;\n // Check if product is in use\n const searchInput = {\n filter: {\n reloadYardId: { eq: window.appUser.reloadYardId },\n productId: { eq: record.id },\n },\n limit: 1,\n };\n const response = await API.graphql(\n graphqlOperation(searchInventorys, searchInput)\n );\n let total = response.data.searchInventorys.total;\n\n if (!total || total === 0) {\n await API.graphql(\n graphqlOperation(deleteProduct, { input: { id: record.id } })\n );\n } else {\n // Update product active = false\n let productToUpdate = record;\n productToUpdate.active = \"false\";\n delete productToUpdate.createdAt;\n delete productToUpdate.updatedAt;\n await API.graphql(\n graphqlOperation(updateProduct, { input: productToUpdate })\n );\n }\n\n notify(\"Product deleted successfully\");\n deepRedirect(history, backPath);\n } catch (error) {\n logError(\"products:DeleteInactivateButton:handleDelete\", error, notify);\n } finally {\n setLoading(false);\n setOpen(false);\n }\n };\n\n return (\n <>\n <Button\n {...props}\n label=\"Delete\"\n disabled={loading}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={loading}\n title={\"Delete Confirmation\"}\n content={\"Are you sure you want to delete this Product?\"}\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { API } from \"aws-amplify\";\n\nimport {\n Button,\n Edit,\n SaveButton,\n SimpleForm,\n Toolbar,\n TopToolbar,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\nimport { Backdrop, CircularProgress } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { CopyIcon } from \"../../../components/common\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { getCustomFieldsToSave } from \"../../../components/common/CustomFields\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { Unit, UnitOptions } from \"../../../utils/constants\";\nimport {\n deepRedirect,\n getBackPath,\n historyAutoGen,\n} from \"../../../utils/utils\";\nimport { ProductEditHelp } from \"./ProductHelp\";\nimport { ProductForm } from \"./ProductForm\";\nimport { ProductEditAside } from \"./ProductEditAside\";\nimport { DeleteInactivateButton } from \"./DeleteInactivateButton\";\nimport { handleValidateSave } from \"./ProductUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n}));\n\nconst EditToolbar = ({ backPath, history, account, ...props }) => {\n const form = useForm();\n const notify = useNotify();\n const classes = useStyles();\n const [saving, setSaving] = useState(false);\n\n const transform = async (data) => {\n setSaving(true);\n debugger;\n\n const unitEntries = UnitOptions.filter(\n (e) => e.id !== Unit.CAR && e.id !== Unit.TL\n );\n\n data.height = parseFloat(data[\"height\"]);\n data.width = parseFloat(data[\"width\"]);\n data.length = parseFloat(data[\"length\"]);\n\n data.pcsHeight = parseFloat(data[\"pcsHeight\"]);\n data.pcsWidth = parseFloat(data[\"pcsWidth\"]);\n data.pcsLength = parseFloat(data[\"pcsLength\"]);\n\n unitEntries.forEach((unit) => {\n data[unit.column] = parseFloat(data[unit.column]);\n });\n\n data.lowInventoryAlert =\n data.totalInventoryQuantity <= data.lowInventoryThreshold;\n\n try {\n data.history = historyAutoGen(form, data);\n\n data.customFields = getCustomFieldsToSave(\n data.customFields,\n account.inventoryCustomFields\n );\n\n const response = await API.put(\"transREST\", \"/productUpdate\", {\n body: {\n productUpdateInput: data,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n if (response.error) throw response.error;\n } catch (error) {\n logError(\"product:ProductEdit:transform\", error, notify);\n return Promise.reject();\n }\n return data;\n };\n\n const onSuccess = async () => {\n notify(`Product updated successfully.`);\n deepRedirect(history, backPath);\n setSaving(false);\n };\n\n const onFailure = (error) => {\n setSaving(false);\n logError(\"product:ProductEdit:onFailure\", error, notify);\n };\n\n const isPristine = () => {\n const formState = form.getState();\n return formState.pristine;\n };\n\n return (\n <Toolbar {...props} style={{ justifyContent: \"space-between\" }}>\n <Backdrop className={classes.backdrop} open={saving}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <SaveButton\n label=\"Save\"\n disabled={isPristine()}\n saving={saving}\n handleSubmitWithRedirect={handleValidateSave(\n form,\n setSaving,\n props.handleSubmit,\n notify\n )}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <DeleteInactivateButton\n record={props.record}\n history={history}\n backPath={backPath}\n />\n </Toolbar>\n );\n};\n\nconst CloneButton = ({ history, backPath, account, data, ...props }) => {\n const handleClone = () => {\n deepRedirect(\n history,\n \"/products/create\",\n props.location.pathname,\n backPath,\n { account: account, clone: data }\n );\n };\n\n return (\n <Button label=\"Clone\" size=\"small\" color=\"primary\" onClick={handleClone}>\n <CopyIcon />\n </Button>\n );\n};\n\nconst EditActions = (props) => {\n return (\n <TopToolbar>\n <HelpButton>\n <ProductEditHelp {...props} />\n </HelpButton>\n <CloneButton {...props} />\n <BackButton {...props} />\n </TopToolbar>\n );\n};\n\nexport const ProductEdit = (props) => {\n const history = useHistory();\n const account = props.location?.state?.account;\n const backPath = getBackPath(props);\n\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Product\" />}\n mutationMode=\"pessimistic\"\n actions={\n <EditActions\n {...props}\n backPath={backPath}\n history={history}\n account={account}\n />\n }\n aside={\n <ProductEditAside\n {...props}\n backPath={backPath}\n history={history}\n account={account}\n />\n }\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={\n <EditToolbar\n {...props}\n backPath={backPath}\n history={history}\n account={account}\n />\n }\n >\n <ProductForm account={account} />\n </SimpleForm>\n </Edit>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { listUsers } from \"../../../graphql/queries\";\nimport { updateTask } from \"../../../graphql/mutations\";\n\nimport {\n useNotify,\n useRefresh,\n List,\n SimpleList,\n TopToolbar,\n CreateButton,\n RefreshButton,\n Datagrid,\n TextField,\n Filter,\n SelectField,\n SelectInput,\n Button,\n} from \"react-admin\";\nimport { useMediaQuery } from \"@material-ui/core\";\n\nimport { Priorities, TaskStatus, TaskTypes } from \"../../../utils/constants\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { isSubscriptionDisabled } from \"../../../utils/appUtils\";\n\nimport {\n ApproveIcon,\n ChevronRightIcon,\n MyDateField,\n} from \"../../../components/common\";\nimport { Empty } from \"../../../components/common/Empty\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { Pagination } from \"../../../components/Pagination\";\n\nconst InboundListFilter = ({ setFilters, ...props }) => {\n const [users, setUsers] = useState([]);\n\n useEffect(() => {\n getUsers();\n }, []);\n\n const getUsers = async () => {\n const response = await API.graphql(graphqlOperation(listUsers));\n setUsers(\n response.data.listUsers.items.map((itm) => ({\n id: itm.id,\n name: itm.fullName,\n }))\n );\n debugger;\n };\n\n const handleSearch = (event) => {\n const status = event.target.value;\n const newFilter = {\n taskByStatusByAssignedTo: {\n reloadYardId: window.appUser.reloadYardId,\n },\n };\n if (status) {\n newFilter.taskByStatusByAssignedTo.statusAssignedToName = {\n beginsWith: {\n status,\n },\n };\n }\n setFilters(newFilter);\n };\n\n return (\n <Filter {...props} variant=\"outlined\">\n <SelectInput\n choices={[...TaskStatus].slice(0, 3)}\n allowEmpty={true}\n emptyText=\"All Tasks\"\n onChange={handleSearch}\n source=\"taskByStatusByAssignedTo.statusAssignedToName.beginsWith.status\"\n label=\"Status\"\n alwaysOn\n />\n <SelectInput\n choices={users}\n source=\"assignedTo.eq\"\n label=\"Assigned To\"\n alwaysOn\n />\n </Filter>\n );\n};\n\nconst ListActions = ({ isXSmall, basePath, ...props }) =>\n !isXSmall ? (\n <TopToolbar>\n <CreateButton basePath={basePath} disabled={isSubscriptionDisabled()} />\n <RefreshButton />\n </TopToolbar>\n ) : null;\n\nexport const TaskList = (props) => {\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const isMedium = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n debugger;\n\n const initFilterValues = {\n taskByStatusByAssignedTo: {\n reloadYardId: window.appUser?.reloadYardId,\n statusAssignedToName: { beginsWith: { status: 10 } },\n },\n };\n\n return (\n <List\n {...props}\n title={<ForceTitle title=\"Tasks\" />}\n filterDefaultValues={initFilterValues}\n filters={<InboundListFilter />}\n sort={{ field: \"assignedToName\", order: \"ASC\" }}\n pagination={<Pagination />}\n actions={<ListActions isXSmall={isXSmall} />}\n bulkActionButtons={false}\n syncWithLocation={false}\n >\n <TaskGrid {...props} isXSmall={isXSmall} isMedium={isMedium} />\n </List>\n );\n};\n\nconst ApproveButton = ({ record }) => {\n const notify = useNotify();\n const refresh = useRefresh();\n\n const handleClick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n\n try {\n debugger;\n record.status = 40;\n record.resolvedDate = new Date().toISOString();\n delete record.updatedAt;\n await API.graphql(graphqlOperation(updateTask, { input: record }));\n refresh();\n } catch (err) {\n logError(\"tasks:TaskList:ApproveButton:handleClick\", err, notify);\n }\n };\n\n return record?.status < 40 ? (\n <Button label=\"Approve\" color=\"primary\" onClick={handleClick}>\n {<ApproveIcon />}\n </Button>\n ) : null;\n};\n\nconst TaskGrid = (props) => {\n const { isXSmall, isMedkum } = props;\n\n if (props.ids.length === 0)\n return <Empty {...props} message=\"Create a new task\" />;\n else\n return isXSmall ? (\n <SimpleList\n primaryText={(record) => record.name}\n secondaryText={(record) => `${record.assignedToName}`}\n tertiaryText={(record) => (\n <SelectField source=\"status\" choices={TaskStatus} record={record} />\n )}\n linkType=\"edit\"\n // leftIcon={record => <UserStatusIcon record={record} />}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n />\n ) : isMedkum ? (\n <Datagrid rowClick=\"edit\">\n <SelectField source=\"status\" choices={TaskStatus} sortable={false} />\n <SelectField source=\"category\" choices={TaskTypes} sortable={false} />\n <TextField source=\"name\" sortable={false} />\n <TextField\n source=\"assignedToName\"\n label=\"Assigned To\"\n sortable={true}\n />\n </Datagrid>\n ) : (\n <Datagrid rowClick=\"edit\">\n <SelectField source=\"status\" choices={TaskStatus} sortable={false} />\n <SelectField source=\"priority\" choices={Priorities} sortable={false} />\n <SelectField source=\"category\" choices={TaskTypes} sortable={false} />\n <TextField source=\"name\" sortable={false} />\n <TextField\n source=\"assignedToName\"\n label=\"Assigned To\"\n sortable={true}\n />\n <MyDateField source=\"dueDate\" sortable={false} />\n <ApproveButton />\n </Datagrid>\n );\n};\n","export const updateAuditAssignee = /* GraphQL */ `\n mutation UpdateAudit(\n $input: UpdateAuditInput!\n $condition: ModelAuditConditionInput\n ) {\n updateAudit(input: $input, condition: $condition) {\n id\n }\n }\n`;\n","import React from \"react\";\n\nimport { Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { DeleteIcon, LaunchIcon } from \"../../../components/common\";\n\nconst useStyles = makeStyles((theme) => ({\n icon: {\n verticalAlign: \"middle\",\n display: \"inline-flex\",\n },\n}));\n\nexport const TaskCreateHelp = () => (\n <>\n <Typography variant=\"subtitle1\">\n Create Tasks to delegate Yard duties to specific Crew members. Creating a\n new Task, adds it to their TO-DO list.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Task Type: </strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Generic: </strong>Assign custom Yard duties or resources.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Inventory Audit: </strong> Assign Inventory Audit.\n Displays an \"Audit\" drop-down field with list of active Audits.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Accept Inbound Shipment: </strong>\n Assign an Inbound Shipment to select Crew member. Displays a\n \"Shipment\" drop-down field with list of Placed shipments.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Load Outbound Shipment: </strong>\n Assign an Outbound Shipment to select Crew member. Displays a\n \"Shipment\" drop-down field with list of available shipments.\n </Typography>\n </li>\n </ul>\n </li>\n <li>\n <Typography>\n <strong>Shipment: </strong> Select from list of available shipments.\n Visible only when assigning Inbound / Outbound Shipment.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Due Date: </strong> Specify when the Task is due.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Late Date: </strong> Specify when the Task will be marked as\n late.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const TaskEditHelp = () => {\n const classes = useStyles();\n\n return (\n <>\n <Typography variant=\"subtitle1\">\n Use Tasks to delegate Yard duties to specific Crew members. Once task is\n completed, Approve the completion.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Task Type: </strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Generic: </strong>Assign custom Yard duties or\n resources.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Inventory Audit: </strong> Assign Inventory Audit.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Accept Inbound Shipment: </strong> Assign an Inbound\n Shipment to select Crew member.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Load Outbound Shipment: </strong>Assign an Outbound\n Shipment to select Crew member.\n </Typography>\n </li>\n <li>\n <Typography>\n <LaunchIcon className={classes.icon} />\n <strong> OPEN: </strong>\n Open corresponding Audit / Shipment record.\n </Typography>\n </li>\n </ul>\n </li>\n <li>\n <Typography>\n <strong>Due Date: </strong> Specify when the Task is due.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Late Date: </strong> Specify when the Task will be marked as\n late.\n </Typography>\n </li>\n <li>\n <Typography>\n <DeleteIcon className={classes.icon} />\n <strong> DELETE: </strong>\n Removes user's access to the platform and deletes the User from\n \"Users\" list view.\n </Typography>\n </li>\n </ul>\n </>\n );\n};\n","import React from \"react\";\n\nimport { Card } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { Calendar, MuiPickersUtilsProvider } from \"@material-ui/pickers\";\nimport DateFnsUtils from \"@date-io/date-fns\";\n\nconst asideStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(0.5),\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"start\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n}));\n\nexport const TaskAside = () => {\n const classes = asideStyles();\n\n return (\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <Card className={classes.root}>\n <Calendar date={new Date()} onChange={(date) => null} />\n </Card>\n </MuiPickersUtilsProvider>\n );\n};\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { auditByStatusByDateOptions } from \"../../../graphql/audit/custom-queries\";\nimport { inboundShipmentByStateByRailcarReduced } from \"../../../graphql/inbound/custom-queries\";\nimport { outboundShipmentByStatusOptions } from \"../../../graphql/outbound/custom-queries\";\n\nimport { userByActiveByLastName } from \"../../../graphql/queries\";\nimport { updateInboundShipmentMini } from \"../../../graphql/inbound/custom-mutations\";\nimport { updateOutboundShipmentMini } from \"../../../graphql/outbound/custom-mutations\";\nimport { updateAuditAssignee } from \"../../../graphql/audit/custom-mutations\";\n\nimport {\n Create,\n DateInput,\n FileInput,\n SaveButton,\n SimpleForm,\n TextInput,\n Toolbar,\n TopToolbar,\n required,\n SelectInput,\n useRedirect,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport {\n addBusinessDays,\n isFuture,\n isToday,\n format,\n isAfter,\n parse,\n} from \"date-fns\";\n\nimport {\n ACCEPTED_FILES,\n AuditStatus,\n FilePaths,\n MAX_FILES,\n OutboundStatus,\n Priorities,\n TaskType,\n TaskTypes,\n} from \"../../../utils/constants\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { TaskCreateHelp } from \"./TaskHelp\";\nimport { TaskAside } from \"./TaskAside\";\n\nimport { Box } from \"@material-ui/core\";\nimport { AttachFileIcon } from \"../../../components/common\";\nimport { handleFileChange, saveRemoveFiles } from \"../../../utils/fileUtils\";\n\nconst isTodayOrFutureDate =\n (message = \"Date must be in the future\") =>\n (value) => {\n const date = parse(value, \"yyyy-MM-dd\", new Date());\n return value && (isToday(date) || isFuture(date)) ? undefined : message;\n };\n\nconst validateCreate = ({ dueDate, lateDate }) => {\n const errors = {};\n const due = parse(dueDate, \"yyyy-MM-dd\", new Date());\n const late = parse(lateDate, \"yyyy-MM-dd\", new Date());\n\n if (isAfter(due, late)) {\n debugger;\n errors.lateDate = [\"Late date must be greater then due date\"];\n }\n return errors;\n};\n\nconst TaskCreateForm = ({\n setLink,\n userOptions,\n referenceOptions,\n setReferenceOptions,\n notify,\n ...props\n}) => {\n const form = useForm();\n const [category, setCategory] = useState();\n\n const getShipments = async () => {\n try {\n const response = await API.graphql(\n graphqlOperation(inboundShipmentByStateByRailcarReduced, {\n reloadYardId: window.appUser?.reloadYardId,\n stateRailCarNumber: { beginsWith: { state: \"PROCESS\" } },\n })\n );\n debugger;\n if (response.data.inboundShipmentByStateByRailcar.items.length > 0) {\n const placedShipmentsRes =\n response.data.inboundShipmentByStateByRailcar.items;\n let shipmentsOptions = placedShipmentsRes.map((itm) => ({\n id: itm.id,\n name:\n itm.railCarNumber +\n \" - \" +\n itm.accountName +\n (itm.assignedTo ? \" - \" + itm.assignedTo : \"\"),\n reloadYardId: itm.reloadYardId,\n status: itm.status,\n state: itm.state,\n railCarNumber: itm.railCarNumber,\n accountName: itm.accountName,\n releaseDateTime: itm.releaseDateTime,\n placedDateTime: itm.placedDateTime,\n notifyDateTime: itm.notifyDateTime,\n scheduledDateTime: itm.scheduledDateTime,\n createDateTime: itm.createDateTime,\n scheduledDateTime: itm.scheduledDateTime,\n accountId: itm.accountId,\n }));\n setReferenceOptions(shipmentsOptions);\n } else {\n notify(\"Couldn't find placed Inbound Shipments\", \"warning\");\n }\n } catch (error) {\n logError(\"tasks:TaskCreate:Task:getShipments\", error, notify);\n }\n };\n\n const getOutboundShipments = async () => {\n try {\n const response = await API.graphql(\n graphqlOperation(outboundShipmentByStatusOptions, {\n reloadYardId: window.appUser?.reloadYardId,\n status: { eq: OutboundStatus.ARRIVED },\n })\n );\n if (response.data.outboundShipmentByStatus.items.length > 0) {\n const data = response.data.outboundShipmentByStatus.items.sort(\n (a, b) => {\n const first = a.arrivalDateTime\n ? new Date(a.arrivalDateTime)\n : Date.now();\n const second = b.arrivalDateTime\n ? new Date(b.arrivalDateTime)\n : Date.now();\n return first - second;\n }\n );\n\n let shipmentsOptions = data.map((itm) => ({\n id: itm.id,\n name:\n itm.pickupNumber +\n \" - \" +\n itm.accountName +\n (itm.assignedTo ? \" - \" + itm.assignedTo : \"\"),\n poNumber: itm.poNumber,\n pickupNumber: itm.pickupNumber,\n accountName: itm.accountName,\n reloadYardId: itm.reloadYardId,\n status: itm.status,\n active: itm.active,\n endDateTime: itm.endDateTime,\n arrivalDateTime: itm.arrivalDateTime,\n scheduledDateTime: itm.scheduledDateTime,\n createDateTime: itm.createDateTime,\n }));\n setReferenceOptions(shipmentsOptions);\n } else {\n notify(\"Couldn't find placed Outbound Shipments\", \"warning\");\n }\n } catch (error) {\n logError(\"tasks:TaskCreate:Task:getOutboundShipments\", error, notify);\n }\n };\n\n const getAudit = async () => {\n try {\n debugger;\n const response = await API.graphql(\n graphqlOperation(auditByStatusByDateOptions, {\n reloadYardId: window.appUser?.reloadYardId,\n sortDirection: \"DESC\",\n statusCreateDateTime: {\n beginsWith: { status: AuditStatus.IN_PROGRESS },\n },\n })\n );\n debugger;\n const activeAudits = response.data.auditByStatusByDate.items;\n if (activeAudits.length > 0) {\n let auditOptions = activeAudits.map((itm) => ({\n id: itm.id,\n name:\n format(new Date(itm.createDateTime), \"MM-dd-yyyy\") +\n \" - \" +\n itm.accountName +\n (itm.assignedTo ? \" - \" + itm.assignedTo : \"\"),\n status: itm.status,\n accountName: itm.accountName,\n createDateTime: itm.createDateTime,\n }));\n setReferenceOptions(auditOptions);\n debugger;\n } else {\n setLink(null);\n notify(\"Couldn't find active Audits\", \"warning\");\n }\n } catch (error) {\n logError(\"tasks:TaskCreate:Task:getAudit\", error, notify);\n debugger;\n }\n };\n\n const showOptions = () => {\n return (\n referenceOptions?.length > 0 &&\n (category === TaskType.AUDIT ||\n category === TaskType.ACCEPT_SHIPMENT ||\n category === TaskType.PROCESS_OUTBOUND_SHIPMENT)\n );\n };\n\n const handleCategory = (evt) => {\n const value = evt.target.value;\n setReferenceOptions([]);\n setLink(null);\n setCategory(value);\n if (value === TaskType.ACCEPT_SHIPMENT) {\n getShipments();\n } else if (value === TaskType.AUDIT) {\n getAudit();\n } else if (value === TaskType.PROCESS_OUTBOUND_SHIPMENT) {\n getOutboundShipments();\n } else if (value === TaskType.CAPACITY_UTILIZATION) {\n setLink(\"/utilization\");\n const taskName = \"Update capacity utilization\";\n form.change(\"name\", taskName);\n }\n };\n\n const handleReference = (evt) => {\n debugger;\n const value = evt.target.value;\n const referencedObject = referenceOptions.find((itm) => itm.id === value);\n\n if (category === TaskType.AUDIT) {\n setLink(\"/processAudit/\" + value);\n const taskName = \"Audit: \" + referencedObject.name;\n form.change(\"name\", taskName);\n } else if (category === TaskType.ACCEPT_SHIPMENT) {\n setLink(\"/processShipments/\" + value);\n const taskName = \"Inbound: \" + referencedObject.name;\n form.change(\"name\", taskName);\n } else if (category === TaskType.PROCESS_OUTBOUND_SHIPMENT) {\n setLink(\"/processOutboundShipments/\" + value);\n const taskName = \"Outbound: \" + referencedObject.name;\n form.change(\"name\", taskName);\n } else {\n setLink(null);\n }\n };\n\n return (\n <Box flex={1} style={{ width: \"100%\" }}>\n <Box display={{ xs: \"block\", sm: \"flex\" }}>\n <Box flex={1} mr={{ xs: 0, sm: \"1em\" }}>\n <SelectInput\n label=\"Task type\"\n source=\"category\"\n variant=\"outlined\"\n fullWidth\n choices={TaskTypes}\n onChange={handleCategory}\n validate={required()}\n />\n </Box>\n <Box flex={1}>\n {showOptions() && (\n <SelectInput\n source=\"reference\"\n label={category === TaskType.AUDIT ? \"Audit\" : \"Shipment\"}\n variant=\"outlined\"\n fullWidth\n choices={referenceOptions}\n validate={required()}\n onChange={handleReference}\n />\n )}\n </Box>\n </Box>\n <Box display={{ xs: \"block\", sm: \"flex\" }}>\n <Box flex={1} mr={{ xs: 0, sm: \"1em\" }}>\n <TextInput\n source=\"name\"\n label=\"Task name\"\n variant=\"outlined\"\n fullWidth\n validate={required()}\n />\n </Box>\n <Box flex={1}>\n <SelectInput\n source=\"assignedTo\"\n label=\"Assign To\"\n variant=\"outlined\"\n fullWidth\n choices={userOptions}\n validate={required()}\n />\n </Box>\n </Box>\n <TextInput\n source=\"description\"\n label=\"Task description\"\n variant=\"outlined\"\n multiline\n minRows={2}\n fullWidth\n />\n <Box display={{ xs: \"block\", sm: \"flex\" }}>\n <Box flex={1} mr={{ xs: 0, sm: \"1em\" }}>\n <DateInput\n source=\"dueDate\"\n variant=\"outlined\"\n fullWidth\n validate={isTodayOrFutureDate()}\n />\n </Box>\n <Box flex={1}>\n <DateInput\n source=\"lateDate\"\n variant=\"outlined\"\n fullWidth\n validate={isTodayOrFutureDate()}\n />\n </Box>\n </Box>\n <Box display={{ xs: \"block\", sm: \"flex\" }}>\n <Box flex={1}>\n <SelectInput\n source=\"priority\"\n variant=\"outlined\"\n fullWidth\n choices={Priorities}\n />\n </Box>\n <Box flex={1} mr={{ xs: 0, sm: \"1em\" }} />\n </Box>\n <Box display={{ xs: \"block\", sm: \"flex\" }}>\n <Box flex={1}>\n <FileInput\n source=\"attachments\"\n label=\"ATTACHMENTS\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop file(s) to\n upload, or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n multiple\n maxFiles={MAX_FILES}\n options={{ maxFiles: MAX_FILES }}\n onChange={(value) =>\n handleFileChange(\"attachments\", value, form, notify)\n }\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Box>\n </Box>\n </Box>\n );\n};\n\nexport const TaskCreate = (props) => {\n const notify = useNotify();\n const [referenceOptions, setReferenceOptions] = useState([]);\n const [link, setLink] = useState();\n const [userOptions, setUserOptions] = useState();\n const isComponentMounted = useRef(true);\n\n useEffect(() => {\n debugger;\n if (isComponentMounted) getUsers();\n return () => (isComponentMounted.current = false);\n }, []);\n\n const getUsers = async () => {\n try {\n const response = await API.graphql(\n graphqlOperation(userByActiveByLastName, {\n reloadYardId: window.appUser?.reloadYardId,\n activeLastName: { beginsWith: { active: \"true\" } },\n })\n );\n debugger;\n if (response.data.userByActiveByLastName.items.length > 0) {\n const users = response.data.userByActiveByLastName.items;\n let userList = users.map((itm) => ({\n id: itm.id,\n name: itm.fullName,\n fullName: itm.fullName,\n }));\n debugger;\n setUserOptions(userList);\n } else {\n logError(\"tasks:TaskCreate:Task:getUsers:response\", response, notify);\n }\n } catch (error) {\n logError(\"tasks:TaskCreate:Task:getUsers\", error, notify);\n }\n };\n\n const defaultValues = () => ({\n dueDate: format(new Date(), \"yyyy-MM-dd\"),\n lateDate: format(addBusinessDays(new Date(), 1), \"yyyy-MM-dd\"),\n reloadYardId: window.appUser?.reloadYardId,\n category: TaskType.GENERIC,\n groups: window.appUser?.groups,\n status: \"10\",\n allowReassign: \"false\",\n priority: 1,\n link,\n });\n\n const TaskCreateActions = ({ basePath }) => (\n <TopToolbar>\n <HelpButton>\n <TaskCreateHelp {...props} />\n </HelpButton>\n <BackButton basePath={basePath} />\n </TopToolbar>\n );\n\n const TaskCreateToolbar = (props) => {\n const redirect = useRedirect();\n const { basePath } = props;\n\n const transform = async (data) => {\n debugger;\n data = { ...data };\n const { assignedTo, category, reference } = data;\n\n try {\n const user = userOptions.find((itm) => itm.id === assignedTo);\n data.assignedToName = user.fullName;\n\n if (category !== TaskType.GENERIC) {\n const referencedObject = {\n ...referenceOptions.find((itm) => itm.id === reference),\n };\n delete referencedObject.name;\n\n if (category === TaskType.AUDIT) {\n const toUpdateAudit = {\n ...referencedObject,\n assignedTo: user.fullName,\n };\n await API.graphql(\n graphqlOperation(updateAuditAssignee, { input: toUpdateAudit })\n );\n } else if (category === TaskType.ACCEPT_SHIPMENT) {\n const toUpdateInboundShippment = {\n ...referencedObject,\n assignedTo: user.fullName,\n };\n await API.graphql(\n graphqlOperation(updateInboundShipmentMini, {\n input: toUpdateInboundShippment,\n })\n );\n } else if (category === TaskType.PROCESS_OUTBOUND_SHIPMENT) {\n const toUpdateOutboundShippment = {\n ...referencedObject,\n assignedTo: user.fullName,\n };\n await API.graphql(\n graphqlOperation(updateOutboundShipmentMini, {\n input: toUpdateOutboundShippment,\n })\n );\n }\n }\n\n debugger;\n if (data.attachments?.length > 0) {\n await saveRemoveFiles(\n undefined,\n data,\n \"attachments\",\n `${FilePaths.TASKS}/${data.id}`\n );\n }\n } catch (error) {\n logError(\n \"task:TaskCreate:TaskCreateToolbar:transform \" + category,\n error,\n notify\n );\n return Promise.reject(error);\n }\n\n return data;\n };\n\n const onSuccess = (data) => {\n notify(\"Task created successfully\");\n redirect(basePath);\n };\n\n const onFailure = (error) => {\n logError(\"task:TaskCreate:TaskCreateToolbar:onFailure\", error, notify);\n };\n\n return (\n <Toolbar {...props}>\n <SaveButton\n disabled={props.pristine}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n </Toolbar>\n );\n };\n\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New Task\" />}\n actions={<TaskCreateActions />}\n aside={<TaskAside />}\n >\n <SimpleForm\n initialValues={defaultValues()}\n validate={validateCreate}\n redirect=\"list\"\n variant=\"outlined\"\n toolbar={<TaskCreateToolbar />}\n >\n <TaskCreateForm\n setLink={setLink}\n userOptions={userOptions}\n referenceOptions={referenceOptions}\n setReferenceOptions={setReferenceOptions}\n notify={notify}\n />\n </SimpleForm>\n </Create>\n );\n};\n","import React, { useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { Button, Confirm } from \"react-admin\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport { DeleteIcon } from \"../../../components/common\";\n\nimport { getInboundShipmentForUpdate } from \"../../../graphql/inbound/custom-queries\";\nimport { getOutboundShipment, getAudit } from \"../../../graphql/queries\";\n\nimport { updateInboundShipmentMini } from \"../../../graphql/inbound/custom-mutations\";\nimport { updateOutboundShipmentMini } from \"../../../graphql/outbound/custom-mutations\";\nimport { updateAuditAssignee } from \"../../../graphql/audit/custom-mutations\";\nimport { deleteTask } from \"../../../graphql/mutations\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { TaskType } from \"../../../utils/constants\";\nimport { deepRedirect } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeepDeleteButton = ({\n record,\n backPath,\n history,\n notify,\n className,\n isSaving,\n isDeleting,\n setIsDeleting,\n ...props\n}) => {\n const classes = useStyles();\n const [open, setOpen] = useState(false);\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n const handleDelete = async (event) => {\n setIsDeleting(true);\n let toUpdateRecord = null;\n debugger;\n\n try {\n const hasDependency = typeof record.reference === \"string\";\n\n debugger;\n if (hasDependency && record.category === TaskType.AUDIT) {\n const response = await API.graphql(\n graphqlOperation(getAudit, { id: record.reference })\n );\n toUpdateRecord = {\n ...response.data.getAudit,\n assignedTo: \"\",\n };\n delete toUpdateRecord.createdAt;\n delete toUpdateRecord.updatedAt;\n await API.graphql(\n graphqlOperation(updateAuditAssignee, { input: toUpdateRecord })\n );\n } else if (\n hasDependency &&\n record.category === TaskType.ACCEPT_SHIPMENT\n ) {\n const response = await API.graphql(\n graphqlOperation(getInboundShipmentForUpdate, {\n id: record.reference,\n })\n );\n toUpdateRecord = {\n ...response.data.getInboundShipment,\n assignedTo: \"\",\n };\n delete toUpdateRecord.createdAt;\n delete toUpdateRecord.seals;\n delete toUpdateRecord.updatedAt;\n await API.graphql(\n graphqlOperation(updateInboundShipmentMini, {\n input: toUpdateRecord,\n })\n );\n } else if (\n hasDependency &&\n record.category === TaskType.PROCESS_OUTBOUND_SHIPMENT\n ) {\n const response = await API.graphql(\n graphqlOperation(getOutboundShipment, { id: record.reference })\n );\n toUpdateRecord = {\n ...response.data.getOutboundShipment,\n assignedTo: \"\",\n };\n delete toUpdateRecord.account;\n delete toUpdateRecord.area;\n delete toUpdateRecord.createdAt;\n delete toUpdateRecord.invoice;\n delete toUpdateRecord.location;\n delete toUpdateRecord.reloadYardCommodity;\n delete toUpdateRecord.seals;\n delete toUpdateRecord.shipmentLineItems;\n delete toUpdateRecord.timeslot;\n delete toUpdateRecord.updatedAt;\n await API.graphql(\n graphqlOperation(updateOutboundShipmentMini, {\n input: toUpdateRecord,\n })\n );\n }\n toUpdateRecord = { id: record.id };\n\n await API.graphql(\n graphqlOperation(deleteTask, { input: toUpdateRecord })\n );\n\n notify(\"Task deleted successfully\");\n deepRedirect(history, backPath);\n } catch (err) {\n logError(\n \"tasks:DeepDeleteButton:handleDelete:\" + JSON.stringify(toUpdateRecord),\n err,\n notify\n );\n } finally {\n setIsDeleting(false);\n setOpen(false);\n }\n };\n\n return (\n <>\n <Button\n {...props}\n label=\"Delete\"\n disabled={!record || isDeleting || isSaving}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={isDeleting}\n title={\"Delete Confirmation\"}\n content={\"Are you sure you want to delete this Task?\"}\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { useHistory } from \"react-router\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n getAudit,\n getInboundShipment,\n getOutboundShipment,\n userByActiveByLastName,\n} from \"../../../graphql/queries\";\nimport { updateInboundShipmentMini } from \"../../../graphql/inbound/custom-mutations\";\nimport { updateOutboundShipmentMini } from \"../../../graphql/outbound/custom-mutations\";\nimport { updateAuditAssignee } from \"../../../graphql/audit/custom-mutations\";\n\nimport {\n Button,\n Edit,\n DateInput,\n FileInput,\n FormDataConsumer,\n required,\n SaveButton,\n SelectInput,\n SimpleForm,\n TextInput,\n TopToolbar,\n Toolbar,\n useNotify,\n useEditController,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { Box } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { isFuture, isToday, isAfter, parse } from \"date-fns\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n ApproveIcon,\n AttachFileIcon,\n LaunchIcon,\n} from \"../../../components/common\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport {\n ACCEPTED_FILES,\n FilePaths,\n MAX_FILES,\n Priorities,\n TaskStatus,\n TaskType,\n TaskTypes,\n TrueOrFalse,\n} from \"../../../utils/constants\";\nimport { handleFileChange, saveRemoveFiles } from \"../../../utils/fileUtils\";\nimport { deepRedirect, getBackPath } from \"../../../utils/utils\";\nimport { TaskEditHelp } from \"./TaskHelp\";\nimport { TaskAside } from \"./TaskAside\";\nimport { DeepDeleteButton } from \"./DeepDeleteButton\";\n\nconst isTodayOrFutureDate = (value, allValues) => {\n const date = parse(value, \"yyyy-MM-dd\", new Date());\n const status = allValues.status;\n\n if (status > 20) return undefined;\n return value && (isToday(date) || isFuture(date))\n ? undefined\n : \"Date must be in the future\";\n};\n\nconst validateForm = ({ dueDate, lateDate }) => {\n const errors = {};\n if (\n isAfter(\n parse(dueDate, \"yyyy-MM-dd\", new Date()),\n parse(lateDate, \"yyyy-MM-dd\", new Date())\n )\n ) {\n errors.lateDate = [\"Late date must be greater then due date\"];\n }\n return errors;\n};\n\nconst useStyles = makeStyles((theme) => ({\n link: {\n marginTop: theme.spacing(1.5),\n },\n}));\n\nconst EditActions = (props) => (\n <TopToolbar>\n <HelpButton>\n <TaskEditHelp {...props} />\n </HelpButton>\n <BackButton {...props} />\n </TopToolbar>\n);\n\nconst EditToolbar = (props) => {\n const [isSaving, setIsSaving] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const { record, userOptions, backPath, history, notify } = props; // passing full props to DeepDeleteButton\n\n const transformApprove = (data) => {\n setIsSaving(true);\n\n return {\n ...data,\n status: 40,\n resolvedDate: new Date().toISOString(),\n };\n };\n\n const onSuccessApprove = (data) => {\n setIsSaving(false);\n notify(\"Task approved successfully\");\n deepRedirect(history, backPath);\n };\n\n const transform = async (data) => {\n setIsSaving(true);\n debugger;\n const { assignedTo, category, reference } = data;\n try {\n const user = userOptions.find((itm) => itm.id === assignedTo);\n data.assignedToName = user.fullName;\n\n if (category !== TaskType.GENERIC) {\n if (category === TaskType.AUDIT) {\n const response = await API.graphql(\n graphqlOperation(getAudit, { id: reference })\n );\n const toUpdateAudit = response.data.getAudit;\n debugger;\n toUpdateAudit.assignedTo = user.fullName;\n delete toUpdateAudit.createdAt;\n delete toUpdateAudit.updatedAt;\n delete toUpdateAudit.nextItems;\n delete toUpdateAudit.locations;\n\n await API.graphql(\n graphqlOperation(updateAuditAssignee, { input: toUpdateAudit })\n );\n } else if (category === TaskType.ACCEPT_SHIPMENT) {\n const response = await API.graphql(\n graphqlOperation(getInboundShipment, { id: reference })\n );\n const toUpdateInboundShippment = response.data.getInboundShipment;\n debugger;\n toUpdateInboundShippment.assignedTo = user.fullName;\n delete toUpdateInboundShippment.account;\n delete toUpdateInboundShippment.area;\n delete toUpdateInboundShippment.createdAt;\n delete toUpdateInboundShippment.inventories;\n delete toUpdateInboundShippment.invoice;\n delete toUpdateInboundShippment.location;\n delete toUpdateInboundShippment.reloadYardCommodity;\n delete toUpdateInboundShippment.seals;\n delete toUpdateInboundShippment.timeslot;\n delete toUpdateInboundShippment.updatedAt;\n delete toUpdateInboundShippment.zone;\n\n await API.graphql(\n graphqlOperation(updateInboundShipmentMini, {\n input: toUpdateInboundShippment,\n })\n );\n } else if (category === TaskType.PROCESS_OUTBOUND_SHIPMENT) {\n const response = await API.graphql(\n graphqlOperation(getOutboundShipment, { id: reference })\n );\n const toUpdateOutboundShippment = response.data.getOutboundShipment;\n debugger;\n toUpdateOutboundShippment.assignedTo = user.fullName;\n delete toUpdateOutboundShippment.account;\n delete toUpdateOutboundShippment.area;\n delete toUpdateOutboundShippment.createdAt;\n delete toUpdateOutboundShippment.invoice;\n delete toUpdateOutboundShippment.location;\n delete toUpdateOutboundShippment.reloadYardCommodity;\n delete toUpdateOutboundShippment.seals;\n delete toUpdateOutboundShippment.shipmentLineItems;\n delete toUpdateOutboundShippment.timeslot;\n delete toUpdateOutboundShippment.updatedAt;\n\n await API.graphql(\n graphqlOperation(updateOutboundShipmentMini, {\n input: toUpdateOutboundShippment,\n })\n );\n }\n }\n\n await saveRemoveFiles(\n record,\n data,\n \"attachments\",\n `${FilePaths.TASKS}/${data.id}`\n );\n } catch (error) {\n setIsSaving(false);\n logError(\"task:TaskEdit:transform \" + category, error, notify);\n return Promise.reject(error);\n }\n return data;\n };\n\n const onSuccess = ({ data }) => {\n setIsSaving(false);\n notify(\"Task updated successfully\");\n deepRedirect(history, backPath);\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\"task:EditToolbar:onFailure:Task Create\", error, notify);\n };\n\n return (\n <Toolbar style={{ justifyContent: \"space-between\" }} {...props}>\n <div>\n <SaveButton\n {...props}\n label=\"Save\"\n disabled={props.pristine || isDeleting}\n saving={isSaving}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n {record?.status < 40 ? (\n <SaveButton\n {...props}\n label=\"Approve\"\n icon={<ApproveIcon />}\n style={{ marginLeft: 16 }}\n submitOnEnter={false}\n undoable={false}\n disabled={isDeleting}\n saving={isSaving}\n transform={transformApprove}\n onSuccess={onSuccessApprove}\n onFailure={onFailure}\n />\n ) : null}\n </div>\n <DeepDeleteButton\n {...props}\n isSaving={isSaving}\n isDeleting={isDeleting}\n setIsDeleting={setIsDeleting}\n />\n </Toolbar>\n );\n};\n\nexport const TaskEdit = (props) => {\n const notify = useNotify();\n const history = useHistory();\n const [userOptions, setUserOptions] = useState();\n const isComponentMounted = useRef(true);\n const { record } = useEditController(props);\n const backPath = getBackPath(props);\n\n useEffect(() => {\n debugger;\n if (isComponentMounted) getUsers();\n return () => (isComponentMounted.current = false);\n }, []);\n\n const getUsers = async () => {\n try {\n const response = await API.graphql(\n graphqlOperation(userByActiveByLastName, {\n reloadYardId: window.appUser?.reloadYardId,\n activeLastName: { beginsWith: { active: \"true\" } },\n })\n );\n debugger;\n if (response.data.userByActiveByLastName.items.length > 0) {\n const users = response.data.userByActiveByLastName.items;\n let userList = users.map((itm) => ({\n id: itm.id,\n name: itm.fullName,\n fullName: itm.fullName,\n }));\n debugger;\n setUserOptions(userList);\n } else {\n logError(\"tasks:TaskEdit:getUsers:response\", response, notify);\n }\n } catch (error) {\n logError(\"tasks:TaskEdit:getUsers\", error, notify);\n }\n };\n\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Task\" />}\n mutationMode=\"pessimistic\"\n actions={<EditActions {...props} backPath={backPath} />}\n aside={<TaskAside />}\n >\n <SimpleForm\n validate={validateForm}\n toolbar={\n <EditToolbar\n {...props}\n record={record}\n userOptions={userOptions}\n backPath={backPath}\n history={history}\n notify={notify}\n />\n }\n >\n <TaskForm\n {...props}\n userOptions={userOptions}\n backPath={backPath}\n history={history}\n />\n </SimpleForm>\n </Edit>\n );\n};\n\nconst TaskLinkField = ({ classes, history, record, backPath, ...props }) => {\n const handleProcess = () => {\n if (record.category === \"ACCEPT_SHIPMENT\") {\n deepRedirect(\n history,\n `/inboundShipments/${record.reference}`,\n props.location.pathname,\n backPath,\n {}\n );\n } else {\n deepRedirect(history, record.link, props.location.pathname, backPath, {});\n }\n };\n\n return record?.link ? (\n <Button\n label=\"Open\"\n size=\"medium\"\n color=\"primary\"\n className={classes.link}\n onClick={handleProcess}\n >\n <LaunchIcon />\n </Button>\n ) : null;\n};\n\nconst TaskForm = (props) => {\n const form = useForm();\n const notify = useNotify();\n const classes = useStyles();\n const { record, userOptions } = props;\n\n const validateDueDate = (value, allValues) => {\n const fieldState = form.getFieldState(\"dueDate\");\n const isDirty = value !== fieldState?.initial;\n const valid = isDirty ? isTodayOrFutureDate(value, allValues) : undefined;\n return valid;\n };\n\n const validateLateDate = (value, allValues) => {\n const fieldState = form.getFieldState(\"dueDate\");\n const isDirty = value !== fieldState?.initial;\n const valid = isDirty ? isTodayOrFutureDate(value, allValues) : undefined;\n return valid;\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Box flex={1} style={{ width: \"100%\" }}>\n <Box display={{ xs: \"block\", sm: \"flex\" }}>\n <Box flex={1} mr={{ xs: 0, sm: \"1em\" }}>\n <SelectInput\n source=\"category\"\n label=\"Task type\"\n variant=\"outlined\"\n fullWidth\n disabled\n choices={TaskTypes}\n />\n </Box>\n <Box flex={1}>\n <TaskLinkField classes={classes} {...props} />\n </Box>\n </Box>\n <Box display={{ xs: \"block\", sm: \"flex\" }}>\n <Box flex={1} mr={{ xs: 0, sm: \"1em\" }}>\n <TextInput\n source=\"name\"\n variant=\"outlined\"\n fullWidth\n validate={required()}\n />\n </Box>\n <Box flex={1}>\n <SelectInput\n source=\"assignedTo\"\n label=\"Assign To\"\n variant=\"outlined\"\n fullWidth\n choices={userOptions}\n validate={required()}\n />\n </Box>\n </Box>\n <TextInput\n source=\"description\"\n label=\"Task description\"\n formClassName={classes.fullWidthCol}\n variant=\"outlined\"\n multiline\n minRows={2}\n fullWidth\n // validate={required()}\n />\n <Box display={{ xs: \"block\", sm: \"flex\" }}>\n <Box flex={1} mr={{ xs: 0, sm: \"1em\" }}>\n <DateInput\n source=\"dueDate\"\n label=\"Due date\"\n variant=\"outlined\"\n validate={[validateDueDate]}\n disabled={record?.status > 20}\n fullWidth\n />\n </Box>\n <Box flex={1}>\n <DateInput\n source=\"lateDate\"\n label=\"Late date\"\n variant=\"outlined\"\n validate={[validateLateDate]}\n disabled={record?.status > 20}\n fullWidth\n />\n </Box>\n </Box>\n <Box display={{ xs: \"block\", sm: \"flex\" }}>\n <Box flex={1} mr={{ xs: 0, sm: \"1em\" }}>\n <SelectInput\n choices={TrueOrFalse}\n source=\"allowReassign\"\n label=\"Allow reassign\"\n variant=\"outlined\"\n fullWidth\n />\n </Box>\n <Box flex={1} mr={{ xs: 0, sm: \"1em\" }}>\n <SelectInput\n choices={TaskStatus}\n source=\"status\"\n variant=\"outlined\"\n fullWidth\n />\n </Box>\n <Box flex={1}>\n <SelectInput\n choices={Priorities}\n label=\"Priority\"\n source=\"priority\"\n variant=\"outlined\"\n fullWidth\n />\n </Box>\n </Box>\n <Box display={{ xs: \"block\", sm: \"flex\" }}>\n <Box flex={1}>\n <TextInput\n source=\"note\"\n multiline\n minRows={2}\n disabled\n variant=\"outlined\"\n fullWidth\n formClassName={classes.fullWidthCol}\n />\n </Box>\n </Box>\n <Box display={{ xs: \"block\", sm: \"flex\" }}>\n <Box flex={1}>\n <FileInput\n source=\"attachments\"\n label=\"ATTACHMENTS\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop file(s) to\n upload, or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n multiple\n maxFiles={MAX_FILES}\n options={{ maxFiles: MAX_FILES }}\n onChange={(value) =>\n handleFileChange(\"attachments\", value, form, notify)\n }\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Box>\n </Box>\n </Box>\n )}\n </FormDataConsumer>\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { Card, useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n Datagrid,\n EditButton,\n FilterButton,\n FunctionField,\n ListContextProvider,\n ListToolbar,\n RefreshButton,\n ShowButton,\n SimpleList,\n TextField,\n Title,\n TopToolbar,\n useListContext,\n} from \"react-admin\";\n\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\nimport { UserStatusIcon } from \"../../../managerApp/resources/users/UserStatusIcon\";\nimport { ChevronRightIcon } from \"../../../components/common\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { useUser } from \"../../../authenticatorApp/UserContext\";\n\nconst useStyles = makeStyles((theme) => ({\n accountField: {\n maxWidth: \"16rem\",\n minWidth: \"16rem\",\n },\n statusIcon: {\n marginTop: theme.spacing(1),\n },\n}));\n\nconst renderName = (record) => {\n return `${record.lastName}, ${record.firstName}`;\n};\n\nconst CustomerSearchField = ({ label, alwaysOn, ...props }) => {\n const listContext = useListContext(props);\n const { displayedFilters, filterValues, setFilters } = listContext;\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n const filters = {\n ...filterValues,\n or: [\n { lastName: { matchPhrasePrefix: `${value}` } },\n { lastName: { wildcard: `*${value}*` } },\n { email: { matchPhrasePrefix: `${value}` } },\n { email: { wildcard: `*${value}*` } },\n ],\n };\n\n setFilters(filters, displayedFilters);\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = () => [<CustomerSearchField label=\"Search\" alwaysOn />];\n\nconst ListActions = ({ basePath, isXSmall, ...props }) => {\n return !isXSmall ? (\n <TopToolbar>\n <FilterButton />\n <RefreshButton />\n </TopToolbar>\n ) : null;\n};\n\nexport const CustomerList = (props) => {\n const { appUser } = useUser();\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const lteMedium = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n\n const [defaultFilter] = useState({\n accountId: appUser?.accountId,\n activeLastName: { beginsWith: { active: \"true\" } },\n });\n\n const defaultSearchFilter = {\n accountId: { eq: appUser?.accountId },\n active: { eq: \"true\" },\n };\n\n // Include key & search to display default sort order.\n const defaultSort = {\n field: `{\"key\":\"customerByAccountByActiveByName\", \"search\":\"lastName\"}`,\n order: \"ASC\",\n };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = localStorage.getItem(`${props.resource}_perPage`);\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? Number(sessionPerPage) : 10\n );\n\n const listContext = useSearchableList({\n ...props,\n defaultTitle: \"Users\",\n defaultFilter: defaultFilter,\n defaultSort: defaultSort,\n defaultSearchFilter: defaultSearchFilter,\n defaultPerPage: defaultPerPage,\n resource: \"customerReloadYardAccounts\",\n });\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n useEffect(() => {\n if (listContext?.filter) {\n // reset list on automatic stale list reset\n // Extract the key query from defaultSort\n const fieldObj = JSON.parse(defaultSort.field);\n const keyToCheck = fieldObj.key;\n\n // Check for the key's presence in filter\n const hasKey = keyToCheck in listContext.filter;\n const hasFilterValues = Object.keys(listContext.filterValues).length > 0;\n if (hasKey && hasFilterValues) listContext.setFilters({});\n }\n }, [listContext?.filter]);\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Users\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters()}\n actions={<ListActions isXSmall={isXSmall} />}\n />\n <Card>\n <CustomerGrid\n appUser={appUser}\n isXSmall={isXSmall}\n lteMedium={lteMedium}\n classes={classes}\n />\n <Pagination {...listContext} />\n </Card>\n </ListContextProvider>\n );\n};\n\nconst canEditProfile = (record, appUser) => {\n return record.id === appUser.id;\n};\n\nconst rowClickHandler = (record, appUser) => {\n return canEditProfile(record, appUser) ? \"edit\" : \"show\";\n};\n\nconst CustomerGrid = (props) => {\n const { appUser, isXSmall, lteMedium, classes } = props;\n const { data, ids, page, ...context } = useListContext();\n\n // Transform the data here\n const transformedData = {};\n const transformedIds = [];\n\n if (data && ids) {\n ids.forEach((id) => {\n const record = data[id];\n if (record && record.customer) {\n // Transform the record here, for example, use the user subrecord\n transformedData[record.customerId] = {\n ...record.customer,\n accountName: record.accountName,\n };\n transformedIds.push(record.customerId);\n }\n });\n }\n\n const newContext = {\n ...context,\n data: transformedData,\n ids: transformedIds,\n basePath: \"/customers\",\n resource: \"customers\",\n };\n\n return (\n <ListContextProvider value={newContext}>\n {isXSmall ? (\n <SimpleList\n primaryText={renderName}\n secondaryText={(record) => record.email}\n tertiaryText={(record) => record.accountName}\n linkType={(jsonRecord, basePath, record) =>\n rowClickHandler(record, appUser)\n }\n leftIcon={(record) => <UserStatusIcon record={record} />}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n />\n ) : lteMedium ? (\n <Datagrid\n rowClick={(jsonRecord, basePath, record) =>\n rowClickHandler(record, appUser)\n }\n >\n <FunctionField\n source=\"lastName\"\n label=\"Name\"\n render={renderName}\n sortable={true}\n sortBy={`{\"key\":\"customerByAccountByActiveByName\", \"search\":\"lastName\"}`}\n />\n <UserStatusIcon\n source=\"status\"\n label=\"Status\"\n classes={classes.statusIcon}\n sortable={false}\n />\n <TextField source=\"email\" label=\"Email\" sortable={false} />\n </Datagrid>\n ) : (\n <Datagrid\n rowClick={(jsonRecord, basePath, record) =>\n rowClickHandler(record, appUser)\n }\n >\n <FunctionField\n source=\"lastName\"\n label=\"Name\"\n render={renderName}\n sortable={true}\n sortBy={`{\"key\":\"customerByAccountByActiveByName\", \"search\":\"lastName\"}`}\n />\n <UserStatusIcon\n source=\"status\"\n label=\"Status\"\n classes={classes.statusIcon}\n sortable={false}\n />\n <TextField source=\"email\" label=\"Email\" sortable={false} />\n <TextField source=\"phone\" label=\"Phone\" sortable={false} />\n <FunctionField\n render={(record) =>\n canEditProfile(record, appUser) ? (\n <EditButton record={record} />\n ) : (\n <ShowButton record={record} />\n )\n }\n />\n </Datagrid>\n )}\n </ListContextProvider>\n );\n};\n","import React from \"react\";\n\nimport {\n Card,\n CardContent,\n Grid,\n makeStyles,\n Typography,\n} from \"@material-ui/core\";\n\nimport { SelectField } from \"react-admin\";\n\nimport { UserStatuses } from \"../../../utils/constants\";\nimport { UserStatusIcon } from \"../../../managerApp/resources/users/UserStatusIcon\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n width: \"16em\",\n minWidth: \"16em\",\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(0.5),\n overflow: \"initial\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n statusIcon: {\n marginTop: theme.spacing(-0.3),\n },\n}));\n\nexport const CustomerAside = ({ backPath, record, ...props }) => {\n const classes = useStyles();\n\n if (!record) return null;\n return (\n <Card className={classes.root}>\n <CardContent>\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Status:\n </Typography>\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <UserStatusIcon record={record} classes={classes.statusIcon} />\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <SelectField\n source=\"status\"\n record={record}\n choices={UserStatuses}\n />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n );\n};\n","import React from \"react\";\n\nimport { Grid } from \"@material-ui/core\";\n\nimport {\n Labeled,\n Show,\n SimpleShowLayout,\n TextField,\n TopToolbar,\n} from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { CustomerAside } from \"./CustomerAside\";\n\nconst UserShowActions = ({ basePath }) => (\n <TopToolbar>\n <BackButton basePath={basePath} />\n </TopToolbar>\n);\n\nconst UserShowGrid = ({ record, ...props }) => {\n return (\n <Grid container spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Firs Name\">\n <TextField source=\"firstName\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Last Name\">\n <TextField source=\"lastName\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Email\">\n <TextField source=\"email\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Phone\">\n <TextField source=\"phone\" />\n </Labeled>\n </Grid>\n </Grid>\n );\n};\n\nexport const CustomerShow = (props) => {\n return (\n <Show\n {...props}\n title=\"View User\"\n actions={<UserShowActions />}\n aside={<CustomerAside {...props} />}\n >\n <SimpleShowLayout>\n <UserShowGrid />\n </SimpleShowLayout>\n </Show>\n );\n};\n","import { API, graphqlOperation } from \"aws-amplify\";\nimport {\n createCustomerReloadYardAccountMini,\n updateCustomerReloadYardAccountMini,\n} from \"../../../graphql/reloadyard/custom-mutations\";\nimport { logError } from \"../../../utils/appUtils\";\n\nexport const sendEmails = async (reloadYardAccounts, generateEmailContent) => {\n try {\n if (\n typeof reloadYardAccounts === \"object\" &&\n !Array.isArray(reloadYardAccounts)\n ) {\n reloadYardAccounts = [reloadYardAccounts];\n }\n\n const promises = [];\n for (const record of reloadYardAccounts) {\n const emailContent = generateEmailContent(\n record.email,\n `${record.firstName} ${record.lastName}`,\n record.accountName || record.reloadYardName\n );\n\n const promise = API.post(\"transREST\", \"/sendEmail\", {\n body: {\n to: record.email,\n bcc: [\"support@transloads.co\"],\n // replyTo: \"support@transloads.co\",\n subject: \"Customer User Deletion Notice\",\n template: \"emailTemplate.html\",\n htmlContent: emailContent,\n },\n });\n promises.push(promise);\n }\n\n // Wait for all email sending promises to resolve\n await Promise.all(promises);\n } catch (error) {\n logError(\"managerApp:customers:customerUtils\", error, false);\n }\n};\n\nexport const doCreateReloadYardAccount = async (customer, acl, account) => {\n debugger;\n const toCreateRecord = {\n active: \"true\",\n groups: window.appUser.reloadYard.groups,\n customerId: customer.id,\n email: customer.email,\n lastName: customer.lastName,\n reloadYardId: window.appUser.reloadYardId,\n accountId: account.id,\n accountName: account.businessName,\n acl: acl,\n };\n\n await API.graphql(\n graphqlOperation(createCustomerReloadYardAccountMini, {\n input: toCreateRecord,\n })\n );\n};\n\nexport const doUpdateReloadYardAccount = async (reloadYardAccount) => {\n debugger;\n const toUpdateRecord = { ...reloadYardAccount };\n\n delete toUpdateRecord.account;\n delete toUpdateRecord.createdAt;\n delete toUpdateRecord.customer;\n delete toUpdateRecord.reloadYard;\n delete toUpdateRecord.updatedAt;\n\n await API.graphql(\n graphqlOperation(updateCustomerReloadYardAccountMini, {\n input: toUpdateRecord,\n })\n );\n};\n\nexport const deactivateReloadYardAccounts = (reloadYardAccounts) => {\n debugger;\n const promiseList = reloadYardAccounts.map((reloadYardAccount) => {\n const toUpdateRecord = { ...reloadYardAccount, active: \"false\" };\n delete toUpdateRecord.account;\n delete toUpdateRecord.createdAt;\n delete toUpdateRecord.customer;\n delete toUpdateRecord.reloadYard;\n delete toUpdateRecord.updatedAt;\n\n return API.graphql(\n graphqlOperation(updateCustomerReloadYardAccountMini, {\n input: toUpdateRecord,\n })\n );\n });\n\n return promiseList;\n};\n","import React, { useState } from \"react\";\n\nimport { SaveButton, useNotify, useRedirect } from \"react-admin\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { doUpdateReloadYardAccount } from \"../../../managerApp/resources/customers/customerUtils\";\n\nexport const ValidateSaveButton = ({ record, backPath, ...props }) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const [isSaving, setIsSaving] = useState(false);\n\n const transform = (data) => {\n data = { ...data };\n debugger;\n\n data.email = data.email.toLowerCase();\n\n delete data.accountId;\n delete data.reloadYardAccounts;\n\n return data;\n };\n\n const onSuccess = async ({ data }) => {\n debugger;\n try {\n if (data.lastName !== record.lastName) {\n const reloadYardAccount = {\n ...data.reloadYardAccounts.items[0],\n lastName: data.lastName,\n };\n await doUpdateReloadYardAccount(reloadYardAccount);\n }\n\n notify(`User updated successfully.`);\n redirect(backPath);\n } catch (error) {\n logError(\n \"managerApp:customers:ValidateSaveButton:onSuccess\",\n error,\n notify\n );\n } finally {\n setIsSaving(false);\n }\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\n \"managerApp:customers:ValidateSaveButton:onFailure\",\n error,\n notify\n );\n };\n\n return (\n <SaveButton\n {...props}\n submitOnEnter={false}\n undoable={false}\n disabled={props.pristine}\n saving={isSaving}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n );\n};\n","export function emailDeleteHTML(fromEmail, fromName, accountName) {\n return `<!-- Begin HTML Content -->\n <h1> Customer Access Cancelled <br/></h1>\n <hr style=\"background:#2d8cff; height: 8px; width: 60px; border-style: solid; border-color: #095484; border-width: 1px 0 0 0; border-radius: 8px;\" />\n <br><br>\n ${fromName} at ${accountName} has deleted their User account on transloads.co. <br/>\n If you believe this was done by mistake, please contact this user at their email address: <br/>\n ${fromEmail} <br/>\n You can always re-activate their account by sending them a new invite from Users > Customers.<br/>\n <br/><br/>\n <!-- End HTML Content -->`;\n}\n","import React, { useState } from \"react\";\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Grid,\n IconButton,\n MenuItem,\n TextField,\n Typography,\n} from \"@material-ui/core\";\n\nimport {\n Button,\n Confirm,\n useNotify,\n useRedirect,\n useRefresh,\n} from \"react-admin\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport { CancelIcon, CloseIcon, DeleteIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n deactivateReloadYardAccounts,\n doUpdateReloadYardAccount,\n sendEmails,\n} from \"../../../managerApp/resources/customers/customerUtils\";\nimport { emailDeleteHTML } from \"./emailDeleteHTML\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n dialogTitle: {\n display: \"flex\",\n paddingTop: theme.spacing(0),\n paddingBottom: theme.spacing(0),\n justifyContent: \"space-between\",\n },\n title: {\n paddingTop: theme.spacing(1),\n },\n dialogContent: {\n // https://stackoverflow.com/questions/47698037/how-can-i-set-a-height-to-a-dialog-in-material-ui\n minHeight: \"50vh\",\n },\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeleteYardButton = ({\n record,\n appUser,\n setAppUser,\n className,\n ...props\n}) => {\n const notify = useNotify();\n const refresh = useRefresh();\n const classes = useStyles();\n const [isOpen, setIsOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n const [reloadYards, setReloadYards] = useState(\n appUser.reloadYardAccounts.items.map((item) => item.reloadYard)\n );\n const [selectedYardId, setSelectedRYardId] = useState(\"\");\n\n const handleDialogOpen = () => setIsOpen(true);\n const handleDialogClose = () => setIsOpen(false);\n\n const handleDelete = async () => {\n setLoading(true);\n try {\n debugger;\n // Update customer active = \"false\", tirggers lambda function \"/processCustomer\"\n const reloadYardAccount = appUser.reloadYardAccounts.items.find(\n (account) => account.reloadYardId === selectedYardId\n );\n reloadYardAccount.active = \"false\";\n reloadYardAccount.firstName = appUser.firstName;\n await doUpdateReloadYardAccount(reloadYardAccount);\n\n // send silently don't await\n sendEmails(reloadYardAccount, emailDeleteHTML);\n\n // update appUser\n const newReloadYardAccounts = appUser.reloadYardAccounts.items.filter(\n (account) => account.reloadYardId !== selectedYardId\n );\n setReloadYards(newReloadYardAccounts.map((item) => item.reloadYard));\n setAppUser({\n ...appUser,\n reloadYardAccounts: {\n items: newReloadYardAccounts,\n },\n });\n\n notify(\"Removed access successfully\");\n } catch (error) {\n logError(\n \"custoemrApp:customers:DeleteYardButton:handleDelete\",\n error,\n notify\n );\n } finally {\n setLoading(false);\n setIsOpen(false);\n refresh();\n }\n };\n\n return (\n <>\n <Button\n {...props}\n label=\"Remove Transload\"\n disabled={loading}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Dialog open={isOpen} onClose={handleDialogClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle disableTypography className={classes.dialogTitle}>\n <Typography className={classes.title} variant=\"h6\">\n Remove Transload Access\n </Typography>\n <IconButton aria-label=\"close\" onClick={handleDialogClose}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n <DialogContent>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" gutterBottom>\n Select a transload to remove:\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <TextField\n select\n id=\"site-select\"\n label=\"Transload\"\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n required\n value={selectedYardId.id}\n onChange={(event) => setSelectedRYardId(event.target.value)}\n helperText=\"Cannot remove access to a transload being currently managed.\"\n >\n {reloadYards.map((yard) => (\n <MenuItem\n key={yard.id}\n value={yard.id}\n disabled={yard.id === appUser.reloadYardId}\n >\n {yard.name}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button label=\"Close\" color=\"default\" onClick={handleDialogClose}>\n <CancelIcon />\n </Button>\n <Button\n label=\"Remove Access\"\n color=\"primary\"\n disabled={!selectedYardId || loading}\n onClick={handleDelete}\n >\n <DeleteIcon />\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n\nexport const DeleteAccountButton = ({ record, className, ...props }) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const classes = useStyles();\n const [isOpen, setIsOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const isDeleteDisabled = () => {\n return loading;\n };\n\n const handleDialogOpen = () => setIsOpen(true);\n const handleDialogClose = () => setIsOpen(false);\n\n const handleDelete = async (event) => {\n setLoading(true);\n try {\n debugger;\n // Update customer active = \"false\", tirggers lambda function \"/processCustomer\"\n const responses = await Promise.allSettled(\n deactivateReloadYardAccounts(record?.reloadYardAccount?.items)\n );\n const resError = responses.find((item) => item.status === \"rejected\");\n if (resError) {\n logError(\n \"custoemrApp:customers:DeepDeleteButton:handleDelete:response\",\n resError,\n false\n );\n throw resError;\n }\n\n // send silently don't await\n const newReloadYardAccounts = record?.reloadYardAccounts?.items.map(\n (item) => {\n return { ...item, firstName: record.firstName };\n }\n );\n sendEmails(newReloadYardAccounts, emailDeleteHTML);\n\n notify(\"Account deleted successfully\");\n redirect(\"/logout\");\n } catch (error) {\n logError(\n \"custoemrApp:customers:DeleteAccountButton:handleDelete\",\n error,\n notify\n );\n } finally {\n setLoading(false);\n setIsOpen(false);\n }\n };\n\n return (\n <>\n <Button\n {...props}\n label=\"Delete My Account\"\n disabled={isDeleteDisabled()}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={isOpen}\n loading={loading}\n title={\"Delete Confirmation\"}\n content={\n <>\n Are you sure you want to delete your account? <br />\n You will lose access to all transloads! <br />\n Use DELETE TRANSLOAD to remove access to a single transload.\n </>\n }\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React from \"react\";\n\nimport { Grid } from \"@material-ui/core\";\n\nimport {\n Edit,\n FormDataConsumer,\n maxLength,\n minLength,\n regex,\n required,\n SimpleForm,\n TextInput,\n Toolbar,\n TopToolbar,\n useEditController,\n useRedirect,\n} from \"react-admin\";\n\nimport { useUser } from \"../../../authenticatorApp/UserContext\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { AclType, REGEX_PHONE } from \"../../../utils/constants\";\nimport { getBackPath } from \"../../../utils/utils\";\nimport { ValidateSaveButton } from \"./ValidateSaveButton\";\nimport { DeleteAccountButton, DeleteYardButton } from \"./DeepDeleteButton\";\nimport { CustomerAside } from \"./CustomerAside\";\n\nconst validateRequired = required();\nconst validatePhone = [\n regex(REGEX_PHONE, \"Must be valid Phone No.\"),\n minLength(10),\n maxLength(20),\n];\n\nconst CustomerEditForm = ({ record, ...props }) => {\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"firstName\"\n label=\"First Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"lastName\"\n label=\"Last Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"email\"\n type=\"email\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toLowerCase() : undefined)}\n disabled={true}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"phone\"\n type=\"tel\"\n variant=\"outlined\"\n fullWidth\n validate={validatePhone}\n />\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst CustomerEditActions = (props) => (\n <TopToolbar>\n <BackButton {...props} />\n </TopToolbar>\n);\n\nconst CustomerEditToolbar = ({\n record,\n appUser,\n setAppUser,\n isMultiTenant,\n backPath,\n ...props\n}) => {\n return (\n <Toolbar style={{ justifyContent: \"space-between\" }} {...props}>\n <ValidateSaveButton {...props} record={record} backPath={backPath} />\n {isMultiTenant() && (\n <DeleteYardButton\n record={record}\n appUser={appUser}\n setAppUser={setAppUser}\n backPath={backPath}\n />\n )}\n <DeleteAccountButton record={record} backPath={backPath} />\n </Toolbar>\n );\n};\n\nexport const CustomerEdit = (props) => {\n const { appUser, setAppUser, isAuthorized, isMultiTenant } = useUser();\n const { basePath, record } = useEditController(props);\n const redirect = useRedirect();\n const backPath = isAuthorized(AclType.USERS) ? getBackPath(props) : [\"/\"];\n\n if (appUser && record && appUser.id !== record.id) {\n if (!isAuthorized(AclType.USERS)) redirect(\"show\", basePath, \"invalid\");\n\n // customer can view but not edit other user's profiles.\n redirect(\"show\", basePath, record.id);\n }\n\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit User\" />}\n mutationMode=\"pessimistic\"\n actions={<CustomerEditActions backPath={backPath} />}\n aside={<CustomerAside {...props} />}\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={\n <CustomerEditToolbar\n record={record}\n appUser={appUser}\n setAppUser={setAppUser}\n isMultiTenant={isMultiTenant}\n backPath={backPath}\n />\n }\n >\n <CustomerEditForm record={record} />\n </SimpleForm>\n </Edit>\n );\n};\n","import React from \"react\";\n\nimport {\n Admin,\n Resource,\n // ShowGuesser,\n // EditGuesser,\n} from \"react-admin\";\n\nimport { myDataProvider } from \"../dataProvider/dataProvider\";\nimport reducer from \"../reducer\";\n\nimport customRoutes from \"../routes\";\n\nimport { CustomerLayout } from \"./layout/CustomerLayout\";\nimport { CustomerDashboard } from \"./layout/CustomerDashboard\";\n\n// import { AccountEdit } from \"../managerApp/resources/accounts/AccountEdit\";\n// import { AccountShow } from \"../managerApp/resources/accounts/AccountShow\";\n\nimport { InvoiceList } from \"./resources/invoices/InvoiceList\";\nimport { InvoiceShow } from \"./resources/invoices/InvoiceShow\";\n\nimport { InboundList } from \"./resources/inbounds/InboundList\";\n// import { InboundCreate } from \"../managerApp/resources/inboundShipment/InboundCreate\";\n// import { InboundEdit } from \"../managerApp/resources/inboundShipment/InboundEdit\";\nimport { InboundShow } from \"./resources/inbounds/InboundShow\";\n\nimport { OutboundList } from \"./resources/outbounds/OutboundList\";\nimport { OutboundAdviceCreate } from \"./resources/outbounds/OutboundAdviceCreate\";\nimport { OutboundAdviceEdit } from \"./resources/outbounds/OutboundAdviceEdit\";\nimport { OutboundShow } from \"./resources/outbounds/OutboundShow\";\n// import { PickListItemEdit } from \"../managerApp/resources/outboundShipments/lineItem/PickListItemEdit\";\n\nimport { InventoryList } from \"./resources/inventory/InventoryList\";\n// import { InventoryEdit } from \"../managerApp/resources/inventory/InventoryEdit\";\nimport { InventoryShow } from \"./resources/inventory/InventoryShow\";\n// import { InventoryItemCreate } from '../managerApp/resources/inventory/inventoryItems/InventoryItemCreate';\n// import { InventoryItemEdit } from '../managerApp/resources/inventory/inventoryItems/InventoryItemEdit';\nimport { InventoryItemShow } from \"../managerApp/resources/inventory/inventoryItems/InventoryItemShow\";\n\nimport { ProductCreate } from \"../managerApp/resources/products/ProductCreate\";\nimport { ProductEdit } from \"../managerApp/resources/products/ProductEdit\";\n\nimport { TaskList } from \"../managerApp/resources/tasks/TaskList\";\nimport { TaskCreate } from \"../managerApp/resources/tasks/TaskCreate\";\nimport { TaskEdit } from \"../managerApp/resources/tasks/TaskEdit\";\n\nimport { CustomerList } from \"./resources/customers/CustomerList\";\n// import { CustomerCreate } from \"./resources/customers/CustomerCreate\";\nimport { CustomerShow } from \"./resources/customers/CustomerShow\";\nimport { CustomerEdit } from \"./resources/customers/CustomerEdit\";\n\nimport { theme, darkTheme } from \"../withRoot\";\nimport { useThemeState } from \"../ThemeStateProvider\";\n\nexport const CustomerApp = ({ adminHistory }) => {\n const { palette } = useThemeState();\n\n return (\n <Admin\n disableTelemetry\n title=\"Transloads.co\"\n dashboard={CustomerDashboard}\n options={{ authGroups: [] }}\n dataProvider={myDataProvider}\n layout={CustomerLayout}\n customRoutes={customRoutes}\n customReducers={{ data: reducer }}\n theme={palette === \"light\" ? theme : darkTheme}\n history={adminHistory}\n >\n <Resource\n title={\"Inbound Shipments\"}\n name=\"inboundShipments\"\n list={InboundList}\n // create={InboundCreate}\n // edit={InboundEdit}\n show={InboundShow}\n />\n <Resource\n name=\"outboundShipments\"\n list={OutboundList}\n create={OutboundAdviceCreate}\n edit={OutboundAdviceEdit}\n show={OutboundShow}\n />\n <Resource\n name=\"shipmentLineItems\"\n // edit={PickListItemEdit}\n />\n <Resource\n name=\"inventories\"\n list={InventoryList}\n show={InventoryShow}\n // edit={InventoryEdit}\n />\n <Resource\n name=\"inventoryItems\"\n // create={InventoryItemCreate}\n // edit={InventoryItemEdit}\n show={InventoryItemShow}\n />\n <Resource name=\"accounts\" />\n <Resource name=\"invoices\" list={InvoiceList} show={InvoiceShow} />\n <Resource name=\"reloadYards\" />\n <Resource name=\"services\" />\n <Resource\n name=\"customers\"\n list={CustomerList}\n // create={CustomerCreate}\n edit={CustomerEdit}\n show={CustomerShow}\n />\n <Resource\n title={\"Tasks\"}\n name=\"tasks\"\n list={TaskList}\n create={TaskCreate}\n edit={TaskEdit}\n />\n <Resource\n title={\"Product Catalog\"}\n name=\"products\"\n create={ProductCreate}\n edit={ProductEdit}\n />\n <Resource name=\"areas\" />\n <Resource name=\"zones\" />\n <Resource name=\"locations\" />\n <Resource name=\"capabilitys\" />\n <Resource name=\"commoditys\" />\n <Resource name=\"reloadYardCommoditys\" />\n <Resource name=\"reloadYardCapabilitys\" />\n </Admin>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport classnames from \"classnames\";\nimport { DashboardMenuItem, MenuItemLink } from \"react-admin\";\nimport {\n // AuditIcon,\n InboundIcon,\n // InventoryMapIcon,\n LogoutIcon,\n OutboundIcon,\n SearchIcon,\n TrainIcon,\n} from \"../../components/common\";\nimport FolderSpecialOutlinedIcon from \"@material-ui/icons/FolderSpecialOutlined\";\nimport MapOutlinedIcon from \"@material-ui/icons/MapOutlined\";\nimport SpeedIcon from \"@material-ui/icons/Speed\";\nimport {} from // AclType,\n\"../../utils/constants\";\nimport { hasTracks } from \"../../utils/locationUtils\";\n// import {isAuthorized} from \"../../utils/appUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n paddingTop: theme.spacing(2),\n },\n open: {\n width: 210,\n },\n closed: {\n width: 55,\n },\n}));\n\nexport const CrewMenu = ({ onMenuClick, dense }) => {\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n const showTrackManagement = useMemo(() => {\n return hasTracks();\n }, []);\n\n const open = useSelector((state) => state.admin.ui.sidebarOpen);\n\n useSelector((state) => state.theme);\n const dispatch = useDispatch();\n\n const handleMenuClick = (evt) => {\n if (onMenuClick) onMenuClick(evt);\n dispatch({ type: \"CLEAR_SEARCH_STATE\" });\n };\n\n const handleUtilizationMenuClick = (evt) => {\n if (onMenuClick) onMenuClick(evt);\n dispatch({ type: \"CLEAR_SEARCH_STATE\" });\n };\n\n return (\n <div\n className={classnames(classes.root, {\n [classes.open]: open,\n [classes.closed]: !open,\n })}\n >\n {\" \"}\n <DashboardMenuItem\n onClick={handleMenuClick}\n sidebarIsOpen={open}\n primaryText=\"Dashboard\"\n />\n <MenuItemLink\n to={`/processShipments`}\n primaryText=\"Inbound Shipments\"\n leftIcon={<InboundIcon />}\n onClick={handleMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n <MenuItemLink\n to={`/processOutboundShipments`}\n primaryText=\"Outbound Shipments\"\n leftIcon={<OutboundIcon />}\n onClick={handleMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n {showTrackManagement && (\n <MenuItemLink\n to=\"/trackManagement\"\n primaryText=\"Track Management\"\n leftIcon={<TrainIcon />}\n onClick={handleMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n )}\n {/* <MenuItemLink\n to=\"/processAudit\"\n primaryText=\"Inventory Audit\"\n leftIcon={<AuditIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n /> */}\n <MenuItemLink\n to=\"/search\"\n primaryText=\"Inventory Search\"\n leftIcon={<SearchIcon />}\n onClick={handleMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n {/* <MenuItemLink\n to=\"/locations\"\n primaryText=\"Inventory Map\"\n leftIcon={<InventoryMapIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n /> */}\n <MenuItemLink\n to=\"/utilization\"\n primaryText=\"Yard Utilization\"\n leftIcon={<SpeedIcon />}\n onClick={handleUtilizationMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n {/* <MenuItemLink\n to=\"/documents\"\n primaryText=\"Documents\"\n leftIcon={<FolderSpecialOutlinedIcon />}\n onClick={handleMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n /> */}\n {window.appUser?.reloadYard.mapImage && (\n <MenuItemLink\n to=\"/maps\"\n primaryText=\"Yard Map\"\n leftIcon={<MapOutlinedIcon />}\n onClick={handleMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n )}\n {isXSmall && (\n <MenuItemLink\n to=\"/logout\"\n primaryText=\"Logout\"\n leftIcon={<LogoutIcon />}\n />\n )}\n </div>\n );\n};\n","import React, { Fragment } from \"react\";\nimport { AppBar } from \"react-admin\";\nimport { useMediaQuery, Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport Announcements from \"../../components/common/Announcements\";\nimport { HelpWPSearchButton } from \"../../components/common/HelpWPSearchButton\";\nimport { AppBarHeader } from \"../../components/common/AppBarHeader\";\n\nconst useStyles = makeStyles((theme) => ({\n title: {\n flex: 1,\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n },\n hidden: {\n display: \"none\",\n },\n logo: {\n margin: \"auto\",\n paddingTop: theme.spacing(1),\n position: \"absolute\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n },\n spacer: { flex: 1 },\n}));\n\nexport const ManagerAppBar = (props, userMenu) => {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const classes = useStyles();\n const svgLogo = \"/logo_transloads_white.svg\";\n\n return isSmall ? (\n <>\n <AppBar {...props} color=\"primary\" userMenu={userMenu}>\n <span className={classes.spacer} />\n <Typography\n variant=\"h6\"\n color=\"inherit\"\n id=\"react-admin-title\"\n className={classes.hidden}\n />\n <AppBarHeader>\n <div className={classes.logo}>\n <img src={svgLogo} alt=\"transloads.co logo\" height=\"30px\" />\n </div>\n </AppBarHeader>\n <span className={classes.spacer} />\n </AppBar>\n <Announcements />\n </>\n ) : (\n <>\n {/* container={Fragment} makes the appBar fixed */}\n <AppBar\n {...props}\n color=\"primary\"\n userMenu={userMenu}\n container={Fragment}\n >\n <Typography\n variant=\"h6\"\n color=\"inherit\"\n id=\"react-admin-title\"\n className={classes.title}\n />\n <AppBarHeader>\n <div className={classes.logo}>\n <img src={svgLogo} alt=\"transloads.co logo\" height=\"30px\" />\n </div>\n </AppBarHeader>\n <span className={classes.spacer} />\n <HelpWPSearchButton />\n </AppBar>\n <Announcements />\n </>\n );\n};\n","import React, { useState } from \"react\";\n\nimport {\n Collapse,\n List,\n ListItemIcon,\n MenuItem,\n Tooltip,\n Typography,\n} from \"@material-ui/core\";\nimport { ExpandMore } from \"@material-ui/icons\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles((theme) => ({\n icon: { minWidth: theme.spacing(5) },\n sidebarIsOpen: {\n \"& a\": {\n paddingLeft: theme.spacing(4),\n transition: \"padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms\",\n },\n },\n sidebarIsClosed: {\n \"& a\": {\n paddingLeft: theme.spacing(2),\n transition: \"padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms\",\n },\n },\n}));\n\nexport const SubMenu = ({ sidebarIsOpen, name, icon, dense, children }) => {\n const classes = useStyles();\n const [isOpen, setIsOpen] = useState(false);\n\n const handleToggle = () => {\n setIsOpen(!isOpen);\n };\n\n const header = (\n <MenuItem dense={dense} button onClick={handleToggle}>\n <ListItemIcon className={classes.icon}>\n {isOpen ? <ExpandMore /> : icon}\n </ListItemIcon>\n <Typography variant=\"inherit\" color=\"textSecondary\">\n {name}\n </Typography>\n </MenuItem>\n );\n\n return (\n <>\n {sidebarIsOpen || isOpen ? (\n header\n ) : (\n <Tooltip title={name} placement=\"right\">\n {header}\n </Tooltip>\n )}\n <Collapse in={isOpen} timeout=\"auto\" unmountOnExit>\n <List\n dense={dense}\n component=\"div\"\n disablePadding\n className={\n sidebarIsOpen ? classes.sidebarIsOpen : classes.sidebarIsClosed\n }\n >\n {children}\n </List>\n </Collapse>\n </>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { API } from \"aws-amplify\";\nimport { useSelector } from \"react-redux\";\n\nimport {\n // Select, FormControl, InputLabel,\n useMediaQuery,\n} from \"@material-ui/core\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport SpeedIcon from \"@material-ui/icons/Speed\";\nimport classnames from \"classnames\";\n\nimport { useNotify, DashboardMenuItem, MenuItemLink } from \"react-admin\";\n\nimport {\n AccountIcon,\n // AuditIcon,\n CustomerIcon,\n DocumentRepoIcon,\n InboundIcon,\n InventoryIcon,\n InvoicesIcon,\n LogoutIcon,\n OutboundIcon,\n ReportsIcon,\n StaffIcon,\n SubscriptionIcon,\n TaskListIcon,\n TrainIcon,\n UserIcon,\n YardSetupIcon,\n} from \"../../components/common\";\n\nimport { isAuthorized, isTWA, logError } from \"../../utils/appUtils\";\nimport { AclType, UserType } from \"../../utils/constants\";\nimport { SubMenu } from \"../../components/SubMenu\";\nimport { hasTracks } from \"../../utils/locationUtils\";\nimport { NewBadge } from \"../../components/common/FeatureBadges\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n paddingTop: theme.spacing(2),\n },\n open: {\n width: 210,\n },\n closed: {\n width: 55,\n },\n formControlOpen: {\n marginLeft: theme.spacing(2),\n minWidth: 192,\n },\n formControlClosed: {\n display: \"none\",\n },\n}));\n\nexport const ManagerMenu = ({ onMenuClick, dense }) => {\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const open = useSelector((state) => state.admin.ui.sidebarOpen);\n useSelector((state) => state.theme);\n\n const classes = useStyles();\n const notify = useNotify();\n\n const showTrackManagement = useMemo(() => {\n return hasTracks();\n }, []);\n\n // const hasSites = window.appUser?.reloadYard?.sites?.items?.length > 0;\n // const [site, setSite] = useState(getDefaultSite());\n // const getDefaultSite = () => {\n // \tconst storedSite = localStorage.getItem('yardSite');\n // \tconst sites = window.appUser?.reloadYard?.sites?.items;\n // \tif (storedSite) return storedSite;\n // \tif (hasSites) return sites[0];\n // \treturn \"\";\n // }\n\n // const handleSiteChange = (event) => {\n // \tsetSite(event.target.value);\n // \t// Additional logic for site change\n // \ttry {\n // \t\tlocalStorage.setItem('yardSite', event.target.value);\n // \t\twindow.appUser.site = event.target.value;\n // \t\thistory.push(\"/\");\n // \t} catch (err) {\n // \t\tlogError(\"Menu:handleSiteChange\", err, false);\n // \t}\n // };\n\n const handleSubscriptions = async () => {\n debugger;\n try {\n const cusomerId = window.appUser?.reloadYard.subscription.customerId;\n\n const response = await API.post(\n \"transREST\",\n \"/stripe-create-portal-session\",\n {\n body: {\n customer: cusomerId,\n return_url: window.location.href,\n },\n }\n );\n\n debugger;\n if (response.err)\n logError(\n \"layout:Meunu:handleSubscriptions:response\",\n response.err,\n notify\n );\n else window.location.replace(response.session.url);\n } catch (error) {\n logError(\"layout:Meunu:handleSubscriptions\", error, notify);\n }\n };\n\n const isStripeSubscriptinoLinkVisible = () => {\n return (\n window.appUser?.reloadYard.subscription &&\n window.appUser?.type === UserType.MANAGER &&\n !isTWA()\n );\n };\n\n return (\n <div\n className={classnames(classes.root, {\n [classes.open]: open,\n [classes.closed]: !open,\n })}\n >\n {\" \"}\n {/* {hasSites &&\n\t\t\t\t<FormControl\n\t\t\t\t\tclassName={classnames({\n\t\t\t\t\t\t[classes.formControlOpen]: open,\n\t\t\t\t\t\t[classes.formControlClosed]: !open,\n\t\t\t\t\t})}\n\t\t\t\t>\n\t\t\t\t\t<InputLabel id=\"site-select-label\">Site</InputLabel>\n\t\t\t\t\t<Select\n\t\t\t\t\t\tlabelId=\"site-select-label\"\n\t\t\t\t\t\tid=\"site-select\"\n\t\t\t\t\t\tvalue={site}\n\t\t\t\t\t\tonChange={handleSiteChange}\n\t\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\t\tmargin=\"dense\"\n\t\t\t\t\t\tfullWidth\n\t\t\t\t\t>\n\t\t\t\t\t\t<MenuItem value=\"Site_1\">Boston</MenuItem>\n\t\t\t\t\t\t<MenuItem value=\"Site_2\">South Boston</MenuItem>\n\t\t\t\t\t\t<MenuItem value=\"Site_3\">Charlestown</MenuItem>\n\t\t\t\t\t</Select>\n\t\t\t\t</FormControl>\n\t\t\t} */}\n <DashboardMenuItem\n onClick={onMenuClick}\n sidebarIsOpen={open}\n primaryText=\"Dashboard\"\n />\n <MenuItemLink\n to={`/inboundShipments`}\n primaryText=\"Inbound Shipments\"\n leftIcon={<InboundIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n <MenuItemLink\n to={`/outboundShipments`}\n primaryText=\"Outbound Shipments\"\n leftIcon={<OutboundIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n {showTrackManagement && (\n <MenuItemLink\n to={`/trackManagementAdmin`}\n primaryText=\"Track Management\"\n leftIcon={<TrainIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n )}\n <MenuItemLink\n to={`/inventories`}\n primaryText=\"Inventory\"\n leftIcon={<InventoryIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n {/* <MenuItemLink\n\t\t\t\tto=\"/audits\"\n\t\t\t\tprimaryText=\"Audit\"\n\t\t\t\tleftIcon={<AuditIcon />}\n\t\t\t\tonClick={onMenuClick}\n\t\t\t\tsidebarIsOpen={open}\n\t\t\t\tdense={dense}\n\t\t\t/> */}\n {isAuthorized(AclType.ACCOUNTS) && (\n <MenuItemLink\n to={`/accounts`}\n primaryText=\"Accounts\"\n leftIcon={<AccountIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n )}\n {isAuthorized(AclType.INVOICES) && (\n <MenuItemLink\n to={`/invoices`}\n primaryText=\"Invoices\"\n leftIcon={<InvoicesIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n )}\n {isAuthorized(AclType.MY_YARD) && (\n <MenuItemLink\n to={`/reloadYards/${window.appUser?.reloadYard.id}`}\n primaryText=\"My Yard\"\n leftIcon={<YardSetupIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n )}\n <MenuItemLink\n to=\"/utilization\"\n primaryText=\"Yard Utilization\"\n leftIcon={<SpeedIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n <MenuItemLink\n to={`/files`}\n primaryText=\"Documents\"\n leftIcon={<DocumentRepoIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n {isAuthorized(AclType.USERS) && (\n <SubMenu\n name=\"Users\"\n // name={<>Users<NewBadge /></>}\n icon={<UserIcon />}\n sidebarIsOpen={open}\n >\n <MenuItemLink\n to=\"/users\"\n primaryText=\"Staff\"\n leftIcon={<StaffIcon />}\n onClick={onMenuClick}\n />\n <MenuItemLink\n to=\"/customers\"\n primaryText=\"Customers\"\n leftIcon={<CustomerIcon />}\n onClick={onMenuClick}\n />\n </SubMenu>\n )}\n <MenuItemLink\n to={`/tasks`}\n primaryText=\"Tasks\"\n leftIcon={<TaskListIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n {isStripeSubscriptinoLinkVisible() && (\n <MenuItemLink\n to={`#`}\n primaryText=\"Subscriptions\"\n leftIcon={<SubscriptionIcon />}\n onClick={handleSubscriptions}\n sidebarIsOpen={open}\n dense={dense}\n />\n )}\n {!isXSmall && (\n <MenuItemLink\n to={`/reports`}\n primaryText=\"Reports\"\n leftIcon={<ReportsIcon />}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n />\n )}\n {isXSmall && (\n <MenuItemLink\n to=\"/logout\"\n primaryText=\"Logout\"\n leftIcon={<LogoutIcon />}\n sidebarIsOpen={open}\n />\n )}\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport MoreVertIcon from \"@material-ui/icons/MoreVert\";\n\nimport {\n Layout,\n MenuItemLink,\n Notification,\n UserMenu,\n useNotify,\n} from \"react-admin\";\n\nimport DefaultError from \"../../components/DefaultError\";\nimport {\n AppInfoIcon,\n BugIcon,\n DesktopIcon,\n LogoutIcon,\n MobileIcon,\n ProfileIcon,\n ThemeToggleIcon,\n} from \"../../components/common\";\nimport { AppInfoDialog } from \"../../components/common/AppInfoDialog\";\n\nimport { CrewMenu } from \"../../crewApp/layout/CrewMenu\";\nimport { PortalType, UserType } from \"../../utils/constants\";\nimport { useThemeState } from \"../../ThemeStateProvider\";\nimport { isSubscriptionDisabled, isTWA, logError } from \"../../utils/appUtils\";\nimport { ManagerAppBar } from \"./ManagerAppBar\";\nimport { ManagerMenu } from \"./ManagerMenu\";\nimport { MenuItemClickable } from \"../../components/MenuItemClickable\";\n\nconst ManagerUserMenu = ({\n portalType,\n setPortalType,\n toggleAppInfoOpen,\n ...props\n}) => {\n const [selectedApp, setSelectedApp] = useState(portalType);\n const profilePath = `/users/${window.appUser?.id}`;\n const history = useHistory();\n const { toggleTheme } = useThemeState();\n\n const handleAppChange = () => {\n const value =\n selectedApp === PortalType.MANAGER ? PortalType.CREW : PortalType.MANAGER;\n try {\n localStorage.setItem(\"portalType\", value);\n window.appUser.portalType = value;\n setSelectedApp(value);\n setPortalType(value);\n history.push(\"/\");\n } catch (err) {\n logError(\"ManagerUserMenu:handleAppChange\", err, false);\n }\n };\n\n const handleBugReport = () => {\n window.open(\"https://transloads.co/submit-a-ticket/\", \"_blank\");\n };\n\n return (\n <UserMenu label=\"USER\" icon={<MoreVertIcon />}>\n {selectedApp === PortalType.CREW ? (\n <MenuItemClickable\n primaryText=\"Manager App\"\n leftIcon={<DesktopIcon />}\n clickHandler={handleAppChange}\n />\n ) : (\n <MenuItemClickable\n primaryText=\"Operator App\"\n leftIcon={<MobileIcon />}\n clickHandler={handleAppChange}\n />\n )}\n <MenuItemLink\n to={profilePath}\n primaryText=\"Profile\"\n leftIcon={<ProfileIcon />}\n />\n <MenuItemClickable\n primaryText=\"Theme\"\n leftIcon={<ThemeToggleIcon />}\n clickHandler={toggleTheme}\n />\n <MenuItemClickable\n primaryText=\"App Info\"\n leftIcon={<AppInfoIcon />}\n clickHandler={toggleAppInfoOpen}\n />\n <MenuItemClickable\n primaryText=\"Log a Ticket\"\n leftIcon={<BugIcon />}\n clickHandler={handleBugReport}\n />\n <MenuItemLink\n to=\"/logout\"\n primaryText=\"Logout\"\n leftIcon={<LogoutIcon />}\n />\n </UserMenu>\n );\n};\n\nconst getDefaultPortal = () => {\n const storedPortal = localStorage.getItem(\"portalType\");\n if (window.appUser.type === UserType.CREW) return PortalType.CREW;\n if (isTWA()) return PortalType.CREW;\n if (storedPortal) return storedPortal;\n return PortalType.MANAGER;\n};\n\nexport const ManagerLayout = (props) => {\n const [portalType, setPortalType] = useState(getDefaultPortal());\n const [appInfoOpen, setAppInfoOpen] = useState(false);\n const toggleAppInfoOpen = (_, reason) => {\n if (reason !== \"backdropClick\") setAppInfoOpen(!appInfoOpen);\n };\n const userMenu = (\n <ManagerUserMenu\n portalType={portalType}\n setPortalType={setPortalType}\n toggleAppInfoOpen={toggleAppInfoOpen}\n />\n );\n const notify = useNotify();\n if (isSubscriptionDisabled()) {\n notify(\n \"Subscription inactive. For help contact support@transloads.co\",\n \"error\"\n );\n }\n\n return (\n <>\n <Layout\n {...props}\n appBar={(props) => ManagerAppBar(props, userMenu)}\n menu={portalType === PortalType.CREW ? CrewMenu : ManagerMenu}\n notification={Notification}\n error={DefaultError}\n />\n <AppInfoDialog isOpen={appInfoOpen} onClose={toggleAppInfoOpen} />\n </>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { formatDistanceToNow } from \"date-fns\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { auditByStatusByDate } from \"../../graphql/queries\";\nimport { countInboundShipments } from \"../../graphql/inbound/custom-queries\";\nimport { countOutboundShipments } from \"../../graphql/outbound/custom-queries\";\n\nimport {\n Button,\n CardActions,\n Grid,\n Typography,\n CardContent,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { useNotify, Title } from \"react-admin\";\n\nimport { Tasks } from \"../../crewApp/pages/myTasks/MyTasks\";\n\nimport {\n AuditOutlinedIcon,\n InbounddOutlinedIcon,\n OutbounddOutlinedIcon,\n} from \"../../components/common\";\n\nimport {\n AuditStatus,\n InboundStatus,\n OutboundStatus,\n PortalType,\n} from \"../../utils/constants\";\n\nimport { logError } from \"../../utils/appUtils\";\nimport CrewCard from \"../../components/common/CrewCard\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n // marginTop: theme.spacing(1),\n // marginLeft: theme.spacing(1),\n // marginRight: theme.spacing(1),\n // marginBottom: theme.spacing(1),\n },\n card: {\n minHeight: 150,\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n flex: \"1\",\n \"& a\": {\n textDecoration: \"none\",\n color: \"inherit\",\n },\n },\n cardAvatar: {\n color: theme.palette.getContrastText(theme.palette.primary.main),\n backgroundColor: theme.palette.primary.main,\n width: theme.spacing(6),\n height: theme.spacing(6),\n },\n cardItemLeft: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n },\n cardItemRight: {\n display: \"flex\",\n marginTop: theme.spacing(0.5),\n marginLeft: theme.spacing(1),\n },\n cardActions: {\n marginTop: \"auto\",\n \"& a\": {\n textDecoration: \"none\",\n color: \"inherit\",\n },\n },\n}));\n\nexport const ManagerDashboard = (props) => {\n const classes = useStyles();\n const portalType = localStorage.getItem(\"portalType\") || PortalType.MANAGER;\n\n return (\n <div className={classes.root}>\n <Title title=\" \" />\n <Grid container>\n <Grid item xs={12} sm={6}>\n <InboundCard classes={classes} portalType={portalType} />\n </Grid>\n <Grid item xs={12} sm={6}>\n <OutboundCard classes={classes} portalType={portalType} />\n </Grid>\n {/* <Grid item xs={12} sm={4} >\n\t\t\t\t\t<AuditCard classes={classes} portalType={portalType} />\n\t\t\t\t</Grid> */}\n <Grid item xs={12}>\n <Tasks {...props} hideTitle={true} redirectTo=\"/\" />\n </Grid>\n </Grid>\n </div>\n );\n};\n\nconst InboundCard = ({ classes, portalType }) => {\n const [loaded, setLoaded] = useState();\n const [summary, setSummary] = useState({\n rolling: 0,\n notified: 0,\n placed: 0,\n });\n const notify = useNotify();\n\n useEffect(() => {\n !loaded && init();\n }, []);\n\n const init = async () => {\n setLoaded(true);\n try {\n const queryList = [];\n queryList[0] = API.graphql(\n graphqlOperation(countInboundShipments, {\n filter: {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: InboundStatus.IN_TRANSIT },\n },\n })\n );\n\n queryList[1] = API.graphql(\n graphqlOperation(countInboundShipments, {\n filter: {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: InboundStatus.ARRIVED },\n },\n })\n );\n\n queryList[2] = API.graphql(\n graphqlOperation(countInboundShipments, {\n filter: {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: InboundStatus.PLACED },\n },\n })\n );\n\n const promiseResults = await Promise.all(queryList);\n\n let rollingCount = promiseResults[0].data.searchInboundShipments.total;\n let notifiedCount = promiseResults[1].data.searchInboundShipments.total;\n let placedCount = promiseResults[2].data.searchInboundShipments.total;\n\n setSummary({\n rolling: rollingCount ? rollingCount : 0,\n notified: notifiedCount ? notifiedCount : 0,\n placed: placedCount ? placedCount : 0,\n });\n } catch (err) {\n logError(\"components:Dashboard:InboundCard:init\", err, notify);\n }\n };\n\n return (\n <CrewCard\n showDivider={false}\n title=\"Inbound\"\n icon={<InbounddOutlinedIcon fontSize=\"large\" />}\n addMargin={true}\n >\n <CardContent>\n <div className={classes.card}>\n <Grid container spacing={1}>\n <Grid item xs={2}>\n <Typography className={classes.cardItemLeft} variant=\"h4\">\n {summary.rolling}\n </Typography>\n </Grid>\n <Grid item xs={10}>\n <Typography\n className={classes.cardItemRight}\n variant=\"h6\"\n color=\"textSecondary\"\n >\n In Transit\n </Typography>\n </Grid>\n <Grid item xs={2}>\n <Typography className={classes.cardItemLeft} variant=\"h4\">\n {summary.notified}\n </Typography>\n </Grid>\n <Grid item xs={10}>\n <Typography\n className={classes.cardItemRight}\n variant=\"h6\"\n color=\"textSecondary\"\n >\n Notified\n </Typography>\n </Grid>\n <Grid item xs={2}>\n <Typography className={classes.cardItemLeft} variant=\"h4\">\n {summary.placed}\n </Typography>\n </Grid>\n <Grid item xs={10}>\n <Typography\n className={classes.cardItemRight}\n variant=\"h6\"\n color=\"textSecondary\"\n >\n Placed\n </Typography>\n </Grid>\n </Grid>\n </div>\n </CardContent>\n <CardActions className={classes.cardActions}>\n <Link\n to={\n portalType === PortalType.CREW\n ? \"/processShipments\"\n : \"/inboundShipments\"\n }\n >\n <Button size=\"large\">View</Button>\n </Link>\n </CardActions>\n </CrewCard>\n );\n};\n\nconst OutboundCard = ({ classes, portalType }) => {\n const [loaded, setLoaded] = useState();\n const [summary, setSummary] = useState({ pending: 0, arrived: 0, loaded: 0 });\n const notify = useNotify();\n\n useEffect(() => {\n !loaded && init();\n }, []);\n\n const init = async () => {\n if (!loaded) {\n setLoaded(true);\n try {\n const queryList = [];\n queryList[0] = API.graphql(\n graphqlOperation(countOutboundShipments, {\n filter: {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: OutboundStatus.PENDING },\n },\n })\n );\n\n queryList[1] = API.graphql(\n graphqlOperation(countOutboundShipments, {\n filter: {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: OutboundStatus.ARRIVED },\n },\n })\n );\n\n queryList[2] = API.graphql(\n graphqlOperation(countOutboundShipments, {\n filter: {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: OutboundStatus.LOADED },\n },\n })\n );\n\n const promiseResults = await Promise.all(queryList);\n\n let pendingCount = promiseResults[0].data.searchOutboundShipments.total;\n let arrivedCount = promiseResults[1].data.searchOutboundShipments.total;\n let loadedCount = promiseResults[2].data.searchOutboundShipments.total;\n\n setSummary({\n pending: pendingCount ? pendingCount : 0,\n arrived: arrivedCount ? arrivedCount : 0,\n loaded: loadedCount ? loadedCount : 0,\n });\n } catch (err) {\n logError(\"components:Dashboard:OutboundCard:init\", err, notify);\n }\n }\n };\n\n return (\n <CrewCard\n showDivider={false}\n title=\"Outbound\"\n icon={<OutbounddOutlinedIcon fontSize=\"large\" />}\n addMargin={true}\n >\n <CardContent>\n <div className={classes.card}>\n <Grid container spacing={1}>\n <Grid item xs={2}>\n <Typography className={classes.cardItemLeft} variant=\"h4\">\n {summary.pending}\n </Typography>\n </Grid>\n <Grid item xs={10}>\n <Typography\n className={classes.cardItemRight}\n variant=\"h6\"\n color=\"textSecondary\"\n >\n Pending\n </Typography>\n </Grid>\n <Grid item xs={2}>\n <Typography className={classes.cardItemLeft} variant=\"h4\">\n {summary.arrived}\n </Typography>\n </Grid>\n <Grid item xs={10}>\n <Typography\n className={classes.cardItemRight}\n variant=\"h6\"\n color=\"textSecondary\"\n >\n Arrived\n </Typography>\n </Grid>\n <Grid item xs={2}>\n <Typography className={classes.cardItemLeft} variant=\"h4\">\n {summary.loaded}\n </Typography>\n </Grid>\n <Grid item xs={10}>\n <Typography\n className={classes.cardItemRight}\n variant=\"h6\"\n color=\"textSecondary\"\n >\n Loaded\n </Typography>\n </Grid>\n </Grid>\n </div>\n </CardContent>\n <CardActions className={classes.cardActions}>\n <Link\n to={\n portalType === PortalType.CREW\n ? \"/processOutboundShipments\"\n : \"/outboundShipments\"\n }\n >\n <Button size=\"large\">View</Button>\n </Link>\n </CardActions>\n </CrewCard>\n );\n};\n\nconst AuditCard = ({ classes, portalType }) => {\n const [, setMessage] = useState();\n const [loaded, setLoaded] = useState();\n const [summary, setSummary] = useState({ total: 0, noMatchCount: 0 });\n const [audit, setAudit] = useState();\n const notify = useNotify();\n\n useEffect(() => {\n !loaded && init();\n }, []);\n\n const init = async () => {\n setLoaded(true);\n try {\n const reloadYardId = window.appUser?.reloadYardId;\n const response = await API.graphql(\n graphqlOperation(auditByStatusByDate, {\n reloadYardId,\n statusCreateDateTime: {\n beginsWith: { status: AuditStatus.COMPLETED },\n },\n limit: 1,\n sortDirection: \"DESC\",\n })\n );\n let audits = response.data.auditByStatusByDate.items;\n\n if (audits.length > 0) {\n const lastAudit = audits[0];\n setAudit(lastAudit);\n lastAudit.processedItems = !lastAudit.processedItems\n ? []\n : JSON.parse(lastAudit.processedItems);\n setMessage(\n `Last audit Date ${formatDistanceToNow(\n new Date(lastAudit.createdAt)\n )} ago`\n );\n let matchCount = 0;\n let noMatchCount = 0;\n let itemsNotFound = 0;\n let total = lastAudit.processedItems.length;\n lastAudit.processedItems.forEach((itm) => {\n if (itm.quantityPhysical === 0) itemsNotFound++;\n else if (itm.quantityPhysical !== itm.quantityOnHand) noMatchCount++;\n else if (itm.quantityPhysical === itm.quantityOnHand) matchCount++;\n });\n setSummary({\n matchCount,\n noMatchCount,\n itemsNotFound,\n total,\n });\n }\n } catch (err) {\n logError(\"components:Dashboard:AuditCard:init\", err, notify);\n }\n };\n\n return (\n <CrewCard\n showDivider={false}\n title=\"Audit\"\n icon={<AuditOutlinedIcon fontSize=\"large\" />}\n addMargin={false}\n >\n <CardContent>\n <div className={classes.card}>\n {summary.matchCount ? (\n <Grid container spacing={1}>\n <Grid item xs={2}>\n <Typography className={classes.cardItemLeft} variant=\"h4\">\n {summary.total}\n </Typography>\n </Grid>\n <Grid item xs={10}>\n <Typography\n className={classes.cardItemRight}\n variant=\"h6\"\n color=\"textSecondary\"\n >\n Total\n </Typography>\n </Grid>\n <Grid item xs={2}>\n <Typography className={classes.cardItemLeft} variant=\"h4\">\n {summary.noMatchCount}\n </Typography>\n </Grid>\n <Grid item xs={10}>\n <Typography\n className={classes.cardItemRight}\n variant=\"h6\"\n color=\"textSecondary\"\n >\n Discrepancies\n </Typography>\n </Grid>\n </Grid>\n ) : (\n <Typography>No Audit found</Typography>\n )}\n </div>\n </CardContent>\n <CardActions className={classes.cardActions}>\n {audit ? (\n <Link\n to={portalType === PortalType.CREW ? \"/processAudit\" : \"/audits\"}\n >\n <Button size=\"large\">View</Button>\n </Link>\n ) : (\n <Button size=\"large\" disabled>\n View\n </Button>\n )}\n </CardActions>\n </CrewCard>\n );\n};\n","import React from \"react\";\n\nimport { Tooltip } from \"@material-ui/core\";\nimport NewIcon from \"@material-ui/icons/RadioButtonUnchecked\";\nimport AvailableIcon from \"@material-ui/icons/CheckCircleOutline\";\nimport UnavailableIcon from \"@material-ui/icons/HighlightOff\";\n// import TemporarilyUnavailableIcon from '@material-ui/icons/ErrorOutline';\nimport { green, red } from \"@material-ui/core/colors\";\n\nimport { ServiceStatus } from \"../../../utils/constants\";\n\nexport const ServiceStatusIcon = (props) => {\n const { classes } = props;\n\n if (!props.record?.status) return null;\n const icon = () => {\n switch (props.record.status) {\n case ServiceStatus.AVAILABLE:\n return (\n <Tooltip title=\"Available\" placement=\"left\" arrow>\n <AvailableIcon className={classes} style={{ color: green[700] }} />\n </Tooltip>\n );\n case ServiceStatus.UN_AVAILABLE:\n return (\n <Tooltip title=\"Unavailable\" placement=\"left\" arrow>\n <UnavailableIcon className={classes} style={{ color: red[700] }} />\n </Tooltip>\n );\n default:\n return <NewIcon className={classes} />;\n }\n };\n\n return icon();\n};\n","import React, { useState, useEffect, useMemo } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getAccount } from \"../../../graphql/account/custom-queries\";\n\nimport {\n useNotify,\n ArrayField,\n Datagrid,\n NumberField,\n TextField,\n} from \"react-admin\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { UnitOptions } from \"../../../utils/constants\";\nimport { ServiceStatusIcon } from \"./ServiceStatusIcon\";\n\nexport const ServicesPeak = (props) => {\n const notify = useNotify();\n const [filteredRec, setFilteredRec] = useState(null);\n const { record } = props;\n\n useEffect(() => {\n if (record && record.id) {\n getAccountData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [record]);\n\n const getAccountData = async () => {\n try {\n const resp = await API.graphql(\n graphqlOperation(getAccount, { id: record.id })\n );\n const newAccount = resp.data.getAccount;\n\n if (newAccount) {\n const activeServices = newAccount.services.items?.filter(\n (itm) => itm.active === \"true\"\n );\n setFilteredRec({ services: { items: activeServices } });\n }\n } catch (error) {\n logError(\"services:ServicesPeak:getAccountData\", error, notify);\n }\n };\n\n // Compute units with rates\n const unitsWithRates = useMemo(() => {\n if (!filteredRec || !filteredRec.services || !filteredRec.services.items)\n return [];\n const units = {};\n filteredRec.services.items.forEach((service) => {\n UnitOptions.forEach((unit) => {\n const rate = service[unit.column];\n if (rate != null && rate !== 0) {\n units[unit.id] = unit;\n }\n });\n });\n return Object.values(units);\n }, [filteredRec]);\n\n if (!filteredRec) return null;\n\n return (\n <ArrayField\n source=\"services.items\"\n record={filteredRec}\n resource={props.resource}\n >\n <Datagrid>\n <ServiceStatusIcon source=\"status\" label=\"\" sortable={false} />\n <TextField source=\"name\" label=\"Service\" sortable={false} />\n {unitsWithRates.map((unit) => (\n <NumberField\n key={unit.id}\n source={unit.column}\n label={unit.id}\n options={{\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }}\n sortable={false}\n />\n ))}\n </Datagrid>\n </ArrayField>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport jsonExport from \"jsonexport/dist\";\n\nimport { Card, Divider, useMediaQuery, Tab, Tabs } from \"@material-ui/core\";\n\nimport {\n downloadCSV,\n useListContext,\n CreateButton,\n Datagrid,\n EditButton,\n FilterButton,\n ListContextProvider,\n ListToolbar,\n RefreshButton,\n SimpleList,\n TextField,\n Title,\n TopToolbar,\n FunctionField,\n} from \"react-admin\";\n\nimport { accountNameRenderer } from \"../../../components/common/AccountNameRenderer\";\nimport {\n ChevronRightIcon,\n CorporateAccountIcon,\n} from \"../../../components/common\";\nimport { Empty } from \"../../../components/common/Empty\";\nimport ExportButton from \"../../../components/common/ExportButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { QuickFilter } from \"../../../components/common/QuickFilter\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { isSubscriptionDisabled } from \"../../../utils/appUtils\";\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\nimport { ServicesPeak } from \"../services/ServicesPeak\";\nimport {\n AccountTabStatus,\n MAX_INVENTORY_QUERY_LIMIT,\n AccountStatus,\n} from \"../../../utils/constants\";\n\nconst exporter = (accounts) => {\n debugger;\n const accountsForExport = accounts.map((account) => {\n const accountForExport = { ...account };\n if (account.contacts?.length > 0) {\n accountForExport.billingContacts = account.contacts.map((itm) => {\n return {\n fullName: itm.name,\n email: itm.email,\n phone: itm.phone,\n };\n });\n delete accountForExport.contacts;\n }\n\n if (account.services?.items) {\n accountForExport.services = account.services.items.map((itm) => {\n const service = { ...itm };\n delete service.active;\n return service;\n });\n delete accountForExport.services.items;\n }\n\n delete accountForExport.active;\n delete accountForExport.addressState;\n delete accountForExport.bolTemplate;\n delete accountForExport.createdAt;\n delete accountForExport.groups;\n delete accountForExport.history;\n delete accountForExport.inboundCustomFields;\n delete accountForExport.inventoryCustomFields;\n delete accountForExport.outboundCustomFields;\n delete accountForExport.owner;\n delete accountForExport.products;\n delete accountForExport.reloadYardId;\n delete accountForExport.status;\n delete accountForExport.type;\n delete accountForExport.updatedAt;\n debugger;\n\n return accountForExport;\n });\n\n jsonExport(accountsForExport, { rename: [\"accountId\"] }, (err, csv) => {\n downloadCSV(csv, `accounts_${new Date().toLocaleDateString()}`); // download as 'accounts.csv` file\n });\n};\n\nconst AccountSearchField = (props) => {\n const listContext = useListContext(props);\n const { displayedFilters, filterValues, setFilters } = listContext;\n const { label, alwaysOn } = props;\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n setFilters(\n {\n ...filterValues,\n or: [\n { businessName: { matchPhrasePrefix: `${value}` } },\n { lotNumberPrefix: { wildcard: `*${value}*` } },\n { addressState: { wildcard: `*${value}*` } },\n ],\n },\n displayedFilters\n );\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = (tabValue) => [\n <AccountSearchField label=\"Search\" tabValue={tabValue} alwaysOn />,\n <QuickFilter\n source=\"send1099\"\n label=\"Send 1099\"\n defaultValue={{ eq: true }}\n />,\n];\n\nconst ListActions = (props) => {\n const { isXSmall } = props;\n const { resource, total } = useListContext();\n\n return !isXSmall ? (\n <TopToolbar>\n <FilterButton />\n <CreateButton disabled={isSubscriptionDisabled()} />\n <ExportButton\n disabled={total === 0}\n resource={resource}\n exporter={exporter}\n maxResults={MAX_INVENTORY_QUERY_LIMIT}\n />\n <RefreshButton />\n </TopToolbar>\n ) : null;\n};\n\nconst getSessionTab = () => {\n const sessionTab = Number(sessionStorage.getItem(`AccountTab`));\n if (sessionTab && AccountTabStatus[sessionTab]) {\n return sessionTab;\n }\n return 0;\n};\n\nexport const AccountList = (props) => {\n const [tabValue, setStateTabValue] = useState(getSessionTab());\n const [defaultFilter, setDefaultFilter] = useState({\n reloadYardId: window.appUser.reloadYardId,\n activeBusinessName: {\n beginsWith: {\n active:\n AccountTabStatus[tabValue].id === AccountStatus.ACTIVE\n ? \"true\"\n : \"false\",\n },\n },\n });\n const mdDown = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const [defaultSearchFilter, setDefaultSearchFilter] = useState({\n reloadYardId: { eq: window.appUser.reloadYardId },\n active: {\n eq:\n AccountTabStatus[tabValue].id === AccountStatus.ACTIVE\n ? \"true\"\n : \"false\",\n },\n });\n\n const setTabValue = (value) => {\n debugger;\n setStateTabValue(value);\n setDefaultFilter({\n reloadYardId: window.appUser.reloadYardId,\n activeBusinessName: {\n beginsWith: {\n active:\n AccountTabStatus[value].id === AccountStatus.ACTIVE\n ? \"true\"\n : \"false\",\n },\n },\n });\n setDefaultSearchFilter({\n reloadYardId: { eq: window.appUser.reloadYardId },\n active: {\n eq:\n AccountTabStatus[value].id === AccountStatus.ACTIVE\n ? \"true\"\n : \"false\",\n },\n });\n };\n\n const defaultSort = {\n field: `{\"key\":\"accountByActiveByName\", \"search\":\"businessName\"}`,\n order: \"ASC\",\n };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = localStorage.getItem(`${props.resource}_perPage`);\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? Number(sessionPerPage) : 10\n );\n\n const listContext = useSearchableList({\n ...props,\n basePath: \"/accounts\",\n defaultTitle: \"Accounts\",\n defaultFilter: defaultFilter,\n defaultSearchFilter: defaultSearchFilter,\n defaultPerPage: defaultPerPage,\n defaultSort: defaultSort,\n resource: \"accounts\",\n });\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n useEffect(() => {\n if (listContext?.filter) {\n // Extract the key query from defaultSort\n const fieldObj = JSON.parse(defaultSort.field);\n const keyToCheck = fieldObj.key;\n\n // Check for the key's presence in filter\n const hasKey = keyToCheck in listContext.filter;\n const hasFilterValues = Object.keys(listContext.filterValues).length > 0;\n if (hasKey && hasFilterValues) listContext.setFilters({});\n }\n }, [listContext?.filter]);\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Accounts\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters(tabValue)}\n actions={<ListActions isXSmall={isXSmall} />}\n />\n <Card>\n <AccountsTab\n {...props}\n {...listContext}\n tabValue={tabValue}\n setTabValue={setTabValue}\n isXSmall={isXSmall}\n />\n <Pagination {...listContext} />\n </Card>\n </ListContextProvider>\n );\n};\n\nconst AccountsTab = ({ tabValue, setTabValue, setPage, ...props }) => {\n const { isXSmall } = props;\n\n const handleChange = (event, value) => {\n sessionStorage.setItem(\"AccountsTab\", value);\n setPage(1);\n setTabValue(value);\n };\n\n return (\n <>\n <Tabs\n value={tabValue}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n onChange={handleChange}\n >\n {AccountTabStatus.map(\n (itm, idx) =>\n (!isXSmall || itm.showSmall) && (\n <Tab key={itm.id} label={itm.name} id={`account-${idx}`} />\n )\n )}\n </Tabs>\n <Divider />\n {AccountTabStatus.map(\n (itm) =>\n itm.id === AccountTabStatus[tabValue].id && (\n <AccountGrid {...props} key={itm.id} tabValue={itm.id} />\n )\n )}\n </>\n );\n};\n\nconst getSecondaryText = (record) => {\n if (record.address?.city && record.address?.state)\n return `${record.address.city}, ${record.address.state}`;\n else return record.phone;\n};\n\nconst AccountGrid = ({ isXSmall, mdDown, tabValue, ...props }) => {\n const { ids, page, data } = useListContext();\n\n if (tabValue === AccountStatus.ACTIVE && ids.length === 0 && page === 1)\n return <Empty {...props} message=\"Create a new account\" />;\n\n if (tabValue === AccountStatus.ARCHIVE && ids.length === 0)\n return (\n <div\n style={{\n textAlign: \"center\",\n padding: \"10px\",\n color: \"gray\",\n }}\n >\n No archived accounts available\n </div>\n );\n\n return isXSmall ? (\n <SimpleList\n primaryText={(record) => record.businessName}\n secondaryText={(record) => getSecondaryText(record)}\n tertiaryText={(record) => `${record.lotNumberPrefix}`}\n leftIcon={(record) =>\n record?.corporateAccount ? <CorporateAccountIcon /> : null\n }\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n linkType=\"edit\"\n ids={ids}\n />\n ) : mdDown ? (\n <Datagrid rowClick=\"edit\" expand={<ServicesPeak />} ids={ids}>\n <FunctionField\n source=\"displayName\"\n label=\"Customer\"\n sortable={true}\n sortBy={`{\"key\":\"accountByActiveByName\", \"search\":\"businessName\"}`}\n render={accountNameRenderer}\n />\n <TextField\n source=\"lotNumberPrefix\"\n label=\"Lot No. Prefix\"\n sortable={true}\n orderBy=\"accountByLotPrefix\"\n />\n <TextField source=\"addressState\" label=\"State\" sortable={true} />\n </Datagrid>\n ) : (\n <Datagrid rowClick=\"edit\" expand={<ServicesPeak />} ids={ids}>\n <FunctionField\n source=\"displayName\"\n label=\"Customer\"\n sortable={true}\n sortBy={`{\"key\":\"accountByActiveByName\", \"search\":\"businessName\"}`}\n render={accountNameRenderer}\n />\n <TextField\n source=\"lotNumberPrefix\"\n label=\"Lot No. Prefix\"\n sortable={true}\n sortBy={`{\"key\":\"accountByLotPrefix\", \"search\":\"lotNumberPrefix\"}`}\n />\n\n <TextField\n source=\"email\"\n label=\"Email\"\n sortable={true}\n sortBy={`{\"key\":\"accountByEmail\", \"search\":\"email\"}`}\n />\n <TextField source=\"phone\" label=\"Phone\" sortable={false} />\n <TextField source=\"addressState\" label=\"State\" sortable={true} />\n <EditButton />\n </Datagrid>\n );\n};\n","import React from \"react\";\n\nimport { Typography } from \"@material-ui/core\";\n\nimport {\n AddIcon,\n AttachFileIcon,\n CopyIcon,\n EditIcon,\n ExportIcon,\n LowInventoryAlertIcon,\n OKIcon,\n RemoveIcon,\n UploadIcon,\n} from \"../../../components/common\";\n\nexport const ContactInfoHelp = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Contact Info</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n An Account is required to exist before you can create a new Inbound /\n Outbound Shipment, or add Inventory.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Account Name & Address: </strong>\n Required Fields.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Email: </strong>\n Primary contact Email must be unique to this Account.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const HistoryHelp = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>History Log</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n The History Tab provides an automated, chronological Audit Trail of key\n events and record changes.\n </Typography>\n </>\n);\n\nexport const CustomSettings = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Custom Settings:</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n This section allow you to customize platform behavior to meet unique,\n Account-specific requirements.\n </Typography>\n <ul>\n <li>\n <Typography variant=\"overline\">\n <strong>Inbound / Outbound Fields: </strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Field Name: </strong>\n Custom Fileld Name to be added to Inbound / Outbound Shipment\n form.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Display On: </strong>\n Select whether to display on the mobile Operator App, or Manager\n portal only.\n </Typography>\n </li>\n </ul>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Inventory Fields: </strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Field Name: </strong>\n Custom Fileld Name to be added to Tally Sheet form of an Inbound\n Shipment. This fild name will carry over to Stored Inventory, and\n Outbound Pick List items. Custom inventory Fields can be defined\n here and also added directly into Product Catalog. In order for\n the filed to be visible / selectable in Inventory, Product Catalog\n Search, and Inventory Search Lists, it must be defined here.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Display On: </strong>\n Select whether to display on the mobile Operator App / Manager\n portal only, and Tally Sheet by default. When editing the Tally\n Sheet, you can override the show/hide settings, by selecting\n custom fields to display.\n </Typography>\n </li>\n </ul>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Document Templates: </strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Bill Of Lading Template: </strong>\n Upload a custom BOL template to override default document\n generation template. Follow instructions to download, customize,\n and upload the template file.\n </Typography>\n </li>\n </ul>\n </li>\n </ul>\n </>\n);\n\nexport const BillingSetupHelp = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Billing Setup</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Lot No. Prefix: </strong>\n Lot Number Prefix must be unique to this account. Used for generating\n Lot Numbers.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Account Type: </strong>\n Account business categorization.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>External Acct. Number: </strong>\n External reference account number from CRM or other system.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Inventory Storage Alert (Days): </strong>\n Days of free storage before Storage charges will be applied. Once\n inventory exceeds this Day limit in storage, the inventory item will\n be marked as Stale Inventory.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Billing Units: </strong>\n Default billing units of measure for this Account. Can be overridden\n in Product Catalog, or an individual Inbound/Outbound/Invoice record.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Payment Terms: </strong>\n Used for defaulting payment terms in Invoicing.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Billing Address: </strong>\n </Typography>\n <Typography>\n {\" \"}\n Fill out if different from contact address, otherwise use{\" \"}\n <strong>Copy Account Contact Info</strong> to auto-populate. This\n address will be used for Invoicing.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Billing Contacts: </strong>\n </Typography>\n <Typography>\n Specific contacts for billing purposes. Invoices will be address Attn.\n of such billing contact.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const ProductHelpEdit = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Product Catalog:</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Create or Edit a Product Catalog directory by uploading a .CSV file\n populated with product info obtained from your customers.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Inventory Level Icon: </strong>\n Each product row is marked with an Icon indicating either{\" \"}\n <LowInventoryAlertIcon className={classes.icon} /> Low Inventory\n Level, or <OKIcon className={classes.icon} /> healthy Inventory Levels\n </Typography>\n </li>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> CREATE PRODUCT: </strong>\n Manually add a single, new Product to the Catalog.\n </Typography>\n </li>\n <li>\n <Typography>\n <UploadIcon className={classes.icon} />\n <strong> UPLOAD CATALOG: </strong>\n Opens an Upload Catalog dialog allowing you to upload a .CSV file\n populated with product info obtained from your customers. Follow\n instructions in the dialog window to complete the upload.\n </Typography>\n </li>\n <li>\n <Typography>\n <ExportIcon className={classes.icon} />\n <strong> EXPORT: </strong>\n Export existing Products into a .CSV file. Exported file can be edited\n and re-uploaded to bulk update all products.\n </Typography>\n </li>\n <li>\n <Typography>\n <CopyIcon className={classes.icon} />\n <strong> CLONE: </strong>\n Copy a single existing Product to create a new, similar product. Edit\n pre-populated inputs as needed and save.\n </Typography>\n </li>\n <li>\n <Typography>\n <EditIcon className={classes.icon} />\n <strong> EDIT: </strong>\n Update an existing Product.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const ProductHelpCreate = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Product Catalog:</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Create a Product Catalog directory by uploading a .CSV file populated with\n product info obtained from your customers.\n </Typography>\n <ul>\n <li>\n <Typography>\n Download Product_Catalog_Template.xlsx spreadsheet, and fill it out\n following the instructions on the Download Page.\n </Typography>\n </li>\n <li>\n <Typography>\n Drop the filled-out .CSV file onto the upload zone or click the{\" \"}\n <AttachFileIcon className={classes.icon} /> icon to select the file.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const ServiceRatesHelp = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Service Rates:</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Capture negotiated service / product / consumables rates. Rates will be\n used as defaults for Invoicing. Accessorial Charges represent a \"catch\n all\" miscellaneous charges.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Service Name: </strong>\n Short name of service / goods / consumables.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Description: </strong>\n Brief specification of services / goods.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Tax Rate: </strong>\n Select an applicable tax rate to be applied to each service / goods.\n Tax Rates are configured in My Yard setup.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Service Rates: </strong>\n Enter applicable service rates per units utilized for billing of a\n given commodity.\n </Typography>\n </li>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>\n Add a new, custom Service definition.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Service Item - this info will be permanently lost. No\n other reccords will be affected. Accessorial Charges, Inside Handling,\n and Outside Handling cannot be removed as they are integral to proper\n functioning of the platform.\n </Typography>\n </li>\n </ul>\n </>\n);\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n ContactInfoHelp,\n BillingSetupHelp,\n CustomSettings,\n ServiceRatesHelp,\n ProductHelpCreate,\n ProductHelpEdit,\n HistoryHelp,\n} from \"./AccountHelpComponents\";\n\nconst useStyles = makeStyles(() => ({\n icon: {\n verticalAlign: \"middle\",\n display: \"inline-flex\",\n },\n}));\n\nexport const AccountCreateHelp = (props) => {\n const classes = useStyles();\n const tabNames = props?.location.pathname.split(\"/\");\n const tab = tabNames?.length > 3 ? tabNames[3] : \"\";\n\n switch (tab) {\n case \"\":\n return <ContactInfoHelp classes={classes} />;\n case \"billingSetup\":\n return <BillingSetupHelp classes={classes} />;\n case \"customSettings\":\n return <CustomSettings classes={classes} />;\n case \"serviceRates\":\n return <ServiceRatesHelp classes={classes} />;\n case \"productCatalog\":\n return <ProductHelpCreate classes={classes} />;\n default:\n return null;\n }\n};\n\nexport const AccountEditHelp = (props) => {\n const classes = useStyles();\n const tabNames = props?.location.pathname.split(\"/\");\n const tab = tabNames?.length > 3 ? tabNames[3] : \"\";\n\n switch (tab) {\n case \"\":\n return <ContactInfoHelp classes={classes} />;\n case \"billingSetup\":\n return <BillingSetupHelp classes={classes} />;\n case \"customSettings\":\n return <CustomSettings classes={classes} />;\n case \"serviceRates\":\n return <ServiceRatesHelp classes={classes} />;\n case \"productCatalog\":\n return <ProductHelpEdit classes={classes} />;\n case \"history\":\n return <HistoryHelp classes={classes} />;\n default:\n return null;\n }\n};\n","import React, { useState } from \"react\";\n\nimport { countBy, isEmpty, size } from \"lodash\";\n\nimport { Grid, Link, Typography } from \"@material-ui/core\";\n\nimport {\n useNotify,\n ArrayField,\n Datagrid,\n FileInput,\n TextField,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { AttachFileIcon } from \"../../../components/common\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n CatalogHeaderMap,\n MAX_FILE_SIZE,\n MAX_FILE_SIZE_MSG,\n MAX_ROWS_UPLOAD,\n Unit,\n UnitConversionColumns,\n UnitToColumn,\n} from \"../../../utils/constants\";\n\nconst validateCSV = (csvArray, errors) => {\n const units = Object.keys(Unit);\n let missingCode = false;\n let missingUnits = false;\n const invalidUnits = new Set();\n let missingCmmodity = false;\n const invalidCmmodity = new Set();\n let missingUnitValue = false;\n let invalidConverts = false;\n let invalidLowAlert = false;\n let negativeLowAlert = false;\n const commodities = window.appUser.reloadYard.yardCommodities.items;\n\n const dupCodes = Object.entries(countBy(csvArray, \"productCode\")).reduce(\n (acc, [key, val]) => {\n return key !== \"\" && val > 1 ? acc.concat(key) : acc;\n },\n []\n );\n if (dupCodes?.length > 0)\n errors.push(\n `Duplicate \"Product Code\" entries: ${dupCodes.map((dup) => ` ${dup}`)}`\n );\n\n debugger;\n csvArray.forEach((row) => {\n // check for duplicates & missing codes\n row.error = row.error || dupCodes.some((dup) => dup === row[\"productCode\"]);\n if (row[\"productCode\"] === \"\") {\n missingCode = true;\n row.error = true;\n }\n\n // check for correct units\n let invalid = !units.includes(row[\"defaultUnits\"]);\n if (invalid) {\n row.error = true;\n if (row[\"defaultUnits\"].trim() === \"\") missingUnits = true;\n else invalidUnits.add(row[\"defaultUnits\"]);\n }\n\n invalid = !units.includes(row[\"inboundBillingUnits\"]);\n if (row[\"inboundBillingUnits\"] && invalid) {\n row.error = true;\n invalidUnits.add(row[\"inboundBillingUnits\"]);\n }\n\n invalid = !units.includes(row[\"outboundBillingUnits\"]);\n if (row[\"outboundBillingUnits\"] && invalid) {\n row.error = true;\n invalidUnits.add(row[\"outboundBillingUnits\"]);\n }\n\n // check for correct commmodities\n const ryCommodity = commodities.find(\n (comm) => comm.commodity.name === row[\"reloadYardCommodityId\"]\n );\n if (!ryCommodity) {\n row.error = true;\n if (row[\"reloadYardCommodityId\"].trim() === \"\") missingCmmodity = true;\n else invalidCmmodity.add(row[\"reloadYardCommodityId\"]);\n } else {\n row[\"reloadYardCommodityId\"] = ryCommodity.id;\n row[\"commodityCateory\"] = ryCommodity.commodity.name;\n }\n\n // check all units for numeric => 0\n const rowUnits = UnitConversionColumns.map((col) => row[col]);\n invalidConverts = rowUnits.some((val) => {\n const unitVal = Number(val); // null = 0, undefined = NaN\n return isNaN(unitVal) || unitVal < 0; // null = false, undefined = true\n });\n if (invalidConverts) row.error = true;\n\n // check if default & billing units are calculated from default units if != default units\n if (!invalidUnits) {\n let uom = row[\"defaultUnits\"];\n if (uom !== Unit.CAR && uom !== Unit.TL && !row[UnitToColumn[uom]]) {\n missingUnitValue = true;\n row.error = true;\n }\n // if billing units are defined, validate if units are filled\n uom = row[\"inboundBillingUnits\"];\n if (\n uom &&\n uom !== Unit.CAR &&\n uom !== Unit.TL &&\n !row[UnitToColumn[uom]]\n ) {\n missingUnitValue = true;\n row.error = true;\n }\n uom = row[\"outboundBillingUnits\"];\n if (\n uom &&\n uom !== Unit.CAR &&\n uom !== Unit.TL &&\n !row[UnitToColumn[uom]]\n ) {\n missingUnitValue = true;\n row.error = true;\n }\n }\n\n // low inventory alert number >= 0\n const low = Number(row[\"lowInventoryThreshold\"]); // Number(null) = 0\n if (isNaN(low)) {\n row.error = true;\n invalidLowAlert = true;\n } else if (low < 0) negativeLowAlert = true;\n });\n\n if (missingCode) errors.push(`Missing \"Product Code\" entries.`);\n\n if (missingUnits) errors.push(`Missing \"Default/Billing Units\" entries.`);\n if (invalidUnits.size > 0)\n errors.push(\n `Invalid \"Default/Billing Units\" entries: ${[...invalidUnits].map(\n (dup) => ` ${dup}`\n )}`\n );\n\n if (missingCmmodity) errors.push(`Missing \"Load Type\" entries.`);\n if (invalidCmmodity.size > 0)\n errors.push(\n `Invalid \"Load Type\" entries: ${[...invalidCmmodity].map(\n (dup) => ` ${dup}`\n )}`\n );\n\n if (missingUnitValue)\n errors.push(`Default/Billing Unit columns must be greater than 0.`);\n\n if (invalidConverts)\n errors.push(\n `Conversion unit values must be numeric, greater than 0, or blank.`\n );\n\n if (invalidLowAlert)\n errors.push(`Invalid \"Low Inventory Threshold\" entries.`);\n if (negativeLowAlert)\n errors.push(`\"Low Inventory Threshold\" must be 0 or greater.`);\n\n debugger;\n return errors;\n};\n\nfunction csv2arr(str) {\n // https://stackoverflow.com/questions/8493195/how-can-i-parse-a-csv-string-with-javascript-which-contains-comma-in-data\n let line = [\"\"];\n const ret = [line];\n let quote = false;\n\n for (let i = 0; i < str.length; i++) {\n const cur = str[i];\n const next = str[i + 1];\n\n if (!quote) {\n const cellIsEmpty = line[line.length - 1].length === 0;\n if (cur === '\"' && cellIsEmpty) quote = true;\n else if (cur === \",\") line.push(\"\");\n else if (cur === \"\\r\" && next === \"\\n\") {\n line = [\"\"];\n ret.push(line);\n i++;\n } else if (cur === \"\\n\" || cur === \"\\r\") {\n line = [\"\"];\n ret.push(line);\n } else line[line.length - 1] += cur;\n } else {\n if (cur === '\"' && next === '\"') {\n line[line.length - 1] += cur;\n i++;\n } else if (cur === '\"') quote = false;\n else line[line.length - 1] += cur;\n }\n }\n return ret;\n}\n\nconst processCSV = async (\n str,\n delim = \",\",\n setCustomHeaders,\n setCSVData,\n setCSVErrors,\n notify\n) => {\n let errors = [];\n let lengthError = false;\n debugger;\n\n try {\n let headers = str\n .slice(0, str.indexOf(\"\\n\"))\n .replace(\"\\r\", \"\")\n .split(delim);\n headers = headers.filter((head) => head !== \"\");\n const hlen = headers.length;\n\n let columnCount = 0;\n let headerColumns = [];\n let customHeaders = [];\n headers.forEach((h) => {\n const col = CatalogHeaderMap[h.trim()]; // Trim header names\n debugger;\n if (col) {\n headerColumns.push(col);\n columnCount++;\n } else {\n const newHeader = h;\n customHeaders.push(newHeader);\n headerColumns.push(newHeader);\n }\n });\n const invalidHeaders = columnCount !== size(CatalogHeaderMap);\n if (invalidHeaders) {\n notify(\"Modified or unrecognized column headers.\", \"warning\");\n setCSVErrors([\"Modified or unrecognized column headers.\"]);\n setCSVData({});\n return;\n }\n\n let rows = csv2arr(str.slice(str.indexOf(\"\\n\") + 1));\n rows = rows.filter((row) => row.join(\"\") !== \"\");\n\n if (rows.length > MAX_ROWS_UPLOAD) {\n notify(\n `Exceeded max. of ${MAX_ROWS_UPLOAD} products per Account.`,\n `warning`\n );\n setCSVData({});\n setCustomHeaders([]);\n return;\n }\n\n let newArray = rows\n .map((row) => {\n if (!isEmpty(row) && row.length > 1) {\n const eachObject = headerColumns.reduce((obj, header, i) => {\n obj[header] = row[i].trim(); // Trim each cell value\n return obj;\n }, {});\n\n if (row.length > hlen) {\n eachObject[\"error\"] = true;\n lengthError = true;\n }\n\n return eachObject;\n }\n return null; // Explicitly return null for rows that don't meet the condition\n })\n .filter((itm) => itm);\n\n if (lengthError)\n errors.push(\n `Values in extra columns, or extra unquoted commas within entries.`\n );\n errors = validateCSV(newArray, errors);\n if (errors.length > 0) {\n setCSVErrors(errors);\n newArray = newArray.filter((row) => row.error);\n setCSVData({ preview: newArray.slice(0, 20) });\n } else {\n setCSVData({ products: newArray, preview: newArray.slice(0, 20) });\n setCustomHeaders(customHeaders);\n notify(\"Product Catalog uploaded successfully.\", \"info\");\n }\n } catch (err) {\n logError(\"accounts:CatalogUpload:processCSV\", err, notify);\n }\n};\n\nconst ErrorTextField = (props) => (\n <TextField color={props.record.error ? \"error\" : \"body\"} {...props} />\n);\n\nexport const CatalogUpload = ({\n csvData,\n setCSVData,\n csvErrors,\n setCSVErrors,\n ...props\n}) => {\n const form = useForm();\n const notify = useNotify();\n const [customHeaders, setCustomHeaders] = useState([]);\n\n const handleCSVFile = async (value) => {\n try {\n setCSVErrors(null);\n if (!value) {\n form.change(\"productFile\", null);\n setCSVData({});\n } else if (value?.size > MAX_FILE_SIZE) {\n notify(MAX_FILE_SIZE_MSG, \"warning\");\n form.change(\"productFile\", null);\n setCSVData({});\n } else {\n const fileState = form.getFieldState(\"productFile\");\n const reader = new FileReader();\n reader.onload = function (e) {\n const text = e.target.result;\n processCSV(\n text,\n \",\",\n setCustomHeaders,\n setCSVData,\n setCSVErrors,\n notify\n );\n };\n let blob = await fetch(fileState.value.src).then((r) => r.blob());\n reader.readAsText(blob);\n }\n } catch (error) {\n logError(\"accounts:CatalogUpload:handleCSVFile\", error, notify);\n }\n };\n\n return (\n <Grid container direction=\"column\" spacing={1} fullWidth>\n <Grid container direction=\"row\" spacing={4}>\n <Grid item xs={12} md={6}>\n <Typography variant=\"overline\" color=\"textSecondary\" gutterBottom>\n Instructions\n </Typography>\n <ol>\n <li>\n {\" \"}\n Download{\" \"}\n <Link\n href=\"https://transloads.co/articles/product-catalog-upload/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n underline=\"hover\"\n >\n Product_Catalog_Template.xlsx\n </Link>{\" \"}\n spreadsheet\n </li>\n <li>\n {\" \"}\n Fill out following the instructinos and excamples on the download\n page{\" \"}\n </li>\n <li>\n {\" \"}\n Save as a comma-seperated-values (.CSV) file and upload here{\" \"}\n </li>\n <li>\n {\" \"}\n If errors are found, review, correct the errors and re-upload{\" \"}\n </li>\n <li> For help, contact us at 877-TRANSLOAD / 877-872-6756 </li>\n </ol>\n </Grid>\n <Grid item xs={12} md={6}>\n <FileInput\n source=\"productFile\"\n label=\"CATALOG UPLOAD\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop a CSV File to\n upload, or click to select it.\n </p>\n }\n accept=\".csv\"\n onChange={handleCSVFile}\n helperText={false}\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n {csvErrors && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"error\">\n {\" \"}\n Loading Errors:{\" \"}\n </Typography>\n <ul>\n {csvErrors.map((error) => (\n <Typography color=\"error\">\n {\" \"}\n <li>{error}</li>{\" \"}\n </Typography>\n ))}\n </ul>\n </Grid>\n )}\n {csvData?.preview?.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\" gutterBottom>\n {\" \"}\n Upload Preview (top 20 rows):{\" \"}\n </Typography>\n </Grid>\n )}\n <Grid item xs={12}>\n <ArrayField source=\"preview\" record={csvData} fullWidth>\n <Datagrid>\n <ErrorTextField source=\"productCode\" label=\"Product Code\" />\n <ErrorTextField source=\"name\" label=\"Product Name\" />\n <ErrorTextField source=\"commodityCateory\" label=\"Load Type\" />\n <ErrorTextField source=\"category\" label=\"Commodity Category\" />\n <ErrorTextField source=\"defaultUnits\" label=\"Units of Measure\" />\n {customHeaders.map((field) => (\n <ErrorTextField source={field} label={field} />\n ))}\n </Datagrid>\n </ArrayField>\n </Grid>\n </Grid>\n </Grid>\n );\n};\n","import React from \"react\";\n\nimport {\n Grid,\n Hidden,\n InputAdornment,\n Switch,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n FormDataConsumer,\n ArrayInput,\n SimpleFormIterator,\n TextInput,\n required,\n minLength,\n maxLength,\n regex,\n email,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { AddressInput } from \"../../../components/common/AddressInput\";\nimport { REGEX_PHONE, REGEX_URL } from \"../../../utils/constants\";\nimport { CorporateAccountIcon } from \"../../../components/common\";\n\nconst useStyles = makeStyles((theme) => ({\n arrayInput: {\n marginTop: theme.spacing(-2),\n },\n boolean: {\n marginTop: theme.spacing(-1),\n },\n}));\n\nconst validateRequired = required();\nconst validateAccountEmail = [required(), email()];\nconst validateLotNoPrefix = [\n required(),\n minLength(2, \"Must be 1 characters at least\"),\n]; // min 2 cause contains '-'\nconst validatePhone = [\n required(),\n regex(REGEX_PHONE, \"Must be valid Phone No.\"),\n minLength(10),\n maxLength(20),\n];\nconst validateOptEmail = [email()];\nconst validateOptPhone = [\n regex(REGEX_PHONE, \"Must be valid Phone No.\"),\n minLength(10),\n maxLength(20),\n];\nconst validateWebsite = [regex(REGEX_URL, \"Must be valid URL\")];\n\nconst handleCorporateAccount = (form, event) => {\n debugger;\n form.change(\"corporateAccount\", event.target.checked);\n\n if (event.target.checked) {\n form.change(\"businessName\", window.appUser.reloadYard.name);\n\n form.change(\"address.street\", window.appUser.reloadYard.street);\n form.change(\"address.city\", window.appUser.reloadYard.city);\n form.change(\"address.state\", window.appUser.reloadYard.state);\n form.change(\"address.zipCode\", window.appUser.reloadYard.zipCode);\n form.change(\"address.country\", window.appUser.reloadYard.country);\n\n form.change(\"email\", window.appUser.reloadYard.email);\n form.change(\"phone\", window.appUser.reloadYard.phone);\n } else {\n form.change(\"businessName\", undefined);\n form.change(\"address\", undefined);\n form.change(\"email\", undefined);\n form.change(\"phone\", undefined);\n form.change(\"contacts\", undefined);\n }\n};\n\nconst isCreateForm = (record) => {\n return Object.keys(record).length === 0;\n};\n\nexport const ContactTab = ({ record, ...props }) => {\n const form = useForm();\n const classes = useStyles();\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container item direction=\"row\" spacing={1} lg={10}>\n <Grid item xs={12} md={6}>\n {isCreateForm(record) ? (\n <Grid container direction=\"column\" spacing={0}>\n <Grid item xs={12}>\n <TextInput\n source=\"businessName\"\n label=\"Account Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n helperText={false}\n InputProps={{\n endAdornment: formData.corporateAccount && (\n <InputAdornment position=\"end\">\n <CorporateAccountIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} className={classes.boolean}>\n <Switch\n name=\"corporateAccount\"\n color=\"primary\"\n size=\"small\"\n onChange={(event) => handleCorporateAccount(form, event)}\n checked={formData.corporateAccount}\n />\n <Typography component=\"span\">Corporate Account</Typography>\n </Grid>\n </Grid>\n ) : (\n <TextInput\n source=\"businessName\"\n label=\"Account Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n helperText={\n record.corporateAccount ? \"Corporate Account\" : false\n }\n InputProps={{\n endAdornment: record.corporateAccount && (\n <InputAdornment position=\"end\">\n <CorporateAccountIcon />\n </InputAdornment>\n ),\n }}\n />\n )}\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"displayName\"\n label=\"Display Name\"\n variant=\"outlined\"\n fullWidth\n helperText={false}\n\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"lotNumberPrefix\"\n label=\"Lot No. Prefix\"\n variant=\"outlined\"\n fullWidth\n format={(v) => (v ? v.slice(0, -1) : undefined)}\n parse={(v) =>\n v ? v.toUpperCase().replace(/\\s+/g, \"\") + \"-\" : undefined\n }\n initialValue={\"-\"}\n validate={validateLotNoPrefix}\n helperText={false}\n inputProps={{\n maxLength: 3,\n style: { textAlign: \"right\", textTransform: \"uppercase\" },\n }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">—</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"phone\"\n type=\"tel\"\n variant=\"outlined\"\n fullWidth\n validate={validatePhone}\n helperText={false}\n />\n </Grid>\n <Hidden smDown>\n <Grid item xs={false} md={6}>\n <TextInput\n source=\"fax\"\n type=\"tel\"\n variant=\"outlined\"\n fullWidth\n validate={validateOptPhone}\n helperText={false}\n />\n </Grid>\n </Hidden>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"email\"\n type=\"email\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toLowerCase() : undefined)}\n validate={validateAccountEmail}\n helperText={false}\n />\n </Grid>\n <Hidden smDown>\n <Grid item xs={false} md={6}>\n <TextInput\n source=\"website\"\n type=\"url\"\n variant=\"outlined\"\n fullWidth\n validate={validateWebsite}\n helperText={false}\n />\n </Grid>\n </Hidden>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Business Address\n </Typography>\n </legend>\n <AddressInput\n source=\"address\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v : undefined)}\n allValues={formData}\n />\n </fieldset>\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n CONTACTS\n </Typography>\n </legend>\n <ArrayInput\n source=\"contacts\"\n label=\"\"\n fullWidth\n className={classes.arrayInput}\n >\n <SimpleFormIterator>\n <FormDataConsumer>\n {({\n scopedFormData, // The data for this item of the ArrayInput\n getSource, // Function to get the valid source inside an ArrayInput. Translates to \"inventories.items[].property\"\n ...rest\n }) => (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} lg={3}>\n <TextInput\n source={getSource(\"name\")}\n label=\"Contact Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} lg={3}>\n <TextInput\n source={getSource(\"email\")}\n label=\"Email\"\n type=\"email\"\n variant=\"outlined\"\n fullWidth\n parse={(v) =>\n v !== \"\" ? v.toLowerCase() : undefined\n }\n validate={validateOptEmail}\n helperText={false}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <TextInput\n source={getSource(\"phone\")}\n label=\"Phone\"\n variant=\"outlined\"\n fullWidth\n validate={validateOptPhone}\n helperText={false}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <TextInput\n source={getSource(\"description\")}\n label=\"Description\"\n variant=\"outlined\"\n fullWidth\n helperText={false}\n />\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n </fieldset>\n </Grid>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n","import { keyBy } from \"lodash\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n accountByLotPrefix,\n accountByEmail,\n} from \"../../../graphql/account/custom-queries\";\nimport { updateAccount } from \"../../../graphql/mutations\";\n\nimport { getCustomFieldId } from \"../../../components/common/CustomFields\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n CatalogHeaderMap,\n CustomFieldsDisplay,\n NoteType,\n VALIDATION_MSG,\n} from \"../../../utils/constants\";\n\nexport const customHeadersToInventoryFields = async (\n form,\n customHeaders,\n record\n) => {\n const inventoryFieldState = form.getFieldState(\"inventoryCustomFields\");\n let inventoryCustomFields = inventoryFieldState.value;\n\n if (customHeaders?.length > 0) {\n const inventoryFieldMap =\n inventoryCustomFields?.length > 0\n ? keyBy(inventoryCustomFields, \"id\")\n : {};\n customHeaders.forEach((header) => {\n const hid = getCustomFieldId(header);\n const match = inventoryFieldMap[hid];\n if (!match) {\n const newField = {\n id: getCustomFieldId(header),\n name: header,\n display: [CustomFieldsDisplay.MOBILE, CustomFieldsDisplay.TALLYSHEET],\n };\n if (inventoryCustomFields?.length > 0)\n inventoryCustomFields.push(newField);\n else inventoryCustomFields = [newField];\n }\n });\n\n form.change(\"inventoryCustomFields\", inventoryCustomFields);\n\n if (record) {\n const note = [\n {\n text: `Product Catalog uploaded.`,\n type: NoteType.GENERIC,\n date: new Date(),\n by: window.appUser?.fullName,\n },\n ];\n\n const input = { ...record };\n input.history = record.history ? [...record.history, ...note] : note;\n input.inventoryCustomFields =\n inventoryCustomFields?.length > 0 ? inventoryCustomFields : undefined;\n delete input.activeServices;\n delete input.services;\n delete input.products;\n delete input.createdAt;\n delete input.updatedAt;\n await API.graphql(graphqlOperation(updateAccount, { input }));\n }\n }\n};\n\nexport const formValidate = async (form, notify) => {\n const formState = form.getState();\n debugger;\n\n if (formState?.invalid) {\n notify(VALIDATION_MSG, \"warning\");\n }\n\n const lotNoErrorrs = await validateLotPrefixUnicity(\n formState.values.lotNumberPrefix,\n formState.values\n );\n if (lotNoErrorrs) {\n notify(lotNoErrorrs.message, \"warning\");\n }\n};\n\nexport const getCustomHeaders = (product) => {\n const allColumns = Object.keys(product);\n const mapColumns = new Set(Object.values(CatalogHeaderMap));\n const customHeaders = allColumns.filter(\n (itm) =>\n itm !== \"error\" && itm !== \"commodityCateory\" && !mapColumns.has(itm)\n );\n return customHeaders;\n};\n\nexport const validateEmailUnicity = async (value, allValues) => {\n if (value) {\n try {\n let resp = await API.graphql(\n graphqlOperation(accountByEmail, {\n reloadYardId: window.appUser?.reloadYardId,\n email: { eq: value.toLowerCase() },\n })\n );\n\n if (\n resp.data.accountByEmail.items.length !== 0 &&\n resp.data.accountByEmail.items[0].id !== allValues.id\n ) {\n return {\n message: `Email: ${value} is already used for: ${resp.data.accountByEmail.items[0].businessName}. Continue saving petentailly duplicate Account?`,\n };\n }\n } catch (error) {\n logError(\"accounts:AccountEdit:validateEmailUnicity\", error, false);\n }\n }\n return null;\n};\n\nexport const validateLotPrefixUnicity = async (value, allValues) => {\n if (value && value !== \"\") {\n try {\n let resp = await API.graphql(\n graphqlOperation(accountByLotPrefix, {\n reloadYardId: window.appUser?.reloadYardId,\n lotNumberPrefix: { eq: value.toUpperCase() },\n })\n );\n\n if (\n resp.data.accountByLotPrefix.items.length !== 0 &&\n resp.data.accountByLotPrefix.items[0].id !== allValues.id\n ) {\n return {\n message: `Lot No. Prefix: ${value} is already used for: ${resp.data.accountByLotPrefix.items[0].businessName}`,\n };\n }\n } catch (error) {\n logError(\"accounts:AccountCreate:validateLotPrefixUnicity\", error, false);\n }\n }\n return null;\n};\n","import React, { useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n createProduct,\n createService,\n updateAccount,\n} from \"../../../graphql/mutations\";\n\nimport { Backdrop, CircularProgress } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n Confirm,\n FormDataConsumer,\n SaveButton,\n useNotify,\n useRedirect,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { getCustomFieldId } from \"../../../components/common/CustomFields\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n FilePaths,\n NoteType,\n ServiceStatus,\n Unit,\n UnitToColumn,\n} from \"../../../utils/constants\";\nimport { saveRemoveFile, saveRemoveFiles } from \"../../../utils/fileUtils\";\nimport * as utils from \"./AccountUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n}));\n\nexport const ValidateCreateButton = (props) => {\n const classes = useStyles();\n const form = useForm();\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [confirmMessage, setConfirmMessage] = useState(\"\");\n const { basePath } = props;\n\n const handleValidateSave = async (formData) => {\n debugger;\n const warnings = await utils.validateEmailUnicity(formData.email, formData);\n\n if (warnings) {\n setConfirmMessage(warnings.message);\n setOpen(true);\n } else handleSave();\n };\n\n const handleDialogClose = () => setOpen(false);\n const handleDialogCconfirm = async () => await handleSave();\n\n const handleSave = async () => {\n debugger;\n setOpen(false);\n\n await utils.formValidate(form, notify);\n\n props.handleSubmit();\n };\n\n const transform = async (data) => {\n setIsSaving(true);\n data = { ...data };\n debugger;\n\n try {\n data.active = \"true\";\n data.status = \"NEW\";\n data.reloadYardId = window.appUser?.reloadYardId;\n data.groups = window.appUser?.groups;\n data.email = data.email.toLowerCase();\n if (data.address?.state)\n data.address.state = data.address.state.toUpperCase();\n if (data.address?.zipCode)\n data.address.zipCode = data.address.zipCode.toUpperCase();\n data.addressState = data.address?.state ? data.address.state : \" \";\n delete data.address?.name;\n\n if (data.billingEmail)\n data.billingEmail = data.billingEmail.toLowerCase();\n if (data.billingAddress?.state)\n data.billingAddress.state = data.billingAddress.state.toUpperCase();\n if (data.billingAddress?.zipCode)\n data.billingAddress.zipCode = data.billingAddress.zipCode.toUpperCase();\n\n // cleanup GridEdit side-effects\n data.addressBook = data.addressBook?.map(({ id, ...rest }) => rest);\n\n data.history = [\n {\n text: `Account Created`,\n type: NoteType.GENERIC,\n date: new Date(),\n by: window.appUser?.fullName,\n },\n ];\n\n if (data.inboundCustomFields?.length > 0) {\n data.inboundCustomFields.forEach(\n (itm) => (itm.id = itm.id ? itm.id : getCustomFieldId(itm.name))\n );\n }\n if (data.outboundCustomFields?.length > 0) {\n data.outboundCustomFields.forEach(\n (itm) => (itm.id = itm.id ? itm.id : getCustomFieldId(itm.name))\n );\n }\n if (data.inventoryCustomFields?.length > 0) {\n data.inventoryCustomFields.forEach(\n (itm) => (itm.id = itm.id ? itm.id : getCustomFieldId(itm.name))\n );\n }\n if (data.invoiceCustomFields?.length > 0) {\n data.invoiceCustomFields.forEach(\n (itm) => (itm.id = itm.id ? itm.id : getCustomFieldId(itm.name))\n );\n }\n\n data.inboundPhotos = data.inboundPhotos || 0;\n data.secondaryReview = data.secondaryReview ? true : false;\n data.lotType = data.lotType ? data.lotType : \"\";\n data.lotNumberOverride = data.lotNumberOverride ? true : false;\n\n data.outboundPhotos = data.outboundPhotos || 0;\n data.inventoryPhotos = data.inventoryPhotos || 0;\n\n await Promise.all([\n saveRemoveFile(\n undefined,\n data,\n \"bolTemplate\",\n `${FilePaths.ACCOUNT}/${data.id}`\n ),\n saveRemoveFile(\n undefined,\n data,\n \"receiptTemplate\",\n `${FilePaths.ACCOUNT}/${data.id}`\n ),\n saveRemoveFiles(\n undefined,\n data,\n \"attachments\",\n `${FilePaths.ACCOUNT}/${data.id}`\n ),\n ]);\n } catch (err) {\n logError(\"accounts:ValidateCreateButton:transform\", err, notify);\n return Promise.reject();\n }\n\n delete data.checklists;\n delete data.products;\n delete data.productFile; // form side-effect cleanup\n delete data.services;\n\n return data;\n };\n\n const onSuccess = async ({ data }) => {\n debugger;\n\n try {\n const servicesState = form.getFieldState(\"services\");\n let services = servicesState.value;\n const catalogState = form.getFieldState(\"products.items\");\n const products = catalogState.value;\n const attachmentsState = form.getFieldState(\"attachments\");\n data.attachments = attachmentsState?.value;\n const bolState = form.getFieldState(\"bolTemplate\");\n data.bolTemplate = bolState?.value;\n const receiptState = form.getFieldState(\"receiptTemplate\");\n data.receiptTemplate = receiptState?.value;\n\n if (services?.length > 0) {\n const results = await Promise.allSettled(\n services.map((item) => {\n const input = { ...item };\n input.active = data.active;\n input.groups = data.groups;\n input.status = ServiceStatus.AVAILABLE;\n input.reloadYardId = data.reloadYardId;\n input.accountId = data.id;\n input.accountName = data.businessName;\n\n Object.entries(UnitToColumn).forEach(([unit, column]) => {\n input[column] = item[column] ? parseFloat(item[column]) : 0;\n });\n\n input.history = [\n {\n text: `Service Created`,\n type: NoteType.GENERIC,\n date: new Date(),\n by: window.appUser?.fullName,\n },\n ];\n\n return API.graphql(graphqlOperation(createService, { input }));\n })\n );\n\n const resError = results.find((itm) => itm.status === \"rejected\");\n if (resError) throw resError.reason;\n }\n\n if (products?.length > 0) {\n const unitEntries = Object.entries(UnitToColumn).filter(\n (e) => e[0] !== Unit.CAR && e[0] !== Unit.TL\n );\n const customHeaders = utils.getCustomHeaders(products[0]);\n\n const results = await Promise.allSettled(\n products.map((item) => {\n const input = {\n active: data.active,\n groups: data.groups,\n reloadYardId: data.reloadYardId,\n accountId: data.id,\n };\n\n input.productCode = item[\"productCode\"];\n input.name = item[\"name\"];\n input.reloadYardCommodityId = item.reloadYardCommodityId;\n input.category = item[\"category\"] ? item[\"category\"] : null;\n input.defaultUnits = item[\"defaultUnits\"];\n input.inboundBillingUnits = item[\"inboundBillingUnits\"];\n input.outboundBillingUnits = item[\"outboundBillingUnits\"];\n input.lowInventoryThreshold = Number(item[\"lowInventoryThreshold\"]); // Number parse to 0\n\n input.pcsHeight = parseFloat(item[\"pcsHeight\"]);\n input.pcsWidth = parseFloat(item[\"pcsWidth\"]);\n input.pcsLength = parseFloat(item[\"pcsLength\"]);\n input.height = parseFloat(item[\"height\"]);\n input.length = parseFloat(item[\"length\"]);\n input.width = parseFloat(item[\"width\"]);\n\n unitEntries.forEach(([unit, column]) => {\n input[column] = parseFloat(item[column]);\n });\n\n input.totalInventoryQuantity = 0;\n input.lowInventoryAlert = false;\n\n input.history = [\n {\n text: `Product Created`,\n type: NoteType.GENERIC,\n date: new Date(),\n by: window.appUser?.fullName,\n },\n ];\n\n if (customHeaders.length > 0) {\n input.customFields = [];\n customHeaders.forEach((header) => {\n input.customFields.push(`${header}||${item[header]}`);\n });\n }\n\n return API.graphql(graphqlOperation(createProduct, { input }));\n })\n );\n\n const resError = results.find((itm) => itm.status === \"rejected\");\n if (resError) throw resError.reason;\n }\n\n notify(\"Account created successfully\");\n redirect(\"list\", basePath);\n } catch (error) {\n logError(\n \"accounts:ValidateCreateButton:onSuccess\",\n error,\n notify,\n redirect\n );\n } finally {\n setIsSaving(false);\n }\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\"accounts:ValidateCreateButton:onFailure\", error, notify);\n };\n\n // Pass ...props, not ...rest to FormDataConsumer to include handleSubmitWithRedirect from props\n return (\n <FormDataConsumer>\n {({ formData, ...props }) => (\n <>\n <Backdrop className={classes.backdrop} open={isSaving}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <SaveButton\n label=\"Save\"\n submitOnEnter={false}\n undoable={false}\n saving={isSaving}\n handleSubmitWithRedirect={() => handleValidateSave(formData)}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <Confirm\n isOpen={open}\n loading={isSaving}\n title=\"Save Confirmation\"\n content={confirmMessage}\n onConfirm={handleDialogCconfirm}\n onClose={handleDialogClose}\n />\n </>\n )}\n </FormDataConsumer>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { Grid } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n ArrayInput,\n Button,\n CheckboxGroupInput,\n Confirm,\n FormDataConsumer,\n SimpleFormIterator,\n TextInput,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { CustomFieldsDisplayOptions } from \"../../utils/constants\";\nimport { AddIcon, RemoveIcon } from \".\";\nimport { getCustomFieldId } from \"./CustomFields\";\n\nconst useStyles = makeStyles((theme) => ({\n checkbox: {\n marginTop: 0,\n },\n}));\n\nconst validateUnicity = (value, allValues, source) => {\n const allFields = allValues[source];\n\n if (!value) return { message: \"Required\" };\n\n if (allFields) {\n const duplicates = allFields.filter(\n (item) => getCustomFieldId(item?.name) === getCustomFieldId(value)\n ).length;\n\n if (duplicates > 1) {\n // return an object just like the other validators\n return { message: \"Duplicate entry\" };\n }\n\n return undefined;\n }\n return undefined;\n};\n\nconst DeepRemoveButton = ({ source, refreshFn, ...props }) => {\n const form = useForm();\n var n = props.className.lastIndexOf(\"-\");\n var index = Number(props.className.substring(n + 1));\n const fieldState = form.getFieldState(source);\n const data = fieldState ? fieldState.value[index] : undefined;\n const [open, setOpen] = useState(false);\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n const handleRemove = async (event) => {\n props.onClick(event);\n setOpen(false);\n refreshFn && refreshFn();\n };\n\n return (\n <>\n <Button\n label=\"Remove\"\n color=\"default\"\n onClick={data?.id ? handleDialogOpen : handleRemove}\n >\n <RemoveIcon />\n </Button>\n <Confirm\n isOpen={open}\n title={\"Delete Confirmation\"}\n content={\n \"Removing a Field will make it unavialble for future use. Existing reocrds with this field will not be affected. Are you sure you want to delete this Field? \"\n }\n onConfirm={handleRemove}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n\nconst AddButtonDefault = ({ source, displayValues, refreshFn, ...props }) => {\n const form = useForm();\n const fieldState = form.getFieldState(source);\n\n const handleAdd = (event) => {\n debugger;\n if (fieldState?.value)\n form.change(source, [...fieldState.value, { display: displayValues }]);\n else form.change(source, [{ display: displayValues }]);\n refreshFn && refreshFn();\n };\n\n return (\n <Button label=\"Add\" color=\"default\" onClick={handleAdd}>\n <AddIcon />\n </Button>\n );\n};\n\nconst CustomFieldsInput = ({\n source,\n label = false,\n displayValues,\n refreshFn,\n className,\n ...props\n}) => {\n const form = useForm();\n const classes = useStyles();\n const displayOptions = CustomFieldsDisplayOptions.filter((option) =>\n displayValues.includes(option.id)\n );\n\n const handleNameChange = (event, getSource) => {\n debugger;\n if (event.target.value) {\n const id = getCustomFieldId(event.target.value);\n form.change(getSource(\"id\"), id);\n refreshFn && refreshFn();\n }\n };\n\n return (\n <ArrayInput source={source} label={label} fullWidth className={className}>\n <SimpleFormIterator\n addButton={\n <AddButtonDefault source={source} displayValues={displayValues} />\n }\n removeButton={\n <DeepRemoveButton source={source} refreshFn={refreshFn} />\n }\n >\n <FormDataConsumer>\n {({\n formData,\n scopedFormData, // The data for this item of the ArrayInput\n getSource, // Function to get the valid source inside an ArrayInput. Translates to \"inventories.items[].property\"\n ...rest\n }) => (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <TextInput\n source={getSource(\"name\")}\n label=\"Field Name\"\n variant=\"outlined\"\n fullWidth\n required\n validate={(value) => validateUnicity(value, formData, source)}\n onChange={(event) => handleNameChange(event, getSource)}\n helperText={false}\n />\n </Grid>\n {displayOptions?.length > 0 && (\n <Grid item xs={12} md={8}>\n <CheckboxGroupInput\n source={getSource(\"display\")}\n label=\"Display On...\"\n fullWidth\n className={classes.checkbox}\n choices={displayOptions}\n helperText={false}\n // initialValue={[CustomFieldsDisplayOptions[0]]} - infinnite loop, must upgrade react-admin\n />\n </Grid>\n )}\n </Grid>\n )}\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n );\n};\n\nexport default CustomFieldsInput;\n","import React from \"react\";\nimport { Grid, Box } from \"@material-ui/core\";\nimport {\n TextField,\n ArrayField,\n Datagrid,\n Button,\n useRecordContext,\n TopToolbar,\n DateField,\n} from \"react-admin\";\nimport { deepRedirect } from \"../../../utils/utils\";\nimport { CreateIcon, EditIcon } from \"../../../components/common\";\n\nexport const ChecklistPanel = (props) => {\n const { record, backPath, history } = props;\n\n const handleCreate = () => {\n const curentPath = props.location.pathname + props.location.search;\n deepRedirect(history, `/checklists/create`, curentPath, backPath, {\n resourceId: record.id,\n allowCopy: true,\n });\n };\n\n return (\n <>\n <Box width=\"100%\">\n <TopToolbar>\n <Button\n label=\"Create\"\n color=\"primary\"\n onClick={handleCreate}\n disabled={!record?.id || record?.checklists?.items?.length === 10}\n >\n <CreateIcon />\n </Button>\n </TopToolbar>\n </Box>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <SortedArrayField {...props} sortField=\"name\" sort=\"ASC\" />\n </Grid>\n </Grid>\n </>\n );\n};\n\nconst SortedArrayField = (props) => {\n const { record } = props;\n const list = record[\"checklists\"]?.items || [];\n const sortedList = list?.sort((a, b) => a.name.localeCompare(b.name));\n const modifiedRecord = { ...record, checklists: { items: sortedList } };\n\n return (\n <ArrayField record={modifiedRecord} source=\"checklists.items\">\n <Datagrid bulkActionButtons={false}>\n <TextField source=\"name\" />\n <TextField source=\"processName\" label=\"Process Name\" />\n <TextField source=\"active\" />\n <DateField source=\"createdAt\" label=\"Create Date\" />\n <EditButton {...props} />\n </Datagrid>\n </ArrayField>\n );\n};\n\nconst EditButton = (props) => {\n const { backPath, history } = props;\n const record = useRecordContext();\n\n const handleEdit = (evt, record) => {\n const curentPath = props.location.pathname + props.location.search;\n deepRedirect(history, `/checklists/${record.id}`, curentPath, backPath);\n };\n\n return (\n <Button\n label=\"Edit\"\n size=\"small\"\n color=\"primary\"\n onClick={(evt) => handleEdit(evt, record)}\n >\n <EditIcon />\n </Button>\n );\n};\n","import React, { useState, useMemo } from \"react\";\n\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n ArrayInput,\n Button,\n Datagrid,\n FormDataConsumer,\n ListContextProvider,\n SimpleFormIterator,\n TextField,\n useList,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { AddressInput } from \"../../../components/common/AddressInput\";\nimport {\n AddIcon,\n CancelIcon,\n EditIcon,\n OKIcon,\n RemoveIcon,\n} from \"../../../components/common\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { isFullAddress } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles((theme) => ({\n arrayInput: {\n marginTop: theme.spacing(-2),\n },\n}));\n\nconst MAX_INLINE_RECORDS = 10;\n\nexport const AddressBook = (props) => {\n const classes = useStyles();\n const form = useForm();\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) =>\n (formData.addressBook?.length || 0) < MAX_INLINE_RECORDS ? (\n <InlineEdit form={form} formData={formData} classes={classes} />\n ) : (\n <GridEdit form={form} formData={formData} />\n )\n }\n </FormDataConsumer>\n );\n};\n\nconst GridEdit = ({ form, formData, ...props }) => {\n // Add an `id` property to each address object for rendering purposes\n const indexedAddressBook = useMemo(() => {\n const addressBook = formData.addressBook || [];\n return addressBook.map((itm, index) => ({\n ...itm,\n id: String(index), // Ensure `id` is a string\n }));\n // }, [formData.addressBook]);\n }, [JSON.stringify(formData.addressBook)]); // Force recalculation if addressBook changes\n\n // Use `useList` for pagination and sorting\n const listContext = useList({\n data: indexedAddressBook,\n ids: indexedAddressBook.map((item) => item.id),\n perPage: MAX_INLINE_RECORDS, // Number of items per page\n sort: { field: \"name\", order: \"ASC\" }, // Default sorting\n loaded: true, // Mark as loaded since we're using local data\n loading: false, // No need to show loading\n });\n\n return (\n <>\n <ListContextProvider value={listContext}>\n <Datagrid>\n <TextField source=\"name\" label=\"Business Name\" />\n <TextField source=\"street\" label=\"Street Address\" />\n <TextField source=\"city\" label=\"City\" />\n <TextField source=\"state\" label=\"State\" />\n <TextField source=\"zipCode\" label=\"Zip Code\" />\n <TextField source=\"country\" label=\"Country\" />\n <ListActionButtons form={form} formData={formData} />\n </Datagrid>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n marginTop: \"10px\",\n }}\n >\n <AddAddressButton form={form} formData={formData} />\n <Pagination\n {...listContext}\n // rowsPerPageOptions={[3, 25, 50, 100]}\n />\n </div>\n </ListContextProvider>\n </>\n );\n};\n\nconst ListActionButtons = ({ form, formData, record, ...props }) => {\n const [isOpen, setIsOpen] = useState(false);\n const [originalAddress, setOriginalAddress] = useState(record); // Store the original address being edited\n\n // Handle the removal of an address\n const handleRemove = () => {\n const updatedAddressBook = [\n ...formData.addressBook.slice(0, parseInt(record.id)),\n ...formData.addressBook.slice(parseInt(record.id) + 1),\n ];\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"addressBook\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n form.change(\"addressBook\", updatedAddressBook); // Update the form with the new address book\n };\n\n // Open the edit dialog and store the original record for rollback purposes\n const handleEdit = () => {\n setOriginalAddress(record);\n setIsOpen(true);\n };\n\n // Save the edited address and update the form\n const handleSave = () => {\n form.registerField(\n `addressBook[${record.id}]`,\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n form.change(\n `addressBook[${originalAddress.id}]`,\n formData.addressBook[Number(originalAddress.id)]\n );\n\n // keep modified formData.addressBook[n] and close the dialog\n setIsOpen(false);\n };\n\n // Close the edit dialog and rollback the addressBook to its state before the edit started\n const handleClose = () => {\n // Rollback the changes in the formData by resetting to the original state\n const updatedAddressBook = formData.addressBook.map((address, index) =>\n index === Number(originalAddress.id) ? originalAddress : address\n );\n form.change(\"addressBook\", updatedAddressBook); // Update the form with the original addressBook\n\n setIsOpen(false); // Close the dialog\n };\n\n return (\n <div style={{ display: \"flex\", justifyContent: \"flex-end\" }}>\n <Button label=\"Edit\" color=\"primary\" onClick={handleEdit}>\n <EditIcon />\n </Button>\n  \n <Button label=\"Remove\" color=\"default\" onClick={handleRemove}>\n <RemoveIcon />\n </Button>\n {isOpen && (\n <Dialog open={isOpen} onClose={handleClose} maxWidth=\"md\" fullWidth>\n <DialogTitle>Edit Address</DialogTitle>\n <DialogContent>\n {originalAddress && (\n <AddressInput\n source={`addressBook[${originalAddress.id}]`} // Bind to the original address for editing\n variant=\"outlined\"\n fullWidth\n showBusinessName={true}\n required={true}\n parse={(v) => (v !== \"\" ? v : undefined)}\n allValues={formData}\n />\n )}\n </DialogContent>\n <DialogActions>\n <Button label=\"Cancel\" color=\"default\" onClick={handleClose}>\n <CancelIcon />\n </Button>\n <Button label=\"Confirm\" color=\"primary\" onClick={handleSave}>\n <OKIcon />\n </Button>\n </DialogActions>\n </Dialog>\n )}\n </div>\n );\n};\n\nconst InlineEdit = ({ form, formData, classes }) => {\n return (\n <ArrayInput\n source=\"addressBook\"\n label={false}\n fullWidth\n className={classes.arrayInput}\n >\n <SimpleFormIterator\n addButton={<AddAddressButton form={form} formData={formData} />}\n >\n <FormDataConsumer>\n {({\n scopedFormData, // The data for this item of the ArrayInput\n getSource, // Function to get the valid source inside an ArrayInput\n ...rest\n }) => (\n <AddressInput\n source={getSource(\"\")} // Use getSource to dynamically set the source\n variant=\"outlined\"\n fullWidth\n showBusinessName={true}\n required={true}\n parse={(v) => (v !== \"\" ? v : undefined)}\n allValues={formData}\n />\n )}\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n );\n};\n\nconst AddAddressButton = ({ form, formData }) => {\n const [isOpen, setIsOpen] = useState(false);\n const [newIndex, setNewIndex] = useState(null); // Store the index of the new entry\n\n // Open the dialog to add a new address\n const handleAdd = () => {\n const updatedAddressBook = [...(formData.addressBook || []), {}]; // Add an empty address\n const newEntryIndex = updatedAddressBook.length - 1; // Determine the index for the new entry\n form.change(\"addressBook\", updatedAddressBook); // Update the form state with the new empty record\n if (newEntryIndex >= MAX_INLINE_RECORDS) {\n setNewIndex(newEntryIndex); // Store the index in state\n setIsOpen(true); // Open the dialog\n }\n };\n\n // Save the new address and close the dialog\n const handleSave = () => {\n setIsOpen(false); // Close the dialog\n };\n\n // Close the dialog and remove the last empty address if no changes were made\n const handleClose = () => {\n const updatedAddressBook = [...(formData.addressBook || [])]; // Ensure addressBook is an array\n updatedAddressBook.pop(); // Remove the last entry\n form.change(\"addressBook\", updatedAddressBook); // Update the form state\n setIsOpen(false); // Close the dialog\n setNewIndex(null); // Reset the newIndex state\n };\n\n return (\n <>\n <Button label=\"Add\" color=\"default\" onClick={handleAdd}>\n <AddIcon />\n </Button>\n {isOpen && (\n <Dialog open={isOpen} onClose={handleClose} maxWidth=\"md\" fullWidth>\n <DialogTitle>Add Address</DialogTitle>\n <DialogContent>\n {newIndex !== null && (\n <AddressInput\n source={`addressBook[${newIndex}]`} // Bind to the new empty address for editing\n variant=\"outlined\"\n fullWidth\n showBusinessName={true}\n required={true}\n parse={(v) => (v !== \"\" ? v : undefined)}\n allValues={formData} // Use formData directly since AddressInput edits the form state\n />\n )}\n </DialogContent>\n <DialogActions>\n <Button label=\"Cancel\" color=\"default\" onClick={handleClose}>\n <CancelIcon />\n </Button>\n <Button\n label=\"Confirm\"\n color=\"primary\"\n disabled={!isFullAddress(formData.addressBook[newIndex])}\n onClick={handleSave}\n >\n <OKIcon />\n </Button>\n </DialogActions>\n </Dialog>\n )}\n </>\n );\n};\n","import React, { useEffect, useState } from \"react\";\n// import { useLocation } from \"react-router-dom/cjs/react-router-dom\";\nimport {\n useLocation,\n useHistory,\n} from \"react-router-dom/cjs/react-router-dom.min\";\n\nimport { Box, Grid, Link, Tab, Tabs, Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n BooleanInput,\n CheckboxGroupInput,\n FileInput,\n FormDataConsumer,\n RadioButtonGroupInput,\n regex,\n required,\n SelectInput,\n TextInput,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { theme } from \"../../../withRoot\";\nimport { AttachFileIcon } from \"../../../components/common\";\nimport CustomFieldsInput from \"../../../components/common/CustomFieldsInput\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport {\n CustomFieldsDisplay,\n LotTypes,\n MAX_PHOTO_NUM_INBOUND,\n MAX_PHOTO_NUM_INVENTORY,\n MAX_PHOTO_NUM_OUTBOUND,\n OutboundAdviceInputOptions,\n REGEX_MULTI_EMAIL,\n TrueOrFalse,\n UnitWeightOptions,\n} from \"../../../utils/constants\";\nimport { handleFileChange } from \"../../../utils/fileUtils\";\nimport { unitOptionRenderer } from \"../../../utils/loadTypeUtils\";\nimport { getLastValueFromUrl } from \"../../../utils/utils\";\nimport { BetaBadge, NewBadge } from \"../../../components/common/FeatureBadges\";\nimport { fetchEventTypes } from \"../eventTypes/EventTypeUtils\";\nimport { ChecklistPanel } from \"./ChecklistPanel\";\nimport { AddressBook } from \"./AddressBook\";\n\nconst useStyles = makeStyles((theme) => ({\n tabs: {\n borderRight: `1px solid ${theme.palette.divider}`,\n minWidth: \"16em\",\n \"& span:nth-child(1)\": {\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n marginRight: theme.spacing(2),\n },\n },\n tabsContainer: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.paper,\n display: \"flex\",\n width: \"100%\",\n marginTop: theme.spacing(3),\n },\n hiddenTab: {\n display: \"none\",\n width: \"0%\",\n },\n visibleTab: {\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n marginLeft: theme.spacing(3),\n },\n arrayInput: {\n marginTop: theme.spacing(-2),\n },\n booleanInput: {\n marginTop: theme.spacing(1),\n marginLeft: theme.spacing(1),\n },\n checkbodInput: {\n marginTop: theme.spacing(-1),\n marginLeft: theme.spacing(1),\n },\n}));\n\nconst validateRequired = [required()];\nconst validateMultiEmail = [regex(REGEX_MULTI_EMAIL, \"Must be valid email(s)\")];\nconst initFieldOptions = [\n { id: \"lotNumber\", name: \"Lot Number\" },\n { id: \"poNumber\", name: \"PO Number\" },\n];\nconst inboundPhotoOptions = Array.from(\n { length: MAX_PHOTO_NUM_INBOUND + 1 },\n (v, k) => k\n).map((num) => ({\n id: num,\n name: num.toString(),\n}));\nconst outboundPhotoOptions = Array.from(\n { length: MAX_PHOTO_NUM_OUTBOUND + 1 },\n (v, k) => k\n).map((num) => ({\n id: num,\n name: num.toString(),\n}));\nconst inventoryPhotoOptions = Array.from(\n { length: MAX_PHOTO_NUM_INVENTORY + 1 },\n (v, k) => k\n).map((num) => ({\n id: num,\n name: num.toString(),\n}));\n\nexport const AccountSettingsTab = ({ ...props }) => {\n const [fieldOptions, setFieldOptions] = useState(initFieldOptions);\n const [tabValue, setTabValue] = useState(0);\n const [eventTypes, setEventTypes] = useState(\n window.appUser.reloadYard.eventTypes?.items\n );\n const { record } = props;\n const classes = useStyles();\n const form = useForm();\n const notify = useNotify();\n const history = useHistory();\n const location = useLocation();\n\n useEffect(() => {\n if (getLastValueFromUrl(history.location.pathname) === `customSettings`) {\n const searchParams = new URLSearchParams(\n location.pathname.includes(\"?\")\n ? window.location.search\n : location.search\n );\n const tabIndex = searchParams.get(\"t\");\n if (tabIndex) {\n setTabValue(parseInt(tabIndex));\n }\n } else {\n setTabValue(0);\n if (location.search) {\n history.push(location.pathname);\n }\n }\n }, [history, location.pathname, location.search]);\n\n useEffect(() => {\n if (record.inventoryCustomFields?.length > 0) {\n setFieldOptions([...initFieldOptions, ...record.inventoryCustomFields]);\n }\n }, [record?.inventoryCustomFields]);\n\n useEffect(() => {\n fetchEventTypes(setEventTypes, notify);\n }, []);\n\n const handleTabChange = (event, newValue) => {\n setTabValue(newValue);\n history.push(`${history.location.pathname}?t=${newValue}`);\n };\n\n const handlePickupNumber = (value, formData) => {\n debugger;\n if (value && formData.outboundAdviceInputs?.includes(\"pickupNumber\")) {\n // if auto-gen pickup number - do not allow pickupNumber input\n form.change(\n \"outboundAdviceInputs\",\n formData.outboundAdviceInputs.filter((item) => item !== \"pickupNumber\")\n );\n }\n };\n\n const handleOutboundAdviceChange = (value) => {\n debugger;\n if (\n value.includes(\"pickupNumber\") ||\n value.includes(\"carrier\") ||\n value.includes(\"railCarNumber\") ||\n value.includes(\"mustTarp\")\n ) {\n if (!value.includes(\"carrierType\")) {\n form.change(\"outboundAdviceInputs\", [...value, \"carrierType\"]);\n }\n }\n if (value.includes(\"pickupNumber\")) {\n // if pickupNumber input - disable auto-gen pickup number\n form.change(\"generatePickupNumber\", false);\n }\n };\n\n const getOutboundAdviceInputOptions = () => {\n if (!eventTypes?.length) {\n return OutboundAdviceInputOptions.filter(\n (itm) => itm.id !== \"scheduledDateTime\"\n );\n }\n return OutboundAdviceInputOptions;\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <div className={classes.tabsContainer}>\n <Tabs\n orientation=\"vertical\"\n variant=\"scrollable\"\n value={tabValue}\n onChange={handleTabChange}\n aria-label=\"Settings Tabs\"\n className={classes.tabs}\n >\n <Tab id=\"inboundFields\" label=\"Inbound\" />\n <Tab id=\"outboundFields\" label=\"Outbound\" />\n <Tab id=\"inventoryFields\" label=\"Inventory\" />\n <Tab id=\"docTemplates\" label=\"Doc Templates\" />\n <Tab\n id=\"checklists\"\n label={\n <>\n <BetaBadge /> Checklists\n </>\n }\n />\n </Tabs>\n <TabPanel value={tabValue} index={0} classes={classes}>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Proof Of Delivery Email\n </Typography>\n </legend>\n <Grid container spacing={1}>\n <Grid item xs={4}>\n <TextInput\n source=\"podEmail\"\n label=\"POD Email\"\n variant=\"outlined\"\n fullWidth\n helperText=\"Comma-seperated email(s)\"\n validate={validateMultiEmail}\n />\n </Grid>\n <Grid item xs={4}>\n <BooleanInput\n source=\"podPhotos\"\n label=\"Enclose Photos\"\n fullWidth\n className={classes.booleanInput}\n />\n </Grid>\n <Grid item xs={4}>\n <BooleanInput\n source=\"podAttachments\"\n label=\"Enclose Attachments\"\n fullWidth\n className={classes.booleanInput}\n />\n </Grid>\n </Grid>\n </fieldset>\n </Grid>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Inbound Workflow\n </Typography>\n </legend>\n <Grid container spacing={1}>\n <Grid item xs={4}>\n {record.id ? ( // edit\n <SelectInput\n label=\"Number of Photos (Mim.)\"\n variant=\"outlined\"\n fullWidth\n source=\"inboundPhotos\"\n choices={inboundPhotoOptions}\n helperText={false}\n />\n ) : (\n // create\n <SelectInput\n label=\"Number of Photos (Mim.)\"\n variant=\"outlined\"\n fullWidth\n source=\"inboundPhotos\"\n choices={inboundPhotoOptions}\n defaultValue={0}\n helperText={false}\n />\n )}\n </Grid>\n <Grid item xs={4}>\n <SelectInput\n label=\"Default Lot Type\"\n variant=\"outlined\"\n fullWidth\n source=\"lotType\"\n choices={LotTypes}\n allowEmpty\n helperText={false}\n />\n </Grid>\n <Grid item xs={4}>\n <RadioButtonGroupInput\n source=\"secondaryReview\"\n label=\"Secondary Review\"\n row\n choices={TrueOrFalse}\n defaultValue={false}\n style={{ marginTop: 0, marginLeft: theme.spacing(1) }}\n helperText={false}\n />\n </Grid>\n <Grid item xs={4}>\n <Box sx={{ display: \"flex\", alignItems: \"center\" }}>\n <RadioButtonGroupInput\n source=\"lotNumberOverride\"\n label=\"Override Lot Number\"\n row\n choices={TrueOrFalse}\n defaultValue={false}\n style={{ marginTop: 0, marginLeft: theme.spacing(1) }}\n helperText={false}\n />\n <NewBadge mt={-5} label=\"Override Lot Number\" />\n </Box>\n </Grid>\n <Grid item xs={4}>\n <Box sx={{ display: \"flex\", alignItems: \"center\" }}>\n <RadioButtonGroupInput\n source=\"verifyInboundRailCar\"\n label=\"Verify Inbound Railcar\"\n row\n choices={TrueOrFalse}\n defaultValue={false}\n style={{ marginTop: 0, marginLeft: theme.spacing(1) }}\n helperText={false}\n />\n <NewBadge mt={-5} label=\"Verify Inbound Railcar\" />\n </Box>\n </Grid>\n <Grid item xs={4}>\n <Box sx={{ display: \"flex\", alignItems: \"center\" }}>\n <RadioButtonGroupInput\n source=\"trackInboundSeals\"\n label=\"Track Inbound Seals\"\n row\n choices={TrueOrFalse}\n defaultValue={false}\n style={{ marginTop: 0, marginLeft: theme.spacing(1) }}\n helperText={false}\n />\n <BetaBadge mt={-5} label=\"Track Inbound Seals\" />\n </Box>\n </Grid>\n </Grid>\n </fieldset>\n </Grid>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n CUSTOM FIELDS\n </Typography>\n </legend>\n <CustomFieldsInput\n {...props}\n source=\"inboundCustomFields\"\n displayValues={[\n CustomFieldsDisplay.MOBILE,\n CustomFieldsDisplay.POD,\n ]}\n className={classes.arrayInput}\n />\n </fieldset>\n </Grid>\n <Grid item xs={12}>\n <TextInput\n source=\"inboundInstructions\"\n label=\"Inbound Instructions\"\n variant=\"outlined\"\n multiline\n minRows=\"5\"\n fullWidth\n helperText={false}\n />\n </Grid>\n </Grid>\n </TabPanel>\n <TabPanel value={tabValue} index={1} classes={classes}>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Proof Of Shipment Email\n </Typography>\n </legend>\n <Grid container>\n <Grid item xs={4}>\n <TextInput\n source=\"posEmail\"\n label=\"POS Email\"\n variant=\"outlined\"\n fullWidth\n helperText=\"Comma-seperated email(s)\"\n validate={validateMultiEmail}\n />\n </Grid>\n <Grid item xs={4}>\n <BooleanInput\n source=\"posPhotos\"\n label=\"Enclose Photos\"\n fullWidth\n className={classes.booleanInput}\n />\n </Grid>\n <Grid item xs={4}>\n <BooleanInput\n source=\"posAttachments\"\n label=\"Enclose Attachments & BOL\"\n fullWidth\n className={classes.booleanInput}\n />\n </Grid>\n </Grid>\n </fieldset>\n </Grid>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n OUTBOUND ADVICE SETUP\n </Typography>\n <BetaBadge label=\"OUTBOUND ADVICE SETUP\" />\n </legend>\n <Grid container spacing={0}>\n <Grid item xs={12}>\n <CheckboxGroupInput\n source=\"outboundAdviceInputs\"\n label=\"Advice Inputs\"\n row={true}\n fullWidth\n choices={getOutboundAdviceInputOptions()}\n onChange={(value) => handleOutboundAdviceChange(value)}\n className={classes.checkbodInput}\n helperText={false}\n />\n </Grid>\n {formData.outboundAdviceInputs?.includes(\n \"scheduledDateTime\"\n ) && (\n <Grid item xs={12} md={4}>\n <SelectInput\n source=\"outboundEventTypeId\"\n label=\"Default Event Type\"\n variant=\"outlined\"\n fullWidth\n choices={eventTypes}\n defaultValue={\n eventTypes?.length === 1 ? eventTypes[0].id : \"\"\n }\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n )}\n </Grid>\n </fieldset>\n </Grid>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n OUTBOUND WORKFLOW\n </Typography>\n </legend>\n <Grid container>\n <Grid item xs={4}>\n {\n // needed to prevent SAVE button dirty flash\n record.id ? ( // edit\n <SelectInput\n label=\"Number of Photos (Mim.)\"\n variant=\"outlined\"\n fullWidth\n source=\"outboundPhotos\"\n choices={outboundPhotoOptions}\n helperText={false}\n />\n ) : (\n // create\n <SelectInput\n label=\"Number of Photos (Mim.)\"\n variant=\"outlined\"\n fullWidth\n source=\"outboundPhotos\"\n choices={outboundPhotoOptions}\n defaultValue={0}\n helperText={false}\n />\n )\n }\n </Grid>\n <Grid item xs={4}>\n <RadioButtonGroupInput\n source=\"mustTarp\"\n label=\"Must Tarp?\"\n row\n choices={TrueOrFalse}\n defaultValue={false}\n fullWidth\n style={{ marginTop: 0, marginLeft: theme.spacing(1) }}\n helperText={false}\n />\n </Grid>\n <Grid item xs={4}>\n <RadioButtonGroupInput\n source=\"outboundSkipSignature\"\n label=\"Skip BOL e-signatures\"\n row\n choices={TrueOrFalse}\n defaultValue={false}\n style={{ marginTop: 0, marginLeft: theme.spacing(1) }}\n helperText={false}\n />\n </Grid>\n </Grid>\n <Grid container>\n <Grid item xs={4}>\n <Box sx={{ display: \"flex\", alignItems: \"center\" }}>\n <RadioButtonGroupInput\n source=\"generatePickupNumber\"\n label=\"Auto-generate Pickup Number\"\n row\n choices={TrueOrFalse}\n defaultValue={false}\n onChange={(value) =>\n handlePickupNumber(value, formData)\n }\n style={{ marginTop: 0, marginLeft: theme.spacing(1) }}\n // className={classes.booleanInput}\n helperText={false}\n />\n <BetaBadge\n ml={-5}\n mt={-5}\n label=\"Auto-generate Pickup Number\"\n />\n </Box>\n </Grid>\n <Grid item xs={4}>\n <Box sx={{ display: \"flex\", alignItems: \"center\" }}>\n <RadioButtonGroupInput\n source=\"verifyOutboundRailCar\"\n label=\"Verify Outbound Railcar\"\n row\n choices={TrueOrFalse}\n defaultValue={false}\n style={{ marginTop: 0, marginLeft: theme.spacing(1) }}\n helperText={false}\n />\n <NewBadge\n ml={-3}\n mt={-5}\n label=\"Verify Outbound Railcar\"\n />\n </Box>\n </Grid>\n <Grid item xs={4}>\n <Box sx={{ display: \"flex\", alignItems: \"center\" }}>\n <RadioButtonGroupInput\n source=\"trackOutboundSeals\"\n label=\"Track Outbound Seals\"\n row\n choices={TrueOrFalse}\n defaultValue={false}\n style={{ marginTop: 0, marginLeft: theme.spacing(1) }}\n helperText={false}\n />\n <BetaBadge\n ml={-3}\n mt={-5}\n label=\"Track Outbound Seals\"\n />\n </Box>\n </Grid>\n {/* <Grid item xs={4} >\n <BooleanInput source=\"outboundReview\" label=\"Outbound Review\" fullWidth\n className={classes.booleanInput}\n helperText={false}\n />\n </Grid> */}\n </Grid>\n </fieldset>\n </Grid>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n CUSTOM FIELDS\n </Typography>\n </legend>\n <CustomFieldsInput\n {...props}\n source=\"outboundCustomFields\"\n displayValues={[\n CustomFieldsDisplay.MOBILE,\n CustomFieldsDisplay.POD,\n ]}\n className={classes.arrayInput}\n />\n </fieldset>\n </Grid>\n <Grid item xs={12}>\n <TextInput\n source=\"outboundInstructions\"\n label=\"Outbound Instructions\"\n variant=\"outlined\"\n multiline\n minRows=\"5\"\n fullWidth\n helperText={false}\n />\n </Grid>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n DESTINATION ADDRESS BOOK\n </Typography>\n </legend>\n <AddressBook />\n </fieldset>\n </Grid>\n </Grid>\n </TabPanel>\n <TabPanel value={tabValue} index={2} classes={classes}>\n <Grid container spacing={1}>\n <Grid item xs={4}>\n <SelectInput\n source=\"defaultWeightUnits\"\n label=\"Default Weight Units\"\n variant=\"outlined\"\n fullWidth\n choices={UnitWeightOptions}\n optionText={unitOptionRenderer}\n allowEmpty\n />\n </Grid>\n <Grid item xs={4}>\n <SelectInput\n source=\"inventoryPrimaryField\"\n label=\"Primary Display Field\"\n variant=\"outlined\"\n fullWidth\n choices={fieldOptions}\n />\n </Grid>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Inventory Workflow\n </Typography>\n </legend>\n <Grid container>\n <Grid item xs={4}>\n {record.id ? ( // edit\n <SelectInput\n label=\"Number of Photos (Mim.)\"\n variant=\"outlined\"\n fullWidth\n source=\"inventoryPhotos\"\n choices={inventoryPhotoOptions}\n helperText={false}\n />\n ) : (\n // create\n <SelectInput\n label=\"Number of Photos (Mim.)\"\n variant=\"outlined\"\n fullWidth\n source=\"inventoryPhotos\"\n choices={inventoryPhotoOptions}\n defaultValue={0}\n helperText={false}\n />\n )}\n </Grid>\n <Grid item xs={4}>\n <Box sx={{ display: \"flex\", alignItems: \"center\" }}>\n <RadioButtonGroupInput\n source=\"trackInventorySeals\"\n label=\"Track Inventory Seals\"\n row\n choices={TrueOrFalse}\n defaultValue={false}\n style={{ marginTop: 0, marginLeft: theme.spacing(1) }}\n helperText={false}\n />\n <BetaBadge mt={-5} label=\"Track Inventory Seals\" />\n </Box>\n </Grid>\n {/* <Grid item xs={4} >\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n <BooleanInput source=\"isBarcodeRequired\" label=\"Scan Unit Barcode\" fullWidth\n className={classes.booleanInput}\n helperText={false}\n />\n <BetaBadge ml={-1} label=\"Scan Unit Seals\" />\n </Box>\n </Grid> */}\n </Grid>\n </fieldset>\n </Grid>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n CUSTOM FIELDS\n </Typography>\n </legend>\n <CustomFieldsInput\n {...props}\n source=\"inventoryCustomFields\"\n displayValues={[\n CustomFieldsDisplay.MOBILE,\n CustomFieldsDisplay.TALLYSHEET,\n CustomFieldsDisplay.POD,\n CustomFieldsDisplay.POS,\n ]}\n className={classes.arrayInput}\n />\n </fieldset>\n </Grid>\n </Grid>\n </TabPanel>\n <TabPanel value={tabValue} index={3} classes={classes}>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <Typography\n variant=\"overline\"\n color=\"textSecondary\"\n gutterBottom\n >\n Instructions\n </Typography>\n <ol>\n <li>\n {\" \"}\n Download{\" \"}\n <Link\n href=\"https://transloads.co/articles/customizing-document-templates\"\n target=\"_blank\"\n rel=\"noreferrer\"\n underline=\"hover\"\n >\n document template\n </Link>\n .\n </li>\n <li>\n {\" \"}\n Customize following the instructinos and excamples on the\n download page{\" \"}\n </li>\n <li> Save as a .docx file and upload here </li>\n <li>\n {\" \"}\n If errors are found, review, correct the errors and\n re-upload{\" \"}\n </li>\n <li>\n {\" \"}\n For help, contact us at 877-TRANSLOAD / 877-872-6756{\" \"}\n </li>\n </ol>\n </Grid>\n <Grid item xs={12} md={6}>\n <FileInput\n source=\"receiptTemplate\"\n label=\"INBOUND RECEIPT TEMPLATE\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop a DOCX\n file to upload, or click to select it.\n </p>\n }\n accept=\".docx\"\n onChange={(value) =>\n handleFileChange(\"receiptTemplate\", value, form, notify)\n }\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n <Grid item xs={12} md={6}>\n <FileInput\n source=\"bolTemplate\"\n label=\"BILL OF LADING TEMPLATE\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop a DOCX\n file to upload, or click to select it.\n </p>\n }\n accept=\".docx\"\n onChange={(value) =>\n handleFileChange(\"bolTemplate\", value, form, notify)\n }\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n </Grid>\n </TabPanel>\n <TabPanel value={tabValue} index={4} classes={classes}>\n <ChecklistPanel {...props} />\n </TabPanel>\n </div>\n )}\n </FormDataConsumer>\n );\n};\n\nconst TabPanel = (props) => {\n const { classes, children, value, index, ...other } = props;\n\n return (\n <div\n className={value === index ? classes.visibleTab : classes.hiddenTab}\n role=\"tabpanel\"\n id={`vertical-tabpanel-${index}`}\n aria-labelledby={`vertical-tab-${index}`}\n hidden={value !== index}\n {...other}\n >\n {children}\n </div>\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport {\n useMediaQuery,\n FormControlLabel,\n Grid,\n InputAdornment,\n Switch,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n ArrayInput,\n BooleanInput,\n Button,\n Create,\n email,\n FileInput,\n FormDataConsumer,\n FormTab,\n maxLength,\n minLength,\n minValue,\n number,\n NumberInput,\n regex,\n required,\n SelectInput,\n SimpleFormIterator,\n TabbedForm,\n TextInput,\n Toolbar,\n TopToolbar,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { AttachFileIcon, RemoveIcon } from \"../../../components/common\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport {\n ACCEPTED_FILES,\n CountryList,\n MAX_FILES,\n PaymentTerms,\n REGEX_MULTI_EMAIL,\n REGEX_PHONE,\n ServiceType,\n UnitOptions,\n} from \"../../../utils/constants\";\nimport { handleFileChange } from \"../../../utils/fileUtils\";\nimport { getUnitLabel, unitOptionRenderer } from \"../../../utils/loadTypeUtils\";\nimport { AccountCreateHelp } from \"./AccountHelp\";\nimport { CatalogUpload } from \"./CatalogUpload\";\nimport { ContactTab } from \"./AccountContactTab\";\nimport {\n customHeadersToInventoryFields,\n getCustomHeaders,\n} from \"./AccountUtils\";\nimport { ValidateCreateButton } from \"./ValidateCreateButton\";\nimport { AccountSettingsTab } from \"./AccountSettingsTab\";\nimport CustomFieldsInput from \"../../../components/common/CustomFieldsInput\";\n\nconst useStyles = makeStyles((theme) => ({\n boolean: {\n marginTop: theme.spacing(1),\n },\n arrayInput: {\n marginTop: theme.spacing(-2),\n },\n}));\n\nconst validateRequired = required();\nconst validateMultiEmail = [\n required(),\n regex(REGEX_MULTI_EMAIL, \"Must be valid email(s)\"),\n];\nconst validateOptEmail = [email()];\nconst validateOptPhone = [\n regex(REGEX_PHONE, \"Must be valid Phone No.\"),\n minLength(10),\n maxLength(20),\n];\nconst validateState = [required(), minLength(2), maxLength(2)];\nconst validateZip = [required(), minLength(5)];\nconst validatePrice = [number(), minValue(0)];\nconst validateAlerts = [required(), number(), minValue(0)];\n\nconst BillingSetupTab = (props) => {\n const classes = useStyles();\n const form = useForm();\n const notify = useNotify();\n const [copyContactInfo, setCopyContactInfo] = useState(false);\n const [billingAddress, setBillingAddress] = useState({});\n const [billingEmail, setBillingEmail] = useState(\"\");\n\n const handleBillingStreetChange = (event, formData) => {\n const newAddress = {\n ...formData.billingAddress,\n street: event.target.value,\n };\n setBillingAddress(newAddress);\n };\n\n const handleBillingCityChange = (event, formData) => {\n const newAddress = { ...formData.billingAddress, city: event.target.value };\n setBillingAddress(newAddress);\n };\n\n const handleBillingStateChange = (event, formData) => {\n const newAddress = {\n ...formData.billingAddress,\n state: event.target.value,\n };\n setBillingAddress(newAddress);\n };\n\n const handleBillingZipChange = (event, formData) => {\n const newAddress = {\n ...formData.billingAddress,\n zipCode: event.target.value,\n };\n setBillingAddress(newAddress);\n };\n\n const handleBillingCountryChange = (event, formData) => {\n const newAddress = {\n ...formData.billingAddress,\n country: event.target.value,\n };\n setBillingAddress(newAddress);\n };\n\n const handleBillingEmailChange = (event) => {\n setBillingEmail(event.target.value);\n };\n\n const handleCopyContactInfoChange = (event, formData) => {\n form.change(\n \"billingEmail\",\n event.target.checked ? formData.email : billingEmail\n );\n form.change(\n \"billingAddress\",\n event.target.checked ? formData.address : billingAddress\n );\n form.change(\n \"billingAddress.name\",\n event.target.checked ? formData.businessName : billingAddress.name\n );\n setCopyContactInfo(event.target.checked);\n };\n\n return (\n <Grid container direction=\"column\" spacing={1}>\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container item direction=\"row\" spacing={1} lg={10}>\n <Grid item xs={0} md={4}>\n <TextInput\n source=\"accountNumber\"\n label=\"External Acct. Number\"\n variant=\"outlined\"\n fullWidth\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextInput\n source=\"einNumber\"\n label=\"EIN Number\"\n variant=\"outlined\"\n fullWidth\n validate={formData.send1099 ? validateRequired : undefined}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <BooleanInput\n source=\"send1099\"\n label=\"Send 1099\"\n variant=\"outlined\"\n fullWidth\n className={classes.boolean}\n defaultValue={false}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <NumberInput\n source=\"inventoryStorageThreshold\"\n label=\"Inventory Storage Alert\"\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n validate={validateAlerts}\n helperText=\"Free days of storage\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\"> Days </InputAdornment>\n ),\n inputProps: { min: 0, style: { textAlign: \"right\" } },\n }}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n source=\"inboundBillingUnits\"\n label=\"Inbound Billing Units\"\n variant=\"outlined\"\n fullWidth\n choices={UnitOptions}\n optionText={unitOptionRenderer}\n allowEmpty\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n source=\"outboundBillingUnits\"\n label=\"Outbound Billing Units\"\n variant=\"outlined\"\n fullWidth\n choices={UnitOptions}\n optionText={unitOptionRenderer}\n allowEmpty\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n source=\"paymentTerms\"\n label=\"Payment Terms\"\n variant=\"outlined\"\n fullWidth\n choices={PaymentTerms}\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Billing Address\n </Typography>\n </legend>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <FormControlLabel\n label=\"Copy Account Contact Info\"\n style={{ marginLeft: \"0px\" }}\n control={\n <Switch\n name=\"copyContactInfo\"\n size=\"small\"\n checked={copyContactInfo}\n disabled={!formData.address || !formData.email}\n onChange={(event) =>\n handleCopyContactInfoChange(event, formData)\n }\n />\n }\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"billingEmail\"\n label=\"Billing email\"\n type=\"email\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toLowerCase() : undefined)}\n onChange={(event) => handleBillingEmailChange(event)}\n validate={validateMultiEmail}\n helperText=\"Comma-seperated email(s)\"\n />\n </Grid>\n </Grid>\n <Grid container spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"billingAddress.name\"\n label=\"Business Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"billingAddress.street\"\n label=\"Street Address\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n onChange={(event) =>\n handleBillingStreetChange(event, formData)\n }\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={5}>\n <TextInput\n source=\"billingAddress.city\"\n label=\"City\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n onChange={(event) =>\n handleBillingCityChange(event, formData)\n }\n helperText={false}\n />\n </Grid>\n <Grid item xs={4} md={2}>\n <TextInput\n source=\"billingAddress.state\"\n label=\"State\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n validate={validateState}\n inputProps={{ maxLength: 2 }}\n onChange={(event) =>\n handleBillingStateChange(event, formData)\n }\n helperText={false}\n />\n </Grid>\n <Grid item xs={8} md={2}>\n <TextInput\n source=\"billingAddress.zipCode\"\n label=\"Zip Code\"\n variant=\"outlined\"\n fullWidth\n validate={validateZip}\n onChange={(event) =>\n handleBillingZipChange(event, formData)\n }\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <SelectInput\n source=\"billingAddress.country\"\n label=\"Country\"\n variant=\"outlined\"\n fullWidth\n choices={CountryList}\n validate={validateRequired}\n onChange={(event) =>\n handleBillingCountryChange(event, formData)\n }\n helperText={false}\n />\n </Grid>\n </Grid>\n </fieldset>\n </Grid>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n CUSTOM FIELDS\n </Typography>\n </legend>\n <CustomFieldsInput\n {...props}\n source=\"invoiceCustomFields\"\n displayValues={[]}\n className={classes.arrayInput}\n />\n </fieldset>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n BILLING CONTACTS\n </Typography>\n </legend>\n <ArrayInput\n source=\"billingContacts\"\n label=\"\"\n fullWidth\n className={classes.arrayInput}\n >\n <SimpleFormIterator>\n <FormDataConsumer>\n {({\n formData, // The whole form data\n scopedFormData, // The data for this item of the ArrayInput\n getSource, // Function to get the valid source inside an ArrayInput. Translates to \"inventories.items[].property\"\n ...rest\n }) => (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} lg={3}>\n <TextInput\n source={getSource(\"name\")}\n label=\"Contact Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} lg={3}>\n <TextInput\n source={getSource(\"email\")}\n label=\"Email\"\n type=\"email\"\n variant=\"outlined\"\n fullWidth\n parse={(v) =>\n v !== \"\" ? v.toLowerCase() : undefined\n }\n validate={validateOptEmail}\n helperText={false}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <TextInput\n source={getSource(\"phone\")}\n label=\"Phone\"\n variant=\"outlined\"\n fullWidth\n validate={validateOptPhone}\n helperText={false}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <TextInput\n source={getSource(\"description\")}\n label=\"Description\"\n variant=\"outlined\"\n fullWidth\n helperText={false}\n />\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n </fieldset>\n </Grid>\n </Grid>\n <Grid item container direction=\"row\" spacing={0} md={12} xs={false}>\n <Grid item xs={12}>\n <FileInput\n source=\"attachments\"\n label=\"ATTACHMENTS\"\n variant=\"outlined\"\n fullWidth\n className={classes.fileInput}\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop file(s) to\n upload, or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n multiple\n maxFiles={MAX_FILES}\n options={{ maxFiles: MAX_FILES }}\n onChange={(value) =>\n handleFileChange(\"attachments\", value, form, notify)\n }\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n </Grid>\n </Grid>\n );\n};\n\nconst ServicesTab = (props) => {\n const form = useForm();\n const taxRateOptions = window.appUser?.reloadYard?.taxRates\n ? window.appUser.reloadYard.taxRates\n : [{}];\n const rateRender = (choice) => `${choice.taxCode} : ${choice.taxRate}%`;\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"services\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n const RemoveButton = ({ ...props }) => {\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n var n = props.className.lastIndexOf(\"-\");\n var index = Number(props.className.substring(n + 1));\n const fieldState = form.getFieldState(\"services\");\n const data = fieldState ? fieldState.value[index] : undefined;\n\n const handleRemove = (event) => {\n props.onClick(event);\n };\n\n return (\n <Grid\n container\n direction={isXSmall ? \"row\" : \"column\"}\n spacing={1}\n alignItems=\"flex-start\"\n >\n <Grid item xs={2} sm={12}>\n <Button\n label=\"Remove\"\n color=\"default\"\n onClick={handleRemove}\n disabled={\n data &&\n (data.name === ServiceType.OUTSIDE_HANDLING ||\n data.name === ServiceType.INSIDE_HANDLING ||\n data.name === ServiceType.ACCESSORIAL_CHARGES)\n }\n >\n <RemoveIcon />\n </Button>\n </Grid>\n </Grid>\n );\n };\n\n return (\n <ArrayInput source=\"services\" label=\"SERVICE RATES\" fullWidth>\n <SimpleFormIterator disableReordering removeButton={<RemoveButton />}>\n <FormDataConsumer>\n {({\n formData, // The whole form data\n scopedFormData, // The data for this item of the ArrayInput\n getSource, // Function to get the valid source inside an ArrayInput. Translates to \"inventories.items[].property\"\n ...rest\n }) => (\n <Grid container direction=\"column\" spacing={0}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} lg={4}>\n <TextInput\n source={getSource(\"name\")}\n label=\"Service Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n disabled={\n scopedFormData?.name ===\n ServiceType.ACCESSORIAL_CHARGES ||\n scopedFormData?.name === ServiceType.OUTSIDE_HANDLING ||\n scopedFormData?.name === ServiceType.INSIDE_HANDLING\n }\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} lg={6}>\n <TextInput\n source={getSource(\"description\")}\n label=\"Description\"\n variant=\"outlined\"\n fullWidth\n disabled={\n scopedFormData?.name === ServiceType.ACCESSORIAL_CHARGES\n }\n helperText={false}\n InputLabelProps={\n scopedFormData?.name === ServiceType.ACCESSORIAL_CHARGES\n ? { shrink: true }\n : {}\n }\n />\n </Grid>\n <Grid item xs={6} lg={2}>\n <SelectInput\n source={getSource(\"taxRate\")}\n label=\"Tax Rate\"\n variant=\"outlined\"\n fullWidth\n choices={taxRateOptions}\n optionValue=\"taxCode\"\n optionText={rateRender}\n format={(v) => (!v ? undefined : v.taxCode)}\n parse={(v) =>\n !v\n ? undefined\n : window.appUser.reloadYard.taxRates.find(\n (r) => r.taxCode === v\n )\n }\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n </Grid>\n\n {scopedFormData?.name !== ServiceType.ACCESSORIAL_CHARGES && (\n <Grid container direction=\"row\" spacing={1}>\n {UnitOptions.map((unit) => (\n <Grid item xs={6} lg={2}>\n <NumberInput\n source={getSource(unit.column)}\n label={getUnitLabel(unit.id)}\n variant=\"outlined\"\n fullWidth\n placeholder=\"0.00\"\n min=\"0\"\n parse={(v) => (v === \"0\" ? undefined : v)}\n validate={validatePrice}\n helperText={false}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n {\" \"}\n ${\" \"}\n </InputAdornment>\n ),\n inputMode: \"decimal\",\n }}\n InputLabelProps={{ shrink: true }}\n />\n </Grid>\n ))}\n </Grid>\n )}\n </Grid>\n )}\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n );\n};\n\nconst CatalogTab = ({ csvErrors, setCSVErrors, ...props }) => {\n const form = useForm();\n const [csvData, setCSVData] = useState({});\n\n form.registerField(\n \"products.items\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n useEffect(() => {\n if (csvData.products) {\n const customHeaders = getCustomHeaders(csvData.products[0]);\n\n form.change(\"products.items\", csvData.products);\n customHeadersToInventoryFields(form, customHeaders);\n } else form.change(\"products.items\", null);\n }, [csvData.products]);\n\n return (\n <CatalogUpload\n csvData={csvData}\n setCSVData={setCSVData}\n csvErrors={csvErrors}\n setCSVErrors={setCSVErrors}\n />\n );\n};\n\nconst AccountCreateActions = ({ basePath, data, resource, ...props }) => (\n <TopToolbar>\n <HelpButton>\n <AccountCreateHelp {...props} />\n </HelpButton>\n <BackButton basePath={basePath} />\n </TopToolbar>\n);\n\nconst AccountCreateToolbar = (props) => {\n return (\n <Toolbar {...props}>\n <ValidateCreateButton />\n </Toolbar>\n );\n};\n\nconst validateAccountCreate = (csvErrors) => {\n const errors = {};\n if (csvErrors) errors.productFile = \" \";\n\n return errors;\n};\n\nexport const AccountCreate = (props) => {\n const [csvErrors, setCSVErrors] = useState();\n\n const initialValues = {\n services: [\n { name: ServiceType.ACCESSORIAL_CHARGES, description: \"\" },\n {\n name: ServiceType.OUTSIDE_HANDLING,\n description: \"1 Car in / out, outside storage\",\n },\n {\n name: ServiceType.INSIDE_HANDLING,\n description: \"1 Car in / out, warehouse storage\",\n },\n {\n name: ServiceType.OUTSIDE_STORAGE,\n description: \"Extended outside storage : monthly\",\n },\n {\n name: ServiceType.INSIDE_STORAGE,\n description: \"Extended warehouse storage : monthly\",\n },\n ],\n };\n\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New Account\" />}\n actions={<AccountCreateActions {...props} />}\n >\n <TabbedForm\n variant=\"outlined\"\n submitOnEnter={false}\n initialValues={initialValues}\n toolbar={<AccountCreateToolbar />}\n validate={() => validateAccountCreate(csvErrors)}\n >\n <FormTab path=\"\" label=\"Contact Info\">\n <ContactTab />\n </FormTab>\n <FormTab path=\"billingSetup\" label=\"Billing Setup\">\n <BillingSetupTab />\n </FormTab>\n <FormTab path=\"serviceRates\" label=\"Service Rates\">\n <ServicesTab />\n </FormTab>\n <FormTab path=\"customSettings\" label=\"Custom Settings\">\n <AccountSettingsTab />\n </FormTab>\n <FormTab path=\"productCatalog\" label=\"Product Catalog\">\n <CatalogTab csvErrors={csvErrors} setCSVErrors={setCSVErrors} />\n </FormTab>\n </TabbedForm>\n </Create>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { productByAccountByActiveByName } from \"../../../graphql/queries\";\nimport jsonExport from \"jsonexport/dist\";\n\nimport { useMediaQuery, Grid, Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n downloadCSV,\n useList,\n useListContext,\n useNotify,\n Button,\n Confirm,\n FilterButton,\n ListContextProvider,\n ListToolbar,\n Loading,\n TextField,\n TopToolbar,\n} from \"react-admin\";\n\nimport {\n CopyIcon,\n CreateIcon,\n EditIcon,\n ExportIcon,\n UploadIcon,\n} from \"../../../components/common\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { CustomField } from \"../../../components/common/CustomFields\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { LowInventoryIcon } from \"../../../components/common/LowInventoryIcon\";\nimport { isSubscriptionDisabled, logError } from \"../../../utils/appUtils\";\nimport {\n CatalogHeaderMap,\n MAX_ROWS_UPLOAD,\n Unit,\n UnitToColumn,\n} from \"../../../utils/constants\";\nimport CustomizableDatagrid from \"../../../components/common/ra-customizable-datagrid\";\nimport { deepRedirect, exportCustomField } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles((theme) => ({\n searchField: {\n minWidth: \"16rem\",\n marginTop: theme.spacing(3),\n },\n actionButton: {\n marginLeft: theme.spacing(1),\n },\n}));\n\nconst exportList = (products, account) => {\n debugger;\n const unitEntries = Object.entries(UnitToColumn).filter(\n (e) => e[0] !== Unit.CAR && e[0] !== Unit.TL\n );\n const productsForExport = [];\n const headers = Object.keys(CatalogHeaderMap);\n const customHeaderMap = new Map();\n\n Object.values(products).forEach((product) => {\n let productExport = {\n productCode: product.productCode,\n name: product.name,\n reloadYardCommodityId:\n window.appUser.reloadYard.yardCommodityMap[\n product.reloadYardCommodityId\n ].commodity.name,\n category: product.category ? product.category : \"\",\n defaultUnits: product.defaultUnits,\n defaultWeightUnits: product.defaultWeightUnits,\n inboundBillingUnits: product.inboundBillingUnits,\n outboundBillingUnits: product.outboundBillingUnits,\n };\n\n unitEntries.forEach(([unit, column]) => {\n productExport[column] = product[column];\n });\n\n productExport = {\n ...productExport,\n lowInventoryThreshold: product.lowInventoryThreshold,\n pcsHeight: product.pcsHeight,\n pcsWidth: product.pcsWidth,\n pcsLength: product.pcsLength,\n height: product.height,\n width: product.width,\n length: product.length,\n };\n\n if (product.customFields?.length > 0) {\n product.customFields.forEach((field) => {\n exportCustomField(field, productExport, customHeaderMap);\n });\n }\n\n debugger;\n productsForExport.push(productExport);\n });\n\n jsonExport(\n productsForExport,\n {\n rename: [...headers, ...customHeaderMap.keys()],\n },\n (err, csv) => {\n downloadCSV(csv, `${account.businessName}_products`); // download as 'products.csv` file\n }\n );\n};\n\nconst ProductSearchField = (props) => {\n const classes = useStyles();\n const { allProducts, setProducts, label, alwaysOn } = props;\n\n const handleSearch = (value) => {\n debugger;\n const searchTerm = value?.toLowerCase() || \"\";\n const newProducts = allProducts.filter(\n (itm) =>\n itm.name?.toLowerCase().includes(searchTerm) ||\n itm.productCode?.toLowerCase().includes(searchTerm) ||\n itm.category?.toLowerCase().includes(searchTerm) ||\n itm.customFields?.join().toLowerCase().includes(searchTerm)\n );\n setProducts(newProducts);\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n className={classes.searchField}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = (allProducts, setProducts) => [\n <ProductSearchField\n label=\"Catalog Search\"\n allProducts={allProducts}\n setProducts={setProducts}\n alwaysOn\n />,\n];\n\nconst ListActions = (props) => {\n const classes = useStyles();\n const {\n backPath,\n history,\n formState,\n allProducts,\n account,\n setUploadOpen,\n openConfirm,\n hasCreate,\n ...rest\n } = props;\n\n const handleCreate = () => {\n if (formState.dirty) openConfirm(\"/products/create\", { account: account });\n else\n deepRedirect(\n history,\n \"/products/create\",\n props.location.pathname,\n backPath,\n { account: account }\n );\n };\n\n return (\n <TopToolbar>\n <FilterButton />\n {hasCreate && (\n <Button\n label=\"Create Product\"\n color=\"primary\"\n className={classes.actionButton}\n onClick={handleCreate}\n disabled={isSubscriptionDisabled()}\n >\n <CreateIcon />\n </Button>\n )}\n {setUploadOpen && (\n <Button\n label=\"Upload Catalog\"\n color=\"primary\"\n className={classes.actionButton}\n onClick={() => setUploadOpen(true)}\n disabled={isSubscriptionDisabled()}\n >\n <UploadIcon />\n </Button>\n )}\n <Button\n label=\"Export\"\n size=\"small\"\n color=\"primary\"\n onClick={() => exportList(allProducts, account)}\n >\n <ExportIcon />\n </Button>\n </TopToolbar>\n );\n};\n\nconst PaginationToolbar = (props) => {\n const listContext = useListContext(props);\n\n return (\n <Grid container direction=\"row\" spacing={1} alignItems=\"center\">\n <Grid item xs={4}>\n <Typography>\n {listContext?.selectedIds?.length > 0 ? (\n `${listContext.selectedIds.length} selected`\n ) : (\n <> </>\n )}\n </Typography>\n </Grid>\n <Grid item xs={8}>\n <Pagination {...props} {...listContext} />\n </Grid>\n </Grid>\n );\n};\n\nconst CloneButton = ({\n backPath,\n history,\n formState,\n record,\n account,\n openConfirm,\n ...props\n}) => {\n const handleClone = (event) => {\n debugger;\n event.stopPropagation();\n if (formState.dirty)\n openConfirm(\"/products/create\", { account: account, clone: record });\n else\n deepRedirect(\n history,\n \"/products/create\",\n props.location.pathname,\n backPath,\n { account: account, clone: record }\n );\n };\n\n return (\n <Button label=\"Clone\" size=\"small\" color=\"primary\" onClick={handleClone}>\n <CopyIcon />\n </Button>\n );\n};\n\nconst handleEdit = ({\n backPath,\n history,\n formState,\n record,\n account,\n openConfirm,\n event,\n ...props\n}) => {\n debugger;\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (formState.dirty)\n openConfirm(`/products/${record.id}`, { account: account });\n else\n deepRedirect(\n history,\n `/products/${record.id}`,\n props.location.pathname,\n backPath,\n { account: account }\n );\n};\n\nconst EditButton = (props) => {\n return (\n <Button\n label=\"Edit\"\n size=\"small\"\n color=\"primary\"\n onClick={(event) => handleEdit({ ...props, event })}\n >\n <EditIcon />\n </Button>\n );\n};\n\nexport const ProductArrayList = ({\n backPath,\n form,\n account,\n uploadOpen,\n setUploadOpen,\n ...props\n}) => {\n const notify = useNotify();\n const history = useHistory();\n const [allProducts, setAllProducts] = useState([]);\n const [products, setProducts] = useState([]);\n const [confirmOpen, setConfirmOpen] = useState(false);\n const [confirmState, setConfirmState] = useState({});\n const formState = form?.getState();\n const catalogState = form.getFieldState(\"products.items\");\n const fixedFilter = { active: \"true\" };\n const defaultSort = { field: \"name\", order: \"ASC\" };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = sessionStorage.getItem(`ProductArrayList`);\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? Number(sessionPerPage) : 10\n );\n\n useEffect(() => {\n debugger;\n getProducts();\n }, [account.products?.items, catalogState.value]);\n\n const getProducts = async () => {\n try {\n const input = {\n accountId: account.id,\n activeName: { beginsWith: { active: \"true\" } },\n limit: MAX_ROWS_UPLOAD,\n };\n let resp = await API.graphql(\n graphqlOperation(productByAccountByActiveByName, input)\n );\n let productData = resp.data.productByAccountByActiveByName;\n setAllProducts(productData.items);\n setProducts(productData.items);\n } catch (error) {\n logError(\"ProductArrayList:getProducts\", error, notify);\n }\n };\n\n const listContext = useList({\n ...props,\n data: products || [],\n ids: products?.map(({ id }) => id) || [],\n loaded: true,\n filter: fixedFilter,\n sort: defaultSort,\n perPage: defaultPerPage,\n basePath: \"/products\",\n resource: \"products\",\n });\n\n useEffect(() => {\n if (listContext?.perPage) {\n sessionStorage.setItem(`ProductArrayList`, listContext.perPage);\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n const openConfirm = (redirectPath, state) => {\n setConfirmState({ redirectPath, state });\n setConfirmOpen(true);\n };\n\n const handleConfirm = () => {\n deepRedirect(\n history,\n confirmState.redirectPath,\n props.location.pathname,\n backPath,\n confirmState.state\n );\n };\n\n if (listContext.loading) return <Loading />;\n return (\n <ListContextProvider value={listContext}>\n <ListToolbar\n {...props}\n filters={getListFilters(allProducts, setProducts)}\n actions={\n <ListActions\n history={history}\n formState={formState}\n allProducts={allProducts}\n account={account}\n openConfirm={openConfirm}\n setUploadOpen={setUploadOpen}\n />\n }\n />\n <CatalogGrid\n {...props}\n backPath={backPath}\n history={history}\n account={account}\n formState={formState}\n openConfirm={openConfirm}\n />\n <PaginationToolbar {...props} />\n <Confirm\n isOpen={confirmOpen}\n title=\"Save Confirmation\"\n content=\"You have un-saved Account changes. If you continue, all changes will be lost. Proceed?\"\n onConfirm={() => handleConfirm()}\n onClose={() => setConfirmOpen(false)}\n />\n </ListContextProvider>\n );\n};\n\nconst CatalogGrid = (props) => {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const { account, backPath } = props;\n const hasBulkActions = false;\n const accountFields =\n account?.inventoryCustomFields?.length > 0\n ? account.inventoryCustomFields\n : [];\n const customGridFields = accountFields\n ? accountFields.map((field, index) => {\n return (\n <CustomField\n source={`customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={true}\n />\n );\n })\n : [];\n\n return isSmall ? (\n <CustomizableDatagrid\n rowClick={(id) => handleEdit({ ...props, backPath, record: { id } })}\n basePath=\"/products\"\n hasBulkActions={hasBulkActions}\n storageProp={`ProductArrayList_${account?.id}_small`}\n defaultColumns={[\"productCode\", \"name\", \"defaultUnits\"]}\n >\n {[\n <LowInventoryIcon sortable={false} />,\n <TextField source=\"productCode\" label=\"Product Code\" />,\n <TextField source=\"name\" label=\"Name\" />,\n <TextField source=\"defaultUnits\" label=\"Units\" />,\n ...customGridFields,\n <EditButton {...props} />,\n ]}\n </CustomizableDatagrid>\n ) : (\n <CustomizableDatagrid\n rowClick={(id) => handleEdit({ ...props, record: { id } })}\n basePath=\"/products\"\n hasBulkActions={hasBulkActions}\n storageProp={`ProductArrayList_${account?.id}_large`}\n defaultColumns={[\n \"productCode\",\n \"name\",\n \"category\",\n \"defaultUnits\",\n \"totalInventoryQuantity\",\n \"lowInventoryThreshold\",\n ]}\n >\n {[\n <LowInventoryIcon sortable={false} />,\n <TextField source=\"productCode\" label=\"Product Code\" />,\n <TextField source=\"name\" label=\"Name\" />,\n <TextField source=\"category\" label=\"Commodity Category\" />,\n <TextField source=\"pcs\" label=\"Pieces\" />,\n <TextField source=\"lowInventoryThreshold\" label=\"Low Threshold\" />,\n <TextField source=\"totalInventoryQuantity\" label=\"Total Inventory\" />,\n <TextField source=\"defaultUnits\" label=\"UOM\" />,\n ...customGridFields,\n <CloneButton {...props} />,\n <EditButton {...props} />,\n ]}\n </CustomizableDatagrid>\n );\n};\n","import React, { useState, useEffect } from \"react\";\n\nimport { API, graphqlOperation, Storage } from \"aws-amplify\";\nimport { inboundShipmentByReloadYardByAccount } from \"../../../graphql/inbound/custom-queries\";\nimport { invoiceByAccount } from \"../../../graphql/queries\";\nimport { deleteProduct, deleteService } from \"../../../graphql/mutations\";\n\nimport {\n useDataProvider,\n useNotify,\n useRedirect,\n Button,\n Confirm,\n} from \"react-admin\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport { DeleteIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { removeFile } from \"../../../utils/fileUtils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeepDeleteButton = ({ record, resource, className, ...props }) => {\n const classes = useStyles();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n const [hasDependencies, setHasDependencies] = useState(true);\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n useEffect(() => {\n if (record.reloadYardId) getInboundShipments();\n }, [record]);\n\n const getInboundShipments = async () => {\n try {\n debugger;\n let response = await API.graphql(\n graphqlOperation(inboundShipmentByReloadYardByAccount, {\n reloadYardId: record.reloadYardId,\n accountId: { eq: record.id },\n limit: 1,\n })\n );\n const inboundCount =\n response.data.inboundShipmentByReloadYardByAccount.items.length;\n\n response = await API.graphql(\n graphqlOperation(invoiceByAccount, { accountId: record.id, limit: 1 })\n );\n const invoiceCount = response.data.invoiceByAccount.items.length;\n\n setHasDependencies(inboundCount > 0 || invoiceCount > 0);\n } catch (err) {\n logError(\"accounts:DeepDeleteButton:getInboundShipments\", err, false);\n }\n };\n\n const handleDelete = async (event) => {\n setLoading(true);\n\n try {\n debugger;\n if (record.attachments?.length > 0) {\n await Promise.all(\n record.attachments.map((itm) => {\n return Storage.remove(itm.key);\n })\n );\n }\n if (record.bolTemplate) await removeFile(record, null, \"bolTemplate\");\n if (record.receiptTemplate)\n await removeFile(record, null, \"receiptTemplate\");\n\n if (record?.services?.items?.length > 0) {\n const results = await Promise.allSettled(\n record.services.items.map((item) => {\n if (item.id)\n return API.graphql(\n graphqlOperation(deleteService, { input: { id: item.id } })\n );\n return {};\n })\n );\n\n const resError = results.find((itm) => itm.status === \"rejected\");\n if (resError) {\n logError(\n \"accounts:DeepDeleteButton:handleDelete:deleteService\",\n resError,\n false\n );\n throw resError;\n }\n }\n\n debugger;\n if (record?.products?.items?.length > 0) {\n const results = await Promise.allSettled(\n record.products.items.map((item) => {\n if (item.id)\n return API.graphql(\n graphqlOperation(deleteProduct, { input: { id: item.id } })\n );\n return {};\n })\n );\n\n const resError = results.find((itm) => itm.status === \"rejected\");\n if (resError) {\n logError(\n \"accounts:DeepDeleteButton:handleDelete:deleteProduct\",\n resError,\n false\n );\n throw resError;\n }\n }\n\n debugger;\n await dataProvider.delete(resource, {\n id: record.id,\n previousData: record,\n });\n\n notify(\"Account deleted successfully\");\n redirect(\"/accounts\");\n } catch (err) {\n logError(\n \"accounts:DeepDeleteButton:handleDelete:deleteAccount\",\n err,\n notify\n );\n }\n\n setLoading(false);\n setOpen(false);\n };\n\n if (hasDependencies) return null;\n\n return (\n <>\n <Button\n label=\"Delete\"\n disabled={loading}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n {...props}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={loading}\n title={\"Delete Confirmation\"}\n content={\"Are you sure you want to delete this Account?\"}\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useState, useEffect } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { countInventories } from \"../../../graphql/inventory/custom-queries\";\nimport { updateAccount } from \"../../../graphql/mutations\";\n\nimport { DialogContentText } from \"@material-ui/core\";\nimport ArchiveIcon from \"@material-ui/icons/Archive\";\n\nimport { Button, Confirm, useNotify, useRedirect } from \"react-admin\";\n\nimport { RollbackIcon } from \"../../../components/common\";\nimport { InventoryStatus } from \"../../../utils/constants\";\nimport { logError } from \"../../../utils/appUtils\";\n\nconst getInventory = async (record, setHasDependencies) => {\n try {\n debugger;\n let response = await API.graphql(\n graphqlOperation(countInventories, {\n filter: {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n accountId: { eq: record.id },\n and: [\n { status: { ne: InventoryStatus.SHIPPED } },\n { status: { ne: InventoryStatus.ARCHIVED } },\n ],\n },\n limit: 1,\n })\n );\n const inventoryCount = response.data.searchInventorys.total;\n\n setHasDependencies(inventoryCount > 0);\n } catch (err) {\n logError(\"accounts:DeepArchiveButton:getInventory\", err, false);\n }\n};\n\nexport const ArchiveRestoreButton = ({\n record,\n resource,\n className,\n ...props\n}) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n const [hasDependencies, setHasDependencies] = useState(true);\n const { id, active, businessName, displayName } = record;\n\n const handleSubmit = async () => {\n if (active) {\n if (hasDependencies) {\n notify(\"Account has active inventories.\", \"warning\");\n return;\n } else setOpen(true);\n } else await handleArchive();\n };\n const handleDialogClose = () => setOpen(false);\n\n useEffect(() => {\n if (record.reloadYardId) getInventory(record, setHasDependencies);\n }, [record]);\n\n const handleArchive = async () => {\n setLoading(true);\n try {\n const newActiveState = active === \"true\" ? \"false\" : \"true\";\n await API.graphql(\n graphqlOperation(updateAccount, {\n input: { id, active: newActiveState, businessName, displayName },\n })\n );\n notify(\n newActiveState === \"true\"\n ? \"Account restored successfully\"\n : \"Account archived successfully\"\n );\n redirect(\"/accounts\");\n } catch (error) {\n logError(`accounts:DeepArchiveButton:handleArchive`, error, notify);\n } finally {\n setLoading(false);\n setOpen(false);\n }\n };\n\n return (\n <>\n <Button\n label={record.active === \"true\" ? \"Archive\" : \"Restore\"}\n disabled={loading}\n onClick={handleSubmit}\n color=\"default\"\n {...props}\n >\n {record.active === \"true\" ? <ArchiveIcon /> : <RollbackIcon />}\n </Button>\n <Confirm\n isOpen={open}\n loading={loading}\n title=\"Archive Confirmation\"\n onConfirm={handleArchive}\n content={\n <DialogContentText>\n This action doesn’t delete any records and can be restored at any\n time.\n <br></br>\n Are you sure you want to archive this account?\n </DialogContentText>\n }\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { Backdrop, CircularProgress } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { useNotify, Confirm, SaveButton } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { getCustomFieldId } from \"../../../components/common/CustomFields\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { FilePaths } from \"../../../utils/constants\";\nimport { saveRemoveFile, saveRemoveFiles } from \"../../../utils/fileUtils\";\nimport { deepRedirect, historyAutoGen } from \"../../../utils/utils\";\nimport * as utils from \"./AccountUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n}));\n\nconst validateUnsavedChanges = (services) => {\n let message = null;\n if (services) {\n services.forEach((element) => {\n if (element && !element.id)\n message =\n \"You have un-saved Services Rates. Un-salved changes will be lost! \" +\n \"Proceed without committing changes?\";\n });\n }\n return message;\n};\n\nexport const DialogSaveButton = (props) => {\n const classes = useStyles();\n const form = useForm();\n const notify = useNotify();\n const history = useHistory();\n const { basePath, backPath, record } = props;\n const [open, setOpen] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [allMessages, setAllMessages] = useState([]);\n const [confirmMessageIdx, setConfirmMessageIdx] = useState();\n\n const handleSave = async () => {\n const formState = form.getState();\n const formData = formState.values;\n const newMessages = [];\n debugger;\n\n const unsavedWarning = validateUnsavedChanges(\n formData?.activeServices?.items\n );\n if (unsavedWarning) newMessages.push(unsavedWarning);\n\n if (formState.dirtyFields.email) {\n const emailWarning = await utils.validateEmailUnicity(\n formData.email,\n formData\n );\n if (emailWarning) newMessages.push(emailWarning.message);\n }\n\n if (newMessages.length > 0) {\n setAllMessages(newMessages);\n setConfirmMessageIdx(1);\n setOpen(true);\n } else {\n setConfirmMessageIdx(null);\n handleValidateSave();\n }\n };\n\n const handleValidateSave = async () => {\n debugger;\n setOpen(false);\n\n if (allMessages[confirmMessageIdx]) {\n setConfirmMessageIdx(confirmMessageIdx + 1);\n setOpen(true);\n } else {\n await utils.formValidate(form, notify);\n\n props.handleSubmit();\n }\n };\n\n const handleDialogClose = () => setOpen(false);\n\n const transform = async (data) => {\n setIsSaving(true);\n data = { ...data };\n debugger;\n const includeArrayList = [\n \"inboundCustomFields.name\",\n \"inventoryCustomFields.name\",\n \"outboundCustomFields.name\",\n ];\n data.history = historyAutoGen(form, data, [], includeArrayList);\n\n data.email = data.email.toLowerCase();\n if (data.address?.state)\n data.address.state = data.address.state.toUpperCase();\n if (data.address?.zipCode)\n data.address.zipCode = data.address.zipCode.toUpperCase();\n data.addressState = data.address?.state ? data.address.state : \" \";\n delete data.address?.name;\n\n if (data.billingEmail) data.billingEmail = data.billingEmail.toLowerCase();\n if (data.billingAddress?.state)\n data.billingAddress.state = data.billingAddress.state.toUpperCase();\n if (data.billingAddress?.zipCode)\n data.billingAddress.zipCode = data.billingAddress.zipCode.toUpperCase();\n\n // cleanup GridEdit side-effects\n data.addressBook = data.addressBook?.map(({ id, ...rest }) => rest);\n\n if (data.inboundCustomFields?.length > 0) {\n data.inboundCustomFields.forEach(\n (itm) => (itm.id = itm.id ? itm.id : getCustomFieldId(itm.name))\n );\n }\n if (data.outboundCustomFields?.length > 0) {\n data.outboundCustomFields.forEach(\n (itm) => (itm.id = itm.id ? itm.id : getCustomFieldId(itm.name))\n );\n }\n if (data.inventoryCustomFields?.length > 0) {\n data.inventoryCustomFields.forEach(\n (itm) => (itm.id = itm.id ? itm.id : getCustomFieldId(itm.name))\n );\n }\n\n data.inboundPhotos = data.inboundPhotos || 0;\n data.outboundPhotos = data.outboundPhotos || 0;\n data.inventoryPhotos = data.inventoryPhotos || 0;\n\n try {\n await saveRemoveFiles(\n record,\n data,\n \"attachments\",\n `${FilePaths.ACCOUNT}/${data.id}`\n );\n await saveRemoveFile(\n record,\n data,\n \"bolTemplate\",\n `${FilePaths.ACCOUNT}/${data.id}`\n );\n await saveRemoveFile(\n record,\n data,\n \"receiptTemplate\",\n `${FilePaths.ACCOUNT}/${data.id}`\n );\n } catch (err) {\n logError(\"accounts:DialogSaveButton:saveRemoveFile\", err, notify);\n return Promise.reject();\n }\n\n delete data.activeServices;\n delete data.checklists;\n delete data.productFile;\n delete data.products;\n delete data.services;\n\n return data;\n };\n\n const onSuccess = (data) => {\n notify(`Account updated successfully.`);\n deepRedirect(history, backPath ? backPath : basePath);\n setIsSaving(false);\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\n \"accounts:DialogSaveButton:onFailure:Account Update\",\n error,\n notify\n );\n };\n\n const isPristine = () => {\n const formState = form.getState();\n return formState.pristine;\n };\n\n return (\n <>\n <Backdrop className={classes.backdrop} open={isSaving}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <SaveButton\n label=\"Save\"\n submitOnEnter={false}\n undoable={false}\n disabled={isPristine()}\n saving={isSaving}\n handleSubmitWithRedirect={handleSave}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <Confirm\n isOpen={open}\n loading={isSaving}\n title=\"Save Confirmation\"\n content={allMessages[confirmMessageIdx - 1]}\n onConfirm={handleValidateSave}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useMemo, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { keyBy } from \"lodash\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { createProduct, updateProduct } from \"../../../graphql/mutations\";\n\nimport {\n Backdrop,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n IconButton,\n InputAdornment,\n makeStyles,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\n\nimport {\n ArrayInput,\n BooleanInput,\n Button,\n Confirm,\n Datagrid,\n Edit,\n email,\n FileInput,\n FormDataConsumer,\n FormTab,\n FunctionField,\n ListContextProvider,\n Loading,\n maxLength,\n minLength,\n minValue,\n number,\n NumberField,\n NumberInput,\n regex,\n required,\n SelectInput,\n SimpleFormIterator,\n TabbedForm,\n TextField,\n TextInput,\n Toolbar,\n TopToolbar,\n useEditController,\n useList,\n useNotify,\n useRedirect,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n CountryList,\n MAX_FILES,\n NoteType,\n PaymentTerms,\n Unit,\n UnitOptions,\n REGEX_PHONE,\n ACCEPTED_FILES,\n REGEX_MULTI_EMAIL,\n} from \"../../../utils/constants\";\nimport { handleFileChange } from \"../../../utils/fileUtils\";\nimport { getUnitName, unitOptionRenderer } from \"../../../utils/loadTypeUtils\";\nimport { deepRedirect, getBackPath } from \"../../../utils/utils\";\nimport {\n AddIcon,\n AttachFileIcon,\n CancelIcon,\n CloseIcon,\n EditIcon,\n UploadIcon,\n} from \"../../../components/common\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { HistoryTab } from \"../../../components/common/HistoryTab\";\nimport { ServiceStatusIcon } from \"../services/ServiceStatusIcon\";\nimport { ProductArrayList } from \"../products/ProductArrayList\";\nimport { AccountEditHelp } from \"./AccountHelp\";\nimport { CatalogUpload } from \"./CatalogUpload\";\nimport { DeepDeleteButton } from \"./DeepDeleteButton\";\nimport { ArchiveRestoreButton } from \"./ArchiveRestoreButton\";\nimport { DialogSaveButton } from \"./DialogSaveButton\";\nimport { ContactTab } from \"./AccountContactTab\";\nimport { AccountSettingsTab } from \"./AccountSettingsTab\";\nimport {\n customHeadersToInventoryFields,\n getCustomHeaders,\n} from \"./AccountUtils\";\nimport CustomFieldsInput from \"../../../components/common/CustomFieldsInput\";\n\nconst useStyles = makeStyles((theme) => ({\n arrayInput: {\n marginTop: theme.spacing(-2),\n },\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: \"#fff\",\n },\n boolean: {\n marginTop: theme.spacing(1),\n },\n dialogContent: {\n // https://stackoverflow.com/questions/47698037/how-can-i-set-a-height-to-a-dialog-in-material-ui\n height: \"90vh\",\n },\n dialogTitle: {\n display: \"flex\",\n paddingTop: \"5px\",\n paddingBottom: \"5px\",\n justifyContent: \"space-between\",\n },\n}));\n\nconst validateRequired = required();\nconst validateMultiEmail = [\n required(),\n regex(REGEX_MULTI_EMAIL, \"Must be valid email(s)\"),\n];\nconst validateOptEmail = [email()];\nconst validateOptPhone = [\n regex(REGEX_PHONE, \"Must be valid Phone No.\"),\n minLength(10),\n maxLength(20),\n];\nconst validateState = [required(), minLength(2), maxLength(2)];\nconst validateZip = [required(), minLength(5)];\nconst validateAlerts = [required(), number(), minValue(0)];\n\nconst BillingSetupTab = ({ record, ...props }) => {\n const classes = useStyles();\n const form = useForm();\n const notify = useNotify();\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container item direction=\"row\" spacing={1} lg={10}>\n <Grid item xs={0} md={4}>\n <TextInput\n source=\"accountNumber\"\n label=\"External Acct. Number\"\n variant=\"outlined\"\n fullWidth\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextInput\n source=\"einNumber\"\n label=\"EIN Number\"\n variant=\"outlined\"\n fullWidth\n validate={formData.send1099 ? validateRequired : undefined}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <BooleanInput\n source=\"send1099\"\n label=\"Send 1099\"\n variant=\"outlined\"\n fullWidth\n className={classes.boolean}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n source=\"paymentTerms\"\n label=\"Payment Terms\"\n variant=\"outlined\"\n fullWidth\n choices={PaymentTerms}\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n source=\"inboundBillingUnits\"\n label=\"Inbound Billing Units\"\n variant=\"outlined\"\n fullWidth\n choices={UnitOptions}\n optionText={unitOptionRenderer}\n allowEmpty\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n source=\"outboundBillingUnits\"\n label=\"Outbound Billing Units\"\n variant=\"outlined\"\n fullWidth\n choices={UnitOptions}\n optionText={unitOptionRenderer}\n allowEmpty\n helperText={false}\n />\n </Grid>\n </Grid>\n <Grid container item direction=\"row\" spacing={1} lg={10}>\n <Grid item xs={12} md={4}>\n <NumberInput\n source=\"inventoryStorageThreshold\"\n label=\"Inventory Storage Alert\"\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n validate={validateAlerts}\n helperText=\"Free days of storage\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\"> Days </InputAdornment>\n ),\n inputProps: { min: 0, style: { textAlign: \"right\" } },\n }}\n />\n </Grid>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Email Invoice Optinos\n </Typography>\n </legend>\n <BooleanInput\n source=\"invoiceAttachments\"\n color=\"primary\"\n label=\"Enclose Attachments\"\n helperText={false}\n />\n </fieldset>\n </Grid>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Billing Address\n </Typography>\n </legend>\n <Grid container spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"billingEmail\"\n label=\"Billing email\"\n type=\"email\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toLowerCase() : undefined)}\n validate={validateMultiEmail}\n helperText=\"Comma-seperated email(s)\"\n />\n </Grid>\n </Grid>\n <Grid container spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"billingAddress.name\"\n label=\"Business Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"billingAddress.street\"\n label=\"Street Address\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={5}>\n <TextInput\n source=\"billingAddress.city\"\n label=\"City\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={4} md={2}>\n <TextInput\n source=\"billingAddress.state\"\n label=\"State\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n validate={validateState}\n helperText={false}\n inputProps={{ maxLength: 2 }}\n />\n </Grid>\n <Grid item xs={8} md={2}>\n <TextInput\n source=\"billingAddress.zipCode\"\n label=\"Zip Code\"\n variant=\"outlined\"\n fullWidth\n validate={validateZip}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <SelectInput\n source=\"billingAddress.country\"\n label=\"Country\"\n variant=\"outlined\"\n fullWidth\n allowEmpty\n choices={CountryList}\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n </Grid>\n </fieldset>\n </Grid>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n CUSTOM FIELDS\n </Typography>\n </legend>\n <CustomFieldsInput\n {...props}\n source=\"invoiceCustomFields\"\n displayValues={[]}\n className={classes.arrayInput}\n />\n </fieldset>\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <fieldset>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n BILLING CONTACTS\n </Typography>\n </legend>\n <ArrayInput\n source=\"billingContacts\"\n label=\"\"\n fullWidth\n className={classes.arrayInput}\n >\n <SimpleFormIterator>\n <FormDataConsumer>\n {({\n formData, // The whole form data\n scopedFormData, // The data for this item of the ArrayInput\n getSource, // Function to get the valid source inside an ArrayInput. Translates to \"inventories.items[].property\"\n ...rest\n }) => (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} lg={3}>\n <TextInput\n source={getSource(\"name\")}\n label=\"Contact Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} lg={3}>\n <TextInput\n source={getSource(\"email\")}\n label=\"Email\"\n type=\"email\"\n variant=\"outlined\"\n fullWidth\n parse={(v) =>\n v !== \"\" ? v.toLowerCase() : undefined\n }\n validate={validateOptEmail}\n helperText={false}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <TextInput\n source={getSource(\"phone\")}\n label=\"Phone\"\n variant=\"outlined\"\n fullWidth\n validate={validateOptPhone}\n helperText={false}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <TextInput\n source={getSource(\"description\")}\n label=\"Description\"\n variant=\"outlined\"\n fullWidth\n helperText={false}\n />\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n </fieldset>\n </Grid>\n </Grid>\n <Grid item container direction=\"row\" spacing={0} md={12} xs={false}>\n <Grid item xs={12}>\n <FileInput\n source=\"attachments\"\n label=\"ATTACHMENTS\"\n variant=\"outlined\"\n fullWidth\n className={classes.fileInput}\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop file(s) to\n upload, or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n multiple\n maxFiles={MAX_FILES}\n options={{ maxFiles: MAX_FILES }}\n onChange={(value) =>\n handleFileChange(\"attachments\", value, form, notify)\n }\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst ServicesTab = ({ backPath, record, ...props }) => {\n const form = useForm();\n const history = useHistory();\n\n const fixedFilter = { active: \"true\" };\n\n // Create list context\n const listContext = useList({\n data: record.services.items,\n ids: record.services.items.map((service) => service.id),\n loaded: true,\n loading: false,\n filter: fixedFilter,\n resource: \"services\",\n });\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <ListContextProvider value={listContext}>\n <ServiceRatesDatagrid\n {...props}\n form={form}\n formData={formData}\n history={history}\n services={record.services.items}\n />\n <ServiceAddButton\n {...props}\n form={form}\n formData={formData}\n history={history}\n />\n </ListContextProvider>\n )}\n </FormDataConsumer>\n );\n};\n\nconst rateRender = (record) => {\n if (record && record.taxRate) {\n const { taxCode, taxRate } = record.taxRate;\n return `${taxCode} : ${taxRate}%`;\n }\n return \"\";\n};\n\nconst ServiceRatesDatagrid = ({\n form,\n formData,\n history,\n backPath,\n services,\n ...props\n}) => {\n // Analyze the services to determine which units have rates set\n const unitsWithRates = useMemo(() => {\n // Initialize an object to keep track of units with rates\n const units = {};\n\n // Iterate over each service\n services.forEach((service) => {\n UnitOptions.forEach((unit) => {\n const rate = service[unit.column];\n if (rate != null && rate !== 0) {\n units[unit.id] = unit;\n }\n });\n });\n\n // Return an array of units that have rates set\n return Object.values(units);\n }, [services]);\n\n const openService = (id) => {\n const toPath = `/services/${id}`;\n deepRedirect(history, toPath, props.location.pathname, backPath, {});\n };\n\n return (\n <Datagrid rowClick={openService}>\n <ServiceStatusIcon />\n <TextField source=\"name\" label=\"Service Name\" />\n <TextField source=\"description\" label=\"Description\" />\n <FunctionField\n source=\"taxRate.taxCode\"\n label=\"Tax Rate\"\n render={rateRender}\n />\n {/* Dynamically render unit columns */}\n {unitsWithRates.map((unit) => (\n <NumberField\n key={unit.id}\n source={unit.column}\n label={getUnitName(unit.id)}\n options={{\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }}\n sortable={false}\n />\n ))}\n <ServiceEditButton\n {...props}\n form={form}\n formData={formData}\n history={history}\n backPath={backPath}\n />\n </Datagrid>\n );\n};\n\nconst ServiceEditButton = ({\n form,\n formData,\n backPath,\n history,\n record,\n ...props\n}) => {\n const [open, setOpen] = useState(false);\n const [confirmTitle, setConfirmTitle] = useState(\"\");\n const [confirmContent, setConfirmContent] = useState(\"\");\n\n const toPath = \"/services/\" + record.id;\n\n const handleConfirmEdit = (evt) => {\n const formState = form.getState();\n\n if (formState.dirty) {\n evt.preventDefault();\n setConfirmTitle(\"Un-saved Data Confirmation\");\n setConfirmContent(\n \"You have un-saved Account changes. If you continue, the changes may be lost. Proceed?\"\n );\n setOpen(true);\n } else {\n handleConfirmRedirect();\n }\n };\n\n const handleConfirmClose = () => setOpen(false);\n const handleConfirmRedirect = () => {\n deepRedirect(history, toPath, props.location.pathname, backPath, {});\n };\n\n return (\n <div style={{ display: \"flex\", justifyContent: \"flex-end\" }}>\n <Button label=\"Edit\" color=\"primary\" onClick={handleConfirmEdit}>\n <EditIcon />\n </Button>\n <Confirm\n isOpen={open}\n title={confirmTitle}\n content={confirmContent}\n onConfirm={handleConfirmRedirect}\n onClose={handleConfirmClose}\n />\n </div>\n );\n};\n\nconst ServiceAddButton = ({ form, formData, backPath, history, ...props }) => {\n const [open, setOpen] = useState(false);\n const [confirmTitle, setConfirmTitle] = useState(\"\");\n const [confirmContent, setConfirmContent] = useState(\"\");\n\n const toPath = \"/services/create\";\n\n const handleConfirmAdd = (evt) => {\n const formState = form.getState();\n\n if (formState.dirty) {\n evt.preventDefault();\n setConfirmTitle(\"Un-saved Data Confirmation\");\n setConfirmContent(\n \"You have un-saved Account changes. If you continue, the changes may be lost. Proceed?\"\n );\n setOpen(true);\n } else {\n handleConfirmRedirect();\n }\n };\n\n const handleConfirmClose = () => setOpen(false);\n const handleConfirmRedirect = () => {\n deepRedirect(history, toPath, props.location.pathname, backPath, {\n account: formData,\n });\n };\n\n return (\n <div style={{ display: \"flex\", justifyContent: \"flex-start\" }}>\n <Button label=\"Add\" color=\"default\" onClick={handleConfirmAdd}>\n <AddIcon />\n </Button>\n <Confirm\n isOpen={open}\n title={confirmTitle}\n content={confirmContent}\n onConfirm={handleConfirmRedirect}\n onClose={handleConfirmClose}\n />\n </div>\n );\n};\n\nconst CatalogTab = ({\n backPath,\n record,\n csvErrors,\n setCSVErrors,\n ...props\n}) => {\n const form = useForm();\n const notify = useNotify();\n const classes = useStyles();\n const redirect = useRedirect();\n const [csvData, setCSVData] = useState({});\n const [uploadOpen, setUploadOpen] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n\n form.registerField(\n \"products.items\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n const handleCatalogUpload = async () => {\n if (csvData.products?.length > 0) {\n try {\n debugger;\n setIsSaving(true);\n const oldProductMap =\n record?.products?.items?.length > 0\n ? keyBy(record.products.items, \"productCode\")\n : {};\n const unitEntries = UnitOptions.filter(\n (e) => e.id !== Unit.CAR && e.id !== Unit.TL\n );\n const customHeaders = getCustomHeaders(csvData.products[0]);\n\n const results = await Promise.allSettled(\n csvData.products.map((item) => {\n // check old vs new products\n const oldProduct = oldProductMap[item[\"productCode\"]];\n if (oldProduct) {\n const input = { ...oldProduct, ...item };\n\n input.lowInventoryThreshold = Number(\n item[\"lowInventoryThreshold\"]\n ); // Number parse to 0\n input.pcsHeight = parseFloat(item[\"pcsHeight\"]);\n input.pcsWidth = parseFloat(item[\"pcsWidth\"]);\n input.pcsLength = parseFloat(item[\"pcsLength\"]);\n input.height = parseFloat(item[\"height\"]);\n input.width = parseFloat(item[\"width\"]);\n input.length = parseFloat(item[\"length\"]);\n\n unitEntries.forEach((unit) => {\n input[unit.column] = parseFloat(item[unit.column]);\n });\n\n input.lowInventoryAlert =\n input.totalInventoryQuantity <= input.lowInventoryThreshold;\n\n input.history = [\n ...oldProduct.history,\n {\n text: `Product bulk update`,\n type: NoteType.GENERIC,\n date: new Date(),\n by: window.appUser?.fullName,\n },\n ];\n\n if (customHeaders.length > 0) {\n input.customFields = [];\n customHeaders.forEach((header) => {\n input.customFields.push(`${header}||${item[header]}`);\n delete input[header];\n });\n }\n\n delete input.commodityCateory;\n delete input.createdAt;\n delete input.error;\n return API.graphql(graphqlOperation(updateProduct, { input }));\n } else {\n const input = {\n active: \"true\",\n groups: record.groups,\n reloadYardId: record.reloadYardId,\n accountId: record.id,\n };\n\n input.productCode = item[\"productCode\"];\n input.name = item[\"name\"];\n input.reloadYardCommodityId = item.reloadYardCommodityId;\n input.category = item[\"category\"] ? item[\"category\"] : null;\n input.defaultUnits = item[\"defaultUnits\"];\n input.defaultWeightUnits = item[\"defaultWeightUnits\"]\n ? item[\"defaultWeightUnits\"]\n : null;\n input.inboundBillingUnits = item[\"inboundBillingUnits\"];\n input.outboundBillingUnits = item[\"outboundBillingUnits\"];\n input.lowInventoryThreshold = Number(\n item[\"lowInventoryThreshold\"]\n ); // Number parse to 0\n input.height = parseFloat(item[\"height\"]);\n input.width = parseFloat(item[\"width\"]);\n input.length = parseFloat(item[\"length\"]);\n\n unitEntries.forEach(({ column }) => {\n input[column] = parseFloat(item[column]);\n });\n\n input.totalInventoryQuantity = 0;\n input.lowInventoryAlert = false;\n\n input.history = [\n {\n text: `Product Created`,\n type: NoteType.GENERIC,\n date: new Date(),\n by: window.appUser?.fullName,\n },\n ];\n\n if (customHeaders.length > 0) {\n input.customFields = [];\n customHeaders.forEach((header) => {\n input.customFields.push(`${header}||${item[header]}`);\n });\n }\n\n return API.graphql(graphqlOperation(createProduct, { input }));\n }\n })\n );\n\n const resError = results.find((itm) => itm.status === \"rejected\");\n if (resError) throw resError.reason;\n\n const newProducts = [];\n const updatedProductMap = {};\n results.forEach(\n (result) =>\n result.value.data.createProduct &&\n newProducts.push(result.value.data.createProduct)\n );\n results.forEach((result) => {\n if (result.value.data.updateProduct)\n updatedProductMap[result.value.data.updateProduct.id] =\n result.value.data.updateProduct;\n });\n\n let newProductList = record.products.items.map((itm) =>\n updatedProductMap[itm.id] ? updatedProductMap[itm.id] : itm\n );\n newProductList = [...newProductList, ...newProducts];\n form.change(\"products.items\", newProductList);\n\n customHeadersToInventoryFields(form, customHeaders, record);\n\n notify(\"Products created successfully\");\n } catch (error) {\n logError(\n \"accounts:AccountEdit:handleCatalogUpload\",\n error,\n notify,\n redirect\n );\n } finally {\n setIsSaving(false);\n }\n }\n handleClose();\n };\n\n const handleClose = () => {\n setCSVData({});\n setCSVErrors(null);\n setUploadOpen(false);\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <ProductArrayList\n {...props}\n backPath={backPath}\n form={form}\n account={record}\n uploadOpen={uploadOpen}\n setUploadOpen={setUploadOpen}\n />\n </Grid>\n <Grid item xs={false}>\n <Dialog maxWidth=\"xl\" open={uploadOpen} fullWidth>\n <DialogTitle disableTypography className={classes.dialogTitle}>\n <h2> Catalog Upload </h2>\n <IconButton aria-label=\"close\" onClick={handleClose}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n <DialogContent dividers className={classes.dialogContent}>\n <Backdrop className={classes.backdrop} open={isSaving}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <CatalogUpload\n csvData={csvData}\n setCSVData={setCSVData}\n csvErrors={csvErrors}\n setCSVErrors={setCSVErrors}\n />\n </DialogContent>\n <DialogActions>\n <Button\n label=\"Cancel\"\n color=\"default\"\n autoFocus\n onClick={handleClose}\n >\n <CancelIcon />\n </Button>\n <Button\n label=\"Confirm Upload\"\n color=\"primary\"\n onClick={handleCatalogUpload}\n disabled={csvErrors || isSaving}\n >\n <UploadIcon />\n </Button>\n </DialogActions>\n </Dialog>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst AccountEditToolbar = (props) => {\n return (\n <Toolbar style={{ justifyContent: \"space-between\" }}>\n <DialogSaveButton {...props} />\n <div style={{ display: \"flex\" }}>\n <DeepDeleteButton {...props} />\n <ArchiveRestoreButton {...props} />\n </div>\n </Toolbar>\n );\n};\n\nconst AccountEditActions = (props) => (\n <TopToolbar>\n <HelpButton>\n <AccountEditHelp {...props} />\n </HelpButton>\n <BackButton {...props} />\n </TopToolbar>\n);\n\nconst validateAccountCreate = (csvErrors) => {\n const errors = {};\n if (csvErrors) errors.productFile = \" \";\n\n return errors;\n};\n\nexport const AccountEdit = (props) => {\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const gteMedium = useMediaQuery((theme) => theme.breakpoints.up(\"md\"));\n const { record, loading, loaded } = useEditController(props);\n const [csvErrors, setCSVErrors] = useState();\n const backPath = getBackPath(props);\n\n if (loading || !loaded) return <Loading />;\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Account\" />}\n mutationMode=\"pessimistic\"\n actions={<AccountEditActions {...props} backPath={backPath} />}\n >\n <TabbedForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={<AccountEditToolbar {...props} backPath={backPath} />}\n validate={() => validateAccountCreate(csvErrors)}\n >\n <FormTab path=\"\" label=\"Contact Info\">\n <ContactTab {...props} record={record} />\n </FormTab>\n {gteMedium && (\n <FormTab path=\"billingSetup\" label=\"Billing Setup\">\n <BillingSetupTab {...props} record={record} />\n </FormTab>\n )}\n <FormTab path=\"serviceRates\" label=\"Service Rates\">\n <ServicesTab\n {...props}\n record={record}\n backPath={backPath}\n isXSmall={isXSmall}\n />\n </FormTab>\n {gteMedium && (\n <FormTab path=\"customSettings\" label=\"Custom Settings\">\n <AccountSettingsTab {...props} record={record} />\n </FormTab>\n )}\n {gteMedium && (\n <FormTab path=\"productCatalog\" label=\"Product Catalog\">\n <CatalogTab\n {...props}\n record={record}\n backPath={backPath}\n csvErrors={csvErrors}\n setCSVErrors={setCSVErrors}\n />\n </FormTab>\n )}\n {gteMedium && (\n <FormTab path=\"historyLog\" label=\"History Log\">\n <HistoryTab />\n </FormTab>\n )}\n </TabbedForm>\n </Edit>\n );\n};\n","import React from \"react\";\nimport { Grid } from \"@material-ui/core\";\nimport {\n ArrayField,\n Datagrid,\n EmailField,\n Labeled,\n Show,\n Tab,\n TabbedShowLayout,\n TextField,\n TopToolbar,\n} from \"react-admin\";\nimport { BackButton } from \"../../../components/common/BackButton\";\n\nconst ShowActions = (props) => (\n <TopToolbar>\n <BackButton {...props} />\n </TopToolbar>\n);\n\nexport const AccountShow = (props) => (\n <Show {...props} title=\"View Account\" actions={<ShowActions />}>\n <TabbedShowLayout>\n <Tab label=\"Contact Info\">\n <Grid container spacing={2}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Account Name\">\n <TextField source=\"businessName\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Lot No. Prefix\">\n <TextField source=\"lotNumberPrefix\" />\n </Labeled>\n </Grid>\n <Grid item xs={12}>\n <Labeled label=\"Street\">\n <TextField source=\"address.street\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"City\">\n <TextField source=\"address.city\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"State\">\n <TextField source=\"address.state\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Zip Code\">\n <TextField source=\"address.zipCode\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Phone\">\n <TextField source=\"phone\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Fax\">\n <TextField source=\"fax\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Email\">\n <EmailField source=\"email\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Website\">\n <TextField source=\"website\" />\n </Labeled>\n </Grid>\n <Grid item xs={12}>\n <Labeled label=\"CONTACTS\" fullWidth>\n <ArrayField source=\"contacts\">\n <Datagrid>\n <TextField source=\"name\" label=\"Name\" />\n <EmailField source=\"email\" label=\"Email\" />\n <TextField source=\"phone\" label=\"Phone\" />\n <TextField source=\"description\" label=\"Description\" />\n </Datagrid>\n </ArrayField>\n </Labeled>\n </Grid>\n <Grid item xs={12}>\n <></>\n </Grid>\n </Grid>\n </Tab>\n </TabbedShowLayout>\n </Show>\n);\n","import React from \"react\";\n\nimport { LinearProgress } from \"@material-ui/core\";\n\nimport { logError } from \"../../../utils/appUtils\";\n\nconst computeCompleted = (record) => {\n let processedLocations = {};\n let completedCount = 0;\n\n try {\n if (typeof record.processedLocations === \"string\") {\n processedLocations = !record.processedLocations\n ? {}\n : JSON.parse(record.processedLocations);\n } else {\n processedLocations = !record.processedLocations\n ? {}\n : record.processedLocations;\n }\n } catch (error) {\n logError(\"audits:AuditProgressBar:computeCompleted\", error, false);\n }\n\n Object.keys(processedLocations).forEach((key) => {\n if (processedLocations[key].completed === processedLocations[key].total)\n completedCount++;\n });\n return completedCount;\n};\n\nexport const AuditProgressBar = ({ record, ...props }) => {\n if (!record) return null;\n return (\n <LinearProgress\n color=\"secondary\"\n variant=\"determinate\"\n value={(computeCompleted(record) / record.locations.length) * 100}\n style={{ width: \"100px\" }}\n />\n );\n};\n","import React, { useState } from \"react\";\n\nimport { useMediaQuery, Divider, Tab, Tabs } from \"@material-ui/core\";\n\nimport {\n CreateButton,\n Datagrid,\n DateField,\n EditButton,\n List,\n RefreshButton,\n SimpleList,\n TextField,\n TopToolbar,\n} from \"react-admin\";\n\nimport { isSubscriptionDisabled } from \"../../../utils/appUtils\";\nimport { ChevronRightIcon } from \"../../../components/common\";\nimport { Empty } from \"../../../components/common/Empty\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { AuditStatus } from \"../../../utils/constants\";\nimport { AuditProgressBar } from \"./AuditProgressBar\";\n\nconst ListActions = ({ basePath, ...props }) => (\n <TopToolbar>\n <CreateButton basePath={basePath} disabled={isSubscriptionDisabled()} />\n <RefreshButton />\n </TopToolbar>\n);\n\nconst tabs = [\n { id: AuditStatus.IN_PROGRESS, name: \"In Progress\", showSmall: true },\n { id: AuditStatus.PENDING_REVIEW, name: \"Pending Review\", showSmall: true },\n { id: AuditStatus.COMPLETED, name: \"Completed\", showSmall: false },\n];\n\nexport const AuditList = (props) => {\n const [tabValue, setTabValue] = useState(\n sessionStorage.getItem(\"AuditsTab\")\n ? sessionStorage.getItem(\"AuditsTab\")\n : 0\n );\n\n const defaultSortOrder = { field: \"createDateTime\", order: \"DESC\" };\n const initFilterValues = {\n auditByStatusByDate: {\n reloadYardId: window.appUser?.reloadYardId,\n statusCreateDateTime: {\n beginsWith: { status: tabs[tabValue].id },\n },\n },\n };\n\n return (\n <List\n {...props}\n title={<ForceTitle title=\"Audits\" />}\n filter={initFilterValues}\n sort={defaultSortOrder}\n actions={<ListActions {...props} />}\n bulkActionButtons={false}\n pagination={<Pagination />}\n >\n <AuditTabGrid {...props} tabValue={tabValue} setTabValue={setTabValue} />\n </List>\n );\n};\n\nconst AuditTabGrid = ({ tabValue, setTabValue, ...props }) => {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n\n const handleChange = (event, value) => {\n sessionStorage.setItem(\"AuditsTab\", value);\n setTabValue(value);\n };\n\n return (\n <>\n <Tabs\n value={Number(tabValue)}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n onChange={handleChange}\n >\n {tabs.map(\n (itm, idx) =>\n (!isSmall || itm.showSmall) && (\n <Tab key={itm.id} label={itm.name} id={`audit-${idx}`} />\n )\n )}\n </Tabs>\n <Divider />\n {tabs.map(\n (itm) =>\n itm.id === tabs[tabValue].id && (\n <AuditGrid {...props} key={itm.id} tabValue={itm.id} />\n )\n )}\n </>\n );\n};\n\nconst AuditGrid = ({ ids, tabValue, ...props }) => {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n if (tabValue === AuditStatus.IN_PROGRESS && ids.length === 0)\n return <Empty {...props} message=\"Create a new inventory audit\" />;\n else\n return isXSmall ? (\n <SimpleList\n primaryText={(record) => `${record.accountName}`}\n secondaryText={(record) => `${record.assignedTo}`}\n tertiaryText={(record) => (\n <AuditProgressBar label=\"Progress\" record={record} {...props} />\n )}\n linkType=\"edit\"\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n />\n ) : isSmall ? (\n <Datagrid rowClick=\"edit\">\n <DateField\n source=\"createDateTime\"\n label=\"Create Date\"\n sortable={true}\n />\n <TextField source=\"accountName\" label=\"Account\" sortable={false} />\n <TextField source=\"assignedTo\" label=\"Assigned To\" sortable={false} />\n <AuditProgressBar {...props} label=\"Progress\" sortable={false} />\n </Datagrid>\n ) : (\n <Datagrid rowClick=\"edit\">\n <DateField\n source=\"createDateTime\"\n label=\"Create Date\"\n sortable={true}\n />\n <AuditProgressBar {...props} label=\"Progress\" sortable={false} />\n <TextField source=\"accountName\" label=\"Account\" sortable={false} />\n <TextField source=\"assignedTo\" label=\"Assigned To\" sortable={false} />\n <EditButton />\n </Datagrid>\n );\n};\n","import React from \"react\";\n\nimport { Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n ApproveIcon,\n DeleteIcon,\n EditIcon,\n EditLocationIcon,\n ExportIcon,\n MoreIcon,\n} from \"../../../components/common\";\nimport { getFormTab } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles((theme) => ({\n icon: {\n verticalAlign: \"middle\",\n display: \"inline-flex\",\n },\n}));\n\nexport const AuditCreateHelp = () => {\n const classes = useStyles();\n\n return (\n <>\n <Typography variant=\"subtitle1\">\n Creating a new Inventory Audit does not modify your inventory levels. To\n reconcile counts, you will need to manually edit each inventory item in\n the Reconcile Sheet tab, visible once an Audit is started.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Account: </strong> Specifies which Accounts should be\n inventoried. You can inventory the entire yard, or select a specific\n Account.\n </Typography>\n </li>\n <li>\n <Typography>\n <EditLocationIcon className={classes.icon} />\n <strong> SET ACCOUNT: </strong>\n Opens up an Inventory Map dialog, allowing you to select an Account\n and inspect locations.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Notes: </strong> Add special instructions for the Crew\n performing the Audit.\n </Typography>\n </li>\n </ul>\n </>\n );\n};\n\nexport const AuditEditHelp = (props) => {\n const classes = useStyles();\n var tab = getFormTab(props);\n\n return (() => {\n switch (tab) {\n case \"0\":\n return (\n <>\n <Typography variant=\"subtitle1\">\n <strong>Audit Status</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n This tab allows you to follow the progress the Audit. For audits\n IN PROGRESS, as Crew visits each location, and enters product\n count, the location is highlighted to indicate work in progress,\n completed, or pending. For audits PENDING REVIEW, or COMPLETED\n this tab display a summary of audit results.\n </Typography>\n <Typography variant=\"subtitle1\">\n You can also observe each Crew operator and their current\n location.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Notes: </strong> Update notes or instructions for the\n Crew.\n </Typography>\n </li>\n <li>\n <Typography>\n <DeleteIcon className={classes.icon} />\n <strong> DELETE: </strong>\n Permanently removes unwanted Audit records. Does not affect\n Inventory levels.\n </Typography>\n </li>\n <li>\n <Typography>\n <ApproveIcon className={classes.icon} />\n <strong> MARK COMPLETE: </strong>\n Visible only for Audits that are \"Pending Review\". Sets record\n status to \"Completed\" and clears the record from \"Pending\n Review\" List.\n </Typography>\n </li>\n </ul>\n </>\n );\n case \"1\":\n return (\n <>\n <Typography variant=\"subtitle1\">\n <strong>Reconcile Sheet</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n List of Inventory items, if any, where Physical count did not\n match Quantity On Hand. Also invetnrory records with and Audit\n Note are shown here to capture possible adverse conditions. From\n the list, you can open each item to reconcile count mismatch and\n document resolution in the Inventory Notes. Items with reconciled\n counts show both the Audit counts and Reconciled Counts.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong> Qty. On Hand: </strong>\n Quantity expected to be present based on all prior Inventory\n activities.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong> Qty. Physical: </strong>\n Physical quantity count of inventoried product.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong> Reco. On Hand: </strong>\n Adjusted / reconciled quantity On Hand.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong> Reco. Physical: </strong>\n Adjusted / reconciled Physical quantity.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong> Notes: </strong>\n <MoreIcon className={classes.icon} /> Open the record to\n inspect latest Audit notes.\n </Typography>\n </li>\n <li>\n <Typography>\n <EditIcon className={classes.icon} />\n <strong> EDIT: </strong>\n Opens up corresponding Inventory record. Update either Qty. On\n Hand, or Qty. Physical to bring caunts to match. You can see\n all prior inventory activity in the right-hand sidebar, the\n Notes Tab or, the History Tab. Remember to document resolution\n in the Notes tab. Saving the record, will bring you back to\n this page.\n </Typography>\n </li>\n </ul>\n </>\n );\n case \"2\":\n return (\n <>\n <Typography variant=\"subtitle1\">\n <strong>Audit Rport</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Summary of all Inventory items, listed by Lot Number, or Product\n Code. Quantity On Hand and Physical counts are displayed either\n for each inventrory item, or are tallied up by Product Code. The\n roport show quantities as reconciled.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong> Group By: </strong>\n Select report format. Switch between listing by Lot Number, or\n grouping by Product Code.\n </Typography>\n </li>\n <li>\n <Typography>\n <ExportIcon className={classes.icon} />\n <strong> EXPORT: </strong>\n Each roport format can be exported independently into Excel\n using the EXPORT button.\n </Typography>\n </li>\n </ul>\n </>\n );\n default:\n return <></>;\n }\n })();\n};\n","import React, { useState } from \"react\";\n\nimport {\n useNotify,\n useRedirect,\n Create,\n TopToolbar,\n Toolbar,\n SaveButton,\n SimpleForm,\n TextInput,\n Button,\n} from \"react-admin\";\n\nimport {\n Grid,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n TextField,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { AuditStatus } from \"../../../utils/constants\";\nimport { AuditMap } from \"../../../crewApp/pages/locationSearch/Locations\";\nimport LocationsMap from \"../../../crewApp/pages/audit/LocationsMap\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { AuditCreateHelp } from \"./AuditHelp\";\n\nimport {\n CancelIcon,\n EditLocationIcon,\n SetLocationIcon,\n} from \"../../../components/common\";\n\nconst useStyles = makeStyles((theme) => ({\n accounts: { marginBottom: theme.spacing(1) },\n button: {\n [theme.breakpoints.up(\"sm\")]: {\n marginTop: theme.spacing(0.5),\n },\n [theme.breakpoints.down(\"sm\")]: {\n textAlign: \"center\",\n marginBottom: theme.spacing(1),\n },\n },\n dialogContent: {\n // https://stackoverflow.com/questions/47698037/how-can-i-set-a-height-to-a-dialog-in-material-ui\n height: \"90vh\",\n },\n}));\n\nconst AuditCreateForm = ({\n order,\n auditAccount,\n auditLocations,\n setOrder,\n setAuditAccount,\n setAuditLocations,\n ...props\n}) => {\n const classes = useStyles();\n const [locationOpen, setLocationOpen] = useState(false);\n const [oldAccount, setOldAccount] = useState(\"All accounts\");\n const [oldLocations, setOldLocations] = useState([]);\n const [locations, setLocations] = useState([]);\n const blankAudit = { id: \"blank\", processedLocations: [] };\n\n const handleMapOpen = () => {\n setOldAccount(auditAccount);\n setOldLocations(auditLocations);\n setLocationOpen(true);\n };\n const handleConfirm = () => {\n handleOrder(order);\n setLocationOpen(false);\n };\n const handleCancel = () => {\n setAuditAccount(oldAccount);\n setAuditLocations(oldLocations);\n setLocationOpen(false);\n };\n const handleOrder = (value) => {\n debugger;\n let newWorldOrder = auditLocations;\n setOrder(value);\n if (value === \"ASC\")\n newWorldOrder.sort((a, b) => (a.sortKey > b.sortKey ? 1 : -1));\n else newWorldOrder.sort((a, b) => (a.sortKey < b.sortKey ? 1 : -1));\n setAuditLocations(newWorldOrder);\n setLocations(newWorldOrder);\n };\n\n return (\n <Grid container item direction=\"column\" spacing={1} lg={8}>\n <Grid container direction=\"row\" spacing={1} alignItems=\"center\">\n <Grid item xs={12} md={6}>\n <TextField\n label=\"Account\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n className={classes.accounts}\n disabled={true}\n value={auditAccount?.businessName || \"\"}\n />\n </Grid>\n <Grid item xs={12} md={6} className={classes.button}>\n <Button label=\"Set Account\" size=\"medium\" onClick={handleMapOpen}>\n <EditLocationIcon />\n </Button>\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"overliine\"> Location Map </Typography>\n </Grid>\n <Grid item xs={12}>\n <LocationsMap\n currentAudit={blankAudit}\n locations={locations.map((itm) => itm.id)}\n />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={false}>\n <Dialog\n open={locationOpen}\n maxWidth=\"lg\"\n onClose={handleCancel}\n fullWidth\n >\n <DialogTitle id=\"create-audit\">Select Audit Account</DialogTitle>\n <DialogContent dividers className={classes.dialogContent}>\n <AuditMap\n setAuditAccount={setAuditAccount}\n setAuditLocations={setAuditLocations}\n />\n </DialogContent>\n <DialogActions>\n <Button label=\"CANCEL\" color=\"default\" onClick={handleCancel}>\n <CancelIcon />\n </Button>\n <Button\n label=\"SET LOCATIONS\"\n color=\"primary\"\n onClick={handleConfirm}\n >\n <SetLocationIcon />\n </Button>\n </DialogActions>\n </Dialog>\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <TextInput\n source=\"notes\"\n variant=\"outlined\"\n multiline\n minRows={3}\n fullWidth\n />\n </Grid>\n </Grid>\n </Grid>\n );\n};\n\nconst AuditCreateActions = ({ basePath, ...props }) => (\n <TopToolbar>\n <HelpButton>\n <AuditCreateHelp {...props} />\n </HelpButton>\n <BackButton basePath={basePath} />\n </TopToolbar>\n);\n\nexport const AuditCreate = (props) => {\n const notify = useNotify();\n const redirect = useRedirect();\n\n const [order, setOrder] = useState(\"ASC\");\n const [auditAccount, setAuditAccount] = useState({\n id: null,\n name: \"All accounts\",\n });\n const [auditLocations, setAuditLocations] = useState([]);\n debugger;\n\n const AuditCreateToolbar = (props) => {\n const { basePath } = props;\n\n const transform = (data) => {\n data.active = \"true\";\n data.status = AuditStatus.IN_PROGRESS;\n data.groups = window.appUser?.groups;\n data.createDateTime = new Date();\n data.reloadYardId = window.appUser?.reloadYardId;\n data.accountId = auditAccount.id;\n data.accountName = auditAccount.businessName;\n data.locations = auditLocations.map((itm) => itm.id);\n data.direction = order;\n data.skippedItems = \"[]\";\n data.processedItems = \"[]\";\n data.processedLocations = \"{}\";\n data.nextItem = 0;\n data.nextItems = [];\n\n debugger;\n\n return { ...data };\n };\n\n const onSuccess = (data) => {\n debugger;\n notify(\"Audit created successfully.\");\n redirect(basePath);\n };\n\n const onFailure = (error) => {\n logError(\"audits:AuditCreate:onFailure\", error, notify);\n };\n\n return (\n <Toolbar {...props}>\n <SaveButton\n {...props}\n disabled={auditLocations.length < 1}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n </Toolbar>\n );\n };\n\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New Audit\" />}\n actions={<AuditCreateActions {...props} />}\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={<AuditCreateToolbar />}\n >\n <AuditCreateForm\n order={order}\n auditAccount={auditAccount}\n auditLocations={auditLocations}\n setOrder={setOrder}\n setAuditAccount={setAuditAccount}\n setAuditLocations={setAuditLocations}\n />\n </SimpleForm>\n </Create>\n );\n};\n","import React from \"react\";\nimport { formatDistanceStrict } from \"date-fns\";\n\nimport { Grid, Typography } from \"@material-ui/core\";\n\nconst AuditSummary = ({ currentAudit }) => {\n let matchCount = 0;\n let noMatchCount = 0;\n let itemsNotFound = 0;\n\n currentAudit?.processedItems?.length > 0 &&\n currentAudit.processedItems.forEach((itm) => {\n if (itm.quantityPhysical === 0) itemsNotFound++;\n else if (itm.quantityPhysical !== itm.quantityOnHand) noMatchCount++;\n else if (itm.quantityPhysical === itm.quantityOnHand) matchCount++;\n });\n\n return (\n <Grid container spacing=\"2\">\n <Grid item sm={12}>\n <Typography>\n Total items processed: {currentAudit.processedItems.length}\n </Typography>\n </Grid>\n <Grid item sm={12}>\n <Typography>Items matched: {matchCount}</Typography>\n </Grid>\n <Grid item sm={12}>\n <Typography>Items not matched: {noMatchCount}</Typography>\n </Grid>\n <Grid item sm={12}>\n <Typography>Missing items: {itemsNotFound}</Typography>\n </Grid>\n {currentAudit?.startDateTime && currentAudit?.endDateTime && (\n <Grid item sm={12}>\n <Typography>\n Audit Duration:{\" \"}\n {formatDistanceStrict(\n new Date(currentAudit.startDateTime),\n new Date(currentAudit.endDateTime)\n )}\n </Typography>\n </Grid>\n )}\n <Grid item sm={12}></Grid>\n </Grid>\n );\n};\n\nexport default AuditSummary;\n","import React from \"react\";\n\nimport { Grid, Card, CardContent, Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { TextField, DateField, SelectField } from \"react-admin\";\n\nimport { getFormTab } from \"../../../utils/utils\";\nimport { AuditStatuses } from \"../../../utils/constants\";\nimport OperatorsList from \"../../../crewApp/pages/audit/OperatorsList\";\n\nconst useAsideStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n width: \"18em\",\n minWidth: \"18em\",\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(0.5),\n overflow: \"initial\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n operators: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n },\n item: {\n margin: theme.spacing(0.5),\n },\n}));\n\nexport const AuditEditAside = ({ record, locations, ...props }) => {\n const classes = useAsideStyles();\n var tab = getFormTab(props);\n\n if (!record || tab !== \"0\") return null;\n return (\n <Card className={classes.root}>\n <CardContent>\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Status:\n </Typography>\n <br />\n <SelectField\n source=\"status\"\n record={record}\n choices={AuditStatuses}\n />\n </Grid>\n {record.accountName && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Accounts:\n </Typography>\n <br />\n <TextField source=\"accountName\" record={record} />\n </Grid>\n )}\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Operators:\n </Typography>\n <br />\n <OperatorsList\n currentAudit={record}\n locations={locations}\n classes={classes}\n />\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Updated At:\n </Typography>\n <br />\n <DateField source=\"updatedAt\" showTime={true} record={record} />\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n );\n};\n","import React, { useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport {\n useDataProvider,\n useNotify,\n useRedirect,\n Button,\n Confirm,\n} from \"react-admin\";\n\nimport { taskByReference } from \"../../../graphql/queries\";\nimport { DeleteIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const handleDelete = async (\n record,\n resource,\n dataProvider,\n setLoading,\n notify,\n redirect,\n basePath\n) => {\n debugger;\n setLoading(true);\n try {\n const tasksResp = await API.graphql(\n graphqlOperation(taskByReference, { reference: record.id })\n );\n const tasks = tasksResp.data.taskByReference.items;\n debugger;\n\n if (tasks?.length > 0) {\n const idsToDelete = tasks.map((itm) => itm.id);\n await dataProvider.deleteMany(\"tasks\", { ids: idsToDelete });\n }\n await dataProvider.delete(resource, {\n id: record.id,\n previousData: record,\n });\n\n notify(\"Audit deleted successfully\");\n redirect(basePath);\n } catch (error) {\n logError(\"audits:DeepDeleteButton:handleDelete\", error, notify);\n }\n setLoading(false);\n};\n\nexport const DeepDeleteButton = ({\n record,\n resource,\n basePath,\n className,\n ...props\n}) => {\n const classes = useStyles();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n if (!record) return null;\n return (\n <>\n <Button\n {...props}\n label=\"Delete\"\n disabled={loading}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={loading}\n title={\"Delete Confirmation\"}\n content={\n \"Are you sure you want to delete this Audit and related Tasks, if any?\"\n }\n onConfirm={() =>\n handleDelete(\n record,\n resource,\n dataProvider,\n setLoading,\n notify,\n redirect,\n basePath\n )\n }\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport {\n ArrayField,\n BooleanField,\n Button,\n Datagrid,\n TextField,\n} from \"react-admin\";\n\nimport { BlankIcon, EditIcon, MoreIcon } from \"../../../components/common\";\nimport { AuditStatus } from \"../../../utils/constants\";\n\nconst LinkEditButton = ({ parsedAudit, record, ...props }) => {\n return (\n <Button\n label={parsedAudit.status !== AuditStatus.COMPLETED ? \"Edit\" : \"Open\"}\n color=\"primary\"\n component={Link}\n to={{\n pathname: \"/inventories/\" + record.id,\n state: {\n backPath: props.location.pathname,\n audit:\n parsedAudit.status !== AuditStatus.COMPLETED\n ? parsedAudit\n : undefined,\n },\n }}\n >\n <EditIcon />\n </Button>\n );\n};\n\nconst NoNotesIcon = () => (\n <BlankIcon color=\"disabled\" style={{ display: \"none\" }} />\n);\n\nexport const AuditReconcileTab = ({ record, ...props }) => {\n return (\n <ArrayField source=\"reconcileList\" record={record} label=\"Reconcile List\">\n <Datagrid rowClick={false}>\n <TextField source=\"accountName\" label=\"Customer\" />\n <TextField source=\"productName\" label=\"Product Name\" />\n <TextField source=\"lotNumber\" label=\"Lot Number\" />\n <TextField source=\"locationFullName\" label=\"Location\" />\n <TextField source=\"quantityOnHand\" label=\"Qty. On Hand\" />\n <TextField source=\"quantityPhysical\" label=\"Qty. Physical\" />\n <TextField source=\"reconciledQuantityOnHand\" label=\"Reco. On Hand\" />\n <TextField source=\"reconciledQuantityPhysical\" label=\"Reco. Physical\" />\n <BooleanField\n source=\"seeNotes\"\n label=\"Notes\"\n fontSize=\"small\"\n valueLabelTrue=\"see notes...\"\n TrueIcon={MoreIcon}\n valueLabelFalse=\"\"\n FalseIcon={NoNotesIcon}\n />\n <LinkEditButton {...props} parsedAudit={record} />\n </Datagrid>\n </ArrayField>\n );\n};\n","import React, { useMemo, useState } from \"react\";\nimport jsonExport from \"jsonexport/dist\";\n\nimport { MenuItem, TextField as SelectField } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n downloadCSV,\n useList,\n useListContext,\n Button,\n Datagrid,\n FilterButton,\n ListContextProvider,\n ListToolbar,\n NumberField,\n TextField,\n TopToolbar,\n} from \"react-admin\";\n\nimport { ExportIcon } from \"../../../components/common\";\nimport { Pagination } from \"../../../components/Pagination\";\n\nconst _ = require(\"lodash\");\n\nconst useStyles = makeStyles((theme) => ({\n selectField: {\n marginTop: theme.spacing(0),\n marginBottom: theme.spacing(1),\n minWidth: \"12rem\",\n },\n}));\n\nconst exporter = (reportBy, inventories) => {\n debugger;\n let columns = [];\n let inventoriesForExport = [];\n\n if (reportBy === \"productId\") {\n columns = [\n \"Customer\",\n \"Product Code\",\n \"Product\",\n \"Qty. On Hand\",\n \"Qty. Physical\",\n \"UOM\",\n ];\n\n inventoriesForExport = inventories.map((inventory) => {\n const inventoryForExport = {\n accountName: inventory.accountName,\n productCode: inventory.productCode,\n productName: inventory.productName,\n quantityOnHand: inventory.quantityOnHand,\n quantityPhysical: inventory.quantityPhysical,\n inventoryUnits: inventory.inventoryUnits,\n };\n debugger;\n\n return inventoryForExport;\n });\n } else {\n columns = [\n \"Customer\",\n \"Lot Number\",\n \"Product\",\n \"Qty. On Hand\",\n \"Qty. Physical\",\n \"UOM\",\n ];\n\n inventoriesForExport = inventories.map((inventory) => {\n const inventoryForExport = {\n accountName: inventory.accountName,\n lotNumber: inventory.lotNumber,\n productName: inventory.productName,\n quantityOnHand: inventory.quantityOnHand,\n quantityPhysical: inventory.quantityPhysical,\n inventoryUnits: inventory.inventoryUnits,\n };\n\n return inventoryForExport;\n });\n }\n\n jsonExport(inventoriesForExport, { rename: columns }, (err, csv) => {\n downloadCSV(csv, `inventoryAudit_${new Date().toLocaleDateString()}`); // download as 'inventoryAudit__DATE.csv` file\n });\n};\n\nconst ReportBySelect = ({\n label,\n variant,\n reportBy,\n setReportBy,\n ...props\n}) => {\n const classes = useStyles();\n const choices = [\n { id: \"lotNumber\", name: \"Lot Number\" },\n { id: \"productId\", name: \"Product Code\" },\n ];\n\n return (\n <SelectField\n select\n label={label}\n size=\"small\"\n margin=\"dense\"\n variant={variant}\n className={classes.selectField}\n value={reportBy}\n onChange={(event) => setReportBy(event.target.value)}\n helperText={false}\n >\n {choices?.map((itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {itm.name}\n </MenuItem>\n ))}\n </SelectField>\n );\n};\n\nconst getListFilters = (reportBy, setReportBy) => [\n <ReportBySelect\n label=\"Report By\"\n variant=\"outlined\"\n alwaysOn\n reportBy={reportBy}\n setReportBy={setReportBy}\n />,\n];\n\nconst ListActions = ({ reportBy, ...props }) => {\n const { data } = useListContext();\n const inventories = Object.values(data);\n\n return (\n <TopToolbar>\n <FilterButton />\n <Button\n label=\"Export\"\n disabled={inventories?.length === 0}\n onClick={() => exporter(reportBy, inventories)}\n >\n <ExportIcon />\n </Button>\n </TopToolbar>\n );\n};\n\nexport const AuditReportTab = ({ record, ...props }) => {\n const [loaded, setLoaded] = useState(false);\n const [reportBy, setReportBy] = useState(\"lotNumber\");\n const defaultSort = { field: \"accountName\", order: \"ASC\" };\n const defaultPerPage = 10;\n\n const finalData = useMemo(() => {\n debugger;\n if (\n Array.isArray(record.processedItems) &&\n record.processedItems?.length > 0\n ) {\n let reportData = [];\n\n if (reportBy === \"productId\") {\n reportData = _(record.processedItems)\n .groupBy(\"productId\")\n .map((objs, key) => ({\n id: objs[0].id,\n accountName: objs[0].accountName,\n productId: key,\n productCode: objs[0].productCode,\n productName: objs[0].productName,\n quantityOnHand: objs.reduce(function (sum, record) {\n return record.reconciledQuantityOnHand\n ? sum + record.reconciledQuantityOnHand\n : sum + record.quantityOnHand;\n }, 0),\n quantityPhysical: objs.reduce(function (sum, record) {\n return record.reconciledQuantityPhysical\n ? sum + record.reconciledQuantityPhysical\n : sum + record.quantityPhysical;\n }, 0),\n inventoryUnits: objs[0].inventoryUnits,\n }))\n .value();\n } else {\n reportData = record.processedItems.map((item) => ({\n id: item.id,\n accountName: item.accountName,\n lotNumber: item.lotNumber,\n productName: item.productName,\n quantityOnHand: item.reconciledQuantityOnHand\n ? item.reconciledQuantityOnHand\n : item.quantityOnHand,\n quantityPhysical: item.reconciledQuantityPhysical\n ? item.reconciledQuantityPhysical\n : item.quantityPhysical,\n inventoryUnits: item.inventoryUnits,\n }));\n }\n\n setLoaded(true);\n return reportData;\n }\n return [];\n }, [record.processedItems, reportBy]);\n\n const listContext = useList({\n ...props,\n data: finalData,\n ids: finalData.map(({ id }) => id),\n loaded,\n sort: defaultSort,\n perPage: defaultPerPage,\n basePath: \"/inventories\",\n resource: \"inventories\",\n });\n\n return (\n <ListContextProvider value={listContext}>\n <ListToolbar\n {...props}\n filters={getListFilters(reportBy, setReportBy)}\n actions={<ListActions reportBy={reportBy} />}\n />\n <ReportGrid reportBy={reportBy} />\n <Pagination {...listContext} />\n </ListContextProvider>\n );\n};\n\nconst ReportGrid = ({ reportBy, ...props }) => {\n return (\n <Datagrid rowClick={false} {...props}>\n <TextField source=\"accountName\" label=\"Customer\" />\n {reportBy === \"productId\" ? (\n <TextField source=\"productCode\" label=\"Product Code\" />\n ) : (\n <TextField source=\"lotNumber\" label=\"Lot Number\" />\n )}\n <TextField source=\"productName\" label=\"Product Name\" />\n <NumberField source=\"quantityOnHand\" label=\"Qty. On Hand\" />\n <NumberField source=\"quantityPhysical\" label=\"Qty. Physical\" />\n <TextField source=\"inventoryUnits\" label=\"UOM\" />\n </Datagrid>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { formatDistanceToNow } from \"date-fns\";\n\nimport { Grid, Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n useNotify,\n useRedirect,\n useEditController,\n Edit,\n FormTab,\n SaveButton,\n TabbedForm,\n TextInput,\n Toolbar,\n TopToolbar,\n} from \"react-admin\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { ApproveIcon } from \"../../../components/common\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { NoteType, AuditStatus } from \"../../../utils/constants\";\nimport OperatorsList from \"../../../crewApp/pages/audit/OperatorsList\";\nimport LocationsMap from \"../../../crewApp/pages/audit/LocationsMap\";\nimport AuditSummary from \"./AuditSummary\";\nimport { AuditEditHelp } from \"./AuditHelp\";\nimport { AuditEditAside } from \"./AuditEditAside\";\nimport { DeepDeleteButton } from \"./DeepDeleteButton\";\nimport { AuditReconcileTab } from \"./AuditReconcileTab\";\nimport { AuditReportTab } from \"./AuditReportTab\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n paddingTop: theme.spacing(2),\n },\n progress: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 300,\n },\n operators: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n marginRight: theme.spacing(1),\n flexWrap: \"wrap\",\n },\n item: {\n margin: theme.spacing(0.5),\n },\n saveButton: {\n marginRight: theme.spacing(2),\n },\n}));\n\nconst parseAuditData = (record, notify) => {\n const audit = { ...record };\n if (audit) {\n try {\n debugger;\n if (typeof audit.processedItems === \"string\") {\n audit.processedItems = !audit.processedItems\n ? []\n : JSON.parse(audit.processedItems);\n audit.processedItems = audit.processedItems.map((itm) => {\n return {\n ...itm,\n seeNotes:\n itm.notes &&\n itm.notes.findIndex(\n (note) =>\n note.type === NoteType.AUDIT &&\n note.date >= audit.createdAt &&\n note.date <=\n (audit.endDateTime ? audit.endDateTime : audit.updatedAt)\n ) >= 0,\n };\n });\n }\n if (typeof audit.skippedItems === \"string\") {\n audit.skippedItems = !audit.skippedItems\n ? []\n : JSON.parse(audit.skippedItems);\n }\n if (typeof audit.processedLocations === \"string\") {\n audit.processedLocations = !audit.processedLocations\n ? {}\n : JSON.parse(audit.processedLocations);\n }\n\n if (Array.isArray(audit.processedItems))\n audit.reconcileList = audit.processedItems.filter(\n (itm) => itm.quantityMismatch || itm.seeNotes\n );\n else audit.reconcileList = [];\n } catch (error) {\n logError(\"audits:AuditEdit:parseAuditData:Parsing JSON\", error, notify);\n }\n }\n return audit;\n};\n\nconst AuditStatusTab = ({ record, parsedAudit, locations, ...props }) => {\n const classes = useStyles();\n\n if (record.status === AuditStatus.IN_PROGRESS)\n return (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n {true && (\n <Typography>{`Created: ${formatDistanceToNow(\n new Date(record.createdAt)\n )} ago`}</Typography>\n )}\n </Grid>\n <Grid item xs={12}>\n <LocationsMap currentAudit={parsedAudit} locations={locations} />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <OperatorsList\n currentAudit={record}\n locations={locations}\n classes={classes}\n />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <TextInput\n source=\"notes\"\n label=\"Notes\"\n variant=\"outlined\"\n multiline\n minRows={4}\n fullWidth\n />\n </Grid>\n </Grid>\n </Grid>\n );\n else\n return (\n <Grid container direction=\"column\" spacing={1} className={classes.root}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <AuditSummary currentAudit={parsedAudit} />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <TextInput\n source=\"notes\"\n label=\"Notes\"\n variant=\"outlined\"\n multiline\n minRows={4}\n fullWidth\n disabled={record.status === AuditStatus.COMPLETED}\n />\n </Grid>\n </Grid>\n </Grid>\n );\n};\n\nconst AuditEditActions = ({ basePath, data, ...props }) => (\n <TopToolbar>\n <HelpButton>\n <AuditEditHelp {...props} />\n </HelpButton>\n <BackButton basePath={basePath} />\n </TopToolbar>\n);\n\nexport const AuditEdit = (props) => {\n const classes = useStyles();\n const notify = useNotify();\n const redirect = useRedirect();\n const { record } = useEditController(props);\n const [parsedAudit, setParsedAudit] = useState();\n let locations = record?.locations;\n\n useEffect(() => {\n if (record) setParsedAudit(parseAuditData(record, notify));\n }, [record]);\n\n const completeTransform = (data) => {\n debugger;\n data.status = AuditStatus.COMPLETED;\n return transform(data);\n };\n\n const transform = (data) => {\n debugger;\n delete data.reconcileList;\n return data;\n };\n\n const onSuccess = async ({ data }) => {\n debugger;\n notify(`Audit updated successfully.`);\n redirect(\"/audits\");\n };\n\n const onFailure = (error) => {\n logError(\"audits:AuditEdit:onFailure:Audit Update\", error, notify);\n };\n\n const AuditEditToolbar = (props) => {\n debugger;\n return (\n record.status !== AuditStatus.COMPLETED && (\n <Toolbar style={{ justifyContent: \"space-between\" }} {...props}>\n <div>\n <SaveButton\n label=\"Save\"\n {...props}\n disabled={props.pristine}\n className={classes.saveButton}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n {record.status === AuditStatus.PENDING_REVIEW && (\n <SaveButton\n label=\"Mark Complete\"\n {...props}\n icon={<ApproveIcon />}\n transform={completeTransform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n )}\n </div>\n {record.status === AuditStatus.IN_PROGRESS && <DeepDeleteButton />}\n </Toolbar>\n )\n );\n };\n\n if (!parsedAudit) return null;\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Audit\" />}\n undoable={false}\n actions={<AuditEditActions {...props} />}\n aside={\n <AuditEditAside record={record} locations={locations} {...props} />\n }\n >\n <TabbedForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={<AuditEditToolbar {...props} record={record} />}\n >\n <FormTab label=\"Audit Status\">\n <AuditStatusTab\n {...props}\n record={record}\n parsedAudit={parsedAudit}\n locations={locations}\n />\n </FormTab>\n {record.status !== AuditStatus.IN_PROGRESS && (\n <FormTab label=\"Reconcile Sheet\">\n <AuditReconcileTab {...props} record={parsedAudit} />\n </FormTab>\n )}\n {record.status !== AuditStatus.IN_PROGRESS && (\n <FormTab label=\"Audit Report\">\n <AuditReportTab {...props} record={parsedAudit} />\n </FormTab>\n )}\n </TabbedForm>\n </Edit>\n );\n};\n","const americanTransloadingSolutions = {\n id: \"18567be7-5e38-4a33-b947-f380620326c1\",\n greg: \"3ed552aa-f380-4faf-af45-30470168f78f\",\n manny: \"623ab185-e463-4331-b09c-1bd62444ffbb\",\n};\n\nexport const customLogic = () => {\n const appUser = window.appUser;\n\n if (appUser.reloadYardId === americanTransloadingSolutions.id) {\n if (\n appUser.id !== americanTransloadingSolutions.greg &&\n appUser.id !== americanTransloadingSolutions.manny\n ) {\n return true;\n }\n }\n\n return false;\n};\n","import React, { useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { updateInvoice } from \"../../../graphql/mutations\";\n\nimport { Backdrop, CircularProgress, makeStyles } from \"@material-ui/core\";\n\nimport {\n Button,\n useListContext,\n useNotify,\n useRedirect,\n useRefresh,\n} from \"react-admin\";\n\nimport { CheckIcon, DoubleCheckIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { InvoiceStatus, NoteType } from \"../../../utils/constants\";\nimport { getInvoice } from \"../../../graphql/queries\";\nimport { customLogic } from \"./customLogic\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: \"#fff\",\n },\n}));\n\nconst isButtonDisabled = (loading) => {\n return loading || customLogic();\n};\n\nexport const MarkPaidButton = ({ record }) => {\n const notify = useNotify();\n const refresh = useRefresh();\n const [loading, setLoading] = useState(false);\n\n const saveInvoice = async () => {\n try {\n setLoading(true);\n debugger;\n if (record) {\n const historyNote = {\n text: \"Invoice Settled\",\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.GENERIC,\n };\n\n const input = {\n id: record.id,\n reloadYardId: record.reloadYardId,\n invoiceNumber: record.invoiceNumber,\n accountId: record.accountId,\n accountName: record.accountName,\n status: InvoiceStatus.PAID,\n dueDate: record.dueDate,\n paidDate: new Date(),\n balance: 0,\n history: [...record.history, historyNote],\n };\n await API.graphql(graphqlOperation(updateInvoice, { input }));\n }\n\n notify(\"Invoice updated successfully.\", \"info\");\n refresh();\n } catch (error) {\n logError(\"invoices:MarkPaidButton:saveInvoice\", error, notify);\n } finally {\n setLoading(false);\n }\n };\n\n const handleUpdate = (e) => {\n e.stopPropagation();\n e.nativeEvent.stopImmediatePropagation();\n saveInvoice();\n };\n\n if (record.status === InvoiceStatus.PAID) return null;\n return (\n <Button\n label=\"Mark Settled\"\n color=\"primary\"\n onClick={handleUpdate}\n disabled={isButtonDisabled(loading)}\n loading={loading}\n >\n <CheckIcon />\n </Button>\n );\n};\n\nexport const BulkMarkPaidButton = (props) => {\n const classes = useStyles();\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n\n const {\n // fetched data\n data, // an id-based dictionary of the list data, e.g. { 123: { id: 123, title: 'hello world' }, 456: { ... } }\n selectedIds, // an array listing the ids of the selected rows, e.g. [123, 456]\n onUnselectItems,\n } = useListContext();\n const [loading, setLoading] = useState(false);\n\n const updateInvoices = async () => {\n try {\n setLoading(true);\n debugger;\n\n let promiseList = [];\n selectedIds.forEach((invoiceId) => {\n if (!data[invoiceId])\n promiseList.push(\n API.graphql(graphqlOperation(getInvoice, { id: invoiceId }))\n );\n });\n let results = await Promise.all(promiseList);\n results.forEach((res) => {\n data[res.data.getInvoice.id] = res.data.getInvoice;\n });\n\n const historyNote = {\n text: `Invoice settled`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.GENERIC,\n };\n\n await Promise.all(\n selectedIds.map((invoiceId) => {\n const record = data[invoiceId];\n\n if (record) {\n const input = {\n id: record.id,\n reloadYardId: record.reloadYardId,\n invoiceNumber: record.invoiceNumber,\n accountId: record.accountId,\n accountName: record.accountName,\n status: InvoiceStatus.PAID,\n dueDate: record.dueDate,\n paidDate: new Date(),\n balance: 0,\n history: [...record.history, historyNote],\n };\n return API.graphql(graphqlOperation(updateInvoice, { input }));\n }\n })\n );\n\n notify(\"Invoices updated successfully.\", \"info\");\n onUnselectItems();\n refresh();\n } catch (error) {\n logError(\n \"invoices:BulkMarkPaidButton:updateInvoices\",\n error,\n notify,\n redirect\n );\n } finally {\n setLoading(false);\n }\n };\n\n const handleUpdate = (e) => {\n e.stopPropagation();\n e.nativeEvent.stopImmediatePropagation();\n updateInvoices();\n };\n\n return (\n <>\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Button\n label=\"Mark Settled\"\n onClick={handleUpdate}\n color={props.color || \"default\"}\n disabled={isButtonDisabled(loading)}\n loading={loading}\n >\n <DoubleCheckIcon />\n </Button>\n </>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport jsonExport from \"jsonexport/dist\";\n\nimport { API } from \"aws-amplify\";\n\nimport {\n Card,\n Divider,\n Grid,\n Hidden,\n Tab,\n Tabs,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport classnames from \"classnames\";\n\nimport {\n BulkActionsToolbar,\n BulkExportButton,\n Confirm,\n CreateButton,\n Datagrid,\n DateField,\n DateInput,\n downloadCSV,\n EditButton,\n FilterButton,\n ListContextProvider,\n ListToolbar,\n NumberField,\n RefreshButton,\n SimpleList,\n TextField,\n Title,\n TopToolbar,\n useListContext,\n useNotify,\n useRedirect,\n useRefresh,\n} from \"react-admin\";\n\nimport { isSubscriptionDisabled, logError } from \"../../../utils/appUtils\";\nimport { ChevronRightIcon } from \"../../../components/common\";\nimport { Empty } from \"../../../components/common/Empty\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { InvoiceStatus, PaymentTerms } from \"../../../utils/constants\";\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\nimport { InvoicePeak } from \"./InvoicePeak\";\nimport { InvoiceStatusIcon } from \"./InvoiceStatusIcon\";\nimport { MarkPaidButton, BulkMarkPaidButton } from \"./MarkPaidButtons\";\nimport { getMemo, updateLambdaTransform } from \"./InvoiceUtils\";\nimport { exportCustomField } from \"../../../utils/utils\";\nimport { AccountDropDown } from \"../../../components/common/AccountDropDown\";\n\nconst useStyles = makeStyles((theme) => ({\n listRoot: {\n transition: theme.transitions.create([\"all\"], {\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginTop: 0,\n },\n bulkActions: {\n // [classes.bulkActions] remove to restore original behavior\n marginTop: -theme.spacing(8),\n transition: theme.transitions.create(\"margin-top\"),\n },\n totals: {\n marginLeft: theme.spacing(2),\n },\n}));\n\nconst tabs = [\n { id: InvoiceStatus.NEW, name: \"New\", showSmall: true },\n { id: InvoiceStatus.PENDING, name: \"Pending\", showSmall: true },\n { id: InvoiceStatus.PAID, name: \"Settled\", showSmall: true },\n];\n\nconst exporter = (invoices, setinvoices, notify, onUnselectItems) => {\n const invoicesForExport = [];\n const customHeaderMap = new Map();\n\n const handleUndefined = (item) => (item ? item : \"\");\n const getTerms = (paymentTerms) =>\n !paymentTerms\n ? \"\"\n : PaymentTerms.find((itm) => itm.id === paymentTerms).name;\n const getServiceName = (invoice, serviceId) => {\n return !invoice.account?.services\n ? \"\"\n : invoice.account.services.items.find((itm) => itm.id === serviceId).name;\n };\n const getServiceDate = (invoice, serviceDate) => {\n return new Date(\n serviceDate ? serviceDate : invoice.createdAt\n ).toLocaleDateString();\n };\n\n try {\n invoices.forEach((invoice) => {\n invoice.lineItems.items.forEach((element, idx) => {\n const invoiceLineItem = {\n InvoiceNo: invoice.invoiceNumber,\n Customer: idx === 0 ? invoice.accountName : \"\",\n InvoiceDate:\n idx === 0 ? new Date(invoice.createdAt).toLocaleDateString() : \"\",\n DueDate:\n idx === 0 ? new Date(invoice.dueDate).toLocaleDateString() : \"\",\n Terms:\n idx === 0 && invoice.account\n ? getTerms(invoice.account.paymentTerms)\n : \"\",\n Memo: idx === 0 ? getMemo(invoice) : \"\",\n Item: getServiceName(invoice, element.serviceId),\n ItemDescription: handleUndefined(element.serviceNote),\n ItemQuantity: element.quantity,\n ItemRate: element.unitCost,\n ItemAmount: element.amount,\n ItemTaxCode: element.taxRate.taxCode,\n ItemTaxAmount: element.itemTax,\n Currency: \"USD\",\n ServiceDate: getServiceDate(invoice, element.serviceDate),\n };\n\n // DO NOT REMOVE!!! for Green Mile Logistics Only.\n invoiceLineItem.poNumber = invoice.poNumber;\n if (\n idx === 0 &&\n window.appUser.reloadYardId === \"aa44b626-20a5-4a87-bd40-49d774bc4817\"\n ) {\n invoiceLineItem.carTrlNumber = invoice.railCarNumber;\n }\n\n if (invoice.customFields?.length > 0) {\n invoice.customFields.forEach((field) => {\n exportCustomField(field, invoiceLineItem, customHeaderMap);\n });\n }\n\n invoicesForExport.push(invoiceLineItem);\n });\n });\n\n jsonExport(\n invoicesForExport,\n {\n rename: [\n \"InvoiceNo\",\n \"Customer\",\n \"InvoiceDate\",\n \"DueDate\",\n \"Terms\",\n \"Memo\",\n \"Item(Product/Service)\",\n \"ItemDescription\",\n \"ItemQuantity\",\n \"ItemRate\",\n \"ItemAmount\",\n \"ItemTaxCode\",\n \"ItemTaxAmount\",\n \"Currency\",\n \"ServiceDate\",\n // ...customHeaderMap.keys()\n ], // order fields in the export\n },\n (err, csv) => {\n downloadCSV(csv, `invoices_${new Date().toLocaleDateString()}`); // download as 'invoices_date.csv` file\n }\n );\n } catch (err) {\n logError(\"invoices:InvoiceList:exporter\", err, notify);\n } finally {\n setinvoices(invoices);\n onUnselectItems();\n }\n};\n\nconst handlePendingUpdate = async (\n invoices,\n setinvoices,\n setSaving,\n notify,\n redirect,\n refresh\n) => {\n setSaving(true);\n debugger;\n\n try {\n const invoiceUpdateList = updateLambdaTransform(invoices);\n\n const response = await API.post(\"transREST\", \"/invoiceUpdateBulk\", {\n body: {\n invoiceUpdateList: invoiceUpdateList,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n if (response.error) throw response.error;\n\n notify(\"Invoices updated successfully.\", \"info\");\n } catch (err) {\n logError(\"invoices:InvoiceList:handlePendingUpdate\", err, notify, redirect);\n } finally {\n setSaving(false);\n setinvoices([]);\n refresh();\n }\n};\n\nconst InvoiceSearchField = (props) => {\n const { label, alwaysOn } = props;\n const { displayedFilters, filterValues, setFilters } = useListContext(props);\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n setFilters(\n {\n ...filterValues,\n or: [\n { accountName: { matchPhrasePrefix: `${value}` } },\n { invoiceNumber: { matchPhrasePrefix: `.*${value}.*` } },\n { invoiceNumber: { wildcard: `*${value}*` } },\n { poNumber: { matchPhrasePrefix: `${value}` } },\n { poNumber: { wildcard: `*${value}*` } },\n { railCarNumber: { matchPhrasePrefix: `${value}` } },\n { railCarNumber: { wildcard: `*${value}*` } },\n { pickupNumber: { matchPhrasePrefix: `${value}` } },\n { pickupNumber: { wildcard: `*${value}*` } },\n { customFields: { matchPhrasePrefix: `${value}` } },\n { customFields: { wildcard: `*${value}*` } },\n ],\n },\n displayedFilters\n );\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = (mdDown, tabValue) => {\n return [\n <AccountDropDown\n source=\"accountId.eq\"\n label=\"Account\"\n alwaysOn={!mdDown}\n />,\n <InvoiceSearchField label=\"Search\" tabValue={tabValue} alwaysOn />,\n <DateInput\n source=\"createdAt.lte\"\n label=\"Issued Before...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"createdAt.gte\"\n label=\"Issued After...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"dueDate.lte\"\n label=\"Due Before...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n <DateInput\n source=\"dueDate.gte\"\n label=\"Due After...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n ];\n};\n\nconst BulkListActions = ({ tabValue, ...props }) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const [saving, setSaving] = useState(false);\n const [invoices, setinvoices] = useState([]);\n const { onUnselectItems } = useListContext();\n\n return (\n <>\n <Confirm\n isOpen={invoices?.length > 0}\n loading={saving}\n title=\"Advance Confirmation\"\n content=\"Advance exported Invoices to PENDING status?\"\n onConfirm={() =>\n handlePendingUpdate(\n invoices,\n setinvoices,\n setSaving,\n notify,\n redirect,\n refresh\n )\n }\n onClose={() => setinvoices([])}\n />\n {tabs[tabValue].id !== InvoiceStatus.PAID ? (\n <BulkMarkPaidButton {...props} color=\"default\" />\n ) : null}\n <BulkExportButton\n {...props}\n exporter={(data) =>\n exporter(data, setinvoices, notify, onUnselectItems)\n }\n color=\"default\"\n />\n </>\n );\n};\n\nconst ListActions = (props) => {\n const { isXSmall, basePath } = props;\n\n return !isXSmall ? (\n <TopToolbar>\n <FilterButton />\n <CreateButton basePath={basePath} disabled={isSubscriptionDisabled()} />\n <RefreshButton />\n </TopToolbar>\n ) : null;\n};\n\nconst getSessionTab = () => {\n const sessionTab = Number(sessionStorage.getItem(`InvoicesTab`));\n if (sessionTab && tabs[sessionTab]) {\n return sessionTab;\n }\n return 0; // Default to the first visible tab if the sessionTab is not valid\n};\n\nexport const InvoiceList = (props) => {\n const classes = useStyles();\n const mdDown = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n const [tabValue, setStateTabValue] = useState(getSessionTab());\n const [defaultFilter, setDefaultFilter] = useState({\n reloadYardId: window.appUser.reloadYardId,\n statusDueDateAccountName: {\n beginsWith: {\n status: tabs[tabValue].id,\n },\n },\n });\n const [defaultSearchFilter, setDefaultSearchFilter] = useState({\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: tabs[tabValue].id },\n });\n\n const setTabValue = (value) => {\n debugger;\n setStateTabValue(value);\n setDefaultFilter({\n reloadYardId: window.appUser.reloadYardId,\n statusDueDateAccountName: {\n beginsWith: {\n status: tabs[value].id,\n },\n },\n });\n setDefaultSearchFilter({\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: tabs[value].id },\n });\n };\n\n // Include key & search to display default sort order.\n const defaultSort = {\n field: `{\"key\":\"invoiceByStatusByDateByAccount\", \"search\":\"dueDate\"}`,\n order: \"DESC\",\n };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = Number(\n localStorage.getItem(`${props.resource}_perPage`)\n );\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? sessionPerPage : 10\n );\n\n const listContext = useSearchableList({\n ...props,\n defaultTitle: \"Invoices\",\n defaultFilter: defaultFilter,\n defaultSearchFilter: defaultSearchFilter,\n defaultPerPage: defaultPerPage,\n defaultSort: defaultSort,\n resource: \"invoices\",\n });\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n useEffect(() => {\n if (listContext?.filter) {\n // Extract the key query from defaultSort\n const fieldObj = JSON.parse(defaultSort.field);\n const keyToCheck = fieldObj.key;\n\n // Check for the key's presence in filter\n const hasKey = keyToCheck in listContext.filter;\n const hasFilterValues = Object.keys(listContext.filterValues).length > 0;\n if (hasKey && hasFilterValues) listContext.setFilters({});\n }\n }, [listContext?.filter]);\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Invoices\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters(mdDown, tabValue)}\n actions={<ListActions isXSmall={isXSmall} />}\n />\n <Card\n className={classnames(\n classes.listRoot,\n { [classes.bulkActions]: listContext.selectedIds.length > 0 }\n // [classes.bulkActions] remove to restore original behavior\n )}\n >\n <BulkActionsToolbar>\n <BulkListActions tabValue={tabValue} />\n </BulkActionsToolbar>\n <InvoiceTabs\n {...props}\n {...listContext}\n tabValue={tabValue}\n setTabValue={setTabValue}\n isXSmall={isXSmall}\n isMedium={mdDown}\n />\n <PaginationToolbar {...props} />\n </Card>\n </ListContextProvider>\n );\n};\n\nconst PaginationToolbar = (props) => {\n const classes = useStyles();\n const listContext = useListContext(props);\n\n var formatter = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n // These options are needed to round to whole numbers if that's what you want.\n //minimumFractionDigits: 0, // (this suffices for whole numbers, but will print 2500.10 as $2,500.1)\n //maximumFractionDigits: 0, // (causes 2500.99 to be printed as $2,501)\n });\n\n const [totals, setTotals] = useState({ subtotal: 0, tax: 0, total: 0 });\n\n useEffect(() => {\n debugger;\n if (listContext?.ids?.length > 0 && listContext?.data) {\n let subtotal = 0,\n tax = 0,\n total = 0;\n\n listContext.ids?.forEach((id) => {\n subtotal += listContext.data[id].subtotal;\n tax += listContext.data[id].tax;\n total += listContext.data[id].total;\n });\n\n setTotals({ subtotal, tax, total });\n }\n }, [listContext]);\n\n return (\n <Grid container direction=\"row\" spacing={1} alignItems=\"center\">\n <Hidden mdDown>\n <Grid item xs={0} md={5}>\n <Typography className={classes.totals}>\n {`SUBTOTAL: ${formatter.format(\n totals.subtotal\n )}, TAX: ${formatter.format(totals.tax)}, TOTAL: ${formatter.format(\n totals.total\n )}`}\n </Typography>\n </Grid>\n </Hidden>\n <Grid item xs={12} md={7}>\n <Pagination {...props} {...listContext} />\n </Grid>\n </Grid>\n );\n};\n\nconst InvoiceTabs = ({ tabValue, setTabValue, setPage, ...props }) => {\n const { isXSmall } = props;\n\n const handleChange = (event, value) => {\n sessionStorage.setItem(\"InvoicesTab\", value);\n setPage(1);\n setTabValue(value);\n };\n\n return (\n <>\n <Tabs\n value={tabValue}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n onChange={handleChange}\n >\n {tabs.map(\n (itm, idx) =>\n (!isXSmall || itm.showSmall) && (\n <Tab key={itm.id} label={itm.name} id={`invoice-${idx}`} />\n )\n )}\n </Tabs>\n <Divider />\n {tabs.map(\n (itm) =>\n itm.id === tabs[tabValue].id && (\n <InvoiceGrid {...props} key={itm.id} tabValue={itm.id} />\n )\n )}\n </>\n );\n};\n\nconst InvoiceGrid = ({ ids, page, tabValue, ...props }) => {\n const { isXSmall, isMedium } = props;\n const hasBulkActions = true;\n\n if (tabValue === InvoiceStatus.NEW && ids.length === 0 && page === 1)\n return <Empty {...props} message=\"Create a new invoice\" />;\n else\n return isXSmall ? (\n <SimpleList\n primaryText={(record) => record.accountName}\n secondaryText={(record) =>\n `Invoice No: ${record.invoiceNumber} - Due: ${new Date(\n record.dueDate\n ).toLocaleDateString()}`\n }\n tertiaryText={(record) =>\n record.total.toLocaleString(undefined, {\n style: \"currency\",\n currency: \"USD\",\n })\n }\n leftIcon={(record) => <InvoiceStatusIcon record={record} />}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n linkType=\"edit\"\n />\n ) : isMedium ? (\n <Datagrid {...props} rowClick=\"edit\" hasBulkActions={hasBulkActions}>\n <TextField source=\"accountName\" label=\"Customer\" sortable={true} />\n <NumberField\n source=\"total\"\n label=\"Amount\"\n sortable={true}\n options={{\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }}\n />\n <InvoiceStatusIcon source=\"status\" label=\"Status\" sortable={false} />\n <TextField source=\"invoiceNumber\" label=\"Invoice No.\" sortable={true} />\n {tabValue !== InvoiceStatus.PAID ? <MarkPaidButton /> : null}\n </Datagrid>\n ) : (\n <Datagrid\n {...props}\n rowClick=\"edit\"\n hasBulkActions={hasBulkActions}\n expand={<InvoicePeak />}\n >\n <TextField source=\"accountName\" label=\"Customer\" sortable={true} />\n <NumberField\n source=\"total\"\n label=\"Amount Due\"\n sortable={true}\n options={{\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }}\n />\n <DateField\n source=\"dueDate\"\n sortable={true}\n sortBy={`{\"key\":\"invoiceByStatusByDateByAccount\", \"search\":\"dueDate\"}`}\n />\n <InvoiceStatusIcon source=\"status\" label=\"Status\" sortable={false} />\n {tabValue === InvoiceStatus.PAID ? (\n <DateField source=\"paidDate\" label=\"Settled\" sortable={true} />\n ) : null}\n {tabValue === InvoiceStatus.PENDING ||\n tabValue === InvoiceStatus.PAID ? (\n <DateField source=\"sentDate\" label=\"Sent\" sortable={true} />\n ) : null}\n <TextField source=\"poNumber\" label=\"PO Number\" sortable={true} />\n <TextField source=\"invoiceNumber\" label=\"Invoice No.\" sortable={true} />\n {tabValue !== InvoiceStatus.PAID ? <MarkPaidButton /> : null}\n <EditButton />\n </Datagrid>\n );\n};\n","import React from \"react\";\nimport { Typography } from \"@material-ui/core\";\nimport {\n AddIcon,\n CheckIcon,\n ExportIcon,\n InvoiceIcon,\n RemoveIcon,\n XIcon,\n} from \"../../../components/common\";\n\nexport const InvoiceSetupCreateHelp = ({ classes }) => (\n <>\n <Typography variant=\"subtitle1\">\n <strong>Invoice Setup</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n There are two ways to start / create a new Invoice. Firstly, by using the{\" \"}\n <br />\n <AddIcon className={classes.icon} />\n <strong> INVOICE </strong> button in the RELEASED tab of both Inbound and\n Outbound shipments list. This will automatically pre-populate the invoice\n with required data for that shipment. Secondly, you can start a \"blank\"\n incoice by using the <br />\n <AddIcon className={classes.icon} />\n <strong> CREATE </strong> button at the top of Invoices List.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Account: </strong>\n Account must be selected first to enable other fields.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Point Of Contact: </strong>\n Billing point of contact, if any. Will be displayed as Attn. in Bill\n To address.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>PO Number: </strong>\n Automatically populated from Inbound/Outbound Shipment. Enter custom\n PO number for ad-hoc charges.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Service Date: </strong>\n Automatically set to Inbount / Outbound Release date if available.\n Otherwise, select date of service.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Due Date: </strong>\n Automatically set to Pyment Terms specified in Account Billing Setup.\n Change if needed to any future date.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Invoice Notes: </strong>\n Notes applicable to the entire invoice - not specific to individual\n charges.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const InvoiceSetupEditHelp = ({ classes }) => (\n <>\n <Typography variant=\"subtitle1\">\n <strong>Invoice Setup</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Account: </strong>\n Account must be selected first to enable other fields.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Point Of Contact: </strong>\n Billing point of contact, if any. Will be displayed as Attn. in Bill\n To address.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>PO Number: </strong>\n Automatically populated from Inbound/Outbound Shipment. Enter custom\n PO number for ad-hoc charges.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Service Date: </strong>\n Automatically set to Inbount / Outbound Release date if available.\n Otherwise, select date of service.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Due Date: </strong>\n Automatically set to Pyment Terms specified in Account Billing Setup.\n Change if needed to any future date.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Invoice Notes: </strong>\n Notes applicable to the entire invoice - not specific to individual\n charges.\n </Typography>\n </li>\n <li>\n <Typography>\n <CheckIcon className={classes.icon} />\n <strong> MARK SETTLED: </strong>\n Mark invoice settled, reset balance to zero, and move to \"SETTLED\"\n tab. Visible if invoice is pending.\n </Typography>\n </li>\n <li>\n <Typography>\n <XIcon className={classes.icon} />\n <strong> REOPEN: </strong>\n Mark invoice as not settled, and move to \"NEW\" tab. Visible if invoice\n is settled.\n </Typography>\n </li>\n <li>\n <Typography>\n <ExportIcon className={classes.icon} />\n <strong> EXPORT: </strong>\n Download and Excel export of current invoice. To learn how to impoirt\n into QuickBooks, please visit\n <a\n href=\"https://quickbooks.intuit.com/learn-support/en-uk/do-more-with-quickbooks/import-your-invoices-into-quickbooks/01/192319\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {\" \"}\n Invoice Import - QuickBooks Help\n </a>\n . You can also do a bulk export from Invoices List by selecting\n multiple invoice rows. To learn more about bulk import into\n QuickBooks, please visit\n <a\n href=\"https://quickbooks.intuit.com/learn-support/en-uk/manage-invoices/import-multiple-invoices-at-once/00/338726\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {\" \"}\n Bulk Invoice Import - QuickBooks Help\n </a>\n .\n </Typography>\n </li>\n <li>\n <Typography>\n <InvoiceIcon className={classes.icon} />\n <strong> PREVIEW: </strong>\n Show printable invoice. From the new view, you can print, save as PDF\n or email the invoice to the customer.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const ChargesCreateHelp = ({ classes }) => (\n <>\n <Typography variant=\"subtitle1\">\n <strong>Charges</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Automatically populated if Invoice created from Inbound/Outbound Shipments\n List.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Service: </strong>\n Select Services / goods / consumables provided.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Service Note: </strong>\n Notes specific to this Service item.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Quantity / Units: </strong>\n Units and Quanity of Units handled for the Service. For \"Accessorial\n Charges\" use 1 PIECE or 1 UNIT.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Unit Price: </strong>\n Price per 1 Unit of measure.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Service Charge: </strong>\n TotalQuantity * Unit Price.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Tax Rate & Tax: </strong>\n Select a pre-configured Tax Rate - setup in My Yard config. Rate is\n automatically applied when configured for a given service.\n </Typography>\n </li>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>\n Add new Service Line Item to the tally.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Service Line Item.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Subtotal: </strong>\n Sum of all Service Charges.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Taxes: </strong>\n Calculated from Tax Rate configured during My Yard and Account\n Services setup.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Total Charges: </strong>\n Subtotal + Taxes\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const ChargesEditHelp = ({ classes }) => (\n <>\n <Typography variant=\"subtitle1\">\n <strong>Charges</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Service: </strong>\n Select Services / goods / consumables provided.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Service Note: </strong>\n Notes specific to this Service item.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Quantity / Units: </strong>\n Units and Quanity of Units handled for the Service. For \"Accessorial\n Charges\" use 1 PIECE or 1 UNIT.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Unit Price: </strong>\n Price per 1 Unit of measure.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Service Charge: </strong>\n TotalQuantity * Unit Price.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Tax Rate & Tax: </strong>\n Select a pre-configured Tax Rate - setup in My Yard config. Rate is\n automatically applied when configured for a given service.\n </Typography>\n </li>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>\n Add new Service Line Item to the tally.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Service Line Item.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Subtotal: </strong>\n Sum of all Service Charges.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Taxes: </strong>\n Calculated from Tax Rate configured during My Yard and Account\n Services setup.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Total Charges: </strong>\n Subtotal + Taxes\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const HistoryEditHelp = ({ classes }) => (\n <>\n <Typography variant=\"subtitle1\">\n <strong>History Log</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n The History Tab provides an automated, chronological Audit Trail of key\n events and record changes.\n </Typography>\n </>\n);\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n InvoiceSetupCreateHelp,\n ChargesCreateHelp,\n ChargesEditHelp,\n HistoryEditHelp,\n InvoiceSetupEditHelp,\n} from \"./InvoiceHelpComponents\";\n\nconst useStyles = makeStyles(() => ({\n icon: {\n verticalAlign: \"middle\",\n display: \"inline-flex\",\n },\n}));\n\nexport const InvoiceCreateHelp = (props) => {\n const classes = useStyles();\n const tabNames = props?.location?.pathname.split(\"/\");\n const tab = tabNames?.length > 3 ? tabNames[3] : \"\";\n\n switch (tab) {\n case \"\":\n return <InvoiceSetupCreateHelp classes={classes} />;\n case \"charges\":\n return <ChargesCreateHelp classes={classes} />;\n default:\n return null;\n }\n};\n\nexport const InvoiceEditHelp = (props) => {\n const classes = useStyles();\n const tabNames = props?.location?.pathname.split(\"/\");\n const tab = tabNames?.length > 3 ? tabNames[3] : \"\";\n\n switch (tab) {\n case \"\":\n return <InvoiceSetupEditHelp classes={classes} />;\n case \"charges\":\n return <ChargesEditHelp classes={classes} />;\n case \"historyLog\":\n return <HistoryEditHelp classes={classes} />;\n default:\n return null;\n }\n};\n","import React, { useEffect } from \"react\";\n\nimport {\n ArrayInput,\n FormDataConsumer,\n NumberInput,\n SelectInput,\n SimpleFormIterator,\n TextInput,\n required,\n minValue,\n number,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { Grid, Typography, InputAdornment } from \"@material-ui/core\";\n\nimport {\n ServiceType,\n Unit,\n UnitOptions,\n UnitToColumn,\n} from \"../../../utils/constants\";\nimport { getPrice } from \"./common\";\n\nimport { theme } from \"../../../withRoot\";\n\nconst validateRequired = required();\nconst validateService = required(\"Select Service...\");\nconst validateQuantity = [required(), number(), minValue(0)];\n\nconst InvoiceTotals = ({ formData, setLineItems, isSentOrPaid, ...props }) => {\n const form = useForm();\n\n const calcTotals = (lineItems) => {\n let subtotal = lineItems.items\n .map((item) => (item ? item.amount : 0))\n .reduce((accum, curr) => (accum += curr), 0);\n form.change(\"subtotal\", subtotal);\n let taxAmount = lineItems.items\n .map((item) => (item ? item.itemTax : 0))\n .reduce((accum, curr) => (accum += curr), 0);\n form.change(\"tax\", taxAmount);\n form.change(\"total\", subtotal + taxAmount);\n };\n\n useEffect(() => {\n if (formData.lineItems?.items) {\n calcTotals(formData.lineItems);\n setLineItems && setLineItems(formData.lineItems);\n }\n }, [formData.lineItems]);\n\n return (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography\n variant=\"overline\"\n color=\"textSecondary\"\n gutterBottom={true}\n >\n Totals:\n </Typography>\n </Grid>\n <Grid item xs={4}>\n <NumberInput\n source=\"subtotal\"\n label=\"Subtotal\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n format={(v) => Number(v).toFixed(2)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\"> $ </InputAdornment>\n ),\n inputMode: \"decimal\",\n }}\n />\n </Grid>\n <Grid item xs={4}>\n <NumberInput\n source=\"tax\"\n label=\"Taxes\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n defaultValue={0}\n format={(v) => Number(v).toFixed(2)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\"> $ </InputAdornment>\n ),\n inputMode: \"decimal\",\n }}\n />\n </Grid>\n <Grid item xs={4}>\n <NumberInput\n source=\"total\"\n label=\"Total Charges\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n defaultValue={0}\n format={(v) => Number(v).toFixed(2)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\"> $ </InputAdornment>\n ),\n inputMode: \"decimal\",\n }}\n />\n </Grid>\n </Grid>\n );\n};\n\nexport const ChargesTab = ({\n account,\n services,\n setLineItems,\n isSentOrPaid,\n ...props\n}) => {\n const form = useForm();\n const taxRateOptions = window.appUser?.reloadYard?.taxRates\n ? window.appUser.reloadYard.taxRates\n : [{}];\n const rateRender = (choice) => `${choice.taxRate}%`;\n\n const handleServiceChange = (event, scopedFormData, getSource) => {\n debugger;\n if (event.target.value && services) {\n let service = services.find((itm) => itm.id === event.target.value);\n form.change(getSource(\"taxRate\"), service.taxRate);\n\n if (service.name.includes(ServiceType.ACCESSORIAL_CHARGES)) {\n form.change(getSource(\"quantity\"), 1);\n form.change(getSource(\"units\"), Unit.PCS);\n form.change(getSource(\"unitCost\"), 0);\n form.change(getSource(\"amount\"), 0);\n form.change(getSource(\"itemTax\"), 0);\n } else if (scopedFormData && scopedFormData.units) {\n form.change(\n getSource(\"unitCost\"),\n getPrice(service, scopedFormData.units)\n );\n if (scopedFormData.quantity) {\n const itemAmount =\n scopedFormData.quantity * getPrice(service, scopedFormData.units);\n form.change(getSource(\"amount\"), itemAmount);\n form.change(\n getSource(\"itemTax\"),\n calcItemTax(itemAmount, service.taxRate)\n );\n } else {\n form.change(getSource(\"amount\"), 0);\n form.change(getSource(\"itemTax\"), 0);\n }\n }\n }\n };\n\n const handleUnitChange = (event, scopedFormData, getSource) => {\n debugger;\n if (event.target.value && services && scopedFormData?.serviceId) {\n let service = services.find((itm) => itm.id === scopedFormData.serviceId);\n const pricePerUnit = getPrice(service, event.target.value);\n form.change(getSource(\"unitCost\"), pricePerUnit);\n if (scopedFormData.quantity) {\n const itemAmount = scopedFormData.quantity * pricePerUnit;\n form.change(getSource(\"amount\"), itemAmount);\n form.change(\n getSource(\"itemTax\"),\n calcItemTax(itemAmount, service.taxRate)\n );\n } else {\n form.change(getSource(\"amount\"), 0);\n form.change(getSource(\"itemTax\"), 0);\n }\n }\n };\n\n const calcItemTax = (amount, taxCode) => {\n debugger;\n if (amount && taxCode) {\n let taxCodeRate = null;\n if (typeof taxCode === \"string\")\n taxCodeRate = window.appUser.reloadYard.taxRates.find(\n (r) => r.taxCode === taxCode\n );\n else taxCodeRate = taxCode;\n const taxRate = taxCodeRate ? taxCodeRate.taxRate / 100 : 0;\n return amount * taxRate;\n } else return 0;\n };\n\n const handleTaxChange = (event, scopedFormData, getSource) => {\n form.change(\n getSource(\"itemTax\"),\n calcItemTax(scopedFormData.amount, event.target.value)\n );\n };\n\n const handleQuantityChange = (event, scopedFormData, getSource) => {\n debugger;\n if (event.target.value && scopedFormData?.unitCost) {\n const itemAmount = event.target.value * scopedFormData.unitCost;\n form.change(getSource(\"amount\"), itemAmount);\n form.change(\n getSource(\"itemTax\"),\n calcItemTax(itemAmount, scopedFormData.taxRate)\n );\n } else {\n form.change(getSource(\"amount\"), 0);\n form.change(getSource(\"itemTax\"), 0);\n }\n };\n\n const handleUnitCostChange = (event, scopedFormData, getSource) => {\n debugger;\n if (event.target.value && scopedFormData.quantity) {\n const itemAmount = event.target.value * scopedFormData.quantity;\n form.change(getSource(\"amount\"), itemAmount);\n form.change(\n getSource(\"itemTax\"),\n calcItemTax(itemAmount, scopedFormData.taxRate)\n );\n } else {\n form.change(getSource(\"amount\"), 0);\n form.change(getSource(\"itemTax\"), 0);\n }\n };\n\n const getUnitOptions = (scopedFormData) => {\n let units = [];\n if (scopedFormData && services) {\n const service = services.find(\n (itm) => itm.id === scopedFormData.serviceId\n );\n debugger;\n if (service) {\n units = UnitOptions.map((unit) => {\n const column = UnitToColumn[unit.id];\n const cost = Number(service[column]).toFixed(2);\n return { ...unit, name: `${unit.name} : $${cost}` };\n });\n }\n }\n\n return units;\n };\n\n return (\n <Grid container direction=\"row\" spacing={3}>\n <Grid item xs={12}>\n <ArrayInput source=\"lineItems.items\" label=\"SERVICE ITEMS\" fullWidth>\n <SimpleFormIterator\n disableReordering\n disableAdd={!account || isSentOrPaid}\n disableRemove={isSentOrPaid}\n >\n <FormDataConsumer>\n {({\n formData, // The whole form data\n scopedFormData, // The data for this item of the ArrayInput\n getSource, // Function to get the valid source inside an ArrayInput. Translates to \"inventories.items[].property\"\n ...rest\n }) => (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} lg={4}>\n <SelectInput\n source={getSource(\"serviceId\")}\n label=\"Service\"\n variant=\"outlined\"\n fullWidth\n disabled={isSentOrPaid}\n choices={services ? services : []}\n onChange={(e) =>\n handleServiceChange(e, scopedFormData, getSource)\n }\n validate={validateService}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} lg={8}>\n <TextInput\n source={getSource(\"serviceNote\")}\n label=\"Service Note\"\n variant=\"outlined\"\n fullWidth\n disabled={!scopedFormData?.serviceId || isSentOrPaid}\n helperText={false}\n />\n </Grid>\n <Grid item xs={6} md={2}>\n <NumberInput\n source={getSource(\"quantity\")}\n label=\"Quantity\"\n variant=\"outlined\"\n fullWidth\n disabled={!scopedFormData?.serviceId || isSentOrPaid}\n min=\"1\"\n validate={validateQuantity}\n onChange={(e) =>\n handleQuantityChange(e, scopedFormData, getSource)\n }\n />\n </Grid>\n <Grid item xs={6} md={2}>\n <SelectInput\n source={getSource(\"units\")}\n label=\"Units\"\n variant=\"outlined\"\n fullWidth\n style={{ minWidth: theme.spacing(9) }}\n disabled={!scopedFormData?.serviceId || isSentOrPaid}\n choices={getUnitOptions(scopedFormData)}\n onChange={(e) =>\n handleUnitChange(e, scopedFormData, getSource)\n }\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={6} md={2}>\n <NumberInput\n source={getSource(\"unitCost\")}\n label=\"Unit Price\"\n variant=\"outlined\"\n fullWidth\n disabled={\n !scopedFormData?.serviceId ||\n !scopedFormData?.units ||\n isSentOrPaid\n }\n min=\"1\"\n placeholder=\"0.00\"\n validate={validateQuantity}\n onChange={(e) =>\n handleUnitCostChange(e, scopedFormData, getSource)\n }\n format={(v) => (Number(v) === 0 ? null : v)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\"> $ </InputAdornment>\n ),\n inputMode: \"decimal\",\n }}\n />\n </Grid>\n <Grid item xs={6} md={2}>\n <NumberInput\n source={getSource(\"amount\")}\n label=\"Service Charge\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n defaultValue={0}\n format={(v) => Number(v).toFixed(2)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\"> $ </InputAdornment>\n ),\n inputMode: \"decimal\",\n }}\n InputLabelProps={{ shrink: true }}\n />\n </Grid>\n <Grid item xs={6} md={2}>\n <SelectInput\n source={getSource(\"taxRate\")}\n label=\"Tax Rate\"\n variant=\"outlined\"\n fullWidth\n style={{ minWidth: theme.spacing(9) }}\n disabled={isSentOrPaid}\n choices={taxRateOptions ? taxRateOptions : []}\n optionValue=\"taxCode\"\n optionText={rateRender}\n format={(v) => (!v ? \"\" : v.taxCode)}\n parse={(v) =>\n !v\n ? \"\"\n : window.appUser.reloadYard.taxRates.find(\n (r) => r.taxCode === v\n )\n }\n onChange={(e) =>\n handleTaxChange(e, scopedFormData, getSource)\n }\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={6} md={2}>\n <NumberInput\n source={getSource(\"itemTax\")}\n label=\"Tax\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n defaultValue={0}\n format={(v) => Number(v).toFixed(2)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\"> $ </InputAdornment>\n ),\n inputMode: \"decimal\",\n }}\n InputLabelProps={{ shrink: true }}\n />\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n </Grid>\n <Grid item xs={12}>\n <FormDataConsumer>\n {(formDataProps) => (\n <InvoiceTotals\n {...formDataProps}\n setLineItems={setLineItems}\n isSentOrPaid={isSentOrPaid}\n />\n )}\n </FormDataConsumer>\n </Grid>\n </Grid>\n );\n};\n\nexport default ChargesTab;\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getInboundShipmentForValidate } from \"../../../graphql/inbound/custom-queries\";\nimport { getOutboundShipmentForValidate } from \"../../../graphql/outbound/custom-queries\";\nimport {\n countInvoices,\n getInvoiceCounter,\n} from \"../../../graphql/reloadyard/custom-queries\";\nimport { updateReloadYard } from \"../../../graphql/mutations\";\n\nimport {\n Backdrop,\n CircularProgress,\n DialogContentText,\n makeStyles,\n} from \"@material-ui/core\";\n\nimport { Confirm, SaveButton, useNotify } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { FilePaths } from \"../../../utils/constants\";\nimport { saveRemoveFiles } from \"../../../utils/fileUtils\";\nimport { deepRedirect } from \"../../../utils/utils\";\nimport {\n createLambdaInvoiceServices,\n createTransform,\n updateLambdaInbound,\n updateLambdaOutbound,\n} from \"./InvoiceUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n}));\n\nconst validateInvoiceUnicity = async (formData) => {\n debugger;\n try {\n const promises = [];\n const resultsMap = {}; // Use an object to store results by key\n\n const searchInput = {\n filter: {\n reloadYardId: { eq: window.appUser.reloadYardId },\n accountId: { eq: formData.accountId },\n or: [{ poNumber: { eq: formData.poNumber } }],\n },\n limit: 1,\n };\n\n if (formData.inboundShipmentId) {\n promises.push(\n API.graphql(\n graphqlOperation(getInboundShipmentForValidate, {\n id: formData.inboundShipmentId,\n })\n ).then((result) => {\n resultsMap.inboundShipment = result?.data?.getInboundShipment;\n })\n );\n } else if (formData.outboundShipmentId) {\n promises.push(\n API.graphql(\n graphqlOperation(getOutboundShipmentForValidate, {\n id: formData.outboundShipmentId,\n })\n ).then((result) => {\n resultsMap.outboundShipment = result?.data?.getOutboundShipment;\n })\n );\n }\n\n promises.push(\n API.graphql(graphqlOperation(countInvoices, searchInput)).then(\n (response) => {\n resultsMap.duplicateInvoices =\n response?.data?.searchInvoices?.total || 0;\n }\n )\n );\n\n await Promise.all(promises);\n\n const shipment =\n resultsMap.inboundShipment || resultsMap.outboundShipment || null;\n\n if (shipment?.invoiceId || resultsMap.duplicateInvoices > 0) {\n return {\n shipment: shipment,\n invoices: resultsMap.duplicateInvoices,\n };\n }\n } catch (error) {\n logError(\"invoices:ValidateSaveButton:validateEmailUnicity\", error, false);\n }\n\n return null;\n};\n\nexport const ValidateCreateButton = ({\n backPath,\n account,\n initialValues,\n ...props\n}) => {\n const classes = useStyles();\n const form = useForm();\n const history = useHistory();\n const notify = useNotify();\n const [open, setOpen] = useState(false);\n const [message, setMessage] = useState(\"\");\n const [isSaving, setIsSaving] = useState(false);\n const [isDisabled, setIsDisabled] = useState(false);\n\n const handleValidateSave = async () => {\n let messages = [];\n const formState = form.getState();\n const formData = formState.values;\n const isValid = !formState.invalid; // Form-level validation status. Submit to force field-level form validation.\n setIsSaving(true);\n debugger;\n\n if (isValid) {\n // if valid, check email uniqueness\n const isDuplicate = await validateInvoiceUnicity(formData);\n\n if (isDuplicate) {\n if (isDuplicate.shipment?.invoiceId) {\n // Handle duplicate shipment invoice\n notify(`This shipment has already been invoiced.`, \"error\");\n setIsSaving(false);\n setIsDisabled(true);\n return; // Halt submission if duplicate found\n } else {\n // handle duplicate manual invoice\n messages.push(\n <>\n An invoice with this PO Number already exists for this customer.{\" \"}\n <br />\n Continue saving a potentially duplicate invoice?\n </>\n );\n }\n }\n }\n\n if (messages.length > 0) {\n // Open Confirm dialog.\n setMessage(\n <DialogContentText>\n {messages.map((msg, index) => (\n <React.Fragment key={index}>{msg}</React.Fragment>\n ))}\n </DialogContentText>\n );\n setOpen(true);\n } else {\n if (!isValid) setIsSaving(false);\n handleSave(); // submit and force field-level form validation whether valid or not.\n }\n };\n\n const handleDialogClose = () => {\n setOpen(false);\n setIsSaving(false);\n };\n\n const handleDialogCconfirm = async () => {\n setOpen(false);\n debugger;\n handleSave(); // proceed to create duplicate invoice\n };\n\n const handleSave = () => {\n props.handleSubmit(); // submit and force field-level form validation whether valid or not.\n };\n\n const transform = async (data) => {\n setIsSaving(true);\n debugger;\n let transData = null;\n\n try {\n const reloadYard = await API.graphql(\n graphqlOperation(getInvoiceCounter, {\n id: window.appUser?.reloadYardId,\n })\n );\n const prefix = reloadYard.data.getReloadYard.invoiceNumberPrefix;\n const counter = ++reloadYard.data.getReloadYard.invoiceCounter;\n\n await Promise.all([\n API.graphql(\n graphqlOperation(updateReloadYard, {\n input: {\n id: window.appUser?.reloadYardId,\n active: reloadYard.data.getReloadYard.active,\n name: reloadYard.data.getReloadYard.name,\n invoiceCounter: counter,\n },\n })\n ),\n saveRemoveFiles(\n undefined,\n data,\n \"attachments\",\n `${FilePaths.INVOICE}/${Date.now()}`\n ),\n ]);\n\n transData = createTransform(data, prefix, counter);\n } catch (error) {\n logError(\"invoices:ValidateCreateButton:transform\", error, false);\n return null;\n }\n\n return transData;\n };\n\n const onSuccess = async ({ data }) => {\n const lineItemsState = form.getFieldState(\"lineItems.items\");\n const lineItems = lineItemsState.value;\n\n debugger;\n try {\n const invoiceServiceCreateMap = {};\n let inboundUpdateMap = null;\n let outboundUpdateMap = null;\n\n const invoiceData = { ...data, lineItems: { items: lineItems } };\n const invoiceServiceInputs = createLambdaInvoiceServices(invoiceData);\n invoiceServiceCreateMap[invoiceData.id] = invoiceServiceInputs;\n\n if (data.inboundShipmentId) {\n const inboundUpdateInput = updateLambdaInbound(invoiceData);\n inboundUpdateMap = { [invoiceData.id]: inboundUpdateInput };\n } else if (data.outboundShipmentId) {\n const outboundUpdateInput = updateLambdaOutbound(invoiceData);\n outboundUpdateMap = { [invoiceData.id]: outboundUpdateInput };\n }\n\n const response = await API.post(\"transREST\", \"/invoiceCreate\", {\n body: {\n invoice: data,\n invoiceServiceCreateMap: invoiceServiceCreateMap,\n inboundUpdateMap: inboundUpdateMap,\n outboundUpdateMap: outboundUpdateMap,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n if (response.error) throw response.error;\n\n notify(\"Invoice created successfully\");\n deepRedirect(history, `/invoices/${data.id}`, null, backPath, {});\n } catch (error) {\n logError(\"invoices:ValidateCreateButton:onSuccess\", error, notify);\n } finally {\n setIsSaving(false);\n }\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\"invoices:ValidateCreateButton:onFailure\", error, notify);\n };\n\n return (\n <>\n <Backdrop className={classes.backdrop} open={isSaving}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <SaveButton\n {...props}\n submitOnEnter={false}\n undoable={false}\n saving={isSaving}\n disabled={isDisabled}\n handleSubmitWithRedirect={handleValidateSave}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <Confirm\n isOpen={open}\n title=\"Save Confirmation\"\n content={message}\n onConfirm={handleDialogCconfirm}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useState, useRef, useEffect } from \"react\";\n\nimport { orderBy } from \"lodash\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getAccount } from \"../../../graphql/account/custom-queries\";\n\nimport { addBusinessDays } from \"date-fns\";\nimport DateFnsUtils from \"@date-io/date-fns\";\nimport { MuiPickersUtilsProvider, DatePicker } from \"@material-ui/pickers\";\nimport { Grid, InputAdornment } from \"@material-ui/core\";\nimport { AccountDropDown } from \"../../../components/common/AccountDropDown\";\n\nimport {\n Create,\n FileInput,\n FormDataConsumer,\n FormTab,\n Loading,\n required,\n SelectInput,\n TabbedForm,\n TextInput,\n Toolbar,\n TopToolbar,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { AttachFileIcon, CalendarIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { CustomFields } from \"../../../components/common/CustomFields\";\nimport {\n ACCEPTED_FILES,\n INVOICE_DUE_DAYS,\n MAX_FILES,\n PaymentTermsType,\n ServiceStatus,\n} from \"../../../utils/constants\";\nimport { handleFileChange } from \"../../../utils/fileUtils\";\nimport { getBackPath } from \"../../../utils/utils\";\nimport { setupShipmentInvoice, setupStorageInvoice } from \"./InvoiceUtils\";\nimport { InvoiceCreateHelp } from \"./InvoiceHelp\";\nimport { ChargesTab } from \"./ChargesTab\";\nimport { ValidateCreateButton } from \"./ValidateCreateButton\";\n\nconst validateRequired = required();\n\nconst InvoiceSetupTab = ({\n account,\n setAccount,\n setServices,\n initialValues,\n selectedDueDate,\n setSelectedDueDate,\n selectedServiceDate,\n setSelectedServiceDate,\n ...props\n}) => {\n const form = useForm();\n const notify = useNotify();\n const isPreLoaded = initialValues.accountId;\n const [error, setError] = useState(false);\n const [contacts, setContacts] = useState([]);\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"accountName\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n useEffect(() => {\n if (account) setContacts(account.billingContacts);\n }, [account]);\n\n useEffect(() => {\n if (contacts) {\n const contact = contacts.length > 0 ? contacts[0] : undefined;\n form.change(\"contact\", contact);\n }\n }, [contacts]);\n\n const getAccountHelperText = (account) => {\n if (error) return \"Error loading...\";\n if (!account) return \"Select Account...\";\n if (account.billingAddress) {\n account.address = account.billingAddress;\n return account?.address\n ? `${account.address.street}, ${account.address.city}, ${account.address.state} ${account.address.zipCode}`\n : null;\n } else return \"\";\n };\n\n const handleAccountChange = async (value) => {\n const accountId = value?.id;\n if (accountId) {\n try {\n debugger;\n const resp = await API.graphql(\n graphqlOperation(getAccount, { id: accountId })\n );\n const newAccount = resp.data.getAccount;\n form.change(\"accountName\", newAccount.businessName);\n setAccount(newAccount);\n\n const dueDate = addBusinessDays(\n new Date(),\n PaymentTermsType[newAccount.paymentTerms]\n );\n form.change(\"dueDate\", dueDate);\n setSelectedDueDate(dueDate);\n\n let serviceData = newAccount.services.items.filter(\n (itm) => itm.status === ServiceStatus.AVAILABLE\n );\n serviceData = orderBy(serviceData, [\"name\"], [\"asc\"]);\n setServices(serviceData);\n setError(false);\n } catch (err) {\n setError(true);\n logError(\"invoices:InvoiceCreate:handleAccountChange\", err, notify);\n }\n }\n };\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"dueDate\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n const handleDueDateChange = (value) => {\n form.change(\"dueDate\", value);\n setSelectedDueDate(value);\n };\n form.registerField(\n \"serviceDate\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n const handleServiceDateChange = (value) => {\n const lineItemsState = form.getFieldState(\"lineItems.items\");\n const lineItems = lineItemsState.value;\n\n form.change(\"serviceDate\", value);\n\n debugger;\n if (lineItems) {\n lineItems.forEach((item, idx) => {\n form.change(`lineItems.items[${idx}].serviceDate`, value);\n });\n }\n\n setSelectedServiceDate(value);\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n {isPreLoaded ? (\n <TextInput\n source=\"accountName\"\n label=\"Account\"\n variant=\"outlined\"\n fullWidth\n disabled\n helperText={getAccountHelperText(account)}\n />\n ) : (\n <AccountDropDown\n source=\"accountId\"\n label=\"Account\"\n onAccountChange={(value) => handleAccountChange(value)}\n helperText={getAccountHelperText(account)}\n validate={validateRequired}\n allowEmpty={false}\n />\n )}\n </Grid>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"contact\"\n label=\"Point of Contact\"\n variant=\"outlined\"\n fullWidth\n disabled={!account}\n choices={contacts ? contacts : []}\n optionValue=\"name\"\n optionText=\"name\"\n allowEmpty\n resettable\n format={(v) => (!v ? \"\" : v.name)}\n parse={(v) => (!v ? \"\" : contacts.find((c) => c.name === v))}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"poNumber\"\n label=\"PO Number\"\n variant=\"outlined\"\n fullWidth\n validate={\n formData.inboundShipmentId || formData.outboundShipmentId\n ? validateRequired\n : undefined\n }\n />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <DatePicker\n label=\"Service Date\"\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n fullWidth\n disableFuture\n required\n error={!selectedServiceDate}\n helperText={selectedServiceDate ? false : \"Required\"}\n value={!selectedServiceDate ? null : selectedServiceDate}\n format=\"MM/dd/yyyy\"\n onChange={handleServiceDateChange}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <CalendarIcon />\n </InputAdornment>\n ),\n }}\n />\n </MuiPickersUtilsProvider>\n </Grid>\n <Grid item xs={12} md={6}>\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <DatePicker\n label=\"Due Date\"\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n fullWidth\n disablePast\n required\n error={!selectedDueDate}\n helperText={selectedDueDate ? false : \"Required\"}\n value={selectedDueDate === \"\" ? null : selectedDueDate}\n format=\"MM/dd/yyyy\"\n onChange={handleDueDateChange}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <CalendarIcon />\n </InputAdornment>\n ),\n }}\n />\n </MuiPickersUtilsProvider>\n </Grid>\n <Grid item xs={12}>\n <TextInput\n source=\"notes\"\n label=\"Invoice Notes\"\n variant=\"outlined\"\n multiline\n minRows=\"5\"\n fullWidth\n />\n </Grid>\n <CustomFields\n {...props}\n accountFields={account?.invoiceCustomFields}\n width={6}\n disabled={false}\n />\n <Grid item xs={12}>\n <FileInput\n source=\"attachments\"\n label=\"ATTACHMENTS\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop file(s) to\n upload, or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n multiple\n maxFiles={MAX_FILES}\n options={{ maxFiles: MAX_FILES }}\n onChange={(value) =>\n handleFileChange(\"attachments\", value, form, notify)\n }\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst CreateActions = (props) => (\n <TopToolbar>\n <HelpButton>\n <InvoiceCreateHelp {...props} />\n </HelpButton>\n <BackButton {...props} />\n </TopToolbar>\n);\n\nconst CreateToolbar = ({ backPath, account, initialValues, ...props }) => {\n return (\n <Toolbar {...props}>\n <ValidateCreateButton\n account={account}\n backPath={backPath}\n initialValues={initialValues}\n />\n </Toolbar>\n );\n};\n\nconst validateCreation = (values) => {\n const errors = {};\n if (!values.dueDate) {\n errors.dueDate = [\"Due Date is required\"];\n }\n if (!values.serviceDate) {\n errors.serviceDate = [\"Service Date is required\"];\n }\n\n return errors;\n};\n\nexport const InvoiceCreate = (props) => {\n const notify = useNotify();\n const isComponentMounted = useRef(true);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(false);\n const [account, setAccount] = useState(null);\n const [services, setServices] = useState([]);\n const backPath = getBackPath(props);\n const accountId =\n props.history?.location?.state?.record?.accountId ||\n props.history?.location?.state?.accountId;\n\n const [initialValues, setInitialValues] = useState({\n active: \"true\",\n status: \"NEW\",\n dueDate: addBusinessDays(new Date(), INVOICE_DUE_DAYS),\n serviceDate: new Date(),\n subtotal: 0,\n discount: 0,\n adjustment: 0,\n });\n const [selectedDueDate, setSelectedDueDate] = useState(\n new Date(initialValues.dueDate)\n );\n const [selectedServiceDate, setSelectedServiceDate] = useState(\n new Date(initialValues.serviceDate)\n );\n\n useEffect(() => {\n if (isComponentMounted) {\n setLoading(true);\n initInvoice();\n setLoading(false);\n }\n\n return () => (isComponentMounted.current = false);\n }, []);\n\n const initInvoice = async () => {\n let account = null;\n debugger;\n\n try {\n if (accountId) {\n let resp = await API.graphql(\n graphqlOperation(getAccount, { id: accountId })\n );\n account = resp.data.getAccount;\n setAccount(account);\n\n account.services.items = account.services.items.filter(\n (itm) => itm.status === ServiceStatus.AVAILABLE\n );\n account.services.items = orderBy(\n account.services.items,\n [\"name\"],\n [\"asc\"]\n );\n setServices(account.services.items);\n }\n } catch (err) {\n setError(true);\n logError(\"invoices:InvoiceCreate:getAccounts\", err, notify);\n }\n\n if (account) {\n if (props.history.location.state.record) {\n try {\n let initValues = setupShipmentInvoice(\n account,\n props.history.location.state.record.inboundShipment,\n props.history.location.state.record.outboundShipment\n );\n\n setSelectedDueDate(initValues.dueDate);\n setSelectedServiceDate(initValues.serviceDate);\n setInitialValues({ ...initialValues, ...initValues });\n } catch (err) {\n setError(true);\n logError(\"invoices:InvoiceCreate:initInvoice\", err, notify);\n }\n } else if (props.history.location.state.serviceId) {\n const serviceId = props.history.location.state.serviceId;\n const unitTotals = props.history.location.state.unitTotals;\n const serviceDate = props.history.location.state.serviceDate;\n const dateRange = props.history.location.state.dateRange;\n const frequency = props.history.location.state.frequency;\n const accrual = props.history.location.state.accrual;\n const reportFile = props.history.location.state.reportFile;\n\n let initValues = setupStorageInvoice(\n account,\n serviceId,\n unitTotals,\n frequency,\n accrual,\n serviceDate,\n dateRange,\n reportFile\n );\n\n setSelectedDueDate(initValues.dueDate);\n setSelectedServiceDate(initValues.serviceDate);\n setInitialValues({ ...initialValues, ...initValues });\n }\n }\n };\n\n if (loading) return <Loading />;\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New Invoice\" />}\n actions={<CreateActions {...props} backPath={backPath} />}\n >\n <TabbedForm\n submitOnEnter={false}\n initialValues={initialValues}\n validate={validateCreation}\n toolbar={\n <CreateToolbar\n {...props}\n backPath={backPath}\n account={account}\n initialValues={initialValues}\n />\n }\n >\n <FormTab path=\"\" label=\"Invoice Setup\">\n <InvoiceSetupTab\n account={account}\n setAccount={setAccount}\n setServices={setServices}\n selectedDueDate={selectedDueDate}\n setSelectedDueDate={setSelectedDueDate}\n selectedServiceDate={selectedServiceDate}\n setSelectedServiceDate={setSelectedServiceDate}\n initialValues={initialValues}\n />\n </FormTab>\n <FormTab path=\"charges\" label=\"Charges\">\n {!loading && !error && (\n <ChargesTab\n account={account}\n services={services}\n selectedServiceDate={selectedServiceDate}\n isSentOrPaid={false}\n />\n )}\n </FormTab>\n </TabbedForm>\n </Create>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getInboundShipmentForUpdate } from \"../../../graphql/inbound/custom-queries\";\nimport { getOutboundShipment } from \"../../../graphql/queries\";\nimport { updateInboundShipmentMini } from \"../../../graphql/inbound/custom-mutations\";\nimport { updateOutboundShipmentMini } from \"../../../graphql/outbound/custom-mutations\";\nimport { deleteInvoiceService } from \"../../../graphql/mutations\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport { useDataProvider, useNotify, Button, Confirm } from \"react-admin\";\n\nimport { DeleteIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { deepRedirect } from \"../../../utils/utils\";\nimport { removeFiles } from \"../../../utils/fileUtils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeepDeleteButton = ({\n backPath,\n record,\n resource,\n className,\n isSaving,\n isDeleting,\n setIsDeleting,\n ...props\n}) => {\n const classes = useStyles();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const history = useHistory();\n const [open, setOpen] = useState(false);\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n const handleDelete = async (event) => {\n setIsDeleting(true);\n let toUpdateRecord = null;\n debugger;\n\n try {\n if (record.inboundShipmentId) {\n const response = await API.graphql(\n graphqlOperation(getInboundShipmentForUpdate, {\n id: record.inboundShipmentId,\n })\n );\n toUpdateRecord = {\n ...response.data.getInboundShipment,\n invoiceId: null,\n };\n delete toUpdateRecord.createdAt;\n delete toUpdateRecord.location;\n delete toUpdateRecord.seals;\n delete toUpdateRecord.timeslot;\n delete toUpdateRecord.updatedAt;\n await API.graphql(\n graphqlOperation(updateInboundShipmentMini, {\n input: toUpdateRecord,\n })\n );\n } else if (record.outboundShipmentId) {\n const response = await API.graphql(\n graphqlOperation(getOutboundShipment, {\n id: record.outboundShipmentId,\n })\n );\n toUpdateRecord = {\n ...response.data.getOutboundShipment,\n invoiceId: null,\n };\n delete toUpdateRecord.account;\n delete toUpdateRecord.area;\n delete toUpdateRecord.createdAt;\n delete toUpdateRecord.invoice;\n delete toUpdateRecord.location;\n delete toUpdateRecord.reloadYardCommodity;\n delete toUpdateRecord.shipmentLineItems;\n delete toUpdateRecord.seals;\n delete toUpdateRecord.timeslot;\n delete toUpdateRecord.updatedAt;\n await API.graphql(\n graphqlOperation(updateOutboundShipmentMini, {\n input: toUpdateRecord,\n })\n );\n }\n\n if (record.lineItems?.items) {\n const results = await Promise.allSettled(\n record.lineItems.items.map((item) => {\n return API.graphql(\n graphqlOperation(deleteInvoiceService, {\n input: { id: item.id },\n })\n );\n })\n );\n\n const resError = results.find((itm) => itm.status === \"rejected\");\n if (resError)\n logError(\n \"invoices:DeepDeleteButton:handleDelete:deleteInvoiceService:\",\n resError.reason,\n false\n );\n }\n\n await removeFiles(record, \"attachments\");\n\n await dataProvider.delete(resource, {\n id: record.id,\n previousData: record,\n });\n debugger;\n\n notify(\"Invoice deleted successfully\");\n deepRedirect(history, backPath);\n } catch (err) {\n logError(\"invoices:DeepDeleteButton:handleDelete\", err, notify);\n } finally {\n setIsDeleting(false);\n setOpen(false);\n }\n };\n\n return (\n <>\n <Button\n {...props}\n label=\"Delete\"\n disabled={isDeleting || isSaving}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={isDeleting}\n title={\"Delete Confirmation\"}\n content={\"Are you sure you want to delete this Invoice?\"}\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { updateInvoice } from \"../../../graphql/mutations\";\n\nimport { DialogContentText } from \"@material-ui/core\";\n\nimport {\n Button,\n Confirm,\n useNotify,\n useRedirect,\n useRefresh,\n} from \"react-admin\";\n\nimport { RollbackIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { InvoiceStatus, NoteType } from \"../../../utils/constants\";\n\nexport const ReopenButton = ({ record }) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const [loading, setLoading] = useState(false);\n const [open, setOpen] = useState(false);\n\n const handleDialogOpen = (e) => {\n e.stopPropagation();\n e.nativeEvent.stopImmediatePropagation();\n setOpen(true);\n };\n const handleDialogClose = () => setOpen(false);\n\n const saveInvoice = async () => {\n try {\n setLoading(true);\n debugger;\n if (record) {\n const historyNote = {\n text: \"Invoice reopened\",\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.GENERIC,\n };\n\n const input = {\n id: record.id,\n reloadYardId: record.reloadYardId,\n invoiceNumber: record.invoiceNumber,\n accountId: record.accountId,\n accountName: record.accountName,\n status: InvoiceStatus.NEW,\n dueDate: record.dueDate,\n paidDate: null,\n balance: record.total,\n history: [...record.history, historyNote],\n };\n await API.graphql(graphqlOperation(updateInvoice, { input }));\n }\n\n notify(\"Invoice reopened successfully.\", \"info\");\n redirect(`/invoices/${record.id}`);\n refresh();\n } catch (error) {\n logError(\"invoices:MarkPaidButton:saveInvoice\", error, notify);\n } finally {\n setLoading(false);\n }\n };\n\n const renderDialogContent = () => {\n return record.status === InvoiceStatus.PAID ? (\n <DialogContentText>\n Ropening will roll back the invoice to \"NEW\" status and mark it as not\n settled.\n <br></br>\n Are you sure you want to reopen this invoice?\n </DialogContentText>\n ) : (\n <DialogContentText>\n Are you sure you want to reopen this invoice?\n </DialogContentText>\n );\n };\n\n if (record.status === InvoiceStatus.NEW) return null;\n return (\n <>\n <Button\n label=\"Reopen\"\n color=\"primary\"\n onClick={handleDialogOpen}\n disabled={loading}\n loading={loading}\n >\n <RollbackIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={loading}\n title=\"Reopen Confirmation\"\n onConfirm={saveInvoice}\n content={renderDialogContent()}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport { TextField, SelectField } from \"react-admin\";\n\nimport { Card, CardContent, Grid, Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { isAuthorized } from \"../../../utils/appUtils\";\nimport { AclType, InvoiceStatuses } from \"../../../utils/constants\";\nimport { getFormTab } from \"../../../utils/utils\";\nimport { InvoiceStatusIcon } from \"./InvoiceStatusIcon\";\n\nconst useAsideStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n width: \"18em\",\n minWidth: \"18em\",\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(0.5),\n overflow: \"initial\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n status: {\n marginTop: theme.spacing(0.3),\n },\n tableIcon: {\n marginTop: theme.spacing(0.7),\n },\n}));\n\nexport const InvoiceEditAside = ({ backPath, record, ...props }) => {\n const classes = useAsideStyles();\n var tab = getFormTab(props);\n const linkBackPath = backPath\n ? [...backPath, props.location.pathname]\n : [props.location.pathname];\n\n if (!record || tab === \"1\") return null;\n return (\n <>\n <Card className={classes.root}>\n <CardContent>\n <Grid container direction=\"column\" spacing={1} fullWidth>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Status\n </Typography>\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <InvoiceStatusIcon record={record} />\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <SelectField\n source=\"status\"\n choices={InvoiceStatuses}\n record={record}\n />\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Account\n </Typography>\n <br />\n {isAuthorized(AclType.ACCOUNTS) ? (\n <Link\n to={{\n pathname: `/accounts/${record.accountId}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {record.account.businessName}\n </Typography>\n </Link>\n ) : (\n <Link\n to={{\n pathname: `/accounts/${record.accountId}/show`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {record.account.businessName}\n </Typography>\n </Link>\n )}\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n PO Number\n </Typography>\n <br />\n <TextField source=\"poNumber\" record={record} />\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Invoice Number\n </Typography>\n <br />\n <TextField source=\"invoiceNumber\" record={record} />\n </Grid>\n {record.inboundShipmentId && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Inbound Shipment:\n </Typography>\n <br />\n <Link\n to={{\n pathname: `/inboundShipments/${record.inboundShipmentId}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n PO no. {record.poNumber}\n </Typography>\n </Link>\n </Grid>\n )}\n {record.outboundShipmentId && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Outbound Shipment:\n </Typography>\n <br />\n <Link\n to={{\n pathname: `/outboundShipments/${record.outboundShipmentId}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n PO no. {record.poNumber}\n </Typography>\n </Link>\n </Grid>\n )}\n </Grid>\n </CardContent>\n </Card>\n </>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport jsonExport from \"jsonexport/dist\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n createInvoiceService,\n deleteInvoiceService,\n updateInvoice,\n updateInvoiceService,\n} from \"../../../graphql/mutations\";\n\nimport { endOfDay } from \"date-fns\";\nimport DateFnsUtils from \"@date-io/date-fns\";\nimport { MuiPickersUtilsProvider, DatePicker } from \"@material-ui/pickers\";\nimport {\n Backdrop,\n CircularProgress,\n Grid,\n InputAdornment,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n Button,\n Confirm,\n downloadCSV,\n Edit,\n FileInput,\n FormTab,\n Loading,\n required,\n SaveButton,\n SelectInput,\n TabbedForm,\n TextInput,\n Toolbar,\n TopToolbar,\n useEditController,\n useNotify,\n useRedirect,\n useRefresh,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport {\n AttachFileIcon,\n CalendarIcon,\n ExportIcon,\n InvoiceIcon,\n} from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { HistoryTab } from \"../../../components/common/HistoryTab\";\nimport {\n ACCEPTED_FILES,\n FilePaths,\n InvoiceStatus,\n MAX_FILES,\n NoteType,\n PaymentTerms,\n} from \"../../../utils/constants\";\nimport { handleFileChange, saveRemoveFiles } from \"../../../utils/fileUtils\";\n\nimport { InvoiceEditHelp } from \"./InvoiceHelp\";\nimport { DeepDeleteButton } from \"./DeepDeleteButton\";\nimport { MarkPaidButton } from \"./MarkPaidButtons\";\nimport { ReopenButton } from \"./ReopenButton\";\nimport { ChargesTab } from \"./ChargesTab\";\nimport { InvoiceEditAside } from \"./InvoiceEditAside\";\nimport { getMemo } from \"./InvoiceUtils\";\nimport {\n deepRedirect,\n exportCustomField,\n getBackPath,\n} from \"../../../utils/utils\";\nimport { CustomFields } from \"../../../components/common/CustomFields\";\nimport { ShowButton } from \"../../../components/common/ShowButton\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n}));\n\nconst validateRequired = required();\n\nconst InvoiceSetupTab = ({ record, account, isSentOrPaid, ...props }) => {\n const form = useForm();\n const notify = useNotify();\n\n const getAccountHelperText = (account) => {\n if (account.billingAddress) {\n account.address = account.billingAddress;\n return account?.address\n ? `${account.address.street}, ${account.address.city}, ${account.address.state} ${account.address.zipCode}`\n : null;\n } else return \"\";\n };\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"dueDate\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n const [selectedDueDate, setSelectedDueDate] = useState(\n new Date(record.dueDate)\n );\n const handleDueDateChange = (value) => {\n form.change(\"dueDate\", value);\n setSelectedDueDate(value);\n };\n form.registerField(\n \"serviceDate\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n const [selectedServiceDate, setSelectedServiceDate] = useState(\n new Date(record.serviceDate)\n );\n const handleServiceDateChange = (value) => {\n const lineItemsState = form.getFieldState(\"lineItems.items\");\n const lineItems = lineItemsState.value;\n\n form.change(\"serviceDate\", value);\n\n debugger;\n if (lineItems) {\n lineItems.forEach((item, idx) => {\n form.change(`lineItems.items[${idx}].serviceDate`, value);\n });\n }\n\n setSelectedServiceDate(value);\n };\n\n return (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"accountName\"\n label=\"Account\"\n variant=\"outlined\"\n disabled\n fullWidth\n helperText={getAccountHelperText(account)}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <SelectInput\n source={\"contact\"}\n label=\"Point of Contact\"\n variant=\"outlined\"\n fullWidth\n disabled={!account}\n choices={account?.billingContacts ? account.billingContacts : []}\n optionValue=\"name\"\n optionText=\"name\"\n allowEmpty\n resettable\n format={(v) => (!v ? \"\" : v.name)}\n parse={(v) =>\n !v ? \"\" : account.billingContacts.find((c) => c.name === v)\n }\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"poNumber\"\n label=\"PO Number\"\n variant=\"outlined\"\n fullWidth\n disabled={isSentOrPaid}\n validate={\n record.inboundShipmentId || record.outboundShipmentId\n ? validateRequired\n : undefined\n }\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"invoiceNumber\"\n label=\"Invoice Number\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <DatePicker\n label=\"Service Date\"\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n fullWidth\n disableFuture\n required\n error={!selectedServiceDate}\n helperText={selectedServiceDate ? false : \"Required\"}\n value={selectedServiceDate === \"\" ? null : selectedServiceDate}\n format=\"MM/dd/yyyy\"\n onChange={handleServiceDateChange}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <CalendarIcon />\n </InputAdornment>\n ),\n }}\n />\n </MuiPickersUtilsProvider>\n </Grid>\n <Grid item xs={12} md={6}>\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <DatePicker\n label=\"Due Date\"\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n fullWidth\n disablePast={!isSentOrPaid}\n disabled={isSentOrPaid}\n required\n error={!selectedDueDate}\n helperText={selectedDueDate ? false : \"Required\"}\n value={selectedDueDate === \"\" ? null : selectedDueDate}\n format=\"MM/dd/yyyy\"\n onChange={handleDueDateChange}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <CalendarIcon />\n </InputAdornment>\n ),\n }}\n />\n </MuiPickersUtilsProvider>\n </Grid>\n <Grid item xs={12}>\n <TextInput\n source=\"notes\"\n label=\"Invoice Notes\"\n variant=\"outlined\"\n multiline\n minRows=\"5\"\n fullWidth\n />\n </Grid>\n <CustomFields\n {...props}\n accountFields={account?.invoiceCustomFields}\n width={6}\n disabled={false}\n />\n <Grid item xs={12}>\n <FileInput\n source=\"attachments\"\n label=\"ATTACHMENTS\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop file(s) to upload,\n or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n multiple\n maxFiles={MAX_FILES}\n options={{ maxFiles: MAX_FILES }}\n onChange={(value) =>\n handleFileChange(\"attachments\", value, form, notify)\n }\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n </Grid>\n );\n};\n\nconst exportCSV = (data, setOpen, notify) => {\n let invoicesForExport = [];\n const customHeaderMap = new Map();\n const invoice = data;\n debugger;\n\n const handleUndefined = (item) => (!item ? \"\" : item);\n const getTerms = (paymentTerms) => {\n const term = !paymentTerms\n ? \"\"\n : PaymentTerms.find((itm) => itm.id === paymentTerms);\n return term?.name ? term.name : \"\";\n };\n const getServiceName = (invoice, serviceId) => {\n const service = !invoice.account?.services\n ? \"\"\n : invoice.account.services.items.find((itm) => itm.id === serviceId);\n return service?.name ? service.name : \"\";\n };\n const getServiceDate = (invoice, serviceDate) => {\n return new Date(\n serviceDate ? serviceDate : invoice.createdAt\n ).toLocaleDateString();\n };\n\n try {\n if (data.lineItems?.items) {\n invoicesForExport = data.lineItems.items.map((element, idx) => {\n const invoiceLineItem = {\n InvoiceNo: invoice.invoiceNumber,\n Customer: idx === 0 ? invoice.accountName : \"\",\n InvoiceDate:\n idx === 0 ? new Date(invoice.createdAt).toLocaleDateString() : \"\",\n DueDate:\n idx === 0 ? new Date(invoice.dueDate).toLocaleDateString() : \"\",\n Terms:\n idx === 0 && invoice.account\n ? getTerms(invoice.account.paymentTerms)\n : \"\",\n Memo: idx === 0 ? getMemo(invoice) : \"\",\n Item: getServiceName(invoice, element.serviceId),\n ItemDescription: handleUndefined(element.serviceNote),\n ItemQuantity: element.quantity,\n ItemRate: element.unitCost,\n ItemAmount: element.amount,\n ItemTaxCode: element.taxRate.taxCode,\n ItemTaxAmount: element.itemTax,\n Currency: \"USD\",\n ServiceDate: getServiceDate(invoice, element.serviceDate),\n };\n\n // DO NOT REMOVE!!! for Green Mile Logistics Only.\n invoiceLineItem.poNumber = invoice.poNumber;\n if (\n idx === 0 &&\n window.appUser.reloadYardId === \"aa44b626-20a5-4a87-bd40-49d774bc4817\"\n ) {\n invoiceLineItem.carTrlNumber = invoice.railCarNumber;\n }\n\n if (invoice.customFields?.length > 0) {\n invoice.customFields.forEach((field) => {\n exportCustomField(field, invoiceLineItem, customHeaderMap);\n });\n }\n\n return invoiceLineItem;\n });\n }\n\n jsonExport(\n invoicesForExport,\n {\n rename: [\n \"InvoiceNo\",\n \"Customer\",\n \"InvoiceDate\",\n \"DueDate\",\n \"Terms\",\n \"Memo\",\n \"Item(Product/Service)\",\n \"ItemDescription\",\n \"ItemQuantity\",\n \"ItemRate\",\n \"ItemAmount\",\n \"ItemTaxCode\",\n \"ItemTaxAmount\",\n \"Currency\",\n \"ServiceDate\",\n // ...customHeaderMap.keys()\n ], // order fields in the export\n },\n (err, csv) => {\n downloadCSV(csv, `invoice_${data.invoiceNumber}`); // download as 'invoice_InvoiceNo.csv` file\n }\n );\n\n if (data.status === InvoiceStatus.NEW) setOpen(true);\n } catch (error) {\n logError(\"invoices:InvoiceEdit:exportCSV\", error, notify);\n }\n};\n\nconst handlePendingUpdate = async (\n data,\n setOpen,\n setSaving,\n notify,\n redirect,\n refresh\n) => {\n setSaving(true);\n debugger;\n\n try {\n const historyNote = {\n text: `Invoice exported.`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.GENERIC,\n };\n\n const input = {\n id: data.id,\n active: data.active,\n reloadYardId: data.reloadYardId,\n dueDate: data.dueDate,\n accountId: data.accountId,\n accountName: data.accountName,\n status:\n data.status === InvoiceStatus.NEW ? InvoiceStatus.PENDING : data.status,\n history: [...data.history, historyNote],\n };\n\n await API.graphql(graphqlOperation(updateInvoice, { input }));\n refresh();\n } catch (err) {\n logError(\"invoices:InvoiceEdit:handlePendingUpdate\", err, notify, redirect);\n } finally {\n setSaving(false);\n setOpen(false);\n }\n};\n\nconst EditActions = ({ data, ...props }) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const [saving, setSaving] = useState(false);\n const [open, setOpen] = useState(false);\n\n return (\n <TopToolbar>\n <Confirm\n isOpen={open}\n loading={saving}\n title=\"Advance Confirmation\"\n content=\"Advance this Invoice to PENDING status?\"\n onConfirm={() =>\n handlePendingUpdate(\n data,\n setOpen,\n setSaving,\n notify,\n redirect,\n refresh\n )\n }\n onClose={() => setOpen(false)}\n />\n <HelpButton>\n <InvoiceEditHelp {...props} />\n </HelpButton>\n <MarkPaidButton {...props} record={data} />\n <ReopenButton {...props} record={data} />\n <Button label=\"Export\" onClick={() => exportCSV(data, setOpen, notify)}>\n <ExportIcon />\n </Button>\n <ShowButton\n label=\"PREVIEW\"\n {...props}\n record={data}\n icon={<InvoiceIcon />}\n />\n <BackButton {...props} />\n </TopToolbar>\n );\n};\n\nconst validateEdit = (values) => {\n const errors = {};\n if (!values.dueDate) {\n errors.dueDate = [\"Due Date is required\"];\n }\n if (!values.serviceDate) {\n errors.serviceDate = [\"Service Date is required\"];\n }\n\n return errors;\n};\n\nconst EditToolbar = (props) => {\n const classes = useStyles();\n const notify = useNotify();\n const history = useHistory();\n const redirect = useRedirect();\n const [isSaving, setIsSaving] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const { backPath, record, lineItems } = props;\n\n const transform = async (data) => {\n setIsSaving(true);\n data = { ...data };\n data.balance = data.total;\n debugger;\n\n data.dueDate = endOfDay(new Date(data.dueDate));\n const historyNote = {\n text: `Invoice updated : total due: ${data.total}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.GENERIC,\n };\n data.history = [...data.history, historyNote];\n\n data.contact = data.contact === \"\" ? null : data.contact;\n\n try {\n debugger;\n await saveRemoveFiles(\n record,\n data,\n \"attachments\",\n `${FilePaths.INVOICE}/${Date.now()}`\n );\n } catch (error) {\n logError(\"invoices:InvoiceEdit:transform\", error, notify);\n }\n\n delete data.account;\n delete data.createdAt;\n delete data.inboundShipment;\n delete data.lineItems;\n delete data.outboundShipment;\n delete data.reloadYard;\n delete data.updatedAt;\n\n return data;\n };\n\n const onSuccess = async ({ data }) => {\n try {\n debugger;\n if (lineItems?.items) {\n await Promise.allSettled(\n lineItems.items.map((item) => {\n debugger;\n let input = {\n invoiceId: data.id,\n serviceId: item.serviceId,\n groups: data.groups,\n serviceNote: item.serviceNote,\n quantity: item.quantity,\n units: item.units,\n unitCost: item.unitCost,\n amount: Number(item.amount).toFixed(2),\n accountId: data.accountId,\n reloadYardId: data.reloadYardId,\n taxRate: item.taxRate,\n itemTax: Number(item.itemTax).toFixed(2),\n serviceDate: new Date(\n item.serviceDate || data.serviceDate\n ).toLocaleDateString(),\n };\n\n if (item.id) {\n input = { id: item.id, ...input };\n return API.graphql(\n graphqlOperation(updateInvoiceService, { input })\n );\n } else {\n return API.graphql(\n graphqlOperation(createInvoiceService, { input })\n );\n }\n })\n );\n }\n\n if (record.lineItems && record.lineItems.items) {\n await Promise.allSettled(\n record.lineItems.items.map((item) => {\n const exists = lineItems?.items.some((itm) => item.id === itm.id);\n const input = { id: item.id };\n debugger;\n if (!exists)\n return API.graphql(\n graphqlOperation(deleteInvoiceService, { input })\n );\n })\n );\n }\n\n notify(\"Invoice updated successfully\");\n redirect(backPath ? backPath : props.basePath);\n deepRedirect(history, backPath);\n } catch (error) {\n logError(\"invoices:InvoiceEdit:onSuccess\", error, notify);\n } finally {\n setIsSaving(false);\n }\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\"invoices:InvoiceEdit:onFailure\", error, notify);\n };\n\n const savingProps = { ...props, saving: isSaving };\n return (\n <Toolbar {...savingProps} style={{ justifyContent: \"space-between\" }}>\n <Backdrop className={classes.backdrop} open={isSaving}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <SaveButton\n label=\"Save\"\n disabled={savingProps.pristine || isDeleting}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n {record.status !== InvoiceStatus.PAID ? (\n <DeepDeleteButton\n {...props}\n isSaving={isSaving}\n isDeleting={isDeleting}\n setIsDeleting={setIsDeleting}\n />\n ) : null}\n </Toolbar>\n );\n};\n\nexport const InvoiceEdit = (props) => {\n const { record } = useEditController(props);\n const [lineItems, setLineItems] = useState(record?.lineItems);\n const [isSentOrPaid, setIsSentOrPaid] = useState(true);\n const backPath = getBackPath(props);\n\n useEffect(() => {\n if (!lineItems && record) setLineItems(record.lineItems);\n if (record)\n setIsSentOrPaid(\n record.status === InvoiceStatus.PENDING ||\n record.status === InvoiceStatus.PAID\n );\n }, [record]);\n\n if (!record || !record.account?.services) return <Loading />;\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Invoice\" />}\n mutationMode=\"pessimistic\"\n aside={\n <InvoiceEditAside {...props} backPath={backPath} record={record} />\n }\n actions={<EditActions {...props} backPath={backPath} />}\n >\n <TabbedForm\n submitOnEnter={false}\n validate={validateEdit}\n toolbar={\n <EditToolbar\n {...props}\n backPath={backPath}\n record={record}\n lineItems={lineItems}\n />\n }\n >\n <FormTab path=\"\" label=\"Invoice Setup\">\n <InvoiceSetupTab\n record={record}\n account={record.account}\n isSentOrPaid={isSentOrPaid}\n />\n </FormTab>\n <FormTab path=\"charges\" label=\"Charges\">\n <ChargesTab\n account={record.account}\n services={record.account.services.items}\n setLineItems={setLineItems}\n isSentOrPaid={isSentOrPaid}\n />\n </FormTab>\n {record?.history && (\n <FormTab path=\"historyLog\" label=\"History Log\">\n <HistoryTab />\n </FormTab>\n )}\n </TabbedForm>\n </Edit>\n );\n};\n","import React, { useEffect, useState, useRef } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport ReactDOMServer from \"react-dom/server\";\n\nimport ReactToPrint from \"react-to-print\";\n// import prettier from \"prettier\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { serviceByAccountByStatusByName } from \"../../../graphql/queries\";\nimport { updateInvoice } from \"../../../graphql/mutations\";\n\nimport {\n Backdrop,\n CircularProgress,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Divider,\n Grid,\n makeStyles,\n Paper,\n Switch,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n TextField as InputField,\n Typography,\n} from \"@material-ui/core\";\n\nimport {\n Button,\n Loading,\n Show,\n SimpleShowLayout,\n TopToolbar,\n useNotify,\n useShowController,\n} from \"react-admin\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n InvoiceStatus,\n NoteType,\n PaymentTerms,\n REGEX_MULTI_EMAIL,\n ServiceStatus,\n} from \"../../../utils/constants\";\nimport {\n getFilePublicURL,\n getKeyFilename,\n getPhotoUrl,\n} from \"../../../utils/fileUtils\";\nimport { deepRedirect, getBackPath, splitEmails } from \"../../../utils/utils\";\n\nimport {\n CancelIcon,\n EditIcon,\n EmailIcon,\n PrintIcon,\n} from \"../../../components/common\";\nimport { Ledger } from \"./Ledger\";\nimport { MarkPaidButton } from \"./MarkPaidButtons\";\nimport { ReopenButton } from \"./ReopenButton\";\nimport InvoiceShowInboundBlock from \"./InvoiceShowInboundBlock\";\nimport InvoiceShowOutboundBlock from \"./InvoiceShowOutboundBlock\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { getCustomFieldsTable } from \"../../../components/common/CustomFields\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n padding: \"0px\",\n \"@media print\": {\n display: \"block\",\n minWidth: \"1200px\",\n margin: \"0\",\n padding: \"50px !important\",\n },\n },\n logo: {\n margin: \"0 auto 0\",\n width: \"auto\",\n maxWidth: \"90%\",\n height: \"auto\",\n minHeight: \"5em\",\n maxHeight: \"5em\",\n borderRadius: \"6px\",\n },\n text: {\n \"@media print\": {\n color: \"#000\",\n },\n },\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: \"#fff\",\n },\n}));\n\nconst handleEmailSending = async (record, toEmail, emailBody, notify) => {\n // Asynchronous function to handle email sending and conditional invoice update\n try {\n const response = await API.post(\"transREST\", \"/sendEmail\", {\n body: emailBody,\n });\n\n if (response.status !== \"success\") {\n notify(\"Error occurred while sending email.\", \"error\");\n logError(\n \"invoices:InvoiceShow:sendInvoice:handleEmailSending:\" + emailBody,\n response,\n false\n );\n\n throw new Error(\"Email delivery failed\");\n }\n notify(\"Email sent.\", \"info\");\n\n // If email sending is successful, update the invoice\n const historyNote = {\n text: `Invoice sent to : ${toEmail}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.GENERIC,\n };\n\n const input = {\n id: record.id,\n active: record.active,\n reloadYardId: record.reloadYardId,\n dueDate: record.dueDate,\n accountId: record.accountId,\n accountName: record.accountName,\n status:\n record.status === InvoiceStatus.NEW\n ? InvoiceStatus.PENDING\n : record.status,\n sentDate: new Date(),\n history: [...record.history, historyNote],\n };\n\n await API.graphql(graphqlOperation(updateInvoice, { input }));\n } catch (error) {\n logError(\"invoices:InvoiceShow:sendInvoice\", error, false);\n }\n};\n\nconst sendInvoice = (\n services,\n notify,\n toEmail,\n cc,\n encloseAttachments,\n setSending,\n setEmailOpen,\n props\n) => {\n debugger;\n const record = props.data;\n const account = record?.account;\n\n if (!toEmail) {\n notify(\"Invoice email missing in Account - email not sent.\", \"warning\");\n logError(\n \"invoices:InvoiceShow:sendInvoice:account no email\",\n JSON.stringify(account),\n false\n );\n return;\n }\n\n setSending(true);\n\n let htmlDoc = ReactDOMServer.renderToString(\n <EmailInvoiceBody\n record={record}\n services={services}\n encloseAttachments={encloseAttachments}\n {...props}\n />\n );\n // let prettyHtml = prettier.format(htmlDoc, { parser: \"html\" });\n\n const subject = record.poNumber\n ? `Invoice No: ${record.invoiceNumber}, PO No: ${record.poNumber} from ${record.reloadYard.name}`\n : `Invoice No: ${record.invoiceNumber} from ${record.reloadYard.name}`;\n\n const emailBody = {\n from: \"no_reply transloads.co <invoices@transloads.co>\",\n to: splitEmails(toEmail),\n cc: cc ? splitEmails(cc) : undefined,\n // bcc: [\"support@transloads.co\"],\n // replyTo: getReplyToAddress(),\n subject: subject,\n template: \"emailTemplateWide.html\",\n htmlContent: htmlDoc,\n attachPDF: true,\n };\n\n // Call the handleEmailSending function without awaiting it\n handleEmailSending(record, toEmail, emailBody, notify);\n setEmailOpen(false);\n setSending(false);\n};\n\nconst HeaderBlock = ({ record, ...props }) => {\n const classes = useStyles();\n const logoImage = window.appUser?.reloadYard?.logoImage;\n const logoURL = logoImage ? getPhotoUrl(logoImage.key, 128) : null;\n\n return (\n <Table style={{ width: \"100%\" }} className={classes.text}>\n <TableHead>\n <TableRow>\n <TableCell style={{ textAlign: \"left\" }}>\n {logoURL && (\n <img alt=\"Yard Logo\" src={logoURL} className={classes.logo} />\n )}\n </TableCell>\n <TableCell style={{ textAlign: \"center\" }} className={classes.text}>\n <Typography variant=\"h5\"> Invoice No: </Typography>\n <Typography variant=\"h6\"> {record.invoiceNumber} </Typography>\n </TableCell>\n <TableCell style={{ textAlign: \"right\" }} className={classes.text}>\n <Typography variant=\"h5\"> Invoice Date: </Typography>\n <Typography variant=\"h6\">\n {\" \"}\n {new Date(record.createdAt).toLocaleDateString()}{\" \"}\n </Typography>\n </TableCell>\n </TableRow>\n </TableHead>\n </Table>\n );\n};\n\nconst FromToBlock = ({ record, ...props }) => {\n const classes = useStyles();\n const reloadYard = record.reloadYard;\n const toAddress = record.account?.billingAddress;\n const remittanceAddress = reloadYard.remittanceAddress\n ? reloadYard.remittanceAddress\n : reloadYard;\n\n return (\n <Table style={{ width: \"100%\" }}>\n <TableHead>\n <TableRow>\n <TableCell style={{ textAlign: \"left\" }} className={classes.text}>\n <Typography variant=\"h5\"> Remit To: </Typography>\n </TableCell>\n <TableCell style={{ textAlign: \"left\" }} className={classes.text}>\n <Typography variant=\"h5\"> Bill To: </Typography>\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell style={{ textAlign: \"left\" }} className={classes.text}>\n <strong> {remittanceAddress.name} </strong> <br />\n {remittanceAddress.street} <br />\n {remittanceAddress.city} {remittanceAddress.state}{\" \"}\n {remittanceAddress.zipCode} <br />\n Phone: {record.reloadYard.phone} <br />\n </TableCell>\n <TableCell style={{ textAlign: \"left\" }} className={classes.text}>\n <strong> {toAddress?.name || record.accountName} </strong> <br />\n {record.contact ? (\n <>\n Attn: {record.contact.name} <br />{\" \"}\n </>\n ) : (\n \"\"\n )}\n {toAddress?.street} <br />\n {toAddress?.city} {toAddress?.state} {toAddress?.zipCode} <br />\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n );\n};\n\nconst getTerms = (paymentTerms) => {\n const term = !paymentTerms\n ? \"\"\n : PaymentTerms.find((itm) => itm.id === paymentTerms);\n return term?.name ? term.name : \"\";\n};\n\nconst InfoBlock = ({ record, ...props }) => {\n const classes = useStyles();\n\n return (\n <div style={{ width: \"100%\" }}>\n <Table id=\"InfoBlock1\" key=\"InfoBlock1\" style={{ width: \"100%\" }}>\n <TableBody>\n <TableRow>\n <TableCell style={{ textAlign: \"center\" }} className={classes.text}>\n <Typography variant=\"h5\"> Due Date: </Typography>\n {new Date(record.dueDate).toLocaleDateString()} <br />\n </TableCell>\n <TableCell style={{ textAlign: \"center\" }} className={classes.text}>\n {record.status === InvoiceStatus.PAID ? (\n <Typography variant=\"h5\"> SETTLED </Typography>\n ) : (\n <>\n <Typography variant=\"h5\"> Terms: </Typography>\n {getTerms(record.account.paymentTerms)} <br />\n </>\n )}\n </TableCell>\n <TableCell style={{ textAlign: \"center\" }} className={classes.text}>\n <Typography variant=\"h5\"> PO Number: </Typography>\n {record.poNumber} <br />\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </div>\n );\n};\n\nconst LedgerBlock = ({ record, services, ...props }) => {\n // using Grid instead of table does not require classes for text\n return (\n <Grid container spacing={2}>\n <Grid item xs={12}>\n {\" \"}\n <Typography variant=\"h6\"> Services & Charges: </Typography>{\" \"}\n </Grid>\n <Grid item xs={12}>\n <Ledger record={record} services={services} />\n </Grid>\n <Grid item xs={12}>\n {getCustomFieldsTable(\n record?.account?.invoiceCustomFields,\n record.customFields\n )}\n </Grid>\n </Grid>\n );\n};\n\nconst FooterBlock = ({ record, ...props }) => {\n if (record.inboundShipment)\n return <InvoiceShowInboundBlock record={record} />;\n if (record.outboundShipment)\n return <InvoiceShowOutboundBlock record={record} />;\n return null;\n};\n\nconst AttachmentsBlock = ({ record }) => {\n const attachments =\n record.attachments?.length > 0 ? record.attachments : null;\n\n if (!attachments) return <></>;\n return (\n <div style={{ width: \"100%\" }}>\n <div>\n <Divider />\n </div>\n <Table id=\"invoiceDocs\" key=\"invoiceDocs\" style={{ width: \"100%\" }}>\n <TableBody>\n {attachments?.map((row) => (\n <TableRow>\n <TableCell style={{ textAlign: \"left\" }}>\n {row.key && (\n <a\n href={getFilePublicURL(row.key)}\n style={{\n margin: \"0 auto\",\n width: \"auto\",\n maxWidth: \"90%\",\n }}\n >\n {getKeyFilename(row.key)}\n </a>\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n );\n};\n\nconst PrintableInvoiceBlock = ({\n record,\n services,\n encloseAttachments,\n ...props\n}) => {\n const classes = useStyles();\n\n if (!record) return null;\n return (\n <Grid\n container\n spacing={1}\n alignItems=\"center\"\n justifyContent=\"center\"\n className={classes.root}\n >\n <Grid item xs={12} align=\"center\">\n <HeaderBlock record={record} {...props} />\n <Divider />\n <FromToBlock record={record} {...props} />\n <Divider />\n <InfoBlock record={record} {...props} />\n <Divider />\n <span> </span>\n <LedgerBlock record={record} services={services} {...props} />\n <FooterBlock record={record} {...props} />\n {encloseAttachments && <AttachmentsBlock record={record} />}\n </Grid>\n </Grid>\n );\n};\n\nconst EmailInvoiceBody = ({\n record,\n services,\n encloseAttachments,\n ...props\n}) => {\n return (\n <Paper elevation={0} style={{ maxWidth: \"800px\", margin: \"auto\" }}>\n <PrintableInvoiceBlock\n record={record}\n services={services}\n encloseAttachments={encloseAttachments}\n {...props}\n />\n </Paper>\n );\n};\n\nclass PrintableInvoice extends React.PureComponent {\n render() {\n const { record, services, ...props } = this.props;\n return (\n <PrintableInvoiceBlock record={record} services={services} {...props} />\n );\n }\n}\n\nconst InvoiceActions = ({\n record,\n services,\n backPath,\n invRef,\n notify,\n ...props\n}) => {\n const classes = useStyles();\n const history = useHistory();\n const [email, setEmail] = useState(\n props.data?.account ? props.data.account.billingEmail : undefined\n );\n const [isEmailValid, setIsEmailValid] = useState(true);\n const [cc, setCC] = useState(\n record?.contact?.email ? record?.contact?.email : \"\"\n );\n const [encloseAttachments, setEncloseAttachments] = useState(\n record.account?.invoiceAttachments\n );\n const [emailOpen, setEmailOpen] = useState(false);\n const [sending, setSending] = useState(false);\n\n const handleEmailChange = (event) => {\n const emailInput = event.target.value;\n setEmail(emailInput);\n };\n\n const handleEmailBlur = () => {\n setIsEmailValid(validateEmail(email));\n };\n\n const validateEmail = (email) => {\n if (email) return REGEX_MULTI_EMAIL.test(email.trim());\n return true;\n };\n\n const handleSubmit = () => {\n const valid = validateEmail(email);\n if (valid) setIsEmailValid(valid);\n else return;\n\n sendInvoice(\n services,\n notify,\n email,\n cc,\n encloseAttachments,\n setSending,\n setEmailOpen,\n props\n );\n };\n\n const handleEdit = () => {\n deepRedirect(history, `/invoices/${props.data.id}`, null, backPath, {});\n };\n\n return (\n <TopToolbar>\n <Button\n {...props}\n label=\"Send\"\n color=\"primary\"\n onClick={() => setEmailOpen(true)}\n >\n <EmailIcon />\n </Button>\n <MarkPaidButton {...props} record={props.data} />\n <ReopenButton {...props} record={props.data} />\n <ReactToPrint\n trigger={() => (\n <Button\n {...props}\n label=\"Print\"\n color=\"primary\"\n startIcon={<PrintIcon />}\n />\n )}\n content={() => invRef.current}\n documentTitle={\"Transloads_Invoice\"}\n />\n <Button label=\"Edit\" onClick={handleEdit}>\n <EditIcon />\n </Button>\n <BackButton {...props} backPath={backPath} />\n <Dialog\n open={emailOpen}\n maxWidth=\"sm\"\n onClose={() => setEmailOpen(false)}\n fullWidth\n >\n <DialogTitle>Send Invoice</DialogTitle>\n <DialogContent>\n <Backdrop className={classes.backdrop} open={sending}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <InputField\n label=\"To email\"\n size=\"small\"\n variant=\"outlined\"\n fullWidth\n required\n value={email}\n error={!isEmailValid} // Display error state based on validation\n helperText={\n !isEmailValid ? \"Please enter a valid email address.\" : false\n }\n onChange={handleEmailChange}\n onBlur={handleEmailBlur}\n />\n </Grid>\n <Grid item xs={12}>\n <InputField\n label=\"CC\"\n size=\"small\"\n variant=\"outlined\"\n fullWidth\n helperText=\"Comma-seperated email(s)\"\n value={cc}\n onChange={(event) => setCC(event.target.value)}\n />\n </Grid>\n <Grid item xs={12}>\n <Switch\n name=\"enclose-attachments\"\n color=\"primary\"\n checked={encloseAttachments}\n onChange={() => setEncloseAttachments(!encloseAttachments)}\n />\n <Typography component=\"span\">Enclose Attachments</Typography>\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button\n label=\"CANCEL\"\n color=\"default\"\n onClick={() => setEmailOpen(false)}\n >\n <CancelIcon />\n </Button>\n <Button\n label=\"SEND\"\n color=\"primary\"\n disabled={!email}\n onClick={handleSubmit}\n >\n <EmailIcon />\n </Button>\n </DialogActions>\n </Dialog>\n </TopToolbar>\n );\n};\n\nexport const InvoiceShow = (props) => {\n const notify = useNotify();\n const invRef = useRef();\n const isComponentMounted = useRef(true);\n const { record } = useShowController(props);\n const [services, setServices] = useState([]);\n const backPath = getBackPath(props);\n\n useEffect(() => {\n debugger;\n if (isComponentMounted && record) getServices();\n return () => (isComponentMounted.current = false);\n }, []);\n\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n const getServices = async () => {\n try {\n setLoading(true);\n let resp = await API.graphql(\n graphqlOperation(serviceByAccountByStatusByName, {\n accountId: record.accountId,\n statusName: { beginsWith: { status: ServiceStatus.AVAILABLE } },\n sortDirection: \"ASC\",\n })\n );\n let serviceData = resp.data.serviceByAccountByStatusByName?.items;\n setServices(serviceData);\n debugger;\n } catch (err) {\n setError(true);\n logError(\"invoices:InvoiceShow:getServices\", err, notify);\n }\n setLoading(false);\n };\n\n if (loading) return <Loading />;\n if (!record || !record.reloadYard || error) return null;\n return (\n <Show\n {...props}\n title=\" \"\n actions={\n <InvoiceActions\n record={record}\n services={services}\n backPath={backPath}\n invRef={invRef}\n notify={notify}\n />\n }\n >\n <SimpleShowLayout>\n <PrintableInvoice record={record} services={services} ref={invRef} />\n </SimpleShowLayout>\n </Show>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getInboundShipment } from \"../../../graphql/queries\";\nimport { getAccount } from \"../../../graphql/account/custom-queries\";\nimport { getInvoiceCounter } from \"../../../graphql/reloadyard/custom-queries\";\n\nimport { Backdrop, CircularProgress } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { Button, useNotify, useRedirect } from \"react-admin\";\n\nimport {\n AclType,\n InboundStatus,\n UnitWeightOptions,\n} from \"../../../utils/constants\";\nimport {\n isAuthorized,\n isSubscriptionDisabled,\n logError,\n} from \"../../../utils/appUtils\";\nimport { AddAllIcon, AddIcon, InvoiceIcon } from \"../../../components/common\";\nimport {\n createLambdaInvoiceServices,\n createLambdaTransform,\n setupShipmentInvoice,\n updateLambdaInbound,\n} from \"../invoices/InvoiceUtils\";\nimport { deepRedirect } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: \"#fff\",\n },\n}));\n\nconst isInvoicable = (record) =>\n record.status === InboundStatus.RELEASED &&\n record.totalQuantity &&\n record.totalUnits &&\n ((record.billQuantity && record.billUnits) ||\n (UnitWeightOptions.some((unitOpt) => unitOpt.id === record.billUnits) &&\n record.tareWeight &&\n record.ladenWeight &&\n record.weightUnits));\n\nexport const CreateInvoiceButton = ({ record, backPath, ...props }) => {\n const history = useHistory();\n\n const isDisabled = isSubscriptionDisabled();\n\n const handleCreate = (event) => {\n debugger;\n event.stopPropagation();\n event.preventDefault();\n deepRedirect(\n history,\n \"/invoices/create\",\n props.location.pathname,\n backPath,\n {\n record: {\n accountId: record.accountId,\n inboundShipment: record,\n },\n }\n );\n };\n\n const handleOpen = (event) => {\n debugger;\n event.stopPropagation();\n event.preventDefault();\n deepRedirect(\n history,\n `/invoices/${record.invoiceId}/show`,\n props.location.pathname,\n backPath,\n {}\n );\n };\n\n if (!record || !isInvoicable(record) || !isAuthorized(AclType.INVOICES))\n return null;\n if (record.invoiceId && record?.invoice) {\n const total = record?.invoice?.total.toLocaleString(\"en-US\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n\n return (\n <Button label={total} color=\"primary\" onClick={handleOpen}>\n <InvoiceIcon />\n </Button>\n );\n }\n return (\n <Button\n label=\"Invoice\"\n color=\"primary\"\n onClick={handleCreate}\n disabled={isDisabled}\n >\n <AddIcon />\n </Button>\n );\n};\n\nexport const BulkCreateInvoiceButton = ({ record, selectedIds, ...props }) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const classes = useStyles();\n\n const [saving, setSaving] = useState();\n\n const inboundMap = {};\n const accountMap = {};\n const isDisabled = isSubscriptionDisabled();\n\n const handleCreate = async (event) => {\n try {\n event.stopPropagation();\n event.preventDefault();\n setSaving(true);\n debugger;\n\n let promiseList = [];\n selectedIds.forEach((inboundId) => {\n promiseList.push(\n API.graphql(graphqlOperation(getInboundShipment, { id: inboundId }))\n );\n });\n let results = await Promise.all(promiseList);\n results.forEach((res) => {\n inboundMap[res.data.getInboundShipment.id] =\n res.data.getInboundShipment;\n });\n\n promiseList = [];\n Object.values(inboundMap).forEach((inbound) => {\n if (!accountMap[inbound.accountId])\n promiseList.push(\n API.graphql(graphqlOperation(getAccount, { id: inbound.accountId }))\n );\n });\n results = await Promise.all(promiseList);\n results.forEach((res) => {\n accountMap[res.data.getAccount.id] = res.data.getAccount;\n });\n\n const result = await API.graphql(\n graphqlOperation(getInvoiceCounter, {\n id: window.appUser?.reloadYardId,\n })\n );\n const prefix = result.data.getReloadYard.invoiceNumberPrefix;\n let counter = result.data.getReloadYard.invoiceCounter;\n\n const invoiceCreateList = [];\n const invoiceServiceCreateMap = {};\n const inboundUpdateMap = {};\n let reloadYardUpdateInput = null;\n\n selectedIds.forEach((inboundId) => {\n const inbound = inboundMap[inboundId];\n if (isInvoicable(inbound)) {\n counter = counter + 1;\n let invoiceData = setupShipmentInvoice(\n accountMap[inbound.accountId],\n inbound,\n null\n );\n const invoiceInput = createLambdaTransform(\n invoiceData,\n prefix,\n counter\n );\n invoiceCreateList.push(invoiceInput);\n\n const invoiceServiceInputs = createLambdaInvoiceServices(invoiceData);\n invoiceServiceCreateMap[invoiceData.id] = invoiceServiceInputs;\n debugger;\n\n const inboundUpdateInput = updateLambdaInbound(invoiceData);\n inboundUpdateMap[invoiceData.id] = inboundUpdateInput;\n }\n });\n\n debugger;\n if (counter !== result.data.getReloadYard.invoiceCounter) {\n reloadYardUpdateInput = {\n id: result.data.getReloadYard.id,\n active: result.data.getReloadYard.active,\n name: result.data.getReloadYard.name,\n invoiceCounter: counter,\n };\n }\n\n const response = await API.post(\"transREST\", \"/invoiceCreateBulk\", {\n body: {\n invoiceCreateList: invoiceCreateList,\n invoiceServiceCreateMap: invoiceServiceCreateMap,\n inboundUpdateMap: inboundUpdateMap,\n outboundUpdateMap: null,\n reloadYardUpdateInput: reloadYardUpdateInput,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n if (response.error) throw response.error;\n\n notify(\"Invoices created successfully\");\n redirect(\"/invoices\");\n } catch (err) {\n logError(\n \"inboundShipment:BulkCreateInvoiceButton:handleCreate\",\n err,\n notify,\n redirect\n );\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <>\n <Backdrop className={classes.backdrop} open={saving}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Button\n label=\"Invoice\"\n color=\"default\"\n onClick={handleCreate}\n disabled={isDisabled}\n >\n <AddAllIcon />\n </Button>\n </>\n );\n};\n","import React, { useState } from \"react\";\n\nimport DateFnsUtils from \"@date-io/date-fns\";\nimport { differenceInDays } from \"date-fns\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getInboundShipment } from \"../../../graphql/inbound/custom-queries\";\n\nimport {\n useNotify,\n useRefresh,\n Loading,\n SimpleForm,\n Toolbar,\n Button,\n useRedirect,\n Confirm,\n} from \"react-admin\";\n\nimport { Typography, IconButton } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { MuiPickersUtilsProvider, DateTimePicker } from \"@material-ui/pickers\";\n\nimport {\n ArrivedAtIcon,\n CancelIcon,\n CloseIcon,\n PlacedAtIcon,\n ReleasedAtIcon,\n SaveIcon,\n} from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n CarrierType,\n InboundStatus,\n InboundState,\n NoteType,\n} from \"../../../utils/constants\";\nimport { getLogState } from \"../../../utils/utils\";\nimport { isTrack } from \"../../../utils/locationUtils\";\nimport {\n autogenLotNumber,\n emailPOD,\n hasInventoryCommitted,\n transformLamdaInventories,\n updateStripeUsage,\n validateRailcarRelease,\n} from \"./InboundUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n paddingTop: theme.spacing(4),\n },\n title: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n margin: theme.spacing(2),\n marginBottom: 0,\n },\n form: {\n [theme.breakpoints.up(\"xs\")]: {\n width: 340,\n },\n [theme.breakpoints.down(\"xs\")]: {\n width: \"100vw\",\n marginTop: -30,\n },\n },\n}));\n\nconst updateInboundStatus = async (\n record,\n newStatus,\n newValue,\n notify,\n refresh,\n redirect,\n setDrawerOpen,\n setSaving\n) => {\n const updateDate = new Date().toISOString();\n const historyNotes = [];\n debugger;\n\n try {\n let response = await API.graphql(\n graphqlOperation(getInboundShipment, { id: record.id })\n );\n const inbound = response.data.getInboundShipment;\n\n const newState =\n newStatus === InboundStatus.PLACED\n ? InboundState.PROCESS_SHIPMENT\n : newStatus === InboundStatus.ARRIVED\n ? InboundState.NEW\n : inbound.state;\n\n if (\n newStatus === InboundStatus.RELEASED &&\n inbound.account?.podEmail &&\n // for rail-track shipments POD sent from mobile on COMPLETE because not released until empty.\n !(isTrack(inbound.areaId) && inbound.carrierType === CarrierType.RAIL)\n ) {\n emailPOD(\n inbound,\n inbound.account?.podEmail,\n null,\n inbound.account?.podPhotos,\n inbound.account?.podAttachments,\n notify\n );\n\n historyNotes.push({\n text: `POD sent to: ${inbound.account?.podEmail}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.GENERIC,\n });\n }\n\n historyNotes.push({\n text: `Shipment advanced | status: ${newStatus} ${getLogState(newState)}`,\n by: window.appUser?.fullName,\n date: updateDate,\n type: NoteType.SHIPMENT,\n });\n const inboundUpdateInput = {\n ...inbound,\n status: newStatus,\n state: newState,\n notifyDateTime:\n newStatus === InboundStatus.ARRIVED || !inbound.notifyDateTime\n ? newValue\n : inbound.notifyDateTime,\n placedDateTime:\n newStatus === InboundStatus.PLACED ? newValue : inbound.placedDateTime,\n releaseDateTime:\n newStatus === InboundStatus.RELEASED\n ? newValue\n : inbound.releaseDateTime,\n stripeBillingDateTime:\n newStatus === InboundStatus.RELEASED ? new Date() : null,\n daysOnDemurrageClock:\n newStatus === InboundStatus.RELEASED\n ? differenceInDays(\n new Date(newValue),\n new Date(inbound.notifyDateTime)\n )\n : 0,\n trackId: newStatus === InboundStatus.ARRIVED ? null : inbound.trackId,\n previousCar:\n newStatus === InboundStatus.ARRIVED ? null : inbound.previousCar,\n history: [...inbound.history, ...historyNotes],\n updatedAt: updateDate,\n };\n if (newStatus === InboundStatus.PLACED && !inbound.lotNumberOverride) {\n const newLotNumber =\n inbound.account.lotNumberPrefix +\n autogenLotNumber(inbound.lotType, inboundUpdateInput);\n inboundUpdateInput.lotNumber = newLotNumber;\n }\n\n const transData = await transformLamdaInventories(\n inboundUpdateInput,\n false\n );\n\n delete inboundUpdateInput.account;\n delete inboundUpdateInput.area;\n delete inboundUpdateInput.inventories;\n delete inboundUpdateInput.reloadYardCommodity;\n delete inboundUpdateInput.zone;\n\n if (newStatus === InboundStatus.RELEASED) {\n updateStripeUsage(\n \"inboundShipments:AdvanceButton:updateStripeUsage\",\n inbound\n );\n }\n\n // For testing purposes only\n const stripeUsageInput = {\n // subscriptionItemId: window.appUser.subscription.items.data[0].id,\n // timestamp: inbound.stripeBillingDateTime ? new Date(inbound.stripeBillingDateTime).getTime() : new Date().getTime(),\n // shipmentId: inbound.id,\n // shipmentId: crypto.randomUUID(), // for testing ONLY\n };\n\n // console.log(\"inboundUpdateInput\", inboundUpdateInput);\n // console.log(\"inventoryUpdateList\", transData.inventoryUpdateList);\n // console.log(\"inventoryItemUpdateList\", transData.inventoryItemUpdateList);\n // console.log(\"stripeUsageInput\", stripeUsageInput);\n\n response = await API.post(\"transREST\", \"/inboundUpdate\", {\n body: {\n inboundUpdateInput,\n inventoryUpdateList: transData.inventoryUpdateList,\n inventoryItemUpdateList: transData.inventoryItemUpdateList,\n locationUpdateList: [],\n stripeUsageInput,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n if (response.error) throw response.error;\n\n notify(\"Inbound updated successfully\");\n } catch (error) {\n logError(\n \"inboundShipments:AdvanceButton:updateInboundStatus\",\n error,\n notify,\n redirect\n );\n } finally {\n setDrawerOpen(false);\n setSaving(false);\n refresh();\n }\n};\n\nexport const ConfirmationDrawer = (props) => {\n const refresh = useRefresh();\n const classes = useStyles();\n const notify = useNotify();\n const redirect = useRedirect();\n const [saving, setSaving] = useState(false);\n const { record, newStatus, setDrawerOpen } = props;\n let title = null;\n let target = null;\n\n if (record && newStatus === InboundStatus.ARRIVED) {\n title = \"Time Notified\";\n target = record.notifyDateTime;\n } else if (record && newStatus === InboundStatus.PLACED) {\n title = \"Time Placed\";\n target = record.placedDateTime;\n } else if (record && newStatus === InboundStatus.RELEASED) {\n title = \"Time Released\";\n target = record.releaseDateTime;\n }\n if (!target) target = new Date();\n const [value, setValue] = useState(target);\n\n const handleCancel = () => {\n setDrawerOpen(false);\n };\n\n const handleSave = async () => {\n setSaving(true);\n const dateString = typeof value === \"string\" ? value : value.toISOString();\n if (value)\n await updateInboundStatus(\n record,\n newStatus,\n dateString,\n notify,\n refresh,\n redirect,\n setDrawerOpen,\n setSaving\n );\n };\n\n const DrawerToolbar = (props) => (\n <Toolbar style={{ justifyContent: \"space-between\" }} {...props}>\n <Button\n label=\"Save\"\n variant=\"contained\"\n color=\"primary\"\n disabled={saving}\n onClick={handleSave}\n >\n <SaveIcon />\n </Button>\n <Button label=\"Cancel\" color=\"secondary\" autoFocus onClick={handleCancel}>\n <CancelIcon />\n </Button>\n </Toolbar>\n );\n\n if (!record || saving) return <Loading />;\n return (\n <div className={classes.root}>\n <div className={classes.title}>\n <Typography variant=\"h6\">{title}</Typography>\n <IconButton onClick={handleCancel}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </div>\n <SimpleForm\n record={record}\n redirect={false}\n toolbar={<DrawerToolbar />}\n className={classes.form}\n >\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <DateTimePicker\n inputVariant=\"outlined\"\n variant=\"static\"\n disableFuture\n minDate={\n newStatus === InboundStatus.RELEASED\n ? record.placedDateTime\n : newStatus === InboundStatus.PLACED && record.notifyDateTime\n ? record.notifyDateTime\n : undefined\n }\n value={value}\n onChange={setValue}\n format=\"MM/dd/yyyy hh:mm a\"\n />\n </MuiPickersUtilsProvider>\n </SimpleForm>\n </div>\n );\n};\n\nexport const AdvanceButton = ({ record, newStatus, buttonLabel, ...rest }) => {\n const redirect = useRedirect();\n const { isDrawerOpen, setDrawerOpen, setAdvanceRecord, setAdvanceStatus } =\n rest;\n const [open, setOpen] = useState(false);\n const [confirmContent, setConfirmContent] = useState(\"\");\n let display = true;\n let buttonIcon = <ArrivedAtIcon />;\n\n if (!record) return null;\n if (newStatus === InboundStatus.PLACED) {\n buttonIcon = <PlacedAtIcon />;\n display = record.inventories?.items?.length > 0;\n } else if (newStatus === InboundStatus.RELEASED) {\n buttonIcon = <ReleasedAtIcon />;\n display =\n (record.state === InboundState.COMPLETED ||\n record.state === InboundState.REJECTED) &&\n (!isTrack(record.areaId) ||\n (isTrack(record.areaId) && !hasInventoryCommitted(record)));\n }\n\n const handleClick = (event) => {\n event.stopPropagation();\n event.preventDefault();\n\n if (record.carrierType === CarrierType.TRUCK) {\n redirect(`inboundShipments/${record.id}/dispatch`);\n }\n\n // check if contains remaining inventory on release\n debugger;\n const remainingInventory = validateRailcarRelease(record, newStatus);\n if (remainingInventory) {\n setConfirmContent(\n remainingInventory + \" of remaining Inventory on hand will be removed!\"\n );\n setOpen(true);\n } else {\n handleAdvance();\n }\n };\n\n const handleDialogClose = () => setOpen(false);\n const handleAdvance = () => {\n setAdvanceStatus(newStatus);\n setAdvanceRecord(record);\n setDrawerOpen(!isDrawerOpen);\n setOpen(false);\n };\n\n if (display) {\n return (\n <>\n <Button label={buttonLabel} color=\"primary\" onClick={handleClick}>\n {buttonIcon}\n </Button>\n {open && (\n <Confirm\n isOpen={open}\n title=\"Save Confirmation\"\n content={confirmContent}\n onConfirm={handleAdvance}\n onClose={handleDialogClose}\n CancelIcon={CancelIcon}\n />\n )}\n </>\n );\n }\n return null;\n};\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { InputAdornment } from \"@material-ui/core\";\nimport { DatePicker, MuiPickersUtilsProvider } from \"@material-ui/pickers\";\nimport DateFnsUtils from \"@date-io/date-fns\";\nimport { CalendarIcon } from \".\";\nimport { useListContext } from \"ra-core\";\nimport { getDayRange } from \"../../utils/utils\";\n\nexport const ListDatePicker = ({\n label,\n onDateChange,\n onMount,\n onUnmount,\n filterField,\n source,\n}) => {\n const { displayedFilters, filterValues, setFilters } = useListContext();\n const [dateValue, setDateValue] = useState(null);\n\n useEffect(() => {\n if (onMount) {\n onMount();\n }\n return () => {\n const newFilterValues = { ...filterValues };\n const newDisplayedFilters = { ...filterValues };\n delete newFilterValues.and;\n delete displayedFilters.endDateTime;\n setFilters(newFilterValues, newDisplayedFilters);\n setDateValue(null);\n if (onUnmount) {\n onUnmount();\n }\n };\n }, []);\n\n const handleDateChange = useCallback((value) => {\n if (value) {\n const [startOfDay, endOfDay] = getDayRange(value);\n setFilters(\n {\n ...filterValues,\n and: [\n { [filterField]: { gte: `${startOfDay}` } },\n { [filterField]: { lte: `${endOfDay}` } },\n ],\n },\n displayedFilters\n );\n setDateValue(value);\n } else {\n const newFilterValues = { ...filterValues };\n delete newFilterValues.and;\n setFilters(newFilterValues, displayedFilters);\n setDateValue(null);\n }\n if (onDateChange) {\n onDateChange();\n }\n }, []);\n\n return (\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <DatePicker\n label={label}\n inputVariant=\"outlined\"\n variant=\"dialog\"\n disableFuture\n margin=\"dense\"\n value={dateValue}\n onChange={handleDateChange}\n onKeyPress={(event) => event.preventDefault()}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <CalendarIcon />\n </InputAdornment>\n ),\n }}\n />\n </MuiPickersUtilsProvider>\n );\n};\n","import React, { useState } from \"react\";\nimport { useListContext, useNotify } from \"react-admin\";\nimport Menu from \"@material-ui/core/Menu\";\nimport { ExportMenuItem } from \"./ExportButton\";\nimport { CircularProgress, Button } from \"@material-ui/core\";\nimport DownloadIcon from \"@material-ui/icons/GetApp\";\n\nconst ExportDropDown = ({\n total,\n resource,\n exporter,\n maxResults,\n exporterPdf,\n loading,\n}) => {\n const { filterValues, currentSort } = useListContext();\n const [anchorEl, setAnchorEl] = useState(null);\n const [pdfLoading, setPdfLoading] = useState(false);\n const notify = useNotify();\n const open = Boolean(anchorEl);\n\n let gteValue = null;\n let lteValue = null;\n\n if (Array.isArray(filterValues.and)) {\n filterValues.and.forEach((filter) => {\n const key = Object.keys(filter)[0];\n if (filter[key]?.gte) {\n gteValue = filter[key].gte;\n }\n if (filter[key]?.lte) {\n lteValue = filter[key].lte;\n }\n });\n }\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleExportCsv = (data) => {\n exporter(data);\n handleClose();\n };\n\n const handleExportPdf = async (data, _1, _2, _3, filter) => {\n try {\n setPdfLoading(true);\n let sortedData;\n if (currentSort?.field && !currentSort.field.includes(\"key\")) {\n sortedData = data.sort((a, b) => {\n const isNumeric =\n !isNaN(a[currentSort.field]) || !isNaN(b[currentSort.field]);\n let aValue, bValue;\n if (isNumeric) {\n aValue = a[currentSort.field] || 0;\n bValue = b[currentSort.field] || 0;\n } else {\n aValue = a[currentSort.field] || \"\";\n bValue = b[currentSort.field] || \"\";\n }\n if (isNumeric) {\n // Sort numerically\n return currentSort.order === \"ASC\"\n ? aValue - bValue\n : bValue - aValue;\n } else {\n // Sort as strings\n return currentSort.order === \"ASC\"\n ? aValue.toString().localeCompare(bValue.toString())\n : bValue.toString().localeCompare(aValue.toString());\n }\n });\n } else if (currentSort.field.includes(\"key\")) {\n sortedData = data;\n }\n await exporterPdf(sortedData, gteValue, lteValue, notify, filter);\n } finally {\n setPdfLoading(false);\n }\n };\n\n return (\n <>\n <Button\n id=\"export-button\"\n aria-controls={open ? \"export-menu\" : undefined}\n aria-haspopup=\"true\"\n aria-expanded={open ? \"true\" : undefined}\n onClick={pdfLoading ? () => {} : handleClick}\n color=\"primary\"\n size=\"small\"\n startIcon={\n pdfLoading ? (\n <CircularProgress color=\"inherit\" size={17} />\n ) : (\n <DownloadIcon />\n )\n }\n >\n Export\n </Button>\n\n <Menu\n id=\"export-menu\"\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"left\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"left\",\n }}\n >\n <ExportMenuItem\n label={\"CSV\"}\n disabled={total === 0}\n resource={resource}\n exporter={handleExportCsv}\n maxResults={maxResults}\n />\n\n <ExportMenuItem\n label={\"PDF\"}\n disabled={total === 0 || pdfLoading}\n onClick={() => {\n handleClose();\n setPdfLoading(true);\n }}\n resource={resource}\n exporter={handleExportPdf}\n maxResults={maxResults}\n />\n </Menu>\n </>\n );\n};\n\nexport default ExportDropDown;\n","import { getReloadYardAddress } from \"./utils\";\r\n\r\n// Utility function to build the header\r\nexport const buildHeader = (\r\n data,\r\n formattedStartDate,\r\n formattedEndDate,\r\n filter\r\n) => {\r\n const header = {\r\n address: getReloadYardAddress(),\r\n items: [\r\n {\r\n value: formattedEndDate\r\n ? `From: ${formattedStartDate} To: ${formattedEndDate}`\r\n : `As of: ${formattedStartDate}`,\r\n type: \"primaryText\",\r\n },\r\n ],\r\n };\r\n\r\n if (filter?.accountId?.eq) {\r\n header.items.unshift({\r\n value: data[0]?.accountName || \"\",\r\n type: \"primaryText\",\r\n });\r\n }\r\n\r\n return header;\r\n};\r\n","import { downloadCSV } from \"ra-core\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n FilePaths,\n InboundStatus,\n Orientations,\n} from \"../../../utils/constants\";\nimport { buildHeader } from \"../../../utils/exportsUtils\";\nimport {\n generateAndDownloadPdf,\n generateFileName,\n} from \"../../../utils/fileUtils\";\nimport jsonExport from \"jsonexport/dist\";\nimport {\n exportCustomField,\n formatCurrency,\n formatDate,\n getFormattedStartAndEndDate,\n} from \"../../../utils/utils\";\n\nexport const inboundExportPdf = async (\n data,\n inputStartDate,\n inputEndDate,\n notify,\n filter\n) => {\n try {\n const reloadYardId = window.appUser?.reloadYardId;\n\n const { formattedStartDate, formattedEndDate } =\n getFormattedStartAndEndDate(\n data,\n inputStartDate,\n inputEndDate,\n \"endDateTime\"\n );\n\n const items = data.map(\n ({\n accountName = \"--\",\n poNumber = \"--\",\n railCarNumber = \"--\",\n id = \"--\",\n endDateTime,\n invoice,\n }) => {\n return {\n accountName,\n orderNumber: poNumber,\n invoiceNumber: invoice?.invoiceNumber || \"--\",\n carNumber: railCarNumber,\n inbound: id,\n inboundDate: endDateTime ? formatDate(new Date(endDateTime)) : \"--\",\n amountBilled: invoice?.total ? formatCurrency(invoice.total) : \"--\",\n total: invoice?.total || 0,\n };\n }\n );\n\n // Calculate display flags\n const showAmounts =\n filter?.inboundShipmentByReloadYardByStatusByDates\n ?.statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime\n ?.beginsWith?.status === InboundStatus.RELEASED ||\n filter?.searchInboundShipments?.status?.eq === InboundStatus.RELEASED;\n\n const showReceivedColumn = !items.every(\n ({ inboundDate }) => inboundDate === \"--\"\n );\n\n // Calculate totals\n const totalAmountBilled = items.reduce(\n (sum, { total }) => sum + (total || 0),\n 0\n );\n\n // Generate file names\n const fileName = generateFileName({ resource: \"inbound\", ext: \"pdf\" });\n const downloadName = generateFileName({\n resource: \"inbound\",\n ext: \"pdf\",\n includeDate: true,\n });\n\n // Build columns array\n const columns = [\n { label: \"Order #\", source: \"orderNumber\" },\n { label: \"Car Number\", source: \"carNumber\" },\n ];\n\n if (showReceivedColumn) {\n columns.push({ label: \"Received\", source: \"inboundDate\" });\n }\n\n if (showAmounts) {\n columns.push(\n { label: \"Invoice #\", source: \"invoiceNumber\" },\n { label: \"Invoiced\", source: \"amountBilled\" }\n );\n }\n\n if (!filter?.accountId?.eq) {\n columns.unshift({ label: \"Customer\", source: \"accountName\" });\n }\n\n // Build header\n const header = buildHeader(\n data,\n formattedStartDate,\n formattedEndDate,\n filter\n );\n\n // Build footer\n const footer = [\n {\n label: \"Total Loads\",\n value: data.length,\n },\n ];\n\n if (showAmounts) {\n footer.unshift({\n label: \"Total Invoiced\",\n value: formatCurrency(totalAmountBilled) || \"\",\n });\n }\n\n const templateKey = `${FilePaths.TEMPLATES_PDF}/${FilePaths.TEMPLATE_REPORT}`;\n const outputFileKey = `${reloadYardId}/${reloadYardId}/${FilePaths.INVENTORY}/${fileName}`;\n\n await generateAndDownloadPdf({\n templateKey,\n outputFileKey,\n downloadName,\n data: {\n metaData: {\n orientation: Orientations.PORTRAIT,\n currentDate: new Date().toLocaleString(),\n },\n content: {\n header,\n title: \"INBOUND LOAD REPORT\",\n table: {\n columns,\n items,\n },\n footer,\n },\n },\n });\n } catch (err) {\n logError(\"inbound:exportPdf\", err, notify);\n }\n};\n\nexport const inboundExportCsv = (inbounds) => {\n const customHeaderMap = new Map();\n debugger;\n\n const inboundsForExport = inbounds.map((inbound) => {\n const inboundForExport = { ...inbound };\n\n if (inbound.inventories?.items) {\n inboundForExport.tallySheet = inbound.inventories.items.map(\n (inventory) => {\n const lineItem = {\n inventoryId: inventory.id,\n productCode: inventory.productCode,\n productName: inventory.productName,\n lotNumber: inbound.lotNumber,\n dateReceived: inbound.placedDateTime\n ? new Date(inbound.placedDateTime).toLocaleDateString()\n : \"\",\n quantityReceived: inventory.quantityDelivered,\n units: inventory.inventoryUnits,\n pieces: inventory.pcs,\n };\n\n return lineItem;\n }\n );\n }\n delete inboundForExport.inventories;\n\n if (inbound.customFields?.length > 0) {\n debugger;\n inbound.customFields.forEach((field) => {\n exportCustomField(field, inboundForExport, customHeaderMap);\n });\n }\n\n delete inboundForExport.account;\n delete inboundForExport.accountId;\n delete inboundForExport.area;\n delete inboundForExport.areaId;\n delete inboundForExport.assignedTo;\n delete inboundForExport.carrierType;\n delete inboundForExport.createdAt;\n delete inboundForExport.createDateTime;\n delete inboundForExport.daysOnDemurrageClock;\n delete inboundForExport.endDateTime;\n delete inboundForExport.groups;\n delete inboundForExport.history;\n delete inboundForExport.invoiceId;\n delete inboundForExport.notes;\n delete inboundForExport.owner;\n delete inboundForExport.attachments;\n delete inboundForExport.photos;\n delete inboundForExport.reloadYardCommodity;\n delete inboundForExport.reloadYardCommodityId;\n delete inboundForExport.reloadYardId;\n delete inboundForExport.seals;\n delete inboundForExport.startDateTime;\n delete inboundForExport.state;\n delete inboundForExport.stripeBillingDateTime;\n delete inboundForExport.updatedAt;\n delete inboundForExport.verificationRequired;\n delete inboundForExport.zone;\n delete inboundForExport.zoneId;\n debugger;\n\n return inboundForExport;\n });\n\n jsonExport(\n inboundsForExport,\n { rename: [\"inboundShipmentId\"] },\n (err, csv) => {\n downloadCSV(csv, `inboundShipments_${new Date().toLocaleDateString()}`); // download as 'inboundShipments.csv` file\n }\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport {\n Box,\n Card,\n Divider,\n Drawer,\n Tab,\n Tabs,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport classnames from \"classnames\";\nimport {\n BulkActionsToolbar,\n CreateButton,\n Datagrid,\n DateField,\n EditButton,\n FilterButton,\n FunctionField,\n ListContextProvider,\n ListToolbar,\n RefreshButton,\n SimpleList,\n TextField,\n Title,\n TopToolbar,\n useListContext,\n} from \"react-admin\";\nimport { ChevronRightIcon, MobileIcon } from \"../../../components/common\";\n// import { CustomField } from \"../../../components/common/CustomFields\";\nimport { Empty } from \"../../../components/common/Empty\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { QuickFilter } from \"../../../components/common/QuickFilter\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { isAuthorized, isSubscriptionDisabled } from \"../../../utils/appUtils\";\nimport {\n AclType,\n InboundStatus,\n MAX_INVENTORY_QUERY_LIMIT,\n} from \"../../../utils/constants\";\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\nimport { exceptionRenderer, truncateText } from \"../../../utils/utils\";\nimport {\n BulkCreateInvoiceButton,\n CreateInvoiceButton,\n} from \"./CreateInvoiceButton\";\nimport { ConfirmationDrawer, AdvanceButton } from \"./AdvanceButton\";\nimport { InboundStateIcon } from \"./InboundStateIcon\";\nimport { ListDatePicker } from \"../../../components/common/ListDatePicker\";\nimport ExportDropDown from \"../../../components/common/ExportDropDown\";\nimport { inboundExportCsv, inboundExportPdf } from \"./InboundExports\";\nimport { AccountDropDown } from \"../../../components/common/AccountDropDown\";\n\nconst useStyles = makeStyles((theme) => ({\n listRoot: {\n transition: theme.transitions.create([\"all\"], {\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: 0,\n },\n listWithDrawer: {\n marginRight: 340,\n },\n drawerPaper: {\n zIndex: 100,\n },\n bulkActions: {\n // [classes.bulkActions] remove to restore original behavior\n marginTop: -theme.spacing(8),\n transition: theme.transitions.create(\"margin-top\"),\n },\n}));\n\nconst tabs = [\n {\n id: InboundStatus.IN_TRANSIT,\n name: \"In Transit\",\n sortKey: \"scheduledDateTime\",\n sortOrder: \"ASC\",\n showSmall: true,\n },\n {\n id: InboundStatus.ARRIVED,\n name: \"Notified\",\n sortKey: \"notifyDateTime\",\n sortOrder: \"ASC\",\n showSmall: true,\n },\n {\n id: InboundStatus.PLACED,\n name: (\n <Box display=\"flex\">\n <MobileIcon />\n PLACED\n </Box>\n ),\n sortKey: \"placedDateTime\",\n sortOrder: \"ASC\",\n showSmall: true,\n },\n {\n id: InboundStatus.RELEASED,\n name: \"Released\",\n sortKey: \"releaseDateTime\",\n sortOrder: \"DESC\",\n showSmall: false,\n },\n];\n\nconst InboundSearchField = (props) => {\n const { label, alwaysOn } = props;\n const { displayedFilters, filterValues, setFilters } = useListContext(props);\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n setFilters(\n {\n ...filterValues,\n or: [\n { accountName: { matchPhrasePrefix: `${value}` } },\n { assignedTo: { matchPhrasePrefix: `${value}` } },\n { shipFrom: { matchPhrasePrefix: `${value}` } },\n { poNumber: { matchPhrasePrefix: `${value}` } },\n { poNumber: { wildcard: `*${value}*` } },\n { railCarNumber: { matchPhrasePrefix: `${value}` } },\n { railCarNumber: { wildcard: `*${value}*` } },\n { lotNumber: { matchPhrasePrefix: `${value}` } },\n { lotNumber: { wildcard: `*${value}*` } },\n { customFields: { matchPhrasePrefix: `${value}` } },\n { customFields: { wildcard: `*${value}*` } },\n ],\n },\n displayedFilters\n );\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = (mdDown, tabValue) => {\n const filters = [\n <AccountDropDown\n source=\"accountId.eq\"\n label=\"Account\"\n alwaysOn={!mdDown}\n />,\n <InboundSearchField label=\"Search\" tabValue={tabValue} alwaysOn />,\n <QuickFilter\n source=\"hasException\"\n label=\"Has Exception\"\n defaultValue={{ eq: true }}\n />,\n ];\n\n if (tabs[tabValue].id === InboundStatus.RELEASED) {\n filters.push(\n <QuickFilter\n source=\"invoiceId\"\n label=\"Not Invoiced\"\n defaultValue={{ exists: false }}\n />,\n <ListDatePicker\n label=\"Date received\"\n source=\"endDateTime\"\n filterField=\"endDateTime\"\n />\n );\n }\n return filters;\n};\n\nconst BulkListActions = (props) => <BulkCreateInvoiceButton {...props} />;\n\nconst ListActions = (props) => {\n const { isXSmall } = props;\n const { resource, total } = useListContext();\n\n return !isXSmall ? (\n <TopToolbar>\n <FilterButton />\n <CreateButton disabled={isSubscriptionDisabled()} />\n <ExportDropDown\n total={total}\n resource={resource}\n exporter={inboundExportCsv}\n exporterPdf={inboundExportPdf}\n maxResults={MAX_INVENTORY_QUERY_LIMIT}\n />\n <RefreshButton />\n </TopToolbar>\n ) : null;\n};\n\nconst getSortOrder = (tabIndex) => {\n return tabs[tabIndex].sortOrder;\n};\n\nconst getSortBy = (tabValue) => {\n const tabIndex = tabs.findIndex((tab) => tab.id === tabValue);\n return `{\"key\":\"inboundShipmentByReloadYardByStatusByDates\", \"search\":\"${tabs[tabIndex].sortKey}\"}`;\n};\n\nconst getSessionTab = () => {\n const sessionTab = Number(sessionStorage.getItem(`InboundTab`));\n if (sessionTab && tabs[sessionTab]) {\n return sessionTab;\n }\n return 0; // Default to the first visible tab if the sessionTab is not valid\n};\n\nexport const InboundList = (props) => {\n const classes = useStyles();\n const mdDown = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const [tabIndex, setTabIndex] = useState(getSessionTab());\n const [isDrawerOpen, setDrawerOpen] = useState(false);\n const [advanceRecord, setAdvanceRecord] = useState();\n const [advanceStatus, setAdvanceStatus] = useState();\n const [account, setAccount] = useState();\n\n const [defaultFilter, setDefaultFilter] = useState({\n reloadYardId: window.appUser.reloadYardId,\n statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime:\n {\n beginsWith: {\n status: tabs[tabIndex].id,\n },\n },\n });\n const [defaultSearchFilter, setDefaultSearchFilter] = useState({\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: tabs[tabIndex].id },\n });\n const defaultSort = {\n field: getSortBy(tabs[tabIndex].id),\n order: getSortOrder(tabIndex),\n };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = Number(\n localStorage.getItem(`${props.resource}_perPage`)\n );\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? sessionPerPage : 10\n );\n\n const listContext = useSearchableList({\n ...props,\n defaultTitle: \"Inbound\",\n defaultFilter: defaultFilter,\n defaultSearchFilter: defaultSearchFilter,\n defaultPerPage: defaultPerPage,\n defaultSort: defaultSort,\n resource: \"inboundShipments\",\n });\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n useEffect(() => {\n if (listContext?.filter) {\n // reset list on automatic stale list reset\n // Extract the key query from defaultSort\n const fieldObj = JSON.parse(defaultSort.field);\n const keyToCheck = fieldObj.key;\n\n // Check for the key's presence in filter\n const hasKey = keyToCheck in listContext.filter;\n const hasFilterValues = Object.keys(listContext.filterValues).length > 0;\n if (hasKey && hasFilterValues) listContext.setFilters({});\n }\n }, [listContext?.filter]);\n\n const handleTabChange = (value) => {\n debugger;\n setTabIndex(value);\n setDefaultFilter({\n reloadYardId: window.appUser.reloadYardId,\n statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime:\n {\n beginsWith: {\n status: tabs[value].id,\n },\n },\n });\n setDefaultSearchFilter({\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: tabs[value].id },\n });\n listContext.setSort(getSortBy(tabs[value].id), getSortOrder(value));\n listContext.setPage(1);\n };\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Inbound\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters(mdDown, tabIndex)}\n actions={<ListActions isXSmall={isXSmall} />}\n />\n <Card\n className={classnames(\n classes.listRoot,\n { [classes.listWithDrawer]: isDrawerOpen },\n { [classes.bulkActions]: listContext.selectedIds.length > 0 }\n // [classes.bulkActions] remove to restore original behavior\n )}\n >\n <BulkActionsToolbar>\n <BulkListActions {...listContext} />\n </BulkActionsToolbar>\n <ShipmentTabs\n {...props}\n {...listContext}\n isDrawerOpen={isDrawerOpen}\n setDrawerOpen={setDrawerOpen}\n setAdvanceRecord={setAdvanceRecord}\n setAdvanceStatus={setAdvanceStatus}\n account={account}\n tabValue={tabIndex}\n setTabValue={handleTabChange}\n isXSmall={isXSmall}\n isMedium={mdDown}\n />\n <Pagination {...listContext} />\n </Card>\n <Drawer\n open={isDrawerOpen}\n variant=\"persistent\"\n anchor=\"right\"\n classes={{ paper: classes.drawerPaper }}\n >\n {/* To avoid any errors if the route does not match, we don't render at all the component in this case */}\n {isDrawerOpen ? (\n <ConfirmationDrawer\n {...props}\n isOpen={isDrawerOpen}\n record={advanceRecord}\n newStatus={advanceStatus}\n setDrawerOpen={setDrawerOpen}\n />\n ) : null}\n </Drawer>\n </ListContextProvider>\n );\n};\n\nconst ShipmentTabs = ({\n account,\n tabValue,\n setTabValue,\n setPage,\n ...props\n}) => {\n const { isMedium } = props;\n\n const handleChange = (event, value) => {\n sessionStorage.setItem(\"InboundTab\", value);\n setTabValue(value);\n };\n\n return (\n <>\n <Tabs\n value={tabValue}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n onChange={handleChange}\n >\n {tabs.map(\n (itm, idx) =>\n (!isMedium || itm.showSmall) && (\n <Tab\n value={idx}\n key={itm.id}\n label={itm.name}\n id={`shipment-${idx}`}\n />\n )\n )}\n </Tabs>\n <Divider />\n {tabs.map(\n (itm) =>\n itm.id === tabs[tabValue].id && (\n <ShipmentGrid\n {...props}\n key={itm.id}\n account={account}\n tabValue={itm.id}\n />\n )\n )}\n </>\n );\n};\n\nconst ShipmentGrid = ({ ids, page, account, tabValue, ...props }) => {\n const { isXSmall, isMedium } = props;\n // const accountFields = account?.inventoryCustomFields?.length > 0 ? account.inventoryCustomFields : [];\n // const customGridFields = accountFields ? accountFields.map((field, index) => {\n // return <CustomField source={`customFields[${index}]`} field={field} label={field.name} sortable={true} />\n // }) : [];\n\n if (tabValue === InboundStatus.IN_TRANSIT && ids.length === 0 && page === 1)\n return <Empty {...props} message=\"Create a new inbound\" />;\n else\n return isXSmall ? (\n <SimpleList\n primaryText={(record) => record.accountName}\n secondaryText={(record) => `Car/Trl No:: ${record.railCarNumber}`}\n tertiaryText={(record) =>\n record.assignedTo ? truncateText(record.assignedTo, 12) : null\n }\n leftIcon={(record) => <InboundStateIcon record={record} />}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n linkType=\"edit\"\n />\n ) : isMedium ? (\n <Datagrid rowClick=\"edit\">\n {tabValue === InboundStatus.PLACED ||\n tabValue === InboundStatus.RELEASED ? (\n <InboundStateIcon />\n ) : null}\n {tabValue === InboundStatus.PLACED ||\n tabValue === InboundStatus.RELEASED ? (\n <FunctionField\n source=\"hasException\"\n label=\" \"\n render={exceptionRenderer}\n />\n ) : null}\n <TextField source=\"accountName\" label=\"Customer\" sortable={true} />\n {tabValue === InboundStatus.IN_TRANSIT ? (\n <DateField\n source=\"scheduledDateTime\"\n label=\"Scheduled Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n {tabValue === InboundStatus.ARRIVED ? (\n <DateField\n source=\"notifyDateTime\"\n label=\"Notify Date\"\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n {tabValue === InboundStatus.PLACED ? (\n <DateField\n source=\"placedDateTime\"\n label=\"Placed Date\"\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n {tabValue === InboundStatus.RELEASED ? (\n <DateField\n source=\"releaseDateTime\"\n label=\"Release Date\"\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n <TextField source=\"railCarNumber\" label=\"Car/Trl No\" sortable={true} />\n <TextField source=\"poNumber\" label=\"PO Number\" sortable={true} />\n {tabValue === InboundStatus.PLACED ? (\n <TextField source=\"assignedTo\" label=\"Assigned To\" sortable={true} />\n ) : null}\n </Datagrid>\n ) : (\n <Datagrid\n rowClick=\"edit\"\n hasBulkActions={\n tabValue === InboundStatus.RELEASED && isAuthorized(AclType.INVOICES)\n }\n >\n {tabValue === InboundStatus.PLACED ||\n tabValue === InboundStatus.RELEASED ? (\n <InboundStateIcon />\n ) : null}\n {tabValue === InboundStatus.PLACED ||\n tabValue === InboundStatus.RELEASED ? (\n <FunctionField\n source=\"hasException\"\n label=\" \"\n render={exceptionRenderer}\n />\n ) : null}\n <TextField source=\"accountName\" label=\"Customer\" sortable={true} />\n {tabValue === InboundStatus.IN_TRANSIT ? (\n <DateField\n source=\"scheduledDateTime\"\n label=\"Scheduled Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n {tabValue === InboundStatus.ARRIVED ? (\n <DateField\n source=\"notifyDateTime\"\n label=\"Notify Date\"\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n {tabValue === InboundStatus.PLACED ? (\n <DateField\n source=\"placedDateTime\"\n label=\"Placed Date\"\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n {tabValue === InboundStatus.RELEASED ? (\n <DateField\n source=\"releaseDateTime\"\n label=\"Release Date\"\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n <TextField source=\"railCarNumber\" label=\"Car/Trl No\" sortable={true} />\n <TextField source=\"poNumber\" label=\"PO Number\" sortable={true} />\n {tabValue === InboundStatus.PLACED ? (\n <TextField source=\"assignedTo\" label=\"Assigned To\" sortable={true} />\n ) : null}\n\n {tabValue === InboundStatus.RELEASED ? (\n <CreateInvoiceButton {...props} />\n ) : null}\n {tabValue === InboundStatus.IN_TRANSIT ? (\n <AdvanceButton\n record={props}\n newStatus={InboundStatus.ARRIVED}\n buttonLabel=\"Set Notified\"\n {...props}\n />\n ) : null}\n {tabValue === InboundStatus.IN_TRANSIT ||\n tabValue === InboundStatus.ARRIVED ? (\n <AdvanceButton\n record={props}\n newStatus={InboundStatus.PLACED}\n buttonLabel=\"Set Placed\"\n {...props}\n />\n ) : null}\n {tabValue === InboundStatus.PLACED ? (\n <AdvanceButton\n record={props}\n newStatus={InboundStatus.RELEASED}\n buttonLabel=\"Set Released\"\n {...props}\n />\n ) : null}\n <EditButton />\n </Datagrid>\n );\n};\n","import React from \"react\";\nimport { Grid } from \"@material-ui/core\";\nimport {\n ArrayInput,\n FormDataConsumer,\n SimpleFormIterator,\n TextInput,\n required,\n SelectInput,\n BooleanInput,\n} from \"react-admin\";\n\nconst validateRequired = required();\n\nexport const Checklist = ({\n workFlowSteps,\n source,\n label = false,\n className,\n isDisabled,\n}) => {\n return (\n <ArrayInput\n source={source}\n label={label}\n className={className ? className : \"\"}\n fullWidth\n >\n <SimpleFormIterator disableAdd={isDisabled} disableRemove={isDisabled}>\n <FormDataConsumer>\n {({\n formData, // The whole form data\n scopedFormData, // The data for this item of the ArrayInput\n getSource, // Function to get the valid source inside an ArrayInput. Translates to \"inventories.items[].property\"\n ...rest\n }) => (\n <Grid container spacing={1}>\n <Grid item xs={12} md={4}>\n <TextInput\n label=\"Name\"\n source={getSource(\"name\")}\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n helperText={false}\n disabled={isDisabled}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n label=\"Step Name\"\n source={getSource(\"stepName\")}\n variant=\"outlined\"\n fullWidth\n choices={workFlowSteps}\n validate={validateRequired}\n helperText={false}\n disabled={isDisabled}\n />\n </Grid>\n <Grid item xs={4}>\n <BooleanInput\n label=\"Required\"\n source={getSource(\"isRequired\")}\n helperText={false}\n disabled={isDisabled}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n source={getSource(\"description\")}\n label=\"Description\"\n variant=\"outlined\"\n multiline\n fullWidth\n validate={validateRequired}\n helperText={false}\n disabled={isDisabled}\n />\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n );\n};\n","import React, { useState, useEffect } from \"react\";\nimport {\n Box,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n Grid,\n IconButton,\n InputAdornment,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n ArrayField,\n ArrayInput,\n Button,\n Datagrid,\n FormDataConsumer,\n TextField,\n TextInput,\n SimpleFormIterator,\n useNotify,\n useInput,\n useRecordContext,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\nimport {\n AcceptedIcon,\n CloseIcon,\n KeyboardOutlinedIcon,\n ScannerIcon,\n} from \"../../../components/common\";\nimport { areAllSealsValid } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles((theme) => ({\n dialogTitle: {\n display: \"flex\",\n paddingTop: \"5px\",\n paddingBottom: \"5px\",\n justifyContent: \"space-between\",\n },\n title: {\n paddingTop: theme.spacing(1),\n },\n dialogContent: {\n minHeight: \"50vh\",\n },\n arraySeals: {\n width: \"100%\",\n },\n tableCellIcon: {\n padding: \"3px\",\n textAlign: \"center\",\n height: \"33px\",\n },\n}));\n\nconst BarcodeInput = ({ source, ...props }) => {\n const {\n input: { value, onChange },\n meta: { touched, error },\n } = useInput({ source, ...props });\n\n const [inputValue, setInputValue] = useState(\"\");\n\n useEffect(() => {\n if (Array.isArray(value)) {\n setInputValue(value.join(\", \"));\n } else {\n setInputValue(\"\");\n }\n }, [value]);\n\n const handleChange = (event) => {\n const { value } = event.target;\n setInputValue(value);\n const arrayValue = value.split(/[, ]+/).map((item) => item.trim());\n onChange(arrayValue);\n };\n\n const parse = (value) => value.split(/[, ]+/).map((item) => item.trim());\n\n return (\n <TextInput\n {...props}\n source={source}\n value={inputValue}\n onChange={handleChange}\n variant=\"outlined\"\n helperText={touched && error ? error : \"\"}\n parse={parse}\n hidden={true}\n fullWidth\n />\n );\n};\n\nconst BooleanIconField = ({ source }) => {\n const record = useRecordContext();\n if (!record) return null;\n return record[source] ? (\n <ScannerIcon fontSize=\"small\" />\n ) : (\n <KeyboardOutlinedIcon fontSize=\"small\" />\n );\n};\n\nexport const SealNumbersDialog = ({\n open,\n onClose,\n formData,\n SetAllSealsValid,\n}) => {\n const [validSeals, setValidSeals] = useState({ items: [] });\n const [inValidSeals, setInValidSeals] = useState({ items: [] });\n const [inValidSealNumber, setInValidSealNumber] = useState([]);\n const classes = useStyles();\n const form = useForm();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const notify = useNotify();\n\n const getInvalidSealnumbers = (sealNumbers, sealsObjectItems) => {\n const sealsFromObject = sealsObjectItems\n .map((item) => item.validated && item.barcode)\n .filter(Boolean);\n return sealNumbers?.filter((el) => !sealsFromObject.includes(el));\n };\n\n useEffect(() => {\n SetAllSealsValid(\n areAllSealsValid(\n formData?.inValidSealNumber,\n formData?.inValidSeals?.items\n )\n );\n }, [formData?.inValidSealNumber, formData?.inValidSeals?.items]);\n\n useEffect(() => {\n if (formData?.sealNumbers && formData?.seals?.items) {\n debugger;\n form.change(\n \"inValidSealNumber\",\n getInvalidSealnumbers(formData.sealNumbers, formData.seals.items)\n );\n }\n if (formData?.seals?.items) {\n debugger;\n form.change(\"inValidSeals\", {\n items: formData.seals.items.filter((el) => !el.validated),\n });\n const updatedSeals = formData.seals.items.filter((el) => el.validated);\n setValidSeals({ items: updatedSeals });\n setInValidSeals({\n items: formData.seals.items.filter((el) => !el.validated),\n });\n setInValidSealNumber(\n getInvalidSealnumbers(formData.sealNumbers, formData.seals.items)\n );\n }\n }, [formData?.seals?.items]);\n\n function arraysEqual(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n }\n function objectEqual(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n for (let i = 0; i < arr1.length; i++) {\n if (\n arr1[i].barcode !== arr2[i].barcode ||\n arr1[i].validated !== arr2[i].validated\n ) {\n return false;\n }\n }\n return true;\n }\n\n const handleClose = () => {\n debugger;\n if (\n !arraysEqual(formData.inValidSealNumber, inValidSealNumber) ||\n !objectEqual(formData.inValidSeals.items, inValidSeals.items)\n ) {\n form.change(\"sealNumbers\", [\n ...formData.inValidSealNumber,\n ...validSeals.items.map((item) => item.barcode),\n ]);\n }\n if (\n arraysEqual(formData.inValidSealNumber, inValidSealNumber) &&\n objectEqual(formData.inValidSeals.items, inValidSeals.items)\n ) {\n form.change(\"sealNumbers\", form.getFieldState(\"sealNumbers\").initial);\n }\n onClose();\n };\n const handlevalidation = (scopedFormData, getSource) => {\n if (formData.inValidSealNumber.includes(scopedFormData.barcode)) {\n form.change(getSource(\"validated\"), true);\n notify(\"Seal successfully validated.\", \"info\");\n } else {\n notify(\"Unable to match seal numbers.\", \"error\");\n }\n };\n\n return (\n <Dialog\n open={open}\n onClose={handleClose}\n maxWidth={isSmall ? \"xxl\" : \"lg\"}\n fullWidth\n >\n <DialogTitle disableTypography className={classes.dialogTitle}>\n <Typography className={classes.title} variant=\"h6\">\n Seal Manager\n </Typography>\n <IconButton aria-label=\"close\" onClick={handleClose}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n <DialogContent dividers className={classes.dialogContent}>\n <Grid container spacing={2}>\n {formData?.inValidSeals?.items?.length > 0 ||\n formData?.inValidSealNumber?.length > 0 ? (\n <>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Unmatched Seals\n </Typography>\n <Grid container spacing={3}>\n <Grid item xs={12} md={6}>\n <ArrayInput\n source=\"inValidSealNumber\"\n label=\"Advised seals\"\n >\n <SimpleFormIterator>\n <FormDataConsumer>\n {({ getSource, formData, scopedFormData }) => {\n const sealsFrominvalidObject =\n formData.inValidSeals.items\n .map((item) => item.validated && item.barcode)\n .filter(Boolean);\n return (\n <TextInput\n variant=\"outlined\"\n label=\"\"\n source={getSource(\"\")}\n fullWidth\n disabled={sealsFrominvalidObject.includes(\n scopedFormData\n )}\n />\n );\n }}\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n </Grid>\n <Grid item xs={0.5}>\n <Divider orientation=\"vertical\" variant=\"middle\" />\n </Grid>\n <Grid item xs={12} md={5}>\n <ArrayInput\n source=\"inValidSeals.items\"\n label=\"Entered seals\"\n fullWidth\n >\n <SimpleFormIterator\n disableReordering\n disableAdd\n disableRemove\n >\n <FormDataConsumer>\n {({ getSource, formData, scopedFormData }) => {\n const sealsFrominvalidObject =\n formData.inValidSeals.items\n .map((item) => item.validated && item.barcode)\n .filter(Boolean);\n return (\n <Box display=\"flex\">\n <TextInput\n variant=\"outlined\"\n label=\"\"\n source={getSource(\"barcode\")}\n fullWidth\n disabled={sealsFrominvalidObject.includes(\n scopedFormData.barcode\n )}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n {scopedFormData?.isScanned ? (\n <ScannerIcon />\n ) : (\n <KeyboardOutlinedIcon />\n )}\n </InputAdornment>\n ),\n }}\n />\n <Box mt={1}>\n <Button\n onClick={() =>\n handlevalidation(\n scopedFormData,\n getSource\n )\n }\n label=\"Validate\"\n color=\"default\"\n >\n <AcceptedIcon />\n </Button>\n </Box>\n </Box>\n );\n }}\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12}>\n <Divider variant=\"middle\" />\n </Grid>\n </>\n ) : (\n \"\"\n )}\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Validated Seals\n </Typography>\n <ArrayField\n source=\"items\"\n label=\"Valid seals\"\n fullWidth\n record={validSeals}\n >\n <Grid container direction=\"row\">\n <Grid item xs={12} md={1}>\n <Datagrid>\n <BooleanIconField\n source=\"isScanned\"\n label=\" \"\n fullWidth\n emptyText=\" \"\n cellClassName={classes.tableCellIcon}\n />\n </Datagrid>\n </Grid>\n <Grid item xs={12} md={4}>\n <Datagrid>\n <TextField source=\"barcode\" fullWidth emptyText=\" \" />\n </Datagrid>\n </Grid>\n <Grid item xs={12} md={3}>\n <Datagrid>\n <TextField\n source=\"createdBy\"\n label=\"Entered By\"\n fullWidth\n emptyText=\" \"\n />\n </Datagrid>\n </Grid>\n <Grid item xs={12} md={4}>\n <Datagrid>\n <TextField\n source=\"description\"\n fullWidth\n emptyText=\" \"\n />\n </Datagrid>\n </Grid>\n </Grid>\n </ArrayField>\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} label=\"Close\" color=\"default\" />\n </DialogActions>\n </Dialog>\n );\n};\n\nexport const SealNumbersCreateDialog = ({ open, onClose, formData }) => {\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const handleClose = () => {\n onClose();\n };\n\n return (\n <Dialog\n open={open}\n onClose={handleClose}\n maxWidth={isSmall ? \"xxl\" : \"lg\"}\n fullWidth\n >\n <DialogTitle disableTypography className={classes.dialogTitle}>\n <Typography className={classes.title} variant=\"h6\">\n Seal Manager\n </Typography>\n <IconButton aria-label=\"close\" onClick={handleClose}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n <DialogContent className={classes.dialogContent}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <BarcodeInput source=\"sealNumbers\" />\n </Grid>\n <Grid item xs={12}>\n <ArrayInput\n source=\"sealNumbers\"\n label=\"Advised Seals\"\n className={classes.arraySeals}\n >\n <SimpleFormIterator disableReordering>\n <FormDataConsumer>\n {({ getSource }) => (\n <Grid>\n <TextInput\n source={getSource(\"\")}\n label=\"\"\n variant=\"outlined\"\n helperText={false}\n />\n </Grid>\n )}\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} label=\"Close\" color=\"default\" />\n </DialogActions>\n </Dialog>\n );\n};\n","import React, { useState } from \"react\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { API } from \"aws-amplify\";\n\nimport { Backdrop, CircularProgress } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n Confirm,\n FormDataConsumer,\n SaveButton,\n useNotify,\n useRedirect,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport {\n FilePaths,\n InboundState,\n InboundStatus,\n InventoryStatus,\n NoteType,\n WorkflowType,\n} from \"../../../utils/constants\";\nimport { getCustomFieldsToSave } from \"../../../components/common/CustomFields\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { saveRemoveFiles } from \"../../../utils/fileUtils\";\nimport { isBulkShipment } from \"../../../utils/loadTypeUtils\";\nimport { CancelIcon } from \"../../../components/common\";\nimport {\n calcNetWeight,\n formValidate,\n getWeightUnits,\n validateInboundUnicity,\n} from \"./InboundUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n}));\n\nexport const ValidateCreateButton = ({ account, ...props }) => {\n const classes = useStyles();\n const form = useForm();\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n const [confirmContent, setConfirmContent] = useState(\"\");\n const [isSaving, setIsSaving] = useState(false);\n\n const handleValidateSave = async (formData) => {\n const messages = [];\n debugger;\n\n const isValid = formValidate(form, notify);\n if (isValid) {\n const duplicateNumbers = await validateInboundUnicity(formData);\n if (duplicateNumbers.length > 0) {\n messages.push(\n \"Inbound with this \" +\n duplicateNumbers.join(\" & \") +\n \"Number already exists. Saving will create a possible duplicate.\"\n );\n }\n if (\n formData?.account?.trackInboundSeals &&\n !formData?.sealNumbers?.length\n ) {\n messages.push(\n \"No seal numbers were added. Proceed saving without tracking seals?\"\n );\n }\n }\n\n if (messages.length) {\n const messageFragment = (\n <>\n {messages.map((msg, index) => (\n <React.Fragment key={index}>\n {msg} <br />\n </React.Fragment>\n ))}\n </>\n );\n setConfirmContent(messageFragment);\n setOpen(true);\n } else handleSave();\n };\n\n const handleDialogClose = () => setOpen(false);\n const handleDialogCconfirm = () => handleSave();\n\n const handleSave = () => {\n setOpen(false);\n props.handleSubmit();\n };\n\n const transform = async (data) => {\n setIsSaving(true);\n data = { ...data };\n debugger;\n\n try {\n data.active = \"true\";\n data.status = InboundStatus.IN_TRANSIT;\n data.state = InboundState.NEW;\n data.groups = window.appUser?.groups;\n data.reloadYardId = window.appUser?.reloadYardId;\n data.accountName = account.businessName;\n data.railCarNumber = data.railCarNumber ? data.railCarNumber : \"\";\n\n data.createDateTime = new Date();\n data.scheduledDateTime = data.scheduledDateTime\n ? data.scheduledDateTime\n : null;\n data.notifyDateTime = null;\n data.placedDateTime = null;\n data.releaseDateTime = null;\n data.daysOnDemurrageClock = 0;\n\n data.lotNumber =\n data.lotNumberOverride === true\n ? data.lotNumber\n : account.lotNumberPrefix + data.lotNumber;\n data.lotType = data.lotType ? data.lotType : \"\";\n data.scaleWeightUnits = data.weightUnits;\n data.shipFrom = data.shipFrom ? data.shipFrom : data.accountName;\n\n // if netWeight not calculated in form, try it here\n const hasWeights = data.inventories?.items?.every(\n (itm) => itm.weight != null && !isNaN(itm.weight)\n );\n if (hasWeights) {\n const weghtUnits =\n data.weightUnits || data.inventories.items[0]?.weightUnits;\n data.netWeight = calcNetWeight(data, null, weghtUnits);\n if (data.netWeight) data.weightUnits = weghtUnits;\n }\n\n if (isBulkShipment(data.reloadYardCommodityId, data.areaId))\n data.workflowType = WorkflowType.BULK;\n else data.workflowType = WorkflowType.ACCEPT_STORE;\n\n data.totalQuantity = data.totalQuantity || 0;\n\n data.customFields = getCustomFieldsToSave(\n data.customFields,\n account?.inboundCustomFields\n );\n\n data.history = [\n {\n text: `Created Inbound.`,\n type: NoteType.GENERIC,\n date: new Date(),\n by: window.appUser?.fullName,\n },\n ];\n\n if (data.notes?.length > 0) {\n data.notes.forEach((element) => {\n element.type = NoteType.GENERIC;\n element.date = new Date();\n element.by = window.appUser?.fullName;\n });\n } else data.notes = undefined;\n\n await Promise.all([\n saveRemoveFiles(\n undefined,\n data,\n \"attachments\",\n `${FilePaths.INBOUND}/${Date.now()}`\n ),\n saveRemoveFiles(\n undefined,\n data,\n \"photos\",\n `${FilePaths.INBOUND}/${Date.now()}`\n ),\n ]);\n } catch (err) {\n logError(\"inboundShipments:ValidateCreateButton:transform\", err, notify);\n return Promise.reject();\n }\n\n delete data.account;\n delete data.customFieldSelect;\n delete data.inventories;\n delete data.reloadYardCommodity;\n\n delete data.manifestFile; // cleanup CSV upload side effects\n\n return data;\n };\n\n const onSuccess = async ({ data }) => {\n try {\n const inventoryState = form.getFieldState(\"inventories.items\");\n const inventories = inventoryState?.value || [];\n const inventoryCreateList = [];\n debugger;\n\n const history = [\n {\n text: `Created Inventory.`,\n type: NoteType.GENERIC,\n date: data.createdAt,\n by: window.appUser?.fullName,\n },\n ];\n\n inventories.forEach((item, index) => {\n const input = {\n id: uuidv4(),\n __typename: \"Inventory\",\n owner: data.owner,\n createdAt: data.createdAt,\n updatedAt: data.createdAt,\n active: data.active,\n status: InventoryStatus.IN_TRANSIT,\n groups: data.groups,\n sortKey: index + 10001,\n accountName: data.accountName,\n poNumber: data.poNumber,\n areaId: data.areaId,\n zoneId: data.zoneId,\n aisleId: null,\n locationId: null,\n productName: item.productName,\n deliveryDateTime: null,\n inventoryUnits: data.totalUnits,\n quantityShipped: item.quantityShipped,\n quantityCommitted: 0,\n quantityOnHand: 0,\n quantityPhysical: 0,\n pcs: item.pcs,\n pcsHeight: item.pcsHeight,\n pcsWidth: item.pcsWidth,\n pcsLength: item.pcsLength,\n accountId: data.accountId,\n reloadYardId: data.reloadYardId,\n inboundShipmentId: data.id,\n history: history,\n };\n input.productCode = item.productCode ? item.productCode : \"\";\n input.productId = item.productId ? item.productId : \"\";\n input.reloadYardCommodityId =\n item.productId && item.reloadYardCommodityId\n ? item.reloadYardCommodityId\n : data.reloadYardCommodityId;\n\n if (item.weight) {\n input.weight = item.weight;\n input.weightUnits = getWeightUnits(account, item);\n }\n\n input.lotType = data.lotType ? data.lotType : \"\";\n input.lotNumber = data.lotType ? data.lotNumber : \"\";\n input.railCarNumber = data.railCarNumber;\n\n input.customFields = getCustomFieldsToSave(\n item.customFields,\n data.account.inventoryCustomFields\n );\n\n // input[\"status#lotNumber\"] = `${input.status}#${item.lotNumber}`;\n // input[\"status#accountName#productName#lotNumber\"] = `${input.status}#${data.accountName}#${item.productName}#${item.lotNumber}`;\n // input[\"status#accountId#productName#lotNumber\"] = `${input.status}#${data.accountId}#${item.productName}#${item.lotNumber}`;\n\n inventoryCreateList.push(input);\n });\n\n const response = await API.post(\"transREST\", \"/inboundCreate\", {\n body: {\n inventoryCreateList: inventoryCreateList,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n if (response.error) throw response.error;\n\n notify(\"Inbound created successfully\");\n redirect(\"/inboundShipments\");\n } catch (error) {\n logError(\n \"inboundShipments:ValidateCreateButton:onSuccess\",\n error,\n notify,\n redirect\n );\n } finally {\n setIsSaving(false);\n }\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\"inboundShipments:ValidateCreateButton:onFailure\", error, notify);\n };\n\n // Pass ...props, not ...rest to FormDataConsumer to include handleSubmitWithRedirect from props\n return (\n <FormDataConsumer>\n {({ formData, ...props }) => (\n <>\n <Backdrop className={classes.backdrop} open={isSaving}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <SaveButton\n label=\"Save\"\n submitOnEnter={false}\n undoable={false}\n saving={isSaving}\n handleSubmitWithRedirect={() => handleValidateSave(formData)}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <Confirm\n isOpen={open}\n loading={isSaving}\n title=\"Save Confirmation\"\n content={confirmContent}\n onConfirm={handleDialogCconfirm}\n onClose={handleDialogClose}\n CancelIcon={CancelIcon}\n />\n </>\n )}\n </FormDataConsumer>\n );\n};\n","import React from \"react\";\n\nimport { Typography } from \"@material-ui/core\";\n\nimport {\n AddAllIcon,\n AddIcon,\n DocumentIcon,\n EditIcon,\n InfoOutlinedIcon,\n InvoiceIcon,\n LinkOffIcon,\n RemoveIcon,\n} from \"../../../components/common\";\n\nexport const EditHistoryLogHelp = () => (\n <>\n <Typography variant=\"overline\">\n <strong>History Log</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n The History Tab provides an automated, chronological Audit Trail of key\n events and record changes.\n </Typography>\n </>\n);\n\nexport const EditInboundSetupHelp = ({ classes, receiptData }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Inbound Setup</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Origin: </strong>\n Where the shipment is coming from. If shipped directly from customer,\n flip the \"Copy Account\" switch below the field.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Commodity: </strong>\n Select commodity category. Drives default units of measure and other\n settings.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Carrier Type: </strong>\n Select load type - If \"Truckload\", the \"Railcar Number\" field will\n change to \"Trailer Number\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Origin Carrier: </strong>\n Name of Railroad or Trucking company delivering the shipment.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Railcar / Trailer Number: </strong>\n Railcar Number if inbound by Rail, Trailer Number if inbound by Truck.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>PO Number: </strong>\n Purchase Order Number provided by Customer. Used for auto-generating\n Lot Number.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Area and Zone: </strong>\n Select storage destination for inbound commodity. Location will be set\n at a later stage.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Lot Type: </strong> Used to auto-generate Lot Number.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Lot Number: </strong>\n Lot Number Prefix is auto-populated for selected Account.\n Auto-generated using either the PO Number for Car Lot loads, or\n current date for Perpetual loads. Lot Number, excluding the prefix,\n can be manually customized by selecting the \"Manual Override\" switch\n beneath the field.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>PO File: </strong>\n Attach the original PO from customer.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup. These fields are Account-specific, so\n they may differ from one inbound to another.\n </Typography>\n </li>\n <li>\n <Typography>\n <InvoiceIcon className={classes.icon} />\n <strong> INVOICE: </strong>Generate new Invoice for this Inbound\n Shipment.\n </Typography>\n </li>\n <li>\n <Typography>\n <DocumentIcon className={classes.icon} />\n <strong> RECEIPT: </strong>\n Generate Bill of Lading as a downloadable, editable .DOCX document.\n Custom Receipt template can up uploaded in Account settings.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Receipt Data: </strong>\n </Typography>\n <DocData obj={receiptData} />\n </li>\n </ul>\n </>\n);\n\nexport const EditTallySheetLogHelp = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Tally Sheet</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Completing the Tally Sheet Tab also creates new Inventory records, which\n will appear in the Inventory List once the Shipment is \"Accepted\" and\n \"Stored\".\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Product Name: </strong>\n Provide full product name and description. Eg. \"2.4.08 2&BTR WSPF 294\n PC\" for 2x4x8 2&Better WSPF 294 Pieces. Items selected from Product\n Catalog will have an <InfoOutlinedIcon\n className={classes.icon}\n />{\" \"}\n Info Bubble in the right corner. Those not linked to a Product, will\n display <LinkOffIcon className={classes.icon} /> broken link icon.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Advised: </strong>\n Quantity of product to be received - Unit count.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Received: </strong>\n Field becomes editable once the shipment is marked \"Placed\". Qty.\n Received should equal Qty. Advised if no issues with shipment. If\n discrepancy exists, contact customer and adjust either Qty. Advised or\n Received to resolve.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup or Product Catalog. These fields are\n Account- and Product-specific, so they may differ from one inbound to\n another. The Custom Fields button allows you to overrride default\n show/hide settings in the Account setup.\n </Typography>\n </li>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>\n Add a custom Line Item to Tally Sheet - not linked to Product Catalog.\n </Typography>\n </li>\n <li>\n <Typography>\n <AddAllIcon className={classes.icon} />\n <strong> CATALOG ADD: </strong>\n Search Product Catalog to add a new Line Item to Tally Sheet.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Tally Sheet Line Item.\n </Typography>\n </li>\n <li>\n <Typography>\n <EditIcon className={classes.icon} />\n <strong> EDIT: </strong>\n Edit Qty. Advised / Received of selected Line Item. After saving or\n cancelling changes, you will be brought back to this screen.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Total Quantity & Shipping Units: </strong>\n Sum total of Qty. Advised. Indicate units of measure for counting Qty\n Advised / Received.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Bill Quantity & Units: </strong>\n Total Qty. Advised and Units used for invoicing customer.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const EditDispatchLogHelp = () => (\n <>\n <Typography variant=\"overline\">\n <strong>Dispatch</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Use the Dispatch Tab to capture key event timestamps when the shipment is\n advanced from In Transit {\">\"} Notified {\">\"} Placed {\">\"} Released\n status. Alternatively, you can advance a record directly from the \"Inboud\n Shipment\" List view.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Date Created: </strong>\n Date customer advised of Inbbound Shipment.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Time Notified: </strong>\n Time Railroad notified of car Arrival, car not Placed yet. Starts\n Demurrage clock countdown.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Time Placed: </strong>\n Time car is Constructively Placed in the Yard.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Time Released:</strong> Time car is Released to Railroad.\n Stops Demurrage clock countdown.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const EditNoteLogHelp = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Notes</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Use the Notes Tab to manually document key events and changes made to the\n Shipment record.\n </Typography>\n <ul>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>Add new Note Line Item.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Note Line Item - this info will be permanently lost.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const CreateInboundSetupHelp = () => (\n <>\n <Typography variant=\"overline\">\n <strong>Inbound Setup</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Account: </strong>\n Account must be selected first to auto-generate Lot Number and enable\n other fields.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Origin: </strong>\n Where the shipment is coming from. If shipped directly from customer,\n flip the \"Copy Account\" switch below the field.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Commodity: </strong>\n Select commodity category. Drives default units of measure and other\n settings.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Carrier Type: </strong>\n Select load type - If \"Truckload\", the \"Railcar Number\" field will\n change to \"Trailer Number\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Origin Carrier: </strong>\n Name of Railroad or Trucking company delivering the shipment.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Railcar / Trailer Number: </strong>\n Required if shipping by Rail.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>PO Number: </strong>\n Purchase Order Number provided by Customer. Used for auto-generating\n Lot Number.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Area and Zone: </strong>\n Select storage destination for inbound commodity. Location will be set\n at a later stage.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Lot Type: </strong> Used to auto-generate Lot Number.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Lot Number: </strong>\n Lot Number Prefix is auto-populated for selected Account.\n Auto-generated using either the PO Number for Car Lot loads, or\n current date for Perpetual loads. Lot Number, excluding the prefix,\n can be manually customized by selecting the \"Manual Override\" switch\n beneath the field.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>PO File: </strong>\n Attach the original PO from customer.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Photos: </strong>\n Attach Photos if documenting a prior shipment an have available\n photos. Only used for past shipments where photos are available.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup. These fields are Account-specific, so\n they may differ from one inbound to another.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const CreateTallySheetHelp = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Tally Sheet</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Completing the Tally Sheet Tab also creates new Inventory records, which\n will appear in the Inventory List once the Shipment is \"Accepted\" and\n \"Stored\".\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Product Name: </strong>\n Provide full product name and description. Eg. \"2.4.08 2&BTR WSPF 294\n PC\" for 2x4x8 2&Better WSPF 294 Pieces. Items selected from Product\n Catalog will have an <InfoOutlinedIcon\n className={classes.icon}\n />{\" \"}\n Info Bubble in the right corner. Those not linked to a Product, will\n display <LinkOffIcon className={classes.icon} /> broken link icon.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Qty. Advised: </strong>\n Quantity of product to be received - Unit count.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup or Product Catalog. These fields are\n Account- and Product-specific, so they may differ from one inbound to\n another. The Custom Fields button allows you to override default\n show/hide settings in the Account setup.\n </Typography>\n </li>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>\n Add a custom Line Item to Tally Sheet - not linked to Product Catalog.\n </Typography>\n </li>\n <li>\n <Typography>\n <AddAllIcon className={classes.icon} />\n <strong> CATALOG ADD: </strong>\n Search Product Catalog to add a new Line Item to Tally Sheet.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Tally Sheet Line Item.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Total Quantity & Units: </strong>\n Sum total of Qty. Advised. Indicate units of measure for counting Qty\n Advised / Received.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Bill Quantity & Units: </strong>\n Total Qty. Advised and Units used for invoicing customer. If Bill\n Units equal Weight Units, measured truck weight will be used for\n invoicing.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const CreateNotesHelp = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Notes</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Use the Notes Tab to document key events and changes made to the Shipment\n record.\n </Typography>\n <ul>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>Add new Note Line Item.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Note Line Item - this info will be permanently lost.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nconst toSource = function (parent, child) {\n var str = \"\";\n\n for (var c in parent) {\n if (c === \"obj\") {\n str += toSource(parent[c]);\n } else if (!parent[c]) {\n str += (child ? `${child}.${c}: ` : `${c}: `) + '\"\" </br>';\n } else if (typeof parent[c] === \"string\") {\n str += (child ? `${child}.${c}: ` : `${c}: `) + parent[c] + \" </br>\";\n } else if (Array.isArray(parent[c])) {\n for (let i = 0; i < parent[c].length; i++) {\n const itm = parent[c][i];\n str += toSource(itm, `${c}[${i}]`);\n }\n } else {\n if (child) str += toSource(parent[c], `${child}.${c}`);\n else str += toSource(parent[c], c);\n }\n }\n\n return str;\n};\n\nexport const DocData = (obj) => {\n const source = toSource(obj);\n const values = source.split(\"</br>\");\n return (\n <>\n {\" \"}\n {values.map((val) => (\n <Typography> {val} </Typography>\n ))}\n </>\n );\n};\n","import React from \"react\";\nimport { Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n CreateTallySheetHelp,\n CreateNotesHelp,\n CreateInboundSetupHelp,\n EditTallySheetLogHelp,\n EditInboundSetupHelp,\n EditDispatchLogHelp,\n EditHistoryLogHelp,\n EditNoteLogHelp,\n DocData,\n} from \"./InboundHelpComponents\";\n\nconst useStyles = makeStyles(() => ({\n icon: {\n verticalAlign: \"middle\",\n display: \"inline-flex\",\n },\n}));\n\nexport const InboundCreateHelp = (props) => {\n const classes = useStyles();\n const tabNames = props?.location.pathname.split(\"/\");\n const tab = tabNames?.length > 3 ? tabNames[3] : \"\";\n\n switch (tab) {\n case \"\":\n return <CreateInboundSetupHelp classes={classes} />;\n case \"tallySheet\":\n return <CreateTallySheetHelp classes={classes} />;\n case \"notes\":\n return <CreateNotesHelp classes={classes} />;\n default:\n return null;\n }\n};\n\nexport const InboundEditHelp = ({ receiptData, ...props }) => {\n const classes = useStyles();\n const tabNames = props?.location.pathname.split(\"/\");\n const tab = tabNames?.length > 3 ? tabNames[3] : \"\";\n\n switch (tab) {\n case \"\":\n return (\n <EditInboundSetupHelp receiptData={receiptData} classes={classes} />\n );\n case \"historyLog\":\n return <EditHistoryLogHelp classes={classes} />;\n case \"tallySheet\":\n return <EditTallySheetLogHelp classes={classes} />;\n case \"dispatch\":\n return <EditDispatchLogHelp classes={classes} />;\n case \"notes\":\n return <EditNoteLogHelp classes={classes} />;\n default:\n return null;\n }\n};\n\n// TODO - is this needed???\n// export const InboundDynamicEditHelp = ({ bolData }) => {\n// return (\n// <li>\n// <Typography>\n// <strong>Receipt Data: </strong>\n// </Typography>\n// <DocData obj={bolData} />\n// </li>\n// );\n// };\n","import React, { useEffect, useState } from \"react\";\nimport DateFnsUtils from \"@date-io/date-fns\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getAccount } from \"../../../graphql/account/custom-queries\";\n\nimport { areaByActiveBySortKey } from \"../../../graphql/reloadyard/custom-queries\";\nimport {\n Box,\n Dialog,\n Grid,\n InputAdornment,\n makeStyles,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { MuiPickersUtilsProvider, DateTimePicker } from \"@material-ui/pickers\";\nimport {\n ArrayInput,\n BooleanInput,\n Button,\n Create,\n FileInput,\n FormDataConsumer,\n FormTab,\n ImageInput,\n number,\n NumberInput,\n minLength,\n minValue,\n required,\n SelectInput,\n SimpleFormIterator,\n TabbedForm,\n TextInput,\n Toolbar,\n TopToolbar,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\nimport { logError, setupLocationMaps } from \"../../../utils/appUtils\";\nimport {\n ACCEPTED_FILES,\n CARLOT_PO_NO_CHARS,\n CarrierType,\n CarrierTypes,\n InboundStepsChoices,\n InventoryField,\n InventoryStatus,\n LotType,\n LotTypes,\n MAX_FILES,\n MAX_PHOTO_NUM_INBOUND,\n MAX_PHOTO_SIZE,\n MAX_PHOTO_SIZE_MSG,\n Unit,\n UnitOptions,\n} from \"../../../utils/constants\";\nimport { handleFileChange } from \"../../../utils/fileUtils\";\nimport { filterZones } from \"../../../utils/locationUtils\";\nimport {\n getCommodityUnits,\n isBulkCommodity,\n isInventoryFieldVisible,\n unitOptionRenderer,\n} from \"../../../utils/loadTypeUtils\";\nimport { getBackPath, isShipmentUnits } from \"../../../utils/utils\";\nimport {\n AttachFileIcon,\n AttachPhotoIcon,\n CopyDownIcon,\n CreatedAtIcon,\n RemoveIcon,\n SealIcon,\n} from \"../../../components/common\";\nimport { AccountDropDown } from \"../../../components/common/AccountDropDown\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport {\n CustomFields,\n CustomFieldsButton,\n CustomFieldsTallySheet,\n} from \"../../../components/common/CustomFields\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { ImageField } from \"../../../components/common/ImageField\";\nimport { NotesTab } from \"../../../components/common/NotesTab\";\nimport { ProductLinkIcon } from \"../../../components/common/ProductLinkIcon\";\nimport { Checklist } from \"../../../components/common/Checklist\";\nimport { BetaBadge } from \"../../../components/common/FeatureBadges\";\nimport { showWeight } from \"../inventory/InventoryUitls\";\nimport { SealNumbersCreateDialog } from \"./SealNumbersDialog\";\nimport { ValidateCreateButton } from \"./ValidateCreateButton\";\nimport { InboundCreateHelp } from \"./InboundHelp\";\nimport * as utils from \"./InboundUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n arrayInput: {\n marginTop: theme.spacing(0),\n },\n arrayInputHeader: {\n display: \"flex\",\n marginTop: theme.spacing(1),\n marginBottom: -theme.spacing(1),\n justifyContent: \"space-between\",\n },\n booleanInput: {\n marginLeft: theme.spacing(1),\n },\n fileInput: {\n marginTop: -theme.spacing(0),\n },\n}));\n\nconst validateRequired = required();\nconst validatePoNo = [required(), minLength(CARLOT_PO_NO_CHARS)];\nconst validateQuantity = [required(), number(), minValue(0)];\nconst validatePieces = [number(), minValue(1)];\n\nconst ShipmentSetupTab = ({\n account,\n setAccount,\n yardCommodity,\n setYardCommodity,\n ...props\n}) => {\n const form = useForm();\n const notify = useNotify();\n const classes = useStyles();\n const [accounts, setAccounts] = useState([]);\n const [copyAccount, setCopyAccount] = useState(false);\n const [shipFrom, setShipFrom] = useState(\"\");\n const [lotNumber, setLotNumber] = useState(\"\");\n const [areas, setAreas] = useState(\n window.appUser.reloadYard?.areas.items.filter(\n (itm) => itm.active === \"true\"\n )\n );\n const [area, setArea] = useState();\n const [loading, setLoading] = useState(true);\n const [magnifiedUrl, setMagnifiedUrl] = useState(null);\n const [open, setOpen] = useState(false);\n const yardCommodities = window.appUser.reloadYard.activeYardCommodities.items;\n\n useEffect(() => {\n getSetupData();\n }, []);\n\n useEffect(() => {\n if (areas.length === 1) {\n const formData = form.getState().values;\n handleAreaChange(areas[0].id, formData);\n }\n }, [areas]);\n\n const getSetupData = async () => {\n try {\n setLoading(true);\n\n const areaPromise = API.graphql(\n graphqlOperation(areaByActiveBySortKey, {\n reloadYardId: window.appUser?.reloadYardId,\n activeSortKey: { beginsWith: { active: \"true\" } },\n limit: 1000,\n })\n );\n\n // Use Promise.all to wait for both promises to resolve\n const [areaResponse] = await Promise.all([areaPromise]);\n\n const areas = areaResponse.data.areaByActiveBySortKey.items;\n window.appUser.reloadYard.areas.items = areas;\n setupLocationMaps(window.appUser.reloadYard);\n setAreas(areas);\n } catch (error) {\n logError(\"inboundShipment:InboundCreate:getSetupData\", error, notify);\n } finally {\n setLoading(false);\n }\n };\n\n const handleAccountChange = async (value, formData) => {\n const accountId = value?.id;\n\n if (accountId) {\n try {\n setLoading(true);\n let resp = await API.graphql(\n graphqlOperation(getAccount, { id: accountId })\n );\n let acct = resp.data.getAccount;\n\n const billQty = [Unit.CAR, Unit.TL].includes(acct.inboundBillingUnits)\n ? 1\n : null;\n\n if (acct.checklists) {\n acct.checklists.items = acct.checklists.items.filter(\n (itm) => itm.active\n );\n }\n form.change(\"inventories.items\", null);\n form.change(\"inventories\", null);\n form.change(\"totalQuantity\", 0);\n form.change(\"secondaryReview\", acct.secondaryReview ? true : false);\n form.change(\"instructions\", acct.inboundInstructions);\n form.change(\"areaId\", null);\n form.change(\"zoneId\", null);\n form.change(\"checklistId\", null);\n form.change(\"checklist\", null);\n\n if (isShipmentUnits(acct.inboundBillingUnits)) {\n form.change(\"billQuantity\", 1);\n }\n form.change(\"billUnits\", acct.inboundBillingUnits);\n setArea(null);\n form.change(\"account\", acct);\n\n const lotType = acct.lotType ? acct.lotType : \"\";\n const lotNumberOverride = acct.lotNumberOverride ? true : false;\n form.change(\"lotType\", lotType);\n form.change(\"lotNumberOverride\", lotNumberOverride);\n if (lotNumberOverride !== true) {\n form.change(\"lotNumber\", utils.autogenLotNumber(lotType, formData));\n } else {\n form.change(\"lotNumber\", \"\");\n }\n\n setAccount(acct);\n } catch (error) {\n logError(\n \"inboundShipment:InboundCreate:handleAccountChange\",\n error,\n notify\n );\n } finally {\n setLoading(false);\n }\n }\n };\n\n const handlePoNumberChange = (event, formData) => {\n if (\n formData.lotNumberOverride !== true &&\n formData.lotType === LotType.CARLOT\n ) {\n if (event.target.value.length >= CARLOT_PO_NO_CHARS)\n form.change(\"lotNumber\", event.target.value.slice(-CARLOT_PO_NO_CHARS));\n else form.change(\"lotNumber\", \"\");\n }\n };\n\n const handleLotTypeChange = (value, formData) => {\n if (formData.lotNumberOverride !== true) {\n form.change(\"lotNumber\", utils.autogenLotNumber(value, formData));\n }\n };\n\n const handleLotNoManualChange = (value, formData) => {\n if (value) form.change(\"lotNumber\", lotNumber);\n else\n form.change(\n \"lotNumber\",\n utils.autogenLotNumber(formData.lotType, formData)\n );\n };\n\n const handleAreaChange = (areaId) => {\n debugger;\n if (yardCommodity?.id && account?.id) {\n const newArea = { ...areas.find((itm) => itm.id === areaId) };\n newArea.zones = { ...newArea.zones };\n newArea.zones.items = filterZones(\n newArea.zones.items,\n yardCommodity.id,\n account.id\n );\n setArea(newArea);\n if (newArea.zones.items.length === 1)\n form.change(\"zoneId\", newArea.zones.items[0].id);\n else form.change(\"zoneId\", \"\");\n }\n };\n\n const handleImageChange = (value) => {\n debugger;\n let error = null;\n\n if (value && Array.isArray(value) && value.length > 0) {\n const photosState = form.getFieldState(\"photos\");\n if (value.length > MAX_PHOTO_NUM_INBOUND) {\n error = `Max ${MAX_PHOTO_NUM_INBOUND} photos per shipment.`;\n let newValue = photosState.value.filter(\n (itm) =>\n itm.size <= MAX_PHOTO_SIZE || itm.rawFile?.size <= MAX_PHOTO_SIZE\n );\n newValue = newValue.slice(0, MAX_PHOTO_NUM_INBOUND);\n form.change(\"photos\", newValue);\n } else {\n const newValue = photosState.value.filter(\n (itm) =>\n itm.key ||\n itm.size <= MAX_PHOTO_SIZE ||\n itm.rawFile?.size <= MAX_PHOTO_SIZE\n );\n if (newValue.length !== value.length) error = MAX_PHOTO_SIZE_MSG;\n form.change(\"photos\", newValue);\n }\n } else if (value?.size > MAX_PHOTO_SIZE) {\n error = MAX_PHOTO_SIZE_MSG;\n form.change(\"photos\", null);\n }\n\n if (error) notify(error, \"warning\");\n };\n\n const handleMagnifyPhoto = (event) => {\n if (!magnifiedUrl) setMagnifiedUrl(event.target.lowsrc);\n else setMagnifiedUrl(null);\n };\n\n const handleOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const getSealNumberButtonLabel = (formData) => {\n return `Manage Seals (${\n formData?.seals?.items?.length || formData?.sealNumbers?.length || 0\n })`;\n };\n\n const getAccountHelperText = () => {\n if (loading) return \"Loading...\";\n if (account?.corporateAccount) return \"Corporate Account\";\n return false;\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"row\" spacing={3}>\n <Grid item container direction=\"column\" spacing={0} lg={8}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <AccountDropDown\n source=\"accountId\"\n label=\"Account\"\n onAccountChange={(value) =>\n handleAccountChange(value, formData)\n }\n helperText={getAccountHelperText()}\n validate={validateRequired}\n allowEmpty={false}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"shipFrom\"\n label=\"Origin\"\n variant=\"outlined\"\n fullWidth\n disabled={!account}\n helperText={false}\n // validate={validateRequired}\n placeholder={account?.businessName}\n InputLabelProps={{\n shrink:\n formData.shipFrom != null ||\n account?.businessName != null,\n }}\n onChange={(event) => setShipFrom(event.target.value)}\n />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"reloadYardCommodityId\"\n label=\"Load Type\"\n variant=\"outlined\"\n fullWidth\n choices={yardCommodities}\n optionText={(choice) =>\n `${choice.commodity.name} - ${choice.units}`\n }\n optionValue=\"id\"\n validate={validateRequired}\n disabled={formData.inventories?.items?.length > 0}\n helperText={false}\n onChange={(event) =>\n utils.handleCommodityChange(\n event,\n form,\n setYardCommodity,\n setAreas\n )\n }\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"carrierType\"\n label=\"Carrier Type\"\n variant=\"outlined\"\n fullWidth\n choices={CarrierTypes}\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"originCarrier\"\n label=\"Origin Carrier\"\n variant=\"outlined\"\n fullWidth\n validate={(value, allValues) =>\n allValues?.carrierType === CarrierType.RAIL &&\n validateRequired(value)\n }\n isRequired={formData.carrierType === CarrierType.RAIL} // Manually trigger asterisk\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"railCarNumber\"\n label={\n formData.carrierType === CarrierType.RAIL\n ? \"Railcar Number\"\n : \"Trailer Number\"\n }\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n validate={(value, allValues) =>\n allValues?.carrierType === CarrierType.RAIL\n ? validateRequired(value)\n : undefined\n }\n required={formData.carrierType === CarrierType.RAIL} // Manually trigger asterisk\n inputProps={{ style: { textTransform: \"uppercase\" } }}\n helperText={false}\n onBlur={() =>\n utils.validateRailCarNumberUnicity(formData, notify)\n }\n />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"poNumber\"\n label=\"PO Number\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n validate={validatePoNo}\n onChange={(event) => handlePoNumberChange(event, formData)}\n inputProps={{ style: { textTransform: \"uppercase\" } }}\n helperText={false}\n onBlur={() => utils.validatePoNumberUnicity(formData, notify)}\n />\n </Grid>\n {/* {!isBulkShipment(formData?.reloadYardCommodity.commodity, area) &&\n <Grid item xs={12} md={6} >\n <Box mt={1} >\n <BooleanInput source=\"secondaryReview\" label=\"Require Secondary Review\" fullWidth\n helperText={false}\n />\n </Box>\n </Grid>\n } */}\n {formData?.account?.trackInboundSeals && (\n <Grid item xs={12} md={6}>\n <Box mt={1}>\n <Button\n label={getSealNumberButtonLabel(formData)}\n onClick={handleOpen}\n variant=\"outlined\"\n size=\"large\"\n >\n <SealIcon />\n </Button>\n </Box>\n </Grid>\n )}\n </Grid>\n\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"areaId\"\n label=\"Default Area\"\n variant=\"outlined\"\n fullWidth\n disabled={!account || !yardCommodity?.id}\n choices={areas || []}\n onChange={(event) => handleAreaChange(event.target.value)}\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"zoneId\"\n label=\"Default Zone\"\n variant=\"outlined\"\n fullWidth\n disabled={!account || !area}\n choices={area?.zones?.items}\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"lotType\"\n label=\"Lot Type\"\n variant=\"outlined\"\n fullWidth\n disabled={!account}\n choices={LotTypes}\n validate={validateRequired}\n onChange={(event) =>\n handleLotTypeChange(event.target.value, formData)\n }\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <Grid container direction=\"column\" spacing={0}>\n <Grid item xs={12}>\n <TextInput\n source=\"lotNumber\"\n label=\"Lot Number\"\n variant=\"outlined\"\n fullWidth\n disabled={\n !account ||\n !formData.lotNumberOverride ||\n !formData.lotType ||\n !formData.poNumber\n }\n helperText={false}\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n validate={validateRequired}\n onChange={(event) => setLotNumber(event.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n {\" \"}\n {utils.getLotNumberPrefix(account, formData)}{\" \"}\n </InputAdornment>\n ),\n style: { textTransform: \"uppercase\" },\n }}\n />\n </Grid>\n <Grid item xs={12}>\n <BooleanInput\n source=\"lotNumberOverride\"\n label=\"Manual Override\"\n className={classes.booleanInput}\n options={{ size: \"small\" }}\n disabled={\n !account || !formData.lotType || !formData.poNumber\n }\n onChange={(value) =>\n handleLotNoManualChange(value, formData)\n }\n />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n <CustomFields\n {...props}\n accountFields={account?.inboundCustomFields}\n width={6}\n disabled={false}\n />\n </Grid>\n <Grid item container direction=\"row\" spacing={0} xs={false} md={4}>\n <Grid item xs={12}>\n <FileInput\n source=\"attachments\"\n label=\"ATTACHMENTS\"\n variant=\"outlined\"\n fullWidth\n className={classes.fileInput}\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop files to\n upload, or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n multiple\n maxFiles={MAX_FILES}\n options={{ maxFiles: MAX_FILES }}\n onChange={(value) =>\n handleFileChange(\"attachments\", value, form, notify)\n }\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n <Grid item xs={12}>\n <ImageInput\n source=\"photos\"\n label=\"PHOTOS\"\n variant=\"outlined\"\n fullWidth\n className={classes.fileInput}\n placeholder={\n <p>\n <AttachPhotoIcon fontSize=\"large\" /> <br /> Drop photos to\n upload, or click to select.\n </p>\n }\n accept=\"image/*\"\n multiple\n maxFiles={MAX_PHOTO_NUM_INBOUND}\n options={{ maxFiles: MAX_PHOTO_NUM_INBOUND }}\n onChange={handleImageChange}\n >\n <ImageField\n source=\"src\"\n title=\"title\"\n thumbWidth={250}\n thumbHeight={200}\n scaleThumb={true}\n fullSize={window.innerWidth}\n onClick={handleMagnifyPhoto}\n />\n </ImageInput>\n </Grid>\n <Grid item xs={12}>\n {magnifiedUrl && (\n <Dialog\n open={magnifiedUrl}\n maxWidth=\"lg\"\n onClick={handleMagnifyPhoto}\n >\n <img\n src={magnifiedUrl}\n alt=\"Outbound Shipment\"\n className={classes.mediaFull}\n onClick={handleMagnifyPhoto}\n />\n </Dialog>\n )}\n </Grid>\n </Grid>\n <SealNumbersCreateDialog\n open={open}\n onClose={handleClose}\n formData={formData}\n />\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst RemoveCopyButtons = ({\n form,\n setHasAllProducts,\n setCalcError,\n setWeightError,\n yardCommodity,\n ...props\n}) => {\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n const handleCopy = () => {\n var n = props.className.lastIndexOf(\"-\");\n var index = Number(props.className.substring(n + 1));\n const inventoryFieldState = form.getFieldState(\"inventories.items\");\n const data = inventoryFieldState?.value[index];\n\n if (inventoryFieldState?.value) {\n debugger;\n const newRow = {\n status: InventoryStatus.NEW,\n productName: data.productName,\n productCode: data.productCode,\n productId: data.productId,\n product: data.product,\n quantityShipped: data.quantityShipped,\n quantityDelivered: data.quantityDelivered,\n // pcs: data.pcs, // commented out to keep product default\n reloadYardCommodityId: data.reloadYardCommodityId,\n weight: data.weight,\n weightUnits: data.weightUnits,\n customFields: data.customFields,\n };\n form.change(\"inventories.items\", [...inventoryFieldState.value, newRow]);\n utils.handleInventoriesQty(form, setCalcError);\n utils.handleInventoriesWeight(form, setWeightError);\n }\n };\n\n const handleRemove = (event) => {\n props.onClick(event);\n setHasAllProducts(utils.hasAllProducts(form));\n utils.handleInventoriesQty(form, setCalcError);\n utils.handleInventoriesWeight(form, setWeightError);\n };\n\n return (\n <Grid\n container\n direction={isXSmall ? \"row\" : \"column\"}\n spacing={1}\n alignItems=\"flex-end\"\n >\n <Grid item xs={2} sm={12}>\n <Button label=\"Remove\" color=\"default\" onClick={handleRemove}>\n <RemoveIcon />\n </Button>\n </Grid>\n {!isBulkCommodity(yardCommodity?.commodity) && (\n <Grid item xs={2} sm={12}>\n <Button\n label=\"Copy\"\n color=\"default\"\n size=\"small\"\n onClick={handleCopy}\n >\n <CopyDownIcon />\n </Button>\n </Grid>\n )}\n </Grid>\n );\n};\n\nconst TallySheetTab = ({ backPath, account, yardCommodity, ...props }) => {\n const form = useForm();\n const classes = useStyles();\n const [calcError, setCalcError] = useState();\n const [, setWeightError] = useState();\n const [selectedFields, setSelectedFields] = useState([]);\n const [hasAllProducts, setHasAllProducts] = useState(\n utils.hasAllProducts(form)\n );\n\n useEffect(() => {\n if (account) setSelectedFields(account.inventoryCustomFields);\n else setSelectedFields([]);\n }, [account]);\n\n return (\n <Grid container direction=\"column\" spacing={0}>\n <Grid item xs={12} className={classes.arrayInputHeader}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n INBOUND INVENTORY:\n </Typography>\n <CustomFieldsButton\n form={form}\n accountFields={account?.inventoryCustomFields}\n selectedCustomFields={selectedFields}\n setSelectedFields={setSelectedFields}\n />\n </Grid>\n <Grid item xs={12}>\n <ArrayInput\n source=\"inventories.items\"\n label={false}\n className={classes.arrayInput}\n >\n <SimpleFormIterator\n addButton={\n <utils.AddCatalogUploadButtons\n backPath={backPath}\n form={form}\n account={account}\n yardCommodity={yardCommodity}\n setHasAllProducts={setHasAllProducts}\n setCalcError={setCalcError}\n setWeightError={setWeightError}\n />\n }\n removeButton={\n <RemoveCopyButtons\n form={form}\n setHasAllProducts={setHasAllProducts}\n setCalcError={setCalcError}\n setWeightError={setWeightError}\n yardCommodity={yardCommodity}\n />\n }\n >\n <FormDataConsumer>\n {({\n formData, // The whole form data\n scopedFormData, // The data for this item of the ArrayInput\n getSource, // Function to get the valid source inside an ArrayInput. Translates to \"inventories.items[].property\"\n ...rest\n }) =>\n scopedFormData && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={5}>\n <TextInput\n source={getSource(\"productName\")}\n label=\"Product Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n helperText={false}\n InputProps={{\n endAdornment: utils.getInfoBubble(\n formData,\n scopedFormData\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <NumberInput\n source={getSource(\"quantityShipped\")}\n label=\"Qty Advised\"\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n validate={validateQuantity}\n onChange={() =>\n utils.handleInventoriesQty(form, setCalcError)\n }\n helperText={false}\n InputProps={{ endAdornment: formData.totalUnits }}\n />\n </Grid>\n {isInventoryFieldVisible(\n InventoryField.PCS,\n scopedFormData?.reloadYardCommodityId\n ) && (\n <Grid item xs={12} md={3}>\n <NumberInput\n source={getSource(\"pcs\")}\n label=\"Pieces / Unit\"\n variant=\"outlined\"\n fullWidth\n min=\"1\"\n placeholder={scopedFormData?.product?.pcs}\n InputLabelProps={{\n shrink:\n scopedFormData?.pcs != null ||\n scopedFormData?.product?.pcs != null,\n }}\n validate={validatePieces}\n helperText={false}\n />\n </Grid>\n )}\n {showWeight(account, scopedFormData) && (\n <Grid item xs={12} md={3}>\n <NumberInput\n source={getSource(\"weight\")}\n label=\"Weight\"\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n validate={validateQuantity}\n onChange={() =>\n utils.handleInventoriesWeight(form, setWeightError)\n }\n helperText={false}\n InputProps={{\n endAdornment: `${utils.getWeightUnits(\n account,\n scopedFormData\n )}/${formData.totalUnits}`,\n }}\n />\n </Grid>\n )}\n <CustomFieldsTallySheet\n {...props}\n getSource={getSource}\n recordFields={scopedFormData?.customFields}\n accountFields={selectedFields}\n header={false}\n width={3}\n disabled={false}\n />\n </Grid>\n )\n }\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n </Grid>\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Total Load\n </Typography>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"totalQuantity\"\n label=\"Total Quantity\"\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n initialValue={0}\n disabled\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <SelectInput\n source=\"totalUnits\"\n label=\"Inventory UOM\"\n variant=\"outlined\"\n fullWidth\n choices={getCommodityUnits(yardCommodity)}\n optionText={unitOptionRenderer}\n initialValue=\"UNIT\"\n validate={validateRequired}\n onChange={() => utils.handleUnitChange(form, setCalcError)}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"billQuantity\"\n label=\"Billing Quantity\"\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n disabled={!formData.billUnits}\n validate={utils.validateBillQty}\n required={utils.isBillQtyRequired(formData)}\n helperText={calcError ? calcError : false}\n InputProps={{\n endAdornment: !hasAllProducts ? <ProductLinkIcon /> : null,\n }}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <SelectInput\n source=\"billUnits\"\n label=\"Billing UOM\"\n variant=\"outlined\"\n fullWidth\n choices={UnitOptions}\n optionText={unitOptionRenderer}\n allowEmpty\n emptyText=\"Select billing units...\"\n onChange={() => utils.handleUnitChange(form, setCalcError)}\n />\n </Grid>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n </Grid>\n );\n};\n\nconst DispatchTab = (props) => {\n const form = useForm();\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"scheduledDateTime\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n return (\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12} md={4}>\n <DateTimePicker\n label=\"Time Scheduled\"\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n fullWidth\n showTodayButton\n clearable\n value={\n !formData.scheduledDateTime\n ? null\n : formData.scheduledDateTime\n }\n format=\"MM/dd/yyyy hh:mm a\"\n onChange={(value) => form.change(\"scheduledDateTime\", value)}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <CreatedAtIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n </MuiPickersUtilsProvider>\n );\n};\n\nconst InboundCreateActions = ({ basePath, data, resource, ...props }) => (\n <TopToolbar>\n <HelpButton>\n <InboundCreateHelp {...props} />\n </HelpButton>\n <BackButton basePath={basePath} />\n </TopToolbar>\n);\n\n// Validate form and return error to prevent form submission\nconst validateInboundCreate = (values) => {\n let errors = {};\n // validate carrier name and number\n if (values.carrierType === CarrierType.RAIL) {\n if (!values.originCarrier) errors.originCarrier = \"Required\";\n if (!values.railCarNumber) errors.railCarNumber = \"Required\";\n }\n\n return errors;\n};\n\nexport const InboundCreate = (props) => {\n const [account, setAccount] = useState();\n const [yardCommodity, setYardCommodity] = useState();\n const backPath = getBackPath(props);\n const initValues = props.location?.state?.savedRecord || {};\n\n useEffect(() => {\n if (initValues.account && initValues.reloadYardCommodity) {\n setAccount(initValues.account);\n setYardCommodity(initValues.reloadYardCommodity);\n }\n }, [props.location?.state?.savedRecord]);\n\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New Inbound\" />}\n actions={<InboundCreateActions {...props} />}\n >\n <TabbedForm\n variant=\"outlined\"\n initialValues={initValues}\n submitOnEnter={false}\n toolbar={<InboundCreateToolbar account={account} />}\n validate={(values) => validateInboundCreate(values)}\n >\n <FormTab path=\"\" label=\"Inbound Setup\">\n <ShipmentSetupTab\n {...props}\n account={account}\n setAccount={setAccount}\n yardCommodity={yardCommodity}\n setYardCommodity={setYardCommodity}\n />\n </FormTab>\n <FormTab path=\"tallySheet\" label=\"Tally Sheet\">\n <TallySheetTab\n {...props}\n backPath={backPath}\n account={account}\n yardCommodity={yardCommodity}\n />\n </FormTab>\n <FormTab\n path=\"checklist\"\n label={\n <span>\n Checklist\n <BetaBadge />\n </span>\n }\n >\n <ChecklistTab\n {...props}\n account={account}\n yardCommodity={yardCommodity}\n />\n </FormTab>\n <FormTab path=\"dispatch\" label=\"Dispatch\">\n <DispatchTab {...props} />\n </FormTab>\n <FormTab path=\"notes\" label=\"Notes\">\n <NotesTab />\n </FormTab>\n </TabbedForm>\n </Create>\n );\n};\n\nconst InboundCreateToolbar = ({ account, ...props }) => {\n return (\n <Toolbar {...props}>\n <ValidateCreateButton account={account} />\n </Toolbar>\n );\n};\n\nconst ChecklistTab = ({ account, yardCommodity, ...props }) => {\n const form = useForm();\n const classes = useStyles();\n\n useEffect(() => {\n if (account?.checklists?.items && yardCommodity) {\n debugger;\n const values = form.getState().values;\n account.checklists.items = account.checklists.items?.filter(\n (itm) =>\n itm.processName === \"Inbound Shipment\" &&\n itm.active &&\n (itm.reloadYardCommodityId === values.reloadYardCommodityId ||\n !itm.reloadYardCommodityId)\n );\n const checklist = account.checklists?.items?.find(\n (itm) => itm.reloadYardCommodityId === values.reloadYardCommodityId\n );\n if (checklist) {\n form.change(\"checklistId\", checklist.id);\n form.change(\"checklist\", checklist.checklistItems);\n } else {\n form.change(\"checklistId\", null);\n form.change(\"checklist\", null);\n }\n }\n }, [account, yardCommodity]);\n\n const handleChecklistChange = async (event) => {\n if (event.target.value) {\n debugger;\n const checklist = account.checklists.items.find(\n (itm) => itm.id === event.target.value\n );\n form.change(\"checklist\", checklist.checklistItems);\n } else {\n form.change(\"checklist\", null);\n }\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"row\" spacing={3}>\n <Grid item xs={12}>\n <TextInput\n source=\"instructions\"\n label=\"Special Instructions\"\n variant=\"outlined\"\n multiline\n fullWidth\n disabled={!account}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n source=\"checklistId\"\n label=\"Checklist\"\n variant=\"outlined\"\n fullWidth\n choices={account?.checklists?.items || []}\n optionText={(choice) => `${choice.name}`}\n optionValue=\"id\"\n helperText={false}\n allowEmpty\n disabled={!account}\n onChange={handleChecklistChange}\n />\n </Grid>\n {\n <Grid item xs={12}>\n <Checklist\n {...props}\n workFlowSteps={InboundStepsChoices}\n source=\"checklist\"\n label=\"Checklist Items\"\n className={classes.arrayInput}\n />\n </Grid>\n }\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Link, useHistory, useLocation } from \"react-router-dom\";\n\nimport {\n Card,\n CardContent,\n CardMedia,\n Dialog,\n Grid,\n Tooltip,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { orange } from \"@material-ui/core/colors\";\n\nimport { Button, FunctionField, SelectField, TextField } from \"react-admin\";\n\nimport {\n ExceptionIcon,\n PhotoIcon,\n TrainIcon,\n} from \"../../../components/common\";\nimport { isAuthorized } from \"../../../utils/appUtils\";\nimport {\n AclType,\n CarrierType,\n InboundStates,\n InboundStatuses,\n} from \"../../../utils/constants\";\nimport { getPhoto, getPhotoUrl } from \"../../../utils/fileUtils\";\nimport { getLocationFullName } from \"../../../utils/locationUtils\";\nimport { deepRedirect, getFormTab } from \"../../../utils/utils\";\nimport { InboundStateIcon } from \"./InboundStateIcon\";\n\nconst useAsideStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n width: \"18em\",\n minWidth: \"18em\",\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(0.5),\n overflow: \"initial\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n status: {\n marginTop: theme.spacing(0.3),\n },\n exceptionButton: {\n textAlign: \"center\",\n },\n tableIcon: {\n marginTop: theme.spacing(0.7),\n },\n photoButton: { marginLeft: -theme.spacing(1) },\n media: {\n margin: \"0 auto 0\",\n marginTop: theme.spacing(1),\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n maxHeight: \"20em\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n mediaFull: {\n margin: \"0 auto 0\",\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n}));\n\nexport const InboundAside = ({ backPath, record, exceptions, ...props }) => {\n const classes = useAsideStyles();\n const history = useHistory();\n const imgRef = useRef();\n const location = useLocation(); // used to force refresh photos on every visit.\n const [photo, setPhoto] = useState();\n const [selectedPhoto, setSelectedPhoto] = useState();\n const [isOpen, setIsOpen] = useState(false);\n var tab = getFormTab(props);\n const linkBackPath = backPath\n ? [...backPath, props.location.pathname]\n : [props.location.pathname];\n\n useEffect(() => {\n if (record?.photos && record.photos.length > 0 && imgRef.current) {\n setSelectedPhoto(record.photos[0].key);\n getPhoto(record.photos[0].key, setPhoto, imgRef.current.clientWidth);\n }\n }, [imgRef, record, location.key]);\n\n const handleSelectPhoto = (evt) => {\n debugger;\n setSelectedPhoto(evt.currentTarget.id);\n getPhoto(evt.currentTarget.id, setPhoto, imgRef.current.clientWidth);\n };\n\n const handleMagnifyPhoto = (evt) => {\n setIsOpen(!isOpen);\n };\n\n const handleTrackClick = () => {\n deepRedirect(\n history,\n \"/trackManagementAdmin\",\n props.location.pathname,\n backPath,\n { railCarNumber: record.railCarNumber }\n );\n };\n\n if (!record || tab === \"1\") return null;\n return (\n <Card className={classes.root} ref={imgRef}>\n <CardContent>\n <Grid container direction=\"column\" spacing={1} fullWidth>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Status\n </Typography>\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <InboundStateIcon record={record} />\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <SelectField\n source=\"status\"\n choices={InboundStatuses}\n record={record}\n />\n , \n <SelectField\n source=\"state\"\n choices={InboundStates}\n record={record}\n />\n </Grid>\n </Grid>\n {exceptions.hasException && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Exceptions\n </Typography>\n </Grid>\n )}\n {exceptions.hasException && exceptions.unsafeShipment && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip\n title={\n exceptions.unsafeShipmentNote\n ? exceptions.unsafeShipmentNote\n : \"Unsafe Shipment\"\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">Unsafe Shipment</Typography>\n </Grid>\n </Grid>\n )}\n {exceptions.hasException && exceptions.brokenSeal && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip\n title={\n exceptions.brokenSealNote\n ? exceptions.brokenSealNote\n : \"Broken Seal\"\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">Broken Seal</Typography>\n </Grid>\n </Grid>\n )}\n {exceptions.hasException && exceptions.otherException && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip\n title={\n exceptions.otherExceptionNote\n ? exceptions.otherExceptionNote\n : \"Other Exception\"\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">Other Exception</Typography>\n </Grid>\n </Grid>\n )}\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Account:\n </Typography>\n <br />\n {isAuthorized(AclType.ACCOUNTS) ? (\n <Link\n to={{\n pathname: `/accounts/${record.accountId}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {record.account.businessName}\n </Typography>\n </Link>\n ) : (\n <Link\n to={{\n pathname: `/accounts/${record.accountId}/show`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {record.account.businessName}\n </Typography>\n </Link>\n )}\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n PO Number\n </Typography>\n <br />\n <TextField source=\"poNumber\" record={record} />\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Lot Number\n </Typography>\n <br />\n <TextField source=\"lotNumber\" record={record} />\n </Grid>\n {record.carrierType === CarrierType.RAIL && record.trackId && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Location:\n </Typography>\n <br />\n <FunctionField\n label=\"Location\"\n render={(record) => `${getLocationFullName(record.location)}`}\n />\n <Button label=\"MAP\" color=\"default\" onClick={handleTrackClick}>\n <TrainIcon fontSize=\"small\" />\n </Button>\n </Grid>\n )}\n {record.invoice && isAuthorized(AclType.INVOICES) && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Invoice\n </Typography>\n <br />\n <Link\n to={{\n pathname: `/invoices/${record.invoiceId}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {record.invoice.invoiceNumber} : $\n {record.invoice.total.toLocaleString(undefined, {\n style: \"currency\",\n currency: \"USD\",\n })}\n </Typography>\n </Link>\n </Grid>\n )}\n {record.unloadedBy && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Unloaded By\n </Typography>\n <br />\n <TextField source=\"unloadedBy\" record={record} />\n </Grid>\n )}\n {record.reviewedBy && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Reviewed By\n </Typography>\n <br />\n <TextField source=\"reviewedBy\" record={record} />\n </Grid>\n )}\n {record.photos && (\n <Grid item container direction=\"row\" xs={12}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Photos\n </Typography>\n <br />\n </Grid>\n {record.photos.map((file, index) => (\n <Grid item xs={3}>\n <Button\n label={`${index + 1}`}\n id={file.key}\n key={file.key}\n onClick={handleSelectPhoto}\n size=\"small\"\n className={classes.photoButton}\n >\n <PhotoIcon fontSize=\"small\" />\n </Button>\n </Grid>\n ))}\n <Grid item xs={12}>\n <CardMedia\n component=\"img\"\n image={photo}\n className={classes.media}\n onClick={handleMagnifyPhoto}\n />\n </Grid>\n </Grid>\n )}\n </Grid>\n </CardContent>\n {isOpen && (\n <Dialog open={isOpen} onClick={handleMagnifyPhoto} maxWidth=\"xl\">\n <img\n src={getPhotoUrl(selectedPhoto, window.innerWidth)}\n alt=\"Inventory\"\n className={classes.mediaFull}\n onClick={handleMagnifyPhoto}\n />\n </Dialog>\n )}\n </Card>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { differenceInDays } from \"date-fns\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport {\n useNotify,\n useRedirect,\n FormDataConsumer,\n SaveButton,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { ApproveIcon, RejectIcon } from \"../../../components/common\";\nimport { getCustomFieldsToSave } from \"../../../components/common/CustomFields\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n CarrierType,\n FilePaths,\n InboundState,\n InboundStatus,\n InventoryStatus,\n LotType,\n NoteType,\n WorkflowType,\n} from \"../../../utils/constants\";\nimport { saveRemoveFile, saveRemoveFiles } from \"../../../utils/fileUtils\";\nimport { isTrack, resetTrackLayout } from \"../../../utils/locationUtils\";\nimport { isBulkShipment } from \"../../../utils/loadTypeUtils\";\nimport {\n areAllSealsValid,\n deepRedirect,\n getLogState,\n historyAutoGen,\n} from \"../../../utils/utils\";\nimport { ConditionalConfirm } from \"../../../components/common/ConditionalConfirm\";\nimport { updateOutboundClient } from \"../outboundShipments/OutboundUtils\";\nimport {\n autogenLotNumber,\n calcNetWeight,\n emailPOD,\n formValidate,\n lambdaSaveInbound,\n resetShipmentExceptions,\n updateInboundClient,\n updateStripeUsage,\n validateInboundUnicity,\n validateRailcarRelease,\n} from \"./InboundUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n rejectButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n saveButton: {\n marginRight: theme.spacing(2),\n },\n}));\n\nexport const DialogSaveButton = ({\n record,\n validateTallySheetSaved,\n validateTallyQty,\n basePath,\n backPath,\n isSaving,\n setIsSaving,\n isDeleting,\n ...props\n}) => {\n const classes = useStyles();\n const form = useForm();\n const history = useHistory();\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n const [confirmContent, setConfirmContent] = useState([]);\n const [accept, setAccept] = useState(true);\n\n const getAcceptLabel = () => {\n // if (formData.state === InboundState.APPROVE_INVENTORY_REVIEW) return \"Compplete\";\n return \"Approve\";\n };\n\n const isStatusRollback = (data) => {\n const newStatus = data.status;\n const newState = data.state;\n const oldState = record.state;\n\n return (\n (newStatus === InboundStatus.IN_TRANSIT ||\n newStatus === InboundStatus.ARRIVED ||\n newStatus === InboundStatus.PLACED) &&\n (newState === InboundState.NEW ||\n newState === InboundState.PROCESS_SHIPMENT) &&\n oldState !== InboundState.NEW &&\n oldState !== InboundState.PROCESS_SHIPMENT\n );\n };\n\n const validateRollback = (formData) => {\n const data = { ...formData };\n debugger;\n\n setNextState(data);\n if (isStatusRollback(data)) {\n const committed = data.inventories.items.some(\n (inv) => inv.shipmentLineItems?.items.length > 0\n );\n // committed inventories on rollback. Show warning.\n if (committed) return true;\n }\n return false;\n };\n\n const handleValidateSave = async (formData) => {\n let tempMsg = [];\n setOnConfirm(() => handleDialogConfirm); // Allow confirmation if no error\n\n const isValid = formValidate(form, notify);\n if (isValid) {\n const duplicateNumbers = await validateInboundUnicity(formData);\n if (duplicateNumbers.length > 0) {\n tempMsg.push(\n \"Possible duplicate with this \" +\n duplicateNumbers.join(\" & \") +\n \" Number already exists.\"\n );\n }\n if (\n formData?.account?.trackInboundSeals &&\n !formData?.sealNumbers?.length\n ) {\n tempMsg.push(\n \"No seal numbers were added. Proceed saving without tracking seals?\"\n );\n }\n\n if (formData.inventories && formData.inventories.items) {\n if (validateTallySheetSaved(formData.inventories.items)) {\n tempMsg.push(\n \"There are un-saved Tally Sheet items. Un-salved changes will be lost.\"\n );\n }\n if (validateTallyQty(formData)) {\n tempMsg.push(\"Quantity Advised and Received do not match!\");\n }\n const remainingInventory = validateRailcarRelease(formData);\n if (remainingInventory) {\n tempMsg.push(\n remainingInventory +\n \" of remaining Inventory on hand will be removed.\"\n );\n } else if (validateRollback(formData)) {\n tempMsg.push(\n \"Inventory committed to a pending Outbound shipment. \" +\n \"Unable to rollback unitl inventory is removed from Oubtound.\"\n );\n setOnConfirm(null); // Prevent saving if there's an error\n }\n }\n }\n\n if (tempMsg.length === 1) {\n setConfirmContent(tempMsg[0]);\n setOpen(true);\n } else if (tempMsg.length > 1) {\n setConfirmContent(\n <ul>\n {tempMsg.map((msg) => (\n <li>{msg}</li>\n ))}\n </ul>\n );\n setOpen(true);\n } else handleSave();\n };\n\n const handleValidateAccept = (formData) => {\n let tempMsg = null;\n let allAccepted = false;\n let allSealsValidated = false;\n setOnConfirm(() => handleDialogConfirm); // Allow confirmation if no error\n debugger;\n\n const isValid = formValidate(form, notify);\n if (isValid) {\n // check if only the shipment needs approval but none of inventories\n allAccepted = formData.verificationRequired === \"true\";\n if (formData.inventories && formData.inventories.items) {\n allAccepted = !formData.inventories.items.some(\n (row) => row?.verificationRequired === \"true\"\n );\n }\n if (\n formData?.inValidSealNumber?.length > 0 &&\n formData?.inValidSeals?.items?.length > 0\n ) {\n allSealsValidated = areAllSealsValid(\n formData?.inValidSealNumber,\n formData?.inValidSeals?.items\n );\n }\n\n if (!allAccepted) {\n tempMsg =\n \"Errors Found : Accept all inventories first! Shipment will not be Approved.\";\n setAccept(false);\n } else if (formData.brokenSeal) {\n if (allSealsValidated) {\n tempMsg = (\n <>\n All seals are valid. <br />\n To clear the seal exception click CANCEL and open the Exception\n Manager. <br />\n Proceed with approval?\n </>\n );\n setAccept(true);\n } else {\n // TODDO\n // CREW should be performing RailCar Validation on each inbound,\n // even if railcar is already placed through Track Management.\n // This is to avoid CREW scanning seals on the wronng railcar.\n tempMsg = (\n <>\n Errors found: Not all seals have been validated! <br />\n Please reconcile the seals in the Seal Manager.\n </>\n );\n setAccept(false);\n }\n } else {\n if (validateTallyQty(formData)) {\n // Check quantities Advised & Received\n tempMsg =\n \"Errors Found : Quantity Advised and Received do not match! Shipment will not be Approved.\";\n setAccept(false);\n } else {\n // check if resolution documented in notes\n const notesMaxIndex = formData.notes ? formData.notes.length - 1 : -1;\n\n if (\n notesMaxIndex < 0 ||\n (notesMaxIndex >= 0 &&\n (!formData.notes[notesMaxIndex] ||\n formData.notes[notesMaxIndex].date))\n ) {\n tempMsg =\n \"Don't forget to document issue resolution in the Notes! \";\n }\n }\n }\n }\n\n if (tempMsg && tempMsg !== \"\") {\n debugger;\n setConfirmContent(tempMsg);\n setOpen(true);\n } else handleSave();\n };\n\n const handleValidateReject = (formData) => {\n let tempMsg = null;\n setOnConfirm(() => handleDialogConfirm); // Allow confirmation if no error\n debugger;\n\n const isValid = formValidate(form, notify);\n if (isValid) {\n // check if rejection documented in notes\n const notesMaxIndex = formData.notes ? formData.notes.length - 1 : -1;\n\n if (\n notesMaxIndex < 0 ||\n (notesMaxIndex >= 0 &&\n (!formData.notes[notesMaxIndex] ||\n formData.notes[notesMaxIndex].date))\n ) {\n tempMsg =\n \"Don't forget to document rejection cause in the Notes! Proceed with Rejection?\";\n }\n }\n\n if (tempMsg && tempMsg !== \"\") {\n debugger;\n setConfirmContent(tempMsg);\n setOpen(true);\n } else handleSave();\n };\n\n const handleDialogConfirm = () => {\n const formData = form.getState().values;\n debugger;\n\n // remove unsaved / empty inventories.\n const tallySheet = formData.inventories.items.filter(\n (itm) => typeof itm !== `undefined` && itm.status !== InventoryStatus.NEW\n );\n form.change(\"inventories.items\", tallySheet);\n\n handleSave();\n };\n const handleDialogClose = () => setOpen(false);\n\n const [onConfirm, setOnConfirm] = useState(() => handleDialogConfirm);\n\n const handleSave = () => {\n setOpen(false);\n if (accept) props.handleSubmit();\n };\n\n const acceptTransform = async (data) => {\n setIsSaving(true);\n debugger;\n\n // Manager does not ACCEPT shipments, only APPROVE and\n // send back to CREW to contineue inspections.\n // Only CREW can ACCEPT shipment after completing all inspections and\n // after MANAGER approved all exceptions.\n if (data.state === InboundState.APPROVE_SHIPMENT) {\n data.state = InboundState.PROCESS_SHIPMENT;\n data.verificationRequired = \"resolved\";\n data.startDateTime = new Date();\n\n let note = {\n text: `Shipment Approved`,\n type: NoteType.SHIPMENT,\n date: new Date(),\n by: window.appUser?.fullName,\n };\n if (data.history) data.history = [...data.history, note];\n else data.history = [note];\n\n if (data.inventories?.items) {\n data.inventories.items.forEach((element) => {\n element.status = InventoryStatus.ARRIVED;\n if (element.history) element.history = [...element.history, note];\n else element.history = [note];\n });\n }\n } else if (data.state === InboundState.APPROVE_INVENTORY) {\n data.state = InboundState.PROCESS_INVENTORY;\n data.verificationRequired = \"resolved\";\n\n let note = {\n text: `Inventory Approved`,\n type: NoteType.INVENTORY,\n date: new Date(),\n by: window.appUser?.fullName,\n };\n if (data.history) data.history = [...data.history, note];\n else data.history = [note];\n\n if (data.inventories?.items) {\n data.inventories.items.forEach((element) => {\n element.verificationRequired =\n element.verificationRequired === \"true\"\n ? \"resolved\"\n : element.verificationRequired;\n if (element.history) element.history = [...element.history, note];\n else element.history = [note];\n });\n }\n } else if (data.state === InboundState.APPROVE_INVENTORY_REVIEW) {\n data.state = InboundState.PROCESS_INVENTORY_REVIEW;\n data.verificationRequired = \"resolved\";\n\n let note = {\n text: `Inventory Review Completed`,\n type: NoteType.INVENTORY,\n date: new Date(),\n by: window.appUser?.fullName,\n };\n\n if (data.inventories?.items) {\n data.inventories.items.forEach((element) => {\n element.status = InventoryStatus.STORED;\n element.verificationRequired =\n element.verificationRequired === \"true\"\n ? \"resolved\"\n : element.verificationRequired;\n if (element.history) element.history = [...element.history, note];\n else element.history = [note];\n });\n }\n }\n\n return await transform(data);\n };\n\n const rejectTransform = async (data) => {\n debugger;\n setIsSaving(true);\n data.state = InboundState.REJECTED;\n data.verificationRequired = \"resolved\";\n\n return await transform(data);\n };\n\n const setNextState = (data) => {\n if (data.releaseDateTime && data.releaseDateTime !== \"\") {\n data.status = InboundStatus.RELEASED;\n } else if (data.placedDateTime && data.placedDateTime !== \"\") {\n data.status = InboundStatus.PLACED;\n if (data.state === InboundState.NEW) {\n data.state = InboundState.PROCESS_SHIPMENT;\n data.lotNumber = !data.lotNumberOverride\n ? data.account.lotNumberPrefix + autogenLotNumber(data.lotType, data)\n : data.lotNumber;\n } else if (!data.startDateTime || data.startDateTime === \"\") {\n data.state = InboundState.PROCESS_SHIPMENT;\n resetShipmentExceptions(data);\n }\n } else if (data.notifyDateTime && data.notifyDateTime !== \"\") {\n data.status = InboundStatus.ARRIVED;\n data.state = InboundState.NEW;\n resetShipmentExceptions(data);\n\n data.lotNumber =\n data.lotType === LotType.PERPETUAL && !data.lotNumberOverride\n ? data.account.lotNumberPrefix + \"TBD\"\n : data.lotNumber;\n } else {\n data.status = InboundStatus.IN_TRANSIT;\n data.state = InboundState.NEW;\n data.verificationRequired = null;\n }\n\n return data;\n };\n\n const saveTransform = async (data) => {\n debugger;\n setIsSaving(true);\n setNextState(data);\n\n return await transform(data);\n };\n\n const transform = async (data) => {\n data = { ...data };\n debugger;\n\n try {\n data.railCarNumber = data.railCarNumber ? data.railCarNumber : \"\";\n\n data.scheduledDateTime = data.scheduledDateTime\n ? data.scheduledDateTime\n : null;\n if (data.status === InboundStatus.RELEASED) {\n data.daysOnDemurrageClock = differenceInDays(\n new Date(data.releaseDateTime),\n new Date(data.notifyDateTime)\n );\n data.stripeBillingDateTime = new Date();\n } else data.daysOnDemurrageClock = 0;\n\n const hasWeights = data.inventories?.items?.every(\n (itm) => itm.weight != null && !isNaN(itm.weight)\n );\n if (hasWeights) {\n const weghtUnits =\n data.weightUnits || data.inventories.items[0]?.weightUnits;\n data.netWeight = calcNetWeight(data, null, weghtUnits);\n if (data.netWeight) data.weightUnits = weghtUnits;\n }\n\n if (isBulkShipment(data.reloadYardCommodityId))\n data.workflowType = WorkflowType.BULK;\n else data.workflowType = WorkflowType.ACCEPT_STORE;\n\n data.customFields = getCustomFieldsToSave(\n data.customFields,\n data.account.inboundCustomFields\n );\n\n const ignoreList = [\n \"areaId\",\n \"zoneId\",\n \"reloadYardCommodityId\",\n \"createDateTime\",\n ];\n const includeArrayList = [\"customFields\"];\n data.history = historyAutoGen(form, data, ignoreList, includeArrayList);\n\n const newStatus = data.status;\n const oldStatus = record.status;\n if (newStatus !== oldStatus) {\n const note = {\n text: `Shipment advanced | status: ${newStatus} ${getLogState(\n data.state\n )}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.SHIPMENT,\n };\n data.history = data.history ? [...data.history, note] : [note];\n }\n\n const isRollback = isStatusRollback(data);\n\n debugger;\n if (isRollback && !data.placedDateTime && data.trackId) {\n await resetTrackLayout(data, updateInboundClient, updateOutboundClient);\n }\n\n if (data.notes?.length > 0) {\n data.notes.forEach((element) => {\n if (!element.date) {\n element.type = NoteType.GENERIC;\n element.date = new Date();\n element.by = window.appUser?.fullName;\n }\n });\n } else data.notes = undefined;\n\n await lambdaSaveInbound(data, isRollback);\n await Promise.all([\n saveRemoveFiles(\n record,\n data,\n \"attachments\",\n `${FilePaths.INBOUND}/${Date.now()}`\n ),\n saveRemoveFile(\n record,\n data,\n \"receiptFile\",\n `${FilePaths.INBOUND}/${Date.now()}`\n ),\n saveRemoveFiles(\n record,\n data,\n \"photos\",\n `${FilePaths.INBOUND}/${Date.now()}`\n ),\n ]);\n\n if (\n data.status !== oldStatus &&\n data.status === InboundStatus.RELEASED &&\n data.account?.podEmail &&\n // for rail-track shipments POD sent from mobile on COMPLETE because not released until empty.\n !(isTrack(data.areaId) && data.carrierType === CarrierType.RAIL)\n ) {\n emailPOD(\n data,\n data.account?.podEmail,\n null,\n data.account?.podPhotos,\n data.account?.podAttachments,\n notify\n );\n\n data.history = [\n ...data.history,\n {\n text: `POD sent to: ${data.account?.podEmail}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.GENERIC,\n },\n ];\n }\n } catch (err) {\n logError(\n \"inboundShipments:DialogSaveButton:transform\",\n err,\n false,\n redirect\n );\n setIsSaving(false);\n // return Promise.reject();\n return {};\n }\n\n debugger;\n delete data.account;\n delete data.area;\n delete data.commodity;\n delete data.customFieldSelect;\n delete data.inValidSealNumber;\n delete data.inValidSeals;\n delete data.inventories;\n delete data.invoice;\n delete data.location;\n delete data.reloadYardCommodity;\n delete data.seals;\n delete data.timeslot;\n delete data.validSeals;\n delete data.zone;\n\n return data;\n };\n\n const onSuccess = ({ data }) => {\n debugger;\n if (\n data.status === InboundStatus.RELEASED &&\n record.status !== InboundStatus.RELEASED\n ) {\n updateStripeUsage(data);\n }\n\n notify(\"Inbound updated successfully\");\n deepRedirect(history, backPath ? backPath : basePath);\n setIsSaving(false);\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\"inboundShipments:DialogSaveButton:onFailure\", error, notify);\n };\n\n const isPristine = () => {\n const formState = form.getState();\n return formState.pristine;\n };\n\n // Pass ...props, not ...rest to FormDataConsumer to include handleSubmitWithRedirect from props\n return (\n <FormDataConsumer>\n {({ formData, ...props }) => (\n <>\n <div>\n <SaveButton\n label=\"Save\"\n className={classes.saveButton}\n submitOnEnter={false}\n undoable={false}\n disabled={isPristine() || isDeleting}\n saving={isSaving}\n handleSubmitWithRedirect={() => handleValidateSave(formData)}\n transform={saveTransform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n {(formData.verificationRequired === \"true\" ||\n (formData.hasException &&\n formData.state === InboundState.PROCESS_SHIPMENT)) && (\n <SaveButton\n label={getAcceptLabel()}\n className={classes.saveButton}\n submitOnEnter={false}\n undoable={false}\n disabled={!formData.placedDateTime}\n saving={isSaving}\n handleSubmitWithRedirect={() => handleValidateAccept(formData)}\n transform={acceptTransform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n icon={<ApproveIcon />}\n />\n )}\n {((formData.verificationRequired === \"true\" &&\n formData.state === InboundState.APPROVE_SHIPMENT) ||\n (formData.hasException &&\n formData.state === InboundState.PROCESS_SHIPMENT)) && (\n <SaveButton\n label=\"Reject\"\n variant=\"outlined\"\n color=\"default\"\n className={classnames(\"ra-save-button\", classes.rejectButton)}\n submitOnEnter={false}\n undoable={false}\n saving={isSaving}\n handleSubmitWithRedirect={() => handleValidateReject(formData)}\n transform={rejectTransform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n icon={<RejectIcon />}\n />\n )}\n </div>\n <ConditionalConfirm\n isOpen={open}\n loading={isSaving}\n title=\"Save Confirmation\"\n content={confirmContent}\n onConfirm={onConfirm}\n onClose={handleDialogClose}\n />\n </>\n )}\n </FormDataConsumer>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { API } from \"aws-amplify\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport { useNotify, useRedirect, Button, Confirm } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { DeleteIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n InboundStatus,\n InboundState,\n LocationType,\n} from \"../../../utils/constants\";\nimport { deepRedirect } from \"../../../utils/utils\";\nimport { resetCapacityUsed } from \"../inventory/InventoryUitls\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeepDeleteButton = ({\n record,\n backPath,\n className,\n isSaving,\n isDeleting,\n setIsDeleting,\n ...props\n}) => {\n const form = useForm();\n const classes = useStyles();\n const history = useHistory();\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n\n const hasInventories = () => {\n const fieldState = form.getFieldState(\"inventories.items\");\n return fieldState?.value?.length > 0;\n };\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n const handleDelete = async (event) => {\n setIsDeleting(true);\n setOpen(false);\n debugger;\n try {\n const inventories = form.getFieldState(\"inventories.items\")?.value;\n\n const inboundDeleteInput = {\n id: record.id,\n attachments: record.attachments,\n receiptFile: record.receiptFile,\n photos: record.photos,\n };\n const inventoryDeleteList = [];\n const inventoryItemDeleteList = [];\n const toUpdateLocationMap = {};\n\n inventories?.forEach((inventory) => {\n inventoryDeleteList.push({ id: inventory.id });\n\n inventory.inventoryItems?.items?.forEach((inventoryItem) => {\n inventoryItemDeleteList.push({ id: inventoryItem.id });\n\n if (inventoryItem.location.type === LocationType.STRUCTURED) {\n const isOtherLoadType =\n inventoryItem.location.locationLoad?.other.selected;\n debugger;\n\n // update location capacifyUsed if STRUCTURED and not OTHER\n if (!isOtherLoadType) {\n const updatedLocation =\n toUpdateLocationMap[inventoryItem.locationId];\n\n if (updatedLocation) {\n // follow-on location encounters\n inventoryItem.location = updatedLocation;\n toUpdateLocationMap[inventoryItem.locationId] =\n resetCapacityUsed(inventory, inventoryItem);\n } else {\n // first location encounter\n toUpdateLocationMap[inventoryItem.locationId] =\n resetCapacityUsed(inventory, inventoryItem);\n }\n }\n }\n });\n });\n\n const locationUpdateList = Object.values(toUpdateLocationMap);\n\n const response = await API.post(\"transREST\", \"/inboundDelete\", {\n body: {\n inboundDeleteInput,\n inventoryDeleteList,\n inventoryItemDeleteList: inventoryItemDeleteList,\n locationUpdateList,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n if (response.error) throw response.error;\n\n notify(\"Inbound deleted successfully\");\n deepRedirect(history, backPath);\n } catch (err) {\n logError(\n \"inboundShipments:DeepDeleteButton:handleDelete\",\n err,\n notify,\n redirect\n );\n } finally {\n setIsDeleting(false);\n }\n };\n\n if (\n !record ||\n record.status === InboundStatus.RELEASED ||\n (record.state !== InboundState.NEW &&\n record.state !== InboundState.PROCESS_SHIPMENT &&\n record.state !== InboundState.APPROVE_SHIPMENT &&\n hasInventories())\n )\n return null;\n else\n return (\n <>\n <Button\n {...props}\n label=\"Delete\"\n disabled={isDeleting || isSaving}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={isDeleting}\n title=\"Delete Confirmation\"\n content=\"Are you sure you want to delete this Inbound Shipment?\"\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { format } from \"date-fns\";\n\nimport { API, graphqlOperation, Storage } from \"aws-amplify\";\nimport { getReceiptCounter } from \"../../../graphql/reloadyard/custom-queries\";\nimport { updateReloadYard } from \"../../../graphql/mutations\";\n\nimport {\n Backdrop,\n Box,\n Checkbox,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormControl,\n FormControlLabel,\n FormGroup,\n FormLabel,\n IconButton,\n TextField,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { Button, TopToolbar, useNotify } from \"react-admin\";\n\nimport {\n CancelIcon,\n CloseIcon,\n DocumentIcon,\n ExceptionIcon,\n} from \"../../../components/common\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport {\n getCustomFieldIdCleansed,\n parseCustomField,\n} from \"../../../components/common/CustomFields\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { SendPOSDialogButton } from \"../../../components/common/SendPOSDialogButton\";\n\nimport { isAuthorized, logError } from \"../../../utils/appUtils\";\nimport {\n AclType,\n FilePaths,\n InboundStatus,\n Unit,\n} from \"../../../utils/constants\";\nimport { downloadFile, getTemplatePath } from \"../../../utils/fileUtils\";\nimport {\n calculateMbf,\n calculateSqf,\n convertUnits,\n getUnitName,\n isLumberCommodity,\n isPanelsCommodity,\n} from \"../../../utils/loadTypeUtils\";\n\nimport { InboundEditHelp } from \"./InboundHelp\";\nimport { CreateInvoiceButton } from \"./CreateInvoiceButton\";\nimport * as utils from \"./InboundUtils\";\nimport { getBarcodesString, trimDecimal } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: \"#fff\",\n },\n dialogTitle: {\n display: \"flex\",\n paddingTop: theme.spacing(0),\n paddingBottom: theme.spacing(0),\n justifyContent: \"space-between\",\n },\n title: {\n paddingTop: theme.spacing(1),\n },\n dialogContent: {\n // https://stackoverflow.com/questions/47698037/how-can-i-set-a-height-to-a-dialog-in-material-ui\n minHeight: \"50vh\",\n },\n}));\n\nconst InboundEditActions = ({\n data,\n setReceiptFile,\n setReceiptNumber,\n exceptions,\n setExceptions,\n allSealsValid,\n ...props\n}) => {\n const classes = useStyles();\n const isMedium = useMediaQuery((theme) => theme.breakpoints.up(\"sm\"));\n const notify = useNotify();\n const [loading, setLoading] = useState(false);\n const [isExceptionDialogOpen, setIsExceptionDialogOpen] = useState();\n\n const getProductData = (product, shippedQty, totalUnits) => {\n if (product) {\n const productData = {\n name: product.name,\n productCode: product.productCode,\n category: product.category,\n defaultUnits: product.defaultUnits,\n defaultWeightUnits: product.defaultWeightUnits,\n billingUnits: product.outboundBillingUnits,\n width: product.width,\n length: product.length,\n height: product.height,\n };\n if (shippedQty && totalUnits) {\n Object.keys(Unit).forEach((key) => {\n if (key !== totalUnits) {\n const unitQty = convertUnits(shippedQty, totalUnits, key, product);\n if (unitQty?.value) productData[key] = unitQty.value;\n } else {\n productData[key] = shippedQty;\n }\n });\n }\n\n return productData;\n } else return undefined;\n };\n\n const getReceiptData = (data, receiptNumber) => {\n const receiptData = { ...data };\n const shipDate = receiptData.releaseDateTime\n ? new Date(receiptData.releaseDateTime).toLocaleDateString()\n : receiptData.endDateTime\n ? new Date(receiptData.endDateTime).toLocaleDateString()\n : receiptData.placedDateTime\n ? new Date(receiptData.placedDateTime).toLocaleDateString()\n : new Date(receiptData.createDateTime).toLocaleDateString();\n const grossWeight =\n !isNaN(receiptData.ladenWeight) && !isNaN(receiptData.tareWeight)\n ? Number(receiptData.ladenWeight) - Number(receiptData.tareWeight)\n : \"\";\n\n const docData = {\n accountName: receiptData.accountName,\n account: {\n name: receiptData.accountName,\n street: receiptData.account?.address?.street,\n city: receiptData.account?.address?.city,\n state: receiptData.account?.address?.state,\n zipCode: receiptData.account?.address?.zipCode,\n country: receiptData.account?.address?.country,\n phone: receiptData.account?.phone,\n email: receiptData.account?.email,\n },\n arrivalDate: receiptData.placedDateTime\n ? format(new Date(receiptData.placedDateTime), \"MM/dd/yyyy\")\n : undefined,\n arrivalTime: receiptData.placedDateTime\n ? format(new Date(receiptData.placedDateTime), \"hh:mm a\")\n : undefined,\n receiptNumber: receiptNumber,\n carrierName: receiptData.originCarrier,\n endDate: receiptData.endDateTime\n ? format(new Date(receiptData.endDateTime), \"MM/dd/yyyy\")\n : undefined,\n endTime: receiptData.endDateTime\n ? format(new Date(receiptData.endDateTime), \"hh:mm a\")\n : undefined,\n grossWeight: grossWeight,\n ladenWeight: receiptData.ladenWeight,\n netWeight: receiptData.netWeight,\n poNumber: receiptData.poNumber,\n railCarNumber: receiptData.railCarNumber\n ? receiptData.railCarNumber\n : null,\n reloadYard: {\n name: window.appUser.reloadYard.name,\n street: window.appUser.reloadYard.street,\n city: window.appUser.reloadYard.city,\n state: window.appUser.reloadYard.state,\n zipCode: window.appUser.reloadYard.zipCode,\n phone: window.appUser.reloadYard.phone,\n email: window.appUser.reloadYard.email,\n website: window.appUser.reloadYard.website,\n },\n releaseDate: receiptData.releaseDateTime\n ? format(new Date(receiptData.releaseDateTime), \"MM/dd/yyyy\")\n : undefined,\n releaseTime: receiptData.releaseDateTime\n ? format(new Date(receiptData.releaseDateTime), \"hh:mm a\")\n : undefined,\n scaleWeightUom: receiptData.scaleWeightUnits,\n scaleWeightUomName: getUnitName(receiptData.scaleWeightUnits),\n shipDate: shipDate,\n shipFrom: receiptData.shipFrom,\n startDate: receiptData.startDateTime\n ? format(new Date(receiptData.startDateTime), \"MM/dd/yyyy\")\n : undefined,\n startTime: receiptData.startDateTime\n ? format(new Date(receiptData.startDateTime), \"hh:mm a\")\n : undefined,\n tareWeight: receiptData.tareWeight,\n totalQuantity: receiptData.totalQuantity,\n uom: receiptData.totalUnits,\n uomName: getUnitName(receiptData.totalUnits),\n weightUom: receiptData.weightUnits,\n weightUomName: getUnitName(receiptData.weightUnits),\n };\n\n if (receiptData.seals) {\n docData.sealNumbers = getBarcodesString(receiptData.seals?.items);\n }\n\n // add inbound shipment custom fields\n if (receiptData.customFields?.length > 0) {\n const customHeaderMap = new Map();\n receiptData.customFields.forEach((field) => {\n const fieldValues = parseCustomField(field);\n\n if (customHeaderMap.has(fieldValues.name)) {\n docData.customFields[customHeaderMap.get(fieldValues.name)] =\n fieldValues.value;\n } else {\n const columnId = getCustomFieldIdCleansed(fieldValues.name);\n customHeaderMap.set(fieldValues.name, columnId);\n docData.customFields = {\n ...docData.customFields,\n [columnId]: fieldValues.value,\n };\n }\n });\n }\n\n // add product and inventory custom fields to each line item\n if (receiptData.inventories?.items?.length > 0) {\n docData.lineItems = [];\n\n // Initialize totals and flags\n let allMissingPCS = true;\n let somePCSNull = false;\n let totalPCS = 0;\n\n let totalMBF = 0;\n let allMissingMBF = true;\n let someMBFNull = false;\n\n let totalSF = 0;\n let allMissingSF = true;\n let someSFNull = false;\n\n receiptData.inventories.items.forEach((lineItem, index) => {\n docData.lineItems[index] = {\n productCode: lineItem.productCode,\n productName: lineItem.productName,\n lotNumber: lineItem.lotNumber,\n quantityReceived: lineItem.quantityDelivered,\n uom: lineItem.inventoryUnits\n ? lineItem.inventoryUnits\n : receiptData.totalUnits,\n uomName: getUnitName(\n lineItem.inventoryUnits\n ? lineItem.inventoryUnits\n : receiptData.totalUnits\n ),\n weight: lineItem.weight,\n weightUom: lineItem.weightUnits,\n weightUomName: getUnitName(lineItem.weightUnits),\n };\n if (lineItem.product) {\n docData.lineItems[index].product = getProductData(\n lineItem.product,\n lineItem.quantityDelivered,\n lineItem.inventoryUnits\n );\n }\n\n // Retrieve pcs from lineItem or product\n const ppu = lineItem.pcs != null ? lineItem.pcs : lineItem.product?.pcs;\n docData.lineItems[index].ppu = ppu;\n\n // Update PCS totals and flags\n if (ppu == null) {\n somePCSNull = true;\n } else {\n allMissingPCS = false;\n\n if (receiptData.totalUnits === Unit.UNIT) {\n const pcs = trimDecimal(ppu * lineItem.quantityDelivered);\n docData.lineItems[index].pcs = pcs;\n totalPCS = trimDecimal(totalPCS + pcs);\n } else {\n docData.lineItems[index].pcs = ppu;\n totalPCS = trimDecimal(totalPCS + ppu);\n }\n }\n\n const loadType =\n lineItem.reloadYardCommodityId || receiptData.reloadYardCommodityId;\n if (isLumberCommodity(loadType)) {\n const mbf = calculateMbf(lineItem);\n if (mbf == null) {\n someMBFNull = true;\n } else {\n allMissingMBF = false;\n docData.lineItems[index].mbf = mbf;\n totalMBF = trimDecimal(totalMBF + mbf);\n }\n } else if (isPanelsCommodity(loadType)) {\n const sf = calculateSqf(lineItem);\n if (sf == null) {\n someSFNull = true;\n } else {\n allMissingSF = false;\n docData.lineItems[index].sf = sf;\n totalSF = trimDecimal(totalSF + sf);\n }\n }\n\n if (lineItem.customFields?.length > 0) {\n const customHeaderMap = new Map();\n lineItem.customFields.forEach((field) => {\n const fieldValues = parseCustomField(field);\n\n if (customHeaderMap.has(fieldValues.name)) {\n docData.lineItems[index].customFields[\n customHeaderMap.get(fieldValues.name)\n ] = fieldValues.value;\n } else {\n const columnId = getCustomFieldIdCleansed(fieldValues.name);\n customHeaderMap.set(fieldValues.name, columnId);\n docData.lineItems[index].customFields = {\n ...docData.lineItems[index].customFields,\n [columnId]: fieldValues.value,\n };\n }\n });\n }\n });\n\n // Finalize totalPCS\n if (!allMissingPCS) {\n if (somePCSNull) {\n docData.totalPCS = \"N/A\";\n } else {\n docData.totalPCS = totalPCS;\n }\n }\n\n // Finalize totalMBF\n if (!allMissingMBF) {\n if (someMBFNull) {\n docData.totalMBF = \"N/A\";\n } else {\n docData.totalMBF = totalMBF;\n }\n }\n\n // Finalize totalSF\n if (!allMissingSF) {\n if (someSFNull) {\n docData.totalSF = \"N/A\";\n } else {\n docData.totalSF = totalSF;\n }\n }\n }\n\n debugger;\n return docData;\n };\n\n const generateReceipt = async () => {\n setLoading(true);\n debugger;\n\n try {\n let receiptNumber = data.receiptNumber;\n\n if (!receiptNumber) {\n const result = await API.graphql(\n graphqlOperation(getReceiptCounter, {\n id: window.appUser?.reloadYardId,\n })\n );\n const counter = ++result.data.getReloadYard.receiptCounter;\n await API.graphql(\n graphqlOperation(updateReloadYard, {\n input: {\n id: window.appUser?.reloadYardId,\n active: result.data.getReloadYard.active,\n name: result.data.getReloadYard.name,\n receiptCounter: counter,\n },\n })\n );\n\n receiptNumber = `IR-${counter}`;\n setReceiptNumber(receiptNumber);\n }\n\n const docData = getReceiptData(data, receiptNumber);\n docData.logo = window.appUser.reloadYard.logoImage\n ? {\n _type: \"image\",\n source: window.appUser.reloadYard.logoImage.key,\n format: \"image/png\",\n width: 70,\n height: 70,\n }\n : undefined;\n docData.transloadsLogo = {\n _type: \"image\",\n source: `${FilePaths.TEMPLATES}/${FilePaths.TRANSLOADS_LOGO}`,\n format: \"image/png\",\n width: 100,\n height: 25,\n };\n\n const templatePath = getTemplatePath(data.account, \"receiptTemplate\");\n const outputPath = `${data.reloadYardId}/${FilePaths.INBOUND}/${\n data.id\n }/${receiptNumber}_${new Date()\n .toLocaleDateString()\n .replaceAll(\"/\", \"_\")}.docx`;\n\n const response = await API.post(\"transREST\", \"/createDocx\", {\n body: {\n templateKey: templatePath,\n data: docData,\n outputFileKey: outputPath,\n },\n });\n\n if (response.body?.key) {\n const file = await Storage.get(response.body.key, { download: true });\n downloadFile(file, response.body.key);\n setReceiptFile(response.body);\n let toUpdateRecord = {};\n\n try {\n await utils.updateInboundClient({\n ...data,\n receiptFile: response.body,\n receiptNumber: receiptNumber,\n });\n } catch (error) {\n notify(\"Receitp created with errors.\", \"warning\");\n logError(\n \"InboundEdit:EditActions:generateReceipt:updateInbound\",\n { error: error, input: toUpdateRecord },\n false\n );\n setLoading(false);\n return;\n }\n\n if (response.success) notify(\"Receipt created successfully.\");\n else if (response.warnings) {\n notify(\"Receipt created with errors.\", \"warning\");\n logError(\n \"InboundEdit:EditActions:generateReceipt:warning\",\n response.warnings,\n false,\n null\n );\n }\n } else {\n logError(\n \"InboundEdit:EditActions:generateReceipt:error\",\n response.error,\n notify,\n null\n );\n setLoading(false);\n return;\n }\n } catch (error) {\n logError(\"InboundEdit:EditActions:generateReceipt\", error, notify, null);\n }\n setLoading(false);\n };\n\n return (\n <TopToolbar>\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <HelpButton>\n <InboundEditHelp\n {...props}\n receiptData={getReceiptData(data, \"RI-number\")}\n />\n </HelpButton>\n {data?.status === InboundStatus.PLACED && (\n <Button\n label=\"Exception\"\n color=\"primary\"\n disabled={loading}\n onClick={() => setIsExceptionDialogOpen(true)}\n >\n <ExceptionIcon />\n </Button>\n )}\n {isMedium && isAuthorized(AclType.INVOICES) && (\n <CreateInvoiceButton {...props} record={data} />\n )}\n <Button\n label=\"Receipt\"\n color=\"primary\"\n disabled={loading}\n onClick={generateReceipt}\n >\n <DocumentIcon />\n </Button>\n {data?.status === InboundStatus.RELEASED && (\n <SendPOSDialogButton\n label=\"POD\"\n title=\"Send POD\"\n record={data}\n email={data.account?.podEmail}\n enclosePhotosDefault={data.account?.podPhotos}\n encloseDocsDefault={data.account?.podAttachments}\n handleSend={utils.handleSendPOD}\n />\n )}\n <BackButton {...props} />\n <ExceptionDialog\n isExceptionDialogOpen={isExceptionDialogOpen}\n setIsExceptionDialogOpen={setIsExceptionDialogOpen}\n exceptions={exceptions}\n setExceptions={setExceptions}\n classes={classes}\n allSealsValid={allSealsValid}\n />\n </TopToolbar>\n );\n};\n\nconst ExceptionDialog = ({\n isExceptionDialogOpen,\n setIsExceptionDialogOpen,\n exceptions,\n setExceptions,\n classes,\n allSealsValid,\n}) => {\n const [otherExceptionNoteError, setOtherExceptionError] = useState();\n const [tempExceptions, setTempExceptinos] = useState({});\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n useEffect(() => {\n if (isExceptionDialogOpen) {\n setTempExceptinos(exceptions);\n }\n }, [isExceptionDialogOpen]);\n\n const handleSave = async () => {\n if (!validate()) return;\n debugger;\n tempExceptions.hasException =\n tempExceptions.unsafeShipment ||\n tempExceptions.brokenSeal ||\n tempExceptions.otherException;\n setExceptions({ ...tempExceptions });\n setIsExceptionDialogOpen(false);\n };\n\n const validate = () => {\n let isValid = true;\n setOtherExceptionError(\"\");\n if (tempExceptions.otherException) {\n isValid = isValid && tempExceptions.otherExceptionNote;\n !tempExceptions.otherExceptionNote && setOtherExceptionError(\"Required\");\n }\n return isValid;\n };\n\n const handleChange = (evt) => {\n const type = evt.target.name;\n const value = evt.target.checked;\n debugger;\n if (type === \"unsafeShipment\") {\n tempExceptions.unsafeShipment = value;\n if (!value) {\n tempExceptions.unsafeShipmentNote = \"\";\n }\n } else if (type === \"brokenSeal\") {\n tempExceptions.brokenSeal = value;\n if (!value) {\n tempExceptions.brokenSealNote = \"\";\n }\n } else {\n tempExceptions.otherException = value;\n if (!value) {\n tempExceptions.otherExceptionNote = \"\";\n setOtherExceptionError(\"\");\n }\n }\n setTempExceptinos({ ...tempExceptions });\n };\n\n const handleCancel = () => {\n setIsExceptionDialogOpen(false);\n };\n\n const setNote = (prop, value) => {\n tempExceptions[prop] = value;\n setTempExceptinos({ ...tempExceptions });\n\n if (prop === \"otherExceptionNote\" && value) setOtherExceptionError(\"\");\n };\n\n return (\n <Dialog\n open={isExceptionDialogOpen}\n maxWidth={isSmall ? \"xl\" : \"md\"}\n fullWidth={true}\n >\n <DialogTitle disableTypography className={classes.dialogTitle}>\n <Typography className={classes.title} variant=\"h6\">\n Exception Manager\n </Typography>\n <IconButton aria-label=\"close\" onClick={handleCancel}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n <DialogContent className={classes.dialogContent}>\n <FormControl component=\"fieldset\" className={classes.formControl}>\n <FormLabel>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Exception Type\n </Typography>\n </FormLabel>\n <FormGroup row={!isSmall}>\n <FormControlLabel\n control={\n <Checkbox\n checked={tempExceptions.unsafeShipment}\n onChange={handleChange}\n name=\"unsafeShipment\"\n />\n }\n label=\"Unsafe Shipment\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={tempExceptions.brokenSeal}\n onChange={handleChange}\n disabled={tempExceptions.brokenSeal && !allSealsValid}\n name=\"brokenSeal\"\n />\n }\n label=\"Broken seal\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={tempExceptions.otherException}\n onChange={handleChange}\n name=\"other\"\n />\n }\n label=\"Other\"\n />\n </FormGroup>\n </FormControl>\n {tempExceptions.unsafeShipment && (\n <div className={classes.exceptionContainer}>\n <TextField\n name=\"unsafeShipmentNote\"\n label=\"Unsafe Shipment Notes\"\n multiline\n autoFocus\n minRows={3}\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={\n tempExceptions.unsafeShipmentNote\n ? tempExceptions.unsafeShipmentNote\n : \"\"\n }\n onChange={(evt) =>\n setNote(\"unsafeShipmentNote\", evt.target.value)\n }\n />\n </div>\n )}\n {tempExceptions.brokenSeal && (\n <div className={classes.exceptionContainer}>\n <TextField\n name=\"brokenSealNote\"\n label=\"Broken Seal Notes\"\n multiline\n autoFocus\n minRows={3}\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={\n tempExceptions.brokenSealNote\n ? tempExceptions.brokenSealNote\n : \"\"\n }\n onChange={(evt) => setNote(\"brokenSealNote\", evt.target.value)}\n />\n </div>\n )}\n {tempExceptions.otherException && (\n <div className={classes.exceptionContainer}>\n <TextField\n name=\"otherExceptionNote\"\n label=\"Other Notes\"\n multiline\n autoFocus\n minRows={3}\n error={otherExceptionNoteError}\n helperText={otherExceptionNoteError}\n margin=\"dense\"\n variant=\"outlined\"\n required\n fullWidth\n value={\n tempExceptions.otherExceptionNote\n ? tempExceptions.otherExceptionNote\n : \"\"\n }\n onChange={(evt) =>\n setNote(\"otherExceptionNote\", evt.target.value)\n }\n />\n </div>\n )}\n </DialogContent>\n <DialogActions>\n <Box>\n <Box>\n <Button\n label=\"Cancel\"\n color=\"default\"\n onClick={() => handleCancel()}\n >\n <CancelIcon />\n </Button>\n <Button\n label=\"Submit\"\n onClick={() => handleSave()}\n color=\"primary\"\n />\n </Box>\n </Box>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default InboundEditActions;\n","import React, { useEffect } from \"react\";\nimport { Grid } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { FormDataConsumer, SelectInput, TextInput } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\nimport { InboundStepsChoices } from \"../../../utils/constants\";\nimport { Checklist } from \"../../../components/common/Checklist\";\n\nconst useStyles = makeStyles((theme) => ({\n arrayInput: {\n marginTop: theme.spacing(0),\n },\n}));\n\nexport const ChecklistForm = ({\n account,\n yardCommodity,\n isDisabled,\n ...props\n}) => {\n const form = useForm();\n const classes = useStyles();\n\n useEffect(() => {\n if (account?.checklists?.items) {\n account.checklists.items = account.checklists?.items.filter(\n (itm) => itm.processName === \"Inbound Shipment\" && itm.active\n );\n }\n });\n\n const handleChecklistChange = async (event) => {\n if (event.target.value) {\n debugger;\n const checklist = account.checklists.items.find(\n (itm) => itm.id === event.target.value\n );\n form.change(\"checklist\", checklist.checklistItems);\n } else {\n form.change(\"checklist\", null);\n }\n };\n\n return (\n <FormDataConsumer>\n {({ formData, disabled = { isDisabled }, ...rest }) => (\n <Grid container direction=\"row\" spacing={3}>\n <Grid item xs={12}>\n <TextInput\n source=\"instructions\"\n label=\"Special Instructions\"\n variant=\"outlined\"\n multiline\n fullWidth\n disabled={!account || isDisabled}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n source=\"checklistId\"\n label=\"Checklist\"\n variant=\"outlined\"\n fullWidth\n choices={account?.checklists?.items || []}\n optionText={(choice) => `${choice.name}`}\n optionValue=\"id\"\n helperText={false}\n allowEmpty\n disabled={!account || isDisabled}\n onChange={handleChecklistChange}\n />\n </Grid>\n {\n <Grid item xs={12}>\n <Checklist\n {...props}\n workFlowSteps={InboundStepsChoices}\n source=\"checklist\"\n label=\"Checklist Items\"\n className={classes.arrayInput}\n isDisabled={isDisabled}\n />\n </Grid>\n }\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useHistory, useLocation } from \"react-router-dom\";\n\nimport DateFnsUtils from \"@date-io/date-fns\";\nimport { differenceInDays } from \"date-fns\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { areaByActiveBySortKey } from \"../../../graphql/reloadyard/custom-queries\";\nimport { createInventorie } from \"../../../graphql/mutations\";\n\nimport {\n Backdrop,\n Box,\n CircularProgress,\n Dialog,\n Grid,\n Hidden,\n InputAdornment,\n makeStyles,\n TextField,\n Tooltip,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { MuiPickersUtilsProvider, DateTimePicker } from \"@material-ui/pickers\";\n\nimport {\n ArrayInput,\n BooleanInput,\n Button,\n Confirm,\n Edit,\n FileInput,\n FormDataConsumer,\n FormTab,\n ImageInput,\n Loading,\n minLength,\n minValue,\n number,\n NumberInput,\n required,\n SelectInput,\n SimpleFormIterator,\n TabbedForm,\n TextInput,\n Toolbar,\n useDataProvider,\n useEditController,\n useNotify,\n useRedirect,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport {\n ArrivedAtIcon,\n AttachFileIcon,\n AttachPhotoIcon,\n CollectedAtIcon,\n CopyDownIcon,\n CreatedAtIcon,\n EditIcon,\n PlacedAtIcon,\n ReleasedAtIcon,\n RemoveIcon,\n SaveIcon,\n SealIcon,\n TimerIcon,\n TimerOffIcon,\n} from \"../../../components/common\";\n\nimport {\n CustomFields,\n CustomFieldsButton,\n CustomFieldsTallySheet,\n getCustomFieldsToSave,\n} from \"../../../components/common/CustomFields\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HistoryTab } from \"../../../components/common/HistoryTab\";\nimport { ImageField } from \"../../../components/common/ImageField\";\nimport { NotesTab } from \"../../../components/common/NotesTab\";\nimport { ProductLinkIcon } from \"../../../components/common/ProductLinkIcon\";\nimport { BetaBadge } from \"../../../components/common/FeatureBadges\";\n\nimport { logError, setupLocationMaps } from \"../../../utils/appUtils\";\nimport {\n ACCEPTED_FILES,\n CARLOT_PO_NO_CHARS,\n CarrierType,\n CarrierTypes,\n InboundState,\n InboundStatus,\n InventoryField,\n InventoryStatus,\n LotType,\n LotTypes,\n MAX_FILES,\n MAX_PHOTO_NUM_INBOUND,\n MAX_PHOTO_SIZE,\n MAX_PHOTO_SIZE_MSG,\n NoteType,\n UnitOptions,\n UnitWeightOptions,\n VALIDATION_MSG,\n} from \"../../../utils/constants\";\nimport { handleFileChange } from \"../../../utils/fileUtils\";\nimport {\n filterAreas,\n filterZones,\n isBulkArea,\n isTrack,\n} from \"../../../utils/locationUtils\";\nimport {\n getCommodityUnits,\n isBulkCommodity,\n isBulkShipment,\n isInventoryFieldVisible,\n unitOptionRenderer,\n} from \"../../../utils/loadTypeUtils\";\nimport {\n deepRedirect,\n exceptionRenderer,\n getBackPath,\n getHoursMinutesDuration,\n trimDecimal,\n} from \"../../../utils/utils\";\n\nimport { InventoryStatusIcon } from \"../inventory/InventoryStatusIcon\";\nimport {\n handleInventoryDelete,\n showWeight,\n updateInboundQuantity,\n} from \"../inventory/InventoryUitls\";\nimport { InboundAside } from \"./InboundAside\";\nimport { DialogSaveButton } from \"./DialogSaveButton\";\nimport { DeepDeleteButton } from \"./DeepDeleteButton\";\nimport InboundEditActions from \"./InboundEditActions\";\nimport { ChecklistForm } from \"./ChecklistForm\";\nimport {\n SealNumbersCreateDialog,\n SealNumbersDialog,\n} from \"./SealNumbersDialog\";\nimport * as utils from \"./InboundUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n arrayInput: {\n marginTop: theme.spacing(0),\n },\n arrayInputHeader: {\n display: \"flex\",\n marginTop: theme.spacing(1),\n marginBottom: -theme.spacing(1),\n justifyContent: \"space-between\",\n },\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n booleanInput: {\n marginLeft: theme.spacing(1),\n },\n statusIcon: {\n marginTop: theme.spacing(2),\n },\n mediaFull: {\n margin: \"0 auto 0\",\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n}));\n\nconst validateRequired = required();\nconst validatePoNo = [required(), minLength(CARLOT_PO_NO_CHARS)];\nconst validateLadenWeight = [\n required(),\n number(),\n minValue(0, \"Must be greater than 0\"),\n];\nconst validateLoadedMinNum = [number(), minValue(0, \"Must be greater than 0\")];\nconst validateQuantity = [required(), number(), minValue(0)];\nconst validatePieces = [number(), minValue(1)];\n\nconst tareWeightValidator = (value, allValues) => {\n if (allValues.ladenWeight && allValues.state === InboundState.COMPLETED) {\n // return an object just like the other validators\n if (value !== 0 && !value) return { message: `Required`, isRequired: true };\n if (value < 0) return { message: `Must be 0 or greater`, isRequired: true };\n }\n return undefined;\n};\nconst isTareWeightRequired = (formData) =>\n formData.ladenWeight && formData.state === InboundState.COMPLETED;\nconst validateTareWeight = [number(), tareWeightValidator];\n\nconst validateRailCarNumber = (value, allValues) => {\n if (\n (allValues?.carrierType === CarrierType.RAIL ||\n allValues?.placedDateTime) &&\n !value\n ) {\n // return an object just like the other validators\n return { message: `Required`, isRequired: true };\n }\n return undefined;\n};\nconst isRailcarNumberRequired = (formData) =>\n validateRailCarNumber(null, formData) ? true : false;\n\nconst validateOriginCarrier = (value, allValues) => {\n if (\n (allValues?.carrierType === CarrierType.RAIL ||\n allValues?.placedDateTime) &&\n !value\n ) {\n // return an object just like the other validators\n return { message: `Required`, isRequired: true };\n }\n return undefined;\n};\nconst isROriginCarrierRequired = (formData) =>\n validateOriginCarrier(null, formData) ? true : false;\n\nconst validateTallySheetSaved = (data) => {\n let unSaved = false;\n unSaved = data.some(\n (e) => typeof e === `undefined` || e.status === InventoryStatus.NEW\n );\n return unSaved;\n};\n\nconst validateTallyRowQty = (data) => {\n const errors = {};\n if (\n data &&\n data.quantityDelivered &&\n data.quantityDelivered !== \"\" &&\n data.quantityShipped !== data.quantityDelivered\n ) {\n errors.quantity = true;\n errors.helperText = \" Qty. Advised & Received should be equal.\";\n }\n return errors;\n};\n\n// check if Qty. advised & received are equal. Warning only, no Validation Errors.\nconst validateTallyQty = (formData) => {\n debugger;\n let qtyWarning = false;\n if (\n ((formData.status === InboundStatus.PLACED && formData.placedDateTime) ||\n formData.status === InboundStatus.AGGREGATED) &&\n formData.state !== InboundState.APPROVE_SHIPMENT &&\n formData.inventories?.items\n ) {\n formData.inventories.items.forEach((row) => {\n if (row?.status !== InboundStatus.IN_TRANSIT) {\n const quantityShipped = row.quantityShipped || 0;\n const quantityDelivered = row.quantityDelivered || 0;\n let netReceived = quantityDelivered;\n\n if (row.overShipment || row.underShipment) {\n // manager can zero out inventory without setting exception for BULK\n const underShipmentQuantity = row.underShipmentQuantity || 0;\n const overShipmentQuantity = row.overShipmentQuantity || 0;\n netReceived = trimDecimal(\n quantityDelivered + underShipmentQuantity - overShipmentQuantity\n );\n }\n if (quantityShipped !== netReceived) {\n qtyWarning = true;\n }\n }\n });\n }\n return qtyWarning;\n};\n\nconst isQuantityDeliveredRequired = (formData, data) => {\n return (\n formData?.state &&\n formData?.state !== InboundState.NEW &&\n formData?.state !== InboundState.PROCESS_SHIPMENT &&\n formData?.state !== InboundState.APPROVE_SHIPMENT &&\n (data.status === InventoryStatus.NEW ||\n data.verificationRequired === \"true\") &&\n !isBulkShipment(formData?.reloadYardCommodity.commodity, formData?.areaId)\n );\n};\n\n// Validate Tally Sheet Row and return Validation Errors that will prevent form submission\nconst validateTallySheetRow = (record, data) => {\n const errors = {};\n let helperText = false;\n if (data) {\n if (!data.productName || data.productName === \"\") {\n errors.productName = true;\n helperText = \"Product Name is required.\";\n }\n if (!data.quantityShipped || data.quantityShipped <= 0) {\n errors.quantityShipped = true;\n helperText = \"Qty. Advised must be greater than 0.\";\n }\n if (data.weightUnits && (!data.weight || data.weight <= 0)) {\n errors.weight = true;\n helperText = \"Weight must be greater than 0.\";\n }\n }\n\n if (helperText) errors.helperText = helperText;\n return errors;\n};\n\n// Validate form and return error to prevent form submission\nconst validateInboundEdit = (record, values) => {\n let errors = {};\n // Validate Tally Sheet Form and return Validation Errors\n if (values.inventories && values.inventories.items) {\n values.inventories.items.forEach((row) => {\n const error = validateTallySheetRow(record, row);\n if (error.helperText) errors = error;\n });\n }\n\n // validate carrier name and number\n if (values.carrierType === CarrierType.RAIL) {\n if (!values.originCarrier) errors.originCarrier = \"Required\";\n if (!values.railCarNumber) errors.railCarNumber = \"Required\";\n }\n\n return errors;\n};\n\nconst ShipmentSetupTab = ({\n record,\n backPath,\n receiptFile,\n exceptions,\n yardCommodity,\n setYardCommodity,\n SetAllSealsValid,\n ...props\n}) => {\n const classes = useStyles();\n const gridRef = useRef(null);\n const form = useForm();\n const location = useLocation(); // used to force refresh photos on every visit.\n const notify = useNotify();\n const [lotNumber, setLotNumber] = useState(\n record.lotNumberOverride === true ? record.lotNumber : \"\"\n );\n const [areas, setAreas] = useState(\n window.appUser.reloadYard?.areas.items.filter(\n (itm) => itm.active === \"true\"\n )\n );\n const [area, setArea] = useState(record.area);\n const [thumbWidth, setThumbWidth] = useState(64);\n const [magnifiedUrl, setMagnifiedUrl] = useState(null);\n const [open, setOpen] = useState(false);\n const yardCommodities = window.appUser.reloadYard.activeYardCommodities.items;\n\n useEffect(() => {\n getSetupData();\n }, []);\n\n useEffect(() => {\n if (record?.area?.zones) setArea(record.area);\n }, [record.area]);\n\n useEffect(() => {\n if (receiptFile?.key) form.change(\"receiptFile\", receiptFile);\n }, [receiptFile]);\n\n useEffect(() => {\n if (gridRef.current) {\n // approximately 9 photos + margin\n const size = gridRef.current.offsetWidth / 9 - 2 * 9;\n setThumbWidth(size);\n }\n }, [gridRef.current, location.key]);\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"hasException\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"unsafeShipment\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"unsafeShipmentNote\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"brokenSeal\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"brokenSealNote\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"otherException\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"otherExceptionNote\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n form.registerField(\n \"checklist\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"sealNumbers\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n useEffect(() => {\n form.change(\"hasException\", exceptions?.hasException);\n form.change(\"unsafeShipment\", exceptions?.unsafeShipment);\n form.change(\"unsafeShipmentNote\", exceptions?.unsafeShipmentNote);\n form.change(\"brokenSeal\", exceptions?.brokenSeal);\n form.change(\"brokenSealNote\", exceptions?.brokenSealNote);\n form.change(\"otherException\", exceptions?.otherException);\n form.change(\"otherExceptionNote\", exceptions?.otherExceptionNote);\n }, [exceptions]);\n\n const getSetupData = async () => {\n try {\n const response = await API.graphql(\n graphqlOperation(areaByActiveBySortKey, {\n reloadYardId: window.appUser?.reloadYardId,\n activeSortKey: { beginsWith: { active: \"true\" } },\n limit: 1000,\n })\n );\n let areas = response.data.areaByActiveBySortKey.items;\n window.appUser.reloadYard.areas.items = areas;\n setupLocationMaps(window.appUser.reloadYard);\n\n const reloadYardCommodityId = form.getFieldState(\n \"reloadYardCommodityId\"\n )?.value;\n areas = filterAreas(areas, reloadYardCommodityId);\n setAreas(areas);\n } catch (error) {\n logError(\"inboundShipment:InboundEdit:getSetupData\", error, notify);\n }\n };\n\n const handlePoNumberChange = (event, formData) => {\n if (\n formData.lotNumberOverride !== true &&\n formData.lotType === LotType.CARLOT\n ) {\n if (event.target.value.length >= CARLOT_PO_NO_CHARS)\n form.change(\n \"lotNumber\",\n formData.account.lotNumberPrefix +\n event.target.value.slice(-CARLOT_PO_NO_CHARS)\n );\n else form.change(\"lotNumber\", \"\");\n }\n };\n\n const handleLotTypeChange = (event, formData) => {\n if (formData.lotNumberOverride !== true) {\n form.change(\n \"lotNumber\",\n formData.account.lotNumberPrefix +\n utils.autogenLotNumber(event.target.value, formData)\n );\n }\n };\n\n const handleLotNoManualChange = (value, formData) => {\n debugger;\n if (value) form.change(\"lotNumber\", lotNumber);\n else\n form.change(\n \"lotNumber\",\n formData.account.lotNumberPrefix +\n utils.autogenLotNumber(formData.lotType, formData)\n );\n };\n\n const handleAreaChange = (event, formData) => {\n debugger;\n const areaId = event.target.value;\n const newArea = { ...areas.find((itm) => itm.id === areaId) };\n newArea.zones = { ...newArea.zones };\n newArea.zones.items = filterZones(\n newArea.zones.items,\n formData.reloadYardCommodityId,\n record.accountId\n );\n setArea(newArea);\n if (newArea.zones.items.length === 1)\n form.change(\"zoneId\", newArea.zones.items[0].id);\n else form.change(\"zoneId\", \"\");\n };\n\n const handleImageChange = (value) => {\n let error = null;\n\n if (value && Array.isArray(value) && value.length > 0) {\n const photosState = form.getFieldState(\"photos\");\n if (value.length > MAX_PHOTO_NUM_INBOUND) {\n error = `Max ${MAX_PHOTO_NUM_INBOUND} photos per shipment.`;\n let newValue = photosState.value.filter(\n (itm) =>\n itm.size <= MAX_PHOTO_SIZE || itm.rawFile?.size <= MAX_PHOTO_SIZE\n );\n newValue = newValue.slice(0, MAX_PHOTO_NUM_INBOUND);\n form.change(\"photos\", newValue);\n } else {\n const newValue = photosState.value.filter(\n (itm) =>\n itm.key ||\n itm.size <= MAX_PHOTO_SIZE ||\n itm.rawFile?.size <= MAX_PHOTO_SIZE\n );\n if (newValue.length !== value.length) error = MAX_PHOTO_SIZE_MSG;\n form.change(\"photos\", newValue);\n }\n } else if (value?.size > MAX_PHOTO_SIZE) {\n error = MAX_PHOTO_SIZE_MSG;\n form.change(\"photos\", null);\n }\n\n if (error) notify(error, \"warning\");\n };\n\n const handleMagnifyPhoto = (event) => {\n if (!magnifiedUrl) setMagnifiedUrl(event.target.lowsrc);\n else setMagnifiedUrl(null);\n };\n\n const handleOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const getSealNumberButtonLabel = (formData) => {\n return `Manage Seals (${\n formData?.seals?.items.length || formData?.sealNumbers?.length || 0\n })`;\n };\n\n return (\n // Do not pass ...props to FormDataConsumer, or props will be lost\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"accountName\"\n label=\"Account\"\n variant=\"outlined\"\n disabled\n fullWidth\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"shipFrom\"\n label=\"Origin\"\n variant=\"outlined\"\n fullWidth\n disabled={formData.state === InboundState.COMPLETED}\n helperText={false}\n validate={validateRequired}\n />\n </Grid>\n </Grid>\n <Grid container item direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"reloadYardCommodityId\"\n label=\"Load Type\"\n variant=\"outlined\"\n fullWidth\n choices={yardCommodities}\n optionText={(choice) =>\n `${choice.commodity.name} - ${choice.units}`\n }\n optionValue=\"id\"\n validate={validateRequired}\n disabled={formData.inventories?.items.length > 0}\n onChange={(event) =>\n utils.handleCommodityChange(\n event,\n form,\n setYardCommodity,\n setAreas\n )\n }\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"carrierType\"\n label=\"Carrier Type\"\n variant=\"outlined\"\n fullWidth\n disabled={formData.state === InboundState.COMPLETED}\n choices={CarrierTypes}\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"originCarrier\"\n label=\"Origin Carrier\"\n variant=\"outlined\"\n fullWidth\n disabled={\n record.originCarrier &&\n record.status === InboundStatus.RELEASED\n }\n validate={validateOriginCarrier}\n required={isROriginCarrierRequired(formData)}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"railCarNumber\"\n label={\n formData.carrierType === CarrierType.RAIL\n ? \"Railcar Number\"\n : \"Trailer Number\"\n }\n variant=\"outlined\"\n fullWidth\n disabled={\n record.railCarNumber &&\n record.status === InboundStatus.RELEASED\n }\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n validate={validateRailCarNumber}\n required={isRailcarNumberRequired(formData)}\n inputProps={{ style: { textTransform: \"uppercase\" } }}\n helperText={false}\n onBlur={() =>\n utils.validateRailCarNumberUnicity(formData, notify)\n }\n />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"poNumber\"\n label=\"PO Number\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n disabled={formData.state === InboundState.COMPLETED}\n validate={validatePoNo}\n onChange={(event) => handlePoNumberChange(event, formData)}\n inputProps={{ style: { textTransform: \"uppercase\" } }}\n helperText={false}\n onBlur={() => utils.validatePoNumberUnicity(formData, notify)}\n />\n </Grid>\n {/* {!isBulkShipment(formData?.reloadYardCommodity.commodity, area) &&\n <Grid item xs={12} md={6} >\n <Box mt={1} >\n <BooleanInput source=\"secondaryReview\" label=\"Require Secondary Review\" fullWidth\n disabled={formData.state === InboundState.COMPLETED}\n helperText={false}\n />\n </Box>\n </Grid>\n } */}\n {formData?.account?.trackInboundSeals && (\n <Grid item xs={12} md={6}>\n <Box mt={1}>\n <Button\n label={getSealNumberButtonLabel(formData)}\n onClick={handleOpen}\n variant=\"outlined\"\n size=\"large\"\n >\n <SealIcon />\n </Button>\n </Box>\n </Grid>\n )}\n </Grid>\n\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"areaId\"\n label=\"Default Area\"\n variant=\"outlined\"\n fullWidth\n disabled={formData.state === InboundState.COMPLETED}\n choices={areas || []}\n onChange={(event) => handleAreaChange(event, formData)}\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"zoneId\"\n label=\"Default Zone\"\n variant=\"outlined\"\n fullWidth\n disabled={!area || formData.state === InboundState.COMPLETED}\n choices={\n area?.zones?.items?.filter(\n (zone) =>\n !zone.accountId || zone.accountId === record.accountId\n ) || []\n }\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"lotType\"\n label=\"Lot Type\"\n variant=\"outlined\"\n fullWidth\n disabled={formData.state === InboundState.COMPLETED}\n choices={LotTypes}\n validate={validateRequired}\n onChange={(event) => handleLotTypeChange(event, formData)}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <Grid container direction=\"column\" spacing={0}>\n <Grid item xs={12}>\n {formData.lotNumberOverride === true ? (\n <TextInput\n source=\"lotNumber\"\n label=\"Lot Number\"\n variant=\"outlined\"\n fullWidth\n disabled={\n !formData.lotType ||\n !formData.poNumber ||\n formData.state === InboundState.COMPLETED\n }\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n onChange={(event) => setLotNumber(event.target.value)}\n validate={validateRequired}\n helperText={false}\n InputProps={{\n style: { textTransform: \"uppercase\" },\n }}\n />\n ) : (\n <TextInput\n source=\"lotNumber\"\n label=\"Lot Number\"\n variant=\"outlined\"\n fullWidth\n disabled={\n formData.lotNumberOverride !== true ||\n !formData.lotType ||\n !formData.poNumber ||\n formData.state === InboundState.COMPLETED\n }\n helperText={false}\n parse={(v) =>\n v !== \"\"\n ? record.account.lotNumberPrefix + v.toUpperCase()\n : undefined\n }\n format={(v) =>\n v && v.indexOf(record.account.lotNumberPrefix) === 0\n ? v.slice(record.account.lotNumberPrefix.length)\n : v\n }\n validate={validateRequired}\n onChange={(event) => setLotNumber(event.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n {\" \"}\n {utils.getLotNumberPrefix(\n record.account,\n formData\n )}{\" \"}\n </InputAdornment>\n ),\n style: { textTransform: \"uppercase\" },\n }}\n />\n )}\n </Grid>\n <Grid item xs={12}>\n <BooleanInput\n source=\"lotNumberOverride\"\n label=\"Manual Override\"\n className={classes.booleanInput}\n options={{ size: \"small\" }}\n disabled={\n !formData.lotType ||\n !formData.poNumber ||\n formData.state === InboundState.COMPLETED\n }\n onChange={(value) =>\n handleLotNoManualChange(value, formData)\n }\n />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n\n <CustomFields\n {...props}\n recordFields={record.customFields}\n accountFields={record.account.inboundCustomFields}\n width={6}\n disabled={formData.status === InboundStatus.RELEASED}\n />\n <Grid container direction=\"row\" spacing={1}>\n <Hidden smDown>\n <Grid item xs={6}>\n <FileInput\n source=\"attachments\"\n label=\"ATTACHMENTS\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop files to\n upload, or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n multiple\n maxFiles={MAX_FILES}\n options={{ maxFiles: MAX_FILES }}\n onChange={(value) =>\n handleFileChange(\"attachments\", value, form, notify)\n }\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n </Hidden>\n <Grid item xs={12} md={6}>\n <FileInput\n source=\"receiptFile\"\n label=\"RECEIPT FILE\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Create Receipt,\n or drop a File to upload, or click to select.\n </p>\n }\n accept=\"image/*,.pdf,.docx\"\n onChange={(value) =>\n handleFileChange(\"receiptFile\", value, form, notify)\n }\n disabled={false}\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n <Hidden smDown>\n <Grid item xs={12} ref={gridRef}>\n <ImageInput\n source=\"photos\"\n label=\"PHOTOS\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachPhotoIcon fontSize=\"large\" /> <br /> Drop photos to\n upload, or click to select.\n </p>\n }\n accept=\"image/*\"\n multiple\n maxFiles={MAX_PHOTO_NUM_INBOUND}\n options={{ maxFiles: MAX_PHOTO_NUM_INBOUND }}\n onChange={handleImageChange}\n >\n <ImageField\n source=\"src\"\n title=\"title\"\n thumbWidth={thumbWidth}\n scaleThumb={true}\n fullSize={window.innerWidth}\n onClick={handleMagnifyPhoto}\n />\n </ImageInput>\n {magnifiedUrl ? (\n <Dialog\n open={magnifiedUrl}\n maxWidth=\"lg\"\n onClick={handleMagnifyPhoto}\n >\n <img\n src={magnifiedUrl}\n alt=\"Inbound Shipment\"\n className={classes.mediaFull}\n onClick={handleMagnifyPhoto}\n />\n </Dialog>\n ) : null}\n </Grid>\n </Hidden>\n </Grid>\n {formData?.seals?.items?.length === 0 ? (\n <SealNumbersCreateDialog\n open={open}\n onClose={handleClose}\n formData={formData}\n />\n ) : (\n <SealNumbersDialog\n open={open}\n onClose={handleClose}\n SetAllSealsValid={SetAllSealsValid}\n formData={formData}\n />\n )}\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst EditRemoveButton = ({\n record,\n form,\n saving,\n setSaving,\n setCalcError,\n setWeightError,\n yardCommodity,\n backPath,\n ...props\n}) => {\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const history = useHistory();\n const redirect = useRedirect();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const [open, setOpen] = useState(false);\n const [confirmTitle, setConfirmTitle] = useState(\"\");\n const [confirmContent, setConfirmContent] = useState(\"\");\n\n var n = props.className.lastIndexOf(\"-\");\n var index = Number(props.className.substring(n + 1));\n const source = `inventories.items[${index}]`;\n const fieldState = form.getFieldState(\"inventories.items\");\n const data = fieldState?.value[index];\n const toPath = data ? \"/inventories/\" + data.id : \"\";\n\n const handleConfirmOpen = (evt) => {\n const formState = form.getState();\n debugger;\n\n if (fieldState.dirty) {\n let unSaved = validateTallySheetSaved(fieldState.value);\n\n if (unSaved) {\n evt.preventDefault();\n setConfirmTitle(\"Un-saved Data Confirmation\");\n setConfirmContent(\n \"You have un-saved Tally Sheet Items. Navigating away will lose un-saved changes. Continue?\"\n );\n setOpen(true);\n return;\n }\n }\n\n if (formState.dirty) {\n evt.preventDefault();\n setConfirmTitle(\"Un-saved Data Confirmation\");\n setConfirmContent(\n \"You have un-saved shipment changes. If you continue, all changes will be lost. Proceed?\"\n );\n setOpen(true);\n return;\n }\n\n handleConfirmRedirect();\n };\n\n const handleConfirmClose = () => setOpen(false);\n const handleConfirmRedirect = () => {\n const formState = form.getState();\n\n deepRedirect(history, toPath, props.location.pathname, backPath, {\n inboundRecord: formState.values,\n });\n };\n\n const handleCopy = () => {\n if (fieldState?.value) {\n debugger;\n const newRow = {\n status: InventoryStatus.NEW,\n productName: data.productName,\n productCode: data.productCode,\n productId: data.productId ? data.productId : \"\",\n product: data.product,\n quantityShipped: data.quantityShipped,\n quantityDelivered: data.quantityDelivered,\n // pcs: data.pcs, // commented out to keep product default\n reloadYardCommodityId: data.reloadYardCommodityId,\n pcsHeight: data.pcsHeight,\n pcsWidth: data.pcsWidth,\n pcsLength: data.pcsLength,\n weight: data.weight,\n weightUnits: data.weightUnits,\n customFields: data.customFields,\n };\n form.change(\"inventories.items\", [...fieldState.value, newRow]);\n utils.handleInventoriesQty(form, setCalcError);\n utils.handleInventoriesWeight(form, setWeightError);\n }\n };\n\n const handleRemove = async (event) => {\n setSaving(true);\n\n debugger;\n try {\n if (data?.id) {\n await handleInventoryDelete(data, dataProvider);\n props.onClick(event);\n } else props.onClick(event);\n\n const formState = form.getState();\n updateInboundQuantity(formState?.values);\n\n if (data?.id) notify(\"Item deleted successfully\");\n } catch (err) {\n logError(\n \"inboundEdit:EditRemoveButton:handleRemove\",\n err,\n notify,\n redirect\n );\n }\n\n utils.handleInventoriesQty(form, setCalcError);\n utils.handleInventoriesWeight(form, setWeightError);\n setSaving(false);\n };\n\n const gerYardCommodityId = (data) => {\n debugger;\n return data.productId && data.reloadYardCommodityId\n ? data.reloadYardCommodityId\n : yardCommodity.id;\n };\n\n const handleSave = async () => {\n setSaving(true);\n debugger;\n try {\n const formState = form.getState();\n const formData = formState.values;\n if (validateTallySheetRow(record, data).helperText) {\n notify(VALIDATION_MSG, \"warning\");\n setSaving(false);\n return;\n }\n\n // OK to use potentially stale record because all inventories get updated on inbound save.\n let input = {\n inboundShipmentId: record.id,\n reloadYardId: record.reloadYardId,\n accountId: record.accountId,\n accountName: record.accountName,\n groups: record.groups,\n active: record.active,\n areaId: formData.areaId,\n zoneId: formData.zoneId,\n aisleId: null,\n locationId: null,\n poNumber: formData.poNumber,\n productName: data.productName,\n quantityShipped: data.quantityShipped,\n quantityCommitted: 0,\n pcs: data.pcs,\n pcsHeight: data.pcsHeight,\n pcsWidth: data.pcsWidth,\n pcsLength: data.pcsLength,\n inventoryUnits: record.totalUnits,\n weight: data.weight,\n weightUnits: data.weightUnits,\n sortKey: index + 10001,\n };\n\n input.productCode = data.productCode ? data.productCode : null;\n input.productId = data.productId ? data.productId : \"\";\n input.reloadYardCommodityId = gerYardCommodityId(data);\n\n input.lotType = formData.lotType ? formData.lotType : \"\";\n input.lotNumber = formData.lotType ? formData.lotNumber : \"\";\n\n if (record.placedDateTime && record.placedDateTime !== \"\")\n input.deliveryDateTime = record.placedDateTime;\n\n if (data.quantityDelivered && data.quantityDelivered !== \"\")\n input.quantityDelivered = data.quantityDelivered;\n if (data.quantityOnHand && data.quantityOnHand !== \"\")\n input.quantityOnHand = data.quantityOnHand;\n\n input.history = [\n {\n text: `Created Inventory.`,\n type: NoteType.GENERIC,\n date: new Date(),\n by: window.appUser?.fullName,\n },\n ];\n\n if (!record?.state || record?.state === InboundState.NEW) {\n input.status = InventoryStatus.IN_TRANSIT;\n } else if (record.state === InboundState.COMPLETED) {\n input.status = InventoryStatus.STORED;\n } else {\n input.status = InventoryStatus.ARRIVED;\n input.verificationRequired = \"false\";\n }\n\n input.customFields = getCustomFieldsToSave(\n data.customFields,\n record.account.inventoryCustomFields\n );\n\n const resp = await API.graphql(\n graphqlOperation(createInventorie, { input })\n );\n const newLineItem = resp.data.createInventorie;\n form.change(source, newLineItem);\n\n formData.inventories.items =\n formData.inventories.items.concat(newLineItem);\n updateInboundQuantity(formData);\n\n notify(\"Tally Sheet Item saved successfully\");\n } catch (error) {\n logError(\n \"inboundShipments:InboundEdit:EditRemoveButton:handleSave\",\n error,\n notify,\n redirect\n );\n }\n\n utils.handleInventoriesQty(form, setCalcError);\n utils.handleInventoriesWeight(form, setWeightError);\n setSaving(false);\n };\n\n return (\n <Grid\n container\n direction={isXSmall ? \"row\" : \"column\"}\n spacing={1}\n alignItems=\"flex-end\"\n >\n {data?.status &&\n data.status !== InventoryStatus.UNLOADED &&\n data.status !== InventoryStatus.STORED &&\n data.status !== InventoryStatus.AGGREGATED &&\n data.status !== InventoryStatus.SHIPPED && (\n <Grid item xs={2} sm={12}>\n <Button label=\"Remove\" color=\"default\" onClick={handleRemove}>\n <RemoveIcon />\n </Button>\n </Grid>\n )}\n {data?.status && data.status !== InventoryStatus.NEW && (\n <Grid item xs={2} sm={12}>\n {record.status !== InboundStatus.RELEASED &&\n !isBulkCommodity(yardCommodity?.commodity) && (\n <Tooltip title=\"Copy Down\">\n <Button\n label=\"\"\n color=\"default\"\n size=\"small\"\n onClick={handleCopy}\n >\n <CopyDownIcon />\n </Button>\n </Tooltip>\n )}\n <Button label=\"Edit\" color=\"primary\" onClick={handleConfirmOpen}>\n <EditIcon />\n </Button>\n\n <Confirm\n isOpen={open}\n loading={saving}\n title={confirmTitle}\n content={confirmContent}\n onConfirm={handleConfirmRedirect}\n onClose={handleConfirmClose}\n />\n </Grid>\n )}\n\n {data && data.status && data.status === InventoryStatus.NEW && (\n <Grid item xs={2} sm={12}>\n <Button\n label=\"Save\"\n color=\"primary\"\n variant=\"contained\"\n size=\"small\"\n disabled={saving}\n onClick={handleSave}\n >\n <SaveIcon />\n </Button>\n </Grid>\n )}\n </Grid>\n );\n};\n\nconst TallySheetTab = ({ record, backPath, yardCommodity, ...props }) => {\n const form = useForm();\n const classes = useStyles();\n const [calcError, setCalcError] = useState();\n const [, setWeightError] = useState();\n const [saving, setSaving] = useState(false);\n const [selectedFields, setSelectedFields] = useState(\n record.account?.inventoryCustomFields\n );\n\n useEffect(() => {\n if (record.selectedCustomFields)\n setSelectedFields(record.selectedCustomFields);\n else if (record.account?.inventoryCustomFields)\n setSelectedFields(record.account.inventoryCustomFields);\n }, [record]);\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12} className={classes.arrayInputHeader}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n INBOUND INVENTORY:\n </Typography>\n <CustomFieldsButton\n form={form}\n accountFields={record.account?.inventoryCustomFields}\n selectedCustomFields={record.selectedCustomFields}\n selectedFields={selectedFields}\n setSelectedFields={setSelectedFields}\n />\n </Grid>\n <Grid item xs={12}>\n <ArrayInput\n source=\"inventories.items\"\n label={false}\n className={classes.arrayInput}\n >\n <SimpleFormIterator\n disableReordering={false}\n disableAdd={record.state === InboundState.COMPLETED}\n addButton={\n <utils.AddCatalogUploadButtons\n backPath={backPath}\n form={form}\n account={record.account}\n yardCommodity={formData.reloadYardCommodity}\n setCalcError={setCalcError}\n />\n }\n removeButton={\n <EditRemoveButton\n {...props}\n record={record}\n form={form}\n backPath={backPath}\n saving={saving}\n setSaving={setSaving}\n setCalcError={setCalcError}\n setWeightError={setWeightError}\n yardCommodity={yardCommodity}\n />\n }\n >\n <FormDataConsumer>\n {({\n scopedFormData, // The data for this item of the ArrayInput\n getSource, // Function to get the valid source inside an ArrayInput. Translates to \"inventories.items[].property\"\n ...rest\n }) =>\n scopedFormData && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid\n container\n item\n direction=\"column\"\n spacing={0}\n xs={11}\n >\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} lg={6}>\n <TextInput\n source={getSource(\"productName\")}\n label=\"Product Name\"\n variant=\"outlined\"\n fullWidth\n disabled={\n formData.state === InboundState.COMPLETED ||\n scopedFormData?.status !== InventoryStatus.NEW\n }\n validate={validateRequired}\n error={\n validateTallySheetRow(\n formData,\n scopedFormData\n ).productName\n }\n helperText={false}\n InputProps={{\n endAdornment: (\n <>\n {exceptionRenderer(scopedFormData)}\n {utils.getInfoBubble(\n formData,\n scopedFormData\n )}\n </>\n ),\n }}\n />\n </Grid>\n <Grid item xs={6} lg={3}>\n <NumberInput\n source={getSource(\"quantityShipped\")}\n label=\"Qty Advised\"\n variant=\"outlined\"\n fullWidth\n disabled={\n formData.state === InboundState.COMPLETED ||\n scopedFormData?.status !== InventoryStatus.NEW\n }\n min=\"0\"\n validate={validateQuantity}\n error={\n validateTallySheetRow(\n formData,\n scopedFormData\n ).quantityShipped ||\n validateTallyRowQty(scopedFormData).quantity\n }\n helperText={false}\n InputProps={{\n endAdornment: formData.totalUnits,\n }}\n // onChange={() => utils.handleInventoriesQty(form, setCalcError)}\n />\n </Grid>\n {scopedFormData?.status !== InventoryStatus.NEW && (\n <Grid item xs={6} lg={3}>\n <NumberInput\n source={getSource(\"quantityDelivered\")}\n label=\"Qty Received\"\n variant=\"outlined\"\n fullWidth\n disabled={\n formData.status ===\n InboundStatus.IN_TRANSIT ||\n formData.status === InboundStatus.ARRIVED ||\n formData.state === InboundState.COMPLETED ||\n scopedFormData?.status !==\n InventoryStatus.NEW\n }\n min=\"0\"\n required={isQuantityDeliveredRequired(\n formData,\n scopedFormData\n )}\n error={\n validateTallySheetRow(\n formData,\n scopedFormData\n ).quantityDelivered ||\n validateTallyRowQty(scopedFormData).quantity\n }\n helperText={false}\n />\n </Grid>\n )}\n {isInventoryFieldVisible(\n InventoryField.PCS,\n scopedFormData?.reloadYardCommodityId\n ) && (\n <Grid item xs={12} md={3}>\n <NumberInput\n source={getSource(\"pcs\")}\n label=\"Pieces / Unit\"\n variant=\"outlined\"\n fullWidth\n min=\"1\"\n placeholder={scopedFormData?.product?.pcs}\n InputLabelProps={{\n shrink:\n scopedFormData?.pcs != null ||\n scopedFormData?.product?.pcs != null,\n }}\n validate={validatePieces}\n disabled={\n scopedFormData?.status !==\n InventoryStatus.NEW\n }\n helperText={false}\n />\n </Grid>\n )}\n {showWeight(record.account, scopedFormData) &&\n scopedFormData?.status ===\n InventoryStatus.NEW && (\n <Grid item xs={12} md={3}>\n <NumberInput\n source={getSource(\"weight\")}\n label=\"Weight\"\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n validate={validateQuantity}\n helperText={false}\n InputProps={{\n endAdornment: `${utils.getWeightUnits(\n record.account,\n scopedFormData\n )}/${formData.totalUnits}`,\n }}\n />\n </Grid>\n )}\n <CustomFieldsTallySheet\n {...props}\n getSource={getSource}\n recordFields={scopedFormData?.customFields}\n accountFields={selectedFields}\n disabled={\n scopedFormData?.status !== InventoryStatus.NEW\n }\n header={false}\n width={3}\n />\n </Grid>\n </Grid>\n <Grid\n container\n item\n direction=\"column\"\n spacing={0}\n xs={1}\n className={classes.statusIcon}\n >\n <InventoryStatusIcon inventory={scopedFormData} />\n </Grid>\n </Grid>\n )\n }\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Total Load\n </Typography>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"totalQuantity\"\n label=\"Total Quantity\"\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n disabled\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <SelectInput\n source=\"totalUnits\"\n label=\"Inventory UOM\"\n variant=\"outlined\"\n fullWidth\n disabled={record.status === InboundStatus.RELEASED}\n initialValue=\"UNIT\"\n choices={getCommodityUnits(yardCommodity)}\n optionText={unitOptionRenderer}\n validate={validateRequired}\n onChange={() => utils.handleUnitChange(form, setCalcError)}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"billQuantity\"\n label=\"Billing Quantity\"\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n disabled={!formData.billUnits || record.invoiceId}\n validate={utils.validateBillQty}\n required={utils.isBillQtyRequired(formData)}\n helperText={calcError ? calcError : false}\n InputProps={{\n endAdornment: !utils.hasAllProducts(form, null) ? (\n <ProductLinkIcon />\n ) : null,\n }}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <SelectInput\n source=\"billUnits\"\n label=\"Billing UOM\"\n variant=\"outlined\"\n fullWidth\n disabled={record.invoiceId}\n choices={UnitOptions}\n optionText={unitOptionRenderer}\n allowEmpty\n onChange={() => utils.handleUnitChange(form, setCalcError)}\n />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst ShipmentTraceTab = ({ record, ...props }) => {\n const form = useForm();\n const [weightError, setWeightError] = useState(false);\n const [estNetWeight, setEstNetWeight] = useState(record.netWeight);\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"scheduledDateTime\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"notifyDateTime\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"placedDateTime\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"startDateTime\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"endDateTime\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"releaseDateTime\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"collectedDateTime\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n const handleNotifyTime = (value, formData) => {\n form.change(\"notifyDateTime\", value);\n if ((!value || value === \"\") && formData.placedDateTime) {\n form.change(\"placedDateTime\", value);\n if (formData.startDateTime) form.change(\"startDateTime\", value);\n if (formData.endDateTime) form.change(\"endDateTime\", value);\n if (\n formData.lotType === LotType.PERPETUAL &&\n formData.lotNumberOverride !== true\n )\n form.change(\"lotNumber\", formData.account.lotNumberPrefix + \"TBD\");\n }\n };\n\n const handlePlaceTime = (value, formData) => {\n form.change(\"placedDateTime\", value);\n if (!formData.notifyDateTime) form.change(\"notifyDateTime\", value);\n if (\n formData.lotType === LotType.PERPETUAL &&\n formData.lotNumberOverride !== true\n ) {\n form.change(\n \"lotNumber\",\n formData.account.lotNumberPrefix + utils.getPerpetualDate(value)\n );\n }\n if (!value || value === \"\") {\n if (formData.startDateTime) form.change(\"startDateTime\", value);\n if (formData.endDateTime) form.change(\"endDateTime\", value);\n }\n };\n\n const handleStartTime = (value) => {\n form.change(\"startDateTime\", value);\n\n if (!value || value === \"\") {\n form.change(\"endDateTime\", value);\n }\n };\n\n const handleEndTime = (value) => {\n form.change(\"endDateTime\", value);\n\n if (!value || value === \"\") {\n form.change(\"startDateTime\", value);\n }\n };\n\n const getActualGross = (formData) => {\n if (\n formData.tareWeight !== null &&\n formData.tareWeight >= 0 &&\n formData.ladenWeight >= 0 &&\n (formData.weightUnits || formData.scaleWeightUnits)\n ) {\n return `Gross Weight: ${formData.ladenWeight - formData.tareWeight} ${\n formData.weightUnits ? formData.weightUnits : formData.scaleWeightUnits\n }`;\n } else return false;\n };\n\n const handleScaleUnitsChange = (event, formData) => {\n setEstNetWeight(\n utils.calcNetWeight(formData, setWeightError, event.target.value)\n );\n };\n\n const getReleaseDateTimeHelperText = (formData) => {\n if (isTrack(record.areaId) && utils.hasInventoryCommitted(record)) {\n return \"Has inventory committed to a pending outbound.\";\n } else {\n return getHoursMinutesDuration(\n \"Cycle Time:\",\n formData.placedDateTime,\n formData.releaseDateTime\n );\n }\n };\n\n return (\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12} md={4}>\n <DateTimePicker\n label=\"Time Scheduled\"\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n fullWidth\n showTodayButton\n clearable\n value={\n !formData.scheduledDateTime\n ? null\n : formData.scheduledDateTime\n }\n format=\"MM/dd/yyyy hh:mm a\"\n onChange={(value) => form.change(\"scheduledDateTime\", value)}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <CreatedAtIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <DateTimePicker\n label=\"Time Notified\"\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n fullWidth\n disabled={\n formData.status === InboundStatus.RELEASED ||\n formData.placedDateTime\n }\n disableFuture\n showTodayButton\n clearable\n value={\n formData.notifyDateTime === \"\"\n ? null\n : formData.notifyDateTime\n }\n maxDate={formData.placedDateTime}\n maxDateMessage=\"Date should be before Placed Time\"\n format=\"MM/dd/yyyy hh:mm a\"\n onChange={(value) => handleNotifyTime(value, formData)}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <ArrivedAtIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n {record.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} md={4}>\n <TextInput\n source=\"originCarrier\"\n label=\"Origin Carrier\"\n variant=\"outlined\"\n fullWidth\n disabled={\n record.originCarrier &&\n record.status === InboundStatus.RELEASED\n }\n validate={validateOriginCarrier}\n required={isROriginCarrierRequired(formData)}\n helperText={false}\n />\n </Grid>\n )}\n {record.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} md={4}>\n <TextInput\n source=\"railCarNumber\"\n label=\"Trailer Number\"\n variant=\"outlined\"\n fullWidth\n disabled={\n record.railCarNumber &&\n record.status === InboundStatus.RELEASED\n }\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n validate={validateRailCarNumber}\n required={isRailcarNumberRequired(formData)}\n inputProps={{ style: { textTransform: \"uppercase\" } }}\n helperText={false}\n />\n </Grid>\n )}\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <DateTimePicker\n label=\"Time Placed\"\n disableFuture\n showTodayButton\n clearable\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n fullWidth\n disabled={\n formData.inventories?.items?.length === 0 ||\n formData.status === InboundStatus.RELEASED ||\n formData.startDateTime\n }\n value={\n formData.placedDateTime === \"\"\n ? null\n : formData.placedDateTime\n }\n minDate={\n !formData.notifyDateTime\n ? undefined\n : formData.notifyDateTime\n }\n minDateMessage=\"Date should be after Notified Time\"\n maxDate={formData.releaseDateTime}\n maxDateMessage=\"Date should be before Released Time\"\n format=\"MM/dd/yyyy hh:mm a\"\n onChange={(value) => handlePlaceTime(value, formData)}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <PlacedAtIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n {formData.carrierType === CarrierType.TRUCK && (\n <>\n <Grid item xs={12} md={4}>\n <NumberInput\n source=\"ladenWeight\"\n label=\"Laden Weight\"\n variant=\"outlined\"\n fullWidth\n disabled={record.invoiceId || !formData.placedDateTime}\n min=\"0\"\n validate={\n (record.status === InboundStatus.PLACED ||\n record.status === InboundStatus.RELEASED) &&\n formData.tareWeight\n ? validateLadenWeight\n : validateLoadedMinNum\n }\n helperText={false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">{`${\n formData.scaleWeightUnits || \"\"\n }`}</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n source=\"scaleWeightUnits\"\n label=\"Units\"\n variant=\"outlined\"\n fullWidth\n disabled={\n record.invoiceId ||\n formData.inventories?.items?.length === 0\n }\n choices={UnitWeightOptions}\n optionText={unitOptionRenderer}\n allowEmpty\n // defaultValue={Unit.CWT} -- removing to keep form pristine\n validate={\n formData.tareWeight || formData.ladenWeight\n ? validateRequired\n : undefined\n }\n onChange={(event) =>\n handleScaleUnitsChange(event, formData)\n }\n helperText={false}\n />\n </Grid>\n </>\n )}\n </Grid>\n <Grid item xs={12} md={4}>\n <DateTimePicker\n label=\"Unload Start Time\"\n fullWidth\n disableFuture\n showTodayButton\n clearable\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n disabled={\n !formData.startDateTime ||\n record.status === InboundStatus.RELEASED ||\n (isBulkArea(formData.areaId) &&\n record.state === InboundState.COMPLETED)\n }\n value={\n formData.startDateTime === \"\" ? null : formData.startDateTime\n }\n onChange={(value) => handleStartTime(value)}\n minDate={formData.arrivalDateTime}\n minDateMessage=\"Date should be after Placed Time\"\n format=\"MM/dd/yyyy hh:mm a\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <TimerIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <DateTimePicker\n label=\"Unload End Time\"\n fullWidth\n disableFuture\n showTodayButton\n clearable\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n disabled={\n !formData.endDateTime ||\n record.status === InboundStatus.RELEASED ||\n (isBulkArea(formData.areaId) &&\n record.state === InboundState.COMPLETED)\n }\n value={\n formData.endDateTime === \"\" ? null : formData.endDateTime\n }\n onChange={(value) => handleEndTime(value)}\n minDate={formData.startDateTime}\n minDateMessage=\"Date should be after Start Time\"\n format=\"MM/dd/yyyy hh:mm a\"\n helperText={getHoursMinutesDuration(\n \"Unload Time:\",\n formData.startDateTime,\n formData.endDateTime\n )}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <TimerOffIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <DateTimePicker\n label=\"Time Released\"\n disableFuture\n showTodayButton\n clearable\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n fullWidth\n // DO NOT CHANGE OR INVENTORY COUNTS WILL BE INCONSISTENT ON STATUS ROLLBACK !!!\n disabled={\n !formData.placedDateTime ||\n !formData.endDateTime ||\n formData.state !== InboundState.COMPLETED ||\n formData.status === InboundStatus.RELEASED ||\n (isTrack(record.area) &&\n utils.hasInventoryCommitted(record))\n }\n value={\n !formData.releaseDateTime || formData.releaseDateTime === \"\"\n ? null\n : formData.releaseDateTime\n }\n minDate={formData.placedDateTime}\n minDateMessage=\"Date should be after Placed Time\"\n format=\"MM/dd/yyyy hh:mm a\"\n onChange={(value) => form.change(\"releaseDateTime\", value)}\n helperText={getReleaseDateTimeHelperText(formData)}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <ReleasedAtIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n {formData.carrierType === CarrierType.TRUCK && (\n <>\n <Grid item xs={12} md={4}>\n <NumberInput\n source=\"tareWeight\"\n label=\"Tare Weight\"\n variant=\"outlined\"\n fullWidth\n disabled={\n record.invoiceId ||\n formData.state !== InboundState.COMPLETED\n }\n min=\"0\"\n validate={validateTareWeight}\n required={isTareWeightRequired(formData)}\n helperText={getActualGross(formData)}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">{`${\n formData.scaleWeightUnits || \"\"\n }`}</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextField\n label=\"Est. Net Weight\"\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n helperText={weightError ? weightError : false}\n value={estNetWeight}\n InputLabelProps={estNetWeight ? { shrink: true } : {}}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">{`${\n formData.scaleWeightUnits ||\n formData.weightUnits ||\n \"\"\n }`}</InputAdornment>\n ),\n }}\n />\n </Grid>\n </>\n )}\n </Grid>\n {record.carrierType === CarrierType.RAIL && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <DateTimePicker\n label=\"Time Collected\"\n disableFuture\n showTodayButton\n clearable\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n fullWidth\n // DO NOT CHANGE OR INVENTORY COUNTS WILL BE INCONSISTENT ON STATUS ROLLBACK !!!\n disabled={\n !formData.releaseDateTime ||\n formData.releaseDateTime === \"\"\n }\n value={\n !formData.collectedDateTime ||\n formData.collectedDateTime === \"\"\n ? null\n : formData.collectedDateTime\n }\n minDate={formData.releaseDateTime}\n minDateMessage=\"Date should be after Released Time\"\n format=\"MM/dd/yyyy hh:mm a\"\n onChange={(value) =>\n form.change(\"collectedDateTime\", value)\n }\n helperText={\n formData.collectedDateTime\n ? `Demmurage Days: ${\n formData.releaseDateTime\n ? differenceInDays(\n new Date(formData.releaseDateTime),\n new Date(formData.notifyDateTime)\n )\n : 0\n }`\n : false\n }\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <CollectedAtIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n </Grid>\n )}\n </Grid>\n )}\n </FormDataConsumer>\n </MuiPickersUtilsProvider>\n );\n};\n\nconst EditToolbar = (props) => {\n const classes = useStyles();\n const [isSaving, setIsSaving] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n\n return (\n <Toolbar style={{ justifyContent: \"space-between\" }}>\n <Backdrop className={classes.backdrop} open={isSaving || isDeleting}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <DialogSaveButton\n {...props}\n validateTallySheetSaved={validateTallySheetSaved}\n validateTallyQty={validateTallyQty}\n isSaving={isSaving}\n setIsSaving={setIsSaving}\n isDeleting={isDeleting}\n />\n <DeepDeleteButton\n {...props}\n isSaving={isSaving}\n isDeleting={isDeleting}\n setIsDeleting={setIsDeleting}\n />\n </Toolbar>\n );\n};\n\nexport const InboundEdit = (props) => {\n const isMedium = useMediaQuery((theme) => theme.breakpoints.up(\"md\"));\n const { record } = useEditController(props);\n const [receiptFile, setReceiptFile] = useState();\n const [receiptNumber, setReceiptNumber] = useState();\n const [exceptions, setExceptions] = useState({});\n const [allSealsValid, SetAllSealsValid] = useState(false);\n const [yardCommodity, setYardCommodity] = useState(\n record?.reloadYardCommodity\n );\n const backPath = getBackPath(props);\n\n useEffect(() => {\n if (record) {\n setExceptions({\n hasException: record.hasException,\n unsafeShipment: record.unsafeShipment,\n unsafeShipmentNote: record.unsafeShipmentNote,\n brokenSeal: record.brokenSeal,\n brokenSealNote: record.brokenSealNote,\n otherException: record.otherException,\n otherExceptionNote: record.otherExceptionNote,\n });\n setYardCommodity(record.reloadYardCommodity);\n }\n }, [record]);\n\n if (!record) return <Loading />;\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Inbound\" />}\n mutationMode=\"pessimistic\"\n actions={\n <InboundEditActions\n {...props}\n backPath={backPath}\n setReceiptFile={setReceiptFile}\n setReceiptNumber={setReceiptNumber}\n exceptions={exceptions}\n setExceptions={setExceptions}\n allSealsValid={allSealsValid}\n />\n }\n aside={\n <InboundAside\n {...props}\n backPath={backPath}\n record={record}\n exceptions={exceptions}\n />\n }\n >\n <TabbedForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={\n <EditToolbar\n {...props}\n backPath={backPath}\n record={record}\n validateTallySheetSaved={validateTallySheetSaved}\n validateTallyQty={validateTallyQty}\n />\n }\n validate={(values) => validateInboundEdit(record, values)}\n >\n <FormTab path={\"\"} label=\"Inbound Setup\">\n <ShipmentSetupTab\n {...props}\n record={record}\n backPath={backPath}\n receiptFile={receiptFile}\n receiptNumber={receiptNumber}\n exceptions={exceptions}\n yardCommodity={yardCommodity}\n setYardCommodity={setYardCommodity}\n SetAllSealsValid={SetAllSealsValid}\n />\n </FormTab>\n <FormTab path={\"tallySheet\"} label=\"Tally Sheet\">\n {/* Must pass ...props or props not propagated to InventoryEditButton */}\n <TallySheetTab\n {...props}\n backPath={backPath}\n record={record}\n yardCommodity={yardCommodity}\n />\n </FormTab>\n <FormTab\n path={\"checklist\"}\n label={\n <span>\n Checklist\n <BetaBadge />\n </span>\n }\n >\n <ChecklistForm\n {...props}\n account={record.account}\n yardCommodity={yardCommodity}\n isDisabled={record.status === InboundStatus.RELEASED}\n />\n </FormTab>\n <FormTab path={\"dispatch\"} label=\"Dispatch\">\n <ShipmentTraceTab {...props} record={record} />\n </FormTab>\n <FormTab path={\"notes\"} label=\"Notes\">\n <NotesTab />\n </FormTab>\n {isMedium && (\n <FormTab path={\"historyLog\"} label=\"History Log\">\n <HistoryTab />\n </FormTab>\n )}\n </TabbedForm>\n </Edit>\n );\n};\n","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { Grid, Typography, useMediaQuery } from \"@material-ui/core\";\n\nimport {\n ArrayField,\n DateField,\n FunctionField,\n Labeled,\n NumberField,\n ReferenceField,\n SelectField,\n Show,\n Tab,\n TabbedShowLayout,\n TextField,\n TopToolbar,\n useShowController,\n} from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport {\n CustomField,\n CustomFieldsMobile,\n} from \"../../../components/common/CustomFields\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HistoryTab } from \"../../../components/common/HistoryTab\";\nimport { NotesTabShow } from \"../../../components/common/NotesTab\";\nimport { ShowButton } from \"../../../components/common/ShowButton\";\nimport CustomizableDatagrid from \"../../../components/common/ra-customizable-datagrid\";\nimport { SendPOSDialogButton } from \"../../../components/common/SendPOSDialogButton\";\n\nimport {\n CarrierType,\n CarrierTypes,\n InboundStatus,\n LotTypes,\n} from \"../../../utils/constants\";\nimport { deepRedirect, getBackPath } from \"../../../utils/utils\";\n\nimport { InboundAside } from \"./InboundAside\";\nimport * as utils from \"./InboundUtils\";\n\nconst ShipmentSetupTab = ({ isMedium, ...props }) => {\n const { record } = props;\n\n return (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Account\">\n <TextField source=\"accountName\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Origin\">\n <TextField source=\"shipFrom\" />\n </Labeled>\n </Grid>\n </Grid>\n <Grid container item direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Load Type\">\n <ReferenceField\n {...props}\n source=\"reloadYardCommodityId\"\n reference=\"reloadYardCommoditys\"\n link={false}\n >\n <TextField source=\"commodity.name\" />\n </ReferenceField>\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Carrier Type\">\n <SelectField source=\"carrierType\" choices={CarrierTypes} />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Origin Carrier\">\n <TextField source=\"originCarrier\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled\n label={\n record.carrierType === CarrierType.RAIL\n ? \"Railcar Number\"\n : \"Trailer Number\"\n }\n >\n <TextField source=\"railCarNumber\" />\n </Labeled>\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"PO Number\">\n <TextField source=\"poNumber\" />\n </Labeled>\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Default Area\">\n <ReferenceField\n {...props}\n source=\"areaId\"\n reference=\"areas\"\n link={false}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Default Zone\">\n <ReferenceField\n {...props}\n source=\"zoneId\"\n reference=\"zones\"\n link={false}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n </Labeled>\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Lot Type\">\n <SelectField source=\"lotType\" choices={LotTypes} />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Lot Number\">\n <TextField source=\"lotNumber\" />\n </Labeled>\n </Grid>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Labeled label=\"Special Instructions\">\n <TextField source=\"instructions\" multiline />\n </Labeled>\n </Grid>\n </Grid>\n {isMedium && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={6}>\n <Labeled label=\"ATTACHMENTS\">\n <FileField\n source=\"attachments\"\n src=\"src\"\n title=\"title\"\n target=\"_blank\"\n />\n </Labeled>\n </Grid>\n <Grid item xs={6}>\n <Labeled label=\"RECEIPT FILE\">\n <FileField\n source=\"receiptFile\"\n src=\"src\"\n title=\"title\"\n target=\"_blank\"\n />\n </Labeled>\n </Grid>\n </Grid>\n )}\n <CustomFieldsMobile\n recordFields={record.customFields}\n accountFields={record.account?.inboundCustomFields}\n width={6}\n />\n <Grid container>\n <Grid item xs={12}></Grid>  {\" \"}\n </Grid>\n </Grid>\n );\n};\n\nconst TallySheetTab = (props) => {\n const { history, backPath, record } = props;\n const account = record.account;\n\n const accountFields =\n account?.inventoryCustomFields?.length > 0\n ? account.inventoryCustomFields\n : [];\n const customGridFields = accountFields\n ? accountFields.map((field, index) => {\n return (\n <CustomField\n source={`customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={true}\n />\n );\n })\n : [];\n\n const openInventory = (jsonRecord) => {\n const jsonObject = JSON.parse(jsonRecord);\n const toPath = `/inventories/${jsonObject.id}/show`;\n deepRedirect(history, toPath, props.location.pathname, backPath, {\n inboundRecord: record,\n });\n };\n\n return (\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12}>\n <Labeled label=\"INBOUND INVENTORY\" fullWidth>\n <ArrayField source=\"inventories.items\" basePath=\"/inventories\">\n <CustomizableDatagrid\n hasBulkActions={false}\n rowClick={openInventory}\n storageProp={`InboundShoww_${account?.id}`}\n defaultColumns={[\n \"productName\",\n \"quantityShipped\",\n \"quantityDelivered\",\n ]}\n >\n {[\n <TextField source=\"productName\" label=\"Product Name\" />,\n <NumberField source=\"quantityShipped\" label=\"Qty. Advised\" />,\n <NumberField\n source=\"quantityDelivered\"\n label=\"Qty. Received\"\n />,\n ...customGridFields,\n <ShowButton {...props} state={{ inboundRecord: record }} />,\n ]}\n </CustomizableDatagrid>\n </ArrayField>\n </Labeled>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n TOTAL LOAD\n </Typography>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={6} md={3}>\n <Labeled label=\"Total Quantity\">\n <TextField source=\"totalQuantity\" />\n </Labeled>\n </Grid>\n <Grid item xs={6} md={3}>\n <Labeled label=\"Inventory Units\">\n <TextField source=\"totalUnits\" />\n </Labeled>\n </Grid>\n <Grid item xs={6} md={3}>\n <Labeled label=\"Billing Quantity\">\n <TextField source=\"billQuantity\" />\n </Labeled>\n </Grid>\n <Grid item xs={6} md={3}>\n <Labeled label=\"Billing Units\">\n <TextField source=\"billUnits\" />\n </Labeled>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n );\n};\n\nconst grossRender = (record) => {\n if (\n record.tareWeight !== null &&\n record.tareWeight >= 0 &&\n record.ladenWeight >= 0\n ) {\n return `${(record.ladenWeight - record.tareWeight).toLocaleString()} ${\n record.weightUnits ? record.weightUnits : record.scaleWeightUnits\n }`;\n } else\n return `0 ${\n record.weightUnits ? record.weightUnits : record.scaleWeightUnits\n }`;\n};\n\nconst ShipmentTraceTab = (props) => {\n const { record } = props;\n\n return (\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Scheduled\">\n <DateField source=\"scheduledDateTime\" showTime />\n </Labeled>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Notified\">\n <DateField source=\"notifyDateTime\" showTime />\n </Labeled>\n </Grid>\n {record.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} md={4}>\n <Labeled label=\"Origin Carrier\">\n <TextField source=\"originCarrier\" />\n </Labeled>\n </Grid>\n )}\n {record.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} md={4}>\n <Labeled label=\"Trailer Number\">\n <TextField source=\"railCarNumber\" />\n </Labeled>\n </Grid>\n )}\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Placed\">\n <DateField source=\"placedDateTime\" showTime />\n </Labeled>\n </Grid>\n {record.carrierType === CarrierType.TRUCK && (\n <>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Laden Weight\">\n <NumberField source=\"ladenWeight\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Units\">\n <TextField source=\"scaleWeightUnits\" />\n </Labeled>\n </Grid>\n </>\n )}\n </Grid>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Unload Start Time\">\n <DateField source=\"startDateTime\" showTime />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Unload End Time\">\n <DateField source=\"endDateTime\" showTime />\n </Labeled>\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Released\">\n <DateField source=\"releaseDateTime\" showTime />\n </Labeled>\n </Grid>\n {record.carrierType === CarrierType.TRUCK && (\n <>\n <Grid item xs={12} md={2}>\n <Labeled label=\"Tare Weight\">\n <NumberField source=\"tareWeight\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={2}>\n <Labeled label=\"Gross Weight\">\n <FunctionField render={grossRender} />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={2}>\n <Labeled label=\"Net Weight\">\n <NumberField source=\"netWeight\" />\n </Labeled>\n </Grid>\n </>\n )}\n </Grid>\n {record.carrierType === CarrierType.RAIL && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Collected\">\n <DateField source=\"collectedDateTime\" showTime />\n </Labeled>\n </Grid>\n </Grid>\n )}\n </Grid>\n );\n};\n\nconst ShowActions = ({ data, ...props }) => (\n <TopToolbar>\n {data?.status === InboundStatus.RELEASED && (\n <SendPOSDialogButton\n label=\"POD\"\n title=\"Send POD\"\n record={data}\n email={data.account?.podEmail}\n enclosePhotosDefault={data.account?.podPhotos}\n encloseDocsDefault={data.account?.podAttachments}\n handleSend={utils.handleSendPOD}\n />\n )}\n <BackButton {...props} />\n </TopToolbar>\n);\n\nexport const InboundShow = (props) => {\n const isMedium = useMediaQuery((theme) => theme.breakpoints.up(\"md\"));\n const { record } = useShowController(props);\n const backPath = getBackPath(props);\n const history = useHistory();\n const exceptions = !record\n ? {}\n : {\n hasException: record.hasException,\n unsafeShipment: record.unsafeShipment,\n unsafeShipmentNote: record.unsafeShipmentNote,\n brokenSeal: record.brokenSeal,\n brokenSealNote: record.brokenSealNote,\n otherException: record.otherException,\n otherExceptionNote: record.otherExceptionNote,\n };\n\n return (\n <Show\n {...props}\n title={<ForceTitle title=\"View Inbound\" />}\n actions={<ShowActions {...props} backPath={backPath} />}\n aside={\n <InboundAside\n {...props}\n history={history}\n backPath={backPath}\n exceptions={exceptions}\n />\n }\n >\n <TabbedShowLayout>\n <Tab label=\"Inbound Setup\">\n <ShipmentSetupTab {...props} isMedium={isMedium} />\n </Tab>\n <Tab label=\"Tally Sheet\">\n <TallySheetTab {...props} history={history} backPath={backPath} />\n </Tab>\n <Tab label=\"Dispatch\">\n <ShipmentTraceTab />\n </Tab>\n <Tab label=\"Notes\">\n <NotesTabShow />\n </Tab>\n <Tab label=\"History Log\">\n <HistoryTab />\n </Tab>\n </TabbedShowLayout>\n </Show>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getAccount } from \"../../../graphql/account/custom-queries\";\nimport { getInvoiceCounter } from \"../../../graphql/reloadyard/custom-queries\";\nimport { getOutboundShipmentForInvoice } from \"../../../graphql/outbound/custom-queries\";\n\nimport { Backdrop, CircularProgress } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { Button, useNotify, useRedirect } from \"react-admin\";\n\nimport {\n isAuthorized,\n isSubscriptionDisabled,\n logError,\n} from \"../../../utils/appUtils\";\nimport {\n AclType,\n OutboundStatus,\n UnitWeightOptions,\n} from \"../../../utils/constants\";\nimport { AddAllIcon, AddIcon, InvoiceIcon } from \"../../../components/common\";\nimport {\n createLambdaInvoiceServices,\n createLambdaTransform,\n setupShipmentInvoice,\n updateLambdaOutbound,\n} from \"../invoices/InvoiceUtils\";\nimport { deepRedirect } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: \"#fff\",\n },\n}));\n\nconst isInvoicable = (record) =>\n record.status === OutboundStatus.RELEASED &&\n record.totalQuantity &&\n record.totalUnits &&\n ((record.billQuantity && record.billUnits) ||\n (UnitWeightOptions.some((unitOpt) => unitOpt.id === record.billUnits) &&\n record.tareWeight &&\n record.ladenWeight &&\n record.weightUnits));\n\nexport const CreateInvoiceButton = ({ backPath, record, ...props }) => {\n const history = useHistory();\n const isDisabled = isSubscriptionDisabled();\n\n if (record.id === \"fae4f36d-5ed6-48ef-9a5b-cff90f82f791\") debugger;\n\n const handleCreate = (event) => {\n event.stopPropagation();\n event.preventDefault();\n const billingAccountId = record.billToAccountId\n ? record.billToAccountId\n : record.accountId;\n deepRedirect(\n history,\n \"/invoices/create\",\n props.location.pathname,\n backPath,\n {\n record: {\n accountId: billingAccountId,\n outboundShipment: record,\n },\n }\n );\n };\n\n const handleOpen = (event) => {\n debugger;\n event.stopPropagation();\n event.preventDefault();\n deepRedirect(\n history,\n `/invoices/${record.invoiceId}/show`,\n props.location.pathname,\n backPath,\n {}\n );\n };\n\n if (!record || !isInvoicable(record) || !isAuthorized(AclType.INVOICES))\n return null;\n if (record.invoiceId && record?.invoice) {\n const total = record?.invoice?.total.toLocaleString(\"en-US\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n\n return (\n <Button label={total} color=\"primary\" onClick={handleOpen}>\n <InvoiceIcon />\n </Button>\n );\n }\n return (\n <Button\n label=\"Invoice\"\n color=\"primary\"\n onClick={handleCreate}\n disabled={isDisabled}\n >\n <AddIcon />\n </Button>\n );\n};\n\nexport const BulkCreateInvoiceButton = ({ record, selectedIds, ...props }) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const classes = useStyles();\n\n const [saving, setSaving] = useState();\n\n const outboundMap = {};\n const accountMap = {};\n const isDisabled = isSubscriptionDisabled();\n\n const handleCreate = async (event) => {\n try {\n event.stopPropagation();\n event.preventDefault();\n setSaving(true);\n debugger;\n\n let promiseList = [];\n selectedIds.forEach((outboundId) => {\n promiseList.push(\n API.graphql(\n graphqlOperation(getOutboundShipmentForInvoice, { id: outboundId })\n )\n );\n });\n let results = await Promise.all(promiseList);\n results.forEach((res) => {\n outboundMap[res.data.getOutboundShipment.id] =\n res.data.getOutboundShipment;\n });\n\n promiseList = [];\n Object.values(outboundMap).forEach((outbound) => {\n const billingAccountId = outbound.billToAccountId\n ? outbound.billToAccountId\n : outbound.accountId;\n if (!accountMap[billingAccountId])\n promiseList.push(\n API.graphql(graphqlOperation(getAccount, { id: billingAccountId }))\n );\n });\n results = await Promise.all(promiseList);\n results.forEach((res) => {\n accountMap[res.data.getAccount.id] = res.data.getAccount;\n });\n\n const result = await API.graphql(\n graphqlOperation(getInvoiceCounter, {\n id: window.appUser?.reloadYardId,\n })\n );\n const prefix = result.data.getReloadYard.invoiceNumberPrefix;\n let counter = result.data.getReloadYard.invoiceCounter;\n\n const invoiceCreateList = [];\n const invoiceServiceCreateMap = {};\n const outboundUpdateMap = {};\n let reloadYardUpdateInput = null;\n\n selectedIds.forEach((outboundId) => {\n const outbound = outboundMap[outboundId];\n if (isInvoicable(outbound)) {\n counter = counter + 1;\n const billingAccountId = outbound.billToAccountId\n ? outbound.billToAccountId\n : outbound.accountId;\n let invoiceData = setupShipmentInvoice(\n accountMap[billingAccountId],\n null,\n outbound\n );\n const invoiceInput = createLambdaTransform(\n invoiceData,\n prefix,\n counter\n );\n invoiceCreateList.push(invoiceInput);\n\n const invoiceServiceInputs = createLambdaInvoiceServices(invoiceData);\n invoiceServiceCreateMap[invoiceData.id] = invoiceServiceInputs;\n debugger;\n\n const outboundUpdateInput = updateLambdaOutbound(invoiceData);\n outboundUpdateMap[invoiceData.id] = outboundUpdateInput;\n }\n });\n\n debugger;\n if (counter !== result.data.getReloadYard.invoiceCounter) {\n reloadYardUpdateInput = {\n id: result.data.getReloadYard.id,\n active: result.data.getReloadYard.active,\n name: result.data.getReloadYard.name,\n invoiceCounter: counter,\n };\n }\n\n const response = await API.post(\"transREST\", \"/invoiceCreateBulk\", {\n body: {\n invoiceCreateList: invoiceCreateList,\n invoiceServiceCreateMap: invoiceServiceCreateMap,\n inboundUpdateMap: null,\n outboundUpdateMap: outboundUpdateMap,\n reloadYardUpdateInput: reloadYardUpdateInput,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n if (response.error) throw response.error;\n\n notify(\"Invoices created successfully\");\n redirect(\"/invoices\");\n } catch (err) {\n logError(\n \"outboundShipment:BulkCreateInvoiceButton:handleCreate\",\n err,\n notify,\n redirect\n );\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <>\n <Backdrop className={classes.backdrop} open={saving}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Button\n label=\"Invoice\"\n color=\"default\"\n onClick={handleCreate}\n disabled={isDisabled}\n >\n <AddAllIcon />\n </Button>\n </>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { differenceInDays } from \"date-fns\";\nimport DateFnsUtils from \"@date-io/date-fns\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getOutboundShipment } from \"../../../graphql/outbound/custom-queries\";\n\nimport {\n Loading,\n SimpleForm,\n Toolbar,\n useNotify,\n useRefresh,\n Button,\n useRedirect,\n} from \"react-admin\";\n\nimport { Typography, IconButton } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { MuiPickersUtilsProvider, DateTimePicker } from \"@material-ui/pickers\";\n\nimport {\n CarrierType,\n NoteType,\n OutboundStatus,\n OutboundState,\n} from \"../../../utils/constants\";\nimport {\n ArrivedAtIcon,\n CancelIcon,\n CloseIcon,\n PlacedAtIcon,\n ReleasedAtIcon,\n SaveIcon,\n} from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { getLogState } from \"../../../utils/utils\";\nimport * as utils from \"../../../managerApp/resources/outboundShipments/OutboundUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n paddingTop: theme.spacing(4),\n },\n title: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n margin: theme.spacing(2),\n marginBottom: 0,\n },\n form: {\n [theme.breakpoints.up(\"xs\")]: {\n width: 340,\n },\n [theme.breakpoints.down(\"xs\")]: {\n width: \"100vw\",\n marginTop: -30,\n },\n },\n}));\n\nconst updateOutboundStatus = async (\n record,\n newStatus,\n newValue,\n notify,\n redirect,\n refresh,\n setDrawerOpen,\n setSaving\n) => {\n const updateDate = new Date().toISOString();\n const historyNotes = [];\n debugger;\n\n try {\n let response = await API.graphql(\n graphqlOperation(getOutboundShipment, { id: record.id })\n );\n const outbound = response.data.getOutboundShipment;\n\n if (newStatus === OutboundStatus.RELEASED && outbound.account?.posEmail) {\n utils\n .emailPOS(\n outbound,\n outbound.account?.posEmail,\n null,\n outbound.account?.posPhotos,\n outbound.account?.posAttachments,\n notify\n )\n .catch((error) => {\n logError(\n \"outboundShipment:AdvanceButton:updateOutboundStatus:emailPOS\",\n error,\n false\n );\n });\n\n historyNotes.push({\n text: `POS sent to: ${outbound.account?.posEmail}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.GENERIC,\n });\n }\n\n historyNotes.push({\n text: `Shipment advanced | status: ${newStatus} ${getLogState(\n outbound.state\n )}`,\n by: window.appUser?.fullName,\n date: updateDate,\n type: NoteType.SHIPMENT,\n });\n const outboundUpdateInput = {\n ...outbound,\n status: newStatus,\n endDateTime:\n newStatus === OutboundStatus.RELEASED &&\n (!outbound.endDateTime || outbound.endDateTime === \"\")\n ? newValue\n : outbound.endDateTime,\n arrivalDateTime:\n newStatus === OutboundStatus.ARRIVED || outbound.arrivalDateTime === \"\"\n ? newValue\n : outbound.arrivalDateTime,\n departureDateTime:\n newStatus === OutboundStatus.RELEASED\n ? newValue\n : outbound.departureDateTime,\n history: [...outbound.history, ...historyNotes],\n updatedAt: updateDate,\n };\n\n if (\n newStatus === OutboundStatus.RELEASED &&\n outbound.carrierType === CarrierType.RAIL\n ) {\n outboundUpdateInput.daysOnDemurrageClock = differenceInDays(\n new Date(outboundUpdateInput.departureDateTime),\n new Date(outboundUpdateInput.arrivalDateTime)\n );\n } else outboundUpdateInput.daysOnDemurrageClock = 0;\n\n const isAdvance = true;\n const isRollback = false;\n response = await utils.updateLambdaOutbound(\n record,\n outboundUpdateInput,\n isAdvance,\n isRollback\n );\n if (response.error) throw response.error;\n\n notify(\"Outbound updated successfully\");\n refresh();\n } catch (err) {\n logError(\n \"outboundShipment:AdvanceButton:updateOutboundStatus\",\n err,\n notify,\n redirect\n );\n } finally {\n setDrawerOpen(false);\n setSaving(false);\n refresh();\n }\n};\n\nexport const ConfirmationDrawer = (props) => {\n const classes = useStyles();\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const [saving, setSaving] = useState(false);\n const { record, newStatus, setDrawerOpen } = props;\n let title = null;\n let target = null;\n\n if (record && newStatus === OutboundStatus.ARRIVED) {\n title = \"Time Arrived\";\n target = record.notifyDateTime;\n } else if (record && newStatus === OutboundStatus.RELEASED) {\n title = \"Time Released\";\n target = record.releaseDateTime;\n }\n if (!target) target = new Date();\n const [value, setValue] = useState(target);\n\n const handleCancel = () => {\n setDrawerOpen(false);\n };\n\n const handleSave = () => {\n setSaving(true);\n const dateString = typeof value === \"string\" ? value : value.toISOString();\n if (value)\n updateOutboundStatus(\n record,\n newStatus,\n dateString,\n notify,\n redirect,\n refresh,\n setDrawerOpen,\n setSaving\n );\n };\n\n const DrawerToolbar = (props) => (\n <Toolbar style={{ justifyContent: \"space-between\" }} {...props}>\n <Button\n label=\"Save\"\n variant=\"contained\"\n color=\"primary\"\n onClick={handleSave}\n >\n <SaveIcon />\n </Button>\n <Button label=\"Cancel\" color=\"secondary\" autoFocus onClick={handleCancel}>\n <CancelIcon />\n </Button>\n </Toolbar>\n );\n\n if (!record || saving) return <Loading />;\n return (\n <div className={classes.root}>\n <div className={classes.title}>\n <Typography variant=\"h6\">{title}</Typography>\n <IconButton onClick={handleCancel}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </div>\n <SimpleForm\n record={record}\n redirect={false}\n toolbar={<DrawerToolbar />}\n className={classes.form}\n >\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <DateTimePicker\n value={value}\n minDate={\n newStatus === OutboundStatus.RELEASED\n ? record.endDateTime\n : newStatus === OutboundStatus.PLACED && record.arrivalDateTime\n ? record.arrivalDateTime\n : undefined\n }\n onChange={setValue}\n format=\"MM/dd/yyyy hh:mm a\"\n disableFuture\n inputVariant=\"outlined\"\n variant=\"static\"\n />\n </MuiPickersUtilsProvider>\n </SimpleForm>\n </div>\n );\n};\n\nexport const AdvanceButton = ({ record, newStatus, buttonLabel, ...rest }) => {\n const redirect = useRedirect();\n const { isDrawerOpen, setDrawerOpen, setAdvanceRecord, setAdvanceStatus } =\n rest;\n let isDisabled = false;\n let buttonIcon = <ArrivedAtIcon />;\n\n if (!record) return null;\n else if (newStatus === OutboundStatus.ARRIVED) {\n buttonIcon = <PlacedAtIcon />;\n } else if (newStatus === OutboundStatus.RELEASED) {\n debugger;\n buttonIcon = <ReleasedAtIcon />;\n isDisabled = record.state !== OutboundState.COMPLETED;\n }\n\n const handleClick = (event) => {\n event.stopPropagation();\n event.preventDefault();\n\n if (record.carrierType === CarrierType.TRUCK) {\n redirect(`outboundShipments/${record.id}/dispatch`);\n } else {\n setAdvanceStatus(newStatus);\n setAdvanceRecord(record);\n setDrawerOpen(!isDrawerOpen);\n }\n };\n\n return (\n <Button\n label={buttonLabel}\n color=\"primary\"\n onClick={handleClick}\n disabled={isDisabled}\n >\n {buttonIcon}\n </Button>\n );\n};\n","import { downloadCSV } from \"ra-core\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n FilePaths,\n Orientations,\n OutboundStatus,\n} from \"../../../utils/constants\";\nimport { buildHeader } from \"../../../utils/exportsUtils\";\nimport {\n generateAndDownloadPdf,\n generateFileName,\n} from \"../../../utils/fileUtils\";\nimport jsonExport from \"jsonexport/dist\";\nimport {\n exportCustomField,\n formatCurrency,\n formatDate,\n getFormattedStartAndEndDate,\n} from \"../../../utils/utils\";\n\nexport const outboundExportPdf = async (\n data,\n inputStartDate,\n inputEndDate,\n notify,\n filter\n) => {\n try {\n const reloadYardId = window.appUser?.reloadYardId;\n\n const { formattedStartDate, formattedEndDate } =\n getFormattedStartAndEndDate(\n data,\n inputStartDate,\n inputEndDate,\n \"endDateTime\"\n );\n\n const items = data.map(\n ({\n poNumber = \"--\",\n shipTo,\n pickupNumber = \"--\",\n bolNumber = \"--\",\n endDateTime,\n invoice,\n carrier = \"--\",\n accountName = \"--\",\n }) => {\n const consignee = shipTo?.name || \"--\";\n const invoiceNumber = invoice?.invoiceNumber || \"--\";\n const shipDate = endDateTime ? formatDate(new Date(endDateTime)) : \"--\";\n const total = invoice?.total ? formatCurrency(invoice.total) : \"--\";\n const amountBilled = invoice?.total;\n\n return {\n orderNumber: poNumber,\n accountName,\n consignee,\n pickupNumber,\n invoiceNumber,\n carrier,\n bolNumber,\n shipDate,\n total,\n amountBilled,\n };\n }\n );\n\n // Calculate display flags\n const showAmounts =\n filter?.outboundShipmentByReloadYardByStatusByDates\n ?.statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime\n ?.beginsWith?.status === OutboundStatus.RELEASED ||\n filter?.searchOutboundShipments?.status?.eq === OutboundStatus.RELEASED;\n\n const showShipDateColumn = !items.every(\n ({ shipDate }) => shipDate === \"--\"\n );\n\n // Calculate totals\n const totalAmountBilled = items.reduce(\n (sum, { amountBilled }) => sum + (amountBilled || 0),\n 0\n );\n\n // Generate file names\n const fileName = generateFileName({ resource: \"outbound\", ext: \"pdf\" });\n const downloadName = generateFileName({\n resource: \"outbound\",\n ext: \"pdf\",\n includeDate: true,\n });\n\n // Build columns array\n const columns = [\n { label: \"Order #\", source: \"orderNumber\" },\n { label: \"Consignee\", source: \"consignee\" },\n { label: \"Pickup #\", source: \"pickupNumber\" },\n { label: \"Carrier\", source: \"carrier\" },\n { label: \"BOL #\", source: \"bolNumber\" },\n ];\n\n if (showShipDateColumn) {\n columns.push({ label: \"Shipped\", source: \"shipDate\" });\n }\n\n if (showAmounts) {\n columns.push(\n { label: \"Invoice #\", source: \"invoiceNumber\" },\n { label: \"Invoiced\", source: \"total\" }\n );\n }\n\n if (!filter?.accountId?.eq) {\n columns.unshift({ label: \"Customer\", source: \"accountName\" });\n }\n\n // Build header\n const header = buildHeader(\n data,\n formattedStartDate,\n formattedEndDate,\n filter\n );\n\n // Build footer\n const footer = [\n {\n label: \"Total Loads\",\n value: data.length,\n },\n ];\n\n if (showAmounts) {\n footer.unshift({\n label: \"Total Invoiced\",\n value: formatCurrency(totalAmountBilled) || \"\",\n });\n }\n\n // Generate the PDF report\n const templateKey = `${FilePaths.TEMPLATES_PDF}/${FilePaths.TEMPLATE_REPORT}`;\n const outputFileKey = `${reloadYardId}/${reloadYardId}/${FilePaths.INVENTORY}/${fileName}`;\n\n await generateAndDownloadPdf({\n templateKey,\n outputFileKey,\n downloadName,\n data: {\n metaData: {\n orientation: Orientations.PORTRAIT,\n currentDate: new Date().toLocaleString(),\n },\n content: {\n header,\n title: \"OUTBOUND LOAD REPORT\",\n table: {\n columns,\n items,\n },\n footer,\n },\n },\n });\n } catch (err) {\n logError(\"outbound:exportPdf\", err, notify);\n }\n};\n\nexport const outboundExportCsv = (outbounds) => {\n const customHeaderMap = new Map();\n debugger;\n const outboundsForExport = outbounds.map((outbound) => {\n const outboundForExport = { ...outbound };\n\n if (outbound.shipmentLineItems.items) {\n outboundForExport.pickList = [];\n\n outbound.shipmentLineItems.items.forEach((lineItem) => {\n lineItem.inventoryItems.items.forEach((inventoryItem) => {\n const exportlineItem = {\n inventoryId: lineItem.inventoryId,\n productCode: lineItem.inventory.productCode,\n productName: lineItem.inventory.productName,\n lotNumber: lineItem.lotNumber,\n quantityOutbound: lineItem.totalQuantityToPick,\n units: outbound.totalUnits,\n location: inventoryItem.inventoryItem.locationFullName,\n quantityOnHand: inventoryItem.inventoryItem.quantityOnHand,\n };\n\n outboundForExport.pickList.push(exportlineItem);\n });\n });\n }\n delete outboundForExport.shipmentLineItems;\n\n if (outbound.customFields?.length > 0) {\n debugger;\n outbound.customFields.forEach((field) => {\n exportCustomField(field, outboundForExport, customHeaderMap);\n });\n }\n delete outboundForExport.customFields;\n\n delete outboundForExport.account;\n delete outboundForExport.assignedTo;\n delete outboundForExport.bolFile;\n delete outboundForExport.createdAt;\n delete outboundForExport.createDateTime;\n delete outboundForExport.daysOnDemurrageClock;\n delete outboundForExport.didTarp;\n delete outboundForExport.endDateTime;\n delete outboundForExport.history;\n delete outboundForExport.invoiceId;\n delete outboundForExport.mustTarp;\n delete outboundForExport.reloadYardId;\n delete outboundForExport.startDateTime;\n delete outboundForExport.updatedAt;\n debugger;\n\n return outboundForExport;\n });\n\n jsonExport(\n outboundsForExport,\n { rename: [\"outboundShipmentId\"] },\n (err, csv) => {\n downloadCSV(csv, `outboundShipments_${new Date().toLocaleDateString()}`);\n }\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport {\n Box,\n Card,\n Divider,\n Drawer,\n Tab,\n Tabs,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport classnames from \"classnames\";\nimport {\n BulkActionsToolbar,\n CreateButton,\n Datagrid,\n DateField,\n EditButton,\n FilterButton,\n FunctionField,\n ListContextProvider,\n ListToolbar,\n RefreshButton,\n SimpleList,\n TextField,\n Title,\n TopToolbar,\n useListContext,\n} from \"react-admin\";\n\nimport { ChevronRightIcon, MobileIcon } from \"../../../components/common\";\n// import { CustomField } from \"../../../components/common/CustomFields\";\nimport { Empty } from \"../../../components/common/Empty\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { QuickFilter } from \"../../../components/common/QuickFilter\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\nimport { isAuthorized, isSubscriptionDisabled } from \"../../../utils/appUtils\";\nimport {\n AclType,\n MAX_INVENTORY_QUERY_LIMIT,\n OutboundStatus,\n} from \"../../../utils/constants\";\nimport { exceptionRenderer, truncateText } from \"../../../utils/utils\";\nimport {\n BulkCreateInvoiceButton,\n CreateInvoiceButton,\n} from \"./CreateInvoiceButton\";\nimport { ConfirmationDrawer, AdvanceButton } from \"./AdvanceButton\";\nimport { BetaBadge } from \"../../../components/common/FeatureBadges\";\nimport ExportDropDown from \"../../../components/common/ExportDropDown\";\nimport { ListDatePicker } from \"../../../components/common/ListDatePicker\";\nimport { outboundExportCsv, outboundExportPdf } from \"./OutboundExports\";\nimport { AccountDropDown } from \"../../../components/common/AccountDropDown\";\n\nconst useStyles = makeStyles((theme) => ({\n listRoot: {\n transition: theme.transitions.create([\"all\"], {\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: 0,\n },\n listWithDrawer: {\n marginRight: 335,\n },\n drawerPaper: {\n zIndex: 100,\n },\n bulkActions: {\n // [classes.bulkActions] remove to restore original behavior\n marginTop: -theme.spacing(8),\n transition: theme.transitions.create(\"margin-top\"),\n },\n}));\n\nconst tabs = [\n {\n id: OutboundStatus.ADVICE_PENDING,\n name: (\n <span>\n Advices <BetaBadge />\n </span>\n ),\n sortKey: \"scheduledDateTime\",\n sortOrder: \"ASC\",\n showSmall: false,\n },\n {\n id: OutboundStatus.PENDING,\n name: \"Pending\",\n sortKey: \"scheduledDateTime\",\n sortOrder: \"ASC\",\n showSmall: true,\n },\n {\n id: OutboundStatus.ARRIVED,\n name: (\n <Box display=\"flex\">\n <MobileIcon />\n PLACED\n </Box>\n ),\n sortKey: \"arrivalDateTime\",\n sortOrder: \"ASC\",\n showSmall: true,\n },\n {\n id: OutboundStatus.LOADED,\n name: \"Loaded\",\n sortKey: \"endDateTime\",\n sortOrder: \"ASC\",\n showSmall: true,\n },\n {\n id: OutboundStatus.RELEASED,\n name: \"Released\",\n sortKey: \"endDateTime\",\n sortOrder: \"DESC\",\n showSmall: false,\n },\n];\n\nconst OutboundSearchField = (props) => {\n const { label, alwaysOn } = props;\n const { displayedFilters, filterValues, setFilters } = useListContext(props);\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n setFilters(\n {\n ...filterValues,\n or: [\n { accountName: { matchPhrasePrefix: `${value}` } },\n { assignedTo: { matchPhrasePrefix: `${value}` } },\n { carrier: { matchPhrasePrefix: `${value}` } },\n { bolNumber: { matchPhrasePrefix: `${value}` } },\n { bolNumber: { wildcard: `*${value}*` } },\n { pickupNumber: { matchPhrasePrefix: `${value}` } },\n { pickupNumber: { wildcard: `*${value}*` } },\n { poNumber: { matchPhrasePrefix: `${value}` } },\n { poNumber: { wildcard: `*${value}*` } },\n { railCarNumber: { matchPhrasePrefix: `${value}` } },\n { railCarNumber: { wildcard: `*${value}*` } },\n { customFields: { matchPhrasePrefix: `${value}` } },\n { customFields: { wildcard: `*${value}*` } },\n ],\n },\n displayedFilters\n );\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = (mdDown, tabValue) => {\n const filters = [\n <AccountDropDown\n source=\"accountId.eq\"\n label=\"Account\"\n alwaysOn={!mdDown}\n />,\n <OutboundSearchField label=\"Search\" tabValue={tabValue} alwaysOn />,\n <QuickFilter\n source=\"hasException\"\n label=\"Has Exception\"\n defaultValue={{ eq: true }}\n />,\n ];\n\n if (tabs[tabValue].id === OutboundStatus.RELEASED) {\n filters.push(\n <QuickFilter\n source=\"invoiceId\"\n label=\"Not Invoiced\"\n defaultValue={{ exists: false }}\n />,\n <ListDatePicker\n label=\"Date shipped\"\n source=\"endDateTime\"\n filterField=\"endDateTime\"\n />\n );\n }\n return filters;\n};\n\nconst BulkListActions = (props) => <BulkCreateInvoiceButton {...props} />;\n\nconst ListActions = (props) => {\n const { isXSmall } = props;\n const { resource, total } = useListContext();\n\n return !isXSmall ? (\n <TopToolbar>\n <FilterButton />\n <CreateButton disabled={isSubscriptionDisabled()} />\n <ExportDropDown\n total={total}\n resource={resource}\n exporter={outboundExportCsv}\n exporterPdf={outboundExportPdf}\n maxResults={MAX_INVENTORY_QUERY_LIMIT}\n />\n <RefreshButton />\n </TopToolbar>\n ) : null;\n};\n\nconst getSortOrder = (tabIndex) => {\n return tabs[tabIndex].sortOrder;\n};\n\nconst getSortBy = (tabValue) => {\n const tabIndex = tabs.findIndex((tab) => tab.id === tabValue);\n return `{\"key\":\"outboundShipmentByReloadYardByStatusByDates\", \"search\":\"${tabs[tabIndex].sortKey}\"}`;\n};\n\nconst getSessionTab = () => {\n const sessionTab = Number(sessionStorage.getItem(`OutboundTab`));\n if (sessionTab && tabs[sessionTab]) {\n return sessionTab;\n }\n return 0; // Default to the first visible tab if the sessionTab is not valid\n};\n\nexport const OutboundList = (props) => {\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const mdDown = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const [tabIndex, setTabIndex] = useState(getSessionTab());\n const [isDrawerOpen, setDrawerOpen] = useState(false);\n const [advanceRecord, setAdvanceRecord] = useState();\n const [advanceStatus, setAdvanceStatus] = useState();\n const [account, setAccount] = useState();\n\n const [defaultFilter, setDefaultFilter] = useState({\n reloadYardId: window.appUser.reloadYardId,\n statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime: {\n beginsWith: {\n status: tabs[tabIndex].id,\n },\n },\n });\n const [defaultSearchFilter, setDefaultSearchFilter] = useState({\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: tabs[tabIndex].id },\n });\n const defaultSort = {\n field: getSortBy(tabs[tabIndex].id),\n order: getSortOrder(tabIndex),\n };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = Number(\n localStorage.getItem(`${props.resource}_perPage`)\n );\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? sessionPerPage : 10\n );\n\n const listContext = useSearchableList({\n ...props,\n defaultTitle: \"Outbound\",\n defaultFilter: defaultFilter,\n defaultSearchFilter: defaultSearchFilter,\n defaultPerPage: defaultPerPage,\n defaultSort: defaultSort,\n resource: \"outboundShipments\",\n });\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n useEffect(() => {\n if (listContext?.filter) {\n // Extract the key query from defaultSort\n const fieldObj = JSON.parse(defaultSort.field);\n const keyToCheck = fieldObj.key;\n\n // Check for the key's presence in filter\n const hasKey = keyToCheck in listContext.filter;\n const hasFilterValues = Object.keys(listContext.filterValues).length > 0;\n if (hasKey && hasFilterValues) listContext.setFilters({});\n }\n }, [listContext?.filter]);\n\n const handleTabChange = (value) => {\n debugger;\n setTabIndex(value);\n setDefaultFilter({\n reloadYardId: window.appUser.reloadYardId,\n statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime: {\n beginsWith: {\n status: tabs[value].id,\n },\n },\n });\n setDefaultSearchFilter({\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: tabs[value].id },\n });\n listContext.setSort(getSortBy(tabs[value].id), getSortOrder(value));\n listContext.setPage(1);\n };\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Outbound\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters(mdDown, tabIndex)}\n actions={<ListActions isXSmall={isXSmall} />}\n />\n <Card\n className={classnames(\n classes.listRoot,\n { [classes.listWithDrawer]: isDrawerOpen },\n { [classes.bulkActions]: listContext.selectedIds.length > 0 }\n // [classes.bulkActions] remove to restore original behavior\n )}\n >\n <BulkActionsToolbar>\n <BulkListActions {...listContext} />\n </BulkActionsToolbar>\n <ShipmentTabs\n {...props}\n {...listContext}\n isDrawerOpen={isDrawerOpen}\n setDrawerOpen={setDrawerOpen}\n setAdvanceRecord={setAdvanceRecord}\n setAdvanceStatus={setAdvanceStatus}\n account={account}\n tabValue={tabIndex}\n setTabValue={handleTabChange}\n isXSmall={isXSmall}\n isMedium={mdDown}\n />\n <Pagination {...listContext} />\n </Card>\n <Drawer\n open={isDrawerOpen}\n variant=\"persistent\"\n anchor=\"right\"\n classes={{ paper: classes.drawerPaper }}\n >\n {/* To avoid any errors if the route does not match, we don't render at all the component in this case */}\n {isDrawerOpen ? (\n <ConfirmationDrawer\n {...props}\n isOpen={isDrawerOpen}\n record={advanceRecord}\n newStatus={advanceStatus}\n setDrawerOpen={setDrawerOpen}\n />\n ) : null}\n </Drawer>\n </ListContextProvider>\n );\n};\n\nconst ShipmentTabs = ({\n account,\n tabValue,\n setTabValue,\n setPage,\n ...props\n}) => {\n const { isMedium } = props;\n\n const handleChange = (event, value) => {\n sessionStorage.setItem(\"OutboundTab\", value);\n setTabValue(value);\n };\n\n return (\n <>\n <Tabs\n value={tabValue}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n onChange={handleChange}\n >\n {tabs.map(\n (itm, idx) =>\n (!isMedium || itm.showSmall) && (\n <Tab key={itm.id} label={itm.name} id={`shipment-${idx}`} />\n )\n )}\n </Tabs>\n <Divider />\n {tabs.map(\n (itm) =>\n itm.id === tabs[tabValue].id && (\n <ShipmentGrid\n {...props}\n key={itm.id}\n account={account}\n tabValue={itm.id}\n />\n )\n )}\n </>\n );\n};\n\nconst ShipmentGrid = ({ ids, page, account, tabValue, ...props }) => {\n const { isXSmall, isMedium } = props;\n // const accountFields = account?.inventoryCustomFields?.length > 0 ? account.inventoryCustomFields : [];\n // const customGridFields = accountFields ? accountFields.map((field, index) => {\n // return <CustomField source={`customFields[${index}]`} field={field} label={field.name} sortable={true} />\n // }) : [];\n\n if (tabValue === OutboundStatus.PENDING && ids.length === 0 && page === 1)\n return <Empty {...props} message=\"Create a new outbound\" />;\n else\n return isXSmall ? (\n <SimpleList\n primaryText={(record) => record.accountName}\n secondaryText={(record) => `Pickup No: ${record.pickupNumber}`}\n tertiaryText={(record) =>\n record.assignedTo ? truncateText(record.assignedTo, 12) : null\n }\n leftIcon={(record) => exceptionRenderer(record, null, false)}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n linkType=\"edit\"\n />\n ) : isMedium ? (\n <Datagrid rowClick=\"edit\">\n {tabValue === OutboundStatus.LOADED ||\n tabValue === OutboundStatus.RELEASED ||\n tabValue === OutboundStatus.ARRIVED ? (\n <FunctionField\n source=\"hasException\"\n label=\" \"\n render={(record) => exceptionRenderer(record, null, false)}\n />\n ) : null}\n <TextField\n source=\"accountName\"\n label=\"Account\"\n sortable={true}\n sortBy={`{\"key\":\"outboundShipmentByReloadYardByStatusByDates\", \"search\":\"accountName\"}`}\n />\n <TextField source=\"poNumber\" label=\"PO Number\" sortable={true} />\n <TextField source=\"pickupNumber\" label=\"Pickup No.\" sortable={true} />\n <TextField source=\"carrier\" label=\"Carrier\" sortable={true} />\n {tabValue === OutboundStatus.ADVICE_PENDING ||\n tabValue === OutboundStatus.PENDING ? (\n <DateField\n source=\"scheduledDateTime\"\n label=\"Scheduled Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n {tabValue === OutboundStatus.ARRIVED ? (\n <DateField\n source=\"arrivalDateTime\"\n label=\"Arrival Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n {tabValue === OutboundStatus.LOADED ? (\n <DateField\n source=\"endDateTime\"\n label=\"Loaded Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n {tabValue === OutboundStatus.RELEASED ? (\n <DateField\n source=\"departureDateTime\"\n label=\"Shipped\"\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n </Datagrid>\n ) : (\n <Datagrid\n rowClick=\"edit\"\n hasBulkActions={\n tabValue === OutboundStatus.RELEASED && isAuthorized(AclType.INVOICES)\n }\n >\n {tabValue === OutboundStatus.LOADED ||\n tabValue === OutboundStatus.RELEASED ||\n tabValue === OutboundStatus.ARRIVED ? (\n <FunctionField\n source=\"hasException\"\n label=\" \"\n render={(record) => exceptionRenderer(record, null, false)}\n />\n ) : null}\n <TextField source=\"accountName\" label=\"Account\" sortable={true} />\n <TextField source=\"poNumber\" label=\"PO Number\" sortable={true} />\n <TextField source=\"pickupNumber\" label=\"Pickup No.\" sortable={true} />\n <TextField source=\"carrier\" label=\"Carrier\" sortable={true} />\n {tabValue === OutboundStatus.ADVICE_PENDING ||\n tabValue === OutboundStatus.PENDING ? (\n <DateField\n source=\"scheduledDateTime\"\n label=\"Scheduled Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n {tabValue === OutboundStatus.ARRIVED ? (\n <DateField\n source=\"arrivalDateTime\"\n label=\"Arrival Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n {tabValue === OutboundStatus.LOADED ? (\n <DateField\n source=\"endDateTime\"\n label=\"Loaded Time\"\n showTime={true}\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n {tabValue === OutboundStatus.RELEASED ? (\n <DateField\n source=\"departureDateTime\"\n label=\"Shipped\"\n sortable={true}\n sortBy={getSortBy(tabValue)}\n />\n ) : null}\n {tabValue === OutboundStatus.ARRIVED ? (\n <TextField source=\"assignedTo\" label=\"Assigned To\" sortable={true} />\n ) : null}\n {tabValue === OutboundStatus.RELEASED ? (\n <TextField source=\"bolNumber\" label=\"BOL Number\" sortable={true} />\n ) : null}\n {tabValue === OutboundStatus.RELEASED ? (\n <CreateInvoiceButton {...props} />\n ) : null}\n {tabValue === OutboundStatus.PENDING ? (\n <AdvanceButton\n record={props}\n newStatus={OutboundStatus.ARRIVED}\n buttonLabel=\"Set Placed\"\n {...props}\n />\n ) : null}\n {tabValue === OutboundStatus.LOADED ? (\n <AdvanceButton\n record={props}\n newStatus={OutboundStatus.RELEASED}\n buttonLabel=\"Set Released\"\n {...props}\n />\n ) : null}\n <EditButton />\n </Datagrid>\n );\n};\n","import React, { useEffect, useState, useRef } from \"react\";\nimport { useHistory } from \"react-router-dom/cjs/react-router-dom\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n // timeslotByEventTypeByYearByWeek,\n timeslotByYearByWeek,\n} from \"../../graphql/queries\";\n\nimport {\n Avatar,\n Backdrop,\n Box,\n Button,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n Grid,\n IconButton,\n makeStyles,\n Popover,\n Typography,\n useMediaQuery,\n useTheme,\n} from \"@material-ui/core\";\nimport { alpha } from \"@material-ui/core/styles\";\nimport ArrowBackIosIcon from \"@material-ui/icons/ArrowBackIos\";\nimport ArrowForwardIosIcon from \"@material-ui/icons/ArrowForwardIos\";\nimport KeyboardArrowDownIcon from \"@material-ui/icons/KeyboardArrowDown\";\nimport TodayOutlinedIcon from \"@material-ui/icons/TodayOutlined\";\nimport RefreshIcon from \"@material-ui/icons/Refresh\";\nimport StarIcon from \"@material-ui/icons/Star\";\nimport { blue, grey, blueGrey, orange } from \"@material-ui/core/colors\";\n\nimport {\n add,\n differenceInMinutes,\n format,\n getWeek,\n set,\n startOfWeek,\n} from \"date-fns\";\n\nimport { useNotify } from \"react-admin\";\n\nimport { logError } from \"../../utils/appUtils\";\nimport { CalendarLayout } from \"../../utils/constants\";\nimport { CancelIcon } from \".\";\n\nconst borderColorDark = blueGrey[700];\nconst borderColorLight = blueGrey[100];\nconst getShadedBackground = (theme, wd) => {\n if (wd) {\n if (wd.schedule && wd.schedule.selected) return undefined;\n else\n return theme.palette.type === \"dark\" ? alpha(grey[700], 0.4) : grey[50];\n }\n return theme.palette.type === \"dark\" ? alpha(grey[700], 0.4) : grey[50];\n};\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: 90001,\n },\n avatar: {\n width: 36,\n height: 36,\n backgroundColor: blue[600],\n color: \"white\",\n },\n navigationContainer: {\n border: `1px solid ${\n theme.palette.type === \"dark\" ? borderColorDark : borderColorLight\n }`,\n marginLeft: 2,\n marginRight: 2,\n padding: 4,\n },\n dayHeaderContainer: {\n borderRight: `1px solid ${\n theme.palette.type === \"dark\" ? borderColorDark : borderColorLight\n }`,\n borderLeft: `1px solid ${\n theme.palette.type === \"dark\" ? borderColorDark : borderColorLight\n }`,\n borderBottom: `1px solid ${\n theme.palette.type === \"dark\" ? borderColorDark : borderColorLight\n }`,\n marginLeft: 2,\n marginRight: 2,\n },\n eventsContainer: {\n borderRight: `1px solid ${\n theme.palette.type === \"dark\" ? borderColorDark : borderColorLight\n }`,\n borderLeft: `1px solid ${\n theme.palette.type === \"dark\" ? borderColorDark : borderColorLight\n }`,\n borderBottom: `1px solid ${\n theme.palette.type === \"dark\" ? borderColorDark : borderColorLight\n }`,\n marginLeft: 2,\n marginRight: 2,\n },\n monthButton: {\n \"&:hover\": {\n backgroundColor: \"transparent\",\n cursor: \"auto\",\n },\n },\n dialogContent: {\n height: \"100vh\",\n overflow: \"hidden\", // scrolling is applied to inner area\n display: \"flex\",\n flexDirection: \"column\",\n },\n}));\n\n// --------------------------------------------------\n// Helper Functions\n// --------------------------------------------------\n// const getEventsByEventType = async (eventTyoe, uniqueWeekPairs) => {\n// // Cannot use timeslotByEventTypeByYearByWeekByDay because weeks are not 0 based, as in 01, 02.\n// const queryPromises = Array.from(uniqueWeekPairs.values()).map((pair) =>\n// API.graphql(\n// graphqlOperation(timeslotByEventTypeByYearByWeek, {\n// eventTypeId: eventType.id,\n// yearWeek: {\n// eq: {\n// year: pair.year,\n// week: pair.week,\n// },\n// },\n// })\n// )\n// );\n// const responses = await Promise.all(queryPromises);\n// // Merge the results (using flatMap, or reduce if needed)\n// const events = responses.flatMap(\n// (response) => response.data.timeslotByEventTypeByYearByWeek.items\n// );\n\n// return events;\n// };\n\n// Fetch scheduled events / timeslots\nconst getEventsByYard = async (uniqueWeekPairs) => {\n const queryPromises = Array.from(uniqueWeekPairs.values()).map((pair) =>\n API.graphql(\n graphqlOperation(timeslotByYearByWeek, {\n reloadYardId: window.appUser.reloadYardId,\n yearWeek: {\n eq: {\n year: pair.year,\n week: pair.week,\n },\n },\n })\n )\n );\n const responses = await Promise.all(queryPromises);\n // Merge the results (using flatMap, or reduce if needed)\n const events = responses.flatMap(\n (response) => response.data.timeslotByYearByWeek.items\n );\n\n return events;\n};\n\nconst getDayName = (date) => format(date, \"EEE\");\n\nconst isToday = (day) => {\n const today = new Date();\n return (\n today.getFullYear() === day.getFullYear() &&\n today.getMonth() === day.getMonth() &&\n today.getDate() === day.getDate()\n );\n};\n\n// Attach a time string like \"10:15am\" to a given day.\nfunction createDateFromTimeForDay(timeStr, day) {\n const [rawHour, rawMinuteAmpm] = timeStr.split(\":\");\n let hour = parseInt(rawHour, 10);\n const minute = parseInt(rawMinuteAmpm, 10);\n const ampm = rawMinuteAmpm.replace(/[0-9]/g, \"\").toLowerCase();\n if (ampm === \"pm\" && hour < 12) hour += 12;\n if (ampm === \"am\" && hour === 12) hour = 0;\n return set(day, {\n hours: hour,\n minutes: minute,\n seconds: 0,\n milliseconds: 0,\n });\n}\n\nfunction createDateFromTime(timeStr) {\n const today = new Date();\n return createDateFromTimeForDay(timeStr, today);\n}\n\n// Compute 7 consecutive days starting from weekStartDate.\n// For each day, match the schedule object (by day-of-week) to preserve formatting.\nconst getComputedWeekDays = (weekStartDate, eventType, yardSchedule) => {\n if (!weekStartDate) return [];\n\n return Array.from({ length: 7 }, (_, i) => {\n const date = add(weekStartDate, { days: i });\n\n // Start with yardSchedule as the base workdays\n let workdays = yardSchedule?.workdays ? [...yardSchedule.workdays] : [];\n\n // Iterate over eventType's workdays and update workdays accordingly\n eventType?.schedule?.workdays?.forEach((eventDay) => {\n const dayIndex = workdays.findIndex((w) => w.id === eventDay.id);\n if (dayIndex !== -1) {\n // If the eventType explicitly disables the day, update it in workdays\n if (eventDay.selected === false) {\n workdays[dayIndex] = { ...workdays[dayIndex], selected: false };\n }\n }\n });\n\n // TODO: add highlight for holidays\n const scheduleForDay = workdays.find(\n (w) => w.id === String(date.getDay())\n ) || { selected: true };\n\n return { date, schedule: scheduleForDay };\n });\n};\n\nconst compareTime = (a, b) => createDateFromTime(a) - createDateFromTime(b);\n\n/**\n * === Component Initialization Flow for EventsCalendar ===\n *\n * 1. Initial State Setup:\n * - `weekStartDate` is initially set (ideally using a lazy initializer) to either:\n * - The current date (if in TODAY_VIEW or on small screens), or\n * - The start of the week (using startOfWeek(new Date())).\n * - `computedWeekDays` is derived from `weekStartDate`, `eventType`, and `yardSchedule`\n * by calling `getComputedWeekDays(weekStartDate, eventType, yardSchedule)`.\n * - `allEvents` and other state variables (e.g., `loading`, `selectedEvent`) are initialized.\n *\n * 2. Component Mounting:\n * - The `useEffect` with an empty dependency array (`[]`) calls `initScheduled()`.\n * This function:\n * - Determines the scheduled date based on `selectedTimeslot` (if available) or the current date.\n * - Sets the `weekStartDate` accordingly (current date for TODAY_VIEW, or the start of the week).\n *\n * 3. Updating Computed Week Days:\n * - A `useEffect` that listens for changes in `weekStartDate`, `eventType`, and `yardSchedule`\n * recalculates `computedWeekDays` by calling `getComputedWeekDays(weekStartDate, eventType, yardSchedule)`.\n * - This ensures that any change in the starting day or schedule data updates the list of days\n * to be displayed on the calendar.\n *\n * 4. Fetching Events:\n * - Another `useEffect` is triggered when `weekStartDate`, `smDown`, or `selectedTimeslot` change.\n * In this effect:\n * - If `weekStartDate` is defined, it calls `fetchEvents()`.\n * - `fetchEvents()` uses the current `computedWeekDays` to build a map of unique (year, week) pairs.\n * - These pairs are used to query the API (via `API.graphql` with the `timeslotByYearByWeek` query)\n * to fetch scheduled timeslots (events) for the visible week(s).\n * - The fetched events are stored in the `allEvents` state.\n *\n * 5. Rendering:\n * - The component uses `computedWeekDays` to render:\n * - Day headers (via the `DayHeader` component), which display the day name and date.\n * - The events area (via the `Events` component) where timeslots are grouped and rendered.\n * - Hourly time labels are computed based on the business start/end times derived from the schedule.\n *\n * Summary:\n * - The chain starts with initial state setup, followed by scheduling initialization via `initScheduled()`.\n * - Updating `weekStartDate` triggers recalculation of `computedWeekDays`.\n * - A change in `weekStartDate` (or related dependencies) then triggers `fetchEvents()` to load timeslots.\n * - Finally, the updated state is used to render the calendar UI with correct day headers and events.\n *\n * This flow ensures that on calendar load, the correct week is computed and all relevant scheduled events\n * are fetched and rendered. Any timing issues with initial load (e.g., weekStartDate being undefined)\n * are mitigated by initializing weekStartDate properly and recalculating computedWeekDays before fetching events.\n */\nexport const EventsCalendar = ({\n eventType,\n selectedTimeslot,\n disableClick,\n height = \"100%\",\n}) => {\n const [allEvents, setAllEvents] = useState([]); // raw events from GraphQL\n const [selectedEvent, setSelectedEvent] = useState();\n const [loading, setLoading] = useState(false);\n const notify = useNotify();\n const classes = useStyles();\n const history = useHistory();\n const theme = useTheme();\n const isDark = theme.palette.type === \"dark\";\n const smDown = useMediaQuery(theme.breakpoints.down(\"sm\"));\n const yardSchedule = window.appUser.reloadYard.schedule;\n const layout = yardSchedule?.layout || CalendarLayout.TODAY_VIEW;\n const [weekStartDate, setWeekStartDate] = useState(() => {\n const now = new Date();\n return smDown || layout === CalendarLayout.TODAY_VIEW\n ? now\n : startOfWeek(now);\n });\n const [workdays, setWorkdays] = useState(yardSchedule.workdays);\n const [computedWeekDays, setComputedWeekDays] = useState(\n getComputedWeekDays(weekStartDate, eventType, yardSchedule)\n );\n\n useEffect(() => {\n if (eventType?.schedule?.workdays) {\n setWorkdays(eventType.schedule.workdays);\n setComputedWeekDays(\n getComputedWeekDays(weekStartDate, eventType, yardSchedule)\n );\n } else {\n setWorkdays(yardSchedule.workdays || []); // Fallback to yard workdays\n }\n }, [eventType]);\n\n const minStartTimeStr = workdays.reduce(\n (min, w) => (compareTime(w.startDayTime, min) < 0 ? w.startDayTime : min),\n workdays[0].startDayTime || \"6:00am\" // Default start time if missing\n );\n const maxEndTimeStr = workdays.reduce(\n (max, w) => (compareTime(w.endDayTime, max) > 0 ? w.endDayTime : max),\n workdays[0].endDayTime || \"9:00pm\" // Default start time if missing\n );\n const businessStart = createDateFromTime(minStartTimeStr);\n const businessEnd = createDateFromTime(maxEndTimeStr);\n\n // Use fixed 1‑hour slots on the Y‑axis.\n const slotHeight = 48; // increased from 32px to 48px\n let hourlySlots = [];\n let currentHour = businessStart;\n while (currentHour < businessEnd) {\n hourlySlots.push(format(currentHour, \"h:mmaaa\"));\n currentHour = add(currentHour, { hours: 1 });\n }\n const totalSlots = hourlySlots.length;\n const dayColumnHeight = totalSlots * slotHeight;\n const columnWidth = 91; // right side column width percentage (for non‑small screens)\n\n // Fetch scheduled events / timeslots\n const fetchEvents = async () => {\n debugger;\n\n try {\n setLoading(true);\n // Build a set (or map) of unique (year, week) pairs from computedWeekDays.\n // Instead of assuming that all days fall in the same week, it dynamically determines which weeks need to be queried.\n // This ensures that timeslots are fetched for all weeks covered by the computedWeekDays span.\n const uniqueWeekPairs = new Map();\n computedWeekDays.forEach(({ date }) => {\n const year = date.getFullYear();\n const week = getWeek(date);\n // Use a composite key string to ensure uniqueness.\n uniqueWeekPairs.set(`${year}-${week}`, { year, week });\n });\n\n let events = [];\n events = await getEventsByYard(uniqueWeekPairs);\n // else events = getEventsByEventType(eventType, uniqueWeekPairs);\n\n // Add selectedTimeslot if not already in events\n if (\n selectedTimeslot &&\n !events.some(\n (e) =>\n e.id === selectedTimeslot.id &&\n e.year === selectedTimeslot.year &&\n e.month === selectedTimeslot.month &&\n e.day === selectedTimeslot.day &&\n e.time === selectedTimeslot.time\n )\n ) {\n events.push(selectedTimeslot);\n }\n setAllEvents(events);\n } catch (err) {\n logError(\"EventsCalendar:getData\", err, notify);\n } finally {\n setLoading(false);\n }\n };\n\n // Initialize to scheduled date (selectedTimeslot if available, else current date)\n const initScheduled = () => {\n let date = new Date();\n if (selectedTimeslot) {\n date = set(date, {\n year: selectedTimeslot.year,\n month: selectedTimeslot.month,\n date: selectedTimeslot.day,\n });\n setSelectedEvent(selectedTimeslot);\n }\n\n if (smDown || layout === CalendarLayout.TODAY_VIEW) {\n // TODAY_VIEW: start with the current date as the first column\n setWeekStartDate(date);\n } else {\n setWeekStartDate(startOfWeek(date));\n }\n };\n\n // Initialize to current date (ignoring any selectedTimeslot)\n const initToday = () => {\n const date = new Date();\n if (smDown || layout === CalendarLayout.TODAY_VIEW) {\n // TODAY_VIEW: start with the current date as the first column\n setWeekStartDate(date);\n } else {\n setWeekStartDate(startOfWeek(date));\n }\n };\n\n useEffect(() => {\n if (weekStartDate) {\n setComputedWeekDays(\n getComputedWeekDays(weekStartDate, eventType, yardSchedule)\n );\n }\n }, [weekStartDate, eventType, yardSchedule]);\n\n useEffect(() => {\n if (computedWeekDays.length > 0) {\n fetchEvents();\n }\n }, [computedWeekDays]);\n\n useEffect(() => {\n initScheduled();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleClick = (event) => {\n debugger;\n if (disableClick) return;\n const path = event.inboundId\n ? `/inboundShipments/${event.inboundId}`\n : event.outboundId\n ? `/outboundShipments/${event.outboundId}`\n : `/eventDetails/${event.id}`;\n history.push(path);\n };\n\n // Helper: Convert an event’s time to a Date for a given day.\n function createDateFromTimeForDay(timeStr, day) {\n const [rawHour, rawMinuteAmpm] = timeStr.split(\":\");\n let hour = parseInt(rawHour, 10);\n const minute = parseInt(rawMinuteAmpm, 10);\n const ampm = rawMinuteAmpm.replace(/[0-9]/g, \"\").toLowerCase();\n if (ampm === \"pm\" && hour < 12) hour += 12;\n if (ampm === \"am\" && hour === 12) hour = 0;\n return set(day, {\n hours: hour,\n minutes: minute,\n seconds: 0,\n milliseconds: 0,\n });\n }\n\n // Helper: Group overlapping events for a given day.\n const groupOverlappingEvents = (events, day) => {\n // Sort events by their start time\n const sorted = [...events].sort((a, b) => {\n const aStart = createDateFromTimeForDay(a.time, day);\n const bStart = createDateFromTimeForDay(b.time, day);\n return aStart - bStart;\n });\n\n const groups = [];\n let currentGroup = [];\n let currentGroupEnd = null;\n\n sorted.forEach((event) => {\n const eventStart = createDateFromTimeForDay(event.time, day);\n const durationMinutes = event.eventType.duration;\n const eventEnd = new Date(eventStart.getTime() + durationMinutes * 60000);\n\n if (currentGroup.length === 0) {\n currentGroup.push(event);\n currentGroupEnd = eventEnd;\n } else {\n // If the event starts before the current group's end, they overlap.\n if (eventStart < currentGroupEnd) {\n currentGroup.push(event);\n if (eventEnd > currentGroupEnd) {\n currentGroupEnd = eventEnd;\n }\n } else {\n groups.push({\n events: currentGroup,\n groupStart: createDateFromTimeForDay(currentGroup[0].time, day),\n groupEnd: currentGroupEnd,\n });\n currentGroup = [event];\n currentGroupEnd = eventEnd;\n }\n }\n });\n if (currentGroup.length > 0) {\n groups.push({\n events: currentGroup,\n groupStart: createDateFromTimeForDay(currentGroup[0].time, day),\n groupEnd: currentGroupEnd,\n });\n }\n return groups;\n };\n\n // Filter events for the day and group overlapping ones.\n const getEventsForDay = (day) => {\n const eventsForDay = allEvents.filter((e) => {\n const eventDate = new Date(e.year, e.month, e.day);\n return (\n eventDate.getFullYear() === day.getFullYear() &&\n eventDate.getMonth() === day.getMonth() &&\n eventDate.getDate() === day.getDate()\n );\n });\n return groupOverlappingEvents(eventsForDay, day);\n };\n\n if (!weekStartDate) return <></>;\n\n return (\n <>\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <Grid container>\n {/* --- Top Controls (Navigation) --- */}\n <Grid item xs={12}>\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n className={classes.navigationContainer}\n style={{ backgroundColor: getShadedBackground(theme) }}\n mt={2}\n >\n <Navigation\n changeWeek={(days) =>\n setWeekStartDate(add(weekStartDate, { days }))\n }\n weekStartDate={weekStartDate}\n smDown={smDown}\n initScheduled={initScheduled}\n initToday={initToday}\n />\n </Box>\n </Grid>\n\n {/* --- Day Headers --- */}\n <Grid item xs={12}>\n <Box display=\"flex\" className={classes.dayHeaderContainer}>\n {/* Left spacer to align with time labels */}\n <Box\n display=\"flex\"\n width={`${100 - columnWidth}%`}\n flexDirection=\"column\"\n component=\"span\"\n style={{\n borderRight: `1px solid ${\n isDark ? borderColorDark : borderColorLight\n }`,\n }}\n />\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n width={`${columnWidth}%`}\n >\n {computedWeekDays.map((wd, idx) => (\n <DayHeader\n key={idx}\n weekDay={wd.schedule}\n day={wd.date}\n selectedEvent={selectedEvent}\n classes={classes}\n />\n ))}\n </Box>\n </Box>\n </Grid>\n\n {/* --- Scrollable Events Area --- */}\n <Grid item xs={12}>\n <Box\n display=\"flex\"\n overflow=\"auto\"\n height={height}\n className={classes.eventsContainer}\n >\n {/* Left Column: Hourly Time Labels */}\n <Box\n display=\"flex\"\n width={`${100 - columnWidth}%`}\n flexDirection=\"column\"\n >\n {hourlySlots.map((slot, idx) => (\n <Box\n key={idx}\n style={{\n height: slotHeight,\n minHeight: slotHeight,\n maxHeight: slotHeight,\n borderBottom: `1px solid ${\n isDark ? borderColorDark : borderColorLight\n }`,\n borderRight: `1px solid ${\n isDark ? borderColorDark : borderColorLight\n }`,\n }}\n >\n <Typography\n variant=\"caption\"\n style={{ whiteSpace: \"normal\", wordWrap: \"break-word\" }}\n >\n {slot}\n </Typography>\n </Box>\n ))}\n </Box>\n\n {/* Right Column: Day Columns */}\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n width={`${columnWidth}%`}\n >\n {computedWeekDays.map((wd, idx) => {\n // getEventsForDay now returns an array of overlapping event groups.\n const groupedEvents = getEventsForDay(wd.date);\n return (\n <Box\n key={idx}\n flex={1}\n style={{\n height: dayColumnHeight,\n borderLeft: `1px solid ${\n isDark ? borderColorDark : borderColorLight\n }`,\n backgroundColor: getShadedBackground(theme, wd),\n }}\n >\n {/* Container for absolute event placement */}\n <Box\n position=\"relative\"\n style={{\n height: dayColumnHeight,\n borderTop: \"0px\",\n marginTop: \"-1px\", // subtract top border thickness\n }}\n >\n {/* Hourly grid lines */}\n {hourlySlots.map((_, i) => (\n <Box\n key={i}\n position=\"absolute\"\n top={i * slotHeight}\n left={0}\n right={0}\n style={{\n borderTop: `1px solid ${\n isDark ? borderColorDark : borderColorLight\n }`,\n }}\n />\n ))}\n {/* Render grouped events via the Events component */}\n <Events\n day={wd.date}\n groups={groupedEvents}\n businessStart={businessStart}\n slotHeight={slotHeight}\n handleClick={handleClick}\n isDark={isDark}\n smDown={smDown}\n />\n </Box>\n </Box>\n );\n })}\n </Box>\n </Box>\n </Grid>\n </Grid>\n </>\n );\n};\n\n// Navigation Component\nconst Navigation = ({\n changeWeek,\n weekStartDate,\n smDown,\n initScheduled,\n initToday,\n}) => {\n const classes = useStyles();\n return (\n <>\n <span>\n <IconButton\n onClick={() => changeWeek(smDown ? -1 : -7)}\n color=\"default\"\n >\n <ArrowBackIosIcon fontSize=\"small\" />\n </IconButton>\n <Button\n size=\"large\"\n disableRipple\n disableElevation\n disableFocusRipple\n className={classes.monthButton}\n >\n {format(weekStartDate, \"MMMM yyyy\")}\n </Button>\n <IconButton onClick={() => changeWeek(smDown ? 1 : 7)} color=\"default\">\n <ArrowForwardIosIcon fontSize=\"small\" />\n </IconButton>\n {/* Today button now calls init() to reset weekStartDate to the current day */}\n <Button\n onClick={() => initScheduled()}\n startIcon={<TodayOutlinedIcon />}\n style={{ marginRight: 8 }}\n color=\"default\"\n >\n Scheduled\n </Button>\n <Button\n onClick={() => initToday()}\n startIcon={<TodayOutlinedIcon />}\n style={{ marginRight: 8 }}\n color=\"primary\"\n >\n Today\n </Button>\n </span>\n {!smDown && (\n <IconButton onClick={() => changeWeek(0)} color=\"default\">\n <RefreshIcon fontSize=\"small\" />\n </IconButton>\n )}\n </>\n );\n};\n\n// DayHeader Component\nconst DayHeader = ({ weekDay, day, selectedEvent, classes }) => {\n return (\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"center\"\n alignItems=\"center\"\n width=\"100%\"\n pt={1.5}\n pb={1.5}\n >\n <Box display=\"flex\" justifyContent=\"center\">\n <Typography\n component=\"span\"\n variant=\"body2\"\n color={weekDay && weekDay.selected ? \"textSecondary\" : \"error\"}\n style={{ paddingBottom: 8 }}\n >\n {getDayName(day)}\n </Typography>\n {selectedEvent && selectedEvent.day === day.getDate() && (\n <StarIcon\n color=\"error\"\n style={{ fontSize: 16, margin: 2, marginRight: 4 }}\n />\n )}\n </Box>\n {isToday(day) ? (\n <Avatar className={classes.avatar}>{format(day, \"d\")}</Avatar>\n ) : (\n <Typography\n component=\"span\"\n variant=\"h6\"\n color={weekDay && weekDay.selected ? \"textPrimary\" : \"error\"}\n >\n {format(day, \"d\")}\n </Typography>\n )}\n </Box>\n );\n};\n\nconst Events = ({\n day,\n groups,\n businessStart,\n slotHeight,\n handleClick,\n isDark,\n smDown,\n}) => {\n // Calculate the day’s business start (using the businessStart time)\n const dayBusinessStart = set(day, {\n hours: businessStart.getHours(),\n minutes: businessStart.getMinutes(),\n seconds: 0,\n milliseconds: 0,\n });\n\n return (\n <>\n {groups.map((group, idx) => {\n const top =\n (differenceInMinutes(group.groupStart, dayBusinessStart) / 60) *\n slotHeight;\n const groupHeight =\n (differenceInMinutes(group.groupEnd, group.groupStart) / 60) *\n slotHeight;\n\n // Render a single event or a group block\n if (group.events.length === 1) {\n return (\n <SingleEvent\n key={group.events[0].id}\n event={group.events[0]}\n top={top}\n height={groupHeight}\n handleClick={handleClick}\n isDark={isDark}\n />\n );\n } else {\n return (\n <EventGroup\n key={`group-${idx}`}\n group={group}\n top={top}\n height={groupHeight}\n handleClick={handleClick}\n isDark={isDark}\n smDown={smDown}\n />\n );\n }\n })}\n </>\n );\n};\n\nconst SingleEvent = ({\n event,\n top,\n height,\n handleClick,\n isDark,\n inPopover = false,\n}) => {\n const isOutbound = Boolean(event.outboundId);\n const backgroundColor = isOutbound\n ? isDark\n ? alpha(orange[800], 0.95)\n : orange[100]\n : isDark\n ? alpha(blue[800], 0.95)\n : blue[100];\n const borderLeftColor = isOutbound\n ? isDark\n ? orange[300]\n : orange[800]\n : isDark\n ? blue[300]\n : blue[800];\n\n // Common styles for Box\n const style = {\n display: \"flex\",\n alignItems: \"center\", // Vertically centers text\n overflow: \"hidden\",\n height: height,\n backgroundColor,\n padding: \"4px 8px\", // Consistent padding\n border: `0.5px solid ${borderLeftColor}`, // Top, Right, Bottom border\n borderLeft: `4px solid ${borderLeftColor}`, // Restore thick left border\n borderRadius: 2,\n cursor: \"pointer\",\n };\n\n // Adjust positioning if it's NOT in popover\n if (!inPopover) {\n style.position = \"absolute\";\n style.top = top;\n style.left = 4;\n style.right = 4;\n }\n\n return (\n <Box style={style} onClick={() => handleClick(event)}>\n <Typography\n variant=\"caption\"\n style={{\n color: isDark ? grey[200] : grey[900],\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n flexGrow: 1, // Ensures text expands within box\n }}\n >\n {inPopover ? `${event.time} - ${event.accountName}` : event.accountName}\n </Typography>\n </Box>\n );\n};\n\nconst EventGroup = ({ group, top, height, handleClick, isDark, smDown }) => {\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const handleOpen = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => setAnchorEl(null);\n\n const open = Boolean(anchorEl);\n const id = open ? \"events-popper\" : undefined;\n\n return (\n <>\n {/* Grouped Events Box */}\n <Box\n position=\"absolute\"\n top={top}\n left={4} // Maintain left indentation\n right={4} // Align with day column width\n height={height}\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n style={{\n backgroundColor: isDark ? alpha(orange[800], 0.95) : orange[100],\n borderLeft: `4px solid ${isDark ? orange[300] : orange[800]}`,\n cursor: \"pointer\",\n overflow: \"hidden\",\n borderRadius: 2,\n paddingBottom: 4, // Ensure space for the arrow\n }}\n onClick={handleOpen}\n >\n <Typography\n variant=\"caption\"\n noWrap\n style={{\n paddingLeft: 4,\n paddingTop: 2,\n color: isDark ? grey[200] : grey[900],\n }}\n >\n {smDown ? group.events.length : `${group.events.length} events`}\n </Typography>\n\n {/* Arrow Indicator */}\n <KeyboardArrowDownIcon\n fontSize=\"small\"\n style={{\n color: isDark ? grey[200] : grey[900],\n marginTop: 2,\n }}\n />\n </Box>\n\n {/* Popover for Grouped Events */}\n {open && anchorEl && (\n <Popover\n id={id}\n open={open}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"left\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"left\",\n }}\n PaperProps={{\n style: {\n minWidth: Math.max(\n 150, // Ensure a minimum width of 150px\n anchorEl ? anchorEl.getBoundingClientRect().width : 200\n ),\n maxWidth:\n anchorEl && anchorEl.closest(\".MuiGrid-item\")\n ? anchorEl.closest(\".MuiGrid-item\").offsetWidth - 8\n : 400,\n overflow: \"hidden\",\n marginLeft: 20, // Offset the popover by 20px to the right\n },\n }}\n >\n <Box pl={1} pt={0.5} pb={0.5} pr={1}>\n {group.events.map((event) => (\n <SingleEvent\n key={event.id}\n event={event}\n height={(event.eventType.duration / 60) * 48} // Height based on duration\n handleClick={handleClick}\n isDark={isDark}\n inPopover={true}\n />\n ))}\n </Box>\n </Popover>\n )}\n </>\n );\n};\n\n// Dialog Wrapper (if needed)\nexport const EventsCalendarDialog = ({\n isOpen,\n setIsOpen,\n eventType,\n selectedTimeslot,\n}) => {\n const classes = useStyles();\n const dialogContentRef = useRef(null);\n const [dialogContentHeight, setDialogContentHeight] = useState(\"400px\");\n\n const handleClose = () => setIsOpen(false);\n const handleEntered = () => {\n if (dialogContentRef.current) {\n setDialogContentHeight(\n `${dialogContentRef.current.clientHeight - 180}px`\n );\n }\n };\n\n return (\n <Dialog\n open={isOpen}\n maxWidth=\"xl\"\n fullWidth\n TransitionProps={{ onEntered: handleEntered }}\n >\n <DialogContent\n dividers\n className={classes.dialogContent}\n ref={dialogContentRef}\n >\n <EventsCalendar\n eventType={eventType}\n selectedTimeslot={selectedTimeslot}\n disableClick={true}\n height={dialogContentHeight}\n />\n </DialogContent>\n <DialogActions>\n <Button\n color=\"default\"\n onClick={handleClose}\n startIcon={<CancelIcon />}\n >\n Close\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import React from \"react\";\n\nimport {\n AddIcon,\n DocumentIcon,\n EditIcon,\n InfoOutlinedIcon,\n InvoiceIcon,\n LinkOffIcon,\n RemoveIcon,\n} from \"../../../components/common\";\nimport { Typography } from \"@material-ui/core\";\n\nconst toSource = function (parent, child) {\n var str = \"\";\n\n for (var c in parent) {\n if (c === \"obj\") {\n str += toSource(parent[c]);\n } else if (!parent[c]) {\n str += (child ? `${child}.${c}: ` : `${c}: `) + '\"\" </br>';\n } else if (typeof parent[c] === \"string\") {\n str += (child ? `${child}.${c}: ` : `${c}: `) + parent[c] + \" </br>\";\n } else if (typeof parent[c] === \"number\") {\n str += (child ? `${child}.${c}: ` : `${c}: `) + parent[c] + \" </br>\";\n } else if (typeof parent[c] === \"boolean\") {\n str += (child ? `${child}.${c}: ` : `${c}: `) + parent[c] + \" </br>\";\n } else if (Array.isArray(parent[c])) {\n for (let i = 0; i < parent[c].length; i++) {\n const itm = parent[c][i];\n str += toSource(itm, `${c}[${i}]`);\n }\n } else {\n if (child) str += toSource(parent[c], `${child}.${c}`);\n else str += toSource(parent[c], c);\n }\n }\n\n return str;\n};\n\nexport const DocData = (obj) => {\n const source = toSource(obj);\n const values = source.split(\"</br>\");\n return (\n <>\n {\" \"}\n {values.map((val) => (\n <Typography> {val} </Typography>\n ))}\n </>\n );\n};\n\nexport const OutboundSetupHelpCreate = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Outbound Setup</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Account: </strong>\n Account must be selected first to enable editing of Pick List.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>PO Number: </strong>\n Purchase Order number provided by Customer.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Carrier Name: </strong>\n Rail line / truck line name.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Carrier Type: </strong>\n Select carrier type - determines \"Pickup Number\" or \"Railcar Number\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Pickup Number: </strong> Required if Carrier Type = \"Truck\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Railcar Number: </strong>\n Required if shipping by Rail and Carrier Type = \"Rail\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Must Tarp: </strong>\n Required if Carrier Type = \"Truck\". Indicate if load needs to be\n covered with tarp.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Destination Name & Address: </strong>\n Optional - can be left blank for \"Blind Shipments\". If Destination\n entered, address is required.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>PO File: </strong>\n Attach the original PO from customer.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Photos: </strong>\n Attach Photos if documenting a prior shipment an have available\n photos. Only used for past shipments where photos are available.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup. These fields are Account-specific, so\n they may differ from one inbound to another.\n </Typography>\n </li>\n </ul>\n </>\n);\nexport const OutboundPickListHelpCreate = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Pick List</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Product Name: </strong>\n Product name as displayed in the Inventories. Items linked to Product\n Catalog will have an <InfoOutlinedIcon\n className={classes.icon}\n />{\" \"}\n Info Bubble in the right corner. Those not linked to a Product, will\n display <LinkOffIcon className={classes.icon} /> broken link icon.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. On Hand: </strong>Stock quantity in storage.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Committed: </strong>\n Stock quantity Reserved across all Outbound Shipments, including this\n one - dynamically updated.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Available: </strong>\n Stock quantity available of Outbound Shipment, inclusive of Qty.\n Committed in this shipment.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Outbound: </strong>Stock quantity Reserved for this\n shipment.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup or Product Catalog. These fields are\n Account- and Product-specific, so they may differ from one inbound to\n another.\n </Typography>\n </li>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>\n Add new Line Item to Pick List. Launches \"Inventory Search\" dialog.\n Account must be selected on Shipment Setup Tab to enable the Add\n button. Inventory Search dialog allows you to search for All\n Inventories by hitting the Search button, or narrowing down results by\n product name, or lot number.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Pick List Line Item and adjust global Inventory\n counts.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Total Quantity & Shipping Units: </strong>\n Sum total of Qty. Outbound. Indicate units of measure for counting Qty\n shipped.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Bill Quantity & Units: </strong>\n Total Qty. Outbound and Units used for invoicing customer. If Billing\n Units = Weight Units, the measured truck weight will be used for\n invoicing.\n </Typography>\n </li>\n </ul>\n </>\n);\nexport const OutboundNotesHelpCreate = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Notes</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Use the Notes Tab to document key events and changes made to the Shipment\n record.\n </Typography>\n <ul>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>Add new Note Line Item.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Note Line Item - this info will be permanently lost.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const OutboundSetupHelpEdit = ({ classes, bolData }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Outbound Setup</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>PO Number: </strong>\n Purchase Order number provided by Customer.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Carrier Name: </strong>\n Rail line / truck line name.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Carrier Type: </strong>\n Select carrier type - determines \"Pickup Number\" or \"Railcar Number\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Pickup Number: </strong> Required if Carrier Type = \"Truck\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Railcar Number: </strong>\n Required if shipping by Rail and Carrier Type = \"Rail\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Must Tarp: </strong>\n Required if Carrier Type = \"Truck\". Indicate if load needs to be\n covered with tarp.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Destination Name & Address: </strong>\n Optional - can be left blank for \"Blind Shipments\". If Destination\n entered, address is required.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>PO File: </strong>\n Attach the original PO from customer.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup. These fields are Account-specific, so\n they may differ from one inbound to another.\n </Typography>\n </li>\n <li>\n <Typography>\n <InvoiceIcon className={classes.icon} />\n <strong> INVOICE: </strong>Generate new Invoice for this Outbound\n Shipment.\n </Typography>\n </li>\n <li>\n <Typography>\n <DocumentIcon className={classes.icon} />\n <strong> CREATE BOL: </strong>\n Generate Bill of Lading as a downloadable, editable .DOCX document.\n Custom BOL template can up uploaded in Account settings.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>BOL Data: </strong>\n </Typography>\n <DocData obj={bolData} />\n </li>\n </ul>\n </>\n);\nexport const OutboundPickListHelpEdit = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Pick List</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Product Name: </strong>\n Product name as displayed in the Inventories. Items linked to Product\n Catalog will have an <InfoOutlinedIcon\n className={classes.icon}\n />{\" \"}\n Info Bubble in the right corner. Those not linked to a Product, will\n display <LinkOffIcon className={classes.icon} /> broken link icon.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. On Hand: </strong>Stock quantity in storage.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Committed: </strong>\n Stock quantity Reserved across all Outbound Shipments, including this\n one - dynamically updated.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Available: </strong>\n Stock quantity available of Outbound Shipment, inclusive of Qty.\n Committed in this shipment.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Outbound: </strong>Stock quantity Reserved for this\n shipment.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup or Product Catalog. These fields are\n Account- and Product-specific, so they may differ from one inbound to\n another.\n </Typography>\n </li>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>\n Add new Line Item to Pick List. Launches \"Inventory Search\" dialog.\n Account must be selected on Shipment Setup Tab to enable the Add\n button. Inventory Search dialog allows you to search for All\n Inventories by hitting the Search button, or narrowing down results by\n product name, or lot number.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Pick List Line Item and adjust global Inventory\n counts.\n </Typography>\n </li>\n <li>\n <Typography>\n <EditIcon className={classes.icon} />\n <strong> EDIT: </strong>\n Edit Qty. Outbound of selected Line Item. After saving or cancelling\n changes, you will be brought back to this screen.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Total Quantity & Shipping Units: </strong>\n Sum total of Qty. Outbound. Indicate units of measure for counting Qty\n shipped.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Bill Quantity & Units: </strong>\n Total Qty. Outbound and Units used for invoicing customer. If Billing\n Units = Weight Units, the measured truck weight will be used for\n invoicing.\n </Typography>\n </li>\n </ul>\n </>\n);\nexport const OutboundDispatchHelpEdit = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Dispatch</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Use the Dispatch Tab to capture key event timestamps when the shipment is\n advanced from Pending {\">\"} Placed {\">\"} Released status. Alternatively,\n you can advance a record directly from the \"Outboud Shipment\" List view.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Date Created: </strong>\n Date customer advised of Outbound Shipment.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Time Placed: </strong>\n Time of Arrival when the Carrier arrives and checks in with the Yard.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Empty Weight & Units: </strong>\n Empty truck weight at time of Arrival. Used for invoicing if Units =\n Billing Units.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Load Start Time:</strong> Time when Crew started loading\n outbound inventory.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Load End Time:</strong> Time when Crew finished loading\n outbound inventory.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Time Released:</strong> Time shipment was approved and\n Released.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Loaded Weight & Units: </strong>\n Loaded truck weight at time of Departure. Used for invoicing if Units\n = Billing Units.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Seal Number: </strong>\n Seal tag number for shipments that require sealing.\n </Typography>\n </li>\n </ul>\n </>\n);\nexport const OutboundNotesHelpEdit = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>Notes</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Use the Notes Tab to document key events and changes made to the Shipment\n record.\n </Typography>\n <ul>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>Add new Note Line Item.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Note Line Item - this info will be permanently lost.\n </Typography>\n </li>\n </ul>\n </>\n);\nexport const OutboundHistoryHelpEdit = ({ classes }) => (\n <>\n <Typography variant=\"overline\">\n <strong>History</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n The History Tab provides an automated, chronological Audit Trail of key\n events and record changes.\n </Typography>\n </>\n);\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n OutboundSetupHelpCreate,\n OutboundPickListHelpCreate,\n OutboundNotesHelpCreate,\n OutboundSetupHelpEdit,\n OutboundPickListHelpEdit,\n OutboundDispatchHelpEdit,\n OutboundNotesHelpEdit,\n OutboundHistoryHelpEdit,\n} from \"./OutboundHelpComponents\";\n\nconst useStyles = makeStyles(() => ({\n icon: {\n verticalAlign: \"middle\",\n display: \"inline-flex\",\n },\n}));\n\nexport const OutboundCreateHelp = (props) => {\n const classes = useStyles();\n\n const tabNames = props?.location.pathname.split(\"/\");\n const tab = tabNames?.length > 3 ? tabNames[3] : \"\";\n\n switch (tab) {\n case \"\":\n return <OutboundSetupHelpCreate classes={classes} />;\n case \"pickList\":\n return <OutboundPickListHelpCreate classes={classes} />;\n case \"notes\":\n return <OutboundNotesHelpCreate classes={classes} />;\n default:\n return null;\n }\n};\n\nexport const OutboundEditHelp = ({ bolData, ...props }) => {\n const classes = useStyles();\n const tabNames = props?.location.pathname.split(\"/\");\n const tab = tabNames?.length > 3 ? tabNames[3] : \"\";\n\n switch (tab) {\n case \"\":\n return <OutboundSetupHelpEdit bolData={bolData} classes={classes} />;\n case \"pickList\":\n return <OutboundPickListHelpEdit classes={classes} />;\n case \"dispatch\":\n return <OutboundDispatchHelpEdit classes={classes} />;\n case \"notes\":\n return <OutboundNotesHelpEdit classes={classes} />;\n case \"history\":\n return <OutboundHistoryHelpEdit classes={classes} />;\n default:\n return null;\n }\n};\n\n// const Switch = props => {\n// const { test, children } = props\n// // filter out only children with a matching prop\n// return children.find(child => {\n// return child.props.value === test\n// })\n// }\n\n// const Sample = props => {\n// const someTest = true\n// return (\n// <Switch test={someTest}>\n// <div value={false}>Will display if someTest is false</div>\n// <div value={true}>Will display if someTest is true</div>\n// </Switch>\n// )\n// }\n","import React, { useEffect, useMemo, useState } from \"react\";\n\nimport {\n Backdrop,\n Box,\n CircularProgress,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n IconButton,\n Paper,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n BooleanInput,\n Button,\n Datagrid,\n DateField,\n Filter,\n FunctionField,\n ListContextProvider,\n ListToolbar,\n NumberField,\n SelectInput,\n TextField,\n useList,\n useNotify,\n} from \"react-admin\";\n\nimport { AddAllIcon, CancelIcon, CloseIcon } from \"../../../components/common\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport CustomizableDatagrid from \"../../../components/common/ra-customizable-datagrid\";\nimport { CustomField } from \"../../../components/common/CustomFields\";\nimport SwitchOnOff from \"../../../components/common/AntSwitch\";\n\nimport {\n LotType,\n LotTypes,\n SORTKEY_BUFFER,\n ShipmentLineItemStatus,\n} from \"../../../utils/constants\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n exceptionRenderer,\n piecesRenderer,\n quantityRenderer,\n totalPiecesRenderer,\n trimDecimal,\n} from \"../../../utils/utils\";\nimport { sortByLocation } from \"../../../utils/locationUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: 1001,\n },\n paper: {\n display: \"flex\",\n flexDirection: \"column\",\n padding: theme.spacing(1),\n paddingLeft: theme.spacing(8),\n },\n filter: {\n display: \"flex\",\n },\n booleanInput: {\n marginBottom: theme.spacing(1),\n },\n dialogTitle: {\n display: \"flex\",\n paddingTop: \"3px\",\n paddingBottom: \"0px\",\n justifyContent: \"space-between\",\n },\n dialogContent: {\n // https://stackoverflow.com/questions/47698037/how-can-i-set-a-height-to-a-dialog-in-material-ui\n height: \"100vh\",\n },\n textRight: {\n textAlign: \"right\",\n },\n textLeft: {\n flexGrow: 1, // Allows the text to take up space pushing the buttons to the right\n [theme.breakpoints.down(\"sm\")]: {\n width: \"100%\", // Full width on small screens to ensure the text and buttons stack\n marginBottom: theme.spacing(1), // Adds a margin below the text on small screens\n },\n },\n actionButtons: {\n [theme.breakpoints.down(\"sm\")]: {\n width: \"100%\", // Full width on small screens to ensure the buttons stack below the text\n display: \"flex\",\n justifyContent: \"flex-end\", // Aligns buttons to the right on small screens\n },\n },\n}));\n\nconst getTotalWeight = (record) => {\n // Return null if no record is provided\n if (!record) return null;\n\n // Determine the weight, preferring record.weight over record.inventory?.weight\n const weight = record.weight ?? record.inventory?.weight;\n\n // Return null if weight is null, undefined, or an empty string\n if (weight == null || weight === \"\") return null;\n\n // Check if quantityOnHand is provided and is not null or undefined\n const quantityOnHand = record.quantityOnHand ?? null;\n\n // If quantityOnHand is null, undefined, or an empty string, return null\n if (quantityOnHand == null) return null;\n\n // Calculate total weight if both weight and quantityOnHand are numbers (including zero)\n if (!isNaN(weight) && !isNaN(quantityOnHand)) {\n return weight * quantityOnHand;\n }\n\n // Return null if any condition for a valid calculation is not met\n return null;\n};\n\nconst ListFilter = ({\n allInventories,\n setInventories,\n searchLot,\n setSearchLot,\n searchAreaId,\n setSearchAreaId,\n showAll,\n setShowAll,\n byLocation,\n defaultSort,\n currentSort,\n setSort,\n ...props\n}) => {\n const classes = useStyles();\n const [search, setSearch] = useState();\n const [filterValues, setFilters] = useState({\n lotType: searchLot ? searchLot : \"\",\n searchArea: searchAreaId ? searchAreaId : \"\",\n });\n\n useEffect(() => {\n handleInventorySearch(search);\n }, [search, searchLot, searchAreaId, showAll]);\n\n const handleInventorySearch = (value) => {\n debugger;\n const searchTerm = value?.toLowerCase() || \"\";\n const newInventories = allInventories.filter(\n (itm) =>\n (itm.productCode?.toLowerCase().includes(searchTerm) ||\n itm.productName?.toLowerCase().includes(searchTerm) ||\n itm.lotNumber?.toLowerCase().includes(searchTerm) ||\n itm.poNumber?.toLowerCase().includes(searchTerm) ||\n itm.railCarNumber?.toLowerCase().includes(searchTerm) ||\n itm.customFields?.toString()?.toLowerCase().includes(searchTerm) ||\n itm.inventoryItems.items.some((invItm) =>\n invItm.locationFullName?.toLowerCase().includes(searchTerm)\n )) &&\n (searchLot ? itm.lotType === searchLot : true) &&\n (searchAreaId\n ? itm.inventoryItems.items.some(\n (invItm) => invItm.areaId === searchAreaId\n )\n : true) &&\n (!showAll ? itm.quantityCommitted !== itm.quantityOnHand : true)\n );\n\n if (\n searchLot === LotType.PERPETUAL &&\n currentSort.field !== \"deliveryDateTime\"\n ) {\n setSort(\"deliveryDateTime\", \"ASC\");\n } else if (\n searchLot === LotType.CARLOT &&\n currentSort.field !== \"lotNumber\"\n ) {\n setSort(\"lotNumber\", \"ASC\");\n } else {\n setSort(defaultSort.field, defaultSort.order);\n }\n\n setInventories(newInventories);\n };\n\n return (\n <Filter\n {...props}\n variant=\"outlined\"\n className={classes.filter}\n filterValues={filterValues}\n setFilters={setFilters}\n >\n <SearchField\n label=\"Inventory Search\"\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn\n handleSearch={setSearch}\n />\n <SelectInput\n source=\"lotType\"\n label=\"Lot Type\"\n variant=\"outlined\"\n alwaysOn\n choices={LotTypes}\n allowEmpty\n resettable\n onChange={(event) => setSearchLot(event?.target?.value)}\n helperText={false}\n />\n <SelectInput\n source=\"searchArea\"\n label=\"Area\"\n variant=\"outlined\"\n alwaysOn\n choices={window.appUser.reloadYard.areas.items}\n allowEmpty\n resettable\n onChange={(event) => setSearchAreaId(event?.target?.value)}\n helperText={false}\n />\n <BooleanInput\n source=\"showAll\"\n label=\"Show All Committed\"\n variant=\"outlined\"\n alwaysOn\n className={classes.booleanInput}\n onChange={setShowAll}\n helperText={false}\n />\n </Filter>\n );\n};\n\nconst processInventories = (\n showAll,\n allInventories,\n setInventories,\n setAllInventoriesMap,\n notify\n) => {\n try {\n debugger;\n let inventoryData = [...allInventories];\n const inventoryMap = inventoryData.reduce((acc, item) => {\n acc[item.id] = item;\n return acc;\n }, {});\n setAllInventoriesMap(inventoryMap);\n\n // if hide committed, only keep inventories that are not fully committed.\n if (!showAll)\n inventoryData = inventoryData.filter(\n (itm) => itm.quantityCommitted !== itm.quantityOnHand\n );\n setInventories(inventoryData);\n } catch (error) {\n logError(\n \"outboundShipment:InventorySearchDialog:processInventories\",\n error,\n notify\n );\n }\n};\n\nconst ListSwitch = ({ byLocation, setByLocation, ...props }) => {\n return (\n <Box mt={1.5}>\n <SwitchOnOff\n leftLabel=\"By inventory\"\n rightLabel=\"By location\"\n checked={byLocation}\n setChecked={() => setByLocation(!byLocation)}\n />\n </Box>\n );\n};\n\nexport const InventorySearchDialog = ({\n form,\n pickListItem,\n account,\n allInventories,\n isOpen,\n setIsOpen,\n isLoaded,\n updateShipment,\n ...props\n}) => {\n const classes = useStyles();\n const notify = useNotify();\n const [saving, setSaving] = useState(false);\n const [inventories, setInventories] = useState([]);\n const [allInventoriesMap, setAllInventoriesMap] = useState({});\n const [searchLot, setSearchLot] = useState(\n account?.lotType ? account.lotType : \"\"\n );\n const [searchAreaId, setSearchAreaId] = useState(\"\");\n const [showAll, setShowAll] = useState(false);\n const [selectedInventoryIds, setSelectedInventoryIds] = useState(new Set());\n const [selectedInventoryItemIds, setSelectedInventoryItemIds] = useState(\n new Set()\n );\n const [total, setTotal] = useState(\"\");\n var formatter = new Intl.NumberFormat(\"en-US\");\n\n // Memoize inventoryItemMap\n const allInventoryItemMap = useMemo(\n () =>\n allInventories.reduce((acc, inventory) => {\n inventory.inventoryItems.items.forEach((item) => {\n acc[item.id] = { ...item };\n });\n return acc;\n }, {}),\n [allInventories]\n );\n\n const [byLocation, setByLocation] = useState(false);\n const defaultSort = { field: \"productName\", order: \"ASC\" };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = sessionStorage.getItem(\n `InventorySearchDialog_perPage`\n );\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? Number(sessionPerPage) : 10\n );\n\n useEffect(() => {\n if (account?.id) {\n setSearchLot(account?.lotType ? account.lotType : \"\");\n setSearchAreaId(\"\");\n }\n }, [account]);\n\n useEffect(() => {\n if (allInventories?.length > 0 && isOpen) {\n processInventories(\n showAll,\n allInventories,\n setInventories,\n setAllInventoriesMap,\n notify\n );\n }\n }, [allInventories, isOpen]);\n\n useEffect(() => {\n if (selectedInventoryItemIds.size > 0) {\n const qtyMap = {};\n const weightMap = {};\n let totalString = \"\";\n\n selectedInventoryItemIds.forEach((selectedId) => {\n const inventoryItem = allInventoryItemMap[selectedId];\n const uom = inventoryItem.inventory.inventoryUnits;\n const quantity = inventoryItem.quantityOnHand;\n const wuom = inventoryItem.inventory.weightUnits;\n const weight = inventoryItem.inventory.weight || 0;\n\n qtyMap[uom] = (qtyMap[uom] || 0) + quantity;\n if (wuom) {\n weightMap[wuom] = (weightMap[wuom] || 0) + quantity * weight;\n }\n });\n\n totalString = \"Selected\";\n for (const [key, value] of Object.entries(qtyMap)) {\n totalString = totalString + \" \" + key + \": \" + formatter.format(value);\n }\n for (const [key, value] of Object.entries(weightMap)) {\n totalString = totalString + \" \" + key + \": \" + formatter.format(value);\n }\n\n setTotal(totalString);\n }\n }, [selectedInventoryItemIds]);\n\n const inventoryListContext = useList({\n ...props,\n data: inventories,\n ids: inventories.map(({ id }) => id),\n loaded: isLoaded,\n loading: !isLoaded,\n sort: defaultSort,\n perPage: defaultPerPage,\n basePath: \"/inventories\",\n resource: \"inventories\",\n });\n\n const handleAdd = () => {\n setSaving(true);\n debugger;\n\n try {\n let shipmentItems = [];\n const newShipmentItems = [];\n\n if (pickListItem) {\n // adding more inventoryItems to a shipmentLineItem\n shipmentItems = [pickListItem];\n } else {\n const shipmentItemsState = form.getFieldState(\n \"shipmentLineItems.items\"\n );\n shipmentItems = shipmentItemsState?.value\n ? shipmentItemsState.value\n : [];\n }\n\n selectedInventoryIds.forEach((inventoryId) => {\n const inventory = allInventoriesMap[inventoryId];\n const newLineItemInventoryItems = [];\n\n inventory.inventoryItems.items.forEach((inventoryItem) => {\n // check if inventoryItem selected by inventoryItem ID\n if (selectedInventoryItemIds.has(inventoryItem.id)) {\n newLineItemInventoryItems.push({\n status: ShipmentLineItemStatus.NEW,\n groups: inventory.groups,\n reloadYardId: inventory.reloadYardId,\n outboundShipmentId: null,\n shipmentLineItemId: null,\n inventoryItemId: inventoryItem.id,\n inventoryItem: inventoryItem,\n quantityToPick: trimDecimal(\n inventoryItem.quantityOnHand - inventoryItem.quantityCommitted\n ),\n });\n }\n });\n\n const newPickListItem = {\n id: inventory.id, // temporary id for listContext to work. Delete before save.\n active: \"true\",\n status: ShipmentLineItemStatus.NEW,\n groups: inventory.groups,\n productName: inventory.productName,\n lotNumber: inventory.lotNumber,\n reloadYardId: inventory.reloadYardId,\n inventoryId: inventory.id,\n inventory: inventory,\n inventoryItems: { items: newLineItemInventoryItems },\n totalQuantityToPick: newLineItemInventoryItems.reduce(\n (total, loc) => total + parseInt(loc.quantityToPick),\n 0\n ),\n };\n\n newShipmentItems.push(newPickListItem);\n });\n\n if (newShipmentItems?.length > 0) {\n const unionShipmentItems = Object.values(\n [...shipmentItems, ...newShipmentItems].reduce((acc, item) => {\n const { inventoryId } = item;\n\n if (acc[inventoryId]) {\n const uniqueLocations = [];\n const mergedLocations = acc[\n inventoryId\n ].inventoryItems.items.concat(item.inventoryItems.items);\n mergedLocations.forEach((location) => {\n if (\n !uniqueLocations.some(\n (uniqueLocation) =>\n uniqueLocation.inventoryItemId ===\n location.inventoryItemId\n )\n ) {\n uniqueLocations.push(location);\n }\n });\n acc[inventoryId].inventoryItems.items = uniqueLocations;\n } else {\n acc[inventoryId] = item;\n }\n return acc;\n }, {})\n );\n unionShipmentItems.forEach(\n (itm, idx) => (itm.sortKey = idx + SORTKEY_BUFFER)\n );\n updateShipment && updateShipment(unionShipmentItems);\n }\n\n // Optional: Clear selections after adding\n // setSelectedInventoryIds(new Set());\n // setSelectedInventoryItemIds(new Set());\n } catch (error) {\n logError(\n \"outboundShipment:InventorySearchDialog:handleAdd\",\n error,\n notify\n );\n } finally {\n handleClose();\n setSaving(false);\n }\n };\n\n const handleClose = () => {\n debugger;\n setIsOpen(false);\n inventoryListContext.onUnselectItems();\n };\n\n return (\n <Dialog open={isOpen} maxWidth=\"xl\" fullWidth>\n <DialogTitle disableTypography className={classes.dialogTitle}>\n {pickListItem ? (\n <div></div>\n ) : (\n <ListToolbar\n {...props}\n filters={\n <ListFilter\n allInventories={allInventories}\n setInventories={setInventories}\n searchLot={searchLot}\n setSearchLot={setSearchLot}\n searchAreaId={searchAreaId}\n setSearchAreaId={setSearchAreaId}\n showAll={showAll}\n setShowAll={setShowAll}\n byLocation={byLocation}\n defaultSort={defaultSort}\n currentSort={inventoryListContext.currentSort}\n setSort={inventoryListContext.setSort}\n />\n }\n />\n )}\n <IconButton aria-label=\"close\" onClick={handleClose}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n <DialogContent dividers className={classes.dialogContent}>\n <Backdrop open={saving} className={classes.backdrop}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n {byLocation ? (\n <LocationGrid\n {...props}\n account={account}\n inventories={inventories}\n allInventoriesMap={allInventoriesMap}\n allInventoryItemMap={allInventoryItemMap}\n byLocation={byLocation}\n setByLocation={setByLocation}\n defaultPerPage={defaultPerPage}\n setDefaultPerPage={setDefaultPerPage}\n selectedInventoryIds={selectedInventoryIds}\n setSelectedInventoryIds={setSelectedInventoryIds}\n selectedInventoryItemIds={selectedInventoryItemIds}\n setSelectedInventoryItemIds={setSelectedInventoryItemIds}\n classes={classes}\n />\n ) : (\n <InventoryGrid\n {...props}\n account={account}\n allInventoriesMap={allInventoriesMap}\n allInventoryItemMap={allInventoryItemMap}\n inventoryListContext={inventoryListContext}\n byLocation={byLocation}\n setByLocation={setByLocation}\n setDefaultPerPage={setDefaultPerPage}\n selectedInventoryIds={selectedInventoryIds}\n setSelectedInventoryIds={setSelectedInventoryIds}\n selectedInventoryItemIds={selectedInventoryItemIds}\n setSelectedInventoryItemIds={setSelectedInventoryItemIds}\n classes={classes}\n />\n )}\n </DialogContent>\n <DialogActions>\n <div className={classes.textLeft}>\n <Typography>\n {selectedInventoryItemIds.size > 0 ? total : <> </>}\n </Typography>\n </div>\n <div className={classes.actionButtons}>\n <Button\n label=\"Cancel\"\n color=\"defalut\"\n autoFocus\n onClick={handleClose}\n >\n <CancelIcon />\n </Button>\n <Button\n label=\"Add Selected\"\n color=\"primary\"\n onClick={handleAdd}\n disabled={saving}\n >\n <AddAllIcon />\n </Button>\n </div>\n </DialogActions>\n </Dialog>\n );\n};\n\nconst InventoryGrid = ({\n account,\n allInventoriesMap,\n allInventoryItemMap,\n inventoryListContext,\n byLocation,\n setByLocation,\n setDefaultPerPage,\n selectedInventoryIds,\n setSelectedInventoryIds,\n selectedInventoryItemIds,\n setSelectedInventoryItemIds,\n classes,\n ...props\n}) => {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const accountFields =\n account?.inventoryCustomFields?.length > 0\n ? account.inventoryCustomFields\n : [];\n const customGridFields = accountFields\n ? accountFields.map((field, index) => {\n return (\n <CustomField\n source={`customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={true}\n />\n );\n })\n : [];\n\n useEffect(() => {\n debugger;\n // onSelect method requires an array of IDs, we convert Set to Array\n const currentSelectedIds = Array.from(selectedInventoryIds);\n inventoryListContext.onSelect(currentSelectedIds);\n }, [selectedInventoryIds]);\n\n useEffect(() => {\n if (inventoryListContext?.perPage) {\n sessionStorage.setItem(\n `InventorySearchDialog_perPage`,\n inventoryListContext.perPage\n );\n setDefaultPerPage(Number(inventoryListContext.perPage));\n }\n }, [inventoryListContext?.perPage]);\n\n const handleSelect = (selectedIds) => {\n const newSelectedInventoryIds = new Set(selectedInventoryIds);\n const newSelectedInventoryItemIds = new Set(selectedInventoryItemIds);\n debugger;\n\n // select / unselect all inventories\n if (selectedIds.length === 0) {\n // unselect all inventories && inventoryItems\n newSelectedInventoryIds.clear();\n newSelectedInventoryItemIds.clear();\n } else {\n // select all inventories and corresponding inventoryItems\n selectedIds.forEach((selectedId) => {\n newSelectedInventoryIds.add(selectedId);\n const inventory = allInventoriesMap[selectedId];\n const inventoryItems = inventory.inventoryItems.items;\n inventoryItems.forEach((item) =>\n newSelectedInventoryItemIds.add(item.id)\n );\n });\n }\n\n setSelectedInventoryIds(newSelectedInventoryIds);\n setSelectedInventoryItemIds(newSelectedInventoryItemIds);\n };\n\n const handleToggle = (selectedId) => {\n debugger;\n const newSelectedInventoryIds = new Set(selectedInventoryIds);\n const newSelectedInventoryItemIds = new Set(selectedInventoryItemIds);\n const allItemsOfInventory =\n allInventoriesMap[selectedId]?.inventoryItems?.items;\n\n // toggle inventory selection\n const isInventorySelected = newSelectedInventoryIds.has(selectedId);\n if (isInventorySelected) {\n // inventory selected, unselect it\n newSelectedInventoryIds.delete(selectedId);\n\n // Also remove all corresponding inventory items\n allItemsOfInventory.forEach((item) =>\n newSelectedInventoryItemIds.delete(item.id)\n );\n } else {\n // inventory not selected, select it\n newSelectedInventoryIds.add(selectedId);\n\n // Also select all corresponding inventory items\n allItemsOfInventory.forEach((item) =>\n newSelectedInventoryItemIds.add(item.id)\n );\n }\n\n setSelectedInventoryIds(newSelectedInventoryIds);\n setSelectedInventoryItemIds(newSelectedInventoryItemIds);\n };\n\n return (\n <ListContextProvider value={inventoryListContext}>\n {isSmall ? (\n <CustomizableDatagrid\n label={false}\n listSwitch={\n <ListSwitch byLocation={byLocation} setByLocation={setByLocation} />\n }\n hasBulkActions={true}\n onSelect={handleSelect}\n onToggleItem={handleToggle}\n rowClick=\"toggleSelection\"\n storageProp={`InventorySearchDialog_${account?.id}_small`}\n defaultColumns={[\n \"hasException\",\n \"productName\",\n \"lotNumber\",\n \"deliveryDateTime\",\n \"quantityAvailable\",\n ]}\n >\n {[\n <FunctionField\n source=\"hasException\"\n label=\"Exception\"\n render={exceptionRenderer}\n />,\n <TextField source=\"productName\" label=\"Product Name\" />,\n <FunctionField\n source=\"pcs\"\n label=\"Pieces\"\n render={piecesRenderer}\n />,\n <TextField source=\"lotNumber\" label=\"Lot No.\" />,\n <DateField source=\"deliveryDateTime\" label=\"Received\" />,\n <NumberField source=\"quantityOnHand\" label=\"On Hand\" />,\n <NumberField source=\"quantityCommitted\" label=\"Committed\" />,\n <FunctionField\n source=\"quantityAvailable\"\n label=\"Available\"\n headerClassName={classes.textRight}\n sortable={false}\n render={(record) =>\n quantityRenderer(\n trimDecimal(record.quantityOnHand - record.quantityCommitted)\n )\n }\n />,\n ...customGridFields,\n ]}\n </CustomizableDatagrid>\n ) : (\n <CustomizableDatagrid\n label={false}\n listSwitch={\n <ListSwitch byLocation={byLocation} setByLocation={setByLocation} />\n }\n hasBulkActions={true}\n onSelect={handleSelect}\n onToggleItem={handleToggle}\n rowClick=\"expand\"\n expand={\n <InventoryItemGrid\n selectedInventoryIds={selectedInventoryIds}\n setSelectedInventoryIds={setSelectedInventoryIds}\n selectedInventoryItemIds={selectedInventoryItemIds}\n setSelectedInventoryItemIds={setSelectedInventoryItemIds}\n classes={classes}\n />\n }\n storageProp={`InventorySearchDialog_${account?.id}_large`}\n defaultColumns={[\n \"hasException\",\n \"productCode\",\n \"productName\",\n \"lotNumber\",\n \"deliveryDateTime\",\n \"quantityOnHand\",\n \"quantityCommitted\",\n \"quantityAvailable\",\n \"inventoryUnits\",\n ]}\n >\n {[\n <FunctionField\n source=\"hasException\"\n label=\"Exception\"\n render={exceptionRenderer}\n />,\n <TextField source=\"productCode\" label=\"Product Code\" />,\n <TextField source=\"productName\" label=\"Product Name\" />,\n <FunctionField\n source=\"pcs\"\n label=\"Pieces\"\n render={piecesRenderer}\n />,\n <FunctionField\n source=\"totalPcs\"\n label=\"Total Pieces\"\n headerClassName={classes.textRight}\n sortable={false}\n render={totalPiecesRenderer}\n />,\n <TextField source=\"lotNumber\" label=\"Lot Number\" />,\n <TextField source=\"poNumber\" label=\"PO Number\" />,\n <TextField source=\"railCarNumber\" label=\"Car/Trl. No.\" />,\n <DateField source=\"deliveryDateTime\" label=\"Received\" />,\n <NumberField source=\"quantityOnHand\" label=\"On Hand\" />,\n <NumberField source=\"quantityCommitted\" label=\"Committed\" />,\n <FunctionField\n source=\"quantityAvailable\"\n label=\"Available\"\n headerClassName={classes.textRight}\n sortable={false}\n render={(record) =>\n quantityRenderer(\n trimDecimal(record.quantityOnHand - record.quantityCommitted)\n )\n }\n />,\n <TextField source=\"inventoryUnits\" label=\"UOM\" />,\n <FunctionField\n source=\"weight\"\n label=\"Weight\"\n headerClassName={classes.textRight}\n render={(record) =>\n quantityRenderer(getTotalWeight(record), record.weightUnits)\n }\n />,\n ...customGridFields,\n ]}\n </CustomizableDatagrid>\n )}\n <Pagination {...props} {...inventoryListContext} />\n </ListContextProvider>\n );\n};\n\nconst LocationGrid = ({\n account,\n inventories,\n allInventoriesMap,\n allInventoryItemMap,\n byLocation,\n setByLocation,\n defaultPerPage,\n setDefaultPerPage,\n selectedInventoryIds,\n setSelectedInventoryIds,\n selectedInventoryItemIds,\n setSelectedInventoryItemIds,\n classes,\n ...props\n}) => {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const accountFields =\n account?.inventoryCustomFields?.length > 0\n ? account.inventoryCustomFields\n : [];\n const customGridFields = accountFields\n ? accountFields.map((field, index) => {\n return (\n <CustomField\n source={`inventory.customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={true}\n />\n );\n })\n : [];\n\n const defaultSort = { field: \"inventory.productName\", order: \"ASC\" };\n const fixedFilter = {};\n\n // Memoize inventoryItems\n const inventoryItems = useMemo(() => {\n debugger;\n // generate the array of all inventoryItems\n const items = inventories.reduce((acc, inventory) => {\n // inventory items filtered in getAllInventories\n return acc.concat(inventory.inventoryItems.items);\n }, []);\n\n // sort by picking order\n const sortedItems = sortByLocation(items, true);\n return sortedItems;\n }, [inventories]); // Depend on inventories array\n\n const listContext = useList({\n ...props,\n data: inventoryItems,\n ids: inventoryItems.map(({ id }) => id),\n loaded: true,\n filter: fixedFilter,\n sort: defaultSort,\n perPage: defaultPerPage,\n basePath: \"/inventoryItems\",\n resource: \"inventoryItems\",\n });\n\n useEffect(() => {\n debugger;\n // onSelect method requires an array of IDs, we convert Set to Array\n const currentSelectedIds = Array.from(selectedInventoryItemIds);\n listContext.onSelect(currentSelectedIds);\n }, [selectedInventoryItemIds]);\n\n useEffect(() => {\n if (listContext?.perPage) {\n sessionStorage.setItem(\n `InventorySearchDialog_perPage`,\n listContext.perPage\n );\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n const handleSelect = (selectedIds) => {\n const newSelectedInventoryItemIds = new Set(selectedInventoryItemIds);\n const newSelectedInventoryIds = new Set(selectedInventoryIds);\n\n // Identify items on the current page to be potentially deselected\n const currentPageItemIds = listContext.ids;\n\n // Remove current page items from the selection if they are not in selectedIds\n currentPageItemIds.forEach((id) => {\n if (!selectedIds.includes(id)) {\n newSelectedInventoryItemIds.delete(id);\n // If removing an item causes its parent inventory to have no selected items, also remove the inventory\n const inventoryId = allInventoryItemMap[id].inventoryId;\n const allItemsOfInventory =\n allInventoriesMap[inventoryId]?.inventoryItems?.items.map(\n (item) => item.id\n ) || [];\n const anySelected = allItemsOfInventory.some((itemId) =>\n newSelectedInventoryItemIds.has(itemId)\n );\n if (!anySelected) {\n newSelectedInventoryIds.delete(inventoryId);\n }\n }\n });\n\n // For items that are selected on the current page, ensure they and their parent inventories are selected\n selectedIds.forEach((id) => {\n newSelectedInventoryItemIds.add(id);\n const inventoryId = allInventoryItemMap[id].inventoryId;\n newSelectedInventoryIds.add(inventoryId);\n });\n\n // Update the component state with the new selections\n setSelectedInventoryIds(newSelectedInventoryIds);\n setSelectedInventoryItemIds(newSelectedInventoryItemIds);\n };\n\n const handleToggle = (selectedId) => {\n debugger;\n const newSelectedInventoryItemIds = new Set(selectedInventoryItemIds);\n const newSelectedInventoryIds = new Set(selectedInventoryIds);\n const inventoryItem = allInventoryItemMap[selectedId];\n const inventoryId = inventoryItem.inventoryId;\n const allItemsOfInventory = allInventoriesMap[\n inventoryId\n ]?.inventoryItems?.items.map((item) => item.id);\n\n // toggle inventoryItem selection state\n const isInventoryItemSelected = newSelectedInventoryItemIds.has(selectedId);\n if (isInventoryItemSelected) {\n // unSelect inventoryItem\n newSelectedInventoryItemIds.delete(selectedId);\n const anySelected = allItemsOfInventory?.some((id) =>\n newSelectedInventoryItemIds.has(id)\n );\n\n if (!anySelected) {\n // all inventoryItems of inventory unselected, unselect inventory\n newSelectedInventoryIds.delete(inventoryId);\n }\n } else {\n // check / select inventoryItem\n newSelectedInventoryItemIds.add(selectedId);\n\n const isFirstSelected =\n allItemsOfInventory.filter((id) => newSelectedInventoryItemIds.has(id))\n .length === 1;\n if (isFirstSelected) {\n // if first inventoryItems of inventory is selected, select inventory\n newSelectedInventoryIds.add(inventoryId);\n }\n }\n\n setSelectedInventoryItemIds(newSelectedInventoryItemIds);\n setSelectedInventoryIds(newSelectedInventoryIds);\n };\n\n return (\n <ListContextProvider value={listContext}>\n {isSmall ? (\n <CustomizableDatagrid\n label={false}\n listSwitch={\n <ListSwitch byLocation={byLocation} setByLocation={setByLocation} />\n }\n hasBulkActions={true}\n onSelect={handleSelect}\n onToggleItem={handleToggle}\n rowClick=\"toggleSelection\"\n storageProp={`InventoryItemSearchDialog_${account?.id}_small`}\n defaultColumns={[\n \"inventory.hasException\",\n \"locationFullName\",\n \"inventory.productName\",\n \"quantityAvailable\",\n ]}\n >\n {[\n <FunctionField\n source=\"inventory.hasException\"\n label=\"Exception\"\n render={exceptionRenderer}\n />,\n <TextField source=\"locationFullName\" label=\"Location\" />,\n <TextField source=\"inventory.productName\" label=\"Product Name\" />,\n <FunctionField\n source=\"pcs\"\n label=\"Pieces\"\n render={piecesRenderer}\n />,\n <TextField source=\"inventory.lotNumber\" label=\"Lot No.\" />,\n <NumberField source=\"quantityOnHand\" label=\"On Hand\" />,\n <NumberField source=\"quantityCommitted\" label=\"Committed\" />,\n <FunctionField\n source=\"quantityAvailable\"\n label=\"Available\"\n headerClassName={classes.textRight}\n sortable={false}\n render={(record) =>\n quantityRenderer(\n trimDecimal(record.quantityOnHand - record.quantityCommitted)\n )\n }\n />,\n\n ...customGridFields,\n ]}\n </CustomizableDatagrid>\n ) : (\n <CustomizableDatagrid\n label={false}\n listSwitch={\n <ListSwitch byLocation={byLocation} setByLocation={setByLocation} />\n }\n hasBulkActions={true}\n onSelect={handleSelect}\n onToggleItem={handleToggle}\n rowClick=\"toggleSelection\"\n storageProp={`InventoryItemSearchDialog_${account?.id}_large`}\n defaultColumns={[\n \"inventory.hasException\",\n \"locationFullName\",\n \"inventory.productName\",\n \"inventory.lotNumber\",\n \"inventory.deliveryDateTime\",\n \"quantityOnHand\",\n \"quantityCommitted\",\n \"quantityAvailable\",\n \"inventory.inventoryUnits\",\n ]}\n >\n {[\n <FunctionField\n source=\"inventory.hasException\"\n label=\"Exception\"\n render={exceptionRenderer}\n />,\n <TextField source=\"locationFullName\" label=\"Location\" />,\n <TextField source=\"inventory.productCode\" label=\"Product Code\" />,\n <TextField source=\"inventory.productName\" label=\"Product Name\" />,\n <FunctionField\n source=\"pcs\"\n label=\"Pieces\"\n render={piecesRenderer}\n />,\n <TextField source=\"inventory.lotNumber\" label=\"Lot Number\" />,\n <TextField source=\"inventory.poNumber\" label=\"PO Number\" />,\n <TextField source=\"inventory.railCarNumber\" label=\"Car/Trl. No.\" />,\n <DateField source=\"inventory.deliveryDateTime\" label=\"Received\" />,\n <NumberField source=\"quantityOnHand\" label=\"On Hand\" />,\n <NumberField source=\"quantityCommitted\" label=\"Committed\" />,\n <FunctionField\n source=\"quantityAvailable\"\n label=\"Available\"\n headerClassName={classes.textRight}\n sortable={false}\n render={(record) =>\n quantityRenderer(\n trimDecimal(record.quantityOnHand - record.quantityCommitted)\n )\n }\n />,\n <TextField source=\"inventory.inventoryUnits\" label=\"UOM\" />,\n <FunctionField\n source=\"inventory.weight\"\n label=\"Weight\"\n headerClassName={classes.textRight}\n render={(record) =>\n quantityRenderer(\n getTotalWeight(record),\n record.inventory.weightUnits\n )\n }\n />,\n ...customGridFields,\n ]}\n </CustomizableDatagrid>\n )}\n <Pagination {...props} {...listContext} />\n </ListContextProvider>\n );\n};\n\nconst InventoryItemGrid = ({\n record,\n selectedInventoryIds,\n setSelectedInventoryIds,\n selectedInventoryItemIds,\n setSelectedInventoryItemIds,\n classes,\n ...props\n}) => {\n const defaultSort = { field: \"locationFullName\", order: \"ASC\" };\n const fixedFilter = {};\n const defaultPerPage = 100; // default # of @connection items brought back\n\n // Memoize inventoryItems\n const inventoryItems = useMemo(() => {\n // sort by picking order. items pre-filtered in getAllInventories\n const sortedItems = sortByLocation(record.inventoryItems.items, true);\n return sortedItems;\n }, [record]);\n\n const listContext = useList({\n ...props,\n data: inventoryItems,\n ids: inventoryItems.map(({ id }) => id),\n loaded: true,\n filter: fixedFilter,\n sort: defaultSort,\n perPage: defaultPerPage,\n basePath: \"/inventoryItems\",\n resource: \"inventoryItems\",\n });\n\n useEffect(() => {\n const allItemsOfInventory = record.inventoryItems.items;\n debugger;\n\n // Find items from allItemsOfInventory that are in selectedInventoryItemIds\n const selectedItemIds = allItemsOfInventory\n .map((item) => item.id) // Extract IDs from all items\n .filter((id) => selectedInventoryItemIds.has(id)); // Keep only IDs that are selected\n\n listContext.onSelect(selectedItemIds);\n }, [selectedInventoryItemIds]);\n\n const handleSelect = (selectedIds) => {\n const newSelectedInventoryIds = new Set(selectedInventoryIds);\n const newSelectedInventoryItemIds = new Set(selectedInventoryItemIds);\n debugger;\n\n // select / unselect all inventoryItems\n if (selectedIds.length === 0) {\n // unselect all inventoryItems\n const allItemsOfInventory = record.inventoryItems.items.map(\n (item) => item.id\n );\n allItemsOfInventory.forEach((itemId) =>\n newSelectedInventoryItemIds.delete(itemId)\n );\n\n // unselect parent inventory\n newSelectedInventoryIds.delete(record.id);\n } else {\n // select all inventoryItems\n selectedIds.forEach((selectedId) =>\n newSelectedInventoryItemIds.add(selectedId)\n );\n\n // select parent inventory\n newSelectedInventoryIds.add(record.id);\n }\n\n setSelectedInventoryIds(newSelectedInventoryIds);\n setSelectedInventoryItemIds(newSelectedInventoryItemIds);\n };\n\n const handleToggle = (selectedId) => {\n const newSelectedInventoryIds = new Set(selectedInventoryIds);\n const newSelectedInventoryItemIds = new Set(selectedInventoryItemIds);\n debugger;\n\n // Toggle the selection state of the inventory item\n const isInventoryItemSelected = newSelectedInventoryItemIds.has(selectedId);\n if (isInventoryItemSelected) newSelectedInventoryItemIds.delete(selectedId);\n else newSelectedInventoryItemIds.add(selectedId);\n\n // Check the selection state of all items for the current inventory\n const allItemsOfInventory = record.inventoryItems.items.map(\n (item) => item.id\n );\n const anyItemSelected = allItemsOfInventory.some((id) =>\n newSelectedInventoryItemIds.has(id)\n );\n\n // toggle parent inventory selection state\n if (anyItemSelected) {\n // If any item is selected, ensure the inventory is marked as selected\n newSelectedInventoryIds.add(record.id);\n } else {\n // If no items are selected, remove the inventory from the selection\n newSelectedInventoryIds.delete(record.id);\n }\n\n setSelectedInventoryIds(newSelectedInventoryIds);\n setSelectedInventoryItemIds(newSelectedInventoryItemIds);\n };\n\n return (\n <Paper variant=\"outlined\" className={classes.paper}>\n <ListContextProvider value={listContext}>\n <Datagrid\n hasBulkActions={true}\n onSelect={handleSelect}\n onToggleItem={handleToggle}\n rowClick=\"toggleSelection\"\n >\n <FunctionField\n source=\"hasException\"\n label=\"\"\n render={exceptionRenderer}\n />\n ,\n <TextField source=\"locationFullName\" label=\"Location\" />,\n <NumberField source=\"quantityOnHand\" label=\"On Hand\" />,\n <NumberField source=\"quantityCommitted\" label=\"Committed\" />,\n <FunctionField\n source=\"quantityAvailable\"\n label=\"Available\"\n headerClassName={classes.textRight}\n sortable={false}\n render={(record) =>\n quantityRenderer(\n trimDecimal(record.quantityOnHand - record.quantityCommitted)\n )\n }\n />\n ,\n <TextField source=\"inventory.inventoryUnits\" label=\"UOM\" />,\n <FunctionField\n source=\"inventory.weight\"\n label=\"Weight\"\n headerClassName={classes.textRight}\n render={(record) =>\n quantityRenderer(\n getTotalWeight(record),\n record.inventory.weightUnits\n )\n }\n />\n ,\n </Datagrid>\n </ListContextProvider>\n </Paper>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { API } from \"aws-amplify\";\n\nimport { isEmpty } from \"lodash\";\n\nimport { Backdrop, CircularProgress, makeStyles } from \"@material-ui/core\";\n\nimport { SaveButton, useNotify, useRedirect } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { getCustomFieldsToSave } from \"../../../components/common/CustomFields\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n CarrierType,\n FilePaths,\n NoteType,\n OutboundState,\n OutboundStatus,\n ShipmentLineItemStatus,\n TransferType,\n} from \"../../../utils/constants\";\nimport { saveRemoveFile, saveRemoveFiles } from \"../../../utils/fileUtils\";\nimport {\n createLambdaAppointment,\n isFullAddress,\n trimDecimal,\n validateAppointment,\n} from \"../../../utils/utils\";\nimport { ConditionalConfirm } from \"../../../components/common/ConditionalConfirm\";\nimport * as utils from \"./OutboundUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n}));\n\nexport const ValidateCreateButton = (props) => {\n const classes = useStyles();\n const form = useForm();\n const notify = useNotify();\n const redirect = useRedirect();\n const [isSaving, setIsSaving] = useState(false);\n const [open, setOpen] = useState(false);\n const [confirmContent, setConfirmContent] = useState(\"\");\n const { fromAccount, toAccount, billToAccount, selectedTimeslot } = props;\n\n const handleValidateSave = async () => {\n const tempMsg = [];\n setOnConfirm(() => handleDialogConfirm); // Allow confirmation if no error\n debugger;\n\n const formData = form.getState().values;\n const transfer = isEmpty(formData.transfer) ? null : formData.transfer[0];\n const pickList = formData.shipmentLineItems?.items;\n\n if (\n transfer === TransferType.INTERNAL &&\n (!pickList || pickList.length === 0)\n ) {\n notify(\n \"Cannot save internal transfer without inventory items\",\n \"warning\"\n );\n return;\n }\n\n const isValid = utils.formValidate(form, notify);\n if (isValid) {\n const formData = form.getState().values;\n const duplicateNumbers = await utils.validateOutboundUnicity({\n ...formData,\n account: fromAccount,\n });\n if (duplicateNumbers.length > 0) {\n tempMsg.push(\n \"Possible duplicate with this \" +\n duplicateNumbers.join(\" & \") +\n \" Number already exists.\"\n );\n }\n\n if (selectedTimeslot) {\n const isBooked = await validateAppointment(selectedTimeslot);\n if (isBooked) {\n tempMsg.push(\n `${selectedTimeslot.time} is no longer available. Please select a new time.`\n );\n setOnConfirm(null); // Prevent confirmation if there's an error\n }\n }\n }\n\n if (tempMsg.length === 1) {\n setConfirmContent(tempMsg[0]);\n setOpen(true);\n } else if (tempMsg.length > 1) {\n setConfirmContent(\n <ul>\n {tempMsg.map((msg) => (\n <li>{msg}</li>\n ))}\n </ul>\n );\n setOpen(true);\n } else handleSave();\n };\n\n const handleDialogConfirm = () => handleSave();\n const handleDialogClose = () => setOpen(false);\n\n const [onConfirm, setOnConfirm] = useState(() => handleDialogConfirm);\n\n const handleSave = async () => {\n setOpen(false);\n props.handleSubmit();\n };\n\n const transformOutbound = async (data) => {\n debugger;\n\n // default billToAccountId if not set.\n data.billToAccountId = billToAccount ? billToAccount.id : fromAccount.id;\n data.accountName = billToAccount\n ? billToAccount.businessName\n : fromAccount.businessName;\n\n data.status = OutboundStatus.PENDING;\n\n data.createDateTime = new Date();\n data.scheduledDateTime = data.scheduledDateTime\n ? data.scheduledDateTime\n : null;\n data.arrivalDateTime = data.arrivalDateTime ? data.arrivalDateTime : null;\n data.endDateTime = data.endDateTime ? data.endDateTime : null;\n data.departureDateTime = data.departureDateTime\n ? data.departureDateTime\n : null;\n\n data.railCarNumber = data.railCarNumber ? data.railCarNumber : \"\";\n data.mustTarp = data.mustTarp ? data.mustTarp : false;\n data.scaleWeightUnits = data.weightUnits;\n\n if (fromAccount.generatePickupNumber) {\n data.pickupNumber = await utils.autogenPickupNumber(fromAccount);\n } else {\n data.pickupNumber = data.pickupNumber ? data.pickupNumber : \"\";\n }\n\n if (data.shipTo?.state) data.shipTo.state = data.shipTo.state.toUpperCase();\n if (data.shipTo?.zipCode)\n data.shipTo.zipCode = data.shipTo.zipCode.toUpperCase();\n\n data.history = [\n {\n text: `Created Outbound.`,\n by: window.appUser?.fullName,\n date: data.createDateTime,\n type: NoteType.SHIPMENT,\n },\n ];\n\n if (data.notes?.length > 0) {\n data.notes.forEach((element) => {\n element.type = NoteType.GENERIC;\n element.date = new Date();\n element.by = window.appUser?.fullName;\n });\n } else data.notes = undefined;\n\n // TODO\n // check if still used and needed???\n if (data.shipmentLineItems?.items?.length > 0) {\n debugger;\n data.areaId = data.shipmentLineItems.items[0]?.inventory.areaId;\n data.zoneId = data.shipmentLineItems.items[0]?.inventory.zoneId;\n data.reloadYardCommodityId =\n data.shipmentLineItems.items[0]?.inventory.reloadYardCommodityId;\n }\n\n return data;\n };\n\n const transformTransfer = (data) => {\n debugger;\n data.createDateTime = new Date();\n\n // default billToAccountId = fromAccount on transfer.\n data.billToAccountId = fromAccount.id;\n data.accountName = fromAccount.businessName;\n data.transferToAccountName = toAccount.businessName;\n\n if (data.transfer === TransferType.INTERNAL) {\n data.scheduledDateTime = null;\n data.arrivalDateTime = data.createDateTime;\n data.startDateTime = data.createDateTime;\n data.endDateTime = data.createDateTime;\n data.departureDateTime = data.createDateTime;\n\n data.status = OutboundStatus.RELEASED;\n data.state = OutboundState.COMPLETED;\n } else {\n data.status = OutboundStatus.PENDING;\n data.scheduledDateTime = data.scheduledDateTime\n ? data.scheduledDateTime\n : null;\n data.arrivalDateTime = data.arrivalDateTime ? data.arrivalDateTime : null;\n data.startDateTime = data.startDateTime ? data.startDateTime : null;\n data.endDateTime = data.endDateTime ? data.endDateTime : null;\n data.departureDateTime = data.departureDateTime\n ? data.departureDateTime\n : null;\n }\n\n data.carrierType = CarrierType.TRUCK;\n data.railCarNumber = \"TRANSFER\";\n data.pickupNumber = \"TRANSFER\";\n data.carrier = \"TRANSFER\";\n data.mustTarp = false;\n\n data.history = [\n {\n text: `Inventory Transfer of ${data.totalQuantity} ${data.totalUnits} from ${data.accountName} to ${toAccount.businessName}`,\n by: window.appUser?.fullName,\n date: data.createDateTime,\n type: NoteType.INVENTORY,\n },\n ];\n\n if (data.notes) {\n data.notes.forEach((element) => {\n element.type = NoteType.GENERIC;\n element.date = data.createDateTime;\n element.by = window.appUser?.fullName;\n });\n }\n\n delete data.shipTo;\n\n return data;\n };\n\n const transform = async (data) => {\n setIsSaving(true);\n data = { ...data };\n debugger;\n\n data.active = \"true\";\n data.groups = window.appUser?.groups;\n data.reloadYardId = window.appUser?.reloadYardId;\n\n try {\n data.transfer = isEmpty(data.transfer) ? null : data.transfer[0];\n\n if (data.transfer) transformTransfer(data);\n else await transformOutbound(data);\n\n data.totalQuantity = data.totalQuantity || 0;\n\n data.customFields = getCustomFieldsToSave(\n data.customFields,\n fromAccount?.outboundCustomFields\n );\n\n await Promise.all([\n saveRemoveFiles(\n undefined,\n data,\n \"attachments\",\n `${FilePaths.OUTBOUND}/${Date.now()}`\n ),\n saveRemoveFile(\n undefined,\n data,\n \"bolFile\",\n `${FilePaths.OUTBOUND}/${Date.now()}`\n ),\n saveRemoveFiles(\n undefined,\n data,\n \"photos\",\n `${FilePaths.OUTBOUND}/${Date.now()}`\n ),\n ]);\n } catch (err) {\n logError(\"outboundShipment:ValidateCreateButton:transform\", err, notify);\n return Promise.reject();\n }\n\n delete data.shipmentLineItems;\n\n // clear extra form fields\n delete data.customFieldSelect;\n delete data.saveAddress;\n\n // clear inventorySearchDialog filters\n delete data.lotType;\n delete data.searchArea;\n delete data.searchTerm;\n delete data.showAll;\n\n return data;\n };\n\n const onSuccess = async ({ data }) => {\n const pickListState = form.getFieldState(\"shipmentLineItems.items\");\n const pickList = pickListState?.value;\n const addressState = form.getFieldState(\"saveAddress\");\n const saveAddress = addressState?.value;\n const lotNumbers = new Set();\n const lotTypes = new Set();\n const yardCommodities = new Set();\n let areaId = null;\n let zoneId = null;\n const updateDateTime = data.updatedAt;\n let logPath = \"\";\n debugger;\n\n let outboundUpdateInput = null;\n let inboundCreateInput = null;\n let accountUpdateinput = null;\n let timeslotCreateInput = null;\n const shipmentLineItemCreateList = [];\n const shipmentItemInventoryItemCreateList = [];\n const inventoryCreateList = [];\n const inventoryUpdateList = [];\n const inventoryItemUpdateList = [];\n const inventoryItemCreateList = [];\n\n try {\n if (data.transfer === TransferType.INTERNAL) {\n // create Shipment LineItems, pickList is required\n logPath = \"trensfer inbound\";\n pickList.forEach((lineItem) => {\n lotNumbers.add(lineItem.lotNumber);\n lotTypes.add(lineItem.inventory.lotType);\n areaId = lineItem.inventory.areaId\n ? lineItem.inventory.areaId\n : areaId;\n zoneId = lineItem.inventory.zoneId\n ? lineItem.inventory.zoneId\n : zoneId;\n yardCommodities.add(lineItem.inventory.reloadYardCommodityId);\n });\n\n // create InboundShipment\n inboundCreateInput = utils.createLambdaInboundTransfer(\n data,\n toAccount,\n lotTypes,\n lotNumbers,\n yardCommodities,\n areaId,\n zoneId,\n updateDateTime\n );\n\n logPath = \"trensfer picklist\";\n pickList.forEach((lineItem, index) => {\n const toCreateShipmentLineItem = utils.createLambdaShipmentLineItem(\n data,\n lineItem,\n updateDateTime,\n true\n );\n shipmentLineItemCreateList.push(toCreateShipmentLineItem);\n\n // Create Inbound Transfer Inventories\n const toCreateInventory = utils.createLambdaInventoryTransfer(\n data,\n inboundCreateInput,\n lineItem,\n index,\n updateDateTime\n );\n inventoryCreateList.push(toCreateInventory);\n\n // Update Outbound Transfer Inventories\n const toUpdateInventory = utils.updateLambdaInventoryTransfer(\n lineItem,\n toCreateInventory\n );\n inventoryUpdateList.push(toUpdateInventory);\n\n lineItem.inventoryItems.items.forEach((lineIteminvItem) => {\n const toCreateshipmentLineItemInventoryItem =\n utils.createLambdaShipmentLineItemInventoryItem(\n toCreateShipmentLineItem,\n lineIteminvItem,\n updateDateTime\n );\n shipmentItemInventoryItemCreateList.push(\n toCreateshipmentLineItemInventoryItem\n );\n\n // Create Inbound Transfer InventoryItems\n const toCreateInventoryItem = utils.createLambdaInventoryItem(\n data,\n lineIteminvItem,\n toCreateInventory,\n updateDateTime\n );\n inventoryItemCreateList.push(toCreateInventoryItem);\n\n // Update Outbound Transfer InventoryItems\n const toUpdateInventoryItem = utils.updateLambdaInventoryItem(\n data,\n lineIteminvItem,\n \"transfer\",\n updateDateTime,\n true\n );\n inventoryItemUpdateList.push(toUpdateInventoryItem);\n });\n });\n\n // console.log(\"inboundCreateInput\", inboundCreateInput);\n // console.log(\"shipmentLineItemCreateList\", shipmentLineItemCreateList);\n // console.log(\"shipmentItemInventoryItemCreateList\", shipmentItemInventoryItemCreateList);\n // console.log(\"inventoryUpdateList\", inventoryUpdateList);\n // console.log(\"inventoryCreateList\", inventoryCreateList);\n // console.log(\"inventoryItemUpdateList\", inventoryItemUpdateList);\n // console.log(\"inventoryItemCreateList\", inventoryItemCreateList);\n\n const response = await API.post(\"transREST\", \"/outboundCreate\", {\n body: {\n inboundCreateInput,\n shipmentLineItemCreateList,\n shipmentItemInventoryItemCreateList,\n inventoryUpdateList,\n inventoryCreateList,\n inventoryItemUpdateList,\n inventoryItemCreateList,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n if (response.error) throw response.error;\n\n notify(\"Transfer processed successfully.\");\n } else {\n // regular outbound or external transfer\n if (pickList) {\n pickList.forEach((lineItem) => {\n if (\n lineItem.status === ShipmentLineItemStatus.NEW &&\n lineItem.totalQuantityToPick > 0\n ) {\n const shipmentLineItemInput = utils.createLambdaShipmentLineItem(\n data,\n lineItem,\n updateDateTime\n );\n shipmentLineItemCreateList.push(shipmentLineItemInput);\n\n lineItem.inventoryItems.items.forEach((lineIteminvItem) => {\n if (lineIteminvItem.quantityToPick > 0) {\n const inventoryItemInput =\n utils.createLambdaShipmentLineItemInventoryItem(\n shipmentLineItemInput,\n lineIteminvItem,\n updateDateTime\n );\n shipmentItemInventoryItemCreateList.push(inventoryItemInput);\n\n const toUpdateInventoryItem = utils.updateLambdaInventoryItem(\n data,\n lineIteminvItem,\n \"create\",\n updateDateTime\n );\n inventoryItemUpdateList.push(toUpdateInventoryItem);\n }\n });\n\n const toUpdateInventory = {\n ...lineItem.inventory,\n updatedAt: updateDateTime,\n quantityCommitted: trimDecimal(\n lineItem.inventory.quantityCommitted +\n lineItem.totalQuantityToPick\n ), // Qty committed already calculated in-form\n };\n const note = {\n type: NoteType.INVENTORY,\n date: updateDateTime,\n by: window.appUser?.fullName,\n text: `Committed Outbound Qty. of ${lineItem.totalQuantityToPick}`,\n };\n toUpdateInventory.history = toUpdateInventory.history\n ? [...toUpdateInventory.history, note]\n : note;\n // index keys not changing on outbound create - no inventory status change\n\n delete toUpdateInventory.account;\n delete toUpdateInventory.inboundShipment;\n delete toUpdateInventory.inventoryItems;\n delete toUpdateInventory.location;\n delete toUpdateInventory.product;\n delete toUpdateInventory.reloadYardCommodity;\n delete toUpdateInventory.shipmentLineItems;\n inventoryUpdateList.push(toUpdateInventory);\n }\n });\n }\n\n if (saveAddress && isFullAddress(data.shipTo)) {\n accountUpdateinput = utils.updateLambdaAddressBook(\n data,\n updateDateTime\n );\n }\n if (selectedTimeslot) {\n timeslotCreateInput = createLambdaAppointment(\n selectedTimeslot,\n null,\n data.id,\n data.accountId,\n data.accountName\n );\n outboundUpdateInput = {\n ...data,\n timeslotId: timeslotCreateInput.id,\n };\n delete outboundUpdateInput.account;\n delete outboundUpdateInput.area;\n delete outboundUpdateInput.invoice;\n delete outboundUpdateInput.location;\n delete outboundUpdateInput.reloadYardCommodity;\n delete outboundUpdateInput.seals;\n delete outboundUpdateInput.shipmentLineItems;\n delete outboundUpdateInput.timeslot;\n }\n\n // console.log(\"outboundUpdateInput\", outboundUpdateInput);\n // console.log(\"accountUpdateinput\", accountUpdateinput);\n // console.log(\"timeslotCreateInput\", timeslotCreateInput);\n // console.log(\"shipmentLineItemCreateList\", shipmentLineItemCreateList);\n // console.log(\"shipmentItemInventoryItemCreateList\", shipmentItemInventoryItemCreateList);\n // console.log(\"inventoryItemUpdateList\", inventoryItemUpdateList);\n // console.log(\"inventoryUpdateList\", inventoryUpdateList);\n\n if (\n accountUpdateinput ||\n timeslotCreateInput ||\n shipmentLineItemCreateList.length > 0\n ) {\n const response = await API.post(\"transREST\", \"/outboundCreate\", {\n body: {\n outboundUpdateInput,\n accountUpdateinput,\n timeslotCreateInput,\n shipmentLineItemCreateList,\n shipmentItemInventoryItemCreateList,\n inventoryItemUpdateList,\n inventoryUpdateList,\n user: window.appUser.email,\n reloadYardId: window.appUser.reloadYardId,\n },\n });\n if (response.error) throw response.error;\n }\n\n notify(\"Outbound created successfully\");\n }\n\n redirect(\"/outboundShipments\");\n } catch (error) {\n logError(\n `outboundShipment:ValidateCreateButton:onSuccess:${logPath}`,\n error,\n notify,\n redirect\n );\n } finally {\n setIsSaving(false);\n }\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\n \"outboundShipment:ValidateCreateButton:onFailure\",\n error,\n notify,\n redirect\n );\n };\n\n return (\n <>\n <Backdrop className={classes.backdrop} open={isSaving}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <SaveButton\n label=\"Save\"\n submitOnEnter={false}\n undoable={false}\n saving={isSaving}\n handleSubmitWithRedirect={() => handleValidateSave()}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <ConditionalConfirm\n isOpen={open}\n loading={isSaving}\n title=\"Save Confirmation\"\n content={confirmContent}\n onConfirm={onConfirm}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n accountByActiveByNameDropDown,\n getAccount,\n} from \"../../../graphql/account/custom-queries\";\n\nimport DateFnsUtils from \"@date-io/date-fns\";\nimport { isEmpty } from \"lodash\";\n\nimport {\n Box,\n Dialog,\n Grid,\n InputAdornment,\n makeStyles,\n Typography,\n} from \"@material-ui/core\";\nimport { MuiPickersUtilsProvider, DateTimePicker } from \"@material-ui/pickers\";\n\nimport {\n BooleanInput,\n Button,\n CheckboxGroupInput,\n Create,\n FileInput,\n FormDataConsumer,\n FormTab,\n FunctionField,\n ImageInput,\n ListContextProvider,\n NumberField,\n NumberInput,\n RadioButtonGroupInput,\n required,\n SelectInput,\n TabbedForm,\n TextField,\n TextInput,\n Toolbar,\n TopToolbar,\n useList,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport {\n AddIcon,\n AttachFileIcon,\n AttachPhotoIcon,\n CreatedAtIcon,\n} from \"../../../components/common\";\nimport { AddressInput } from \"../../../components/common/AddressInput\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport {\n CustomField,\n CustomFields,\n} from \"../../../components/common/CustomFields\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { NotesTab } from \"../../../components/common/NotesTab\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { ImageField } from \"../../../components/common/ImageField\";\nimport { ProductLinkIcon } from \"../../../components/common/ProductLinkIcon\";\nimport CustomizableDatagrid from \"../../../components/common/ra-customizable-datagrid\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { handleFileChange } from \"../../../utils/fileUtils\";\nimport { unitOptionRenderer } from \"../../../utils/loadTypeUtils\";\nimport {\n getDateTimeFromTimeslot,\n isFullAddress,\n isShipmentUnits,\n piecesRenderer,\n} from \"../../../utils/utils\";\nimport {\n ACCEPTED_FILES,\n CarrierType,\n CarrierTypes,\n MAX_FILES,\n MAX_PHOTO_NUM_OUTBOUND,\n MAX_PHOTO_SIZE,\n MAX_PHOTO_SIZE_MSG,\n TransferOptions,\n TransferType,\n TrueOrFalse,\n UnitOptions,\n} from \"../../../utils/constants\";\nimport { AccountDropDown } from \"../../../components/common/AccountDropDown\";\nimport { accountNameRenderer } from \"../../../components/common/AccountNameRenderer\";\nimport { EventsCalendar } from \"../../../components/common/EventsCalendar\";\nimport { Scheduler } from \"../../../components/common/scheduler/Scheduler\";\nimport { OutboundCreateHelp } from \"./OutboundHelp\";\nimport { InventorySearchDialog } from \"./InventorySearchDialog\";\nimport { ValidateCreateButton } from \"./ValidaateCreateButton\";\nimport * as utils from \"./OutboundUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n mediaFull: {\n margin: \"0 auto 0\",\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n}));\n\nconst validateRequired = required();\n\nconst getAccountData = async (setAccounts, setLoading, notify) => {\n try {\n setLoading(true);\n let resp = await API.graphql(\n graphqlOperation(accountByActiveByNameDropDown, {\n reloadYardId: window.appUser?.reloadYardId,\n activeBusinessName: { beginsWith: { active: \"true\" } },\n limit: 1000,\n })\n );\n setAccounts(resp.data.accountByActiveByName.items);\n } catch (err) {\n logError(\"outboundShipment:OutboundCreate:getAccountData\", err, notify);\n } finally {\n setLoading(false);\n }\n};\n\nconst getTransferOptions = (account) => {\n if (account?.corporateAccount) {\n return TransferOptions.filter((itm) => itm.id === TransferType.INTERNAL);\n }\n return TransferOptions;\n};\n\nconst getTransferToAccounts = (form, account, accounts) => {\n if (!account || !accounts || !form) return [];\n const transfer = form.getFieldState(\"transfer\").value;\n debugger;\n\n if (account.corporateAccount) {\n return accounts.filter((itm) => !itm.corporateAccount);\n } else {\n if (transfer && transfer[0] === TransferType.EXTERNAL) {\n return accounts.filter((itm) => itm.corporateAccount);\n }\n }\n return accounts;\n};\n\nconst ShipmentSetupTab = ({\n account,\n setAccount,\n toAccount,\n setToAccount,\n billToAccount,\n setBillToAccount,\n setShipmentLineItems,\n ...props\n}) => {\n const form = useForm();\n const notify = useNotify();\n const classes = useStyles();\n const [accounts, setAccounts] = useState([]);\n const [accountIndex, setAccountIndex] = useState();\n const [loading, setLoading] = useState(true);\n const [magnifiedUrl, setMagnifiedUrl] = useState(null);\n const [selectedAddress, setSelectedAddress] = useState(null);\n const CarrierTypesReversed = [].concat(CarrierTypes).reverse();\n\n useEffect(() => {\n getAccountData(setAccounts, setLoading, notify);\n }, []);\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"billToAccountId\",\n (fieldState) => {\n const { change, ...rest } = fieldState;\n },\n { dirty: true, touched: true, valid: true, value: true }\n );\n\n const handleAccountChange = async (value) => {\n const accountId = value?.id;\n if (accountId) {\n try {\n debugger;\n setLoading(true);\n setShipmentLineItems({ items: [] });\n form.change(\"shipmentLineItems.items\", null);\n form.change(\"shipmentLineItems\", null);\n form.change(\"totalQuantity\", 0);\n form.change(\"billQuantity\", null);\n form.change(\"transferToAccountId\", \"\");\n\n // get selected account, reset toAccount not available dropdown\n const acctIdx = accounts?.findIndex((itm) => itm.id === accountId);\n accounts[acctIdx].not_available = true;\n if (Number.isFinite(accountIndex))\n accounts[accountIndex].not_available = undefined;\n setAccountIndex(acctIdx);\n\n let resp = await API.graphql(\n graphqlOperation(getAccount, { id: accountId })\n );\n const acct = resp.data.getAccount;\n setAccount(acct);\n setToAccount(null);\n form.change(\"transfer\", undefined);\n utils.setupAccountDetails(acct, null, null, form, setBillToAccount);\n } catch (err) {\n logError(\n \"outboundShipment:OutboundCreate:handleAccountChange\",\n err,\n notify\n );\n } finally {\n setLoading(false);\n }\n }\n };\n\n const handleTransferToAccountChange = async (event) => {\n debugger;\n try {\n if (!event.target.value) {\n setToAccount(null);\n // billToAccount = account\n utils.setupAccountDetails(account, null, null, form, setBillToAccount);\n } else {\n let resp = await API.graphql(\n graphqlOperation(getAccount, { id: event.target.value })\n );\n const newAccount = resp.data.getAccount;\n utils.setupAccountDetails(\n account,\n null,\n newAccount,\n form,\n setBillToAccount\n );\n setToAccount(newAccount);\n }\n } catch (err) {\n logError(\n \"outboundShipment:OutboundCreate:handleTransferToAccountChange\",\n err,\n notify\n );\n } finally {\n setLoading(false);\n }\n };\n\n const handleBillToAccountChange = async (event) => {\n // only applicable in context of corporateAccount.\n try {\n if (!event.target.value) {\n // billToAccount = account\n utils.setupAccountDetails(account, null, null, form, setBillToAccount);\n } else {\n // if source account is corporateAccount, use customer account for billing.\n let resp = await API.graphql(\n graphqlOperation(getAccount, { id: event.target.value })\n );\n const acct = resp.data.getAccount;\n // billToAccount = acct\n utils.setupAccountDetails(account, acct, null, form, setBillToAccount);\n\n // must be either transferTo or billTo\n form.change(\"transfer\", undefined);\n form.change(\"transferToAccountId\", \"\");\n }\n } catch (err) {\n logError(\n \"outboundShipment:OutboundCreate:handleBillToAccountChange\",\n err,\n notify\n );\n } finally {\n setLoading(false);\n }\n };\n\n const handleImageChange = (value) => {\n debugger;\n let error = null;\n\n if (value && Array.isArray(value) && value.length > 0) {\n const photosState = form.getFieldState(\"photos\");\n if (value.length > MAX_PHOTO_NUM_OUTBOUND) {\n error = `Max ${MAX_PHOTO_NUM_OUTBOUND} photos per shipment.`;\n let newValue = photosState.value.filter(\n (itm) =>\n itm.size <= MAX_PHOTO_SIZE || itm.rawFile?.size <= MAX_PHOTO_SIZE\n );\n newValue = newValue.slice(0, MAX_PHOTO_NUM_OUTBOUND);\n form.change(\"photos\", newValue);\n } else {\n const newValue = photosState.value.filter(\n (itm) =>\n itm.key ||\n itm.size <= MAX_PHOTO_SIZE ||\n itm.rawFile?.size <= MAX_PHOTO_SIZE\n );\n if (newValue.length !== value.length) error = MAX_PHOTO_SIZE_MSG;\n form.change(\"photos\", newValue);\n }\n } else if (value?.size > MAX_PHOTO_SIZE) {\n error = MAX_PHOTO_SIZE_MSG;\n form.change(\"photos\", null);\n }\n\n if (error) notify(error, \"warning\");\n };\n\n const handleMagnifyPhoto = (event) => {\n if (!magnifiedUrl) setMagnifiedUrl(event.target.lowsrc);\n else setMagnifiedUrl(null);\n };\n\n const handleTransferChange = (value) => {\n // single-select checkbox logic\n const transfer = value.length === 2 ? [value[1]] : value;\n form.change(\"transfer\", transfer);\n\n if (transfer?.length === 0) {\n // if not a transfer, then billToAccount = fromAccount.\n utils.setupAccountDetails(account, null, null, form, setBillToAccount);\n } else {\n form.change(\"billToAccountId\", \"\");\n form.change(\"transferToAccountId\", \"\");\n }\n };\n\n const handleShipToSelect = (newValue) => {\n setSelectedAddress(newValue);\n form.change(\"shipTo\", newValue);\n };\n\n const getAccountHelperText = () => {\n if (loading) return \"Loading...\";\n if (account?.corporateAccount) return \"Corporate Account\";\n return false;\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"row\" spacing={3}>\n <Grid item container direction=\"column\" spacing={0} lg={8}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <AccountDropDown\n source=\"accountId\"\n label=\"Account\"\n onAccountChange={(value) => handleAccountChange(value)}\n helperText={getAccountHelperText()}\n validate={validateRequired}\n allowEmpty={false}\n />\n </Grid>\n {account?.corporateAccount && isEmpty(formData.transfer) && (\n <Grid item xs={12} md={4}>\n <SelectInput\n source=\"billToAccountId\"\n label=\"Bill to account\"\n variant=\"outlined\"\n fullWidth\n choices={getTransferToAccounts(form, account, accounts)}\n disableValue=\"not_available\"\n optionText={accountNameRenderer}\n allowEmpty\n validate={validateRequired}\n disabled={!account}\n onChange={handleBillToAccountChange}\n helperText={false}\n />\n </Grid>\n )}\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"poNumber\"\n label=\"PO Number\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n validate={validateRequired}\n helperText={false}\n inputProps={{ style: { textTransform: \"uppercase\" } }}\n onBlur={() => utils.validatePoNumberUnicity(formData, notify)}\n />\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <CheckboxGroupInput\n source=\"transfer\"\n label=\"Inventory Transfer\"\n fullWidth\n choices={getTransferOptions(account)}\n onChange={handleTransferChange}\n disabled={!account}\n style={{ marginTop: 0 }}\n helperText={false}\n />\n </Grid>\n </Grid>\n {isEmpty(formData.transfer) ? (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} sm={6} md={4}>\n <SelectInput\n source=\"carrierType\"\n label=\"Carrier Type\"\n variant=\"outlined\"\n fullWidth\n disabled={!account}\n choices={CarrierTypesReversed}\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"carrier\"\n label=\"Carrier Name\"\n variant=\"outlined\"\n fullWidth\n validate={(value, allValues) =>\n allValues?.carrierType === CarrierType.RAIL &&\n validateRequired(value)\n }\n isRequired={formData.carrierType === CarrierType.RAIL} // Manually trigger asterisk\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"railCarNumber\"\n label={\n formData.carrierType === CarrierType.RAIL\n ? \"Railcar Number\"\n : \"Trailer Number\"\n }\n variant=\"outlined\"\n fullWidth\n parse={(v) => v.toUpperCase()}\n validate={(value, allValues) =>\n allValues?.carrierType === CarrierType.RAIL\n ? validateRequired(value)\n : undefined\n }\n required={formData.carrierType === CarrierType.RAIL} // Manually trigger asterisk\n inputProps={{ style: { textTransform: \"uppercase\" } }}\n helperText={false}\n />\n </Grid>\n {formData.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"pickupNumber\"\n label=\"Pickup Number\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => v.toUpperCase()}\n validate={\n account?.generatePickupNumber\n ? undefined\n : validateRequired\n }\n disabled={account?.generatePickupNumber}\n helperText={\n account?.generatePickupNumber ? \"Auto-generated\" : false\n }\n onBlur={() =>\n utils.validatePickupNumberUnicity(\n formData,\n account,\n notify\n )\n }\n />\n </Grid>\n )}\n {formData?.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} md={4}>\n <RadioButtonGroupInput\n source=\"mustTarp\"\n label=\"Must Tarp?\"\n row\n fullWidth\n choices={TrueOrFalse}\n defaultValue={utils.getMustTarpDefaultValue(account)}\n validate={\n formData?.carrierType === CarrierType.TRUCK\n ? validateRequired\n : undefined\n }\n style={{ marginTop: 0, marginLeft: 8 }}\n helperText={false}\n />\n </Grid>\n )}\n {formData?.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} md={4}>\n <Box mt={2}>\n <BooleanInput\n source=\"skipSignature\"\n label=\"Skip e-signatures\"\n row\n fullWidth\n helperText={false}\n />\n </Box>\n </Grid>\n )}\n <Grid item xs={12}>\n <Typography\n gutterBottom\n variant=\"overline\"\n color=\"textSecondary\"\n >\n Destination Address\n </Typography>\n {utils.getAddressBook(\n account,\n billToAccount,\n selectedAddress,\n handleShipToSelect\n )}\n {!selectedAddress && (\n <>\n <AddressInput\n source=\"shipTo\"\n variant=\"outlined\"\n fullWidth\n showBusinessName={true}\n parse={(v) => (v !== \"\" ? v : undefined)}\n allValues={formData}\n />\n <BooleanInput\n source=\"saveAddress\"\n label=\"Save to Address Book\"\n disabled={!isFullAddress(formData.shipTo)}\n />\n </>\n )}\n </Grid>\n <Grid item xs={12}>\n <TextInput\n source=\"instructions\"\n label=\"Special Instructions\"\n variant=\"outlined\"\n multiline\n fullWidth\n />\n </Grid>\n </Grid>\n ) : (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography\n gutterBottom\n variant=\"overline\"\n color=\"textSecondary\"\n >\n Destination Account\n </Typography>\n {formData?.transfer &&\n formData.transfer[0] === TransferType.INTERNAL ? (\n <Typography gutterBottom variant=\"body2\">\n An \"Internal Transfer\" changes beneficial ownership of\n goods which continue to remain in Yard's custody.\n </Typography>\n ) : (\n <Typography gutterBottom variant=\"body2\">\n An \"External Transfer\" removes goods from inventory and\n transfers to selected account.\n </Typography>\n )}\n </Grid>\n <Grid item xs={12} sm={4}>\n <SelectInput\n source=\"transferToAccountId\"\n label=\"To Account\"\n variant=\"outlined\"\n fullWidth\n choices={getTransferToAccounts(form, account, accounts)}\n disableValue=\"not_available\"\n optionText={accountNameRenderer}\n allowEmpty\n validate={validateRequired}\n disabled={!account}\n onChange={handleTransferToAccountChange}\n />\n </Grid>\n </Grid>\n )}\n <CustomFields\n {...props}\n accountFields={account?.outboundCustomFields}\n width={4}\n disabled={false}\n />\n </Grid>\n <Grid item container direction=\"row\" spacing={0} xs={false} md={4}>\n <Grid item xs={12}>\n <FileInput\n source=\"attachments\"\n label=\"ATTACHMENTS\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop files to\n upload, or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n multiple\n maxFiles={MAX_FILES}\n options={{ maxFiles: MAX_FILES }}\n onChange={(value) =>\n handleFileChange(\"attachments\", value, form, notify)\n }\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n <Grid item xs={12}>\n <FileInput\n source=\"bolFile\"\n label=\"BOL FILE\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop BOL file to\n upload, or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n onChange={(value) =>\n handleFileChange(\"bolFile\", value, form, notify)\n }\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n <Grid item xs={12}>\n <ImageInput\n source=\"photos\"\n label=\"PHOTOS\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachPhotoIcon fontSize=\"large\" /> <br /> Drop photos to\n upload, or click to select.\n </p>\n }\n accept=\"image/*\"\n multiple\n maxFiles={MAX_PHOTO_NUM_OUTBOUND}\n options={{ maxFiles: MAX_PHOTO_NUM_OUTBOUND }}\n onChange={handleImageChange}\n >\n <ImageField\n source=\"src\"\n title=\"title\"\n thumbWidth={250}\n thumbHeight={200}\n scaleThumb={true}\n fullSize={window.innerWidth}\n onClick={handleMagnifyPhoto}\n />\n </ImageInput>\n </Grid>\n <Grid item xs={12}>\n {magnifiedUrl ? (\n <Dialog\n open={magnifiedUrl}\n maxWidth=\"lg\"\n onClick={handleMagnifyPhoto}\n >\n <img\n src={magnifiedUrl}\n alt=\"Outbound Load\"\n className={classes.mediaFull}\n onClick={handleMagnifyPhoto}\n />\n </Dialog>\n ) : null}\n </Grid>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\n// #################################################################\n\nconst PickListTab = ({\n account,\n shipmentLineItems,\n setShipmentLineItems,\n ...props\n}) => {\n const form = useForm();\n const location = useLocation(); // used to refresh allInventories\n const notify = useNotify();\n const [calcError, setCalcError] = useState();\n const [weightError, setWeightError] = useState();\n const [isOpen, setIsOpen] = useState(false);\n const [allInventories, setAllInventories] = useState([]);\n const [isLoaded, setIsLoaded] = useState(false);\n\n useEffect(() => {\n // refresh on account change and InventorySearchDialog close\n if (account?.id && !isOpen) {\n utils.getAllInventories(\n account.id,\n setAllInventories,\n setIsLoaded,\n notify\n );\n }\n }, [location, isOpen]);\n\n const defaultSort = { field: \"sortKey\", order: \"ASC\" };\n const accountFields =\n account?.inventoryCustomFields?.length > 0\n ? account.inventoryCustomFields\n : [];\n const customGridFields = accountFields\n ? accountFields.map((field, index) => {\n return (\n <CustomField\n source={`inventory.customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={true}\n />\n );\n })\n : [];\n\n const updateShipmentLineItems = (shipmentItems) => {\n let defaultUnits = null;\n let billingUnits = null;\n debugger;\n\n if (shipmentItems.length > 0) {\n form.change(\"areaId\", shipmentItems[0].inventory.areaId);\n form.change(\"zoneId\", shipmentItems[0].inventory.zoneId);\n\n shipmentItems.forEach((item) => {\n if (!billingUnits) {\n billingUnits = item.inventory.product?.outboundBillingUnits\n ? item.inventory.product.outboundBillingUnits\n : account.outboundBillingUnits;\n }\n if (!defaultUnits && item.inventory.inventoryUnits)\n defaultUnits = item.inventory.inventoryUnits;\n else if (!defaultUnits)\n defaultUnits = item.inventory.inboundShipment.totalUnits;\n if (defaultUnits) form.change(\"totalUnits\", defaultUnits);\n if (billingUnits) {\n if (isShipmentUnits(billingUnits)) {\n form.change(\"billQuantity\", 1);\n }\n form.change(\"billUnits\", billingUnits);\n }\n });\n }\n\n setShipmentLineItems({ items: shipmentItems });\n form.change(\"shipmentLineItems.items\", shipmentItems);\n };\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"shipmentLineItems\",\n (fieldState) => {\n const { change, ...rest } = fieldState;\n },\n { dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"shipmentLineItems.items\",\n (fieldState) => {\n const { change, ...rest } = fieldState;\n },\n { dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"areaId\",\n (fieldState) => {\n const { change, ...rest } = fieldState;\n },\n { dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"zoneId\",\n (fieldState) => {\n const { change, ...rest } = fieldState;\n },\n { dirty: true, touched: true, valid: true, value: true }\n );\n\n form.registerField(\n \"totalUnits\",\n (fieldState) => {\n const { change, ...rest } = fieldState;\n },\n { dirty: true, touched: true, valid: true, value: true }\n );\n\n useEffect(() => {\n utils.handlePickListQty(form, setCalcError);\n utils.handlePickListWeight(form, setWeightError);\n // utils.handleOutboundQty(event, form, getSource, scopedFormData, setCalcError, setWeightError)\n }, [shipmentLineItems.items]);\n\n const listContext = useList({\n ...props,\n data: shipmentLineItems.items,\n ids: shipmentLineItems.items.map(({ id }) => id),\n loaded: true,\n sort: defaultSort,\n });\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container spacing={0}>\n <Grid item xs={12}>\n <ListContextProvider value={listContext}>\n <CustomizableDatagrid\n label=\"OUTBOUND INVENTORY:\"\n hasBulkActions={false}\n rowClick=\"expand\"\n expand={\n <utils.InventoryItemsArrayInput\n inventories={shipmentLineItems}\n setInventories={updateShipmentLineItems}\n />\n }\n storageProp={`OutboundShipmentLineItems_${account?.id}_large`}\n defaultColumns={[\n \"inventory.productName\",\n \"lotNumber\",\n \"inventory.quantityOnHand\",\n \"inventory.quantityCommitted\",\n \"inventory.quantityAvaiable\",\n \"quantity\",\n \"inventory.inventoryUnits\",\n ]}\n >\n {[\n <FunctionField\n source=\"inventory.productName\"\n label=\"Product Name\"\n sortable={true}\n render={(record) =>\n record && (\n <>\n {record.inventory.productName}{\" \"}\n {utils.getInfoBubble(formData, record)}{\" \"}\n </>\n )\n }\n />,\n <FunctionField\n source=\"pcs\"\n label=\"Pieces\"\n render={piecesRenderer}\n />,\n <TextField source=\"lotNumber\" label=\"Lot Number\" />,\n <TextField source=\"inventory.poNumber\" label=\"PO Number\" />,\n <NumberField\n source=\"inventory.quantityOnHand\"\n label=\"Qty. On Hand\"\n />,\n <NumberField\n source=\"inventory.quantityCommitted\"\n label=\"Qty. Committed\"\n />,\n <FunctionField\n source=\"inventory.quantityAvaiable\"\n label=\"Qty. Available\"\n sortable={false}\n render={(record) =>\n record &&\n `${\n record.inventory.quantityOnHand -\n record.inventory.quantityCommitted\n }`\n }\n />,\n <NumberField\n source=\"totalQuantityToPick\"\n label=\"Qty. Outbound\"\n />,\n <TextField source=\"inventory.inventoryUnits\" label=\"UOM\" />,\n ...customGridFields,\n <utils.ShipmentItemCreateActionButtons\n inventories={shipmentLineItems}\n setInventories={updateShipmentLineItems}\n />,\n ]}\n </CustomizableDatagrid>\n </ListContextProvider>\n </Grid>\n <Grid item xs={12}>\n <Button\n label=\"Add\"\n color=\"default\"\n disabled={!account}\n onClick={() => setIsOpen(true)}\n >\n <AddIcon />\n </Button>\n </Grid>\n <InventorySearchDialog\n {...props}\n title=\"Inventory Search\"\n form={form}\n account={account}\n allInventories={allInventories}\n isOpen={isOpen}\n setIsOpen={setIsOpen}\n isLoaded={isLoaded}\n updateShipment={updateShipmentLineItems}\n />\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Total Load\n </Typography>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"totalQuantity\"\n label=\"Total Quantity\"\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n initialValue={0}\n disabled\n InputProps={{ endAdornment: formData.totalUnits }}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"netWeight\"\n label=\"Net Weight\"\n variant=\"outlined\"\n fullWidth\n disabled\n helperText={weightError ? weightError : false}\n InputProps={{ endAdornment: formData.weightUnits }}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"billQuantity\"\n label=\"Billing Quantity\"\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n disabled={!formData.billUnits}\n validate={utils.validateBillQty}\n required={utils.isBillQtyRequired(formData)}\n helperText={calcError ? calcError : false}\n InputProps={{\n endAdornment: !utils.hasAllProducts(form) ? (\n <ProductLinkIcon />\n ) : null,\n }}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <SelectInput\n source=\"billUnits\"\n label=\"Billing UOM\"\n variant=\"outlined\"\n fullWidth\n choices={UnitOptions}\n optionText={unitOptionRenderer}\n allowEmpty\n onChange={() => utils.handleUnitChange(form, setCalcError)}\n />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst ShipmentTraceTab = ({\n account,\n selectedTimeslot,\n setSelectedTimeslot,\n ...props\n}) => {\n const form = useForm();\n const [isSchedulerOpen, setIsSchedulerOpen] = useState(false);\n const [eventType, setEventType] = useState(null);\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"scheduledDateTime\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n const handleSchedulerOpen = (event) => {\n event.preventDefault();\n event.stopPropagation();\n if (account) setIsSchedulerOpen(true);\n };\n\n const handleTimeslot = (timeslot) => {\n if (timeslot) {\n const scheduledDate = getDateTimeFromTimeslot(timeslot);\n form.change(\"scheduledDateTime\", scheduledDate);\n setSelectedTimeslot(timeslot);\n setEventType(timeslot.eventType);\n } else {\n form.change(\"scheduledDateTime\", null);\n setSelectedTimeslot(null);\n }\n };\n\n const getSchedulerHelperText = () => {\n const events = window.appUser.reloadYard.eventTypes?.items?.length;\n if (!events) return `Setup Schedule and Event Type to enable.`;\n return false;\n };\n\n return (\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={3}>\n <DateTimePicker\n label=\"Time Scheduled\"\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n fullWidth\n disabled={!account}\n onClickCapture={handleSchedulerOpen}\n value={\n !formData.scheduledDateTime\n ? null\n : formData.scheduledDateTime\n }\n format=\"MM/dd/yyyy hh:mm a\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <CreatedAtIcon />\n </InputAdornment>\n ),\n }}\n helperText={getSchedulerHelperText()}\n />\n {account && (\n <Scheduler\n account={account}\n eventType={eventType}\n setEventType={setEventType}\n selectedTimeslot={selectedTimeslot}\n setSelectedTimeslot={handleTimeslot}\n open={isSchedulerOpen}\n setIsOpen={setIsSchedulerOpen}\n resettable={true}\n />\n )}\n </Grid>\n <Grid item xs={12}>\n <EventsCalendar\n eventType={eventType}\n selectedTimeslot={selectedTimeslot}\n disableClick={false}\n />\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n </MuiPickersUtilsProvider>\n );\n};\n\nconst OutboundCreateActions = ({ basePath, ...props }) => (\n <TopToolbar>\n <HelpButton>\n <OutboundCreateHelp {...props} />\n </HelpButton>\n <BackButton basePath={basePath} />\n </TopToolbar>\n);\n\nconst validateCreate = (allValues) => {\n const errors = {};\n\n if (\n !isEmpty(allValues.transfer) &&\n allValues.transfer[0] === TransferType.INTERNAL &&\n allValues.shipmentLineItems?.items?.length === 0\n ) {\n errors.shipmentLineItems = {\n items: {\n message: \"A Transfer requires at least one valid Pick List line item.\",\n },\n };\n }\n return errors;\n};\n\nexport const OutboundCreate = (props) => {\n const [account, setAccount] = useState();\n const [toAccount, setToAccount] = useState();\n const [billToAccount, setBillToAccount] = useState();\n const [selectedTimeslot, setSelectedTimeslot] = useState();\n const [shipmentLineItems, setShipmentLineItems] = useState({ items: [] });\n\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New Outbound\" />}\n actions={<OutboundCreateActions {...props} />}\n >\n <TabbedForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={\n <OutboundCreateToolbar\n fromAccount={account}\n toAccount={toAccount}\n billToAccount={billToAccount}\n selectedTimeslot={selectedTimeslot}\n />\n }\n validate={validateCreate}\n >\n <FormTab path=\"\" label=\"Outbound Setup\">\n <ShipmentSetupTab\n {...props}\n account={account}\n setAccount={setAccount}\n toAccount={toAccount}\n setToAccount={setToAccount}\n billToAccount={billToAccount}\n setBillToAccount={setBillToAccount}\n setShipmentLineItems={setShipmentLineItems}\n />\n </FormTab>\n <FormTab path=\"pickList\" label=\"Pick List\">\n <PickListTab\n {...props}\n account={account}\n shipmentLineItems={shipmentLineItems}\n setShipmentLineItems={setShipmentLineItems}\n />\n </FormTab>\n <FormTab path=\"dispatch\" label=\"Dispatch\">\n <ShipmentTraceTab\n {...props}\n account={account}\n selectedTimeslot={selectedTimeslot}\n setSelectedTimeslot={setSelectedTimeslot}\n />\n </FormTab>\n <FormTab path=\"notes\" label=\"Notes\">\n <NotesTab />\n </FormTab>\n </TabbedForm>\n </Create>\n );\n};\n\nconst OutboundCreateToolbar = ({\n fromAccount,\n toAccount,\n billToAccount,\n selectedTimeslot,\n ...props\n}) => {\n return (\n <Toolbar {...props}>\n <ValidateCreateButton\n label=\"Save\"\n fromAccount={fromAccount}\n toAccount={toAccount}\n billToAccount={billToAccount}\n selectedTimeslot={selectedTimeslot}\n />\n </Toolbar>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { differenceInDays } from \"date-fns\";\nimport { isEmpty } from \"lodash\";\n\nimport { Backdrop, CircularProgress, makeStyles } from \"@material-ui/core\";\n\nimport {\n FormDataConsumer,\n SaveButton,\n useNotify,\n useRedirect,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { getCustomFieldsToSave } from \"../../../components/common/CustomFields\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n CarrierType,\n FilePaths,\n NoteType,\n OutboundStatus,\n Unit,\n} from \"../../../utils/constants\";\nimport { saveRemoveFile, saveRemoveFiles } from \"../../../utils/fileUtils\";\nimport {\n areTimeslotsEqual,\n deepRedirect,\n getLogState,\n historyAutoGen,\n validateAppointment,\n} from \"../../../utils/utils\";\nimport { resetTrackLayout } from \"../../../utils/locationUtils\";\nimport { ConditionalConfirm } from \"../../../components/common/ConditionalConfirm\";\nimport { updateInboundClient } from \"../inboundShipments/InboundUtils\";\nimport * as utils from \"./OutboundUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n}));\n\nexport const DialogSaveButton = ({\n record,\n basePath,\n backPath,\n selectedTimeslot,\n isSaving,\n setIsSaving,\n isDeleting,\n ...props\n}) => {\n const classes = useStyles();\n const form = useForm();\n const notify = useNotify();\n const redirect = useRedirect();\n const history = useHistory();\n const formState = form.getState();\n const [open, setOpen] = useState(false);\n const [confirmContent, setConfirmContent] = useState(\"\");\n\n const handleDialogConfirm = () => handleSave();\n const handleDialogClose = () => setOpen(false);\n\n const [onConfirm, setOnConfirm] = useState(() => handleDialogConfirm);\n\n const handleValidateSave = async (record, formData) => {\n const tempMsg = [];\n setOnConfirm(() => handleDialogConfirm); // Allow confirmation if no error\n debugger;\n\n const isValid = utils.formValidate(form, notify);\n if (isValid) {\n const oldStartDate = record.startDateTime;\n const newStartDate = formData.startDateTime;\n\n const duplicateNumbers = await utils.validateOutboundUnicity(formData);\n if (duplicateNumbers.length > 0) {\n tempMsg.push(\n \"Possible duplicate with this \" +\n duplicateNumbers.join(\" & \") +\n \" Number already exists.\"\n );\n }\n\n if (oldStartDate && !newStartDate) {\n tempMsg.push(\n \"Rolling back will reset all inventory records to initial state. Proceed?\"\n );\n }\n const actualWeight = utils.getActualWeight(formData);\n if (actualWeight !== -1) {\n if (actualWeight !== formData.netWeight) {\n if (\n record.shipmentLineItems.items[0].inventoryItems.items.length > 1\n ) {\n tempMsg.push(\n `Can't reconcile outbound net weight, please reconcile each picklist item manually.`\n );\n } else {\n const weightUnits = record.weightUnits;\n tempMsg.push(\n `Outbound net weight will be updated from ${formData.netWeight} to ${actualWeight} ${weightUnits}.`\n );\n }\n }\n }\n\n if (selectedTimeslot) {\n if (!areTimeslotsEqual(record.timeslot, selectedTimeslot)) {\n const isBooked = await validateAppointment(selectedTimeslot);\n if (isBooked) {\n tempMsg.push(\n `${selectedTimeslot.time} is no longer available. Please select a new time.`\n );\n setOnConfirm(null); // Prevent confirmation if there's an error\n } else {\n setOnConfirm(() => handleDialogConfirm); // Allow confirmation if no error\n }\n }\n }\n }\n\n if (tempMsg.length === 1) {\n setConfirmContent(tempMsg[0]);\n setOpen(true);\n } else if (tempMsg.length > 1) {\n setConfirmContent(\n <ul>\n {tempMsg.map((msg) => (\n <li>{msg}</li>\n ))}\n </ul>\n );\n setOpen(true);\n } else handleSave();\n };\n\n const handleSave = () => {\n setOpen(false);\n props.handleSubmit();\n };\n\n const transform = async (data) => {\n setIsSaving(true);\n data = { ...data };\n debugger;\n const actualWeight = utils.getActualWeight(data);\n if (\n actualWeight !== -1 &&\n data.shipmentLineItems.items[0].inventoryItems.items.length === 1\n ) {\n data.totalQuantity = actualWeight;\n data.netWeight = actualWeight;\n if (data.billUnits !== Unit.CAR && data.billUnits !== Unit.TL) {\n data.shipmentLineItems.items[0].totalQuantityToPick = actualWeight;\n data.billQuantity = utils.calcBillingQuantity(data);\n }\n }\n\n // TODO\n // check if still used and needed???\n if (data.shipmentLineItems?.items?.length > 0) {\n data.areaId = data.shipmentLineItems.items[0]?.inventory.areaId;\n data.zoneId = data.shipmentLineItems.items[0]?.inventory.zoneId;\n data.reloadYardCommodityId =\n data.shipmentLineItems.items[0]?.inventory?.reloadYardCommodity?.id;\n }\n\n // default billToAccountId if not set.\n data.billToAccountId = data.billToAccountId\n ? data.billToAccountId\n : record.accountId;\n\n // Set if TRANSFER\n data.transfer =\n typeof data.transfer === \"string\"\n ? data.transfer\n : isEmpty(data.transfer)\n ? null\n : data.transfer[0];\n if (data.transfer) {\n data.carrierType = CarrierType.TRUCK;\n data.railCarNumber = \"TRANSFER\";\n data.pickupNumber = \"TRANSFER\";\n data.carrier = \"TRANSFER\";\n data.mustTarp = false;\n delete data.shipTo;\n } else {\n data.transferToAccountId = null;\n if (data.shipTo?.state)\n data.shipTo.state = data.shipTo.state.toUpperCase();\n if (data.shipTo?.zipCode)\n data.shipTo.zipCode = data.shipTo.zipCode.toUpperCase();\n }\n\n // Set new Outbound Status & State\n if (data.departureDateTime && data.departureDateTime !== \"\") {\n data.status = OutboundStatus.RELEASED;\n if (data.carrierType === CarrierType.RAIL) {\n data.daysOnDemurrageClock = differenceInDays(\n new Date(data.departureDateTime),\n new Date(data.arrivalDateTime)\n );\n }\n } else if (data.endDateTime && data.endDateTime !== \"\")\n data.status = OutboundStatus.LOADED;\n else if (data.arrivalDateTime && data.arrivalDateTime !== \"\") {\n data.status = OutboundStatus.ARRIVED;\n data.state = \"\";\n data.daysOnDemurrageClock = 0;\n } else {\n data.status = OutboundStatus.PENDING;\n data.state = \"\";\n data.daysOnDemurrageClock = 0;\n if (data.trackId) {\n await resetTrackLayout(\n data,\n updateInboundClient,\n utils.updateOutboundClient\n );\n }\n }\n\n let isAdvance = false;\n let isRollback = false;\n let statusNote = null;\n const newStatus = data.status;\n const oldStatus = formState.initialValues.status;\n const oldStartDate = formState.initialValues.startDateTime;\n const newStartDate = formState.values.startDateTime;\n\n if (newStatus !== oldStatus) {\n // if ((newStatus === OutboundStatus.PENDING || newStatus === OutboundStatus.ARRIVED) && (oldStartDate !== null && oldStartDate !== \"\")) {\n if (oldStartDate && !newStartDate) {\n isRollback = true;\n\n statusNote = {\n text: `Shipment reolled back | status: ${data.status} ${getLogState(\n data.state\n )}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.SHIPMENT,\n };\n } else {\n isAdvance = true;\n statusNote = {\n text: `Shipment advanced | status: ${data.status} ${getLogState(\n data.state\n )}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.SHIPMENT,\n };\n }\n\n data.history = data.history\n ? [...data.history, statusNote]\n : [statusNote];\n }\n\n data.totalQuantity = data.totalQuantity || 0;\n\n data.customFields = getCustomFieldsToSave(\n data.customFields,\n data.account.outboundCustomFields\n );\n\n const ignoreList = [\n \"status\",\n \"carrierType\",\n \"transferToAccoundId\",\n \"createdAt\",\n ];\n const includeArrayList = [\"customFields\"];\n const includeObjectList = [\"shipTo\"];\n data.history = historyAutoGen(\n form,\n data,\n ignoreList,\n includeArrayList,\n includeObjectList\n );\n\n data.scheduledDateTime = data.scheduledDateTime\n ? data.scheduledDateTime\n : null;\n data.arrivalDateTime =\n data.arrivalDateTime && data.arrivalDateTime !== \"\"\n ? data.arrivalDateTime\n : null;\n data.endDateTime =\n data.endDateTime && data.endDateTime !== \"\" ? data.endDateTime : null;\n\n data.pickupNumber = data.pickupNumber ? data.pickupNumber : \"\"; // empty for rail\n\n if (data.shipTo?.state) data.shipTo.state = data.shipTo.state.toUpperCase();\n if (data.shipTo?.zipCode)\n data.shipTo.zipCode = data.shipTo.zipCode.toUpperCase();\n\n if (data.notes?.length > 0) {\n data.notes.forEach((element) => {\n if (!element.date) {\n element.type = NoteType.GENERIC;\n element.date = new Date();\n element.by = window.appUser?.fullName;\n }\n });\n } else data.notes = undefined;\n\n try {\n debugger;\n data.timeslot = selectedTimeslot;\n const response = await utils.updateLambdaOutbound(\n record,\n data,\n isAdvance,\n isRollback\n );\n if (response.error) throw response.error;\n\n const promises = [\n saveRemoveFiles(\n record,\n data,\n \"attachments\",\n `${FilePaths.OUTBOUND}/${Date.now()}`\n ),\n saveRemoveFile(\n record,\n data,\n \"bolFile\",\n `${FilePaths.OUTBOUND}/${Date.now()}`\n ),\n saveRemoveFiles(\n record,\n data,\n \"photos\",\n `${FilePaths.OUTBOUND}/${Date.now()}`\n ),\n ];\n await Promise.all(promises);\n\n if (\n newStatus !== oldStatus &&\n newStatus === OutboundStatus.RELEASED &&\n data.account?.posEmail\n ) {\n utils\n .emailPOS(\n data,\n data.account?.posEmail,\n null,\n data.account?.posPhotos,\n data.account?.posAttachments,\n notify\n )\n .catch((error) => {\n logError(\n \"outboundShipment:DialogSaveButton:transform:emailPOS\",\n error,\n false\n );\n });\n\n data.history = [\n ...data.history,\n {\n text: `POS sent to: ${data.account?.posEmail}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.GENERIC,\n },\n ];\n }\n } catch (err) {\n logError(\n \"outboundShipment:DialogSaveButton:transform\",\n err,\n notify,\n redirect\n );\n setIsSaving(false);\n return Promise.reject();\n }\n\n debugger;\n delete data.account;\n delete data.area;\n delete data.invoice;\n delete data.location;\n delete data.reloadYardCommodity;\n delete data.seals;\n delete data.shipmentLineItems;\n delete data.timeslot;\n\n // clear extra form fields\n delete data.customFieldSelect;\n delete data.saveAddress;\n\n // clear inventorySearchDialog filters\n delete data.lotType;\n delete data.searchArea;\n delete data.searchTerm;\n delete data.showAll;\n\n return data;\n };\n\n const onSuccess = ({ data }) => {\n notify(\"Outbound updated successfully\");\n setIsSaving(false);\n\n if (data.status === OutboundStatus.RELEASED) {\n redirect(`${basePath}/${record.id}/show`);\n } else {\n deepRedirect(history, backPath ? backPath : basePath);\n }\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\"outboundShipment:DialogSaveButton:onFailure\", error, notify);\n };\n\n const isPristine = () => {\n const formState = form.getState();\n return formState.pristine;\n };\n\n // Pass ...props, not ...rest to FormDataConsumer to include handleSubmitWithRedirect from props\n return (\n <FormDataConsumer>\n {({ formData, ...props }) => (\n <>\n <Backdrop className={classes.backdrop} open={isSaving}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <SaveButton\n {...props}\n label=\"Save\"\n submitOnEnter={false}\n undoable={false}\n disabled={isPristine() || isDeleting}\n saving={isSaving}\n handleSubmitWithRedirect={() =>\n handleValidateSave(record, formData)\n }\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <ConditionalConfirm\n isOpen={open}\n loading={isSaving}\n title=\"Save Confirmation\"\n content={confirmContent}\n onConfirm={onConfirm}\n onClose={handleDialogClose}\n />\n </>\n )}\n </FormDataConsumer>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { API } from \"aws-amplify\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport { Confirm, SaveButton, useNotify, useRedirect } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { getCustomFieldsToSave } from \"../../../components/common/CustomFields\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n FilePaths,\n NoteType,\n OutboundStatus,\n VALIDATION_MSG,\n} from \"../../../utils/constants\";\nimport { saveRemoveFiles } from \"../../../utils/fileUtils\";\nimport { getLogState, historyAutoGen } from \"../../../utils/utils\";\nimport * as utils from \"./OutboundUtils\";\nimport { ApproveIcon, RejectIcon } from \"../../../components/common\";\nimport { emailAdviceApprovedHTML } from \"./emailAdviceApprovedHTML\";\nimport { emailAdviceRejecteddHTML } from \"./emailAdviceRejecteddHTML\";\n\nconst useStyles = makeStyles((theme) => ({\n rejectButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n saveButton: {\n marginRight: theme.spacing(2),\n },\n}));\n\nexport const AdviceApproveRejectButton = ({\n record,\n basePath,\n isSaving,\n setIsSaving,\n isDeleting,\n ...props\n}) => {\n const classes = useStyles();\n const form = useForm();\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n const [message, setMessage] = useState(\"\");\n\n const formValidate = () => {\n const newFormState = form.getState();\n if (newFormState.invalid) notify(VALIDATION_MSG, \"warning\");\n };\n\n const handleValidateReject = () => {\n let tempMsg = null;\n const formData = form.getState().values;\n\n // check if rejection documented in notes\n const notesMaxIndex = formData.notes ? formData.notes.length - 1 : -1;\n if (\n notesMaxIndex < 0 ||\n (notesMaxIndex >= 0 &&\n (!formData.notes[notesMaxIndex] || formData.notes[notesMaxIndex].date))\n ) {\n tempMsg = \"Don't forget to document reason for rejection in the Notes! \";\n }\n\n if (tempMsg) {\n setMessage(tempMsg);\n setOpen(true);\n } else handleSave();\n };\n\n const handleDialogClose = () => setOpen(false);\n\n const handleDialogCconfirm = () => handleSave();\n\n const handleSave = () => {\n formValidate();\n\n setOpen(false);\n props.handleSubmit();\n };\n\n const transformApprove = async (data) => {\n setIsSaving(true);\n data = {\n ...data,\n status: OutboundStatus.PENDING,\n };\n data.history = [\n ...data.history,\n {\n text: `Advice approved | status: ${data.status} ${getLogState(\n data.state\n )}`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.SHIPMENT,\n },\n ];\n\n return await transform(data);\n };\n\n const transformReject = async (data) => {\n setIsSaving(true);\n data = {\n ...data,\n status: OutboundStatus.ADVICE_REJECTED,\n };\n data.history = [\n ...data.history,\n {\n text: `Advice rejected.`,\n by: window.appUser?.fullName,\n date: new Date(),\n type: NoteType.SHIPMENT,\n },\n ];\n\n return await transform(data);\n };\n\n const transform = async (data) => {\n debugger;\n data.transferToAccountId = null;\n\n data.customFields = getCustomFieldsToSave(\n data.customFields,\n data.account.outboundCustomFields\n );\n\n const ignoreList = [\n \"status\",\n \"carrierType\",\n \"transferToAccoundId\",\n \"createdAt\",\n ];\n const includeArrayList = [\"customFields\"];\n const includeObjectList = [\"shipTo\"];\n data.history = historyAutoGen(\n form,\n data,\n ignoreList,\n includeArrayList,\n includeObjectList\n );\n\n data.pickupNumber = data.pickupNumber ? data.pickupNumber : \"\";\n\n if (data.shipTo?.state) data.shipTo.state = data.shipTo.state.toUpperCase();\n if (data.shipTo?.zipCode)\n data.shipTo.zipCode = data.shipTo.zipCode.toUpperCase();\n\n if (data.notes?.length > 0) {\n data.notes.forEach((element) => {\n if (!element.date) {\n element.type = NoteType.GENERIC;\n element.date = new Date();\n element.by = window.appUser?.fullName;\n }\n });\n } else data.notes = undefined;\n\n try {\n const isAdvance = false;\n const isRollback = false;\n const response = await utils.updateLambdaOutbound(\n record,\n data,\n isAdvance,\n isRollback\n );\n if (response.error) throw response.error;\n\n await Promise.all([\n saveRemoveFiles(\n record,\n data,\n \"attachments\",\n `${FilePaths.OUTBOUND}/${Date.now()}`\n ),\n ]);\n } catch (err) {\n logError(\n \"outboundShipment:AdviceApproveRejectButton:transform\",\n err,\n notify,\n redirect\n );\n setIsSaving(false);\n return Promise.reject();\n }\n\n debugger;\n delete data.account;\n delete data.area;\n delete data.invoice;\n delete data.location;\n delete data.reloadYardCommodity;\n delete data.seals;\n delete data.shipmentLineItems;\n delete data.timeslot;\n\n // clear extra form fields\n delete data.customFieldSelect;\n delete data.saveAddress;\n\n // clear inventorySearchDialog filters\n delete data.lotType;\n delete data.searchArea;\n delete data.searchTerm;\n delete data.showAll;\n\n return data;\n };\n\n const onSuccess = ({ data }) => {\n debugger;\n let emailContent;\n let subject;\n\n if (data.status === OutboundStatus.PENDING) {\n subject = \"Outbound Advice Approved\";\n emailContent = emailAdviceApprovedHTML(\n window.appUser.firstName,\n window.appUser.email,\n window.appUser.reloadYard,\n data\n );\n } else {\n subject = \"Outbound Advice Rejected\";\n emailContent = emailAdviceRejecteddHTML(\n window.appUser.firstName,\n window.appUser.email,\n window.appUser.reloadYard,\n data\n );\n }\n\n API.post(\"transREST\", \"/sendEmail\", {\n body: {\n to: data.advisedBy,\n // replyTo: getReplyToAddress(),\n subject: subject,\n template: \"emailTemplate.html\",\n htmlContent: emailContent,\n },\n });\n\n notify(\"Advice updated successfully\");\n redirect(basePath);\n setIsSaving(false);\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\n \"outboundShipment:AdviceApproveRejectButton:onFailure\",\n error,\n notify\n );\n };\n\n return (\n <div>\n <SaveButton\n {...props}\n label=\"Approve\"\n className={classes.saveButton}\n submitOnEnter={false}\n undoable={false}\n disabled={isDeleting}\n icon={<ApproveIcon />}\n saving={isSaving}\n handleSubmitWithRedirect={handleSave}\n transform={transformApprove}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <SaveButton\n {...props}\n label=\"Reject\"\n variant=\"outlined\"\n color=\"default\"\n className={classnames(\"ra-save-button\", classes.rejectButton)}\n submitOnEnter={false}\n undoable={false}\n disabled={isDeleting}\n icon={<RejectIcon />}\n saving={isSaving}\n handleSubmitWithRedirect={handleValidateReject}\n transform={transformReject}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <Confirm\n isOpen={open}\n loading={isSaving}\n title=\"Save Confirmation\"\n content={message}\n onConfirm={handleDialogCconfirm}\n onClose={handleDialogClose}\n />\n </div>\n );\n};\n","export function emailAdviceApprovedHTML(\n fromName,\n fromEmail,\n reloadYard,\n outbound\n) {\n let appointmentDetails = \"\";\n let pickupNumber = \"\";\n\n if (outbound.scheduledDateTime) {\n const formattedDate = new Date(\n outbound.scheduledDateTime\n ).toLocaleDateString(\"en-US\", {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n appointmentDetails += `<strong>Appointment Date and Time:</strong> ${formattedDate}<br>`;\n }\n\n if (outbound.pickupNumber) {\n pickupNumber += `<strong>Pickup Number:</strong> ${outbound.pickupNumber}<br>`;\n }\n\n return `<!-- Begin HTML Content -->\n <h2> Your Outbound Shipment request is Confirmed! <br></h2>\n <hr style=\"background:#2d8cff; height: 8px; width: 60px; border-style: solid; border-color: #095484; border-width: 1px 0 0 0; border-radius: 8px;\" />\n <br><br>\n Here are the details:\n <br><br>\n ${pickupNumber}\n ${appointmentDetails}\n <strong>Facility:</strong> ${reloadYard.name}<br>\n <strong>Address:</strong> ${reloadYard.street}<br>\n ${reloadYard.city}, ${reloadYard.state} ${reloadYard.zipCode}\n <br><br>\n Please ensure to arrive on time and have all necessary documents ready for verification.\n <br><br><br>\n <table bgcolor=\"#FF5F0F\" style=\"border-radius:3px; border-spacing:0; margin:0 auto\">\n <tbody>\n <tr style=\"background:#FF5F0F;\">\n <td class=\"mobile-cta\" style=\"border: 0 solid #FF5F0F; display: inline-block; padding: 20px 45px; text-align: center; font-family:'Lato', Helvetica, sans-serif; font-size:15px; line-height:24px; color:#FFFFFF; font-weight:900; text-decoration: none; text-transform: uppercase; letter-spacing: .2em\">\n <a href=\"https://app.transloads.co/outboundShipments/${outbound.id}/show\"\n target=\"_blank\"\n rel=\"noreferrer\"\n style=\"color:#FFFFFF; text-decoration:none;\"\n >\n VIEW OUTBOUND\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n <br><br>\n <hr style=\"border-bottom:#CCCCCC 6px dotted; border-width: 0 0 6px 0;\">\n <br>\n If you have any questions, please contact ${fromName} at ${fromEmail}.\n <!-- End HTML Content -->`;\n}\n","export function emailAdviceRejecteddHTML(\n fromName,\n fromEmail,\n reloadYard,\n outbound\n) {\n let appointmentDetails = \"\";\n let pickupNumber = \"\";\n\n if (outbound.scheduledDateTime) {\n const formattedDate = new Date(\n outbound.scheduledDateTime\n ).toLocaleDateString(\"en-US\", {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n appointmentDetails += `<strong>Appointment Date and Time:</strong> ${formattedDate}<br>`;\n }\n\n if (outbound.pickupNumber) {\n pickupNumber += `<strong>Pickup Number:</strong> ${outbound.pickupNumber}<br>`;\n }\n\n return `<!-- Begin HTML Content -->\n <h2> Your Outbound Shipment request was rejected.<br></h2>\n <hr style=\"background:#2d8cff; height: 8px; width: 60px; border-style: solid; border-color: #095484; border-width: 1px 0 0 0; border-radius: 8px;\" />\n <br><br>\n Here are the details:\n <br><br>\n ${pickupNumber}\n ${appointmentDetails}\n <strong>Facility:</strong> ${reloadYard.name}<br>\n <strong>Address:</strong> ${reloadYard.street}<br>\n ${reloadYard.city}, ${reloadYard.state} ${reloadYard.zipCode}\n <br><br>\n Please review your outbound request and inspect NOTES tab for additional information.\n <br><br><br>\n <table bgcolor=\"#FF5F0F\" style=\"border-radius:3px; border-spacing:0; margin:0 auto\">\n <tbody>\n <tr style=\"background:#FF5F0F;\">\n <td class=\"mobile-cta\" style=\"border: 0 solid #FF5F0F; display: inline-block; padding: 20px 45px; text-align: center; font-family:'Lato', Helvetica, sans-serif; font-size:15px; line-height:24px; color:#FFFFFF; font-weight:900; text-decoration: none; text-transform: uppercase; letter-spacing: .2em\">\n <a href=\"https://app.transloads.co/outboundShipments/${outbound.id}/show\"\n target=\"_blank\"\n rel=\"noreferrer\"\n style=\"color:#FFFFFF; text-decoration:none;\"\n >\n VIEW OUTBOUND\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n <br><br>\n <hr style=\"border-bottom:#CCCCCC 6px dotted; border-width: 0 0 6px 0;\">\n <br>\n If you have any questions, please contact ${fromName} at ${fromEmail}.\n <!-- End HTML Content -->`;\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\n\nimport { TextField, Button, FunctionField } from \"react-admin\";\n\nimport {\n Card,\n CardMedia,\n CardContent,\n Grid,\n Typography,\n Dialog,\n Tooltip,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n PhotoIcon,\n TrainIcon,\n ExceptionIcon,\n} from \"../../../components/common\";\nimport { isAuthorized } from \"../../../utils/appUtils\";\nimport { AclType, CarrierType } from \"../../../utils/constants\";\nimport { getPhoto, getPhotoUrl } from \"../../../utils/fileUtils\";\nimport { getLocationFullName } from \"../../../utils/locationUtils\";\nimport { getFormTab } from \"../../../utils/utils\";\nimport { statusRenderer } from \"./OutboundUtils\";\nimport { orange } from \"@material-ui/core/colors\";\n\nconst useAsideStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n width: \"18em\",\n minWidth: \"18em\",\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(0.5),\n overflow: \"initial\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n photoButton: { marginLeft: -theme.spacing(1) },\n media: {\n margin: \"0 auto 0\",\n marginTop: theme.spacing(1),\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n maxHeight: \"20em\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n mediaFull: {\n margin: \"0 auto 0\",\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n exception: {\n marginTop: theme.spacing(0.5),\n },\n}));\n\nexport const OutboundAside = ({ backPath, history, record, ...props }) => {\n const classes = useAsideStyles();\n const imgRef = useRef();\n const location = useLocation(); // used to force refresh photos on every visit.\n const [photo, setPhoto] = useState();\n const [selectedPhoto, setSelectedPhoto] = useState();\n const [isOpen, setIsOpen] = useState(false);\n var tab = getFormTab(props);\n const linkBackPath = backPath\n ? [...backPath, props.location.pathname]\n : [props.location.pathname];\n\n useEffect(() => {\n if (record?.photos && record.photos.length > 0 && imgRef.current) {\n setSelectedPhoto(record.photos[0].key);\n getPhoto(record.photos[0].key, setPhoto, imgRef.current.clientWidth);\n }\n }, [imgRef, record, location.key]);\n\n const handleSelectPhoto = (evt) => {\n setSelectedPhoto(evt.currentTarget.id);\n getPhoto(evt.currentTarget.id, setPhoto, imgRef.current.clientWidth);\n };\n\n const handleMagnifyPhoto = () => {\n setIsOpen(!isOpen);\n };\n\n const handleTrackClick = () => {\n history.push({\n pathname: \"/trackManagementAdmin\",\n state: { backPath: backPath, railCarNumber: record.railCarNumber },\n });\n };\n\n if (!record || tab === \"1\") return null;\n return (\n <Card className={classes.root} ref={imgRef}>\n <CardContent>\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Status:\n </Typography>\n <br />\n <FunctionField\n source=\"status\"\n record={record}\n render={statusRenderer}\n />\n </Grid>\n {record.assignedTo && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Assigned To:\n </Typography>\n <br />\n <TextField source=\"assignedTo\" record={record} />\n </Grid>\n )}\n {record.hasException && (\n <>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Exceptions\n </Typography>\n </Grid>\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip title={\"Barcode Mismatch\"} placement=\"left\" arrow>\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.exception}>\n <Typography variant=\"body2\">Barcode Mismatch</Typography>\n </Grid>\n </Grid>\n </>\n )}\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Account:\n </Typography>\n <br />\n {isAuthorized(AclType.ACCOUNTS) ? (\n <Link\n to={{\n pathname: `/accounts/${record.accountId}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {record.accountName}\n </Typography>\n </Link>\n ) : (\n <Link\n to={{\n pathname: `/accounts/${record.accountId}/show`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {record.accountName}\n </Typography>\n </Link>\n )}\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n PO Number:\n </Typography>\n <br />\n <TextField source=\"poNumber\" record={record} />\n </Grid>\n {record.pickupNumber && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Pickup Number:\n </Typography>\n <br />\n <TextField source=\"pickupNumber\" record={record} />\n </Grid>\n )}\n {record.carrierType === CarrierType.RAIL && record.trackId && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Location:\n </Typography>\n <br />\n <FunctionField\n label=\"Location\"\n render={(record) => `${getLocationFullName(record.location)}`}\n />\n <Button label=\"MAP\" color=\"default\" onClick={handleTrackClick}>\n <TrainIcon fontSize=\"small\" />\n </Button>\n </Grid>\n )}\n {record.invoice && isAuthorized(AclType.INVOICES) && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Invoice\n </Typography>\n <br />\n <Link\n to={{\n pathname: `/invoices/${record.invoiceId}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {record.invoice.invoiceNumber} : $\n {record.invoice.total.toLocaleString(undefined, {\n style: \"currency\",\n currency: \"USD\",\n })}\n </Typography>\n </Link>\n </Grid>\n )}\n {record.bolNumber && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n BOL Number:\n </Typography>\n <br />\n <TextField source=\"bolNumber\" record={record} />\n </Grid>\n )}\n {record.photos && (\n <Grid item container direction=\"row\" xs={12}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Photos\n </Typography>\n <br />\n </Grid>\n {record.photos.map((file, index) => (\n <Grid item xs={3}>\n <Button\n label={`${index + 1}`}\n id={file.key}\n key={file.key}\n onClick={handleSelectPhoto}\n size=\"small\"\n className={classes.photoButton}\n >\n <PhotoIcon fontSize=\"small\" />\n </Button>\n </Grid>\n ))}\n <Grid item xs={12}>\n <CardMedia\n component=\"img\"\n image={photo}\n className={classes.media}\n onClick={handleMagnifyPhoto}\n />\n </Grid>\n </Grid>\n )}\n </Grid>\n </CardContent>\n {isOpen && (\n <Dialog open={isOpen} onClick={handleMagnifyPhoto} maxWidth=\"xl\">\n <img\n src={getPhotoUrl(selectedPhoto, window.innerWidth)}\n alt=\"Outbound Load\"\n className={classes.mediaFull}\n onClick={handleMagnifyPhoto}\n />\n </Dialog>\n )}\n </Card>\n );\n};\n","import React, { useState, useEffect } from \"react\";\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n IconButton,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n ArrayField,\n Button,\n Datagrid,\n TextField,\n useRecordContext,\n} from \"react-admin\";\nimport {\n CloseIcon,\n KeyboardOutlinedIcon,\n ScannerIcon,\n} from \"../../../components/common\";\n\nconst useStyles = makeStyles((theme) => ({\n dialogTitle: {\n display: \"flex\",\n paddingTop: \"5px\",\n paddingBottom: \"5px\",\n justifyContent: \"space-between\",\n },\n title: {\n paddingTop: theme.spacing(1),\n },\n dialogContent: {\n minHeight: \"50vh\",\n },\n tableCellIcon: {\n padding: \"3px\",\n textAlign: \"center\",\n height: \"33px\",\n },\n}));\nconst BooleanIconField = ({ source }) => {\n const record = useRecordContext();\n if (!record) return null;\n return record[source] ? (\n <ScannerIcon fontSize=\"small\" />\n ) : (\n <KeyboardOutlinedIcon fontSize=\"small\" />\n );\n};\n\nexport const SealNumbersDialog = ({ open, onClose, formData }) => {\n const [validSeals, setValidSeals] = useState({ items: [] });\n const classes = useStyles();\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n useEffect(() => {\n if (formData?.seals?.items) {\n const updatedSeals = formData.seals.items.filter((el) => el.validated);\n setValidSeals({ items: updatedSeals });\n }\n }, [formData?.seals?.items]);\n\n const handleClose = () => {\n onClose();\n };\n\n return (\n <Dialog\n open={open}\n onClose={handleClose}\n maxWidth={isSmall ? \"xxl\" : \"lg\"}\n fullWidth\n >\n <DialogTitle disableTypography className={classes.dialogTitle}>\n <Typography className={classes.title} variant=\"h6\">\n Seal Manager\n </Typography>\n <IconButton aria-label=\"close\" onClick={handleClose}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n <DialogContent dividers className={classes.dialogContent}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <ArrayField\n source=\"items\"\n label=\"Valid seals\"\n fullWidth\n record={validSeals}\n >\n <Grid container direction=\"row\">\n <Grid item xs={12} md={1}>\n <Datagrid>\n <BooleanIconField\n source=\"isScanned\"\n label=\" \"\n fullWidth\n emptyText=\" \"\n cellClassName={classes.tableCellIcon}\n />\n </Datagrid>\n </Grid>\n <Grid item xs={12} md={4}>\n <Datagrid>\n <TextField source=\"barcode\" fullWidth emptyText=\" \" />\n </Datagrid>\n </Grid>\n <Grid item xs={12} md={3}>\n <Datagrid>\n <TextField\n source=\"createdBy\"\n label=\"Entered By\"\n fullWidth\n emptyText=\" \"\n />\n </Datagrid>\n </Grid>\n <Grid item xs={12} md={4}>\n <Datagrid>\n <TextField\n source=\"description\"\n fullWidth\n emptyText=\" \"\n />\n </Datagrid>\n </Grid>\n </Grid>\n </ArrayField>\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} label=\"Close\" color=\"default\" />\n </DialogActions>\n </Dialog>\n );\n};\n","import React from \"react\";\nimport {\n Typography,\n Button,\n Dialog,\n DialogContent,\n DialogContentText,\n DialogActions,\n useMediaQuery,\n Box,\n} from \"@material-ui/core\";\nimport CancelOutlinedIcon from \"@material-ui/icons/CancelOutlined\";\nimport SignaturePad from \"react-signature-pad-wrapper\";\nimport { base64ToBlob } from \"../../../utils/fileUtils\";\n\nexport const Signature = ({\n open,\n handleClose,\n addSignature,\n invalidSignatureMessage,\n clearSignature,\n signatureRef,\n signatureImg,\n saving,\n}) => {\n const handleSave = () => {\n if (signatureRef.current) {\n const signatureDataUrl = signatureRef.current.toDataURL();\n const signatureBinaryImage64Img = signatureDataUrl.split(\",\")[1];\n const signatureBinaryImage = base64ToBlob(\n signatureBinaryImage64Img,\n \"image/png\"\n );\n addSignature({ signatureBinaryImage });\n }\n };\n\n const handleClear = () => {\n if (signatureRef.current) {\n signatureRef.current.clear();\n clearSignature();\n }\n };\n\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const setImage = (ref) => {\n if (ref) {\n ref.fromDataURL(signatureImg);\n }\n };\n\n return (\n <Dialog\n open={open}\n onClose={handleClose}\n maxWidth=\"xl\"\n style={isSmall ? {} : { margin: 32 }}\n fullWidth\n >\n <Box\n component=\"span\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n m={2}\n >\n <Typography variant=\"h6\">Capture Signature</Typography>\n <CancelOutlinedIcon fontSize=\"large\" onClick={handleClose} />\n </Box>\n <DialogContent>\n <DialogContentText>\n <div>\n <SignaturePad\n ref={(ref) => {\n setImage(ref);\n signatureRef.current = ref;\n }}\n options={{\n minWidth: 1,\n maxWidth: 3,\n penColor: \"rgb(0, 0, 0)\",\n }}\n />\n <div>\n <Typography color=\"error\">{invalidSignatureMessage}</Typography>\n </div>\n </div>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button disabled={saving} onClick={handleClose} color=\"default\">\n Cancel\n </Button>\n <Button\n disabled={saving}\n onClick={handleClear}\n color=\"primary\"\n autoFocus\n >\n Clear\n </Button>\n <Button\n disabled={saving}\n onClick={handleSave}\n color=\"primary\"\n autoFocus\n >\n Save\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { API, graphqlOperation, Storage } from \"aws-amplify\";\nimport { Box, Grid } from \"@material-ui/core\";\nimport { Button, useNotify } from \"react-admin\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { Signature } from \"./Signature\";\nimport { updateOutboundShipment } from \"../../../graphql/outbound/custom-mutations\";\nimport { generateSignatureKey } from \"../../../utils/fileUtils\";\nimport CheckIcon from \"@material-ui/icons/Check\";\nimport ClearIcon from \"@material-ui/icons/Clear\";\n\nconst updateShipmentSignature = async (record, signatureKey, key) => {\n const toUpdateShipment = {\n id: record.id,\n };\n toUpdateShipment[signatureKey] = key;\n await API.graphql(\n graphqlOperation(updateOutboundShipment, {\n input: toUpdateShipment,\n })\n );\n};\n\nconst storeSignature = async ({ key, binaryImage, notify }) => {\n try {\n return await Storage.put(key, binaryImage, {\n level: \"public\",\n contentType: \"image/png\",\n });\n } catch (err) {\n logError(\"OutboundShipments:OutboundEdit:storeSignature\", err, notify);\n }\n};\n\nconst processS3Sig = (blob, fn) => {\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onloadend = function () {\n const base64data = reader.result;\n fn(base64data);\n };\n};\n\nexport const OutboundSignature = ({ form, formData, record }) => {\n const [isCarrierSignatureModalOpen, setCarrierSignatureModalOpen] =\n useState(false);\n const [carrierSignatureImg, setCarrierSignatureImg] = useState(null);\n const [invalidYardSignatureMessage, setInvalidYardSignatureMessage] =\n useState(\"\");\n const carrierSignatureRef = useRef(null);\n\n const [isYardSignatureModalOpen, setYardSignatureModalOpen] = useState(false);\n const [yardSignatureImg, setYardSignatureImg] = useState(null);\n const [invalidCarrierSignatureMessage, setInvalidCarrierSignatureMessage] =\n useState(\"\");\n const yardSignatureRef = useRef(null);\n\n const [saving, setSaving] = useState(false);\n\n const notify = useNotify();\n\n const addSignature = async ({\n signatureBinaryImage,\n signatureKey,\n onClose,\n fn,\n }) => {\n try {\n setSaving(true);\n const key = generateSignatureKey(window.appUser?.reloadYardId);\n const s3Res = await storeSignature({\n key,\n binaryImage: signatureBinaryImage,\n notify,\n });\n if (!s3Res?.key) {\n return;\n }\n form.change(signatureKey, key);\n await updateShipmentSignature(record, signatureKey, key);\n getSignature(key, fn);\n } catch (err) {\n logError(\n `OutboundShipments:OutboundEdit:addSignature::${signatureKey}`,\n err,\n notify\n );\n } finally {\n onClose();\n setSaving(false);\n }\n };\n\n const getSignature = useCallback(\n async (key, fn) => {\n if (!key) return;\n try {\n let data = await Storage.get(key, { download: true });\n processS3Sig(data.Body, fn);\n } catch (err) {\n logError(\"OutboundShipment::getSignature\", err, notify);\n }\n },\n [notify]\n );\n\n useEffect(() => {\n if (record?.carrierSignatureKey) {\n getSignature(record.carrierSignatureKey, setCarrierSignatureImg);\n }\n }, [record?.carrierSignatureKey, getSignature]);\n\n useEffect(() => {\n if (record?.yardSignatureKey) {\n getSignature(record.yardSignatureKey, setYardSignatureImg);\n }\n }, [record?.yardSignatureKey, getSignature]);\n\n const toggleCarrierSignatureModal = () =>\n setCarrierSignatureModalOpen((prev) => !prev);\n\n const addCarrierSignature = ({ signatureBinaryImage }) => {\n if (!carrierSignatureRef.current) {\n setInvalidYardSignatureMessage(\"Invalid signature\");\n return;\n }\n addSignature({\n signatureBinaryImage,\n signatureKey: \"carrierSignatureKey\",\n onClose: toggleCarrierSignatureModal,\n fn: setCarrierSignatureImg,\n });\n };\n\n const toggleYardSignatureModal = () =>\n setYardSignatureModalOpen((prev) => !prev);\n\n const addYardSignature = ({ signatureBinaryImage }) => {\n if (!yardSignatureRef.current) {\n setInvalidCarrierSignatureMessage(\"Invalid signature\");\n return;\n }\n addSignature({\n signatureBinaryImage,\n signatureKey: \"yardSignatureKey\",\n onClose: toggleYardSignatureModal,\n fn: setYardSignatureImg,\n });\n };\n\n useEffect(() => {\n if (yardSignatureRef.current) {\n yardSignatureRef.current.fromDataURL(yardSignatureImg);\n }\n }, [yardSignatureRef, yardSignatureImg]);\n\n useEffect(() => {\n if (carrierSignatureRef.current) {\n carrierSignatureRef.current.fromDataURL(carrierSignatureImg);\n }\n }, [carrierSignatureRef, carrierSignatureImg]);\n return (\n <>\n <Grid item xs={12} md={4}>\n <Box mt={1}>\n <Button\n label=\"Yard Signature\"\n variant=\"outlined\"\n size=\"large\"\n fullWidth\n disabled={saving}\n onClick={toggleYardSignatureModal}\n endIcon={\n formData?.yardSignatureKey ? (\n <CheckIcon fontSize=\"large\" />\n ) : (\n <ClearIcon fontSize=\"large\" />\n )\n }\n />\n </Box>\n {isYardSignatureModalOpen && (\n <Signature\n open={isYardSignatureModalOpen}\n handleClose={toggleYardSignatureModal}\n saving={saving}\n signatureImg={yardSignatureImg}\n signatureRef={yardSignatureRef}\n addSignature={addYardSignature}\n invalidSignatureMessage={invalidYardSignatureMessage}\n clearSignature={() => {}}\n />\n )}\n </Grid>\n <Grid item xs={12} md={4}>\n <Box mt={1}>\n <Button\n label=\"Carrier Signature\"\n variant=\"outlined\"\n size=\"large\"\n fullWidth\n disabled={saving}\n onClick={toggleCarrierSignatureModal}\n endIcon={\n formData?.carrierSignatureKey ? (\n <CheckIcon fontSize=\"large\" />\n ) : (\n <ClearIcon fontSize=\"large\" />\n )\n }\n />\n </Box>\n {isCarrierSignatureModalOpen && (\n <Signature\n open={isCarrierSignatureModalOpen}\n handleClose={toggleCarrierSignatureModal}\n saving={saving}\n signatureImg={carrierSignatureImg}\n signatureRef={carrierSignatureRef}\n addSignature={addCarrierSignature}\n invalidSignatureMessage={invalidCarrierSignatureMessage}\n clearSignature={() => {}}\n />\n )}\n </Grid>\n </>\n );\n};\n","import React, { useState } from \"react\";\nimport { format } from \"date-fns\";\nimport { API, Storage } from \"aws-amplify\";\nimport {\n Backdrop,\n CircularProgress,\n makeStyles,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { Button, TopToolbar, useNotify, useRefresh } from \"react-admin\";\nimport { DocumentIcon } from \"../../../components/common\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport {\n getCustomFieldIdCleansed,\n parseCustomField,\n} from \"../../../components/common/CustomFields\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { SendPOSDialogButton } from \"../../../components/common/SendPOSDialogButton\";\nimport { isAuthorized, logError } from \"../../../utils/appUtils\";\nimport {\n AclType,\n FilePaths,\n OutboundStatus,\n Unit,\n} from \"../../../utils/constants\";\nimport { downloadFile, getTemplatePath } from \"../../../utils/fileUtils\";\nimport {\n calculateMbf,\n calculateSqf,\n convertUnits,\n getUnitName,\n isLumberCommodity,\n isPanelsCommodity,\n} from \"../../../utils/loadTypeUtils\";\nimport {\n extractCounter,\n getBarcodesString,\n trimDecimal,\n} from \"../../../utils/utils\";\n\nimport { OutboundEditHelp } from \"./OutboundHelp\";\nimport { CreateInvoiceButton } from \"./CreateInvoiceButton\";\nimport {\n handleSendPOS,\n incrementBOLCounter,\n updateOutboundClient,\n} from \"./OutboundUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: \"#fff\",\n },\n}));\n\nexport const OutboundEditActions = ({\n data,\n backPath,\n setBolFile,\n setBolNumber,\n ...props\n}) => {\n const classes = useStyles();\n const notify = useNotify();\n const refresh = useRefresh();\n const isMedium = useMediaQuery((theme) => theme.breakpoints.up(\"sm\"));\n const [loading, setLoading] = useState(false);\n\n const getProductData = (product, shippedQty, totalUnits) => {\n if (product) {\n const bolProduct = {\n name: product.name,\n productCode: product.productCode,\n category: product.category,\n defaultUnits: product.defaultUnits,\n defaultWeightUnits: product.defaultWeightUnits,\n billingUnits: product.outboundBillingUnits,\n width: product.width,\n length: product.length,\n height: product.height,\n };\n if (shippedQty && totalUnits) {\n Object.keys(Unit).forEach((key) => {\n if (key !== totalUnits) {\n const unitQty = convertUnits(shippedQty, totalUnits, key, product);\n if (unitQty?.value) bolProduct[key] = unitQty.value;\n } else {\n bolProduct[key] = shippedQty;\n }\n });\n }\n\n return bolProduct;\n } else return undefined;\n };\n\n const getBOLData = (data, bolNumber) => {\n const bolData = { ...data };\n const shipDate = bolData.departureDateTime\n ? new Date(bolData.departureDateTime).toLocaleDateString()\n : bolData.endDateTime\n ? new Date(bolData.endDateTime).toLocaleDateString()\n : bolData.arrivalDateTime\n ? new Date(bolData.arrivalDateTime).toLocaleDateString()\n : new Date(bolData.createDateTime).toLocaleDateString();\n const grossWeight =\n !isNaN(bolData.ladenWeight) && !isNaN(bolData.tareWeight)\n ? Number(bolData.ladenWeight) - Number(bolData.tareWeight)\n : \"\";\n\n const docData = {\n accountName: bolData.accountName,\n account: {\n name: bolData.accountName,\n street: bolData.account?.address?.street,\n city: bolData.account?.address?.city,\n state: bolData.account?.address?.state,\n zipCode: bolData.account?.address?.zipCode,\n phone: bolData.account?.phone,\n email: bolData.account?.email,\n },\n arrivalDate: bolData.arrivalDateTime\n ? format(new Date(bolData.arrivalDateTime), \"MM/dd/yyyy\")\n : undefined,\n arrivalTime: bolData.arrivalDateTime\n ? format(new Date(bolData.arrivalDateTime), \"hh:mm a\")\n : undefined,\n bolNumber: bolNumber,\n carrierName: bolData.carrier,\n endDate: bolData.endDateTime\n ? format(new Date(bolData.endDateTime), \"MM/dd/yyyy\")\n : undefined,\n endTime: bolData.endDateTime\n ? format(new Date(bolData.endDateTime), \"hh:mm a\")\n : undefined,\n grossWeight: grossWeight,\n ladenWeight: bolData.ladenWeight,\n mustTarp: bolData.mustTarp,\n netWeight: bolData.netWeight,\n pickupNumber: bolData.pickupNumber,\n poNumber: bolData.poNumber,\n railCarNumber: data.railCarNumber ? data.railCarNumber : null,\n reloadYard: {\n name: window.appUser.reloadYard.name,\n street: window.appUser.reloadYard.street,\n city: window.appUser.reloadYard.city,\n state: window.appUser.reloadYard.state,\n zipCode: window.appUser.reloadYard.zipCode,\n phone: window.appUser.reloadYard.phone,\n email: window.appUser.reloadYard.email,\n website: window.appUser.reloadYard.website,\n },\n releaseDateTime: bolData.departureDateTime\n ? format(new Date(bolData.departureDateTime), \"MM/dd/yyyy hh:mm a\")\n : undefined,\n releaseDate: bolData.departureDateTime\n ? format(new Date(bolData.departureDateTime), \"MM/dd/yyyy\")\n : undefined,\n releaseTime: bolData.departureDateTime\n ? format(new Date(bolData.departureDateTime), \"hh:mm a\")\n : undefined,\n scaleWeightUnits: bolData.scaleWeightUnits,\n shipDate: shipDate,\n shipTo: bolData.shipTo,\n startDate: bolData.startDateTime\n ? format(new Date(bolData.startDateTime), \"MM/dd/yyyy\")\n : undefined,\n startTime: bolData.startDateTime\n ? format(new Date(bolData.startDateTime), \"hh:mm a\")\n : undefined,\n tareWeight: bolData.tareWeight,\n totalQuantity: bolData.totalQuantity,\n units: bolData.totalUnits,\n uom: bolData.totalUnits,\n uomName: getUnitName(bolData.totalUnits),\n weightUnits: bolData.weightUnits,\n weightUom: bolData.weightUnits,\n weightUomName: getUnitName(bolData.weightUnits),\n };\n\n if (bolData.seals) {\n docData.sealNumbers = getBarcodesString(bolData.seals?.items);\n }\n\n // add outbound shipment custom fields\n if (bolData.customFields?.length > 0) {\n const customHeaderMap = new Map();\n bolData.customFields.forEach((field) => {\n const fieldValues = parseCustomField(field);\n\n if (customHeaderMap.has(fieldValues.name)) {\n docData.customFields[customHeaderMap.get(fieldValues.name)] =\n fieldValues.value;\n } else {\n const columnId = getCustomFieldIdCleansed(fieldValues.name);\n customHeaderMap.set(fieldValues.name, columnId);\n docData.customFields = {\n ...docData.customFields,\n [columnId]: fieldValues.value,\n };\n }\n });\n }\n\n if (bolData.shipmentLineItems?.items?.length > 0) {\n docData.lineItems = [];\n docData.pickList = [];\n\n let allMissingPCS = true;\n let somePCSNull = false;\n let totalPCS = 0;\n\n let totalMBF = 0;\n let allMissingMBF = true;\n let someMBFNull = false;\n\n let totalSF = 0;\n let allMissingSF = true;\n let someSFNull = false;\n\n // add shipmentLineItems, product, and inventory custom fields to each line item\n bolData.shipmentLineItems.items.forEach((lineItem, index) => {\n docData.lineItems[index] = {\n productCode: lineItem.inventory?.productCode,\n productName: lineItem.inventory?.productName,\n lotNumber: lineItem.lotNumber,\n quantity: lineItem.totalQuantityToPick,\n units: lineItem.inventory?.inventoryUnits\n ? lineItem.inventory.inventoryUnits\n : bolData.totalUnits,\n uom: lineItem.inventory?.inventoryUnits\n ? lineItem.inventory.inventoryUnits\n : bolData.totalUnits,\n uomName: getUnitName(\n lineItem.inventory?.inventoryUnits\n ? lineItem.inventory.inventoryUnits\n : bolData.totalUnits\n ),\n weight: lineItem.inventory?.weight,\n weightUnits: lineItem.inventory?.weightUnits,\n weightUom: lineItem.inventory?.weightUnits,\n weightUomName: getUnitName(lineItem.inventory?.weightUnits),\n };\n if (lineItem.inventory?.product) {\n docData.lineItems[index].product = getProductData(\n lineItem.inventory?.product,\n lineItem.totalQuantityToPick,\n lineItem.inventory?.inventoryUnits\n );\n }\n\n const ppu = lineItem.inventory?.pcs\n ? lineItem.inventory?.pcs\n : lineItem.inventory?.product?.pcs;\n docData.lineItems[index].ppu = ppu;\n\n // PCS Calculation\n if (ppu == null) {\n somePCSNull = true;\n } else {\n allMissingPCS = false;\n\n if (bolData.totalUnits === Unit.UNIT) {\n const pcs = trimDecimal(ppu * lineItem.totalQuantityToPick);\n docData.lineItems[index].pcs = pcs;\n totalPCS = trimDecimal(totalPCS + pcs);\n } else {\n docData.lineItems[index].pcs = ppu;\n totalPCS = trimDecimal(totalPCS + ppu);\n }\n }\n\n const loadType =\n lineItem.inventory?.reloadYardCommodityId ||\n bolData.reloadYardCommodityId;\n if (isLumberCommodity(loadType)) {\n const mbf = calculateMbf(lineItem.inventory);\n if (mbf == null) {\n someMBFNull = true;\n } else {\n allMissingMBF = false;\n docData.lineItems[index].mbf = mbf;\n totalMBF = trimDecimal(totalMBF + mbf);\n }\n } else if (isPanelsCommodity(loadType)) {\n const sf = calculateSqf(lineItem.inventory);\n if (sf == null) {\n someSFNull = true;\n } else {\n allMissingSF = false;\n docData.lineItems[index].sf = sf;\n totalSF = trimDecimal(totalSF + sf);\n }\n }\n\n if (lineItem.inventory?.customFields?.length > 0) {\n const customHeaderMap = new Map();\n lineItem.inventory.customFields.forEach((field) => {\n const fieldValues = parseCustomField(field);\n\n if (customHeaderMap.has(fieldValues.name)) {\n docData.lineItems[index].customFields[\n customHeaderMap.get(fieldValues.name)\n ] = fieldValues.value;\n } else {\n const columnId = getCustomFieldIdCleansed(fieldValues.name);\n customHeaderMap.set(fieldValues.name, columnId);\n docData.lineItems[index].customFields = {\n ...docData.lineItems[index].customFields,\n [columnId]: fieldValues.value,\n };\n }\n });\n }\n });\n\n // add individual PickList inventoryItems\n docData.lineItems.forEach((lineItem, index) => {\n const shipmentLineItem = bolData.shipmentLineItems.items[index];\n\n shipmentLineItem.inventoryItems?.items.forEach((itm) => {\n const pickListItem = {\n ...lineItem,\n quantity: itm.quantityToPick,\n location: itm.inventoryItem?.locationFullName,\n };\n docData.pickList.push(pickListItem);\n });\n });\n\n // Finalize totalPCS\n if (!allMissingPCS) {\n if (somePCSNull) {\n docData.totalPCS = \"N/A\";\n } else {\n docData.totalPCS = totalPCS;\n }\n }\n\n // Finalize totalMBF\n if (!allMissingMBF) {\n if (someMBFNull) {\n docData.totalMBF = \"N/A\";\n } else {\n docData.totalMBF = totalMBF;\n }\n }\n\n // Finalize totalSF\n if (!allMissingSF) {\n if (someSFNull) {\n docData.totalSF = \"N/A\";\n } else {\n docData.totalSF = totalSF;\n }\n }\n }\n\n debugger;\n return docData;\n };\n\n const generateBOL = async () => {\n setLoading(true);\n debugger;\n\n try {\n let bolNumber = data.bolNumber;\n\n if (!bolNumber) {\n let counter;\n if (data.pickupNumber && data.account?.generatePickupNumber) {\n counter = extractCounter(data.pickupNumber);\n if (!counter) counter = await incrementBOLCounter();\n } else {\n counter = await incrementBOLCounter();\n }\n bolNumber = `BOL-${counter}`;\n setBolNumber && setBolNumber(bolNumber);\n }\n\n const docData = getBOLData(data, bolNumber);\n docData.carrierSignature = data.carrierSignatureKey\n ? {\n _type: \"image\",\n source: data.carrierSignatureKey,\n format: \"image/png\",\n width: 100,\n height: 50,\n }\n : undefined;\n docData.logo = window.appUser.reloadYard.logoImage\n ? {\n _type: \"image\",\n source: window.appUser.reloadYard.logoImage.key,\n format: \"image/png\",\n width: 70,\n height: 70,\n }\n : undefined;\n docData.transloadsLogo = {\n _type: \"image\",\n source: `${FilePaths.TEMPLATES}/${FilePaths.TRANSLOADS_LOGO}`,\n format: \"image/png\",\n width: 100,\n height: 25,\n };\n docData.yardSignature = data.yardSignatureKey\n ? {\n _type: \"image\",\n source: data.yardSignatureKey,\n format: \"image/png\",\n width: 100,\n height: 50,\n }\n : undefined;\n\n const templatePath = getTemplatePath(data.account, \"bolTemplate\");\n const outputPath = `${data.reloadYardId}/${FilePaths.OUTBOUND}/${\n data.id\n }/${bolNumber}_${new Date()\n .toLocaleDateString()\n .replaceAll(\"/\", \"_\")}.docx`;\n\n const response = await API.post(\"transREST\", \"/createDocx\", {\n body: {\n templateKey: templatePath,\n data: docData,\n outputFileKey: outputPath,\n },\n });\n\n if (response.body?.key) {\n const file = await Storage.get(response.body.key, { download: true });\n downloadFile(file, response.body.key);\n setBolFile && setBolFile(response.body);\n\n try {\n await updateOutboundClient({\n ...data,\n bolFile: response.body,\n bolNumber: bolNumber,\n });\n } catch (error) {\n notify(\"BOL created with errors.\", \"warning\");\n logError(\n \"OutboundEdit:OutboundEditActions:generateBOL:updateOutbound\",\n error,\n false\n );\n setLoading(false);\n return;\n }\n\n if (response.success) notify(\"BOL created successfully.\");\n else if (response.warnings) {\n notify(\"BOL created with errors.\", \"warning\");\n logError(\n \"OutboundEdit:OutboundEditActions:generateBOL:warning\",\n response.warnings,\n false,\n null\n );\n }\n } else {\n logError(\n \"OutboundEdit:OutboundEditActions:generateBOL:error\",\n response.error,\n notify,\n null\n );\n setLoading(false);\n return;\n }\n } catch (error) {\n logError(\n \"OutboundEdit:OutboundEditActions:generateBOL\",\n error,\n notify,\n null\n );\n } finally {\n setLoading(false);\n !setBolFile && refresh(); // refresh read-only view\n }\n };\n\n return (\n <TopToolbar>\n <Backdrop className={classes.backdrop} open={loading}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <HelpButton>\n <OutboundEditHelp {...props} bolData={getBOLData(data, \"BOL-number\")} />\n </HelpButton>\n {isMedium &&\n isAuthorized(AclType.INVOICES) &&\n data.status !== OutboundStatus.ADVICE_PENDING && (\n <CreateInvoiceButton {...props} record={data} backPath={backPath} />\n )}\n {data.status !== OutboundStatus.ADVICE_PENDING && (\n <Button\n label=\"Create BOL\"\n color=\"primary\"\n disabled={loading}\n onClick={generateBOL}\n >\n <DocumentIcon />\n </Button>\n )}\n {data?.status === OutboundStatus.RELEASED && (\n <SendPOSDialogButton\n label=\"POS\"\n title=\"Send POS\"\n record={data}\n email={data.account?.posEmail}\n enclosePhotosDefault={data.account?.posPhotos}\n encloseDocsDefault={data.account?.posAttachments}\n handleSend={handleSendPOS}\n />\n )}\n <BackButton {...props} backPath={backPath} />\n </TopToolbar>\n );\n};\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useHistory, useLocation } from \"react-router-dom\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n accountByActiveByNameDropDown,\n getAccount,\n} from \"../../../graphql/account/custom-queries\";\n\nimport { isEmpty } from \"lodash\";\nimport DateFnsUtils from \"@date-io/date-fns\";\nimport { differenceInDays } from \"date-fns\";\n\nimport {\n Backdrop,\n Box,\n CircularProgress,\n Dialog,\n Grid,\n Hidden,\n InputAdornment,\n makeStyles,\n TextField as TextFieldMui,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { MuiPickersUtilsProvider, DateTimePicker } from \"@material-ui/pickers\";\nimport { orange } from \"@material-ui/core/colors\";\n\nimport {\n BooleanInput,\n Button,\n CheckboxGroupInput,\n Edit,\n FileInput,\n FormDataConsumer,\n FormTab,\n FunctionField,\n ImageInput,\n IconButtonWithTooltip,\n ListContextProvider,\n Loading,\n minValue,\n number,\n NumberField,\n NumberInput,\n RadioButtonGroupInput,\n required,\n SelectInput,\n TabbedForm,\n TextField,\n TextInput,\n Toolbar,\n useEditController,\n useList,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport {\n AddIcon,\n AttachFileIcon,\n AttachPhotoIcon,\n CalendarIcon,\n CollectedAtIcon,\n CreatedAtIcon,\n DeliveredAtIcon,\n ExceptionIcon,\n PlacedAtIcon,\n ReleasedAtIcon,\n SealIcon,\n TimerIcon,\n TimerOffIcon,\n} from \"../../../components/common\";\nimport { AddressInput } from \"../../../components/common/AddressInput\";\nimport { ChecklistDialog } from \"../../../components/common/ChecklistDialog\";\nimport {\n CustomField,\n CustomFields,\n} from \"../../../components/common/CustomFields\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HistoryTab } from \"../../../components/common/HistoryTab\";\nimport { ImageField } from \"../../../components/common/ImageField\";\nimport { NotesTab } from \"../../../components/common/NotesTab\";\nimport { ProductLinkIcon } from \"../../../components/common/ProductLinkIcon\";\nimport CustomizableDatagrid from \"../../../components/common/ra-customizable-datagrid\";\n\nimport { isAuthorized, logError } from \"../../../utils/appUtils\";\nimport {\n ACCEPTED_FILES,\n AclType,\n CarrierType,\n CarrierTypes,\n MAX_FILES,\n MAX_PHOTO_NUM_OUTBOUND,\n MAX_PHOTO_SIZE,\n MAX_PHOTO_SIZE_MSG,\n OutboundState,\n OutboundStatus,\n ShipmentLineItemStatus,\n TransferOptions,\n TrueOrFalse,\n UnitOptions,\n UnitWeightOptions,\n} from \"../../../utils/constants\";\nimport { handleFileChange } from \"../../../utils/fileUtils\";\nimport {\n isBulkCommodity,\n unitOptionRenderer,\n} from \"../../../utils/loadTypeUtils\";\nimport {\n deepRedirect,\n getBackPath,\n getDateTimeFromTimeslot,\n getHoursMinutesDuration,\n isShipmentUnits,\n piecesRenderer,\n trimDecimal,\n} from \"../../../utils/utils\";\nimport {\n EventsCalendar,\n EventsCalendarDialog,\n} from \"../../../components/common/EventsCalendar\";\nimport { Scheduler } from \"../../../components/common/scheduler/Scheduler\";\nimport { accountNameRenderer } from \"../../../components/common/AccountNameRenderer\";\nimport { DialogSaveButton } from \"./DialogSaveButton\";\nimport { AdviceApproveRejectButton } from \"./AdviceApproveRejectButton\";\nimport { DeepDeleteButton } from \"./DeepDeleteButton\";\nimport { OutboundAside } from \"./OutboundAside\";\nimport { InventorySearchDialog } from \"./InventorySearchDialog\";\nimport { SealNumbersDialog } from \"./SealNumberDialog\";\nimport { OutboundSignature } from \"./OutboundSignatures\";\nimport { OutboundEditActions } from \"./OutboundEditActions\";\nimport * as utils from \"./OutboundUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: \"#fff\",\n },\n mediaFull: {\n margin: \"0 auto 0\",\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n icons: {\n position: \"relative\",\n top: theme.spacing(0.4),\n marginRight: theme.spacing(1),\n color: orange[500],\n },\n}));\n\nconst validateRequired = required();\nconst validateTareWeight = [\n required(),\n number(),\n minValue(0, \"Must be 0 or greater\"),\n];\nconst validateLadenWeight = [\n required(),\n number(),\n minValue(0, \"Must be greater than 0\"),\n];\nconst validateEmptyMinNum = [number(), minValue(0, \"Must be 0 or greater\")];\nconst validateLoadedMinNum = [number(), minValue(0, \"Must be greater than 0\")];\n\nconst validateLadenGreaterThanTare = (value, allValues) => {\n if (allValues?.tareWeight && value) {\n if (value < allValues.tareWeight) {\n return { message: `Laden weight must be greater than tare weight.` };\n }\n }\n return undefined;\n};\n\nconst validateRailCarNumber = (value, allValues) => {\n if (\n (allValues?.carrierType === CarrierType.RAIL ||\n allValues?.arrivalDateTime) &&\n !value\n ) {\n // return an object just like the other validators\n return { message: `Required`, isRequired: true };\n }\n return undefined;\n};\nconst isRailcarNumberRequired = (formData) =>\n validateRailCarNumber(null, formData) ? true : false;\n\nconst validateCarrierName = (value, allValues) => {\n if (\n (allValues.carrierType === CarrierType.RAIL ||\n allValues.arrivalDateTime ||\n allValues.status === OutboundStatus.PLACED ||\n allValues.status === OutboundStatus.LOADED ||\n allValues.status === OutboundStatus.RELEASED) &&\n !value\n ) {\n // return an object just like the other validators\n return { message: `Required`, isRequired: true };\n }\n return undefined;\n};\nconst isCarrierNameRequired = (formData) =>\n validateCarrierName(null, formData) ? true : false;\n\n// Validate Pick List Row and return Validation Errors that will prevent form submission\nconst validatePickListRow = (data) => {\n const errors = {};\n let helperText = false;\n\n if (data && data.status === ShipmentLineItemStatus.NEW) {\n if (\n typeof data.totalQuantityToPick === `undefined` ||\n Number(data.totalQuantityToPick) <= 0\n ) {\n errors.totalQuantityToPick = true;\n helperText = \"Qty. To Pick must be greater than 0\";\n }\n if (data.quantityAvailable < 0) {\n errors.totalQuantityToPick = true;\n helperText = \"Qty. To Pick exceetds Available.\";\n }\n errors.helperText = helperText;\n }\n return errors;\n};\n\nconst getAccountData = async (\n record,\n setLoading,\n setAccounts,\n setError,\n notify\n) => {\n try {\n setLoading(true);\n let resp = await API.graphql(\n graphqlOperation(accountByActiveByNameDropDown, {\n reloadYardId: window.appUser?.reloadYardId,\n activeBusinessName: { beginsWith: { active: \"true\" } },\n limit: 1000,\n })\n );\n const accountData = resp.data.accountByActiveByName.items;\n const acctIdx = accountData?.findIndex((itm) => itm.id === record.accounId);\n accountData[acctIdx] = { ...accountData[acctIdx], not_available: true };\n setAccounts(accountData);\n } catch (err) {\n setError(true);\n logError(\"outboundShipment:OutboundEdit:getAccountData\", err, notify);\n } finally {\n setLoading(false);\n }\n};\n\nconst ShipmentSetupTab = ({\n record,\n bolFile,\n bolNumber,\n backPath,\n history,\n ...props\n}) => {\n const classes = useStyles();\n const form = useForm();\n const gridRef = useRef(null);\n const location = useLocation(); // used to force refresh photos on every visit\n const notify = useNotify();\n const [accounts, setAccounts] = useState([]);\n const [toAccount, setToAccount] = useState();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n const [selectedAddress, setSelectedAddress] = useState(null);\n const [thumbWidth, setThumbWidth] = useState(64);\n const [magnifiedUrl, setMagnifiedUrl] = useState(null);\n const CarrierTypesReversed = [].concat(CarrierTypes).reverse();\n const [isChecklistDialogOpen, setIsChecklistDialogOpen] = useState(false);\n\n form.registerField(\n \"bolNumber\",\n (fieldState) => {\n const { change, ...rest } = fieldState;\n },\n { dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"transferToAccountName\",\n (fieldState) => {\n const { change, ...rest } = fieldState;\n },\n { dirty: true, touched: true, valid: true, value: true }\n );\n // form.registerField('billToAccountId',\n // fieldState => { const { change, ...rest } = fieldState },\n // { dirty: true, touched: true, valid: true, value: true }\n // );\n form.registerField(\n \"checklist\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"shipTo\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n useEffect(() => {\n if (record.account && !record.account.corporateAccount) {\n getAccountData(record, setLoading, setAccounts, setError, notify);\n }\n }, [record]);\n\n useEffect(() => {\n if (bolFile?.key) form.change(\"bolFile\", bolFile);\n }, [bolFile]);\n\n useEffect(() => {\n if (bolNumber) form.change(\"bolNumber\", bolNumber);\n }, [bolNumber]);\n\n useEffect(() => {\n if (gridRef.current) {\n // approximately 9 photos + margin\n const size = gridRef.current.offsetWidth / 9 - 2 * 9;\n setThumbWidth(size);\n }\n }, [gridRef.current, location.key]);\n\n const getToAccountHelperText = (record) => {\n if (error) return \"Error loading...\";\n if (loading) return \"Loading...\";\n if (!record) return \"Select Account...\";\n return record?.address\n ? `${record.address.street}, ${record.address.city}, ${record.address.state} ${record.address.zipCode}`\n : null;\n };\n\n const handleTransferToAccountChange = async (event) => {\n if (event.target.value !== \"\") {\n try {\n setLoading(true);\n let resp = await API.graphql(\n graphqlOperation(getAccount, { id: event.target.value })\n );\n const newAccount = resp.data.getAccount;\n setToAccount(newAccount);\n form.change(\"transferToAccountName\", newAccount.businessName);\n } catch (err) {\n setError(true);\n logError(\n \"outboundShipment:OutboundEdit:handleToAccountChange\",\n error,\n notify\n );\n }\n setLoading(false);\n }\n };\n\n const handleTransferChange = (value, formData) => {\n debugger;\n if (isEmpty(value)) {\n // corporateAccount can only do internal Transfer (not need for edit)\n if (formData.carrier === \"TRANSFER\") form.change(\"carrier\", null);\n if (formData.pickupNumber === \"TRANSFER\")\n form.change(\"pickupNumber\", null);\n if (formData.railCarNumber === \"TRANSFER\")\n form.change(\"railCarNumber\", null);\n }\n };\n\n const handleShipToSelect = (newValue) => {\n setSelectedAddress(newValue);\n form.change(\"shipTo\", newValue);\n };\n\n const handleImageChange = (value) => {\n debugger;\n let error = null;\n\n if (value && Array.isArray(value) && value.length > 0) {\n const photosState = form.getFieldState(\"photos\");\n if (value.length > MAX_PHOTO_NUM_OUTBOUND) {\n error = `Max ${MAX_PHOTO_NUM_OUTBOUND} photos per shipment.`;\n let newValue = photosState.value.filter(\n (itm) =>\n itm.size <= MAX_PHOTO_SIZE || itm.rawFile?.size <= MAX_PHOTO_SIZE\n );\n newValue = newValue.slice(0, MAX_PHOTO_NUM_OUTBOUND);\n form.change(\"photos\", newValue);\n } else {\n const newValue = photosState.value.filter(\n (itm) =>\n itm.key ||\n itm.size <= MAX_PHOTO_SIZE ||\n itm.rawFile?.size <= MAX_PHOTO_SIZE\n );\n if (newValue.length !== value.length) error = MAX_PHOTO_SIZE_MSG;\n form.change(\"photos\", newValue);\n }\n } else if (value?.size > MAX_PHOTO_SIZE) {\n error = MAX_PHOTO_SIZE_MSG;\n form.change(\"photos\", null);\n }\n\n if (error) notify(error, \"warning\");\n };\n\n const handleMagnifyPhoto = (event) => {\n if (!magnifiedUrl) setMagnifiedUrl(event.target.lowsrc);\n else setMagnifiedUrl(null);\n };\n\n const getChecklist = (formData) => {\n if (record.account?.outboundChecklist) {\n return (\n <Box component=\"span\">\n <Button\n onClick={() => setIsChecklistDialogOpen(true)}\n label=\"Checklist\"\n />\n <ChecklistDialog\n model={formData}\n definition={record.account?.outboundChecklist}\n isOpen={isChecklistDialogOpen}\n setOpen={setIsChecklistDialogOpen}\n saveModel={() => {\n form.change(\"checklist\", [...formData.checklist]);\n setTimeout(\n () => form.change(\"checklist\", [...formData.checklist]),\n 50\n );\n }}\n title=\"Outbound Checklist\"\n ></ChecklistDialog>\n </Box>\n );\n }\n\n return (\n <Button\n onClick={() =>\n deepRedirect(\n history,\n `/accounts/${record.accountId}/dispatch`,\n history.location.pathname,\n backPath,\n { tab: 1 }\n )\n }\n label=\"Create Checklist\"\n />\n );\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"accountName\"\n label=\"Account\"\n variant=\"outlined\"\n disabled\n fullWidth\n helperText={false}\n />\n </Grid>\n {!record.account?.corporateAccount &&\n record.status !== OutboundStatus.ADVICE_PENDING && (\n <Grid item xs={12} md={6}>\n <CheckboxGroupInput\n source=\"transfer\"\n label=\"Inventory Transfer\"\n fullWidth\n disabled={record.status === OutboundStatus.RELEASED}\n style={{ marginTop: 0 }}\n choices={[TransferOptions[1]]}\n helperText={false}\n onChange={(value) => handleTransferChange(value, formData)}\n format={(v) => (typeof v === \"string\" ? [v] : v)}\n parse={(v) => (typeof v === \"string\" ? [v] : v)}\n />\n </Grid>\n )}\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"poNumber\"\n label=\"PO Number\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n disabled={record.status === OutboundStatus.RELEASED}\n validate={validateRequired}\n helperText={false}\n inputProps={{ style: { textTransform: \"uppercase\" } }}\n onBlur={() => utils.validatePoNumberUnicity(formData, notify)}\n />\n </Grid>\n </Grid>\n {isEmpty(formData.transfer) ? (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} sm={6} md={4}>\n <SelectInput\n source=\"carrierType\"\n label=\"Carrier Type\"\n variant=\"outlined\"\n fullWidth\n disabled={record.status === OutboundStatus.RELEASED}\n choices={CarrierTypesReversed}\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"carrier\"\n label=\"Carrier Name\"\n variant=\"outlined\"\n fullWidth\n disabled={\n record.carrier && record.status === OutboundStatus.RELEASED\n }\n validate={validateCarrierName}\n required={isCarrierNameRequired(formData)}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"railCarNumber\"\n label={\n formData.carrierType === CarrierType.RAIL\n ? \"Railcar Number\"\n : \"Trailer Number\"\n }\n variant=\"outlined\"\n fullWidth\n disabled={\n record.railCarNumber &&\n record.status === OutboundStatus.RELEASED\n }\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n validate={validateRailCarNumber}\n required={isRailcarNumberRequired(formData)}\n helperText={false}\n inputProps={{ style: { textTransform: \"uppercase\" } }}\n />\n </Grid>\n {formData.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"pickupNumber\"\n label=\"Pickup Number\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => v.toUpperCase()}\n validate={validateRequired}\n disabled={\n record.account?.generatePickupNumber ||\n record.status === OutboundStatus.RELEASED\n }\n helperText={\n record.account?.generatePickupNumber\n ? \"Auto-generated\"\n : false\n }\n onBlur={() =>\n utils.validatePickupNumberUnicity(\n formData,\n record.account,\n notify\n )\n }\n />\n </Grid>\n )}\n {formData?.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} md={4}>\n <RadioButtonGroupInput\n source=\"mustTarp\"\n label=\"Must Tarp?\"\n row\n fullWidth\n validate={\n formData?.carrierType === CarrierType.TRUCK\n ? validateRequired\n : undefined\n }\n choices={TrueOrFalse}\n disabled={record.status === OutboundStatus.RELEASED}\n style={{ marginTop: 0, marginLeft: 8 }}\n helperText={false}\n />\n </Grid>\n )}\n {formData?.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} md={4}>\n <Box mt={2}>\n <BooleanInput\n source=\"skipSignature\"\n label=\"Skip e-signatures\"\n row\n fullWidth\n disabled={record.status === OutboundStatus.RELEASED}\n helperText={false}\n />\n </Box>\n </Grid>\n )}\n <Grid item xs={12}>\n <Typography\n gutterBottom\n variant=\"overline\"\n color=\"textSecondary\"\n >\n Destination Address\n </Typography>\n {record.status !== OutboundStatus.RELEASED &&\n utils.getAddressBook(\n record.account,\n record.billToAccount,\n selectedAddress,\n handleShipToSelect\n )}\n {!selectedAddress && (\n <>\n <AddressInput\n source=\"shipTo\"\n variant=\"outlined\"\n fullWidth\n showBusinessName={true}\n parse={(v) => (v !== \"\" ? v : undefined)}\n disabled={record.status === OutboundStatus.RELEASED}\n allValues={formData}\n />\n {utils.getSaveAddressControl(\n record.account,\n record.billToAccount,\n formData\n )}\n </>\n )}\n </Grid>\n <Grid item xs={10}>\n <TextInput\n source=\"instructions\"\n label=\"Special Instructions\"\n variant=\"outlined\"\n multiline\n fullWidth\n />\n </Grid>\n {/* <Grid item xs={2}>{getChecklist(formData)}</Grid> */}\n </Grid>\n ) : (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Grid item xs={12}>\n <Typography\n gutterBottom\n variant=\"overline\"\n color=\"textSecondary\"\n >\n Destination Account\n </Typography>\n <Typography gutterBottom variant=\"body2\">\n An \"External Transfer\" removes goods from inventory and\n transfers to selected account.\n </Typography>\n </Grid>\n <Grid item xs={12} sm={4}>\n <SelectInput\n source=\"transferToAccountId\"\n label=\"To Account\"\n variant=\"outlined\"\n fullWidth\n choices={accounts || []}\n allowEmpty\n disableValue=\"not_available\"\n optionText={accountNameRenderer}\n onChange={handleTransferToAccountChange}\n disabled={formData.status === OutboundStatus.RELEASED}\n validate={validateRequired}\n helperText={getToAccountHelperText(toAccount)}\n />\n </Grid>\n </Grid>\n </Grid>\n )}\n <CustomFields\n {...props}\n recordFields={record.customFields}\n accountFields={record.account?.outboundCustomFields}\n disabled={formData.status === OutboundStatus.RELEASED}\n width={4}\n />\n <Grid container direction=\"row\" spacing={2}>\n <Hidden smDown>\n <Grid item xs={6}>\n <FileInput\n source=\"attachments\"\n label=\"ATTACHMENTS\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop files to\n upload, or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n multiple\n maxFiles={MAX_FILES}\n options={{ maxFiles: MAX_FILES }}\n onChange={(value) =>\n handleFileChange(\"attachments\", value, form, notify)\n }\n helperText={false}\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n </Hidden>\n <Grid item xs={12} md={6}>\n <FileInput\n source=\"bolFile\"\n label=\"BOL FILE\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Create BOL, or\n drop a File to upload, or click to select.\n </p>\n }\n accept={ACCEPTED_FILES}\n onChange={(value) =>\n handleFileChange(\"bolFile\", value, form, notify)\n }\n disabled={false}\n helperText={false}\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n {record.status !== OutboundStatus.ADVICE_PENDING && (\n <Hidden smDown>\n <Grid item xs={12} ref={gridRef}>\n <ImageInput\n source=\"photos\"\n label=\"PHOTOS\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachPhotoIcon fontSize=\"large\" /> <br /> Drop photos\n to upload, or click to select.\n </p>\n }\n accept=\"image/*\"\n multiple\n maxFiles={MAX_PHOTO_NUM_OUTBOUND}\n options={{ maxFiles: MAX_PHOTO_NUM_OUTBOUND }}\n onChange={handleImageChange}\n >\n <ImageField\n source=\"src\"\n title=\"title\"\n thumbWidth={thumbWidth}\n scaleThumb={true}\n fullSize={window.innerWidth}\n onClick={handleMagnifyPhoto}\n />\n </ImageInput>\n {magnifiedUrl ? (\n <Dialog\n open={magnifiedUrl}\n maxWidth=\"lg\"\n onClick={handleMagnifyPhoto}\n >\n <img\n src={magnifiedUrl}\n alt=\"Outbound Shipment\"\n className={classes.mediaFull}\n onClick={handleMagnifyPhoto}\n />\n </Dialog>\n ) : null}\n </Grid>\n </Hidden>\n )}\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst RenderExceptionIcon = ({ record }) => {\n const classes = useStyles();\n\n const hasException = useMemo(() => {\n return record?.inventoryItems?.items?.some(\n (item) => item?.hasException || item?.barcodeException\n );\n }, [record?.inventoryItems?.items]);\n\n if (hasException)\n return <ExceptionIcon fontSize=\"small\" className={classes.icons} />;\n return null;\n};\n\nconst PickListTab = ({ record, ...props }) => {\n const { account } = record;\n const form = useForm();\n const history = useHistory();\n const location = useLocation(); // used to refresh allInventories\n const notify = useNotify();\n const [calcError, setCalcError] = useState();\n const [weightError, setWeightError] = useState();\n const [isOpen, setIsOpen] = useState(false);\n const [allInventories, setAllInventories] = useState([]);\n const [isLoaded, setIsLoaded] = useState(false);\n\n useEffect(() => {\n // fetch on open and refresh on InventorySearchDialog close\n if (record?.accountId && !isOpen) {\n utils.getAllInventories(\n record.accountId,\n setAllInventories,\n setIsLoaded,\n notify\n );\n }\n }, [location, isOpen]);\n\n const defaultSort = { field: \"sortKey\", order: \"ASC\" };\n const [shipmentLineItems, setShipmentLineItems] = useState(\n record.shipmentLineItems\n );\n const accountFields =\n record.account?.inventoryCustomFields?.length > 0\n ? record.account.inventoryCustomFields\n : [];\n const customGridFields = accountFields\n ? accountFields.map((field, index) => {\n return (\n <CustomField\n source={`inventory.customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={true}\n />\n );\n })\n : [];\n\n const updateShipmentLineItems = (shipmentItems) => {\n let defaultUnits = null;\n let billingUnits = null;\n debugger;\n\n if (shipmentItems.length > 0) {\n form.change(\"areaId\", shipmentItems[0].inventory.areaId);\n form.change(\"zoneId\", shipmentItems[0].inventory.zoneId);\n\n shipmentItems.forEach((item) => {\n if (!billingUnits) {\n billingUnits = item.inventory.product?.outboundBillingUnits\n ? item.inventory.product.outboundBillingUnits\n : account.outboundBillingUnits;\n }\n if (!defaultUnits && item.inventory.inventoryUnits)\n defaultUnits = item.inventory.inventoryUnits;\n else if (!defaultUnits)\n defaultUnits = item.inventory.inboundShipment.totalUnits;\n if (defaultUnits) form.change(\"totalUnits\", defaultUnits);\n if (billingUnits) {\n if (isShipmentUnits(billingUnits)) {\n form.change(\"billQuantity\", 1);\n }\n form.change(\"billUnits\", billingUnits);\n }\n });\n }\n\n setShipmentLineItems({ items: shipmentItems });\n form.change(\"shipmentLineItems.items\", shipmentItems);\n };\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"shipmentLineItems\",\n (fieldState) => {\n const { change, ...rest } = fieldState;\n },\n { dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"shipmentLineItems.items\",\n (fieldState) => {\n const { change, ...rest } = fieldState;\n },\n { dirty: true, touched: true, valid: true, value: true }\n );\n\n useEffect(() => {\n debugger;\n if (record?.shipmentLineItems?.items)\n setShipmentLineItems(record.shipmentLineItems);\n }, [record.shipmentLineItems]);\n\n useEffect(() => {\n // handle Qty Change\n if (shipmentLineItems.items !== record.shipmentLineItems.items) {\n utils.handlePickListQty(form, setCalcError);\n utils.handlePickListWeight(form, setWeightError);\n // utils.handleOutboundQty(event, form, getSource, scopedFormData, setCalcError, setWeightError)\n }\n }, [shipmentLineItems.items]);\n\n const listContext = useList({\n ...props,\n data: shipmentLineItems.items,\n ids: shipmentLineItems.items.map(({ id }) => id),\n loaded: true,\n sort: defaultSort,\n });\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container spacing={0}>\n <Grid item xs={12}>\n <ListContextProvider value={listContext}>\n <CustomizableDatagrid\n label=\"OUTBOUND INVENTORY:\"\n hasBulkActions={false}\n rowClick=\"expand\"\n expand={\n <utils.InventoryItemsEditGridInput\n inventories={shipmentLineItems}\n setInventories={updateShipmentLineItems}\n />\n }\n storageProp={`OutboundShipmentLineItems_${record.account?.id}_large`}\n defaultColumns={[\n \"inventory.productName\",\n \"lotNumber\",\n \"inventory.quantityOnHand\",\n \"inventory.quantityCommitted\",\n \"inventory.quantityAvaiable\",\n \"quantity\",\n \"inventory.inventoryUnits\",\n ]}\n >\n {[\n <FunctionField\n source=\"inventory.productName\"\n label=\"Product Name\"\n sortable={true}\n render={(record) =>\n record?.inventory && (\n <>\n <RenderExceptionIcon record={record} />\n {record.inventory.productName}\n {utils.getInfoBubble(formData, record)}{\" \"}\n </>\n )\n }\n />,\n <FunctionField\n source=\"pcs\"\n label=\"Pieces\"\n render={piecesRenderer}\n />,\n <TextField source=\"lotNumber\" label=\"Lot Number\" />,\n <TextField source=\"inventory.poNumber\" label=\"PO Number\" />,\n <NumberField\n source=\"inventory.quantityOnHand\"\n label=\"Qty. On Hand\"\n />,\n <NumberField\n source=\"inventory.quantityCommitted\"\n label=\"Qty. Committed\"\n />,\n <FunctionField\n source=\"inventory.quantityAvaiable\"\n label=\"Qty. Available\"\n sortable={false}\n render={(record) =>\n record &&\n `${trimDecimal(\n record.inventory?.quantityOnHand -\n record.inventory?.quantityCommitted\n )}`\n }\n />,\n <NumberField\n source=\"totalQuantityToPick\"\n label=\"Qty. Outbound\"\n />,\n <TextField source=\"inventory.inventoryUnits\" label=\"UOM\" />,\n ...customGridFields,\n <utils.ShipmentItemEditActionButtons\n {...props}\n form={form}\n outbound={record}\n history={history}\n inventories={shipmentLineItems}\n setInventories={updateShipmentLineItems}\n />,\n ]}\n </CustomizableDatagrid>\n </ListContextProvider>\n </Grid>\n <Grid item xs={12}>\n <Button\n label=\"Add\"\n color=\"default\"\n onClick={() => setIsOpen(true)}\n disabled={\n record.status === OutboundStatus.LOADED ||\n record.status === OutboundStatus.RELEASED\n }\n >\n <AddIcon />\n </Button>\n </Grid>\n\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Total Load\n </Typography>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"totalQuantity\"\n label=\"Total Quantity\"\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n disabled\n InputProps={{ endAdornment: formData.totalUnits }}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"netWeight\"\n label=\"Net Weight\"\n variant=\"outlined\"\n fullWidth\n disabled\n helperText={weightError ? weightError : false}\n InputProps={{ endAdornment: formData.weightUnits }}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"billQuantity\"\n label=\"Billing Quantity\"\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n disabled={!formData.billUnits || record.invoiceId}\n validate={utils.validateBillQty}\n required={utils.isBillQtyRequired(formData)}\n helperText={calcError ? calcError : false}\n InputProps={{\n endAdornment: !utils.hasAllProducts(form) ? (\n <ProductLinkIcon />\n ) : null,\n }}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <SelectInput\n source=\"billUnits\"\n label=\"Billing UOM\"\n variant=\"outlined\"\n fullWidth\n disabled={record.invoiceId}\n choices={UnitOptions}\n optionText={unitOptionRenderer}\n allowEmpty\n onChange={() => utils.handleUnitChange(form, setCalcError)}\n />\n </Grid>\n </Grid>\n </Grid>\n <InventorySearchDialog\n {...props}\n title=\"Inventory Search\"\n form={form}\n account={record.account}\n allInventories={allInventories}\n isOpen={isOpen}\n setIsOpen={setIsOpen}\n isLoaded={isLoaded}\n setIsLoaded={setIsLoaded}\n updateShipment={updateShipmentLineItems}\n />\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst AdviceDispatchTab = ({ record, ...props }) => {\n const form = useForm();\n debugger;\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"scheduledDateTime\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n return (\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12} md={4}>\n <DateTimePicker\n label=\"Time Scheduled\"\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n fullWidth\n disabled\n value={\n !formData.scheduledDateTime\n ? null\n : formData.scheduledDateTime\n }\n format=\"MM/dd/yyyy hh:mm a\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <CreatedAtIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12}>\n {record.timeslot?.eventType && (\n <EventsCalendar\n eventType={record.timeslot.eventType}\n selectedTimeslot={record.timeslot}\n disableClick={false}\n />\n )}\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n </MuiPickersUtilsProvider>\n );\n};\n\nconst ShipmentDispatchTab = ({\n record,\n selectedTimeslot,\n setSelectedTimeslot,\n ...props\n}) => {\n const form = useForm();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const [weightError, setWeightError] = useState(false);\n const [estNetWeight, setEstNetWeight] = useState(record.netWeight);\n const [isSchedulerOpen, setIsSchedulerOpen] = useState(false);\n const [isCalendarOpen, setIsCalendarOpen] = useState(false);\n const [openSeals, setOpenSeal] = useState(false);\n const [eventType, setEventType] = useState(record?.timeslot?.eventType);\n\n useEffect(() => {\n if (record?.timeslot) {\n setSelectedTimeslot(record.timeslot);\n setEventType(record.timeslot.eventType);\n }\n }, [record]);\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"scheduledDateTime\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"arrivalDateTime\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"startDateTime\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"endDateTime\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"departureDateTime\",\n (fieldState) => {\n const { blur, click, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"deliveryDateTime\",\n (fieldState) => {\n const { blur, click, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"collectedDateTime\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n const handlePlaceTime = (value, formData) => {\n form.change(\"arrivalDateTime\", value);\n if (!value || value === \"\") {\n if (formData.tareWeight) form.change(\"tareWeight\", null);\n if (formData.startDateTime) form.change(\"startDateTime\", value);\n if (formData.endDateTime) form.change(\"endDateTime\", value);\n }\n };\n\n const handleStartTime = (value, formData) => {\n form.change(\"startDateTime\", value);\n\n if (!value || value === \"\") {\n if (formData.endDateTime) form.change(\"endDateTime\", value);\n }\n };\n\n const handleEndTime = (value) => {\n form.change(\"endDateTime\", value);\n\n if (!value || value === \"\") {\n form.change(\"startDateTime\", value);\n }\n };\n\n const getActualGross = (formData) => {\n if (\n formData.tareWeight !== null &&\n formData.tareWeight >= 0 &&\n formData.ladenWeight\n ) {\n return `Gross Weight: ${formData.ladenWeight - formData.tareWeight} ${\n formData.weightUnits ? formData.weightUnits : formData.scaleWeightUnits\n }`;\n } else return false;\n };\n\n const handleScaleUnitsChange = (event, formData) => {\n setEstNetWeight(\n utils.calcNetWeight(formData, setWeightError, event.target.value)\n );\n };\n\n const handleSchedulerOpen = (event, formData) => {\n event.preventDefault();\n event.stopPropagation();\n if (!formData.arrivalDateTime) setIsSchedulerOpen(true);\n };\n\n const handleTimeslot = (timeslot) => {\n if (timeslot) {\n const scheduledDate = getDateTimeFromTimeslot(timeslot);\n form.change(\"scheduledDateTime\", scheduledDate);\n setSelectedTimeslot(timeslot);\n } else {\n form.change(\"scheduledDateTime\", null);\n setSelectedTimeslot(null);\n }\n };\n\n const getSchedulerHelperText = () => {\n if (!window.appUser.reloadYard.eventTypes.items.length)\n return `Setup Schedule and Event Type to enable.`;\n return eventType?.name || \"\";\n };\n\n const handleOpen = () => {\n setOpenSeal(true);\n };\n const handleClose = () => {\n setOpenSeal(false);\n };\n const getSealNumberButtonLabel = (formData) => {\n return `Seals (${formData?.seals?.items.length || 0})`;\n };\n\n const getLadenValidation = () => {\n return (record.status === OutboundStatus.LOADED ||\n record.status === OutboundStatus.RELEASED) &&\n record.tareWeight\n ? validateLadenWeight\n : validateLoadedMinNum;\n };\n\n return (\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid\n item\n xs={12}\n md={4}\n style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8 }}\n >\n <DateTimePicker\n label=\"Time Scheduled\"\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n fullWidth\n disabled={formData.arrivalDateTime}\n onClickCapture={(event) =>\n handleSchedulerOpen(event, formData)\n }\n value={\n !formData.scheduledDateTime\n ? null\n : formData.scheduledDateTime\n }\n format=\"MM/dd/yyyy hh:mm a\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <CreatedAtIcon />\n </InputAdornment>\n ),\n }}\n helperText={getSchedulerHelperText()}\n />\n <Box mt={0.5}>\n <IconButtonWithTooltip\n label=\"Calendar\"\n color=\"default\"\n size=\"large\"\n onClick={() => setIsCalendarOpen(true)}\n >\n <CalendarIcon />\n </IconButtonWithTooltip>\n </Box>\n <Scheduler\n account={record.account}\n eventType={eventType}\n setEventType={setEventType}\n selectedTimeslot={selectedTimeslot}\n setSelectedTimeslot={handleTimeslot}\n open={isSchedulerOpen}\n setIsOpen={setIsSchedulerOpen}\n resettable={true}\n />\n {isCalendarOpen && (\n <EventsCalendarDialog\n eventType={eventType}\n selectedTimeslot={selectedTimeslot}\n isOpen={isCalendarOpen}\n setIsOpen={setIsCalendarOpen}\n />\n )}\n </Grid>\n {formData.carrierType === CarrierType.TRUCK &&\n isEmpty(formData.transfer) && (\n <Grid item xs={12} sm={6} md={4}>\n <TextInput\n source=\"carrier\"\n label=\"Carrier Name\"\n variant=\"outlined\"\n fullWidth\n disabled={\n record.carrier &&\n record.status === OutboundStatus.RELEASED\n }\n validate={validateCarrierName}\n idRequired={isCarrierNameRequired(formData)}\n helperText={false}\n />\n </Grid>\n )}\n {formData.carrierType === CarrierType.TRUCK &&\n isEmpty(formData.transfer) && (\n <Grid item xs={12} md={4}>\n <TextInput\n source=\"railCarNumber\"\n label=\"Trailer Number\"\n variant=\"outlined\"\n fullWidth\n disabled={\n record.railCarNumber &&\n record.status === OutboundStatus.RELEASED\n }\n parse={(v) => (v !== \"\" ? v.toUpperCase() : undefined)}\n validate={validateRailCarNumber}\n required={isRailcarNumberRequired(formData)}\n inputProps={{ style: { textTransform: \"uppercase\" } }}\n helperText={false}\n />\n </Grid>\n )}\n </Grid>\n {record.status !== OutboundStatus.ADVICE_PENDING && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <DateTimePicker\n label=\"Time Placed\"\n fullWidth\n disableFuture\n showTodayButton\n clearable\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n disabled={\n record.status === OutboundStatus.LOADED ||\n record.status === OutboundStatus.RELEASED\n }\n value={\n formData.arrivalDateTime === \"\"\n ? null\n : formData.arrivalDateTime\n }\n onChange={(value) => handlePlaceTime(value, formData)}\n maxDate={formData.departureDateTime}\n maxDateMessage=\"Date should be before Released Time\"\n format=\"MM/dd/yyyy hh:mm a\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <PlacedAtIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n {formData.carrierType === CarrierType.TRUCK &&\n isEmpty(formData.transfer) && (\n <>\n <Grid item xs={12} md={4}>\n <NumberInput\n source=\"tareWeight\"\n label=\"Tare Weight\"\n variant=\"outlined\"\n fullWidth\n disabled={\n record.invoiceId ||\n (isBulkCommodity(\n record?.shipmentLineItems?.items[0]?.inventory\n ?.reloadYardCommodityId\n ) &&\n record.status === OutboundStatus.RELEASED)\n }\n min=\"0\"\n validate={\n formData.ladenWeight\n ? validateTareWeight\n : validateEmptyMinNum\n }\n helperText={false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">{`${\n formData.scaleWeightUnits || \"\"\n }`}</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n source=\"scaleWeightUnits\"\n label=\"Weight Units\"\n variant=\"outlined\"\n fullWidth\n disabled={\n record.invoiceId ||\n formData.shipmentLineItems?.items?.length === 0\n }\n choices={UnitWeightOptions}\n optionText={unitOptionRenderer}\n allowEmpty\n // defaultValue={Unit.CWT} -- removing to keep form pristine\n validate={\n formData.tareWeight || formData.ladenWeight\n ? validateRequired\n : undefined\n }\n onChange={(event) =>\n handleScaleUnitsChange(event, formData)\n }\n helperText={false}\n />\n </Grid>\n </>\n )}\n </Grid>\n )}\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <DateTimePicker\n label=\"Load Start Time\"\n fullWidth\n disableFuture\n showTodayButton\n clearable\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n disabled={\n !formData.startDateTime ||\n record.status === OutboundStatus.RELEASED\n }\n value={\n formData.startDateTime === \"\"\n ? null\n : formData.startDateTime\n }\n onChange={(value) => handleStartTime(value, formData)}\n minDate={formData.arrivalDateTime}\n minDateMessage=\"Date should be after Arrival Time\"\n format=\"MM/dd/yyyy hh:mm a\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <TimerIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n {!formData?.skipSignature &&\n formData.carrierType === CarrierType.TRUCK &&\n isAuthorized(AclType.OUTBOUND_SIGN) &&\n !isXSmall && (\n <OutboundSignature\n formData={formData}\n form={form}\n record={record}\n />\n )}\n </Grid>\n <Grid item xs={12} md={4}>\n <DateTimePicker\n label=\"Load End Time\"\n fullWidth\n disableFuture\n showTodayButton\n clearable\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n disabled={\n !formData.endDateTime ||\n record.status === OutboundStatus.RELEASED\n }\n value={\n formData.endDateTime === \"\" ? null : formData.endDateTime\n }\n onChange={(value) => handleEndTime(value)}\n minDate={formData.startDateTime}\n minDateMessage=\"Date should be after Start Time\"\n format=\"MM/dd/yyyy hh:mm a\"\n helperText={getHoursMinutesDuration(\n \"Load Time:\",\n formData.startDateTime,\n formData.endDateTime\n )}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <TimerOffIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <DateTimePicker\n label=\"Time Released\"\n fullWidth\n disableFuture\n showTodayButton\n clearable\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n // DO NOT CHANGE OR INVENTORY COUNTS WILL BE INCONSISTENT ON STATUS ROLLBACK !!!\n disabled={\n !record.arrivalDateTime ||\n !formData.endDateTime ||\n formData.shipmentLineItems?.items?.length === 0 ||\n record.state !== OutboundState.COMPLETED ||\n record.status === OutboundStatus.RELEASED\n }\n value={\n formData.departureDateTime === \"\"\n ? null\n : formData.departureDateTime\n }\n onChange={(value) => form.change(\"departureDateTime\", value)}\n minDate={formData.endDateTime}\n minDateMessage=\"Date should be after Load End Time\"\n format=\"MM/dd/yyyy hh:mm a\"\n helperText={getHoursMinutesDuration(\n \"Cycle Time:\",\n formData.arrivalDateTime,\n formData.departureDateTime\n )}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <ReleasedAtIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n {formData.carrierType === CarrierType.TRUCK &&\n isEmpty(formData.transfer) && (\n <>\n <Grid item xs={12} md={4}>\n <NumberInput\n source=\"ladenWeight\"\n label=\"Laden Weight\"\n variant=\"outlined\"\n fullWidth\n disabled={\n record.invoiceId ||\n record.state !== OutboundState.COMPLETED ||\n (isBulkCommodity(\n record?.shipmentLineItems?.items[0]?.inventory\n ?.reloadYardCommodityId\n ) &&\n record.status === OutboundStatus.RELEASED)\n }\n min=\"0\"\n validate={[\n validateLadenGreaterThanTare,\n ...getLadenValidation(),\n ]}\n helperText={getActualGross(formData)}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">{`${\n formData.scaleWeightUnits || \"\"\n }`}</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextFieldMui\n label=\"Net Weight\"\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n helperText={weightError ? weightError : false}\n value={estNetWeight}\n InputLabelProps={estNetWeight ? { shrink: true } : {}}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">{`${\n formData.scaleWeightUnits || \"\"\n }`}</InputAdornment>\n ),\n }}\n />\n </Grid>\n </>\n )}\n </Grid>\n {record.carrierType === CarrierType.RAIL && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <DateTimePicker\n label=\"Time Collected\"\n disableFuture\n showTodayButton\n clearable\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n fullWidth\n // DO NOT CHANGE OR INVENTORY COUNTS WILL BE INCONSISTENT ON STATUS ROLLBACK !!!\n disabled={\n !formData.departureDateTime ||\n formData.departureDateTime === \"\"\n }\n value={\n !formData.collectedDateTime ||\n formData.collectedDateTime === \"\"\n ? null\n : formData.collectedDateTime\n }\n minDate={formData.departureDateTime}\n minDateMessage=\"Date should be after Released Time\"\n format=\"MM/dd/yyyy hh:mm a\"\n onChange={(value) =>\n form.change(\"collectedDateTime\", value)\n }\n helperText={\n formData.collectedDateTime\n ? `Demmurage Days: ${\n formData.departureDateTime\n ? differenceInDays(\n new Date(formData.departureDateTime),\n new Date(formData.arrivalDateTime)\n )\n : 0\n }`\n : false\n }\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <CollectedAtIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n </Grid>\n )}\n {formData.carrier !== \"TRANSFER\" && isEmpty(formData.transfer) && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <DateTimePicker\n label=\"Time Delivered\"\n fullWidth\n disableFuture\n showTodayButton\n clearable\n margin=\"dense\"\n inputVariant=\"outlined\"\n variant=\"dialog\"\n disabled={!record.departureDateTime}\n value={\n formData.deliveryDateTime === \"\"\n ? null\n : formData.deliveryDateTime\n }\n onChange={(value) => form.change(\"deliveryDateTime\", value)}\n minDate={formData.departureDateTime}\n minDateMessage=\"Date should be after Release Time\"\n format=\"MM/dd/yyyy hh:mm a\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <DeliveredAtIcon />\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n {formData?.account?.trackOutboundSeals &&\n formData.carrier !== \"TRANSFER\" &&\n !isXSmall && (\n <Grid item xs={12} md={4}>\n <Box mt={1}>\n <Button\n label={getSealNumberButtonLabel(formData)}\n variant=\"outlined\"\n size=\"large\"\n fullWidth\n onClick={handleOpen}\n >\n <SealIcon />\n </Button>\n </Box>\n </Grid>\n )}\n </Grid>\n )}\n {openSeals && (\n <SealNumbersDialog\n open={openSeals}\n onClose={handleClose}\n formData={formData}\n />\n )}\n </Grid>\n )}\n </FormDataConsumer>\n </MuiPickersUtilsProvider>\n );\n};\n\nconst EditToolbar = ({ record, backPath, selectedTimeslot, ...props }) => {\n const classes = useStyles();\n const [isSaving, setIsSaving] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n\n return (\n <Toolbar style={{ justifyContent: \"space-between\" }}>\n <Backdrop className={classes.backdrop} open={isSaving || isDeleting}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n {record?.status === OutboundStatus.ADVICE_PENDING ? (\n <AdviceApproveRejectButton\n {...props}\n record={record}\n backPath={backPath}\n isSaving={isSaving}\n setIsSaving={setIsSaving}\n isDeleting={isDeleting}\n />\n ) : (\n <DialogSaveButton\n {...props}\n record={record}\n backPath={backPath}\n selectedTimeslot={selectedTimeslot}\n isSaving={isSaving}\n setIsSaving={setIsSaving}\n isDeleting={isDeleting}\n />\n )}\n <DeepDeleteButton\n {...props}\n record={record}\n backPath={backPath}\n isSaving={isSaving}\n isDeleting={isDeleting}\n setIsDeleting={setIsDeleting}\n />\n </Toolbar>\n );\n};\n\nconst validateOutboundEdit = (values) => {\n let errors = {};\n\n if (values.shipmentLineItems && values.shipmentLineItems.items) {\n values.shipmentLineItems.items.forEach((row) => {\n const error = validatePickListRow(row);\n if (error.helperText) errors = error;\n });\n }\n\n return errors;\n};\n\nexport const OutboundEdit = (props) => {\n const backPath = getBackPath(props);\n const { record } = useEditController(props);\n const gteMedium = useMediaQuery((theme) => theme.breakpoints.up(\"md\"));\n const history = useHistory();\n const [bolFile, setBolFile] = useState();\n const [bolNumber, setBolNumber] = useState();\n const [selectedTimeslot, setSelectedTimeslot] = useState(record?.timeslot);\n\n if (!record) return <Loading />;\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Outbound\" />}\n mutationMode=\"pessimistic\"\n actions={\n <OutboundEditActions\n {...props}\n backPath={backPath}\n setBolFile={setBolFile}\n setBolNumber={setBolNumber}\n />\n }\n aside={<OutboundAside {...props} backPath={backPath} history={history} />}\n >\n <TabbedForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={\n <EditToolbar\n {...props}\n record={record}\n backPath={backPath}\n selectedTimeslot={selectedTimeslot}\n />\n }\n validate={(values) => validateOutboundEdit(values)}\n >\n <FormTab path=\"\" label=\"Outbound Setup\">\n <ShipmentSetupTab\n {...props}\n record={record}\n backPath={backPath}\n bolFile={bolFile}\n bolNumber={bolNumber}\n history={history}\n />\n </FormTab>\n <FormTab path=\"pickList\" label=\"Pick List\">\n <PickListTab {...props} backPath={backPath} />\n </FormTab>\n {record.status === OutboundStatus.ADVICE_PENDING ? (\n <FormTab path=\"dispatch\" label=\"Dispatch\">\n <AdviceDispatchTab {...props} />\n </FormTab>\n ) : (\n <FormTab path=\"dispatch\" label=\"Dispatch\">\n <ShipmentDispatchTab\n {...props}\n selectedTimeslot={selectedTimeslot}\n setSelectedTimeslot={setSelectedTimeslot}\n />\n </FormTab>\n )}\n <FormTab path=\"notes\" label=\"Notes\">\n <NotesTab />\n </FormTab>\n {gteMedium && (\n <FormTab path=\"historyLog\" label=\"History Log\">\n <HistoryTab />\n </FormTab>\n )}\n </TabbedForm>\n </Edit>\n );\n};\n","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { isEmpty } from \"lodash\";\nimport { differenceInDays } from \"date-fns\";\n\nimport { Box, Grid, Typography, useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n ArrayField,\n BooleanField,\n Datagrid,\n DateField,\n FunctionField,\n Labeled,\n Loading,\n NumberField,\n SelectField,\n Show,\n Tab,\n TabbedShowLayout,\n TextField,\n useEditController,\n useRecordContext,\n} from \"react-admin\";\n\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HistoryTab } from \"../../../components/common/HistoryTab\";\nimport { NotesTabShow } from \"../../../components/common/NotesTab\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { KeyboardOutlinedIcon, ScannerIcon } from \"../../../components/common\";\nimport {\n CustomField,\n CustomFieldsMobile,\n} from \"../../../components/common/CustomFields\";\nimport CustomizableDatagrid from \"../../../components/common/ra-customizable-datagrid\";\nimport { ShowButton } from \"../../../components/common/ShowButton\";\n\nimport { CarrierType, CarrierTypes } from \"../../../utils/constants\";\nimport {\n deepRedirect,\n getBackPath,\n getHoursMinutesDuration,\n quantityRenderer,\n} from \"../../../utils/utils\";\nimport { OutboundAside } from \"./OutboundAside\";\nimport { OutboundEditActions } from \"./OutboundEditActions\";\nimport { InventoryItemsEditGridInput, getInfoBubble } from \"./OutboundUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n tableCellIcon: {\n padding: \"3px\",\n textAlign: \"center\",\n height: \"33px\",\n },\n}));\n\nconst ShipmentSetupTab = ({ isMedium, ...props }) => {\n const { record } = props;\n const CarrierTypesReversed = [].concat(CarrierTypes).reverse();\n\n return (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Account\">\n <TextField source=\"accountName\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <Labeled label=\"PO Number\">\n <TextField source=\"poNumber\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <Labeled label=\"Inventory Transfer\">\n <TextField source=\"transfer\" />\n </Labeled>\n {/* <CheckboxGroupInput source=\"transfer\" label=\"Inventory Transfer\" fullWidth\n choices={[TransferOptions[1]]}\n /> */}\n </Grid>\n </Grid>\n {isEmpty(record.transfer) ? (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} sm={6} md={4}>\n <Labeled label=\"Carrier Type\">\n <SelectField\n source=\"carrierType\"\n choices={CarrierTypesReversed}\n />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <Labeled label=\"Carrier Name\">\n <TextField source=\"carrier\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <Labeled\n label={\n record.carrierType === CarrierType.RAIL\n ? \"Railcar Number\"\n : \"Trailer Number\"\n }\n >\n <TextField source=\"railCarNumber\" />\n </Labeled>\n </Grid>\n {record.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} sm={6} md={4}>\n <Labeled label=\"Pickup Number\">\n <TextField source=\"pickupNumber\" />\n </Labeled>\n </Grid>\n )}\n {record?.carrierType === CarrierType.TRUCK && (\n <Grid item xs={12} md={4}>\n <Labeled label=\"Must Tarp?\">\n <TextField source=\"mustTarp\" />\n </Labeled>\n {/* <RadioButtonGroupInput source=\"mustTarp\" label=\"Must Tarp?\" row\n choices={TrueOrFalse}\n /> */}\n </Grid>\n )}\n <Grid item xs={12} md={4}>\n <Box mt={2}>\n <Labeled label=\"Skip e-signatures\">\n <BooleanField source=\"skipSignature\" />\n </Labeled>\n </Box>\n </Grid>\n {record.shipTo && (\n <Grid item xs={12}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography\n gutterBottom\n variant=\"overline\"\n color=\"textSecondary\"\n >\n Destination Address\n </Typography>\n </Grid>\n <Grid item xs={12} sm={6}>\n <Labeled label=\"Destination Name\">\n <TextField source=\"shipTo.name\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6}>\n <Labeled label=\"Street Address\">\n <TextField source=\"shipTo.street\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <Labeled label=\"CIty\">\n <TextField source=\"shipTo.city\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <Labeled label=\"State\">\n <TextField source=\"shipTo.state\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <Labeled label=\"Zip Code\">\n <TextField source=\"shipTo.zipCode\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <Labeled label=\"Country\">\n <TextField source=\"shipTo.country\" />\n </Labeled>\n </Grid>\n </Grid>\n </Grid>\n )}\n <Grid item xs={12}>\n <Labeled label=\"Special Instructions\">\n <TextField source=\"instructions\" />\n </Labeled>\n </Grid>\n </Grid>\n ) : (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography gutterBottom variant=\"overline\" color=\"textSecondary\">\n Destination Account\n </Typography>\n <Typography gutterBottom variant=\"body2\">\n An \"External Transfer\" removes goods from inventory and transfers\n to selected account.\n </Typography>\n </Grid>\n <Grid item xs={12} sm={4}>\n <Labeled label=\"To Account\">\n <TextField source=\"transferToAccountName\" />\n </Labeled>\n </Grid>\n </Grid>\n )}\n <CustomFieldsMobile\n recordFields={record.customFields}\n accountFields={record.account.outboundCustomFields}\n width={4}\n />\n {isMedium && (\n <Grid container direction=\"row\" spacing={2}>\n <Grid item xs={6}>\n <Labeled label=\"ATTACHMENTS\">\n <FileField\n source=\"attachments\"\n src=\"src\"\n title=\"title\"\n target=\"_blank\"\n />\n </Labeled>\n </Grid>\n <Grid item xs={6}>\n <Labeled label=\"BOL FILE\">\n <FileField\n source=\"bolFile\"\n src=\"src\"\n title=\"title\"\n target=\"_blank\"\n />\n </Labeled>\n </Grid>\n <Grid item xs={12}>\n {\" \"}\n </Grid>\n </Grid>\n )}\n </Grid>\n );\n};\n\nconst PickListTab = (props) => {\n const { history, backPath, record } = props;\n\n const accountFields =\n record.account?.inventoryCustomFields?.length > 0\n ? record.account.inventoryCustomFields\n : [];\n const customGridFields = accountFields\n ? accountFields.map((field, index) => {\n return (\n <CustomField\n source={`customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={true}\n />\n );\n })\n : [];\n\n const openShipmentLineItem = (jsonRecord) => {\n const jsonObject = JSON.parse(jsonRecord);\n const toPath = `/inventories/${jsonObject.inventoryId}/show`;\n deepRedirect(history, toPath, props.location.pathname, backPath);\n };\n\n return (\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <Labeled label=\"OUTBOUND INVENTORY\" fullWidth>\n <ArrayField source=\"shipmentLineItems.items\" basePath=\"/inventories\">\n <CustomizableDatagrid\n hasBulkActions={false}\n rowClick={openShipmentLineItem}\n expand={<InventoryItemsEditGridInput />}\n storageProp={`OutboundShipmentLineItems_${record.account?.id}_large`}\n defaultColumns={[\n \"inventory.productName\",\n \"lotNumber\",\n \"inventory.quantityOnHand\",\n \"inventory.quantityCommitted\",\n \"inventory.quantityAvaiable\",\n \"quantity\",\n \"inventory.inventoryUnits\",\n ]}\n >\n {[\n <FunctionField\n source=\"inventory.productName\"\n label=\"Product Name\"\n sortable={true}\n render={(record) =>\n record?.inventory && (\n <>\n {record.inventory.productName}{\" \"}\n {getInfoBubble(record, record)}{\" \"}\n </>\n )\n }\n />,\n <TextField source=\"lotNumber\" label=\"Lot Number\" />,\n <TextField source=\"inventory.poNumber\" label=\"PO Number\" />,\n <NumberField\n source=\"inventory.quantityOnHand\"\n label=\"Qty. On Hand\"\n />,\n <NumberField\n source=\"inventory.quantityCommitted\"\n label=\"Qty. Committed\"\n />,\n <FunctionField\n source=\"inventory.quantityAvaiable\"\n label=\"Qty. Available\"\n sortable={false}\n render={(record) =>\n record &&\n `${\n record.inventory?.quantityOnHand -\n record.inventory?.quantityCommitted\n }`\n }\n />,\n <NumberField\n source=\"totalQuantityToPick\"\n label=\"Qty. Outbound\"\n />,\n <TextField source=\"inventory.inventoryUnits\" label=\"UOM\" />,\n ...customGridFields,\n <ShowButton {...props} idSource=\"inventoryId\" />,\n ]}\n </CustomizableDatagrid>\n </ArrayField>\n </Labeled>\n </Grid>\n\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Total Load\n </Typography>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={6} md={3}>\n <Labeled label=\"Total Quantity\">\n <FunctionField\n render={(record) =>\n quantityRenderer(record.totalQuantity, record.totalUnits)\n }\n />\n </Labeled>\n </Grid>\n <Grid item xs={6} md={3}>\n <Labeled label=\"Net Weight\">\n <FunctionField\n render={(record) =>\n quantityRenderer(record.netWeight, record.weightUnits)\n }\n />\n </Labeled>\n </Grid>\n <Grid item xs={6} md={3}>\n <Labeled label=\"Billing Quantity\">\n <FunctionField\n render={(record) =>\n quantityRenderer(record.billQuantity, record.billUnits)\n }\n />\n </Labeled>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n );\n};\n\nconst grossRender = (record) => {\n if (\n record.tareWeight !== null &&\n record.tareWeight >= 0 &&\n record.ladenWeight >= 0\n ) {\n return `${record.ladenWeight - record.tareWeight} ${\n record.weightUnits ? record.weightUnits : record.scaleWeightUnits\n }`;\n } else\n return `0 ${\n record.weightUnits ? record.weightUnits : record.scaleWeightUnits\n }`;\n};\n\nconst BooleanIconField = ({ source }) => {\n const record = useRecordContext();\n if (!record) return null;\n return record[source] ? (\n <ScannerIcon fontSize=\"small\" />\n ) : (\n <KeyboardOutlinedIcon fontSize=\"small\" />\n );\n};\n\nconst ShipmentTraceTab = ({ record, ...props }) => {\n const classes = useStyles();\n return (\n <Grid container direction=\"column\" spacing={1}>\n <Grid item container direction=\"row\">\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Scheduled\">\n <DateField source=\"scheduledDateTime\" showTime />\n </Labeled>\n </Grid>\n {record.carrierType === CarrierType.TRUCK &&\n isEmpty(record.transfer) && (\n <Grid item xs={12} md={4}>\n <Labeled label=\"Carrier Name\">\n <TextField source=\"carrier\" />\n </Labeled>\n </Grid>\n )}\n {record.carrierType === CarrierType.TRUCK &&\n isEmpty(record.transfer) && (\n <Grid item xs={12} md={4}>\n <Labeled label=\"Trailer Number\">\n <TextField source=\"railCarNumber\" />\n </Labeled>\n </Grid>\n )}\n </Grid>\n <Grid item container direction=\"row\">\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Placed\">\n <DateField source=\"arrivalDateTime\" showTime />\n </Labeled>\n </Grid>\n {record.carrierType === CarrierType.TRUCK &&\n isEmpty(record.transfer) && (\n <>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Tare Weight\">\n <FunctionField\n render={(record) =>\n quantityRenderer(\n record.tareWeight,\n record.scaleWeightUnits\n )\n }\n />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Laden Weight\">\n <FunctionField\n render={(record) =>\n quantityRenderer(\n record.ladenWeight,\n record.scaleWeightUnits\n )\n }\n />\n </Labeled>\n </Grid>\n </>\n )}\n </Grid>\n <Grid item container direction=\"row\">\n <Grid item xs={12} md={4}>\n <Labeled label=\"Load Start Time\">\n <DateField source=\"startDateTime\" showTime />\n </Labeled>\n </Grid>\n {record.carrierType === CarrierType.TRUCK &&\n isEmpty(record.transfer) && (\n <>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Net Weight\">\n <FunctionField\n render={(record) =>\n quantityRenderer(\n record.netWeight || 0,\n record.scaleWeightUnits\n )\n }\n />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Gross Weight\">\n <FunctionField render={grossRender} />\n </Labeled>\n </Grid>\n </>\n )}\n </Grid>\n <Grid item container direction=\"row\">\n <Grid item xs={12} md={4}>\n <Labeled label=\"Load End Time\">\n <DateField source=\"endDateTime\" showTime />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Total Load Time\">\n <FunctionField\n render={(record) =>\n getHoursMinutesDuration(\n \"\",\n record.startDateTime,\n record.endDateTime\n )\n }\n />\n </Labeled>\n </Grid>\n </Grid>\n <Grid item container direction=\"row\">\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Released\">\n <DateField source=\"departureDateTime\" showTime />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Cycle Time\">\n <FunctionField\n render={(record) =>\n getHoursMinutesDuration(\n \"\",\n record.arrivalDateTime,\n record.departureDateTime\n )\n }\n />\n </Labeled>\n </Grid>\n </Grid>\n {record.carrierType === CarrierType.RAIL && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Collected\">\n <DateField source=\"collectedDateTime\" showTime />\n </Labeled>\n </Grid>\n {record.collectedDateTime && (\n <Grid item xs={12} md={4}>\n <Labeled label=\"Demmurage Days\">\n <FunctionField\n render={(record) =>\n `: ${\n record.departureDateTime\n ? differenceInDays(\n new Date(record.departureDateTime),\n new Date(record.arrivalDateTime)\n )\n : 0\n }`\n }\n />\n </Labeled>\n </Grid>\n )}\n </Grid>\n )}\n {record.carrier !== \"TRANSFER\" && isEmpty(record.transfer) && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={4}>\n <Labeled label=\"Time Delivered\">\n <DateField source=\"deliveryDateTime\" showTime />\n </Labeled>\n </Grid>\n </Grid>\n )}\n {record?.account?.trackOutboundSeals && record.carrier !== \"TRANSFER\" && (\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <Labeled label=\"Seals\" fullWidth>\n <ArrayField source=\"seals.items\" fullWidth>\n <Grid container direction=\"row\">\n <Grid item xs={12} md={1}>\n <Datagrid>\n <BooleanIconField\n source=\"isScanned\"\n label=\" \"\n fullWidth\n emptyText=\" \"\n cellClassName={classes.tableCellIcon}\n />\n </Datagrid>\n </Grid>\n <Grid item xs={12} md={4}>\n <Datagrid>\n <TextField\n source=\"barcode\"\n fullWidth\n emptyText=\" \"\n />\n </Datagrid>\n </Grid>\n <Grid item xs={12} md={2}>\n <Datagrid>\n <TextField\n source=\"createdBy\"\n label=\"Entered By\"\n fullWidth\n emptyText=\" \"\n />\n </Datagrid>\n </Grid>\n <Grid item xs={12} md={3}>\n <Datagrid>\n <TextField\n source=\"description\"\n fullWidth\n emptyText=\" \"\n />\n </Datagrid>\n </Grid>\n </Grid>\n </ArrayField>\n </Labeled>\n </Grid>\n </Grid>\n )}\n </Grid>\n );\n};\n\nexport const OutboundShow = (props) => {\n const { record } = useEditController(props);\n const history = useHistory();\n const isMedium = useMediaQuery((theme) => theme.breakpoints.up(\"md\"));\n\n const backPath = getBackPath(props);\n\n if (!record) return <Loading />;\n return (\n <Show\n {...props}\n title={<ForceTitle title=\"View Outbound\" />}\n actions={<OutboundEditActions {...props} backPath={backPath} />}\n aside={<OutboundAside {...props} history={history} backPath={backPath} />}\n >\n <TabbedShowLayout>\n <Tab label=\"Outbound Setup\">\n <ShipmentSetupTab {...props} isMedium={isMedium} />\n </Tab>\n <Tab label=\"Pick List\">\n <PickListTab {...props} history={history} backPath={backPath} />\n </Tab>\n <Tab label=\"Dispatch\">\n <ShipmentTraceTab {...props} />\n </Tab>\n <Tab label=\"Notes\">\n <NotesTabShow />\n </Tab>\n {isMedium && (\n <Tab label=\"History Log\">\n <HistoryTab />\n </Tab>\n )}\n </TabbedShowLayout>\n </Show>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router\";\n\nimport { DialogContentText } from \"@material-ui/core\";\n\nimport {\n useNotify,\n useRedirect,\n Confirm,\n SaveButton,\n FormDataConsumer,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { logError } from \"../../../../utils/appUtils\";\nimport { NoteType, VALIDATION_MSG } from \"../../../../utils/constants\";\nimport { deepRedirect } from \"../../../../utils/utils\";\nimport {\n deleteLambdaPickListItem,\n updateLambdaPickListItem,\n updateOutboundQuantity,\n} from \"./PickListItemUtils\";\n\nconst validateNotes = (form, formData) => {\n const notesMaxIndex = formData.notes ? formData.notes.length - 1 : -1;\n const qtyState = form.getFieldState(\"totalQuantityToPick\");\n const quantityChanged = qtyState?.dirty;\n debugger;\n\n if (\n quantityChanged &&\n (notesMaxIndex < 0 ||\n (notesMaxIndex >= 0 &&\n (!formData.notes[notesMaxIndex] || formData.notes[notesMaxIndex].date)))\n ) {\n //Trigger Add a Note to document changes\n return true;\n }\n return false;\n};\n\nexport const DialogSaveButton = ({\n record,\n outbound,\n inventoryItems,\n backPath,\n isSaving,\n setIsSaving,\n isDeleting,\n ...props\n}) => {\n const form = useForm();\n const formState = form.getState();\n const notify = useNotify();\n const history = useHistory();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n const [title, setTitle] = useState(\"Save Confirmation\");\n const [message, setMessage] = useState(\"\");\n\n const formValidate = () => {\n const newFormState = form.getState();\n if (newFormState.invalid) notify(VALIDATION_MSG, \"warning\");\n };\n\n const handleValidateSave = (formData) => {\n debugger;\n let tempMsg = null;\n\n if (formData.inventoryItems?.items?.length === 0) {\n tempMsg = (\n <DialogContentText>\n All Inventory items were removed. This Pick List itme will be deleted!\n <br />\n Delete this Pick List item?\n </DialogContentText>\n );\n setTitle(\"Delete Confirmation\");\n } else if (validateNotes(form, formData)) {\n tempMsg = (\n <DialogContentText>\n Don't forget to document all quantity changes in the Notes!\n <br />\n Proceed without adding a Note?\n </DialogContentText>\n );\n setTitle(\"Save Confirmation\");\n }\n\n if (tempMsg && tempMsg !== \"\") {\n setMessage(tempMsg);\n setOpen(true);\n } else handleSave(formData);\n };\n\n const handleDialogClose = () => setOpen(false);\n\n const handleSave = async (formData) => {\n formValidate();\n setOpen(false);\n\n if (formData.inventoryItems?.items?.length === 0)\n await handleDelete(formData);\n else props.handleSubmit();\n };\n\n const handleDelete = async (data) => {\n debugger;\n setIsSaving(true);\n try {\n const response = await deleteLambdaPickListItem(record);\n if (response.error) throw response.error;\n\n await updateOutboundQuantity(\n outbound,\n data,\n record.totalQuantityToPick,\n 0\n );\n\n notify(\"Pick List Item deleted successfully\");\n deepRedirect(history, backPath);\n } catch (error) {\n logError(\n \"lineItem:DialogSaveButton:handleRemove\",\n error,\n notify,\n redirect\n );\n } finally {\n setIsSaving(false);\n }\n };\n\n const transform = async (data) => {\n setIsSaving(true);\n data = { ...data };\n const updateDate = new Date();\n debugger;\n\n const qtyState = form.getFieldState(\"totalQuantityToPick\");\n const initQty = qtyState.initial;\n\n if (data.notes?.length > 0) {\n data.notes.forEach((element) => {\n if (!element.date) {\n element.type = NoteType.GENERIC;\n element.date = updateDate;\n element.by = window.appUser?.fullName;\n }\n });\n } else data.notes = undefined;\n\n if (initQty && initQty !== data.totalQuantityToPick) {\n // quantity changed\n const note = {\n type: NoteType.INVENTORY,\n date: updateDate,\n by: window.appUser?.fullName,\n text: `Outbound Qty. Changed from ${initQty} to ${data.totalQuantityToPick}`,\n };\n\n // shipment LineItem history\n data.history = [...data.history, note];\n }\n\n delete data.inventory;\n delete data.inventoryItems;\n delete data.quantityAvailable;\n\n return data;\n };\n\n const onSuccess = async ({ data }) => {\n debugger;\n try {\n const initPickListItem = formState.initialValues;\n const pickListItem = formState.values;\n pickListItem.inventoryItems.items = inventoryItems;\n\n // update inventory, inventory items, and outbound shipment\n const response = await updateLambdaPickListItem(\n outbound,\n initPickListItem,\n pickListItem\n );\n if (response.error) throw response.error;\n\n notify(\"Pick List Item updated successfully\");\n deepRedirect(history, backPath);\n } catch (error) {\n logError(\"lineItem:DialogSaveButton:onSuccess\", error, notify, redirect);\n return;\n } finally {\n setIsSaving(false);\n }\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\"lineItem:DialogSaveButton:onFailure\", error, notify);\n };\n\n const isPristine = () => {\n const formState = form.getState();\n return formState.pristine;\n };\n\n // Pass ...props, not ...rest to FormDataConsumer to include handleSubmitWithRedirect from props\n return (\n <FormDataConsumer>\n {({ formData }) => (\n <>\n <SaveButton\n label=\"Save\"\n submitOnEnter={false}\n undoable={false}\n disabled={isPristine() || isDeleting}\n saving={isSaving}\n handleSubmitWithRedirect={() => handleValidateSave(formData)}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <Confirm\n isOpen={open}\n loading={isSaving}\n title={title}\n content={message}\n onConfirm={() => handleSave(formData)}\n onClose={handleDialogClose}\n />\n </>\n )}\n </FormDataConsumer>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport { useNotify, useRedirect, Button, Confirm } from \"react-admin\";\n\nimport { DeleteIcon } from \"../../../../components/common\";\nimport { logError } from \"../../../../utils/appUtils\";\nimport {\n deleteLambdaPickListItem,\n updateOutboundQuantity,\n} from \"./PickListItemUtils\";\nimport { ShipmentLineItemStatus } from \"../../../../utils/constants\";\nimport { deepRedirect } from \"../../../../utils/utils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeepDeleteButton = ({\n record,\n outbound,\n backPath,\n className,\n isSaving,\n isDeleting,\n setIsDeleting,\n ...props\n}) => {\n const classes = useStyles();\n const notify = useNotify();\n const history = useHistory();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n const handleRemove = async () => {\n debugger;\n setIsDeleting(true);\n try {\n const response = await deleteLambdaPickListItem(record);\n if (response.error) throw response.error;\n\n await updateOutboundQuantity(\n outbound,\n record,\n record.totalQuantityToPick,\n 0\n );\n\n notify(\"Pick List Item deleted successfully\");\n deepRedirect(history, backPath);\n } catch (error) {\n logError(\n \"lineItem:DeepDeleteButton:handleRemove\",\n error,\n notify,\n redirect\n );\n } finally {\n setIsDeleting(false);\n }\n };\n\n if (\n record.status !== ShipmentLineItemStatus.PENDING &&\n record.status !== ShipmentLineItemStatus.REJECTED\n )\n return null;\n return (\n <>\n <Button\n {...props}\n label=\"Delete\"\n disabled={isDeleting || isSaving}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={isDeleting}\n title={\"Delete Confirmation\"}\n content={\n \"Are you sure you want to delete this Outbound Pick List item?\"\n }\n onConfirm={handleRemove}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport { SelectField, Loading } from \"react-admin\";\n\nimport {\n Card,\n CardMedia,\n CardContent,\n Grid,\n Typography,\n Dialog,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { isAuthorized } from \"../../../../utils/appUtils\";\nimport { AclType, ShipmentLineItemStatuses } from \"../../../../utils/constants\";\nimport { getPhoto, getPhotoUrl } from \"../../../../utils/fileUtils\";\nimport { exceptionRenderer } from \"../../../../utils/utils\";\n\nconst useAsideStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n width: \"18em\",\n minWidth: \"18em\",\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(0.5),\n overflow: \"initial\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n photoButton: { margin: \"5 0 0 5\" },\n media: {\n margin: \"0 auto 0\",\n marginTop: theme.spacing(1),\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n maxHeight: \"20em\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n mediaFull: {\n margin: \"0 auto 0\",\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n exception: {\n marginTop: theme.spacing(0.5),\n },\n}));\n\nexport const PickListItemAside = ({ backPath, record, ...props }) => {\n const classes = useAsideStyles();\n const imgRef = useRef();\n const [photo, setPhoto] = useState();\n const [selectedPhoto, setSelectedPhoto] = useState();\n const [isOpen, setIsOpen] = useState(false);\n const { hasException, barcodeException } = useMemo(() => {\n let hasExceptionTemp = false;\n let barcodeExceptionTemp = false;\n\n record?.inventoryItems?.items?.forEach((item) => {\n if (item.hasException) hasExceptionTemp = true;\n if (item.barcodeException) barcodeExceptionTemp = true;\n if (hasExceptionTemp && barcodeExceptionTemp) return;\n });\n\n return {\n hasException: hasExceptionTemp,\n barcodeException: barcodeExceptionTemp,\n };\n }, [record?.inventoryItems?.items]);\n\n const exceptions = { hasException, barcodeException };\n\n const linkBackPath = backPath\n ? [...backPath, props.location.pathname]\n : [props.location.pathname];\n\n useEffect(() => {\n if (record?.pickupPhoto && imgRef.current) {\n setSelectedPhoto(record.pickupPhoto.key);\n getPhoto(record.pickupPhoto.key, setPhoto, imgRef.current.clientWidth);\n }\n }, [imgRef, record]);\n\n const handleMagnifyPhoto = () => {\n setIsOpen(!isOpen);\n };\n\n if (!record) return <Loading />;\n return (\n <Card className={classes.root} ref={imgRef}>\n <CardContent>\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Status:{\" \"}\n </Typography>\n <br />\n <SelectField\n source=\"status\"\n record={record}\n choices={ShipmentLineItemStatuses}\n />\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Account:{\" \"}\n </Typography>\n <br />\n {isAuthorized(AclType.ACCOUNTS) ? (\n <Link\n to={{\n pathname: `/accounts/${record.inventory.accountId}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {record.inventory.accountName}\n </Typography>\n </Link>\n ) : (\n <Link\n to={{\n pathname: `/accounts/${record.inventory.accountId}/show`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {record.inventory.accountName}\n </Typography>\n </Link>\n )}\n </Grid>\n {exceptions.hasException && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Exceptions\n </Typography>\n </Grid>\n )}\n {exceptions.hasException && exceptions.barcodeException && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n {exceptionRenderer(exceptions, \"left\")}\n </Grid>\n <Grid item xs={10} className={classes.exception}>\n <Typography variant=\"body2\">Barcode Exception</Typography>\n </Grid>\n </Grid>\n )}\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Inventory:{\" \"}\n </Typography>\n <br />\n <Link\n to={{\n pathname: `/inventories/${record.inventory.id}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {record.inventory.productName}\n </Typography>\n </Link>\n </Grid>\n {record.inventory?.productId && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Product:\n </Typography>\n <br />\n <Link\n to={{\n pathname: `/products/${record.inventory.productId}`,\n state: {\n account: record.inventory.account,\n backPath: linkBackPath,\n },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n Product Code: {record.inventory.productCode}\n </Typography>\n </Link>\n </Grid>\n )}\n {record.pickupPhoto && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n <strong>Photos:</strong>\n </Typography>\n <br />\n <CardMedia\n component=\"img\"\n image={photo}\n className={classes.media}\n onClick={handleMagnifyPhoto}\n />\n </Grid>\n )}\n </Grid>\n </CardContent>\n {isOpen && (\n <Dialog open={isOpen} onClick={handleMagnifyPhoto} maxWidth=\"xl\">\n <img\n src={getPhotoUrl(selectedPhoto, window.innerWidth)}\n alt=\"Outbound Inventory\"\n className={classes.mediaFull}\n onClick={handleMagnifyPhoto}\n />\n </Dialog>\n )}\n </Card>\n );\n};\n","import React from \"react\";\n\nimport { Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n AddIcon,\n DocumentIcon,\n EditIcon,\n InfoOutlinedIcon,\n InvoiceIcon,\n LinkOffIcon,\n RemoveIcon,\n} from \"../../../../components/common\";\nimport { getFormTab } from \"../../../../utils/utils\";\n\nconst useStyles = makeStyles((theme) => ({\n icon: {\n verticalAlign: \"middle\",\n display: \"inline-flex\",\n },\n}));\n\nexport const PickListCreateHelp = (props) => {\n const classes = useStyles();\n var tab = getFormTab(props);\n\n return (\n <>\n {(() => {\n switch (tab) {\n case \"0\":\n return (\n <>\n <Typography variant=\"overline\">\n <strong>Outbound Setup</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Account: </strong>\n Account must be selected first to enable editing of Pick\n List.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>PO Number: </strong>\n Purchase Order number provided by Customer.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Carrier Name: </strong>\n Rail line / truck line name.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Carrier Type: </strong>\n Select carrier type - determines \"Pickup Number\" or\n \"Railcar Number\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Pickup Number: </strong> Required if Carrier Type\n = \"Truck\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Railcar Number: </strong>\n Required if shipping by Rail and Carrier Type = \"Rail\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Must Tarp: </strong>\n Required if Carrier Type = \"Truck\". Indicate if load needs\n to be covered with tarp.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Destination Name & Address: </strong>\n Optional - can be left blank for \"Blind Shipments\". If\n Destination entered, address is required.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>PO File: </strong>\n Attach the original PO from customer.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Photos: </strong>\n Attach Photos if documenting a prior shipment an have\n available photos. Only used for past shipments where\n photos are available.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup. These fields are\n Account-specific, so they may differ from one inbound to\n another.\n </Typography>\n </li>\n </ul>\n </>\n );\n case \"1\":\n return (\n <>\n <Typography variant=\"overline\">\n <strong>Pick List</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Product Name: </strong>\n Product name as displayed in the Inventories. Items linked\n to Product Catalog will have an{\" \"}\n <InfoOutlinedIcon className={classes.icon} /> Info Bubble\n in the right corner. Those not linked to a Product, will\n display <LinkOffIcon className={classes.icon} /> broken\n link icon.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. On Hand: </strong>Stock quantity in storage.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Committed: </strong>\n Stock quantity Reserved across all Outbound Shipments,\n including this one - dynamically updated.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Available: </strong>\n Stock quantity available of Outbound Shipment, inclusive\n of Qty. Committed in this shipment.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Outbound: </strong>Stock quantity Reserved\n for this shipment.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup or Product Catalog. These\n fields are Account- and Product-specific, so they may\n differ from one inbound to another.\n </Typography>\n </li>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>\n Add new Line Item to Pick List. Launches \"Inventory\n Search\" dialog. Account must be selected on Shipment Setup\n Tab to enable the Add button. Inventory Search dialog\n allows you to search for All Inventories by hitting the\n Search button, or narrowing down results by product name,\n or lot number.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Pick List Line Item and adjust global\n Inventory counts.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Total Quantity & Shipping Units: </strong>\n Sum total of Qty. Outbound. Indicate units of measure for\n counting Qty shipped.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Bill Quantity & Units: </strong>\n Total Qty. Outbound and Units used for invoicing customer.\n If Billing Units = Weight Units, the measured truck weight\n will be used for invoicing.\n </Typography>\n </li>\n </ul>\n </>\n );\n default:\n return (\n <>\n <Typography variant=\"overline\">\n <strong>Notes</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Use the Notes Tab to document key events and changes made to\n the Shipment record.\n </Typography>\n <ul>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>Add new Note Line Item.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Note Line Item - this info will be\n permanently lost.\n </Typography>\n </li>\n </ul>\n </>\n );\n }\n })()}\n </>\n );\n};\n\nexport const PickListEditHelp = (props) => {\n const classes = useStyles();\n var tab = getFormTab(props);\n\n return (\n <>\n {(() => {\n switch (tab) {\n case \"0\":\n return (\n <>\n <Typography variant=\"overline\">\n <strong>Outbound Setup</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>PO Number: </strong>\n Purchase Order number provided by Customer.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Carrier Name: </strong>\n Rail line / truck line name.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Carrier Type: </strong>\n Select carrier type - determines \"Pickup Number\" or\n \"Railcar Number\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Pickup Number: </strong> Required if Carrier Type\n = \"Truck\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Railcar Number: </strong>\n Required if shipping by Rail and Carrier Type = \"Rail\".\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Must Tarp: </strong>\n Required if Carrier Type = \"Truck\". Indicate if load needs\n to be covered with tarp.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Destination Name & Address: </strong>\n Optional - can be left blank for \"Blind Shipments\". If\n Destination entered, address is required.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>PO File: </strong>\n Attach the original PO from customer.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup. These fields are\n Account-specific, so they may differ from one inbound to\n another.\n </Typography>\n </li>\n </ul>\n </>\n );\n case \"1\":\n return (\n <>\n <Typography variant=\"overline\">\n <strong>Pick List</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Product Name: </strong>\n Product name as displayed in the Inventories. Items linked\n to Product Catalog will have an{\" \"}\n <InfoOutlinedIcon className={classes.icon} /> Info Bubble\n in the right corner. Those not linked to a Product, will\n display <LinkOffIcon className={classes.icon} /> broken\n link icon.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. On Hand: </strong>Stock quantity in storage.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Committed: </strong>\n Stock quantity Reserved across all Outbound Shipments,\n including this one - dynamically updated.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Available: </strong>\n Stock quantity available of Outbound Shipment, inclusive\n of Qty. Committed in this shipment.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Outbound: </strong>Stock quantity Reserved\n for this shipment.\n </Typography>\n </li>\n <li>\n <Typography variant=\"overline\">\n <strong>Custom Fields</strong>\n </Typography>\n <Typography>\n User-defined in Account setup or Product Catalog. These\n fields are Account- and Product-specific, so they may\n differ from one inbound to another.\n </Typography>\n </li>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>\n Add new Line Item to Pick List. Launches \"Inventory\n Search\" dialog. Account must be selected on Shipment Setup\n Tab to enable the Add button. Inventory Search dialog\n allows you to search for All Inventories by hitting the\n Search button, or narrowing down results by product name,\n or lot number.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Pick List Line Item and adjust global\n Inventory counts.\n </Typography>\n </li>\n <li>\n <Typography>\n <EditIcon className={classes.icon} />\n <strong> EDIT: </strong>\n Edit Qty. Outbound of selected Line Item. After saving or\n cancelling changes, you will be brought back to this\n screen.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Total Quantity & Shipping Units: </strong>\n Sum total of Qty. Outbound. Indicate units of measure for\n counting Qty shipped.\n </Typography>\n </li>\n <li>\n <Typography gutterBottom>\n <strong>Bill Quantity & Units: </strong>\n Total Qty. Outbound and Units used for invoicing customer.\n If Billing Units = Weight Units, the measured truck weight\n will be used for invoicing.\n </Typography>\n </li>\n </ul>\n </>\n );\n case \"2\":\n return (\n <>\n <Typography variant=\"overline\">\n <strong>Dispatch</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Use the Dispatch Tab to capture key event timestamps when the\n shipment is advanced from Pending > Placed > Released status.\n Alternatively, you can advance a record directly from the\n \"Outboud Shipment\" List view.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Date Created: </strong>\n Date customer advised of Outbound Shipment.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Time Placed: </strong>\n Time of Arrival when the Carrier arrives and checks in\n with the Yard.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Empty Weight & Units: </strong>\n Empty truck weight at time of Arrival. Used for invoicing\n if Units = Billing Units.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Load Start Time:</strong> Time when Crew started\n loading outbound inventory.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Load End Time:</strong> Time when Crew finished\n loading outbound inventory.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Time Released:</strong> Time shipment was approved\n and Released.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Loaded Weight & Units: </strong>\n Loaded truck weight at time of Departure. Used for\n invoicing if Units = Billing Units.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Seal Number: </strong>\n Seal tag number for shipments that require sealing.\n </Typography>\n </li>\n </ul>\n </>\n );\n case \"3\":\n return (\n <>\n <Typography variant=\"overline\">\n <strong>Notes</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Use the Notes Tab to document key events and changes made to\n the Shipment record.\n </Typography>\n <ul>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>Add new Note Line Item.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Note Line Item - this info will be\n permanently lost.\n </Typography>\n </li>\n </ul>\n </>\n );\n default:\n return (\n <>\n <Typography variant=\"overline\">\n <strong>History</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n The History Tab provides an automated, chronological Audit\n Trail of key events and record changes.\n </Typography>\n </>\n );\n }\n })()}\n </>\n );\n};\n\n// const Switch = props => {\n// const { test, children } = props\n// // filter out only children with a matching prop\n// return children.find(child => {\n// return child.props.value === test\n// })\n// }\n\n// const Sample = props => {\n// const someTest = true\n// return (\n// <Switch test={someTest}>\n// <div value={false}>Will display if someTest is false</div>\n// <div value={true}>Will display if someTest is true</div>\n// </Switch>\n// )\n// }\n","import React from \"react\";\nimport { Grid, InputAdornment } from \"@material-ui/core\";\nimport { FunctionField, NumberInput, TextInput } from \"react-admin\";\n\nimport { ShipmentLineItemStatus } from \"../../../../utils/constants\";\nimport { getQuantityToPickLabel } from \"../OutboundUtils\";\nimport { getNestedValue, validateQuantity } from \"./PickListItemUtils\";\nimport { exceptionRenderer, trimDecimal } from \"../../../../utils/utils\";\n\nconst ExceptionRenderer = ({ record, getSource }) => {\n const barcodeExceptionSource = getSource(\"barcodeException\");\n const barcodeExceptionNoteSource = getSource(\"barcodeExceptionNote\");\n const hasExceptionSource = getSource(\"hasException\");\n\n const barcodeException = getNestedValue(record, barcodeExceptionSource);\n const barcodeExceptionNote = getNestedValue(\n record,\n barcodeExceptionNoteSource\n );\n const hasException = getNestedValue(record, hasExceptionSource);\n\n const exceptions = {\n barcodeException,\n barcodeExceptionNote,\n hasException,\n };\n\n return (\n <FunctionField\n source={getSource(\"hasException\")}\n render={() => exceptionRenderer(exceptions, \"top\")}\n />\n );\n};\n\nexport const PickListInventoryItem = ({\n record,\n getSource,\n formData,\n scopedFormData,\n handleQuantityChange,\n}) => {\n const calcMaxQtyOutbound = (item) => {\n const totalCommitted = item?.inventoryItem?.quantityCommitted;\n const qtyToPick = item?.quantityToPick;\n const committedElsewhere = trimDecimal(totalCommitted - qtyToPick);\n const quantityOnHand = item?.inventoryItem?.quantityOnHand;\n const maxAvailable =\n quantityOnHand && committedElsewhere >= 0\n ? trimDecimal(quantityOnHand - committedElsewhere)\n : quantityOnHand;\n\n return maxAvailable;\n };\n\n return (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={3}>\n <TextInput\n source={getSource(\"inventoryItem.locationFullName\")}\n label=\"Location\"\n variant=\"outlined\"\n fullWidth\n disabled\n helperText={false}\n />\n </Grid>\n <Grid item xs={3}>\n <NumberInput\n source={getSource(\"inventoryItem.quantityOnHand\")}\n label=\"Qty On Hand\"\n variant=\"outlined\"\n fullWidth\n disabled\n helperText={false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">{`${\n formData.inventory?.inventoryUnits || \"\"\n }`}</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={3}>\n <NumberInput\n source={getSource(\"inventoryItem.quantityCommitted\")}\n label=\"Qty Committed\"\n variant=\"outlined\"\n fullWidth\n disabled\n helperText={false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">{`${\n formData.inventory?.inventoryUnits || \"\"\n }`}</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={2}>\n <NumberInput\n source={getSource(\"quantityToPick\")}\n label={getQuantityToPickLabel(record)}\n variant=\"outlined\"\n min={0}\n max={calcMaxQtyOutbound(scopedFormData)}\n onChange={handleQuantityChange(getSource(\"quantityToPick\"))}\n validate={validateQuantity(0, calcMaxQtyOutbound(scopedFormData))}\n disabled={\n record.status === ShipmentLineItemStatus.LOADED ||\n record.status === ShipmentLineItemStatus.SHIPPED\n }\n helperText={false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">{`${\n formData.inventory?.inventoryUnits || \"\"\n }`}</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item align=\"center\" alignContent=\"center\" xs={1}>\n <ExceptionRenderer record={record} getSource={getSource} />\n </Grid>\n </Grid>\n );\n};\n","import React from \"react\";\n\nimport {\n ArrayInput,\n Button,\n FormDataConsumer,\n SimpleFormIterator,\n} from \"react-admin\";\nimport { AddIcon, RemoveIcon } from \"../../../../components/common\";\nimport { ShipmentLineItemStatus } from \"../../../../utils/constants\";\nimport { PickListInventoryItem } from \"./PickListInventoryItem\";\n\nexport const PickListInventoryItems = ({\n record,\n setAddOpen,\n handleQuantityChange,\n}) => {\n const AddButton = () => (\n <Button label=\"ADD\" color=\"default\" onClick={() => setAddOpen(true)}>\n <AddIcon />\n </Button>\n );\n const RemoveButton = (props) => {\n const handleRemove = (event) => {\n props.onClick(event);\n handleQuantityChange();\n };\n\n return (\n <Button label=\"REMOVE\" color=\"default\" onClick={handleRemove}>\n <RemoveIcon />\n </Button>\n );\n };\n\n return (\n <ArrayInput source=\"inventoryItems.items\" label=\"LOCATIONS\" fullWidth>\n <SimpleFormIterator\n disableReordering={true}\n addButton={<AddButton />}\n disableAdd={\n record.status === ShipmentLineItemStatus.LOADED ||\n record.status === ShipmentLineItemStatus.SHIPPED\n }\n removeButton={<RemoveButton />}\n disableRemove={\n record.status === ShipmentLineItemStatus.LOADED ||\n record.status === ShipmentLineItemStatus.SHIPPED\n }\n >\n <FormDataConsumer>\n {({\n formData, // The whole form data\n scopedFormData, // The data for this item of the ArrayInput\n getSource, // Function to get the valid source inside an ArrayInput. Translates to \"inventories.items[].property\"\n }) => (\n <PickListInventoryItem\n record={record}\n getSource={getSource}\n formData={formData}\n scopedFormData={scopedFormData}\n handleQuantityChange={handleQuantityChange}\n />\n )}\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Grid, InputAdornment, TextField } from \"@material-ui/core\";\nimport {\n FormDataConsumer,\n NumberInput,\n TextInput,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\nimport { CustomFields } from \"../../../../components/common/CustomFields\";\nimport { trimDecimal } from \"../../../../utils/utils\";\nimport { showWeight } from \"../../inventory/InventoryUitls\";\nimport { InventorySearchDialog } from \"../InventorySearchDialog\";\nimport { getInventory } from \"../OutboundUtils\";\nimport { PickListInventoryItems } from \"./PickListInventoryItems\";\n\nexport const PickLineItemTab = ({\n record,\n outbound,\n account,\n setInventoryItems,\n ...props\n}) => {\n const form = useForm();\n const notify = useNotify();\n const [addOpen, setAddOpen] = useState(false);\n const [quantityAvailable, setQuantityAvailable] = useState(0);\n const [allInventories, setAllInventories] = useState([]);\n const [isLoaded, setIsLoaded] = useState(false); // used in InventorySearchDialog\n\n useEffect(() => {\n getInventory(record.inventoryId, setAllInventories, setIsLoaded, notify);\n setQuantityAvailable(\n trimDecimal(\n record.inventory.quantityOnHand - record.inventory.quantityCommitted\n )\n );\n }, [record]);\n\n form.registerField(\n \"inventoryItems\",\n (fieldState) => {\n const { change, ...rest } = fieldState;\n },\n { dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"inventoryItems.items\",\n (fieldState) => {\n const { change, ...rest } = fieldState;\n },\n { dirty: true, touched: true, valid: true, value: true }\n );\n\n const updateShipmentLineItem = async (shipmentItems) => {\n const shipmentLineItem = shipmentItems[0];\n debugger;\n\n form.change(\"inventoryItems.items\", shipmentLineItem.inventoryItems.items);\n setInventoryItems(shipmentLineItem.inventoryItems.items);\n const newTotal = shipmentLineItem.inventoryItems.items.reduce(\n (total, loc) => +total + +loc.quantityToPick,\n 0\n );\n form.change(\"totalQuantityToPick\", newTotal);\n form.change(\"inventory.quantityCommitted\", newTotal);\n };\n\n const handleQuantityChange = (source) => {\n if (source) {\n const sourcePath = source.substring(0, source.lastIndexOf(\"[\"));\n const sourceIndex = parseInt(\n source.substring(source.indexOf(\"[\") + 1, source.indexOf(\"]\"))\n );\n const sourceState = form.getFieldState(sourcePath);\n\n if (sourceState.initial[sourceIndex]?.inventoryItem) {\n debugger;\n const initQtyCommitted =\n sourceState.initial[sourceIndex].inventoryItem.quantityCommitted;\n const initQtyToPick = sourceState.initial[sourceIndex].quantityToPick;\n const newQtyToPick = Number(\n sourceState.value[sourceIndex]?.quantityToPick\n );\n const newQtyCommitted = trimDecimal(\n initQtyCommitted - initQtyToPick + newQtyToPick\n );\n const newFieldPath = `${sourcePath}[${sourceIndex}].inventoryItem.quantityCommitted`;\n // if not deleted update the row\n if (sourceState.value[sourceIndex])\n form.change(newFieldPath, newQtyCommitted);\n }\n }\n\n const inventoryItemsState = form.getFieldState(\"inventoryItems.items\");\n setInventoryItems(inventoryItemsState.value);\n\n const newTotal = inventoryItemsState.value.reduce(\n (total, loc) => +total + +loc.quantityToPick,\n 0\n );\n form.change(\"totalQuantityToPick\", newTotal);\n\n const qtyComm = trimDecimal(\n record.inventory.quantityCommitted - record.totalQuantityToPick + newTotal\n );\n form.change(\"inventory.quantityCommitted\", qtyComm);\n\n const qtyAvail = trimDecimal(record.inventory.quantityOnHand - qtyComm);\n setQuantityAvailable(qtyAvail);\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source={\"inventory.productName\"}\n label=\"Product Name\"\n variant=\"outlined\"\n fullWidth\n disabled\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <TextInput\n source={\"lotNumber\"}\n label=\"Lot No.\"\n variant=\"outlined\"\n fullWidth\n disabled\n helperText={false}\n />\n </Grid>\n <Grid item xs={false} sm={3}></Grid>\n <Grid item xs={12} md={3}>\n <NumberInput\n source=\"inventory.quantityOnHand\"\n label=\"Qty. On Hand\"\n variant=\"outlined\"\n fullWidth\n disabled\n helperText={false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">{`${\n formData.inventory?.inventoryUnits || \"\"\n }`}</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <NumberInput\n source=\"inventory.quantityCommitted\"\n label=\"Qty. Committed\"\n variant=\"outlined\"\n fullWidth\n disabled\n helperText={false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">{`${\n formData.inventory?.inventoryUnits || \"\"\n }`}</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <TextField\n label=\"Qty. Available\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n disabled\n value={quantityAvailable}\n helperText={false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">{`${\n formData.inventory?.inventoryUnits || \"\"\n }`}</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <NumberInput\n source=\"totalQuantityToPick\"\n label=\"Qty. Outbound\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n InputLabelProps={{ shrink: true }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">{`${\n formData.inventory?.inventoryUnits || \"\"\n }`}</InputAdornment>\n ),\n }}\n />\n </Grid>\n {showWeight(formData.inventory.account, formData.inventory) && (\n <Grid item xs={12} md={3}>\n <NumberInput\n source=\"inventory.weight\"\n label=\"Weight\"\n variant=\"outlined\"\n fullWidth\n disabled\n helperText={false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">{`${\n formData.inventory?.weightUnits || \"\"\n }`}</InputAdornment>\n ),\n }}\n />\n </Grid>\n )}\n <CustomFields\n {...props}\n source={\"inventory.customFields\"}\n recordFields={record.inventory?.customFields}\n accountFields={account?.inventoryCustomFields}\n disabled={true}\n width={3}\n />\n <Grid item xs={12}>\n <PickListInventoryItems\n {...props}\n record={record}\n form={form}\n setAddOpen={setAddOpen}\n handleQuantityChange={handleQuantityChange}\n />\n {addOpen && (\n <InventorySearchDialog\n {...props}\n form={form}\n pickListItem={formData}\n allInventories={allInventories}\n isOpen={addOpen}\n setIsOpen={setAddOpen}\n isLoaded={isLoaded}\n updateShipment={updateShipmentLineItem}\n />\n )}\n </Grid>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { Backdrop, CircularProgress } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n Edit,\n FormTab,\n TabbedForm,\n Toolbar,\n TopToolbar,\n useEditController,\n useNotify,\n} from \"react-admin\";\nimport { orange } from \"@material-ui/core/colors\";\n\nimport { getOutboundShipment } from \"../../../../graphql/outbound/custom-queries\";\n\nimport { BackButton } from \"../../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../../components/common/ForceTitle\";\nimport { HistoryTab } from \"../../../../components/common/HistoryTab\";\nimport { NotesTab } from \"../../../../components/common/NotesTab\";\nimport { HelpButton } from \"../../../../components/common/HelpButton\";\nimport { DialogSaveButton } from \"./DialogSaveButton\";\nimport { DeepDeleteButton } from \"./DeepDeleteButton\";\nimport { PickListItemAside } from \"./PickListItemAside\";\nimport { PickListEditHelp } from \"./PickListHelp\";\nimport { getBackPath } from \"../../../../utils/utils\";\nimport { logError } from \"../../../../utils/appUtils\";\nimport { PickLineItemTab } from \"./PickLineItemTab\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: \"#fff\",\n },\n icons: {\n color: orange[600],\n alignItems: \"center\",\n },\n}));\n\nconst EditActions = (props) => {\n return (\n <TopToolbar>\n <HelpButton>\n <PickListEditHelp {...props} />\n </HelpButton>\n <BackButton {...props} />\n </TopToolbar>\n );\n};\n\nconst EditToolbar = (props) => {\n const classes = useStyles();\n const [isSaving, setIsSaving] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n\n return (\n <Toolbar style={{ justifyContent: \"space-between\" }}>\n <Backdrop className={classes.backdrop} open={isSaving || isDeleting}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <DialogSaveButton\n {...props}\n isSaving={isSaving}\n setIsSaving={setIsSaving}\n isDeleting={isDeleting}\n />\n <DeepDeleteButton\n {...props}\n isSaving={isSaving}\n isDeleting={isDeleting}\n setIsDeleting={setIsDeleting}\n />\n </Toolbar>\n );\n};\n\nconst getOutboundData = async (record, setOutbound, notify) => {\n // outbound.shipmentLineItems.items is required for updateOutboundQuantity\n try {\n debugger;\n const response = await API.graphql(\n graphqlOperation(getOutboundShipment, { id: record.outboundShipmentId })\n );\n setOutbound(response.data.getOutboundShipment);\n } catch (err) {\n logError(\"PickListItemEdit:getOutboundData\", err, notify);\n }\n};\n\nexport const PickListItemEdit = (props) => {\n const notify = useNotify();\n const { record } = useEditController(props);\n const [inventoryItems, setInventoryItems] = useState([]);\n const [outbound, setOutbound] = useState(props.location?.state?.outbound);\n const account = outbound?.account;\n const backPath = getBackPath(props);\n\n useEffect(() => {\n if (record?.inventoryItems?.items && inventoryItems?.length === 0) {\n setInventoryItems(record.inventoryItems.items);\n }\n if (record && !outbound) getOutboundData(record, setOutbound, notify);\n }, [record]);\n\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Pick List\" />}\n mutationMode=\"pessimistic\"\n aside={\n <PickListItemAside {...props} record={record} backPath={backPath} />\n }\n actions={<EditActions {...props} backPath={backPath} />}\n >\n <TabbedForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={\n <EditToolbar\n {...props}\n record={record}\n outbound={outbound}\n backPath={backPath}\n inventoryItems={inventoryItems}\n />\n }\n >\n <FormTab label=\"Item Setup\">\n <PickLineItemTab\n {...props}\n record={record}\n outbound={outbound}\n account={account}\n setInventoryItems={setInventoryItems}\n />\n </FormTab>\n <FormTab label=\"Notes\">\n <NotesTab />\n </FormTab>\n <FormTab label=\"History\">\n <HistoryTab />\n </FormTab>\n </TabbedForm>\n </Edit>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { Button, Confirm } from \"react-admin\";\n\nimport { EditIcon, ShowIcon } from \"../../../../components/common\";\nimport { deepRedirect } from \"../../../../utils/utils\";\nimport { InventoryStatus, LocationType } from \"../../../../utils/constants\";\nimport { isUnmanagedLocation } from \"../../../../utils/locationUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n alignRight: {\n textAlign: \"right\",\n },\n}));\n\nexport const OpenInventoryItemButton = ({\n form,\n record,\n inventory,\n backPath,\n isDeleting,\n ...props\n}) => {\n const classes = useStyles();\n const history = useHistory();\n const [open, setOpen] = useState(false);\n const location = record?.location;\n const isEditable =\n isUnmanagedLocation(location) && record.status !== InventoryStatus.SHIPPED;\n\n const handleOpen = () => {\n debugger;\n const formState = form?.getState();\n if (formState?.dirty) setOpen(true);\n else handleConfirm();\n };\n\n const handleDialogClose = () => setOpen(false);\n const handleConfirm = () => {\n debugger;\n if (isEditable) {\n deepRedirect(\n history,\n `/inventoryItems/${record.id}`,\n props.location?.pathname,\n backPath,\n {\n inventory: inventory,\n }\n );\n } else {\n deepRedirect(\n history,\n `/inventoryItems/${record.id}/show`,\n props.location?.pathname,\n backPath,\n {\n inventory: inventory,\n }\n );\n }\n };\n\n if (!record || inventory?.status === InventoryStatus.SHIPPED) return null;\n return (\n <div className={classes.alignRight}>\n {isEditable ? (\n <Button\n label=\"EDIT\"\n size=\"small\"\n color=\"primary\"\n onClick={handleOpen}\n disabled={isDeleting}\n >\n <EditIcon />\n </Button>\n ) : (\n <Button\n label=\"SHOW\"\n size=\"small\"\n color=\"primary\"\n onClick={handleOpen}\n disabled={isDeleting}\n >\n <ShowIcon />\n </Button>\n )}\n <Confirm\n isOpen={open}\n title=\"Save Confirmation\"\n content=\"You have un-saved Inventory changes. If you continue, all changes will be lost. Proceed?\"\n onConfirm={handleConfirm}\n onClose={handleDialogClose}\n />\n </div>\n );\n};\n","import React, { useState, useEffect } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { inventoryItemByInventoryByStatusMini } from \"../../../../graphql/inventory/custom-queries\";\n\nimport { Grid } from \"@material-ui/core\";\n\nimport {\n ArrayField,\n Datagrid,\n FunctionField,\n NumberField,\n ResourceContextProvider,\n TextField,\n useNotify,\n} from \"react-admin\";\n\nimport { isAuthorized, logError } from \"../../../../utils/appUtils\";\nimport { AclType, InventoryStatus } from \"../../../../utils/constants\";\nimport { exceptionRenderer } from \"../../../../utils/utils\";\nimport { OpenInventoryItemButton } from \"./OpenInventoryItemButton\";\nimport { sortByLocation } from \"../../../../utils/locationUtils\";\n\nexport const LocationsPeak = (props) => {\n const notify = useNotify();\n const [locations, setLocations] = useState([]);\n const { record, basePath } = props;\n\n useEffect(() => {\n if (record.id) getLocationData();\n }, []);\n\n const getLocationData = async () => {\n try {\n debugger;\n const response = await API.graphql(\n graphqlOperation(inventoryItemByInventoryByStatusMini, {\n inventoryId: record.id,\n status: { beginsWith: InventoryStatus.STORED },\n limit: 500,\n })\n );\n const inventoryItems =\n response.data.inventoryItemByInventoryByStatus.items;\n\n if (inventoryItems) {\n const sortedItems = {\n items: sortByLocation(inventoryItems),\n };\n setLocations(sortedItems);\n }\n } catch (error) {\n logError(\"inventoryItems:LocationsPeak:getLocationData\", error, notify);\n }\n };\n\n if (locations?.items?.lentch === 0) return <></>;\n return (\n <ResourceContextProvider value=\"inventoryItems\">\n <Grid container>\n <Grid item xs={false} sm={1}>\n <></>\n </Grid>\n <Grid item xs={12} sm={10}>\n <ArrayField source=\"items\" record={locations} fullWidth>\n <Datagrid>\n <FunctionField\n source=\"hasException\"\n label=\" \"\n render={exceptionRenderer}\n />\n <TextField\n source=\"locationFullName\"\n label=\"Location\"\n record={locations}\n sortable={false}\n />\n <NumberField\n source=\"quantityOnHand\"\n label=\"Qty. On Hand\"\n sortable={false}\n />\n <NumberField\n source=\"quantityCommitted\"\n label=\"Qty. Committed\"\n sortable={false}\n />\n {isAuthorized(AclType.ASSIGN_LOCATION) && (\n <OpenInventoryItemButton\n inventory={record}\n backPath={[basePath]}\n />\n )}\n </Datagrid>\n </ArrayField>\n </Grid>\n <Grid item xs={false} sm={3}>\n <></>\n </Grid>\n </Grid>\n </ResourceContextProvider>\n );\n};\n","import { downloadCSV } from \"ra-core\";\nimport jsonExport from \"jsonexport/dist\";\nimport {\n calculateMbf,\n calculateSqf,\n getUnitName,\n isLumberCommodity,\n isPanelsCommodity,\n} from \"../../../utils/loadTypeUtils\";\nimport {\n exportCustomField,\n getFormattedStartAndEndDate,\n trimDecimal,\n} from \"../../../utils/utils\";\nimport { buildHeader } from \"../../../utils/exportsUtils\";\nimport { FilePaths, Orientations, Unit } from \"../../../utils/constants\";\nimport { parseCustomFieldToObject } from \"../../../components/common/CustomFields\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n generateAndDownloadPdf,\n generateFileName,\n} from \"../../../utils/fileUtils\";\n\nexport const inventoryExportPdf = async (\n data,\n _inputStartDate,\n _inputEndDate,\n notify,\n filter\n) => {\n try {\n const reloadYardId = window.appUser?.reloadYardId;\n\n const { formattedStartDate, formattedEndDate } =\n getFormattedStartAndEndDate(\n data,\n new Date(),\n new Date(),\n \"deliveryDateTime\"\n );\n\n // Initialize totals and flags\n let totalPieces = 0;\n let totalMBF = 0;\n let totalSF = 0;\n let showPPU = false;\n let showFootage = false;\n let totalsMap = {};\n\n // Process inventories\n const items = data.map((item) => {\n // Destructure item properties with default values\n const {\n reloadYardCommodityId,\n pcs,\n productName = \"--\",\n productCode = \"--\",\n product,\n quantityOnHand = 0,\n accountName = \"--\",\n customFields = [],\n inventoryUnits,\n } = item;\n\n // Parse custom fields\n const cleanCustomFields = customFields?.map(parseCustomFieldToObject);\n\n // Calculate pieces and units\n const pieces = pcs || product?.pcs;\n const units = parseInt(quantityOnHand) || 0;\n totalPieces += pieces ? pieces * units : 0;\n\n // Initialize footage variables\n let footage = null;\n let footageUOM = \"\";\n\n // Calculate footage based on commodity type\n if (isLumberCommodity(reloadYardCommodityId)) {\n footage = calculateMbf(item);\n footageUOM = Unit.MBF;\n totalMBF += footage * units;\n } else if (isPanelsCommodity(reloadYardCommodityId)) {\n footage = calculateSqf(item);\n footageUOM = Unit.SF;\n totalSF += footage * units;\n }\n\n // Set display flags\n showPPU = showPPU || !!parseInt(pieces);\n showFootage = showFootage || !!parseInt(footage);\n\n // Update totals map\n if (totalsMap[inventoryUnits]) {\n totalsMap[inventoryUnits] += units;\n } else {\n totalsMap[inventoryUnits] = units;\n }\n\n // Return processed inventory item\n return {\n accountName: accountName,\n productName: productName,\n productCode: productCode,\n customFields: cleanCustomFields,\n ppu: !!pieces ? trimDecimal(pieces)?.toLocaleString() : \"--\",\n units: `${parseInt(units)?.toLocaleString()} ${getUnitName(\n inventoryUnits\n )}`,\n footage:\n footage !== null\n ? `${trimDecimal(footage * units)?.toLocaleString()} ${footageUOM}`\n : \"--\",\n };\n });\n\n const fileName = generateFileName({ resource: \"inventory\", ext: \"pdf\" });\n const downloadName = generateFileName({\n resource: \"inventory\",\n ext: \"pdf\",\n includeDate: true,\n });\n\n // Build columns array\n const columns = [\n { label: \"Product Name\", source: \"productName\" },\n { label: \"Product Code\", source: \"productCode\" },\n ];\n\n if (!filter?.accountId?.eq) {\n columns.unshift({ label: \"Customer\", source: \"accountName\" });\n }\n\n if (showPPU) {\n columns.push({ label: \"PPU\", source: \"ppu\" });\n }\n\n columns.push({ label: \"Quantity\", source: \"units\" });\n\n if (showFootage) {\n columns.push({ label: \"Footage\", source: \"footage\" });\n }\n\n // Build header\n const header = buildHeader(\n data,\n formattedStartDate,\n formattedEndDate,\n filter\n );\n\n // Build footer\n const footer = [\n {\n label: \"Totals\",\n value: \"\",\n },\n ];\n\n // Add totals breakdown to the footer\n if (Object.keys(totalsMap).length > 0) {\n for (const [uom, value] of Object.entries(totalsMap)) {\n footer.push({\n label: `${uom}`,\n value: trimDecimal(value).toLocaleString(),\n });\n }\n }\n\n if (!!totalPieces) {\n footer.push({\n label: \"Pieces\",\n value: trimDecimal(totalPieces).toLocaleString(),\n });\n }\n\n if (totalMBF) {\n footer.push({\n label: \"MBF\",\n value: trimDecimal(totalMBF).toLocaleString(),\n });\n }\n\n if (totalSF) {\n footer.push({\n label: \"SF\",\n value: trimDecimal(totalSF).toLocaleString(),\n });\n }\n\n // Generate the PDF report\n const templateKey = `${FilePaths.TEMPLATES_PDF}/${FilePaths.TEMPLATE_REPORT}`;\n const outputFileKey = `${reloadYardId}/${reloadYardId}/${FilePaths.INVENTORY}/${fileName}`;\n await generateAndDownloadPdf({\n templateKey,\n outputFileKey,\n downloadName,\n data: {\n metaData: {\n orientation: Orientations.PORTRAIT,\n currentDate: new Date().toLocaleString(),\n },\n content: {\n header,\n title: \"INVENTORY REPORT\",\n table: {\n columns,\n items,\n },\n footer,\n },\n },\n });\n } catch (err) {\n logError(\"inventory:exportPdf\", err, notify);\n }\n};\n\nexport const inventoryExportCsv = (inventories) => {\n const customHeaderMap = new Map();\n debugger;\n\n const inventoriesForExport = inventories.map((inventory) => {\n const inventoryForExport = {\n inventoryId: inventory.id,\n accountName: inventory.accountName,\n productCode: inventory.productCode,\n productName: inventory.productName,\n lotNumber: inventory.lotNumber,\n poNumber: inventory.poNumber,\n carTralNumber: inventory.railCarNumber,\n dateReceived: inventory.deliveryDateTime\n ? new Date(inventory.deliveryDateTime).toLocaleDateString()\n : \"\",\n totalOnHand: inventory.quantityOnHand,\n totalCommitted: inventory.quantityCommitted || 0,\n units: inventory.inventoryUnits,\n pieces: inventory.pcs || inventory.product?.pcs || \"\",\n };\n\n if (inventory.customFields?.length > 0) {\n inventory.customFields.forEach((field) => {\n exportCustomField(field, inventoryForExport, customHeaderMap);\n });\n }\n\n if (inventory.inventoryItems?.items) {\n inventoryForExport.inventoryItem = inventory.inventoryItems.items.map(\n (inventoryItem) => {\n const lineItem = {\n itemId: inventoryItem.id,\n location: inventoryItem.locationFullName,\n quantityOnHand: inventoryItem.quantityOnHand,\n quantityCommitted: inventoryItem.quantityCommitted || 0,\n damaged: inventoryItem.isDamaged\n ? inventoryItem.originOfDamage\n : \"\",\n };\n\n return lineItem;\n }\n );\n }\n\n return inventoryForExport;\n });\n\n jsonExport(inventoriesForExport, { rename: [\"inventoryId\"] }, (err, csv) => {\n downloadCSV(csv, `inventories_${new Date().toLocaleDateString()}`); // download as 'inventories_DATE.csv` file\n });\n};\n","import React, { useEffect, useState } from \"react\";\nimport {\n Card,\n Grid,\n Hidden,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n DateField,\n EditButton,\n FilterButton,\n FunctionField,\n ListContextProvider,\n ListToolbar,\n NumberField,\n RefreshButton,\n SelectInput,\n SimpleList,\n TextField,\n Title,\n TopToolbar,\n useListContext,\n} from \"react-admin\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { ChevronRightIcon } from \"../../../components/common\";\nimport { CustomField } from \"../../../components/common/CustomFields\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { LowInventoryIcon } from \"../../../components/common/LowInventoryIcon\";\nimport { ProductLinkIcon } from \"../../../components/common/ProductLinkIcon\";\nimport { QuickFilter } from \"../../../components/common/QuickFilter\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport CustomizableDatagrid from \"../../../components/common/ra-customizable-datagrid\";\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\nimport {\n InventoryStatus,\n LotTypes,\n MAX_INVENTORY_QUERY_LIMIT,\n} from \"../../../utils/constants\";\nimport {\n exceptionRenderer,\n piecesRenderer,\n quantityRenderer,\n totalPiecesRenderer,\n trimDecimal,\n} from \"../../../utils/utils\";\n// import { AuditStatusIcon } from \"./AuditStatusIcon\";\nimport { TurnDaysIcon } from \"./TurnDaysIcon\";\nimport { LocationsPeak } from \"./inventoryItems/LocationsPeak\";\nimport ExportDropDown from \"../../../components/common/ExportDropDown\";\nimport { ListDatePicker } from \"../../../components/common/ListDatePicker\";\nimport { getUnitName } from \"../../../utils/loadTypeUtils\";\nimport { inventoryExportCsv, inventoryExportPdf } from \"./InventoriesExports\";\nimport { AccountDropDown } from \"../../../components/common/AccountDropDown\";\n\nconst useStyles = makeStyles((theme) => ({\n totals: {\n marginLeft: theme.spacing(2),\n },\n textRight: {\n textAlign: \"right\",\n },\n}));\n\nconst InventorySearchField = (props) => {\n const listContext = useListContext(props);\n const { displayedFilters, filterValues, setFilters } = listContext;\n const { label, alwaysOn } = props;\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n setFilters(\n {\n ...filterValues,\n or: [\n { accountName: { matchPhrasePrefix: `${value}` } },\n { productName: { matchPhrasePrefix: `${value}` } },\n { productName: { wildcard: `*${value}*` } },\n { productCode: { matchPhrasePrefix: `${value}` } },\n { productCode: { wildcard: `*${value}*` } },\n { lotNumber: { matchPhrasePrefix: `${value}` } },\n { lotNumber: { wildcard: `*${value}*` } },\n { poNumber: { matchPhrasePrefix: `${value}` } },\n { poNumber: { wildcard: `*${value}*` } },\n { railCarNumber: { matchPhrasePrefix: `${value}` } },\n { railCarNumber: { wildcard: `*${value}*` } },\n { customFields: { matchPhrasePrefix: `${value}` } },\n { customFields: { wildcard: `*${value}*` } },\n ],\n },\n displayedFilters\n );\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = (setAccount, mdDown) => {\n const commodities = window.appUser.reloadYard.activeYardCommodities.items;\n\n return [\n <AccountDropDown\n source=\"accountId.eq\"\n label=\"Account\"\n alwaysOn={!mdDown}\n onAccountChange={(value) => setAccount(value)}\n />,\n <InventorySearchField label=\"Search\" alwaysOn />,\n <SelectInput\n source=\"areaId.eq\"\n label=\"Area\"\n variant=\"outlined\"\n resettable\n allowEmpty\n alwaysOn={!mdDown}\n choices={window.appUser?.reloadYard.areas.items}\n />,\n <SelectInput\n source=\"reloadYardCommodityId.eq\"\n label=\"Load Type\"\n variant=\"outlined\"\n resettable\n allowEmpty\n alwaysOn={!mdDown}\n choices={commodities}\n optionText=\"commodity.name\"\n />,\n // <QuickFilter source=\"quantityMismatch\" label=\"Failed Audit\" defaultValue={{ eq: true }} />,\n <QuickFilter\n source=\"hasException\"\n label=\"Has Exception\"\n defaultValue={{ eq: true }}\n />,\n <SelectInput\n source=\"lotType.eq\"\n label=\"Lot Type\"\n variant=\"outlined\"\n resettable\n allowEmpty\n choices={LotTypes}\n />,\n <ListDatePicker\n label=\"Date received\"\n source=\"deliveryDateTime\"\n filterField=\"deliveryDateTime\"\n />,\n ];\n};\n\nconst ListActions = (props) => {\n const { isXSmall } = props;\n const { resource, total } = useListContext();\n\n return !isXSmall ? (\n <TopToolbar>\n <FilterButton />\n <ExportDropDown\n total={total}\n resource={resource}\n exporter={inventoryExportCsv}\n exporterPdf={inventoryExportPdf}\n maxResults={MAX_INVENTORY_QUERY_LIMIT}\n today={true}\n filterField={\"deliveryDateTime\"}\n />\n <RefreshButton />\n </TopToolbar>\n ) : null;\n};\n\nexport const InventoryList = (props) => {\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const mdDown = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const [account, setAccount] = useState();\n\n const [defaultFilter, setDefaultFilter] = useState({\n reloadYardId: window.appUser.reloadYardId,\n statusAccountNameProductNameLotNumber: {\n beginsWith: {\n status: InventoryStatus.STORED,\n },\n },\n });\n\n const defaultSearchFilter = {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n status: { eq: InventoryStatus.STORED },\n };\n\n // Include key & search to display default sort order.\n const defaultSort = {\n field: `{\"key\":\"inventoryByStatusByAccountByProductByLot\", \"search\":\"accountName\"}`,\n order: \"ASC\",\n };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = Number(\n localStorage.getItem(`${props.resource}_perPage`)\n );\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? sessionPerPage : 10\n );\n\n const listContext = useSearchableList({\n ...props,\n defaultTitle: \"Inventory\",\n defaultFilter: defaultFilter,\n defaultSearchFilter: defaultSearchFilter,\n defaultPerPage: defaultPerPage,\n defaultSort: defaultSort,\n resource: \"inventories\",\n });\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n useEffect(() => {\n if (listContext?.filter) {\n // reset list on automatic stale list reset\n // Extract the key query from defaultSort\n const fieldObj = JSON.parse(defaultSort.field);\n const keyToCheck = fieldObj.key;\n\n // Check for the key's presence in filter\n const hasKey = keyToCheck in listContext.filter;\n const hasFilterValues = Object.keys(listContext.filterValues).length > 0;\n if (hasKey && hasFilterValues) listContext.setFilters({});\n }\n }, [listContext?.filter]);\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Inventory\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters(setAccount, mdDown)}\n actions={<ListActions isXSmall={isXSmall} />}\n />\n <Card>\n <InventoryGrid\n account={account}\n isXSmall={isXSmall}\n mdDown={mdDown}\n classes={classes}\n />\n <PaginationToolbar {...props} />\n </Card>\n </ListContextProvider>\n );\n};\n\nconst PaginationToolbar = (props) => {\n const classes = useStyles();\n const listContext = useListContext(props);\n const [total, setTotal] = useState(\"\");\n var formatter = new Intl.NumberFormat(\"en-US\");\n\n useEffect(() => {\n let totalsMap = {};\n\n if (listContext?.ids?.length > 0 && listContext?.data) {\n for (const id of listContext.ids) {\n const uom = listContext.data[id].inventoryUnits;\n\n if (totalsMap[uom]) {\n totalsMap[uom] += listContext.data[id].quantityOnHand;\n } else {\n totalsMap[uom] = listContext.data[id].quantityOnHand;\n }\n }\n }\n\n const totals = Object.keys(totalsMap)?.length;\n let totalString = \"\";\n\n if (totals >= 0) {\n totalString = \"Total \";\n for (const [key, value] of Object.entries(totalsMap)) {\n totalString = totalString + \" \" + key + \": \" + formatter.format(value);\n }\n }\n\n setTotal(totalString);\n }, [listContext]);\n\n return (\n <Grid container direction=\"row\" spacing={1} alignItems=\"center\">\n <Hidden mdDown>\n <Grid item xs={0} md={5}>\n <Typography className={classes.totals}>\n {\" \"}\n {total && `${total}`}{\" \"}\n </Typography>\n </Grid>\n </Hidden>\n <Grid item xs={12} md={7}>\n <Pagination {...props} {...listContext} />\n </Grid>\n </Grid>\n );\n};\n\nconst getTotalWeight = (record) => {\n // Return null if no record is provided\n if (!record) return null;\n\n const weight = record.weight;\n\n // Return null if weight is null, undefined, or an empty string\n if (weight == null || weight === \"\") return null;\n\n // Check if quantityOnHand is provided and is not null or undefined\n const quantityOnHand = record.quantityOnHand ?? null;\n\n // If quantityOnHand is null, undefined, or an empty string, return null\n if (quantityOnHand == null) return null;\n\n // Calculate total weight if both weight and quantityOnHand are numbers (including zero)\n if (!isNaN(weight) && !isNaN(quantityOnHand)) {\n return weight * quantityOnHand;\n }\n\n // Return null if any condition for a valid calculation is not met\n return null;\n};\n\nconst uomRenderer = (record) => {\n const inventoryUnits = record?.inventoryUnits;\n return getUnitName(inventoryUnits);\n};\n\nconst InventoryGrid = ({ account, ...props }) => {\n const { classes, isXSmall, mdDown } = props;\n const accountFields =\n account?.inventoryCustomFields?.length > 0\n ? account.inventoryCustomFields\n : [];\n const customGridFields = accountFields\n ? accountFields.map((field, index) => {\n return (\n <CustomField\n source={`customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={false}\n />\n );\n })\n : [];\n\n return isXSmall ? (\n <SimpleList\n primaryText={(record) => record.accountName}\n secondaryText={(record) =>\n quantityRenderer(record.quantityOnHand, record.inventoryUnits)\n }\n tertiaryText={(record) => record.lotNumber}\n leftIcon={exceptionRenderer}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n linkType=\"edit\"\n />\n ) : mdDown ? (\n <CustomizableDatagrid\n rowClick=\"edit\"\n storageProp={`InventoryList_${account?.id}_small`}\n defaultColumns={[\n \"accountName\",\n \"productName\",\n \"lotNumber\",\n \"quantityAvailable\",\n \"hasException\",\n ]}\n >\n {[\n <ProductLinkIcon sortable={false} />,\n <TextField\n source=\"accountName\"\n label=\"Customer\"\n sortable={true}\n sortBy={`{\"key\":\"inventoryByStatusByAccountByProductByLot\", \"search\":\"accountName\"}`}\n />,\n <TextField source=\"productName\" label=\"Product\" sortable={true} />,\n <FunctionField source=\"pcs\" label=\"Pieces\" render={piecesRenderer} />,\n <TextField source=\"lotNumber\" label=\"Lot Number\" sortable={true} />,\n <TextField source=\"poNumber\" label=\"PO Number\" sortable={true} />,\n <NumberField source=\"quantityOnHand\" label=\"On Hand\" sortable={true} />,\n <FunctionField\n source=\"quantityAvailable\"\n label=\"Available\"\n headerClassName={classes.textRight}\n sortable={false}\n render={(record) =>\n quantityRenderer(\n trimDecimal(record.quantityOnHand - record.quantityCommitted)\n )\n }\n />,\n <FunctionField\n source=\"hasException\"\n label=\"Exceptions\"\n render={exceptionRenderer}\n />,\n // <AuditStatusIcon label=\"Audit\" sortable={false} />,\n ...customGridFields,\n ]}\n </CustomizableDatagrid>\n ) : (\n <CustomizableDatagrid\n rowClick=\"edit\"\n expand={<LocationsPeak />}\n storageProp={`InventoryList_${account?.id}_large`}\n defaultColumns={[\n \"accountName\",\n \"productCode\",\n \"productName\",\n \"lotNumber\",\n \"deliveryDateTime\",\n \"quantityOnHand\",\n \"quantityAvailable\",\n \"lowAlert\",\n \"hasException\",\n ]}\n >\n {[\n <ProductLinkIcon sortable={false} />,\n <TextField\n source=\"accountName\"\n label=\"Customer\"\n sortable={true}\n sortBy={`{\"key\":\"inventoryByStatusByAccountByProductByLot\", \"search\":\"accountName\"}`}\n />,\n <TextField source=\"productCode\" label=\"Product Code\" sortable={true} />,\n <TextField source=\"productName\" label=\"Product\" sortable={true} />,\n <FunctionField source=\"pcs\" label=\"Pieces\" render={piecesRenderer} />,\n <FunctionField\n source=\"totalPcs\"\n label=\"Total Pieces\"\n headerClassName={classes.textRight}\n sortable={false}\n render={totalPiecesRenderer}\n />,\n <TextField source=\"lotNumber\" label=\"Lot Number\" sortable={true} />,\n <TextField source=\"poNumber\" label=\"PO Number\" sortable={true} />,\n <TextField\n source=\"railCarNumber\"\n label=\"Car/Trl. No.\"\n sortable={false}\n />,\n <DateField\n source=\"deliveryDateTime\"\n label=\"Received\"\n sortable={true}\n />,\n <TurnDaysIcon source=\"ageAlert\" label=\"Age (Days)\" sortable={false} />,\n <NumberField\n source=\"quantityOnHand\"\n label=\"Qty. OnHand\"\n sortable={true}\n />,\n <NumberField\n source=\"quantityCommitted\"\n label=\"Qty. Committed\"\n sortable={true}\n />,\n <FunctionField\n source=\"quantityAvailable\"\n label=\"Available\"\n headerClassName={classes.textRight}\n sortable={false}\n render={(record) =>\n quantityRenderer(\n trimDecimal(record.quantityOnHand - record.quantityCommitted)\n )\n }\n />,\n <FunctionField\n source=\"inventoryUnits\"\n label=\"UOM\"\n render={uomRenderer}\n />,\n <FunctionField\n source=\"weight\"\n label=\"Weight\"\n headerClassName={classes.textRight}\n render={(record) =>\n quantityRenderer(getTotalWeight(record), record.weightUnits)\n }\n />,\n <FunctionField\n source=\"hasException\"\n label=\"Exceptions\"\n render={exceptionRenderer}\n />,\n // <AuditStatusIcon label=\"Audit\" sortable={false} />,\n <LowInventoryIcon source=\"lowAlert\" label=\"Low\" sortable={false} />,\n ...customGridFields,\n <EditButton />,\n ]}\n </CustomizableDatagrid>\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n searchInboundShipments,\n searchOutboundShipments,\n} from \"../../graphql/queries\";\n\nimport { CircularProgress, Typography, useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { red, green, grey } from \"@material-ui/core/colors\";\n\nimport { useNotify } from \"react-admin\";\n\nimport {\n CarrierType,\n InboundState,\n InboundStatus,\n OutboundStatus,\n} from \"../../utils/constants\";\nimport { logError } from \"../../utils/appUtils\";\nimport { getAisleFullName, sortLinkedCars } from \"../../utils/locationUtils\";\nimport { InboundIcon, OutboundIcon } from \".\";\nimport { TrackLegend } from \"../../crewApp/pages/trackManagement/TrackLocation\";\n\nconst useStyles = makeStyles((theme) => ({\n spinner: {\n display: \"flex\",\n width: \"100%\",\n justifyContent: \"center\", // Aligns children (e.g., CircularProgress) in the center horizontally\n },\n trackContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n border: \"1px dashed\",\n borderRadius: theme.spacing(1),\n borderColor: grey[400],\n padding: theme.spacing(1),\n minHeight: theme.spacing(8),\n },\n carContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n width: \"100%\",\n padding: theme.spacing(0.5),\n margin: theme.spacing(0.5),\n border: \"1px solid\",\n borderColor: grey[600],\n borderRadius: theme.spacing(1),\n },\n shipmentCurrent: {\n border: \"1px solid\",\n borderColor: grey[100],\n backgroundColor: grey[600],\n color: theme.palette.getContrastText(grey[600]),\n },\n inboundCompleted: {\n borderColor: green[600],\n },\n released: {\n borderColor: red[600],\n },\n carIndex: {\n display: \"flex\",\n flexDirection: \"row\",\n alignContent: \"center\",\n marginLeft: theme.spacing(0.5),\n },\n shipmentText: {\n display: \"flex\",\n flexDirection: \"row\",\n alignContent: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n },\n}));\n\nexport const TrackLocationView = ({ inventoryItem }) => {\n const classes = useStyles();\n const notify = useNotify();\n const [loading, setLoading] = useState(true);\n const [processedCars, setProcessedCars] = useState([]);\n const [outboundMap, setOutboundMap] = useState({});\n const lteSmall = useMediaQuery((theme) => theme.breakpoints.down(\"sm\"));\n const selectedTrack = inventoryItem.location;\n\n useEffect(() => {\n if (selectedTrack) getShipments();\n }, [selectedTrack]);\n\n const getShipments = async () => {\n debugger;\n try {\n setLoading(true);\n const searchInput = {\n filter: {\n carrierType: { eq: CarrierType.RAIL },\n isCollected: { eq: false },\n trackId: { eq: selectedTrack.id },\n },\n limit: 500,\n };\n\n // Create two promises for inbound and outbound shipments\n const inboundPromise = API.graphql(\n graphqlOperation(searchInboundShipments, searchInput)\n );\n const outboundPromise = API.graphql(\n graphqlOperation(searchOutboundShipments, searchInput)\n );\n\n // Use Promise.all to wait for both promises to resolve\n const [inboundResponse, outboundResponse] = await Promise.all([\n inboundPromise,\n outboundPromise,\n ]);\n\n const inbounds = inboundResponse.data.searchInboundShipments.items;\n const outbounds = outboundResponse.data.searchOutboundShipments.items;\n\n // create outbound map\n outbounds.forEach((itm) => (outboundMap[itm.id] = itm));\n setOutboundMap(outboundMap);\n\n let processedCarsList = inbounds.concat(outbounds);\n processedCarsList = sortLinkedCars(processedCarsList);\n setProcessedCars(processedCarsList);\n } catch (err) {\n logError(\"TrackLocationView:getShipments\", err, notify);\n } finally {\n setLoading(false);\n }\n };\n\n if (!selectedTrack) return <></>;\n return (\n <>\n <TrackLegend selectedTrack={selectedTrack} />\n <Typography variant=\"overline\" display=\"block\" align=\"center\">\n {`${getAisleFullName(selectedTrack)} Track Head`}\n </Typography>\n <div className={classes.trackContainer}>\n {loading && (\n <div className={classes.spinner}>\n <CircularProgress color=\"inherit\" />\n </div>\n )}\n {processedCars.map((shipment, idx) =>\n outboundMap[shipment.id] ? (\n <OutboundCar\n key={shipment.railCarNumber}\n classes={classes}\n lteSmall={lteSmall}\n inventoryItem={inventoryItem}\n shipment={shipment}\n idx={idx}\n />\n ) : (\n <InboundCar\n key={shipment.railCarNumber}\n classes={classes}\n lteSmall={lteSmall}\n inventoryItem={inventoryItem}\n shipment={shipment}\n idx={idx}\n />\n )\n )}\n </div>\n </>\n );\n};\n\nconst InboundCar = ({ classes, lteSmall, inventoryItem, shipment, idx }) => {\n const getCarClassName = () => {\n const classNames = [classes.carContainer];\n if (shipment.id === inventoryItem.inboundShipmentId)\n classNames.push(classes.shipmentCurrent);\n if (shipment.status === InboundStatus.RELEASED)\n classNames.push(classes.released);\n else if (shipment.state === InboundState.COMPLETED)\n classNames.push(classes.inboundCompleted);\n return classNames.join(\" \");\n };\n\n const getIconStyles = () => {\n const styles = { marginLeft: 4 };\n if (shipment.id === inventoryItem.inboundShipmentId)\n styles.color = grey[100];\n if (shipment.status === InboundStatus.RELEASED) styles.color = red[700];\n else if (shipment.state === InboundState.COMPLETED)\n styles.color = green[700];\n return styles;\n };\n\n return (\n <div className={[getCarClassName()].join(\" \")}>\n <div className={classes.carIndex}>\n <Typography> {idx + 1 + \".\"} </Typography>\n <InboundIcon style={getIconStyles()} />\n </div>\n <div className={classes.shipmentText}>\n {lteSmall ? (\n <div>\n <Typography>{shipment.railCarNumber}</Typography>\n <Typography>{shipment.accountName}</Typography>\n <Typography>{shipment.poNumber}</Typography>\n </div>\n ) : (\n <Typography>\n {shipment.railCarNumber +\n \" - \" +\n shipment.accountName +\n \" (\" +\n shipment.poNumber +\n \")\"}\n </Typography>\n )}\n </div>\n </div>\n );\n};\n\nconst OutboundCar = ({ classes, lteSmall, inventoryItem, shipment, idx }) => {\n const getCarClassName = () => {\n const classNames = [classes.carContainer];\n if (shipment.id === inventoryItem.outboundShipmentId)\n classNames.push(classes.shipmentCurrent);\n if (shipment.status === OutboundStatus.RELEASED)\n classNames.push(classes.released);\n return classNames.join(\" \");\n };\n\n const getIconStyles = () => {\n const styles = { marginLeft: 4 };\n if (shipment.id === inventoryItem.outboundShipmentId)\n styles.color = grey[100];\n else if (shipment.status === OutboundStatus.RELEASED)\n styles.color = red[700];\n return styles;\n };\n\n return (\n <div className={getCarClassName()}>\n <div className={classes.carIndex}>\n <Typography>  {idx + 1 + \". \"} </Typography>\n <OutboundIcon style={getIconStyles()} />\n </div>\n <div className={classes.shipmentText}>\n {lteSmall ? (\n <div>\n <Typography>{shipment.railCarNumber}</Typography>\n <Typography>{shipment.accountName}</Typography>\n <Typography>{shipment.poNumber}</Typography>\n </div>\n ) : (\n <Typography>\n {shipment.railCarNumber +\n \" - \" +\n shipment.accountName +\n \" (\" +\n shipment.poNumber +\n \")\"}\n </Typography>\n )}\n </div>\n </div>\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport clsx from \"clsx\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { inventoryItemByLocationByStatus } from \"../../graphql/inventory/custom-queries\";\nimport {\n getOutboundShipmentTimeline,\n searchOutboundShipments,\n} from \"../../graphql/outbound/custom-queries\";\nimport {\n aisleByActiveByZoneBySortKey,\n areaByActiveBySortKey,\n locationByAisleBySortKey,\n} from \"../../graphql/reloadyard/custom-queries\";\nimport { getLocation } from \"../../graphql/queries\";\n\nimport {\n alpha,\n Box,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n Grid,\n Hidden,\n IconButton,\n Tooltip,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { blueGrey, deepOrange, green, grey } from \"@material-ui/core/colors\";\n\nimport {\n ArrayField,\n Button,\n Datagrid,\n FunctionField,\n Loading,\n NumberField,\n required,\n SelectInput,\n TextField,\n TextInput,\n useNotify,\n} from \"react-admin\";\n\nimport { logError, setupLocationMaps } from \"../../utils/appUtils\";\nimport {\n CarrierType,\n InventoryStatus,\n LocationLoadType,\n LocationType,\n OutboundStatus,\n OutboundStatusLabels,\n} from \"../../utils/constants\";\nimport {\n filterAisles,\n filterAreas,\n filterZones,\n getAisleFullName,\n getLocationFullName,\n getLocationViewName,\n getZone,\n isBulkLocationAvailable,\n isCapacitySliderVisible,\n isLocationAvailable,\n isTrack,\n isTruckToRail,\n} from \"../../utils/locationUtils\";\nimport { isShippingContainer } from \"../../utils/loadTypeUtils\";\nimport { InventoryStatusIcon } from \"../../managerApp/resources/inventory/InventoryStatusIcon\";\nimport { CancelIcon, CheckIcon, CloseIcon, ShowIcon } from \".\";\nimport { StructuredLocationCapacity } from \"./LocationCapacity\";\nimport SwitchOnOff from \"./AntSwitch\";\nimport { TrackLocationView } from \"./TrackLocationView\";\n\nconst useStyles = makeStyles((theme) => ({\n locationAvatar: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(green[600]),\n backgroundColor: green[600],\n borderColor: green[600],\n border: \"5px solid\",\n borderRadius: theme.spacing(0.5),\n margin: theme.spacing(0.5),\n paddingTop: theme.spacing(0.5),\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n whiteSpace: \"nowrap\",\n width: \"100%\",\n \"&:hover\": {\n cursor: \"pointer\",\n backgroundColor: alpha(green[700], 0.8),\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n locationAvatarDisabled: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(\n theme.palette.type === \"dark\" ? grey[400] : grey[300]\n ),\n backgroundColor: theme.palette.type === \"dark\" ? grey[400] : grey[300],\n border: \"5px solid\",\n borderColor: theme.palette.type === \"dark\" ? grey[400] : grey[300],\n borderRadius: theme.spacing(0.5),\n margin: theme.spacing(0.5),\n paddingTop: theme.spacing(0.5),\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n whiteSpace: \"nowrap\",\n width: \"100%\",\n },\n locationAvatarSelected: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n border: \"5px solid\",\n borderColor: theme.palette.getContrastText(deepOrange[500]),\n borderRadius: theme.spacing(0.5),\n margin: theme.spacing(0.5),\n paddingTop: theme.spacing(0.5),\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n whiteSpace: \"nowrap\",\n width: \"100%\",\n \"&:hover\": {\n cursor: \"pointer\",\n backgroundColor: deepOrange[400],\n color: theme.palette.getContrastText(deepOrange[400]),\n },\n },\n locationAvatarOriginal: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n color: theme.palette.getContrastText(theme.palette.background.default),\n backgroundColor: deepOrange[500],\n border: \"5px solid\",\n borderColor: grey[500],\n borderRadius: theme.spacing(0.5),\n margin: theme.spacing(0.5),\n paddingTop: theme.spacing(0.5),\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n whiteSpace: \"nowrap\",\n width: \"100%\",\n \"&:hover\": {\n cursor: \"pointer\",\n backgroundColor: alpha(deepOrange[600], 0.5),\n },\n },\n locationAvatarAllocated: {\n border: \"5px solid\",\n borderColor: deepOrange[600],\n borderRadius: theme.spacing(0.5),\n \"&:hover\": {\n cursor: \"pointer\",\n },\n },\n location: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n flexWrap: \"wrap\",\n padding: theme.spacing(1),\n minHeight: theme.spacing(8),\n marginLeft: theme.spacing(0.75),\n },\n bayContainer: {\n display: \"flex\",\n flexDirection: \"column-reverse\",\n alignItems: \"center\",\n alignContent: \"space-between\",\n border: \"1px solid #b0bec5\",\n borderRadius: theme.spacing(1),\n margin: theme.spacing(0.5),\n padding: theme.spacing(0.5),\n paddingTop: theme.spacing(1),\n },\n divider: {\n borderTop: \"1px solid #b0bec5\",\n marginTop: theme.spacing(1),\n width: \"100%\",\n },\n levelContainer: {\n border: \"1px solid\",\n borderColor: blueGrey[500],\n margin: theme.spacing(0.5),\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n },\n switchInput: {\n marginRight: theme.spacing(1),\n minWidth: \"8rem\",\n },\n dialogTitle: {\n display: \"flex\",\n paddingTop: \"5px\",\n paddingBottom: \"5px\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n flexWrap: \"nowrap\",\n },\n}));\n\nconst validateRequired = required();\n\nexport const AreaZonePicker = ({\n areaLabel = \"Area\",\n zoneLabel = \"Zone\",\n inventory,\n inventoryItem,\n showOutbounds = false,\n handleLocation,\n disabled = false,\n ...props\n}) => {\n const notify = useNotify();\n const [areas, setAreas] = useState(window.appUser.reloadYard?.areas.items);\n const [zones, setZones] = useState([]);\n\n useEffect(() => {\n getAreas();\n }, []);\n\n useEffect(() => {\n setupAreasZones(inventory, window.appUser.reloadYard?.areas.items);\n }, [inventory.reloadYardCommodityId]);\n\n const getAreas = async () => {\n try {\n debugger;\n const areaRsponse = await API.graphql(\n graphqlOperation(areaByActiveBySortKey, {\n reloadYardId: window.appUser?.reloadYardId,\n activeSortKey: { beginsWith: { active: \"true\" } },\n limit: 1000,\n })\n );\n const areas = areaRsponse.data.areaByActiveBySortKey.items;\n window.appUser.reloadYard.areas.items = areas;\n setupLocationMaps(window.appUser.reloadYard);\n\n setupAreasZones(inventory, areas);\n } catch (err) {\n logError(\"LocationPicker:getAreas\", err, notify);\n }\n };\n\n const setupAreasZones = (inventory, areas) => {\n try {\n debugger;\n let areaId =\n inventoryItem?.location?.areaId ||\n inventoryItem?.areaId ||\n inventory.areaId;\n let zoneId =\n inventoryItem?.location?.zoneId ||\n inventoryItem?.zoneId ||\n inventory.zoneId;\n\n const filteredAreas = filterAreas(areas, inventory.reloadYardCommodityId);\n setAreas(filteredAreas);\n\n if (filteredAreas.length === 1) {\n areaId = filteredAreas[0].id;\n handleAreaChange(areaId);\n } else {\n let area = filteredAreas.find((itm) => itm.id === areaId);\n let zone = null;\n\n if (area) {\n area.zones = { ...area.zones };\n const filteredZones = filterZones(\n area.zones.items,\n inventory.reloadYardCommodityId,\n inventory.accountId\n );\n setZones(filteredZones);\n\n if (filteredZones.length === 1) {\n zone = filteredZones[0];\n } else {\n zone = filteredZones.find((itm) => itm.id === zoneId);\n }\n }\n handleLocation && handleLocation(area, zone);\n }\n } catch (err) {\n logError(\"LocationPicker:setupAreasZones\", err, notify);\n }\n };\n\n const handleAreaChange = (areaId) => {\n debugger;\n if (areaId) {\n const area = areas.find((itm) => itm.id === areaId);\n const filteredZones = filterZones(\n area.zones.items,\n inventory.reloadYardCommodityId,\n inventory.accountId\n );\n setZones(filteredZones);\n const zone = filteredZones.length === 1 ? filteredZones[0] : null;\n handleLocation(area, zone);\n }\n };\n\n const handleZoneChange = (zoneId) => {\n debugger;\n if (zoneId) {\n let area =\n inventoryItem?.location?.area || inventoryItem?.area || inventory.area;\n if (!area) {\n const areaId =\n inventoryItem?.location?.areaId ||\n inventoryItem?.areaId ||\n inventory.areaId;\n area = areas.find((itm) => itm.id === areaId);\n }\n const zone = zones.find((itm) => itm.id === zoneId);\n handleLocation(area, zone);\n }\n };\n\n return (\n <Grid container spacing={1}>\n <Grid item xs={12} sm={6}>\n <SelectInput\n source=\"areaId\"\n label={areaLabel}\n variant=\"outlined\"\n fullWidth\n disabled={disabled}\n allowEmpty={false}\n choices={areas}\n optionText=\"name\"\n optionValue=\"id\"\n validate={validateRequired}\n onChange={(e) => handleAreaChange(e.target.value)}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <SelectInput\n source=\"zoneId\"\n label={zoneLabel}\n variant=\"outlined\"\n fullWidth\n disabled={disabled || showOutbounds}\n choices={zones}\n optionText=\"name\"\n optionValue=\"id\"\n validate={validateRequired}\n onChange={(e) => handleZoneChange(e.target.value)}\n />\n </Grid>\n </Grid>\n );\n};\n\nconst getOutbound = async (outboundShipmentId, setOutbound, notify) => {\n try {\n debugger;\n const input = { id: outboundShipmentId };\n const response = await API.graphql(\n graphqlOperation(getOutboundShipmentTimeline, input)\n );\n const outboundShipment = response.data.getOutboundShipment;\n setOutbound(outboundShipment);\n } catch (err) {\n logError(\"OutboundPicker:getOutbound\", err, notify);\n }\n};\n\nexport const LocationPicker = ({\n inventory,\n inventoryItem,\n originalLocation,\n handleLocation,\n selectedLocation,\n locationInventoryItemMap = {}, // for EDIT - location is locked\n bayList,\n setBayList,\n isMaxQuantity,\n disabled = false,\n required = false,\n ...props\n}) => {\n const classes = useStyles();\n const notify = useNotify();\n const [aisles, setAisles] = useState([]);\n const [selectedAisle, setSelectedAisle] = useState(\n inventoryItem.aisle || inventoryItem.location?.aisle\n );\n const [locationName, setLocationName] = useState(\"\");\n const [outbound, setOutbound] = useState();\n const area = inventoryItem?.area || inventoryItem?.location?.area; // getArea(inventoryItem.areaId);\n const zone =\n inventoryItem?.zone ||\n inventoryItem?.location?.zone ||\n getZone(area, inventoryItem.zoneId);\n const [showOutbounds, setShowOutbounds] = useState(\n isTruckToRail(area, inventory.inboundShipment)\n );\n\n useEffect(() => {\n if (inventoryItem.areaId) {\n setShowOutbounds(isTruckToRail(area, inventory.inboundShipment));\n }\n }, [inventoryItem.areaId]);\n\n useEffect(() => {\n debugger;\n if (inventoryItem.zoneId) getAisles();\n else setAisles([]);\n }, [inventoryItem.zoneId]);\n\n useEffect(() => {\n debugger;\n if (inventoryItem.location) {\n setLocationName(getLocationFullName(inventoryItem.location));\n }\n }, [inventoryItem.location]);\n\n // useEffect(() => {\n // debugger;\n // if (inventoryItem.outboundShipment) {\n // setOutbound(inventoryItem.outboundShipment);\n // }\n // }, [inventoryItem.outboundShipment]);\n\n useEffect(() => {\n debugger;\n if (inventoryItem.outboundShipmentId && !outbound) {\n getOutbound(inventoryItem.outboundShipmentId, setOutbound, notify);\n }\n }, [inventoryItem.outboundShipmentId]);\n\n useEffect(() => {\n debugger;\n if (!selectedAisle) setBayList([]);\n if (\n selectedAisle?.type === LocationType.STRUCTURED ||\n selectedAisle?.type === LocationType.BULK\n ) {\n setupStructuredAisle();\n }\n }, [selectedAisle]);\n\n const getAisles = async () => {\n try {\n debugger;\n const response = await API.graphql(\n graphqlOperation(aisleByActiveByZoneBySortKey, {\n zoneId: inventoryItem.zoneId,\n activeSortKey: { beginsWith: { active: \"true\" } },\n limit: 1000,\n })\n );\n const aisles = filterAisles(\n response.data.aisleByActiveByZoneBySortKey.items,\n inventoryItem.inventory\n );\n setAisles(aisles);\n\n if (aisles?.length > 0) {\n if (showOutbounds) {\n if (!inventoryItem?.outboundShipmentId) {\n setSelectedAisle(null);\n }\n }\n } else setSelectedAisle(null);\n } catch (err) {\n logError(\"LocationPicker:setSelectedValues\", err, notify);\n }\n };\n\n const setupStructuredAisle = async () => {\n if (!selectedAisle?.id) return;\n try {\n const response = await API.graphql(\n graphqlOperation(locationByAisleBySortKey, {\n aisleId: selectedAisle.id,\n limit: 1000,\n })\n );\n const filteredLocations =\n response.data.locationByAisleBySortKey.items.filter(\n (itm) => itm.active === \"true\"\n );\n const bayList = [];\n debugger;\n\n for (let location of filteredLocations) {\n const allocatedInventoryItems = locationInventoryItemMap[location.id];\n if (allocatedInventoryItems && allocatedInventoryItems[0]) {\n location = allocatedInventoryItems[0].location;\n }\n\n const bay = location.bay;\n if (!bayList[bay]) bayList[bay] = [];\n const level = location.level;\n if (!bayList[bay][level - 1]) bayList[bay][level - 1] = [];\n bayList[bay][level - 1].push(location);\n }\n bayList.splice(0, 1);\n for (let bay of bayList) {\n if (!bay || bay.length === 0) continue;\n for (let level of bay) {\n level.sort((a, b) => {\n return a.position - b.position;\n });\n }\n }\n setBayList(bayList);\n } catch (err) {\n logError(\"LocationPicker:StructuredPickerDialog:setupAisle\", err, notify);\n }\n };\n\n const getLocationPicker = () => {\n if (showOutbounds) {\n // inbound area = TRACK && carrierType = TRUCK.\n // inbound TRUCK loaded onto outbound railcar\n // Select am Outbound RailCar, no matter what track it is on.\n return (\n <OutboundSelector\n {...props}\n inventory={inventory}\n inventoryItem={inventoryItem}\n selectedArea={area}\n selectedZone={zone}\n aisles={aisles}\n selectedAisle={selectedAisle}\n setSelectedAisle={setSelectedAisle}\n selectedLocation={selectedLocation}\n locationName={locationName}\n setLocationName={setLocationName}\n handleLocation={handleLocation}\n outbound={outbound}\n setOutbound={setOutbound}\n disabled={disabled}\n required={required}\n />\n );\n }\n\n // STRUCTURED, UNSTRUCTURED aisle & TRACK picker\n return (\n <AislePicker\n {...props}\n inventory={inventory}\n inventoryItem={inventoryItem}\n selectedArea={area}\n aisles={aisles}\n selectedAisle={selectedAisle}\n setSelectedAisle={setSelectedAisle}\n originalLocation={originalLocation}\n selectedLocation={selectedLocation}\n outbound={outbound}\n showOutbounds={showOutbounds}\n handleLocation={handleLocation}\n disabled={disabled || !zone}\n required={required}\n classes={classes}\n />\n );\n };\n\n const getLocationSelector = () => {\n if (isTrack(area) && selectedAisle) {\n debugger;\n return (\n <TrackDisplay\n classes={classes}\n inventoryItem={inventoryItem}\n outbound={outbound}\n />\n );\n }\n\n if (selectedAisle?.type === LocationType.BULK) {\n // Dry + Liquid Bulk\n return (\n <BulkSelector\n {...props}\n classes={classes}\n inventoryItem={inventoryItem}\n inventory={inventory}\n isMaxQuantity={isMaxQuantity}\n originalLocation={originalLocation}\n selectedLocation={selectedLocation}\n handleLocation={handleLocation}\n bayList={bayList}\n locationInventoryItemMap={locationInventoryItemMap}\n notify={notify}\n />\n );\n }\n\n if (selectedAisle?.type === LocationType.STRUCTURED) {\n return (\n <StructuredLocationSelector\n classes={classes}\n inventoryItem={inventoryItem}\n inventory={inventory}\n isMaxQuantity={isMaxQuantity}\n originalLocation={originalLocation}\n selectedLocation={selectedLocation}\n handleLocation={handleLocation}\n bayList={bayList}\n locationInventoryItemMap={locationInventoryItemMap}\n notify={notify}\n />\n );\n }\n };\n\n return (\n <Grid container spacing={1}>\n <Grid item xs={12} sm={6}>\n <AreaZonePicker\n {...props}\n inventory={inventory}\n inventoryItem={inventoryItem}\n showOutbounds={showOutbounds}\n handleLocation={handleLocation}\n disabled={disabled}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n {getLocationPicker()}\n </Grid>\n <Grid item xs={12}>\n {getLocationSelector()}\n </Grid>\n </Grid>\n );\n};\n\nconst AislePicker = ({\n inventory,\n inventoryItem,\n selectedArea,\n aisles,\n selectedAisle,\n setSelectedAisle,\n originalLocation,\n selectedLocation,\n handleLocation,\n outbound,\n showOutbounds,\n disabled,\n required,\n classes,\n ...props\n}) => {\n const notify = useNotify();\n\n useEffect(() => {\n debugger;\n if (aisles?.length > 0) {\n const aisle =\n aisles.length === 1\n ? aisles[0]\n : aisles.find((itm) => itm.id === inventoryItem.aisleId);\n handleAisleChange(aisle?.id);\n }\n }, [aisles]);\n\n const handleAisleChange = async (aisleId) => {\n debugger;\n try {\n let location = null;\n let aisle = null;\n\n if (aisleId) {\n aisle = aisles.find((itm) => itm.id === aisleId);\n setSelectedAisle(aisle);\n if (aisle?.type === LocationType.UNSTRUCTURED) {\n const response = await API.graphql(\n graphqlOperation(locationByAisleBySortKey, { aisleId: aisle.id })\n );\n const locations = response.data.locationByAisleBySortKey.items.filter(\n (itm) => itm.active === \"true\"\n );\n\n location = locations[0];\n handleLocation(\n inventoryItem.area,\n inventoryItem.zone,\n aisle,\n location,\n null\n );\n } else {\n if (\n aisleId !== originalLocation?.aisleId ||\n inventoryItem?.locationId !== originalLocation?.id\n ) {\n // location has changed - not an initial load\n handleLocation(\n inventoryItem.area,\n inventoryItem.zone,\n aisle,\n null,\n null\n );\n }\n }\n } else {\n setSelectedAisle(null);\n handleLocation(\n inventoryItem.area,\n inventoryItem.zone,\n null,\n null,\n null\n );\n }\n } catch (err) {\n logError(\"LocationPicker:AislePicker:handleAisleChange\", err, notify);\n }\n };\n\n const getAisleLabel = (area) => {\n if (isTrack(area)) return \"Track\";\n return \"Aisle\";\n };\n\n return (\n <Grid container spacing={1}>\n <Grid item xs={12} sm={6}>\n <SelectInput\n source=\"aisleId\"\n label={getAisleLabel(selectedArea)}\n variant=\"outlined\"\n fullWidth\n allowEmpty={!required}\n choices={aisles}\n optionText=\"name\"\n optionValue=\"id\"\n disabled={disabled || aisles.length === 0}\n validate={required ? validateRequired : undefined}\n onChange={(e) => handleAisleChange(e.target.value)}\n />\n </Grid>\n {selectedAisle?.type === LocationType.UNSTRUCTURED && (\n <Grid item xs={12} sm={6}>\n <TextInput\n source=\"locationFullName\"\n label=\"Location\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n validate={required ? validateRequired : undefined}\n />\n </Grid>\n )}\n {selectedAisle?.type === LocationType.UNSTRUCTURED && (\n <Grid item xs={12} style={{ textAlign: \"right\" }}>\n <ViewInventoryButton\n inventory={inventory}\n selectedLocation={selectedLocation}\n notify={notify}\n classes={classes}\n />\n </Grid>\n )}\n </Grid>\n );\n};\n\nconst BulkSelector = ({\n classes,\n inventory,\n isMaxQuantity,\n inventoryItem,\n originalLocation,\n selectedLocation,\n handleLocation,\n bayList,\n locationInventoryItemMap,\n notify,\n ...props\n}) => {\n const [utilizationQuantity, setUtilizationQuantity] = useState(\n getUtilizationQuantity(inventory)\n );\n const locationList = bayList[0]?.[0];\n\n const isLocationUsed = (location) => {\n return (\n locationInventoryItemMap[location.id] ||\n inventory.inventoryItems?.items?.some(\n (itm) => itm.locationId === location.id\n )\n );\n };\n\n const handleShowQuantity = (value) => {\n // Switch between percentage and quantity\n localStorage.setItem(\"locationCapacityDisplay\", value);\n setUtilizationQuantity(value);\n };\n\n const getLocationContent = (location) => {\n const capacityUsed = location.capacityUsed || 0;\n const capacityAllocated = location.capacityAllocated || 0;\n const locationCapacity = location.bulkCapacity || 0;\n let totalCapacityUsed = 0;\n\n if (locationCapacity > 0) {\n if (utilizationQuantity) {\n totalCapacityUsed =\n (capacityUsed + capacityAllocated).toLocaleString() +\n \" / \" +\n locationCapacity.toLocaleString() +\n \" \" +\n location.bulkUnits;\n } else {\n totalCapacityUsed =\n (\n ((capacityUsed + capacityAllocated) / locationCapacity) *\n 100\n ).toLocaleString() + \"%\";\n }\n }\n\n return (\n <div>\n <Typography align=\"center\" variant=\"body2\">\n {getLocationViewName(location)}\n </Typography>\n <Typography align=\"center\" variant=\"body2\">\n {totalCapacityUsed}\n </Typography>\n <Typography align=\"center\" variant=\"body2\" noWrap>\n {location.accountName || <> </>}\n </Typography>\n <Typography align=\"center\" variant=\"body2\" noWrap>\n {location.productName || <> </>}\n </Typography>\n </div>\n );\n };\n\n const getAvatarClassName = (location) => {\n let returnClass;\n\n if (\n isBulkLocationAvailable(\n location,\n inventoryItem.inventory,\n inventoryItem.putawayQuantity\n )\n ) {\n returnClass = classes.locationAvatar;\n } else returnClass = classes.locationAvatarDisabled;\n\n if (location.id === selectedLocation?.id)\n returnClass = classes.locationAvatarSelected;\n else if (location.id === originalLocation?.id)\n returnClass = classes.locationAvatarOriginal;\n\n if (isLocationUsed(location)) {\n if (location.id === selectedLocation?.id)\n returnClass = classes.locationAvatarSelected;\n returnClass = clsx(returnClass, classes.locationAvatarAllocated);\n }\n\n return returnClass;\n };\n\n const handleLocationChange = (location) => {\n handleLocation(\n inventoryItem.area,\n inventoryItem.zone,\n inventoryItem.aisle,\n location,\n null\n );\n };\n\n return (\n <Grid container spacing={1}>\n {showUtilizationQuantity(inventory) ? (\n <Grid item xs={12} sm={6}>\n <SwitchOnOff\n leftLabel=\"Percentage\"\n rightLabel=\"Quantity\"\n checked={utilizationQuantity}\n setChecked={handleShowQuantity}\n className={classes.switchInput}\n />\n </Grid>\n ) : (\n <Hidden xsDown>\n <Grid item xs={false} sm={6}></Grid>\n </Hidden>\n )}\n <Grid item xs={12} sm={6} style={{ textAlign: \"right\" }}>\n <ViewInventoryButton\n inventory={inventory}\n selectedLocation={selectedLocation}\n notify={notify}\n classes={classes}\n />\n </Grid>\n <Grid\n item\n xs={12}\n container\n spacing={1}\n className={classes.levelContainer}\n >\n {locationList &&\n locationList.map((location) => (\n <Grid item xs={12} sm={6} md={3}>\n <Box\n className={getAvatarClassName(location)}\n onClick={() => handleLocationChange(location)}\n >\n {getLocationContent(location)}\n </Box>\n </Grid>\n ))}\n </Grid>\n </Grid>\n );\n};\n\nconst TrackDisplay = ({ inventoryItem, outbound, classes, ...props }) => {\n if (outbound)\n return (\n <Grid container spacing={3}>\n <Grid item sm={false} md={4}>\n <fieldset style={{ height: \"100%\" }}>\n <legend>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Outbound Inventory:\n </Typography>\n </legend>\n {outbound?.shipmentLineItems && (\n <ArrayField source=\"items\" record={outbound.shipmentLineItems}>\n <Datagrid>\n <FunctionField\n source=\"status\"\n record={outbound}\n render={(record) => OutboundStatusLabels[record.status]}\n />\n <NumberField source=\"totalQuantityToPick\" label=\"Quantity\" />\n <FunctionField\n source=\"totalUnits\"\n label=\"UOM\"\n render={() => outbound.totalUnits}\n />\n </Datagrid>\n </ArrayField>\n )}\n </fieldset>\n </Grid>\n <Grid item sm={12} md={8}>\n <TrackLocationView inventoryItem={inventoryItem} />\n </Grid>\n </Grid>\n );\n\n return (\n <Grid container spacing={3}>\n <Grid item sm={false} md={2}></Grid>\n <Grid item sm={12} md={8}>\n <TrackLocationView inventoryItem={inventoryItem} />\n </Grid>\n <Grid item sm={false} md={2}></Grid>\n </Grid>\n );\n};\n\nconst OutboundSelector = ({\n inventory,\n inventoryItem,\n selectedArea,\n selectedZone,\n aisles,\n selectedAisle,\n setSelectedAisle,\n selectedLocation,\n locationName,\n setLocationName,\n handleLocation,\n outbound,\n setOutbound,\n disabled,\n required,\n ...props\n}) => {\n const notify = useNotify();\n const [outbounds, setOutbounds] = useState([]);\n\n useEffect(() => {\n selectedArea && getOutboundData();\n }, [selectedArea]);\n\n const getOutboundData = async () => {\n debugger;\n try {\n const searchInput = {\n filter: {\n carrierType: { eq: CarrierType.RAIL },\n // isCollected: {eq: false},\n // trackId: {gte: \"\"},\n status: { ne: OutboundStatus.RELEASED },\n // reloadYardCommodityId: {eq: inventory.reloadYardCommodityId},\n },\n limit: 1000,\n };\n const response = await API.graphql(\n graphqlOperation(searchOutboundShipments, searchInput)\n );\n const inventoryItems = inventory.inventoryItems?.items || [];\n\n const outboundsFiltered = response.data.searchOutboundShipments.items\n .filter(\n (outbound) =>\n // Check if the inventory item is not already added to this outbound\n !inventoryItems.some(\n (inventoryItem) =>\n inventoryItem.outboundShipmentId === outbound.id\n )\n )\n .map((item) => ({\n ...item,\n not_available: !item.trackId, // cannot assign to outbound that is not placed.\n }));\n\n setOutbounds(outboundsFiltered);\n } catch (err) {\n logError(\"OutboundPicker:getOutboundData\", err, notify);\n }\n };\n\n const handleOutboundSelect = async (outboundId) => {\n debugger;\n if (!outboundId) {\n setOutbound(null);\n setLocationName(\"\");\n handleLocation(selectedArea, selectedZone, null, null, null);\n } else {\n const outboundCar = outbounds.find((itm) => itm.id === outboundId);\n setOutbound(outboundCar);\n\n let response = await API.graphql(\n graphqlOperation(getLocation, { id: outboundCar.trackId })\n );\n const location = response.data.getLocation;\n\n const aisle = location.aisle;\n setSelectedAisle(aisle);\n const zone = aisle.zone;\n const aisleName = getAisleFullName(aisle);\n setLocationName(aisleName);\n handleLocation(inventoryItem.area, zone, aisle, location, outboundCar);\n }\n };\n\n const getOutboundOptionText = (choice) => {\n if (choice.trackId)\n return `\\u25C0\\u25C0 ${choice.railCarNumber} - ${choice.accountName}`;\n return `\\u140A\\u140A ${choice.railCarNumber} - ${choice.accountName}`;\n };\n\n return (\n <Grid container spacing={1}>\n <Grid item xs={12} sm={6}>\n <SelectInput\n source=\"outboundShipmentId\"\n label=\"Outbound railcar no.\"\n variant=\"outlined\"\n fullWidth\n allowEmpty={!required}\n choices={outbounds}\n disableValue=\"not_available\"\n optionText={(choice) => getOutboundOptionText(choice)}\n optionValue=\"id\"\n disabled={disabled}\n validate={required ? validateRequired : undefined}\n onChange={(e) => handleOutboundSelect(e.target.value)}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextInput\n source=\"locationFullName\"\n label=\"Track\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n validate={required ? validateRequired : undefined}\n />\n </Grid>\n </Grid>\n );\n};\n\nconst showUtilizationQuantity = (inventory) => {\n // hide quantity switch & display for CONTAINER and if inventory is OTHER\n return (\n !isShippingContainer(inventory.reloadYardCommodity.commodity) &&\n inventory.reloadYardCommodity.commodity.locationLoadType !==\n LocationLoadType.OTHER\n );\n};\n\nconst getUtilizationQuantity = (inventory) => {\n let value;\n if (!showUtilizationQuantity(inventory)) {\n value = false;\n } else {\n value = localStorage.getItem(\"locationCapacityDisplay\");\n value = value !== null ? JSON.parse(value) : false;\n }\n return value;\n};\n\nconst StructuredLocationSelector = ({\n classes,\n inventory,\n isMaxQuantity,\n inventoryItem,\n originalLocation,\n selectedLocation,\n handleLocation,\n bayList,\n locationInventoryItemMap,\n notify,\n ...props\n}) => {\n const [utilizationQuantity, setUtilizationQuantity] = useState(\n getUtilizationQuantity(inventory)\n );\n const inventoryLoadType =\n inventory.reloadYardCommodity.commodity.locationLoadType;\n\n const isLocationUsed = (location) => {\n return (\n locationInventoryItemMap[location.id] ||\n inventory.inventoryItems?.items?.some(\n (itm) => itm.locationId === location.id\n )\n );\n };\n\n const handleShowQuantity = (value) => {\n // Switch between percentage and quantity\n localStorage.setItem(\"locationCapacityDisplay\", value);\n setUtilizationQuantity(value);\n };\n\n const getLocationContent = (location) => {\n const capacityUsed = location.capacityUsed || 0;\n const capacityAllocated = location.capacityAllocated || 0;\n let totalCapacityUsed = 0;\n\n if (utilizationQuantity) {\n const locationLoadType = location.locationLoad[inventoryLoadType];\n totalCapacityUsed =\n (capacityUsed + capacityAllocated) / locationLoadType.capacity;\n } else {\n totalCapacityUsed = capacityUsed + capacityAllocated + \"%\";\n }\n\n return (\n <div>\n <Typography align=\"center\" variant=\"body2\">\n {getLocationViewName(location)}\n </Typography>\n <Typography align=\"center\" variant=\"body2\">\n {totalCapacityUsed}\n </Typography>\n </div>\n );\n };\n\n const getAvatarClassName = (location) => {\n let returnClass;\n\n if (isLocationAvailable(bayList, location, inventoryItem.inventory)) {\n returnClass = classes.locationAvatar;\n } else returnClass = classes.locationAvatarDisabled;\n\n if (location.id === selectedLocation?.id)\n returnClass = classes.locationAvatarSelected;\n else if (location.id === originalLocation?.id)\n returnClass = classes.locationAvatarOriginal;\n\n if (isLocationUsed(location)) {\n if (location.id === selectedLocation?.id)\n returnClass = classes.locationAvatarSelected;\n returnClass = clsx(returnClass, classes.locationAvatarAllocated);\n }\n\n return returnClass;\n };\n\n const handleLocationChange = (location) => {\n handleLocation(\n inventoryItem.area,\n inventoryItem.zone,\n inventoryItem.aisle,\n location,\n null\n );\n };\n\n return (\n <Grid container spacing={1}>\n {showUtilizationQuantity(inventory) ? (\n <Grid item xs={12} sm={6}>\n <SwitchOnOff\n leftLabel=\"Percentage\"\n rightLabel=\"Quantity\"\n checked={utilizationQuantity}\n setChecked={handleShowQuantity}\n className={classes.switchInput}\n />\n </Grid>\n ) : (\n <Hidden xsDown>\n <Grid item xs={false} sm={6}></Grid>\n </Hidden>\n )}\n <Grid item xs={12} sm={6} style={{ textAlign: \"right\" }}>\n <ViewInventoryButton\n inventory={inventory}\n selectedLocation={selectedLocation}\n notify={notify}\n classes={classes}\n />\n </Grid>\n {selectedLocation &&\n isCapacitySliderVisible(selectedLocation) &&\n inventory.status !== InventoryStatus.IN_TRANSIT &&\n inventory.status !== InventoryStatus.ARRIVED && (\n <Grid item xs={12}>\n <StructuredLocationCapacity\n location={selectedLocation}\n updateFn={handleLocationChange}\n />\n </Grid>\n )}\n <Grid item xs={12} className={classes.location}>\n {bayList.map((bay, bayIdx) => (\n <div key={`bay_${bayIdx}`} className={classes.bayContainer}>\n <div className={classes.item}>{bayIdx + 1}</div>\n <Divider className={classes.divider} />\n {bay.map((level, levelIdx) => (\n <div\n key={`bay_${bayIdx}_level_${levelIdx}`}\n className={classes.levelContainer}\n >\n {level.map((location) => {\n return (\n <div\n key={location.id}\n className={getAvatarClassName(location)}\n onClick={() => handleLocationChange(location)}\n >\n {getLocationContent(location)}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n ))}\n </Grid>\n </Grid>\n );\n};\n\nconst ViewInventoryButton = ({\n inventory,\n selectedLocation,\n notify,\n classes,\n ...props\n}) => {\n const [showInventories, setShowInventories] = useState(false);\n\n return (\n <>\n <Button\n label=\"View Inventory\"\n color=\"default\"\n disabled={!selectedLocation}\n onClick={() => setShowInventories(true)}\n >\n <ShowIcon />\n </Button>\n {selectedLocation && showInventories && (\n <ViewInventoryDialog\n inventory={inventory}\n selectedLocation={selectedLocation}\n showInventories={showInventories}\n setShowInventories={setShowInventories}\n notify={notify}\n classes={classes}\n />\n )}\n </>\n );\n};\n\nconst ViewInventoryDialog = ({\n inventory,\n selectedLocation,\n showInventories,\n setShowInventories,\n notify,\n classes,\n ...props\n}) => {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const [loading, setLoading] = useState(false);\n const [locationInventories, setLocationInventories] = useState([]);\n\n useEffect(() => {\n if (selectedLocation && showInventories) getInventories();\n }, [selectedLocation, showInventories]);\n\n const getInventories = async () => {\n try {\n debugger;\n setLoading(true);\n const promiseList = [\n API.graphql(\n graphqlOperation(inventoryItemByLocationByStatus, {\n locationId: selectedLocation.id,\n status: { beginsWith: InventoryStatus.IN_TRANSIT },\n })\n ),\n API.graphql(\n graphqlOperation(inventoryItemByLocationByStatus, {\n locationId: selectedLocation.id,\n status: { beginsWith: InventoryStatus.UNLOADED },\n })\n ),\n API.graphql(\n graphqlOperation(inventoryItemByLocationByStatus, {\n locationId: selectedLocation.id,\n status: { beginsWith: InventoryStatus.REVIEW },\n })\n ),\n API.graphql(\n graphqlOperation(inventoryItemByLocationByStatus, {\n locationId: selectedLocation.id,\n status: { beginsWith: InventoryStatus.STORED },\n })\n ),\n ];\n const results = await Promise.all(promiseList);\n let inventoryItemsList = [\n ...results[0].data.inventoryItemByLocationByStatus.items,\n ...results[1].data.inventoryItemByLocationByStatus.items,\n ...results[2].data.inventoryItemByLocationByStatus.items,\n ...results[3].data.inventoryItemByLocationByStatus.items,\n ];\n\n if (inventoryItemsList.length > 0) {\n inventoryItemsList.sort((a, b) => {\n // First, sort by accountName\n const accountComparison = a.inventory.accountName.localeCompare(\n b.inventory.accountName\n );\n if (accountComparison !== 0) return accountComparison;\n\n // If accountName is the same, sort by productName\n const productComparison = a.inventory.productName.localeCompare(\n b.inventory.productName\n );\n if (productComparison !== 0) return productComparison;\n\n // If both accountName and productName are the same, sort by quantityOnHand\n return b.quantityOnHand - a.quantityOnHand;\n });\n }\n setLocationInventories({ items: inventoryItemsList });\n } catch (error) {\n logError(\n \"LocationPicker:ViewInventoryDialog:getInventories\",\n error,\n notify\n );\n } finally {\n setLoading(false);\n }\n };\n\n const CombinedFlag = ({ record }) => {\n return (\n <>\n {record.inboundShipmentId === inventory.inboundShipmentId ? (\n <Tooltip title=\"In current shipment\" placement=\"right\" arrow>\n <CheckIcon\n style={{ marginRight: \"16px\", color: green[500] }}\n fontSize=\"medium\"\n />\n </Tooltip>\n ) : (\n <Tooltip title=\"In other shipment\" placement=\"right\" arrow>\n <CloseIcon\n style={{ marginRight: \"16px\", color: deepOrange[500] }}\n fontSize=\"medium\"\n />\n </Tooltip>\n )}\n <InventoryStatusIcon inventory={record.inventory} placement=\"right\" />\n </>\n );\n };\n\n return (\n <Dialog\n open={showInventories}\n onClose={() => setShowInventories(false)}\n fullWidth\n fullScreen={isSmall}\n maxWidth=\"lg\"\n >\n <DialogTitle disableTypography className={classes.dialogTitle}>\n <Typography variant=\"h6\">\n {`${getLocationFullName(selectedLocation)} inventories`}\n </Typography>\n <IconButton\n aria-label=\"close\"\n onClick={() => setShowInventories(false)}\n >\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n {loading ? (\n <DialogContent>\n <Loading />\n </DialogContent>\n ) : (\n <DialogContent>\n {\n <ArrayField source=\"items\" record={locationInventories}>\n <Datagrid>\n <CombinedFlag label=\"\" />\n <TextField\n source=\"inventory.productName\"\n label=\"Product Name\"\n />\n <TextField source=\"inventory.accountName\" label=\"Account\" />\n <TextField source=\"inventory.lotNumber\" label=\"Lot No.\" />\n <NumberField source=\"quantityOnHand\" label=\"Quantity\" />\n <TextField source=\"inventory.inventoryUnits\" label=\"UOM\" />\n </Datagrid>\n </ArrayField>\n }\n {/* {\n showTotalQuantity &&\n <Box mt={1}>\n {`Total quantity: ${totalQuantity} ${loadTypeName}`}\n </Box>\n } */}\n </DialogContent>\n )}\n <DialogActions>\n <Button\n label=\"Close\"\n color=\"defalut\"\n autoFocus\n onClick={() => setShowInventories(false)}\n >\n <CancelIcon />\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { updateAudit } from \"../../../graphql/mutations\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { useNotify, SaveButton, FormDataConsumer } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { ConditionalConfirm } from \"../../../components/common/ConditionalConfirm\";\nimport { getCustomFieldsToSave } from \"../../../components/common/CustomFields\";\nimport { ApproveIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport {\n InventoryStatus,\n NoteType,\n VALIDATION_MSG,\n} from \"../../../utils/constants\";\nimport { deepRedirect, historyAutoGen } from \"../../../utils/utils\";\nimport { updateInboundQuantity } from \"../../../managerApp/resources/inventory/InventoryUitls\";\n\nconst useStyles = makeStyles((theme) => ({\n saveButton: {\n marginRight: theme.spacing(2),\n },\n}));\n\nconst updateReconcileAudit = async (audit, inventory) => {\n debugger;\n const updateProcessedItems = audit.processedItems.map((itm) =>\n itm.id !== inventory.id\n ? itm\n : {\n ...itm,\n reconciledQuantityOnHand: inventory.quantityOnHand,\n reconciledQuantityPhysical: inventory.quantityPhysical,\n }\n );\n\n const toUpdateAudit = {\n ...audit,\n processedItems: JSON.stringify(updateProcessedItems),\n processedLocations: JSON.stringify(audit.processedLocations),\n skippedItems: JSON.stringify(audit.skippedItems),\n };\n\n delete toUpdateAudit.account;\n delete toUpdateAudit.location;\n delete toUpdateAudit.product;\n delete toUpdateAudit.reconcileList;\n delete toUpdateAudit.updatedAt;\n await API.graphql(graphqlOperation(updateAudit, { input: toUpdateAudit }));\n};\n\nexport const DialogSaveButton = ({\n backPath,\n reconcileAudit,\n inbound,\n validateQty,\n validateNotes,\n isSaving,\n setIsSaving,\n isDeleting,\n ...props\n}) => {\n const form = useForm();\n const formState = form.getState();\n const classes = useStyles();\n const notify = useNotify();\n const history = useHistory();\n const [open, setOpen] = useState(false);\n const [confirmContent, setConfirmContent] = useState(\"\");\n\n const handleDialogConfirm = () => handleSave();\n const handleDialogClose = () => setOpen(false);\n const [onConfirm, setOnConfirm] = useState(() => handleDialogConfirm);\n\n const getAcceptLabel = (formData) => {\n if (formData.status === InventoryStatus.REVIEW) return \"Complete\";\n else return \"Accept\";\n };\n\n const formValidate = () => {\n const newFormState = form.getState();\n if (newFormState.invalid) notify(VALIDATION_MSG, \"warning\");\n return !newFormState.invalid;\n };\n\n const handleValidateSave = (formData) => {\n const tempMsg = [];\n setOnConfirm(() => handleDialogConfirm); // Allow confirmation if no error\n\n const isValid = formValidate();\n if (!isValid) {\n handleSave(); // trigger field-level validation\n }\n\n if (\n formData.overShipment &&\n formData.quantityShipped >= formData.quantityDelivered\n ) {\n tempMsg.push(\n \"Errors Found: Overshipment Exception should be cleared before saving.\"\n );\n setOnConfirm(null); // Prevent confirmation if there's an error\n } else if (\n formData.underShipment &&\n formData.quantityShipped <= formData.quantityDelivered\n ) {\n tempMsg.push(\n \"Errors Found: Undershipment Exception should be cleared before saving.\"\n );\n setOnConfirm(null); // Prevent confirmation if there's an error\n } else if (validateNotes(form, formData)) {\n tempMsg.push(\n \"Don't forget to document all Quantity changes in the Notes! \" +\n \"Proceed without a Note?\"\n );\n }\n\n if (tempMsg.length === 1) {\n setConfirmContent(tempMsg[0]);\n setOpen(true);\n } else if (tempMsg.length > 1) {\n setConfirmContent(\n <ul>\n {tempMsg.map((msg) => (\n <li>{msg}</li>\n ))}\n </ul>\n );\n setOpen(true);\n } else handleSave();\n };\n\n const handleValidateSaveAccept = (formData) => {\n debugger;\n const tempMsg = [];\n setOnConfirm(() => handleDialogConfirm); // Allow confirmation if no error\n\n const isValid = formValidate();\n if (!isValid) {\n handleSave(); // trigger field-level validation\n }\n\n let qtyCheck = validateQty(formData);\n if (\n (formData.status === InventoryStatus.ARRIVED ||\n formData.status === InventoryStatus.REVIEW) &&\n formData.verificationRequired === \"true\" &&\n qtyCheck?.quantityShipped\n ) {\n tempMsg.push(\n \"Errors Found : Quantity Advised and Received do not match! Item will not be Accepted.\"\n );\n setOnConfirm(null); // Prevent confirmation if there's an error\n } else if (qtyCheck?.quantityShipped) {\n // probably no longer needed\n tempMsg.push(\n \"Errors Found : Quantity Advised and Received do not match!\"\n );\n setOnConfirm(null); // Prevent confirmation if there's an error\n } else if (qtyCheck?.quantityOnHand) {\n tempMsg.push(\n \"Errors Found : Quantity On Hand and Physical do not match!\"\n );\n setOnConfirm(null); // Prevent confirmation if there's an error\n }\n\n if (validateNotes(form, formData)) {\n tempMsg.push(\n \" Don't forget to document Quantity changes in the Notes! \" +\n \"Proceed without adding a Note?\"\n );\n }\n\n if (tempMsg.length === 1) {\n setConfirmContent(tempMsg[0]);\n setOpen(true);\n } else if (tempMsg.length > 1) {\n setConfirmContent(\n <ul>\n {tempMsg.map((msg) => (\n <li>{msg}</li>\n ))}\n </ul>\n );\n setOpen(true);\n } else handleSave();\n };\n\n const handleSave = () => {\n debugger;\n setOpen(false);\n props.handleSubmit();\n };\n\n const transformAccpet = (data) => {\n setIsSaving(true);\n debugger;\n let historyNote = null;\n\n if (data.status === InventoryStatus.REVIEW) {\n data.status = InventoryStatus.STORED;\n }\n if (data.status === InventoryStatus.UNLOADED) {\n data.status = InventoryStatus.ARRIVED;\n }\n\n data.verificationRequired = \"resolved\";\n historyNote = {\n text: `Accepted by ${window.appUser?.fullName}`,\n type: NoteType.INVENTORY,\n date: new Date(),\n by: window.appUser?.fullName,\n };\n data.history = [...data.history, historyNote];\n\n return transform(data);\n };\n\n const transform = async (data) => {\n data = { ...data };\n setIsSaving(true);\n let historyNotes = [];\n debugger;\n\n data.customFields = getCustomFieldsToSave(\n data.customFields,\n data.account.inventoryCustomFields\n );\n\n if (form.getFieldState(\"quantityShipped\")?.dirty) {\n let note = {\n type: NoteType.INVENTORY,\n date: new Date(),\n by: window.appUser?.fullName,\n text: `Qty. Advised Changed from ${\n form.getFieldState(\"quantityShipped\")?.initial\n } to ${form.getFieldState(\"quantityShipped\")?.value}`,\n };\n historyNotes = [...historyNotes, note];\n }\n if (form.getFieldState(\"quantityDelivered\")?.dirty) {\n let note = {\n type: NoteType.INVENTORY,\n date: new Date(),\n by: window.appUser?.fullName,\n text: `Qty. Received Changed from ${\n form.getFieldState(\"quantityDelivered\")?.initial\n } to ${form.getFieldState(\"quantityDelivered\")?.value}`,\n };\n historyNotes = [...historyNotes, note];\n }\n if (form.getFieldState(\"quantityOnHand\")?.dirty) {\n let note = {\n type: NoteType.INVENTORY,\n date: new Date(),\n by: window.appUser?.fullName,\n text: `Qty. OnHand Changed from ${\n form.getFieldState(\"quantityOnHand\")?.initial\n } to ${form.getFieldState(\"quantityOnHand\")?.value}`,\n };\n historyNotes = [...historyNotes, note];\n }\n if (form.getFieldState(\"quantityPhysical\")?.dirty) {\n let note = {\n type: NoteType.INVENTORY,\n date: new Date(),\n by: window.appUser?.fullName,\n text: `Qty. Physical Changed from ${\n form.getFieldState(\"quantityPhysical\")?.initial\n } to ${form.getFieldState(\"quantityPhysical\")?.value}`,\n };\n historyNotes = [...historyNotes, note];\n }\n if (form.getFieldState(\"productName\")?.dirty) {\n let note = {\n type: NoteType.INVENTORY,\n date: new Date(),\n by: window.appUser?.fullName,\n text: `Name Changed from ${\n form.getFieldState(\"productName\")?.initial\n } to ${form.getFieldState(\"productName\")?.value}`,\n };\n historyNotes = [...historyNotes, note];\n }\n\n if (historyNotes?.length > 0) {\n data.history = [...data.history, ...historyNotes];\n }\n\n const ignoreList = [\n \"status\",\n \"quantityShipped\",\n \"quantityDelivered\",\n \"quantityOnHand\",\n \"quantityPhysical\",\n \"productId\",\n \"productName\",\n \"areaId\",\n \"zoneId\",\n \"auditId\",\n \"reloadYardCommodityId\",\n \"verificationRequired\",\n \"deliveryDateTime\",\n \"lastShipDateTime\",\n \"turnDays\",\n ];\n const includeArrayList = [\"customFields\"];\n data.history = historyAutoGen(form, data, ignoreList, includeArrayList);\n\n debugger;\n if (data.notes?.length > 0) {\n data.notes.forEach((element) => {\n if (!element.date) {\n element.type = NoteType.GENERIC;\n element.date = new Date();\n element.by = window.appUser?.fullName;\n }\n });\n } else data.notes = undefined;\n\n if (\n data.status === InventoryStatus.STORED &&\n data.quantityOnHand === data.quantityPhysical\n )\n data.quantityMismatch = false;\n\n delete data.account;\n delete data.area;\n delete data.inboundShipment;\n delete data.inventoryItems;\n delete data.location;\n delete data.outboundShipment;\n delete data.product;\n delete data.reloadYardCommodity;\n delete data.shipmentLineItems;\n delete data.zone;\n\n return data;\n };\n\n const onSuccess = async ({ data }) => {\n debugger;\n try {\n if (reconcileAudit) await updateReconcileAudit(reconcileAudit, data);\n\n const initQty = formState.initialValues.quantityShipped;\n const newQty = data.quantityShipped;\n\n if (!isNaN(initQty) && !isNaN(newQty) && initQty !== newQty) {\n await updateInboundQuantity(inbound, data, initQty, newQty);\n }\n\n notify(\"Inventory updated successfully\");\n deepRedirect(history, backPath);\n } catch (error) {\n logError(\"inventory:DialogSaveButton:onSuccess\", error, notify);\n } finally {\n setIsSaving(false);\n }\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\n \"inventory:DialogSaveButton:onFailure:Inventory Update\",\n error,\n notify\n );\n };\n\n const isPristine = () => {\n const formState = form.getState();\n return formState.pristine;\n };\n\n // Pass ...props, not ...rest to FormDataConsumer to include handleSubmitWithRedirect from props\n return (\n <FormDataConsumer>\n {({ formData, ...props }) => (\n <>\n <div>\n <SaveButton\n label=\"Save\"\n className={classes.saveButton}\n submitOnEnter={false}\n undoable={false}\n disabled={isPristine() || isDeleting}\n saving={isSaving}\n handleSubmitWithRedirect={() => handleValidateSave(formData)}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n {formData.verificationRequired === \"true\" ? (\n <SaveButton\n label={getAcceptLabel(formData)}\n submitOnEnter={false}\n undoable={false}\n // disabled={formState.pristine}\n saving={isSaving}\n handleSubmitWithRedirect={() =>\n handleValidateSaveAccept(formData)\n }\n transform={transformAccpet}\n onSuccess={onSuccess}\n onFailure={onFailure}\n icon={<ApproveIcon />}\n />\n ) : null}\n </div>\n <ConditionalConfirm\n isOpen={open}\n loading={isSaving}\n title=\"Save Confirmation\"\n content={confirmContent}\n onConfirm={onConfirm}\n onClose={handleDialogClose}\n />\n </>\n )}\n </FormDataConsumer>\n );\n};\n","import React from \"react\";\n\nimport { Tooltip } from \"@material-ui/core\";\nimport { green, orange } from \"@material-ui/core/colors\";\n\nimport { BlankIcon, ErrorFilledIcon, OKIcon } from \"../../../components/common\";\n\nimport { InventoryStatus } from \"../../../utils/constants\";\n\nexport const AuditStatusIcon = ({ record, ...props }) => {\n if (\n !record ||\n (record.status !== InventoryStatus.STORED &&\n record.status !== InventoryStatus.SHIPPED)\n )\n return <BlankIcon color=\"disabled\" />;\n else\n return record.quantityMismatch ? (\n <Tooltip title=\"Failed Audit\" placement=\"right\" arrow>\n <ErrorFilledIcon style={{ color: orange[600] }} />\n </Tooltip>\n ) : (\n <Tooltip title=\"OK\" placement=\"right\" arrow>\n <OKIcon style={{ color: green[600] }} />\n </Tooltip>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport { useDataProvider, useNotify, Button, Confirm } from \"react-admin\";\n\nimport { DeleteIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { InventoryStatus } from \"../../../utils/constants\";\nimport {\n handleInventoryDelete,\n updateInboundQuantity,\n} from \"../../../managerApp/resources/inventory/InventoryUitls\";\nimport { deepRedirect } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeepDeleteButton = ({\n record,\n inbound,\n backPath,\n resource,\n className,\n isSaving,\n isDeleting,\n setIsDeleting,\n ...props\n}) => {\n const classes = useStyles();\n const dataProvider = useDataProvider();\n const history = useHistory();\n const notify = useNotify();\n const [open, setOpen] = useState(false);\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n const handleDelete = async (event) => {\n setIsDeleting(true);\n setOpen(false);\n try {\n debugger;\n await handleInventoryDelete(record, dataProvider);\n await updateInboundQuantity(inbound, record, record.quantityShipped, 0);\n\n notify(\"Tally Sheet item deleted successfully\");\n deepRedirect(history, backPath);\n } catch (err) {\n logError(\"inventory:DeepDeleteButton:handleDelete\", err, notify);\n } finally {\n setIsDeleting(false);\n }\n };\n\n if (\n !record ||\n record?.status === InventoryStatus.STORED ||\n record?.status === InventoryStatus.AGGREGATED ||\n record?.status === InventoryStatus.SHIPPED\n ) {\n return null;\n }\n return (\n <>\n <Button\n {...props}\n label=\"Delete\"\n disabled={isDeleting || isSaving}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={isDeleting}\n title=\"Delete Confirmation\"\n content=\"Are you sure you want to delete this Tally Sheet item?\"\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React from \"react\";\n\nimport { Tooltip } from \"@material-ui/core\";\nimport BlankIcon from \"@material-ui/icons/RadioButtonUnchecked\";\nimport WarningIcon from \"@material-ui/icons/Warning\";\nimport ErrorIcon from \"@material-ui/icons/Error\";\nimport { green, orange } from \"@material-ui/core/colors\";\n\nimport { InventoryStatus } from \"../../../utils/constants\";\n\nexport const ValidateRequiredIcon = ({ record, classes, ...props }) => {\n if (!record) return null;\n else if (record.status === InventoryStatus.IN_TRANSIT)\n return <BlankIcon color=\"disabled\" />;\n else\n return record.verificationRequired === \"true\" ? (\n <Tooltip title=\"Approval Required\" placement=\"right\" arrow>\n <WarningIcon className={classes} style={{ color: orange[600] }} />\n </Tooltip>\n ) : record.verificationRequired === \"resolved\" ? (\n <Tooltip title=\"Verified, Accepted\" placement=\"right\" arrow>\n <ErrorIcon className={classes} style={{ color: green[600] }} />\n </Tooltip>\n ) : (\n <BlankIcon color=\"disabled\" />\n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\n\nimport {\n Card,\n CardContent,\n CardMedia,\n Dialog,\n Grid,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Tooltip,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { orange } from \"@material-ui/core/colors\";\n\nimport { Button, DateField, NumberField, SelectField } from \"react-admin\";\n\nimport {\n ExceptionIcon,\n PhotoIcon,\n TimelineIcon,\n} from \"../../../components/common\";\nimport { LowInventoryIcon } from \"../../../components/common/LowInventoryIcon\";\nimport { isAuthorized } from \"../../../utils/appUtils\";\nimport {\n AclType,\n InventoryStatus,\n InventoryStatuses,\n} from \"../../../utils/constants\";\nimport { getPhoto, getPhotoUrl } from \"../../../utils/fileUtils\";\nimport { InventoryStatusIcon } from \"../../../managerApp/resources/inventory/InventoryStatusIcon\";\nimport { ValidateRequiredIcon } from \"./ValidateRequiredIcon\";\n\nconst useAsideStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n width: \"18em\",\n minWidth: \"18em\",\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(0.5),\n overflow: \"initial\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n photoButton: { marginLeft: -theme.spacing(1) },\n centerAlign: {\n textAlign: \"center\",\n },\n status: {\n marginTop: theme.spacing(0.3),\n },\n tableIcon: {\n marginTop: theme.spacing(0.7),\n },\n media: {\n margin: \"0 auto 0\",\n marginTop: theme.spacing(1),\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n maxHeight: \"20em\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n mediaFull: {\n margin: \"0 auto 0\",\n width: \"auto\",\n maxWidth: \"100%\",\n height: \"auto\",\n borderRadius: \"6px\",\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)\",\n },\n}));\n\nexport const InventoryAside = ({ backPath, record, exceptions, ...props }) => {\n const classes = useAsideStyles();\n const imgRef = useRef();\n const location = useLocation(); // used to force refresh photos on every visit.\n const [photo, setPhoto] = useState();\n const [selectedPhoto, setSelectedPhoto] = useState();\n const [isOpen, setIsOpen] = useState(false);\n const linkBackPath = backPath\n ? [...backPath, props.location.pathname]\n : [props.location.pathname];\n\n useEffect(() => {\n if (record?.photos && record.photos.length > 0 && imgRef.current) {\n setSelectedPhoto(record.photos[0].key);\n getPhoto(record.photos[0].key, setPhoto, imgRef.current.clientWidth);\n }\n }, [imgRef, record, location.key]);\n\n const handleSelectPhoto = (evt) => {\n setSelectedPhoto(evt.currentTarget.id);\n getPhoto(evt.currentTarget.id, setPhoto, imgRef.current.clientWidth);\n };\n\n const handleMagnifyPhoto = () => {\n setIsOpen(!isOpen);\n };\n\n if (!record) return null;\n return (\n <Card className={classes.root} ref={imgRef}>\n <CardContent>\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Status:\n </Typography>\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <InventoryStatusIcon inventory={record} />\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <SelectField\n source=\"status\"\n record={record}\n choices={InventoryStatuses}\n />\n </Grid>\n </Grid>\n {record.status === InventoryStatus.STORED &&\n record.product?.lowInventoryAlert && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <LowInventoryIcon record={record} />\n </Grid>\n <Grid item xs={10} className={classes.status}>\n Low Inventory\n </Grid>\n </Grid>\n )}\n {exceptions.hasException && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Exceptions\n </Typography>\n </Grid>\n )}\n {exceptions.hasException && exceptions.overShipment && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip\n title={\n exceptions.overShipmentNote\n ? exceptions.overShipmentNote\n : `Overshipment`\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">\n Overshipment: {exceptions.overShipmentQuantity}\n </Typography>\n </Grid>\n </Grid>\n )}\n {exceptions.hasException && exceptions.underShipment && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip\n title={\n exceptions.underShipmentNote\n ? exceptions.underShipmentNote\n : `Undershipment`\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">\n Undershipment: {exceptions.underShipmentQuantity}\n </Typography>\n </Grid>\n </Grid>\n )}\n {exceptions.hasException && exceptions.isDamaged && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip title=\"Damaged\" placement=\"left\" arrow>\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">Damaged</Typography>\n </Grid>\n </Grid>\n )}\n {exceptions.isRecalled && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip\n title={\n exceptions.recallNote ? exceptions.recallNote : \"Recalled\"\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">Recalled</Typography>\n </Grid>\n </Grid>\n )}\n {exceptions.hasException && exceptions.otherException && (\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <Tooltip\n title={\n exceptions.otherExceptionNote\n ? exceptions.otherExceptionNote\n : \"Other Exception\"\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon style={{ color: orange[600] }} />\n </Tooltip>\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <Typography variant=\"body2\">Other Exception</Typography>\n </Grid>\n </Grid>\n )}\n </Grid>\n {record.account && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Account:\n </Typography>\n <br />\n {isAuthorized(AclType.ACCOUNTS) ? (\n <Link\n to={{\n pathname: `/accounts/${record.accountId}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {record.account.businessName}\n </Typography>\n </Link>\n ) : (\n <Link\n to={{\n pathname: `/accounts/${record.accountId}/show`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {record.account.businessName}\n </Typography>\n </Link>\n )}\n </Grid>\n )}\n {record.productId && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Product:\n </Typography>\n <br />\n <Link\n to={{\n pathname: `/products/${record.productId}`,\n state: { account: record.account, backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n Product Code: {record.productCode}\n </Typography>\n </Link>\n </Grid>\n )}\n {record.deliveryDateTime && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Date Received:\n </Typography>\n <br />\n <DateField source=\"deliveryDateTime\" record={record} />\n </Grid>\n )}\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Inbound Shipment:\n </Typography>\n <br />\n <Link\n to={{\n pathname: `/inboundShipments/${record.inboundShipmentId}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n PO no. {record.poNumber}\n </Typography>\n </Link>\n {record.status === InventoryStatus.STORED ||\n record.status === InventoryStatus.SHIPPED ? (\n <Table size=\"small\" padding=\"none\">\n <TableHead>\n <TableRow>\n <TableCell>\n <Typography variant=\"caption\">Quantity</Typography>\n </TableCell>\n <TableCell>\n <Typography variant=\"caption\">Advised</Typography>\n </TableCell>\n <TableCell>\n <Typography variant=\"caption\">Received</Typography>\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell>\n <ValidateRequiredIcon\n record={record}\n classes={classes.tableIcon}\n />\n </TableCell>\n <TableCell>\n <NumberField source=\"quantityShipped\" record={record} />\n </TableCell>\n <TableCell>\n <NumberField source=\"quantityDelivered\" record={record} />\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n ) : null}\n </Grid>\n {record.shipmentLineItems?.items &&\n record.shipmentLineItems.items.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Outbound Shipments:\n </Typography>\n <br />\n <Table size=\"small\" padding=\"none\">\n <TableHead>\n <TableRow>\n <TableCell>\n <Typography variant=\"caption\">Quantity</Typography>\n </TableCell>\n <TableCell>\n <Typography variant=\"caption\">PO No.</Typography>\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {record.shipmentLineItems.items.map((itm) => (\n <TableRow>\n <TableCell>\n <NumberField\n source=\"totalQuantityToPick\"\n record={itm}\n />\n </TableCell>\n <TableCell>\n <Link\n to={{\n pathname: `/outboundShipments/${itm.outboundShipmentId}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {itm.poNumber}\n </Typography>\n </Link>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Grid>\n )}\n <Grid item xs={12} className={classes.centerAlign}>\n <Link to={`/search/timeline/${record.id}`}>\n <Button label=\"View Timeline\" color=\"default\">\n <TimelineIcon fontSize=\"small\" />\n </Button>\n </Link>\n </Grid>\n {record.photos && (\n <Grid item container direction=\"row\" xs={12}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Photos\n </Typography>\n <br />\n </Grid>\n {record.photos.map((file, index) => (\n <Grid item xs={3}>\n <Button\n label={`${index + 1}`}\n id={file.key}\n key={file.key}\n onClick={handleSelectPhoto}\n size=\"small\"\n className={classes.photoButton}\n >\n <PhotoIcon fontSize=\"small\" />\n </Button>\n </Grid>\n ))}\n <Grid item xs={12}>\n <CardMedia\n component=\"img\"\n image={photo}\n className={classes.media}\n onClick={handleMagnifyPhoto}\n />\n </Grid>\n </Grid>\n )}\n </Grid>\n </CardContent>\n {isOpen ? (\n <Dialog open={isOpen} onClick={handleMagnifyPhoto} maxWidth=\"xl\">\n <img\n src={getPhotoUrl(selectedPhoto, window.innerWidth)}\n alt=\"Inventory\"\n className={classes.mediaFull}\n onClick={handleMagnifyPhoto}\n />\n </Dialog>\n ) : null}\n </Card>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\n\nimport {\n Box,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n IconButton,\n makeStyles,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\n\nimport {\n Button,\n Confirm,\n Filter,\n ListContextProvider,\n ListToolbar,\n TextField,\n useList,\n useListContext,\n useNotify,\n} from \"react-admin\";\n\nimport { LinkIcon, CloseIcon, CancelIcon } from \"../../../components/common\";\n\nimport { productByAccountByActiveByName } from \"../../../graphql/queries\";\nimport { logError } from \"../../../utils/appUtils\";\n\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { CustomField } from \"../../../components/common/CustomFields\";\nimport CustomizableDatagrid from \"../../../components/common/ra-customizable-datagrid\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { MAX_ROWS_UPLOAD } from \"../../../utils/constants\";\n\nconst useStyles = makeStyles((theme) => ({\n dialogTitle: {\n display: \"flex\",\n paddingTop: theme.spacing(0),\n paddingBottom: theme.spacing(0),\n justifyContent: \"space-between\",\n alignItems: \"center\",\n },\n dialogContent: {\n // https://stackoverflow.com/questions/47698037/how-can-i-set-a-height-to-a-dialog-in-material-ui\n height: \"90vh\",\n },\n Filter: {\n paddingTop: theme.spacing(1),\n },\n}));\n\nconst ListFilter = ({ account, setProducts, classes, ...props }) => {\n const handleSearch = (value) => {\n const searchTerm = value?.toLowerCase() || \"\";\n const newProducts = account.products.items.filter(\n (itm) =>\n itm.name?.toLowerCase().includes(searchTerm) ||\n itm.productCode?.toLowerCase().includes(searchTerm) ||\n itm.category?.toLowerCase().includes(searchTerm) ||\n itm.customFields?.join().toLowerCase().includes(searchTerm)\n );\n\n setProducts(newProducts);\n };\n\n return (\n <Filter {...props} variant=\"outlined\" className={classes.Filter}>\n <SearchField\n label=\"Catalog Search\"\n margin=\"dense\"\n alwaysOn\n handleSearch={handleSearch}\n />\n </Filter>\n );\n};\n\nconst PaginationToolbar = ({ ...props }) => {\n const listContext = useListContext(props);\n\n return (\n <Grid container direction=\"row\" spacing={1} alignItems=\"center\">\n <Grid item xs={4}>\n <Typography>\n {listContext?.selectedIds?.length > 0 ? (\n `${listContext.selectedIds.length} selected`\n ) : (\n <> </>\n )}\n </Typography>\n </Grid>\n <Grid item xs={8}>\n <Pagination {...props} {...listContext} />\n </Grid>\n </Grid>\n );\n};\n\nexport const LinkProductDialog = ({\n record: inventory,\n isOpen,\n setIsOpen,\n handleAddSelected,\n ...props\n}) => {\n const notify = useNotify();\n const classes = useStyles();\n const [loaded, setLoaded] = useState(false);\n const [account, setAccount] = useState(inventory.account);\n const [products, setProducts] = useState([]);\n const [product, setProduct] = useState({});\n const [confirmOpen, setConfirmOpen] = useState(false);\n const [renameOpen, setRenameOpen] = useState(false);\n const fixedFilter = { active: \"true\" };\n const defaultSort = { field: \"name\", order: \"ASC\" };\n const defaultPerPage = 10;\n const linkMessage = `Linking will overwrite all custom fields with defaults from Product.\n Linking to the wrong product may affect billing calculations.\n Inventory \"${inventory.productName}\" will be linked to \"${product.name}\".`;\n const unlinkMessage = `Removing Product linkage may disable billing calculations for this inventory item.`;\n const nameMessage = `Do you want to reset the Inventory product name from \"${inventory.productName}\" to \"${product.name}\"?`;\n\n useEffect(() => {\n getProducts();\n }, []);\n\n const getProducts = async () => {\n try {\n debugger;\n const input = {\n accountId: inventory.accountId,\n activeName: { beginsWith: { active: \"true\" } },\n limit: MAX_ROWS_UPLOAD,\n };\n let resp = await API.graphql(\n graphqlOperation(productByAccountByActiveByName, input)\n );\n let productData = resp.data.productByAccountByActiveByName;\n setAccount({ ...inventory.account, products: productData });\n setProducts(productData.items);\n setLoaded(true);\n } catch (error) {\n logError(\"inventory:LinkProductDialog:getProducts\", error, notify);\n }\n };\n\n const listContext = useList({\n ...props,\n data: products,\n ids: products.map(({ id }) => id),\n loaded: loaded,\n filter: fixedFilter,\n sort: defaultSort,\n perPage: defaultPerPage,\n basePath: \"/products\",\n resource: \"products\",\n });\n\n useEffect(() => {\n if (listContext.selectedIds?.length === 2)\n listContext.onSelect([listContext.selectedIds[1]]);\n }, [listContext.selectedIds]);\n\n useEffect(() => {\n if (isOpen && listContext.selectedIds?.length === 0 && inventory.productId)\n listContext.onSelect([inventory.productId]);\n }, [isOpen]);\n\n const handleConfirmOpen = () => {\n if (listContext.selectedIds?.length === 1) {\n const product = products.find(\n (itm) => itm.id === listContext.selectedIds[0]\n );\n setProduct(product);\n }\n setConfirmOpen(true);\n };\n\n const handleConfirm = () => {\n setConfirmOpen(false);\n if (inventory.productName?.trim() !== product.name?.trim()) {\n setRenameOpen(true);\n } else {\n handleAddSelected(product);\n handleDialogClose();\n }\n };\n\n const handleDialogClose = () => {\n setIsOpen(false);\n listContext.onUnselectItems();\n setProducts(account.products.items);\n };\n\n const handleAdd = (rename) => {\n setRenameOpen(false);\n handleAddSelected(product, rename);\n handleDialogClose();\n };\n\n return (\n loaded && (\n <Dialog maxWidth=\"xl\" open={isOpen} fullWidth>\n <ListContextProvider value={listContext}>\n <DialogTitle disableTypography className={classes.dialogTitle}>\n <ListToolbar\n {...props}\n filters={\n <ListFilter\n account={account}\n setProducts={setProducts}\n classes={classes}\n />\n }\n />\n <IconButton aria-label=\"close\" onClick={handleDialogClose}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n <DialogContent dividers className={classes.dialogContent}>\n <CatalogGrid {...props} account={inventory.account} />\n <PaginationToolbar {...props} />\n </DialogContent>\n <DialogActions>\n <Button\n label=\"Cancel\"\n color=\"defalut\"\n autoFocus\n onClick={handleDialogClose}\n >\n <CancelIcon />\n </Button>\n <Button\n label=\"Link Product\"\n color=\"primary\"\n onClick={handleConfirmOpen}\n >\n <LinkIcon />\n </Button>\n </DialogActions>\n </ListContextProvider>\n {confirmOpen && (\n <Confirm\n isOpen={confirmOpen}\n title={\n listContext.selectedIds?.length === 0\n ? \"Un-Link Confirmation\"\n : \"Link Confirmation\"\n }\n content={\n listContext.selectedIds?.length === 0\n ? unlinkMessage\n : linkMessage\n }\n onConfirm={handleConfirm}\n CancelIcon={CancelIcon}\n onClose={() => setConfirmOpen(false)}\n />\n )}\n {renameOpen && (\n <Confirm\n isOpen={renameOpen}\n title=\"Name Change Confirmation\"\n content={nameMessage}\n confirm=\"Yes\"\n onConfirm={() => handleAdd(true)}\n cancel=\"No\"\n CancelIcon={CancelIcon}\n onClose={() => handleAdd(false)}\n />\n )}\n </Dialog>\n )\n );\n};\n\nconst CatalogGrid = ({ account, ...props }) => {\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n const hasBulkActions = true;\n debugger;\n const customGridFields = account.inventoryCustomFields\n ? account.inventoryCustomFields.map((field, index) => {\n return (\n <CustomField\n source={`customFields[${index}]`}\n field={field}\n label={field.name}\n sortable={true}\n />\n );\n })\n : [];\n\n return isSmall ? (\n <CustomizableDatagrid\n rowClick={false}\n basePath=\"/products\"\n hasBulkActions={hasBulkActions}\n onSelect={() => {}}\n storageProp={`LinkProductDialog_${account.id}_small`}\n defaultColumns={[\"productCode\", \"name\", \"defaultUnits\"]}\n >\n {[\n <TextField source=\"productCode\" label=\"Product Code\" />,\n <TextField source=\"name\" label=\"Name\" />,\n <TextField source=\"defaultUnits\" label=\"Units\" />,\n ...customGridFields,\n ]}\n </CustomizableDatagrid>\n ) : (\n <CustomizableDatagrid\n rowClick={false}\n basePath=\"/products\"\n hasBulkActions={hasBulkActions}\n onSelect={() => {}}\n storageProp={`LinkProductDialog_${account.id}_large`}\n defaultColumns={[\n \"productCode\",\n \"name\",\n \"category\",\n \"defaultUnits\",\n \"pcs\",\n ]}\n >\n {[\n <TextField source=\"productCode\" label=\"Product Code\" />,\n <TextField source=\"name\" label=\"Name\" />,\n <TextField source=\"category\" label=\"Commodity Category\" />,\n // <TextField source=\"totalInventoryQuantity\" label=\"Total Qty.\" />,\n <TextField source=\"defaultUnits\" label=\"UOM\" />,\n <TextField source=\"pcs\" label=\"Pieces\" />,\n ...customGridFields,\n ]}\n </CustomizableDatagrid>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { Button, Confirm } from \"react-admin\";\n\nimport { AddIcon } from \"../../../../components/common\";\nimport { deepRedirect } from \"../../../../utils/utils\";\nimport { InventoryStatus } from \"../../../../utils/constants\";\n\nexport const CreateInventoryItemButton = ({\n backPath,\n form,\n inventory,\n ...props\n}) => {\n const history = useHistory();\n const [open, setOpen] = useState(false);\n\n const handleCreate = () => {\n const formState = form.getState();\n\n if (formState.dirty) {\n setOpen(true);\n } else {\n handleConfirm();\n }\n };\n\n const handleDialogClose = () => setOpen(false);\n const handleConfirm = () => {\n deepRedirect(\n history,\n \"/inventoryItems/create\",\n props.location.pathname,\n backPath,\n {\n inventory: inventory,\n }\n );\n };\n\n if (!inventory || inventory.status === InventoryStatus.SHIPPED) return null;\n return (\n <>\n <Button label=\"Add\" color=\"default\" onClick={handleCreate}>\n <AddIcon />\n </Button>\n <Confirm\n isOpen={open}\n title=\"Save Confirmation\"\n content=\"You have un-saved Inventory changes. If you continue, all changes will be lost. Proceed?\"\n onConfirm={handleConfirm}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport {\n Button,\n Confirm,\n useDataProvider,\n useNotify,\n useRedirect,\n} from \"react-admin\";\n\nimport { DeleteIcon, RemoveIcon } from \"../../../../components/common\";\nimport { logError } from \"../../../../utils/appUtils\";\nimport { InventoryStatus, NoteType } from \"../../../../utils/constants\";\nimport { setInventoryAisleList } from \"../../../../utils/locationUtils\";\nimport { deepRedirect, trimDecimal } from \"../../../../utils/utils\";\nimport { updateIventory } from \"./InventoryItemUtils\";\nimport { promiseResetCapacityUsed } from \"../InventoryUitls\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeepRemoveButton = (props) => {\n return (\n <DeepDeleteButton\n {...props}\n backPath={null}\n resource=\"inventoryItems\"\n inList={true}\n />\n );\n};\n\nexport const DeepDeleteButton = ({\n backPath,\n record,\n resource,\n className,\n inventory,\n exceptions,\n setExceptions,\n inventoryItems,\n setInventoryItems,\n isSaving,\n isDeleting,\n setIsDeleting,\n inList = false,\n ...props\n}) => {\n const classes = useStyles();\n const dataProvider = useDataProvider();\n const history = useHistory();\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n const [message, setMessage] = useState(\"\");\n const isDisabled = isSaving;\n\n const handleDialogOpen = () => {\n let messages = [];\n debugger;\n\n const otherDamaged = inventoryItems.items.some(\n (itm) => itm.isDamaged && itm.id !== record.id\n );\n\n const totalQuantity = inventoryItems.items.reduce((sum, item) => {\n if (item.id !== record.id) {\n return sum + item.quantityOnHand;\n }\n return sum;\n }, 0);\n\n if (record.isDamaged && !otherDamaged) {\n messages.push(\"- clear Damaged exception\");\n }\n\n if (inventory.overShipment && totalQuantity <= inventory.quantityShipped) {\n messages.push(\"- clear Overshipment exception\");\n }\n\n if (\n totalQuantity < inventory.quantityShipped &&\n inventory.status !== InventoryStatus.IN_TRANSIT\n ) {\n messages.push(\"- set Undershipment exception\");\n }\n\n if (messages.length > 0) {\n messages.unshift(\"Deleting this item will:\");\n messages.push(\"Proceed?\");\n const messageFragment = (\n <>\n {messages.map((msg, index) => (\n <React.Fragment key={index}>\n {msg} <br />\n </React.Fragment>\n ))}\n </>\n );\n setMessage(messageFragment);\n setOpen(true);\n } else handleDelete();\n };\n const handleDialogClose = () => setOpen(false);\n\n const handleDelete = async (event) => {\n setIsDeleting(true);\n setOpen(false);\n try {\n debugger;\n const inventoryToUpdate = inventory;\n\n await dataProvider.delete(resource, {\n id: record.id,\n previousData: record,\n });\n\n // Filter out inventoryItem to delete\n if (inventoryItems?.items.length > 0) {\n // REMOVE from list\n inventoryItems.items = inventoryItems.items.filter(\n (item) => item.id !== record.id\n );\n inventoryToUpdate.inventoryItems.items = inventoryItems.items;\n setInventoryItems &&\n setInventoryItems({\n items: inventoryItems.items.sort((a, b) =>\n a.locationFullName.localeCompare(b.locationFullName)\n ),\n });\n } else if (inventoryToUpdate?.inventoryItems?.items) {\n // DELETE from InventoryItem\n inventoryToUpdate.inventoryItems.items =\n inventoryToUpdate.inventoryItems.items.filter(\n (item) => item.id !== record.id\n );\n }\n\n const totalQuantity = inventoryToUpdate.inventoryItems.items.reduce(\n (sum, item) => sum + item.quantityOnHand,\n 0\n );\n if (\n record.status !== InventoryStatus.IN_TRANSIT &&\n record.status !== InventoryStatus.ARRIVED\n ) {\n inventoryToUpdate.quantityDelivered = totalQuantity;\n }\n\n // set/reset exceptinos.\n inventoryToUpdate.isDamaged = inventoryToUpdate.inventoryItems.items.some(\n (itm) => itm.isDamaged\n );\n inventoryToUpdate.overShipment =\n totalQuantity > inventoryToUpdate.quantityShipped;\n if (inventoryToUpdate.overShipment) {\n inventoryToUpdate.overShipmentQuantity = trimDecimal(\n totalQuantity - inventoryToUpdate.quantityShipped\n );\n // reset undershipment\n inventoryToUpdate.underShipmentQuantity = 0;\n inventoryToUpdate.underShipmentNote = \"\";\n }\n\n if (inventoryToUpdate.inventoryItems.items.length === 0) {\n // reset undershipment\n inventoryToUpdate.underShipmentQuantity = 0;\n inventoryToUpdate.underShipmentNote = \"\";\n } else {\n inventoryToUpdate.underShipment =\n totalQuantity < inventoryToUpdate.quantityShipped;\n if (\n inventoryToUpdate.underShipment &&\n inventoryToUpdate.status !== InventoryStatus.IN_TRANSIT\n ) {\n inventoryToUpdate.underShipmentQuantity = trimDecimal(\n inventoryToUpdate.quantityShipped - totalQuantity\n );\n // reset overshipment\n inventoryToUpdate.overShipmentQuantity = 0;\n inventoryToUpdate.overShipmentNote = \"\";\n }\n }\n inventoryToUpdate.hasException =\n inventoryToUpdate.overShipment ||\n inventoryToUpdate.underShipment ||\n inventoryToUpdate.isDamaged ||\n inventory.isRecalled ||\n inventory.otherException;\n\n setExceptions &&\n setExceptions({\n hasException: inventoryToUpdate.hasException,\n overShipment: inventoryToUpdate.overShipment,\n overShipmentQuantity: inventoryToUpdate.overShipmentQuantity,\n overShipmentNote: inventoryToUpdate.overShipmentNote,\n underShipment: inventoryToUpdate.underShipment,\n underShipmentQuantity: inventoryToUpdate.underShipmentQuantity,\n underShipmentNote: inventoryToUpdate.underShipmentNote,\n isDamaged: inventoryToUpdate.isDamaged,\n isRecalled: record.isRecalled,\n recallNote: record.recallNote,\n otherException: record.otherException,\n otherExceptionNote: record.otherExceptionNote,\n });\n\n setInventoryAisleList(inventoryToUpdate);\n inventoryToUpdate.history = [\n ...inventoryToUpdate.history,\n {\n type: NoteType.INVENTORY,\n date: new Date(),\n by: window.appUser?.fullName,\n text: `Deleted ${record.quantityOnHand} ${inventoryToUpdate.inventoryUnits} from ${record.locationFullName}`,\n },\n ];\n await updateIventory(inventoryToUpdate);\n\n // update location capacityUsed/Allocated for STRUCTURED && ! OTHER || BULK\n await promiseResetCapacityUsed(inventory, record);\n\n notify(\"Item deleted successfully\");\n if (backPath) deepRedirect(history, backPath);\n } catch (err) {\n logError(\n \"inventoryItems:DeepDeleteButton:handleDelete\",\n err,\n notify,\n redirect\n );\n } finally {\n setIsDeleting(false);\n }\n };\n\n if (\n !record ||\n record.status === InventoryStatus.AGGREGATED ||\n record.status === InventoryStatus.STORED ||\n record.status === InventoryStatus.SHIPPED\n )\n return null;\n return (\n <>\n {inList ? (\n <Button\n {...props}\n label=\"REMOVE\"\n color=\"default\"\n disabled={isDeleting || isDisabled}\n onClick={handleDialogOpen}\n >\n <RemoveIcon />\n </Button>\n ) : (\n <Button\n {...props}\n label=\"Delete\"\n disabled={isDeleting || isDisabled}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n )}\n <Confirm\n isOpen={open}\n loading={isDeleting}\n title=\"Delete Confirmation\"\n content={\n <>\n Are you sure you want to delete this Inventory Item?\n <br />\n {message}\n </>\n }\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React from \"react\";\n\nimport { Typography } from \"@material-ui/core\";\n\nimport {\n AddIcon,\n InventoryMapIcon,\n RemoveIcon,\n} from \"../../../components/common\";\n\nexport const InventorySetupHelp = ({ classes }) => (\n <>\n <Typography variant=\"subtitle1\">\n <strong>Inventory Setup</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Qty. Advised & Received:</strong> Intital inventory stock.\n Both should be equal if no issues with Inbound Shipment. Displayed in\n a side bar once the inventory has been Stored.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. On Hand:</strong> Stock quantity on hand\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Physical:</strong> Stock quantity as counted during an\n Inventory Audit. Should equal Qty. On Hand if physical count is\n accurate. This field is hidden unless there is a count mismatch.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Available:</strong> Qty On Hand minus Qty. Committed\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Committed:</strong> Stock quantity Reserved for \"Pending\"\n Outbound Shipments\n </Typography>\n </li>\n <li>\n <Typography>\n <InventoryMapIcon className={classes.icon} />\n <strong> INVENTORY MAP: </strong>\n Opens Inventory Map dialog. Allows to inspect inventory distribution\n in the yard for a given account and to select a new location.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const NotesHelp = ({ classes }) => (\n <>\n <Typography variant=\"subtitle1\">\n <strong>Notes</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Use the Notes Tab to manually document key events and changes made to the\n Shipment record.\n </Typography>\n <ul>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>Add new Note Line Item.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Note Line Item - this info will be permanently lost.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const HistoryHelp = ({ classes }) => (\n <>\n <Typography variant=\"subtitle1\">\n <strong>History</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n The History Tab provides an automated, chronological Audit Trail of key\n events and record changes.\n </Typography>\n </>\n);\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n InventorySetupHelp,\n NotesHelp,\n HistoryHelp,\n} from \"./InventoryHelpComponents\";\n\nconst useStyles = makeStyles(() => ({\n icon: {\n verticalAlign: \"middle\",\n display: \"inline-flex\",\n },\n}));\n\nexport const InventoryHelp = (props) => {\n const classes = useStyles();\n const tabNames = props?.location.pathname.split(\"/\");\n const tab = tabNames?.length > 3 ? tabNames[3] : \"\";\n\n switch (tab) {\n case \"\":\n return <InventorySetupHelp classes={classes} />;\n case \"notes\":\n return <NotesHelp classes={classes} />;\n case \"historyLogs\":\n return <HistoryHelp classes={classes} />;\n default:\n return null;\n }\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport {\n Box,\n Checkbox,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormControl,\n FormControlLabel,\n FormGroup,\n FormLabel,\n Grid,\n IconButton,\n TextField,\n Typography,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { Button, TopToolbar } from \"react-admin\";\n\nimport {\n CancelIcon,\n CloseIcon,\n ExceptionIcon,\n LinkIcon,\n} from \"../../../components/common\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { InventoryStatus } from \"../../../utils/constants\";\nimport { trimDecimal } from \"../../../utils/utils\";\nimport { InventoryHelp } from \"./InventoryHelp\";\n\nconst useStyles = makeStyles((theme) => ({\n dialogTitle: {\n display: \"flex\",\n paddingTop: theme.spacing(0),\n paddingBottom: theme.spacing(0),\n justifyContent: \"space-between\",\n },\n title: {\n paddingTop: theme.spacing(1),\n },\n dialogContent: {\n // https://stackoverflow.com/questions/47698037/how-can-i-set-a-height-to-a-dialog-in-material-ui\n minHeight: \"50vh\",\n },\n}));\n\nconst InventoryEditActions = ({ data, setProductIsOpen, ...props }) => {\n const [isExceptionDialogOpen, setIsExceptionDialogOpen] = useState();\n\n return (\n <TopToolbar>\n <HelpButton>\n <InventoryHelp {...props} />\n </HelpButton>\n <Button\n label=\"Exception\"\n color=\"primary\"\n onClick={() => setIsExceptionDialogOpen(true)}\n >\n <ExceptionIcon />\n </Button>\n <Button label=\"Product\" onClick={() => setProductIsOpen(true)}>\n <LinkIcon />\n </Button>\n <BackButton {...props} />\n <ExceptionDialog\n {...props}\n data={data}\n isExceptionDialogOpen={isExceptionDialogOpen}\n setIsExceptionDialogOpen={setIsExceptionDialogOpen}\n />\n </TopToolbar>\n );\n};\n\nconst ExceptionDialog = ({\n data,\n isExceptionDialogOpen,\n setIsExceptionDialogOpen,\n exceptions,\n setExceptions,\n quantityAdvised,\n}) => {\n const classes = useStyles();\n const [otherExceptionNoteError, setOtherExceptionError] = useState();\n const [tempExceptions, setTempExceptinos] = useState({});\n const isSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n useEffect(() => {\n if (isExceptionDialogOpen) {\n setTempExceptinos({ ...exceptions });\n }\n }, [isExceptionDialogOpen]);\n\n const handleSave = () => {\n if (!validate()) return;\n debugger;\n const prevExceptions = { ...tempExceptions };\n prevExceptions.hasException =\n tempExceptions.overShipment ||\n tempExceptions.underShipment ||\n tempExceptions.isBroken ||\n tempExceptions.isRecalled ||\n tempExceptions.otherException;\n setExceptions({ ...prevExceptions });\n setIsExceptionDialogOpen(false);\n };\n\n const validate = () => {\n let isValid = true;\n setOtherExceptionError(\"\");\n if (tempExceptions.otherException) {\n isValid = isValid && tempExceptions.otherExceptionNote;\n !tempExceptions.otherExceptionNote && setOtherExceptionError(\"Required\");\n }\n return isValid;\n };\n\n const handleChange = (evt) => {\n const type = evt.target.name;\n const value = evt.target.checked;\n const prevExceptions = { ...tempExceptions };\n debugger;\n\n if (type === \"underShipment\") {\n prevExceptions.underShipment = value;\n if (value) {\n prevExceptions.underShipmentQuantity = trimDecimal(\n quantityAdvised - (data.quantityDelivered || 0)\n );\n prevExceptions.overShipment = !value;\n prevExceptions.overShipmentNote = \"\";\n } else {\n prevExceptions.underShipmentNote = \"\";\n prevExceptions.underShipmentQuantity = 0;\n }\n } else if (type === \"overShipment\") {\n prevExceptions.overShipment = value;\n if (value) {\n prevExceptions.overShipmentQuantity = trimDecimal(\n (data.quantityDelivered || 0) - quantityAdvised\n );\n prevExceptions.underShipment = !value;\n prevExceptions.underShipmentNote = \"\";\n } else {\n prevExceptions.overShipmentNote = \"\";\n prevExceptions.overShipmentQuantity = 0;\n }\n } else if (type === \"isRecalled\") {\n prevExceptions.isRecalled = value;\n if (!value) {\n prevExceptions.recallNote = \"\";\n }\n } else {\n prevExceptions.otherException = value;\n if (!value) {\n prevExceptions.otherExceptionNote = \"\";\n setOtherExceptionError(\"\");\n }\n }\n setTempExceptinos({ ...prevExceptions });\n };\n\n const handleCancel = () => {\n setIsExceptionDialogOpen(false);\n setTempExceptinos({});\n };\n\n const setNote = (prop, value) => {\n debugger;\n setTempExceptinos((tempExceptions) => ({\n ...tempExceptions,\n [prop]: value,\n }));\n if (prop === \"otherExceptionNote\" && value) setOtherExceptionError(\"\");\n };\n\n const isOverShipmentDisabled = () => {\n return (\n tempExceptions.underShipment ||\n (tempExceptions.overShipment &&\n quantityAdvised < (data.quantityDelivered || 0)) ||\n (!tempExceptions.overShipment &&\n quantityAdvised >= (data.quantityDelivered || 0))\n );\n };\n\n const isUnderShipmentDisabled = () => {\n return (\n tempExceptions.overShipment ||\n (tempExceptions.underShipment &&\n quantityAdvised > (data.quantityDelivered || 0)) ||\n (!tempExceptions.underShipment &&\n quantityAdvised <= (data.quantityDelivered || 0))\n );\n };\n\n return (\n <Dialog\n open={isExceptionDialogOpen}\n maxWidth={isSmall ? \"xl\" : \"md\"}\n fullWidth={true}\n >\n <DialogTitle disableTypography className={classes.dialogTitle}>\n <Typography className={classes.title} variant=\"h6\">\n Exception Manager\n </Typography>\n <IconButton aria-label=\"close\" onClick={handleCancel}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n <DialogContent className={classes.dialogContent}>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <FormControl component=\"fieldset\" className={classes.formControl}>\n <FormLabel>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Exception Type\n </Typography>\n </FormLabel>\n <FormGroup row={!isSmall}>\n <FormControlLabel\n control={\n <Checkbox\n checked={tempExceptions.overShipment}\n onChange={handleChange}\n name=\"overShipment\"\n disabled={isOverShipmentDisabled()}\n />\n }\n label=\"Overshipment\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={tempExceptions.underShipment}\n onChange={handleChange}\n name=\"underShipment\"\n disabled={isUnderShipmentDisabled()}\n />\n }\n label=\"Undershipment\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={tempExceptions.isDamaged}\n name=\"isDamaged\"\n disabled={true}\n />\n }\n label=\"Damaged\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={tempExceptions.isRecalled}\n onChange={handleChange}\n name=\"isRecalled\"\n />\n }\n label=\"Recalled\"\n />\n <FormControlLabel\n control={\n <Checkbox\n checked={tempExceptions.otherException}\n onChange={handleChange}\n name=\"other\"\n />\n }\n label=\"Other\"\n />\n </FormGroup>\n </FormControl>\n </Grid>\n {tempExceptions.overShipment && (\n <Grid item xs={12}>\n <TextField\n name=\"overShipmentNote\"\n label=\"Overshipment Notes\"\n multiline\n autoFocus\n minRows={3}\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={\n tempExceptions.overShipmentNote\n ? tempExceptions.overShipmentNote\n : \"\"\n }\n onChange={(evt) =>\n setNote(\"overShipmentNote\", evt.target.value)\n }\n helperText={`Overshipment Qty: ${tempExceptions.overShipmentQuantity}`}\n />\n </Grid>\n )}\n {tempExceptions.underShipment && (\n <Grid item xs={12}>\n <TextField\n name=\"underShipmentNote\"\n label=\"Undershipment Notes\"\n multiline\n autoFocus\n minRows={3}\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={\n tempExceptions.underShipmentNote\n ? tempExceptions.underShipmentNote\n : \"\"\n }\n onChange={(evt) =>\n setNote(\"underShipmentNote\", evt.target.value)\n }\n helperText={`Undershipment Qty: ${tempExceptions.underShipmentQuantity}`}\n />\n </Grid>\n )}\n {tempExceptions.isRecalled && (\n <Grid item xs={12}>\n <TextField\n name=\"recallNote\"\n label=\"Recall Notes\"\n multiline\n autoFocus\n minRows={3}\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={\n tempExceptions.recallNote ? tempExceptions.recallNote : \"\"\n }\n onChange={(evt) => setNote(\"recallNote\", evt.target.value)}\n />\n </Grid>\n )}\n {tempExceptions.otherException && (\n <Grid item xs={12}>\n <TextField\n name=\"otherExceptionNote\"\n label=\"Other Notes\"\n multiline\n autoFocus\n minRows={3}\n error={otherExceptionNoteError}\n helperText={otherExceptionNoteError}\n margin=\"dense\"\n variant=\"outlined\"\n required\n fullWidth\n value={\n tempExceptions.otherExceptionNote\n ? tempExceptions.otherExceptionNote\n : \"\"\n }\n onChange={(evt) =>\n setNote(\"otherExceptionNote\", evt.target.value)\n }\n />\n </Grid>\n )}\n </Grid>\n </DialogContent>\n <DialogActions>\n <Box>\n <Box>\n <Button\n label=\"Cancel\"\n color=\"default\"\n onClick={() => handleCancel()}\n >\n <CancelIcon />\n </Button>\n <Button\n label=\"Submit\"\n onClick={() => handleSave()}\n color=\"primary\"\n />\n </Box>\n </Box>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default InventoryEditActions;\n","import React, { useEffect, useState } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getInboundShipment } from \"../../../graphql/inbound/custom-queries\";\n\nimport { Grid, InputAdornment, Typography } from \"@material-ui/core\";\n\nimport {\n ArrayField,\n Datagrid,\n Edit,\n FormDataConsumer,\n FormTab,\n FunctionField,\n Loading,\n minValue,\n number,\n NumberField,\n NumberInput,\n required,\n SelectInput,\n TabbedForm,\n TextField,\n TextInput,\n Toolbar,\n RadioButtonGroupInput,\n useEditController,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport {\n CustomFields,\n getCustomFieldsToSave,\n} from \"../../../components/common/CustomFields\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HistoryTab } from \"../../../components/common/HistoryTab\";\nimport { AreaZonePicker } from \"../../../components/common/LocationPicker\";\nimport { NotesTab } from \"../../../components/common/NotesTab\";\nimport { isAuthorized, logError } from \"../../../utils/appUtils\";\nimport {\n AclType,\n InventoryField,\n InventoryStatus,\n LotTypes,\n UnitWeightOptions,\n} from \"../../../utils/constants\";\nimport {\n isRailToTrack,\n isTrack,\n sortByLocation,\n} from \"../../../utils/locationUtils\";\nimport {\n getUnitName,\n isInventoryFieldVisible,\n isPieceDimensionsVisible,\n unitOptionRenderer,\n} from \"../../../utils/loadTypeUtils\";\n\nimport {\n exceptionRenderer,\n getBackPath,\n trimDecimal,\n} from \"../../../utils/utils\";\nimport { DialogSaveButton } from \"./DialogSaveButton\";\nimport { AuditStatusIcon } from \"./AuditStatusIcon\";\nimport { DeepDeleteButton } from \"./DeepDeleteButton\";\nimport { ValidateRequiredIcon } from \"./ValidateRequiredIcon\";\nimport { InventoryAside } from \"./InventoryAside\";\nimport { LinkProductDialog } from \"./LinkProductDialog\";\nimport { CreateInventoryItemButton } from \"./inventoryItems/CreateInventoryItemButton\";\nimport { OpenInventoryItemButton } from \"./inventoryItems/OpenInventoryItemButton\";\nimport { DeepRemoveButton } from \"./inventoryItems/DeepDeleteButton\";\nimport InventoryEditActions from \"./InventoryEditActions\";\nimport { getInfoBubble, showWeight } from \"./InventoryUitls\";\n\nconst validateRequired = required();\nconst validateQtyRequired = [required(), number(), minValue(0)];\nconst validatePieces = [number(), minValue(1)];\nconst validateDimensions = [number(), minValue(0)];\n\nconst validateQty = (values) => {\n const errors = {};\n\n if (values.quantityDelivered && values.quantityDelivered !== \"\") {\n const quantityShipped = values.quantityShipped || 0;\n const quantityDelivered = values.quantityDelivered || 0;\n const underShipmentQuantity = values.underShipmentQuantity || 0;\n const overShipmentQuantity = values.overShipmentQuantity || 0;\n const quantityReceived = trimDecimal(\n quantityDelivered + underShipmentQuantity - overShipmentQuantity\n );\n\n if (quantityShipped !== quantityReceived) {\n errors.quantityShipped = \"Qty Received mismatch\";\n errors.quantityDelivered = \"Qty Advised mismatch\";\n } else {\n errors.quantityShipped = false;\n errors.quantityDelivered = false;\n }\n }\n if (\n values.quantityMismatch &&\n values.status === InventoryStatus.STORED &&\n values.quantityOnHand !== values.quantityPhysical\n ) {\n errors.quantityOnHand = \"Should equal Qty Physical\";\n errors.quantityPhysical = \"Should equal Qty On Hand\";\n } else {\n errors.quantityOnHand = false;\n errors.quantityPhysical = false;\n }\n\n return errors;\n};\n\nconst validateNotes = (form, formData) => {\n const notesMaxIndex = formData.notes ? formData.notes.length - 1 : -1;\n\n debugger;\n const qtyShippedState = form.getFieldState(\"quantityShipped\");\n const qtyDeliveredState = form.getFieldState(\"quantityDelivered\");\n const qtyOnHandState = form.getFieldState(\"quantityOnHand\");\n const qtyPhysicalState = form.getFieldState(\"quantityPhysical\");\n\n const qtyShippedChanged = qtyShippedState?.dirty;\n const qtyDeliveredChanged = qtyDeliveredState?.dirty;\n const qtyOnHandChanged = qtyOnHandState?.dirty;\n const qtyPhysicalChanged = qtyPhysicalState?.dirty;\n\n if (\n (qtyShippedChanged ||\n qtyDeliveredChanged ||\n qtyOnHandChanged ||\n qtyPhysicalChanged) &&\n (notesMaxIndex < 0 ||\n (notesMaxIndex >= 0 &&\n (!formData.notes[notesMaxIndex] || formData.notes[notesMaxIndex].date)))\n ) {\n //Trigger Add a Note to document changes\n return true;\n }\n\n return false;\n};\n\nconst InventorySetupTab = ({\n backPath,\n record,\n productIsOpen,\n setProductIsOpen,\n exceptions,\n setExceptions,\n setQuantityAdvised,\n ...props\n}) => {\n const form = useForm();\n const yardCommodities = window.appUser.reloadYard.activeYardCommodities.items;\n const [inventoryItems, setInventoryItems] = useState({ items: [] });\n\n useEffect(() => {\n if (record?.inventoryItems) {\n let inventoryItemList = record.inventoryItems.items;\n inventoryItemList = inventoryItemList.filter(\n (itm) =>\n itm.status !== InventoryStatus.SHIPPED ||\n itm.status !== InventoryStatus.ARCHIVED\n );\n sortByLocation(inventoryItemList);\n\n inventoryItemList.forEach((inventoryItem) => {\n const shallowInventory = { ...record, inventoryItems: undefined };\n inventoryItem.inventory = shallowInventory;\n });\n\n setInventoryItems({ items: inventoryItemList });\n }\n }, [record]);\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"productId\",\n (fieldState) => {\n const { change, ...rest } = fieldState;\n },\n { dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"productCode\",\n (fieldState) => {\n const { change, ...rest } = fieldState;\n },\n { dirty: true, touched: true, valid: true, value: true }\n );\n\n form.registerField(\n \"hasException\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"overShipment\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"overShipmentQuantity\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"overShipmentNote\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"underShipment\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"underShipmentQuantity\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"underShipmentNote\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"isDamaged\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"isRecalled\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"recallNote\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"otherException\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"otherExceptionNote\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n useEffect(() => {\n debugger;\n form.change(\"hasException\", exceptions?.hasException);\n form.change(\"overShipment\", exceptions?.overShipment);\n form.change(\"overShipmentQuantity\", exceptions?.overShipmentQuantity);\n form.change(\"overShipmentNote\", exceptions?.overShipmentNote);\n form.change(\"underShipment\", exceptions?.underShipment);\n form.change(\"underShipmentQuantity\", exceptions?.underShipmentQuantity);\n form.change(\"underShipmentNote\", exceptions?.underShipmentNote);\n form.change(\"isDamaged\", exceptions?.isDamaged);\n form.change(\"isRecalled\", exceptions?.isRecalled);\n form.change(\"recallNote\", exceptions?.recallNote);\n form.change(\"otherException\", exceptions?.otherException);\n form.change(\"otherExceptionNote\", exceptions?.otherExceptionNote);\n }, [exceptions]);\n\n const handleProductLink = (product, rename) => {\n debugger;\n form.change(\"productId\", product?.id ? product.id : null);\n form.change(\n \"productCode\",\n product?.productCode ? product.productCode : null\n );\n if (rename && product?.name) {\n form.change(\"productName\", product.name);\n }\n if (product?.customFields) {\n const customFieldsToUpdate = getCustomFieldsToSave(\n product.customFields,\n record.account.inventoryCustomFields\n );\n form.change(\n \"customFields\",\n customFieldsToUpdate ? customFieldsToUpdate : null\n );\n }\n if (product?.defaultWeightUnits) {\n form.change(\"weightUnits\", product.defaultWeightUnits);\n if (!record.weight)\n form.change(\n \"weight\",\n product[product.defaultWeightUnits.toLowerCase()]\n );\n } else form.change(\"weightUnits\", record.account?.defaultWeightUnits);\n };\n\n const handleLocation = (area, zone) => {\n debugger;\n form.change(\"area\", area);\n\n if (zone) {\n form.change(\"zoneId\", zone.id);\n form.change(\"zone\", zone);\n } else {\n form.change(\"zoneId\", \"\");\n form.change(\"zone\", null);\n }\n };\n\n const canAssignLocations = (formData) => {\n return (\n formData.status !== InventoryStatus.STORED &&\n formData.status !== InventoryStatus.SHIPPED &&\n !isTrack(formData.area) &&\n isAuthorized(AclType.ASSIGN_LOCATION)\n );\n };\n\n const isOnHand = (formData) => {\n return (\n formData.status !== InventoryStatus.IN_TRANSIT &&\n formData.status !== InventoryStatus.ARRIVED\n );\n };\n\n const getQtyLablel = (formData) => {\n return isOnHand(formData) ? \"Qty. On Hand\" : \"Putaway Qty.\";\n };\n\n const renderUnits = () => getUnitName(record.inventoryUnits);\n\n const ListActionButtons = ({ record: inventoryItem, ...rest }) => {\n const [isDeleting, setIsDeleting] = useState(false);\n\n return (\n <div style={{ display: \"flex\", justifyContent: \"flex-end\" }}>\n <OpenInventoryItemButton\n {...props}\n form={form}\n record={inventoryItem}\n backPath={backPath}\n inventory={record}\n isDeleting={isDeleting}\n />\n  \n {(!isOnHand(record) || record.verificationRequired === \"true\") && (\n <DeepRemoveButton\n record={inventoryItem}\n inventory={record}\n exceptions={exceptions}\n setExceptions={setExceptions}\n inventoryItems={inventoryItems}\n setInventoryItems={setInventoryItems}\n isDeleting={isDeleting}\n setIsDeleting={setIsDeleting}\n />\n )}\n </div>\n );\n };\n\n const handleQuantityAdvisedChange = (event) => {\n setQuantityAdvised(+event.target.value || 0);\n };\n\n const getWeightHelperText = (formData) => {\n if (formData.weight && formData.quantityOnHand) {\n const formatter = new Intl.NumberFormat(\"en-US\");\n return `Net: ${formatter.format(\n trimDecimal(formData.weight * formData.quantityOnHand)\n )} ${formData.weightUnits}`;\n }\n return false;\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container direction=\"column\" spacing={0}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"productName\"\n label=\"Product Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n helperText={false}\n InputProps={{\n endAdornment: getInfoBubble(formData),\n }}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"lotNumber\"\n label=\"Lot Number\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n helperText={false}\n />\n </Grid>\n </Grid>\n {record.status !== InventoryStatus.STORED &&\n record.status !== InventoryStatus.SHIPPED && (\n <Grid container item direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <NumberInput\n source=\"quantityShipped\"\n label=\"Quantity Advised\"\n variant=\"outlined\"\n fullWidth\n disabled={\n formData.status === InventoryStatus.STORED ||\n formData.status === InventoryStatus.SHIPPED\n ? true\n : undefined\n }\n min=\"0\"\n onChange={handleQuantityAdvisedChange}\n // skip validation to allow saving with errors in some states\n validate={validateQtyRequired}\n error={validateQty(formData).quantityShipped}\n helperText={validateQty(formData).quantityShipped || false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {\" \"}\n {getUnitName(record.inventoryUnits)}{\" \"}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <NumberInput\n source=\"quantityDelivered\"\n label=\"Quantity Received\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n min=\"0\"\n // skip validation to allow saving with errors in some states\n error={validateQty(formData).quantityDelivered}\n helperText={\n validateQty(formData).quantityDelivered || false\n }\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {\" \"}\n <ValidateRequiredIcon\n record={formData}\n {...props}\n />{\" \"}\n {getUnitName(record.inventoryUnits)}{\" \"}\n </InputAdornment>\n ),\n style: { textTransform: \"uppercase\" },\n }}\n />\n </Grid>\n {isInventoryFieldVisible(\n InventoryField.PCS,\n record.reloadYardCommodity?.commodity\n ) && (\n <Grid item xs={12} md={6}>\n <NumberInput\n source=\"pcs\"\n label=\"Pieces / Unit\"\n variant=\"outlined\"\n fullWidth\n min=\"1\"\n placeholder={record.product?.pcs}\n InputLabelProps={{\n shrink:\n formData?.pcs != null || record?.product?.pcs != null, //not null or undefined\n }}\n validate={validatePieces}\n disabled={false}\n helperText={false}\n />\n </Grid>\n )}\n </Grid>\n )}\n {(record.status === InventoryStatus.STORED ||\n record.status === InventoryStatus.SHIPPED) && (\n <Grid container item direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <NumberInput\n source=\"quantityOnHand\"\n label=\"Quantity On Hand\"\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n validate={\n record.status === InventoryStatus.STORED\n ? validateQtyRequired\n : undefined\n }\n error={validateQty(formData).quantityOnHand}\n helperText={validateQty(formData).quantityOnHand}\n disabled={\n formData.status === InventoryStatus.STORED ||\n formData.status === InventoryStatus.SHIPPED\n }\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {\" \"}\n {getUnitName(record.inventoryUnits)}{\" \"}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n {record.quantityMismatch && (\n <Grid item xs={12} md={6}>\n <NumberInput\n source=\"quantityPhysical\"\n label=\"Quantity Physical\"\n variant=\"outlined\"\n fullWidth\n min=\"0\"\n error={validateQty(formData).quantityPhysical}\n helperText={validateQty(formData).quantityPhysical}\n disabled={\n formData.status !== InventoryStatus.STORED ||\n formData.status === InventoryStatus.SHIPPED\n }\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {\" \"}\n <AuditStatusIcon record={formData} {...props} />{\" \"}\n {getUnitName(record.inventoryUnits)}{\" \"}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n )}\n {isInventoryFieldVisible(\n InventoryField.PCS,\n record.reloadYardCommodity?.commodity\n ) && (\n <Grid item xs={12} md={6}>\n <NumberInput\n source=\"pcs\"\n label=\"Pieces / Unit\"\n variant=\"outlined\"\n fullWidth\n min=\"1\"\n placeholder={record.product?.pcs}\n InputLabelProps={{\n shrink:\n formData?.pcs != null || record?.product?.pcs != null,\n }}\n validate={validatePieces}\n disabled={formData.status === InventoryStatus.SHIPPED}\n helperText={false}\n />\n </Grid>\n )}\n </Grid>\n )}\n {(record.status === InventoryStatus.STORED ||\n record.status === InventoryStatus.SHIPPED) && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <NumberInput\n source=\"quantityCommitted\"\n label=\"Quantity Committed\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n helperText={false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {\" \"}\n {getUnitName(record.inventoryUnits)}{\" \"}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <NumberInput\n source=\"quantityAvailable\"\n label=\"Quantity Available\"\n variant=\"outlined\"\n fullWidth\n // defaultValue={formData.quantityOnHand - formData.quantityCommitted}\n format={() =>\n trimDecimal(\n formData.quantityOnHand - formData.quantityCommitted\n )\n }\n disabled={true}\n helperText={false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {\" \"}\n {getUnitName(record.inventoryUnits)}{\" \"}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n </Grid>\n )}\n {showWeight(record.account, record) && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <NumberInput\n source=\"weight\"\n label={`Weight: ${formData.weightUnits} / ${formData.inventoryUnits}`}\n variant=\"outlined\"\n fullWidth\n disabled={\n formData.status === InventoryStatus.SHIPPED ? true : false\n }\n validate={\n formData?.weightUnits ? validateRequired : undefined\n }\n helperText={getWeightHelperText(formData)}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"weightUnits\"\n label=\"Weight UOM\"\n variant=\"outlined\"\n fullWidth\n allowEmpty\n choices={UnitWeightOptions}\n optionText={unitOptionRenderer}\n disabled={\n formData.status === InventoryStatus.SHIPPED ? true : false\n }\n helperText={false}\n />\n </Grid>\n </Grid>\n )}\n {productIsOpen && (\n <Grid container spacing={0}>\n <Grid item xs={false}>\n <LinkProductDialog\n {...props}\n record={formData}\n isOpen={productIsOpen}\n setIsOpen={setProductIsOpen}\n handleAddSelected={handleProductLink}\n />\n </Grid>\n </Grid>\n )}\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <RadioButtonGroupInput\n source=\"lotType\"\n label=\"Lot Type\"\n row\n fullWidth\n disabled={true}\n helperText={false}\n choices={LotTypes}\n style={{ marginTop: 0 }}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"reloadYardCommodityId\"\n label=\"Load Type\"\n variant=\"outlined\"\n fullWidth\n disabled={record.productId || inventoryItems?.items.length > 0}\n choices={yardCommodities}\n optionText=\"commodity.name\"\n optionValue=\"id\"\n validate={validateRequired}\n helperText={false}\n />\n </Grid>\n </Grid>\n {isPieceDimensionsVisible(record.reloadYardCommodity?.commodity) && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} style={{ paddingBottom: 0 }}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n PIECE DIMENSIONS\n </Typography>\n </Grid>\n {isInventoryFieldVisible(\n InventoryField.HEIGHT,\n record.reloadYardCommodity?.commodity\n ) && (\n <Grid item xs={12} md={4}>\n <NumberInput\n source=\"pcsHeight\"\n label=\"Piece Height\"\n variant=\"outlined\"\n fullWidth\n placeholder={record?.product?.pcsHeight}\n InputLabelProps={{\n shrink: record?.product?.pcsHeight != null, //not null or undefined\n }}\n disabled={\n formData.status === InventoryStatus.SHIPPED ? true : false\n }\n validate={validateDimensions}\n helperText={false}\n />\n </Grid>\n )}\n {isInventoryFieldVisible(\n InventoryField.WIDTH,\n record.reloadYardCommodity?.commodity\n ) && (\n <Grid item xs={12} md={4}>\n <NumberInput\n source=\"pcsWidth\"\n label=\"Pice Width\"\n variant=\"outlined\"\n fullWidth\n placeholder={record.product?.pcsWidth}\n InputLabelProps={{\n shrink: record?.product?.pcsWidth != null, //not null or undefined\n }}\n disabled={\n formData.status === InventoryStatus.SHIPPED ? true : false\n }\n validate={validateDimensions}\n helperText={false}\n />\n </Grid>\n )}\n {isInventoryFieldVisible(\n InventoryField.LENGTH,\n record.reloadYardCommodity?.commodity\n ) && (\n <Grid item xs={12} md={4}>\n <NumberInput\n source=\"pcsLength\"\n label=\"Length\"\n variant=\"outlined\"\n fullWidth\n placeholder={record.product?.pcsLength}\n InputLabelProps={{\n shrink: record?.product?.pcsLength != null, //not null or undefined\n }}\n disabled={\n formData.status === InventoryStatus.SHIPPED ? true : false\n }\n validate={validateDimensions}\n helperText={false}\n />\n </Grid>\n )}\n </Grid>\n )}\n <Grid container direction=\"row\" spacing={1}>\n <CustomFields\n {...props}\n recordFields={record.customFields}\n accountFields={record.account.inventoryCustomFields}\n width={4}\n disabled={false}\n />\n <Grid item container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Locations:\n </Typography>\n <br />\n </Grid>\n {inventoryItems?.items?.length === 0 && (\n <Grid item xs={12}>\n <AreaZonePicker\n areaLabel=\"Default Area\"\n zoneLabel=\"Default Zone\"\n inventory={formData}\n handleLocation={handleLocation}\n disabled={\n formData.status === InventoryStatus.STORED ||\n formData.status === InventoryStatus.AGGREGATED ||\n formData.status === InventoryStatus.SHIPPED ||\n inventoryItems?.items?.length > 0\n }\n />\n </Grid>\n )}\n <Grid item xs={12}>\n <ArrayField source=\"items\" record={inventoryItems}>\n <Datagrid>\n <FunctionField\n source=\"hasException\"\n label=\" \"\n render={exceptionRenderer}\n />\n <TextField source=\"locationFullName\" label=\"Location\" />\n {isRailToTrack(formData.areaId, record.inboundShipment) && (\n <TextField\n source=\"inventory.railCarNumber\"\n label=\"Car Number\"\n />\n )}\n {/* { TODO : check if needed\n isTruckToRail(formData.areaId, record.inboundShipment) &&\n <TextField source=\"outboundRailCarNumber\" label=\"Car Number\" />\n } */}\n <NumberField\n source=\"quantityOnHand\"\n label={getQtyLablel(formData)}\n />\n {isOnHand(formData) && (\n <NumberField\n source=\"quantityCommitted\"\n label=\"Qty. Committed\"\n />\n )}\n <FunctionField label=\"UOM\" render={renderUnits} />\n {formData.status !== InventoryStatus.IN_TRANSIT && (\n <TextField source=\"unloadedBy\" label=\"Unloaded By\" />\n )}\n {isAuthorized(AclType.ASSIGN_LOCATION) && (\n <ListActionButtons />\n )}\n </Datagrid>\n </ArrayField>\n </Grid>\n <Grid item xs={12}>\n {canAssignLocations(formData) && (\n <CreateInventoryItemButton\n {...props}\n backPath={backPath}\n form={form}\n inventory={record}\n />\n )}\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst EditToolbar = (props) => {\n const [isSaving, setIsSaving] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n\n return (\n <Toolbar style={{ justifyContent: \"space-between\" }}>\n <DialogSaveButton\n {...props}\n validateQty={validateQty}\n validateNotes={validateNotes}\n isSaving={isSaving}\n setIsSaving={setIsSaving}\n isDeleting={isDeleting}\n />\n <DeepDeleteButton\n {...props}\n isSaving={isSaving}\n isDeleting={isDeleting}\n setIsDeleting={setIsDeleting}\n />\n </Toolbar>\n );\n};\n\nconst getInboundData = async (record, setInbound, notify) => {\n // inbound.inventories.items is required for updateInboundQuantity\n try {\n const response = await API.graphql(\n graphqlOperation(getInboundShipment, { id: record.inboundShipmentId })\n );\n setInbound(response.data.getInboundShipment);\n } catch (err) {\n logError(\"InventoryEdit:getInboundData\", err, notify);\n }\n};\n\nexport const InventoryEdit = (props) => {\n const notify = useNotify();\n const { record } = useEditController(props);\n const [reconcileAudit] = useState(props.location?.state?.audit);\n const [inbound, setInbound] = useState(props.location?.state?.inboundRecord);\n const [productIsOpen, setProductIsOpen] = useState(false);\n // exceptions set in ExceptionDialog & inventoryItemDeepRemove\n const [exceptions, setExceptions] = useState({});\n const [quantityAdvised, setQuantityAdvised] = useState(\n record?.quantityShipped\n );\n const backPath = getBackPath(props);\n\n useEffect(() => {\n debugger;\n if (record && !inbound) getInboundData(record, setInbound, notify);\n\n if (record) {\n setQuantityAdvised(record.quantityShipped);\n setExceptions({\n hasException: record.hasException,\n overShipment: record.overShipment,\n overShipmentQuantity: record.overShipmentQuantity,\n overShipmentNote: record.overShipmentNote,\n underShipment: record.underShipment,\n underShipmentQuantity: record.underShipmentQuantity,\n underShipmentNote: record.underShipmentNote,\n isDamaged: record.isDamaged,\n isRecalled: record.isRecalled,\n recallNote: record.recallNote,\n otherException: record.otherException,\n otherExceptionNote: record.otherExceptionNote,\n });\n }\n }, [record]);\n\n if (!record?.account || !inbound) return <Loading />;\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Inventory\" />}\n mutationMode=\"pessimistic\"\n aside={\n <InventoryAside\n {...props}\n backPath={backPath}\n exceptions={exceptions}\n />\n }\n actions={\n <InventoryEditActions\n {...props}\n backPath={backPath}\n setProductIsOpen={setProductIsOpen}\n exceptions={exceptions}\n setExceptions={setExceptions}\n quantityAdvised={quantityAdvised}\n />\n }\n >\n <TabbedForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={\n <EditToolbar\n {...props}\n backPath={backPath}\n record={record}\n reconcileAudit={reconcileAudit}\n inbound={inbound}\n />\n }\n >\n <FormTab path=\"\" label=\"Inventory Setup\">\n <InventorySetupTab\n {...props}\n backPath={backPath}\n productIsOpen={productIsOpen}\n setProductIsOpen={setProductIsOpen}\n exceptions={exceptions}\n setExceptions={setExceptions}\n setQuantityAdvised={setQuantityAdvised}\n />\n </FormTab>\n <FormTab path=\"notes\" label=\"Notes\">\n <NotesTab />\n </FormTab>\n <FormTab path=\"historyLogs\" label=\"History Log\">\n <HistoryTab />\n </FormTab>\n </TabbedForm>\n </Edit>\n );\n};\n","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { Grid, Typography } from \"@material-ui/core\";\n\nimport {\n ArrayField,\n Datagrid,\n FunctionField,\n Labeled,\n Loading,\n NumberField,\n SelectField,\n Show,\n Tab,\n TabbedShowLayout,\n TextField,\n TopToolbar,\n useShowController,\n} from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { CustomFieldsMobile } from \"../../../components/common/CustomFields\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HistoryTab } from \"../../../components/common/HistoryTab\";\nimport { NotesTabShow } from \"../../../components/common/NotesTab\";\nimport { ProductLinkIcon } from \"../../../components/common/ProductLinkIcon\";\nimport { ShowButton } from \"../../../components/common/ShowButton\";\nimport { InventoryStatus, LotTypes } from \"../../../utils/constants\";\nimport { getAreaName, getZoneName } from \"../../../utils/locationUtils\";\nimport { getUnitName } from \"../../../utils/loadTypeUtils\";\nimport {\n deepRedirect,\n exceptionRenderer,\n getBackPath,\n quantityRenderer,\n} from \"../../../utils/utils\";\nimport { AuditStatusIcon } from \"./AuditStatusIcon\";\nimport { ValidateRequiredIcon } from \"./ValidateRequiredIcon\";\nimport { InventoryAside } from \"./InventoryAside\";\nimport { showWeight } from \"./InventoryUitls\";\n\nconst InventorySetupTab = (props) => {\n const { history, backPath, record } = props;\n const yardCommodities =\n window.appUser.reloadYard.activeYardCommodities.items || [];\n const inventoryItems = {\n items:\n record?.inventoryItems?.items?.sort((a, b) =>\n a.locationFullName.localeCompare(b.locationFullName)\n ) || [],\n };\n\n const isOnHand = (formData) => {\n return (\n formData.status !== InventoryStatus.IN_TRANSIT &&\n formData.status !== InventoryStatus.ARRIVED\n );\n };\n\n const getQtyLablel = (formData) => {\n return isOnHand(formData) ? \"Qty. On Hand\" : \"Putaway Qty.\";\n };\n\n const renderUnits = () => getUnitName(record.inventoryUnits);\n\n const openInventoryItem = (jsonRecord) => {\n const jsonObject = JSON.parse(jsonRecord);\n const toPath = `/inventoryItems/${jsonObject.id}/show`;\n deepRedirect(history, toPath, props.location.pathname, backPath, {\n inventory: record,\n });\n };\n\n return (\n <Grid container direction=\"column\" spacing={0}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Product Name\">\n <TextField source=\"productName\" />\n </Labeled>\n <ProductLinkIcon {...props} />\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Lot Number\">\n <TextField source=\"lotNumber\" />\n </Labeled>\n </Grid>\n </Grid>\n\n {record.status !== InventoryStatus.STORED &&\n record.status !== InventoryStatus.SHIPPED && (\n <Grid container item direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Quantity Advised\">\n <NumberField source=\"quantityShipped\" />\n </Labeled>\n <Typography>{getUnitName(record.inventoryUnits)}</Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Quantity Received\">\n <NumberField source=\"quantityDelivered\" />\n </Labeled>\n <ValidateRequiredIcon {...props} />\n </Grid>\n </Grid>\n )}\n\n {(record.status === InventoryStatus.STORED ||\n record.status === InventoryStatus.SHIPPED) && (\n <Grid container item direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Quantity On Hand\">\n <NumberField source=\"quantityOnHand\" />\n </Labeled>\n <Typography>{getUnitName(record.inventoryUnits)}</Typography>\n </Grid>\n <Grid item xs={12} md={6}>\n {record.quantityMismatch ? (\n <>\n <Labeled label=\"Quantity Physical\">\n <NumberField source=\"quantityPhysical\" />\n </Labeled>\n <AuditStatusIcon {...props} />\n </>\n ) : null}\n </Grid>\n </Grid>\n )}\n {(record.status === InventoryStatus.STORED ||\n record.status === InventoryStatus.SHIPPED) && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Quantity Committed\">\n <NumberField source=\"quantityCommitted\" />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Quantity Available\">\n <NumberField source=\"quantityAvailable\" />\n </Labeled>\n </Grid>\n </Grid>\n )}\n {showWeight(record?.account, record) && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Weight\">\n <FunctionField\n render={(record) =>\n quantityRenderer(\n record.weight,\n `${record.weightUnits}/${record.inventoryUnits}`\n )\n }\n />\n </Labeled>\n </Grid>\n </Grid>\n )}\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Lot Type\">\n <SelectField source=\"lotType\" choices={LotTypes} />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Load Type\">\n <SelectField\n source=\"reloadYardCommodityId\"\n choices={yardCommodities}\n optionText=\"commodity.name\"\n />\n </Labeled>\n </Grid>\n <CustomFieldsMobile\n recordFields={record.customFields}\n accountFields={record.account?.inventoryCustomFields}\n width={6}\n />\n </Grid>\n\n <Grid item container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Locations:\n </Typography>\n <br />\n </Grid>\n {inventoryItems?.items?.length === 0 && (\n <>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Default Area\">\n <FunctionField\n render={(record) => getAreaName(record.areaId)}\n />\n </Labeled>\n </Grid>\n <Grid item xs={12} md={6}>\n <Labeled label=\"Default Zone\">\n <FunctionField\n render={(record) => getZoneName(record.areaId, record.zoneId)}\n />\n </Labeled>\n </Grid>\n </>\n )}\n {inventoryItems?.items?.length > 0 && (\n <Grid item xs={12}>\n <ArrayField\n source=\"items\"\n record={inventoryItems}\n basePath=\"/inventoryItems\"\n >\n <Datagrid rowClick={openInventoryItem}>\n <FunctionField\n source=\"hasException\"\n label=\" \"\n render={exceptionRenderer}\n />\n <TextField source=\"locationFullName\" label=\"Location\" />\n <NumberField\n source=\"quantityOnHand\"\n label={getQtyLablel(record)}\n />\n {isOnHand(record) && (\n <NumberField\n source=\"quantityCommitted\"\n label=\"Qty. Committed\"\n />\n )}\n <FunctionField label=\"UOM\" render={renderUnits} />\n {record.status !== InventoryStatus.IN_TRANSIT && (\n <TextField source=\"unloadedBy\" label=\"Unloaded By\" />\n )}\n <ShowButton {...props} state={{ inventory: record }} />\n </Datagrid>\n </ArrayField>\n </Grid>\n )}\n </Grid>\n </Grid>\n );\n};\n\nconst ShowActions = (props) => (\n <TopToolbar>\n <BackButton {...props} />\n </TopToolbar>\n);\n\nexport const InventoryShow = (props) => {\n const { record } = useShowController(props);\n const history = useHistory();\n\n const backPath = getBackPath(props);\n const inbound =\n props.location?.state?.inboundRecord || record?.inboundShipment;\n\n const exceptions = !record\n ? {}\n : {\n hasException: record.hasException,\n overShipment: record.overShipment,\n overShipmentQuantity: record.overShipmentQuantity,\n overShipmentNote: record.overShipmentNote,\n underShipment: record.underShipment,\n underShipmentQuantity: record.underShipmentQuantity,\n underShipmentNote: record.underShipmentNote,\n isDamaged: record.isDamaged,\n isRecalled: record.isRecalled,\n recallNote: record.recallNote,\n otherException: record.otherException,\n otherExceptionNote: record.otherExceptionNote,\n };\n\n if (!record?.account || !inbound) return <Loading />;\n return (\n <Show\n {...props}\n title={<ForceTitle title=\"View Inventory\" />}\n actions={<ShowActions {...props} backPath={backPath} />}\n aside={\n <InventoryAside\n {...props}\n history={history}\n backPath={backPath}\n exceptions={exceptions}\n />\n }\n >\n <TabbedShowLayout>\n <Tab label=\"Inventory Setup\">\n <InventorySetupTab {...props} history={history} backPath={backPath} />\n </Tab>\n <Tab label=\"Notes\">\n <NotesTabShow />\n </Tab>\n <Tab label=\"History Log\">\n <HistoryTab />\n </Tab>\n </TabbedShowLayout>\n </Show>\n );\n};\n","import React from \"react\";\n\nimport { Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n AddIcon,\n InventoryMapIcon,\n RemoveIcon,\n} from \"../../../../components/common\";\n\nconst useStyles = makeStyles((theme) => ({\n icon: {\n verticalAlign: \"middle\",\n display: \"inline-flex\",\n },\n}));\n\nexport const InventoryItemHelp = ({ ...props }) => {\n const classes = useStyles();\n var { location } = props;\n var tabIdx = /[^/]*$/.exec(location.pathname)[0];\n var tab = tabIdx.length === 1 ? tabIdx : \"0\";\n\n return (() => {\n switch (tab) {\n case \"0\":\n return (\n <>\n <Typography variant=\"subtitle1\">\n <strong>Inventory Setup</strong>\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Qty. Advised & Received:</strong> Intital inventory\n stock. Both should be equal if no issues with Inbound\n Shipment. Displayed in a side bar once the inventory has been\n Stored.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. On Hand:</strong> Stock quantity on hand\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Physical:</strong> Stock quantity as counted\n during an Inventory Audit. Should equal Qty. On Hand if\n physical count is accurate. This field is hidden unless there\n is a count mismatch.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Available:</strong> Qty On Hand minus Qty.\n Committed\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Qty. Committed:</strong> Stock quantity Reserved for\n \"Pending\" Outbound Shipments\n </Typography>\n </li>\n <li>\n <Typography>\n <InventoryMapIcon className={classes.icon} />\n <strong> INVENTORY MAP: </strong>\n Opens Inventory Map dialog. Allows to inspect inventory\n distribution in the yard for a given account and to select a\n new location.\n </Typography>\n </li>\n </ul>\n </>\n );\n case \"1\":\n return (\n <>\n <Typography variant=\"subtitle1\">\n <strong>Notes</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n Use the Notes Tab to manually document key events and changes made\n to the Shipment record.\n </Typography>\n <ul>\n <li>\n <Typography>\n <AddIcon className={classes.icon} />\n <strong> ADD: </strong>Add new Note Line Item.\n </Typography>\n </li>\n <li>\n <Typography>\n <RemoveIcon className={classes.icon} />\n <strong> REMOVE: </strong>\n Remove selected Note Line Item - this info will be permanently\n lost.\n </Typography>\n </li>\n </ul>\n </>\n );\n default:\n return (\n <>\n <Typography variant=\"subtitle1\">\n <strong>History</strong>\n </Typography>\n <Typography variant=\"subtitle1\">\n The History Tab provides an automated, chronological Audit Trail\n of key events and record changes.\n </Typography>\n </>\n );\n }\n })();\n};\n","import React, { useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport {\n Box,\n FormHelperText,\n Grid,\n InputAdornment,\n TextField,\n Tooltip,\n Typography,\n} from \"@material-ui/core\";\nimport { orange } from \"@material-ui/core/colors\";\n\nimport {\n Button,\n Confirm,\n Create,\n FormDataConsumer,\n maxValue,\n minValue,\n number,\n NumberInput,\n required,\n SaveButton,\n SimpleForm,\n TextInput,\n Toolbar,\n TopToolbar,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport {\n AddIcon,\n ExceptionIcon,\n RemoveIcon,\n} from \"../../../../components/common\";\nimport { BackButton } from \"../../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../../components/common/HelpButton\";\nimport { LocationPicker } from \"../../../../components/common/LocationPicker\";\nimport { logError } from \"../../../../utils/appUtils\";\nimport {\n LocationLoadType,\n LocationType,\n NoteType,\n Unit,\n} from \"../../../../utils/constants\";\nimport {\n isBulkLocationAvailable,\n isFloorLoaded,\n isLocationAvailable,\n setInventoryAisleList,\n} from \"../../../../utils/locationUtils\";\nimport { getUnitName, isBulkShipment } from \"../../../../utils/loadTypeUtils\";\nimport {\n deepRedirect,\n getBackPath,\n trimDecimal,\n} from \"../../../../utils/utils\";\nimport { InventoryItemHelp } from \"./InventoryItemHelp\";\nimport {\n allocateCapacity,\n ExceptionDialog,\n getInventoryItem,\n getInventoryItemStatus,\n handleAreaZoneLocation,\n isAllocatable,\n promiseCreateInventoryItem,\n promiseSetCapacityAllocated,\n updateIventory,\n} from \"./InventoryItemUtils\";\n\nconst validateQtyRequired = (maxQty, maxCapacity) => [\n required(),\n number(),\n minValue(0.00001, \"Must be greater than 0\"),\n maxValue(maxCapacity, \"Exceeds available capacity.\"),\n maxValue(maxQty, \"Exceeds Qty. Available\"),\n];\n\n// Form-level validation\nconst validateForm = (values, inventory) => {\n const errors = {};\n if (values.location?.type === LocationType.BULK) {\n const location = values.location;\n\n if (\n inventory &&\n !isBulkLocationAvailable(location, inventory, values.putawayQuantity)\n ) {\n errors.location = \"Location is un-available for storage.\";\n }\n }\n return errors;\n};\n\nconst CreateActions = (props) => {\n const [isExceptionDialogOpen, setIsExceptionDialogOpen] = useState();\n\n return (\n <TopToolbar>\n <HelpButton>\n <InventoryItemHelp {...props} />\n </HelpButton>\n <Button\n label=\"Exception\"\n color=\"primary\"\n onClick={() => setIsExceptionDialogOpen(true)}\n >\n <ExceptionIcon />\n </Button>\n <BackButton {...props} />\n <ExceptionDialog\n {...props}\n isExceptionDialogOpen={isExceptionDialogOpen}\n setIsExceptionDialogOpen={setIsExceptionDialogOpen}\n />\n </TopToolbar>\n );\n};\n\nconst CreateToolbar = ({\n inventory,\n putawayQuantity,\n maxPutawayQty,\n locationInventoryItemMap,\n selectedLocation,\n locationType,\n exceptions,\n backPath,\n notify,\n ...props\n}) => {\n const form = useForm();\n const history = useHistory();\n const [isSaving, setIsSaving] = useState(false);\n const [open, setOpen] = useState(false);\n const [message, setMessage] = useState(\"\");\n\n const handleValidateSave = () => {\n const formState = form.getState();\n const isValid = !formState.invalid; // Form-level validation status. Submit to force field-level form validation.\n let messages = [];\n debugger;\n\n if (isValid) {\n if (exceptions.overShipment && putawayQuantity <= maxPutawayQty) {\n messages.push(\"Overshipment Exception will be cleared.\");\n } else if (!exceptions.overShipment && putawayQuantity > maxPutawayQty) {\n messages.push(\n \"Putaway Qty. exceeds Qty. Available. Apply Overshipment Exception to confirm and Save.\"\n );\n }\n if (inventory.underShipment && putawayQuantity >= maxPutawayQty) {\n messages.push(\n \"Adding new Inventory Items will clear the Inventory Undershipment Exception.\"\n );\n }\n\n if (messages.length) {\n messages.push(\"Proceed?\");\n const messageFragment = (\n <>\n {messages.map((msg, index) => (\n <React.Fragment key={index}>\n {msg} <br />\n </React.Fragment>\n ))}\n </>\n );\n setMessage(messageFragment);\n setOpen(true);\n } else handleSave();\n } else handleSave();\n };\n\n const handleDialogClose = () => setOpen(false);\n\n const handleDialogCconfirm = () => {\n if (putawayQuantity > maxPutawayQty && !exceptions.overShipment)\n handleDialogClose();\n else handleSave();\n };\n\n const handleSave = () => {\n debugger;\n setOpen(false);\n props.handleSubmit();\n };\n\n const transform = async (data) => {\n setIsSaving(true);\n data = { ...data };\n debugger;\n\n data.hasException = data.hasException ? data.hasException : false;\n data.isDamaged = data.hasException ? data.isDamaged : false;\n\n if (\n locationType === LocationType.STRUCTURED &&\n inventory.inventoryUnits === Unit.UNIT\n ) {\n // if STRUCTURED && UNIT, override data with first instance, spin off more in onSuccess\n for (let array of Object.values(locationInventoryItemMap)) {\n if (array.length > 0) {\n data = getInventoryItem(\n data,\n inventory,\n array[0].location,\n putawayQuantity,\n exceptions\n );\n break;\n }\n }\n } else {\n // else if UNSTRUCTURED || STRUCTURED & OTHER || BULK, create single instance from data.\n data = getInventoryItem(\n data,\n inventory,\n data.location,\n putawayQuantity,\n exceptions\n );\n }\n\n delete data.aisle;\n delete data.area;\n delete data.inventory;\n delete data.location;\n delete data.outboundShipment;\n delete data.putawayQuantity;\n delete data.zone;\n\n return data;\n };\n\n const onSuccess = async ({ data }) => {\n try {\n debugger;\n data.putawayQuantity = putawayQuantity;\n\n let promiseList = [];\n let inventoryItemsArray = [];\n\n if (locationType === LocationType.STRUCTURED) {\n inventoryItemsArray = Object.values(locationInventoryItemMap).flat();\n\n // if inventoryUnits === UNIT, spin off STRUCTURED Inventory Items for each location, except the first one\n if (inventoryItemsArray.length > 1) {\n if (inventory.inventoryUnits === Unit.UNIT) {\n promiseList = inventoryItemsArray\n .slice(1)\n .map((inventoryItem) =>\n promiseCreateInventoryItem(inventoryItem)\n );\n } // else only 1 Inventory Item created in transform\n }\n\n // update location capacityAllocated for all Inventory Items.\n if (inventoryItemsArray.length > 0) {\n inventoryItemsArray.forEach((inventoryItem) => {\n if (!inventoryItem.location.locationLoad?.other.selected) {\n // if STRUCTURED & not OTHER, then update\n promiseList.push(\n promiseSetCapacityAllocated(\n inventoryItem.location,\n inventoryItem.location.capacityAllocated\n )\n );\n }\n });\n }\n } else {\n // if inventoryUnits === UNIT, spin off UNSTRUCTURED Inventory Items, all in the same aisle\n if (inventory.inventoryUnits === Unit.UNIT) {\n inventoryItemsArray = Array.from({ length: putawayQuantity }, () =>\n getInventoryItem(data, inventory, data.location, 1, exceptions)\n );\n if (inventoryItemsArray.length > 1) {\n promiseList = inventoryItemsArray\n .slice(1)\n .map((inventoryItem) =>\n promiseCreateInventoryItem(inventoryItem)\n );\n }\n } else {\n // else only 1 UNSTRUCTURED || BULK InventoryItem created in transform\n inventoryItemsArray = [data];\n\n if (data.location.type === LocationType.BULK) {\n allocateCapacity(inventory, data);\n promiseList.push(\n promiseSetCapacityAllocated(\n data.location,\n data.location.capacityAllocated\n )\n );\n }\n }\n }\n\n const inventoryToUpdate = { ...inventory };\n if (inventory.inventoryItems?.items) {\n inventoryToUpdate.inventoryItems = [\n ...inventory.inventoryItems.items,\n ...inventoryItemsArray,\n ];\n } else {\n inventoryToUpdate.inventoryItems = inventoryItemsArray;\n }\n\n debugger;\n // check inventory status since we're assigning status to a new Inventory Item\n if (!isAllocatable(inventory)) {\n inventoryToUpdate.quantityDelivered =\n inventoryToUpdate.inventoryItems.reduce((total, item) => {\n return total + item.quantityOnHand;\n }, 0);\n }\n\n setInventoryAisleList(inventoryToUpdate);\n\n inventoryToUpdate.history = [\n ...inventoryToUpdate.history,\n {\n type: NoteType.INVENTORY,\n date: data.createdAt,\n by: window.appUser?.fullName,\n text: `Allocated total of ${putawayQuantity} ${getUnitName(\n inventoryToUpdate.inventoryUnits\n )}`,\n },\n ];\n\n // handle exceptions\n inventoryToUpdate.overShipment = exceptions.overShipmentQuantity > 0;\n inventoryToUpdate.overShipmentQuantity = exceptions.overShipmentQuantity;\n inventoryToUpdate.overShipmentNote = exceptions.overShipmentNote;\n\n inventoryToUpdate.history = [\n ...inventoryToUpdate.history,\n {\n type: NoteType.INVENTORY,\n date: data.createdAt,\n by: window.appUser?.fullName,\n text: `Overshipment of ${\n exceptions.overShipmentQuantity\n } ${getUnitName(inventoryToUpdate.inventoryUnits)}`,\n },\n ];\n\n if (inventory.underShipment && putawayQuantity >= maxPutawayQty) {\n inventoryToUpdate.underShipment = false;\n inventoryToUpdate.underShipmentQuantity = 0;\n inventoryToUpdate.underShipmentNote = \"\";\n }\n\n if (!inventory.isDamaged && exceptions.isDamaged)\n inventoryToUpdate.isDamaged = true;\n inventoryToUpdate.hasException =\n inventoryToUpdate.overShipment ||\n inventoryToUpdate.underShipment ||\n inventoryToUpdate.isDamaged ||\n inventory.isRecalled ||\n inventory.otherException;\n\n promiseList.push(updateIventory(inventoryToUpdate));\n\n await Promise.all(promiseList);\n\n notify(\"Inventory Item created successfully\");\n deepRedirect(history, backPath);\n } catch (error) {\n logError(\"inventoryItems:InventoryItemCreate:onSuccess\", error, notify);\n } finally {\n setIsSaving(false);\n }\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\"inventoryItems:InventoryItemCreate:onFailure\", error, notify);\n };\n\n const savingProps = { ...props, saving: isSaving };\n return (\n <Toolbar {...savingProps}>\n <SaveButton\n label={\n locationType === LocationType.STRUCTURED &&\n inventory.inventoryUnits === Unit.UNIT\n ? \"Save All\"\n : \"Save\"\n }\n submitOnEnter={false}\n undoable={false}\n disabled={!putawayQuantity || !selectedLocation}\n saving={isSaving}\n handleSubmitWithRedirect={handleValidateSave}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <Confirm\n isOpen={open}\n loading={isSaving}\n title=\"Save Confirmation\"\n content={message}\n onConfirm={handleDialogCconfirm}\n onClose={handleDialogClose}\n />\n </Toolbar>\n );\n};\n\nexport const InventoryItemCreate = (props) => {\n const notify = useNotify();\n const [inventory] = useState(props.history?.location?.state?.inventory);\n const [locationType, setLocationType] = useState(LocationType.UNSTRUCTURED);\n const [putawayQuantity, setPutawayQuantity] = useState(0);\n const [selectedLocation, setSelectedLocation] = useState();\n const [locationInventoryItemMap, setLocationInventoryItemMap] = useState({});\n const [exceptions, setExceptions] = useState({\n overShipment: inventory.overShipment,\n overShipmentQuantity: inventory.overShipmentQuantity,\n overShipmentNote: inventory.overShipmentNote,\n });\n const backPath = getBackPath(props);\n debugger;\n const initialValues = {\n groups: inventory.groups,\n status: getInventoryItemStatus(inventory),\n areaId: inventory.areaId,\n area: inventory.area,\n zoneId: inventory.zoneId,\n zone: inventory.zone,\n inventoryId: inventory.id,\n inventory: inventory,\n reloadYardId: inventory.reloadYardId,\n inboundShipmentId: inventory.inboundShipmentId,\n quantityCommitted: 0,\n };\n\n const initQtyAllocated = inventory.inventoryItems?.items.reduce(\n (total, item) => {\n return total + item.quantityOnHand;\n },\n 0\n );\n const maxPutawayQty =\n initQtyAllocated <= inventory.quantityShipped\n ? trimDecimal(inventory.quantityShipped - initQtyAllocated)\n : 0;\n\n const updateExceptions = (\n newExceptions,\n newPutawayQuantity = putawayQuantity\n ) => {\n // Calculate the new over shipment quantities based on the putawayQuantity\n if (newPutawayQuantity > maxPutawayQty) {\n newExceptions.overShipmentQuantity = trimDecimal(\n (inventory.overShipmentQuantity || 0) +\n newPutawayQuantity -\n maxPutawayQty\n );\n } else {\n newExceptions.overShipmentQuantity = inventory.overShipmentQuantity || 0;\n }\n\n setExceptions(newExceptions);\n };\n\n return (\n <Create\n {...props}\n title={\n <ForceTitle\n title={\n isAllocatable(inventory)\n ? \"Allocate Location\"\n : \"Create Inventory Item\"\n }\n />\n }\n actions={\n <CreateActions\n {...props}\n backPath={backPath}\n inventory={inventory}\n exceptions={exceptions}\n setExceptions={updateExceptions}\n />\n }\n >\n <SimpleForm\n submitOnEnter={false}\n initialValues={initialValues}\n validate={(values) => validateForm(values, inventory)}\n toolbar={\n <CreateToolbar\n {...props}\n inventory={inventory}\n putawayQuantity={putawayQuantity}\n maxPutawayQty={maxPutawayQty}\n locationInventoryItemMap={locationInventoryItemMap}\n selectedLocation={selectedLocation}\n locationType={locationType}\n exceptions={exceptions}\n backPath={backPath}\n notify={notify}\n />\n }\n >\n <InventoryItemForm\n inventory={inventory}\n putawayQuantity={putawayQuantity}\n maxPutawayQty={maxPutawayQty}\n setPutawayQuantity={setPutawayQuantity}\n locationInventoryItemMap={locationInventoryItemMap}\n selectedLocation={selectedLocation}\n setSelectedLocation={setSelectedLocation}\n setLocationInventoryItemMap={setLocationInventoryItemMap}\n setLocationType={setLocationType}\n exceptions={exceptions}\n setExceptions={updateExceptions}\n notify={notify}\n />\n </SimpleForm>\n </Create>\n );\n};\n\nconst getLocationHelperText = (form) => {\n if (form.getState().errors.location)\n return (\n <FormHelperText error>{form.getState().errors.location}</FormHelperText>\n );\n else return <FormHelperText> </FormHelperText>;\n};\n\nconst InventoryItemForm = ({\n inventory,\n putawayQuantity,\n setPutawayQuantity,\n maxPutawayQty,\n locationInventoryItemMap,\n setLocationInventoryItemMap,\n selectedLocation,\n setSelectedLocation,\n setLocationType,\n exceptions,\n setExceptions,\n notify,\n ...props\n}) => {\n const form = useForm();\n const [bayList, setBayList] = useState([]);\n const [maxCapacity, setMaxCapacity] = useState(Infinity);\n const inventoryLoadType =\n inventory.reloadYardCommodity?.commodity?.locationLoadType;\n const inventoryUnits = inventory.inventoryUnits;\n\n const isMaxQuantity = () => putawayQuantity === maxPutawayQty;\n const isMinQuantity = () => putawayQuantity === 0;\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"aisle\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"locationId\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"location\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"outboundShipmentId\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n useEffect(() => {\n debugger;\n\n if (isBulkShipment(inventory.reloadYardCommodity?.commodity)) {\n if (!putawayQuantity) {\n form.change(\"putawayQuantity\", maxPutawayQty);\n setPutawayQuantity(maxPutawayQty);\n }\n if (selectedLocation?.type === LocationType.BULK) {\n const availableCapacity =\n selectedLocation.bulkCapacity -\n ((selectedLocation.capacityUsed || 0) +\n (selectedLocation.capacityAllocated || 0));\n debugger;\n setMaxCapacity(availableCapacity);\n }\n }\n if (\n selectedLocation?.type === LocationType.STRUCTURED &&\n bayList.length > 0\n ) {\n const updatedBayList = [...bayList];\n for (let bay of updatedBayList) {\n for (let level of bay) {\n for (let loc of level) {\n if (loc.id === selectedLocation.id) {\n loc.capacityAllocated = selectedLocation.capacityAllocated;\n loc.capacityUsed = selectedLocation.capacityUsed;\n }\n }\n }\n }\n // Update the state with the new bayList\n setBayList(updatedBayList);\n }\n }, [selectedLocation]);\n\n useEffect(() => {\n // trigger form validation for putawayQuantity input when overShipment is changed.\n const putawayQuantity = form.getFieldState(\"putawayQuantity\")?.value;\n if (putawayQuantity !== undefined && putawayQuantity !== null) {\n form.change(\"putawayQuantity\", putawayQuantity - 1);\n form.change(\"putawayQuantity\", putawayQuantity);\n }\n }, [exceptions.overShipment]);\n\n const handleLocation = (area, zone, aisle, location, outboundShipment) => {\n debugger;\n if (\n selectedLocation?.type !== location?.type &&\n location?.type === LocationType.STRUCTURED\n ) {\n let structuredAllocation = \"\";\n if (inventory.inventoryUnits === Unit.UNIT) {\n structuredAllocation = Object.values(locationInventoryItemMap).flat()\n .length;\n }\n form.change(\"putawayQuantity\", structuredAllocation);\n setPutawayQuantity(structuredAllocation);\n }\n setLocationType(aisle?.type);\n setSelectedLocation(location);\n handleAreaZoneLocation(area, zone, aisle, location, outboundShipment, form);\n };\n\n const handlePutawayQuantity = (event) => {\n const newQtyAllocated = Number(event.target.value);\n setPutawayQuantity(newQtyAllocated);\n\n setExceptions(exceptions, newQtyAllocated);\n };\n\n const isAddDisabled = () => {\n if (!selectedLocation) return true;\n\n const isAvailable = isLocationAvailable(\n bayList,\n selectedLocation,\n inventory\n );\n return !isAvailable;\n };\n\n const handleAddStructured = () => {\n const newIntentoryItem = getInventoryItem(\n null,\n inventory,\n selectedLocation,\n putawayQuantity,\n exceptions\n );\n if (locationInventoryItemMap[selectedLocation.id]) {\n locationInventoryItemMap[selectedLocation.id] = [\n ...locationInventoryItemMap[selectedLocation.id],\n newIntentoryItem,\n ];\n } else {\n locationInventoryItemMap[selectedLocation.id] = [newIntentoryItem];\n }\n setLocationInventoryItemMap(locationInventoryItemMap);\n\n const newQtyAllocated = putawayQuantity + 1;\n setPutawayQuantity(newQtyAllocated);\n form.change(\"putawayQuantity\", newQtyAllocated);\n\n setExceptions({}, newQtyAllocated);\n\n if (!selectedLocation.locationLoad[LocationLoadType.OTHER].selected) {\n const locationLoadType = selectedLocation.locationLoad[inventoryLoadType];\n selectedLocation.capacityAllocated =\n (selectedLocation.capacityAllocated || 0) + locationLoadType.capacity;\n }\n setSelectedLocation(selectedLocation);\n };\n\n const isRemoveDisabled = () => {\n if (!selectedLocation || !isLocationUsed(selectedLocation)) return true;\n\n if (isFloorLoaded(selectedLocation)) {\n debugger;\n const locationBay = bayList[selectedLocation.bay - 1];\n const isTopLevel = selectedLocation.level === locationBay.length;\n if (isTopLevel)\n return isMinQuantity() || selectedLocation.capacityAllocated === 0;\n\n const locationAbove =\n locationBay[selectedLocation.level][selectedLocation.position - 1];\n const quantityAbove =\n (locationAbove.capacityUsed || 0) +\n (locationAbove.capacityAllocated || 0);\n const quantityBelow =\n (selectedLocation.capacityUsed || 0) +\n (selectedLocation.capacityAllocated || 0);\n\n // cannot remove if above would have more than below\n if (quantityAbove >= quantityBelow) {\n return true;\n }\n }\n\n return isMinQuantity();\n };\n\n const isLocationUsed = (location) => {\n return locationInventoryItemMap[location.id]?.length > 0;\n };\n\n const handleRemoveStructured = () => {\n const locationItems = locationInventoryItemMap[selectedLocation.id];\n\n if (locationItems?.length > 0) {\n if (!selectedLocation.locationLoad[LocationLoadType.OTHER].selected) {\n const locationLoadType =\n selectedLocation.locationLoad[inventoryLoadType];\n selectedLocation.capacityAllocated =\n (selectedLocation.capacityAllocated || 0) - locationLoadType.capacity;\n }\n\n if (locationInventoryItemMap[selectedLocation.id]) {\n locationInventoryItemMap[selectedLocation.id].pop();\n }\n\n setSelectedLocation(selectedLocation);\n\n const newQtyAllocated = putawayQuantity - 1;\n setPutawayQuantity(newQtyAllocated);\n form.change(\"putawayQuantity\", newQtyAllocated);\n\n setExceptions({}, newQtyAllocated);\n }\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <>\n <Grid container spacing={1}>\n <Grid item xs={12} sm={6}>\n <TextInput\n source=\"inventory.productName\"\n label=\"Product Name\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} sm={3}>\n <TextField\n id=\"avaialble-quantity\"\n label=\"Quantity Avaialble\"\n variant=\"outlined\"\n margin=\"dense\"\n disabled={true}\n value={maxPutawayQty}\n fullWidth\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {\" \"}\n {getUnitName(inventoryUnits)}{\" \"}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n </Grid>\n <Grid container spacing={1}>\n {getPutawayQuantityInput(\n formData,\n inventory,\n maxPutawayQty,\n handlePutawayQuantity,\n maxCapacity,\n isAddDisabled,\n handleAddStructured,\n isRemoveDisabled,\n handleRemoveStructured,\n exceptions\n )}\n {exceptions.overShipment && (\n <Grid container item xs={12} sm={3} spacing={1}>\n <Grid item xs={3}>\n <Box mt={1} display=\"flex\" justifyContent=\"flex-end\">\n <Tooltip\n arrow\n placement=\"left\"\n title={\n exceptions.overShipmentQuantity > 0\n ? `Qty. Over: ${exceptions.overShipmentQuantity}`\n : \"Overshipment\"\n }\n >\n <ExceptionIcon\n fontSize=\"large\"\n style={{ color: orange[600] }}\n />\n </Tooltip>\n </Box>\n </Grid>\n <Grid item xs={9}>\n <Box mt={2}>\n <Typography variant=\"body2\">\n Overshipment\n {exceptions.overShipmentQuantity > 0\n ? `: ${exceptions.overShipmentQuantity}`\n : \"\"}\n </Typography>\n </Box>\n </Grid>\n </Grid>\n )}\n {exceptions.isDamaged && (\n <Grid container item xs={12} sm={3} spacing={1}>\n <Grid item xs={3}>\n <Box mt={1} display=\"flex\" justifyContent=\"flex-end\">\n <Tooltip\n title={\n exceptions.originOfDamage\n ? exceptions.originOfDamage\n : \"Damaged\"\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon\n fontSize=\"large\"\n style={{ color: orange[600] }}\n />\n </Tooltip>\n </Box>\n </Grid>\n <Grid item xs={9}>\n <Box mt={2}>\n <Typography variant=\"body2\">\n Damaged\n {exceptions.originOfDamage\n ? \" by \" + exceptions.originOfDamage\n : \"\"}\n </Typography>\n </Box>\n </Grid>\n </Grid>\n )}\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Location:\n </Typography>\n <br />\n </Grid>\n <Grid item xs={12}>\n <LocationPicker\n {...props}\n inventory={inventory}\n inventoryItem={formData}\n originalLocation={null}\n isMaxQuantity={isMaxQuantity()}\n handleLocation={handleLocation}\n selectedLocation={selectedLocation}\n locationInventoryItemMap={locationInventoryItemMap}\n bayList={bayList}\n setBayList={setBayList}\n required={true}\n />\n </Grid>\n <Grid item xs={12}>\n {getLocationHelperText(form)}\n </Grid>\n </Grid>\n </>\n )}\n </FormDataConsumer>\n );\n};\n\nconst getPutawayQuantityInput = (\n formData,\n inventory,\n maxPutawayQty,\n handlePutawayQuantity,\n maxCapacity,\n isAddDisabled,\n handleAddStructured,\n isRemoveDisabled,\n handleRemoveStructured,\n exceptions\n) => {\n if (isAllocatable(inventory)) {\n const aisle = formData.aisle;\n const isStructured = aisle?.type === LocationType.STRUCTURED;\n const inventoryUnits = inventory.inventoryUnits;\n const isQtyDisabled = isStructured && inventoryUnits === Unit.UNIT;\n const isAddRemoveVisible = isQtyDisabled;\n\n return (\n <Grid container item xs={12} sm={isAddRemoveVisible ? 6 : 3} spacing={1}>\n <Grid item xs={8} sm={isAddRemoveVisible ? 6 : 12}>\n <NumberInput\n source=\"putawayQuantity\"\n label=\"Putaway Quantity\"\n variant=\"outlined\"\n fullWidth\n validate={\n exceptions.overShipment\n ? validateQtyRequired(Math.infinity, maxCapacity)\n : validateQtyRequired(maxPutawayQty, maxCapacity)\n }\n min={0}\n max={exceptions.overShipment ? Infinity : maxPutawayQty}\n disabled={isQtyDisabled}\n onChange={handlePutawayQuantity}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {\" \"}\n {getUnitName(inventory.inventoryUnits)}{\" \"}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n {isAddRemoveVisible && (\n <Grid item xs={4} sm={6}>\n <Box mt={1}>\n <Button\n label=\"ADD\"\n color=\"default\"\n size=\"large\"\n disabled={isAddDisabled()}\n onClick={handleAddStructured}\n >\n <AddIcon />\n </Button>\n <Button\n label=\"REMOVE\"\n color=\"default\"\n size=\"large\"\n disabled={isRemoveDisabled()}\n onClick={handleRemoveStructured}\n >\n <RemoveIcon />\n </Button>\n </Box>\n </Grid>\n )}\n </Grid>\n );\n }\n\n return <></>;\n};\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport {\n Box,\n Grid,\n InputAdornment,\n TextField,\n Tooltip,\n Typography,\n} from \"@material-ui/core\";\nimport { orange } from \"@material-ui/core/colors\";\n\nimport {\n Button,\n Confirm,\n Edit,\n FormDataConsumer,\n FormTab,\n Loading,\n maxValue,\n minValue,\n number,\n NumberInput,\n required,\n SaveButton,\n TabbedForm,\n TextInput,\n Toolbar,\n TopToolbar,\n useEditController,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { ExceptionIcon } from \"../../../../components/common\";\nimport { BackButton } from \"../../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../../components/common/HelpButton\";\nimport { HistoryTab } from \"../../../../components/common/HistoryTab\";\nimport { LocationPicker } from \"../../../../components/common/LocationPicker\";\nimport { logError } from \"../../../../utils/appUtils\";\nimport {\n InventoryStatus,\n LocationType,\n NoteType,\n VALIDATION_MSG,\n} from \"../../../../utils/constants\";\nimport { getUnitName, isBulkCommodity } from \"../../../../utils/loadTypeUtils\";\nimport {\n deepRedirect,\n getBackPath,\n historyAutoGen,\n trimDecimal,\n} from \"../../../../utils/utils\";\nimport { InventoryItemHelp } from \"./InventoryItemHelp\";\nimport { DeepDeleteButton } from \"./DeepDeleteButton\";\nimport {\n compareObjects,\n ExceptionDialog,\n isOnHand,\n updateIventory,\n} from \"./InventoryItemUtils\";\nimport { promiseSetCapacityUsed } from \"../../../../utils/locationUtils\";\n\nconst validateQtyRequired = (min, max) => [\n required(),\n number(),\n minValue(min, `Must be equal/grater than ${min}`),\n maxValue(max, \"Exceeds Qty. Advised\"),\n];\nconst validateMinQuantity = (min) => [\n required(),\n number(),\n minValue(min, `Must be equal/grater than ${min}`),\n];\n\nconst ExceptionsContext = React.createContext();\nexport const ExceptionsProvider = ({ children, initialExceptions }) => {\n const [exceptions, setExceptions] = useState(initialExceptions || {});\n\n return (\n <ExceptionsContext.Provider value={{ exceptions, setExceptions }}>\n {children}\n </ExceptionsContext.Provider>\n );\n};\n\nconst EditActions = ({\n data,\n backPath,\n inventory,\n isQtyDisabled,\n ...props\n}) => {\n const [isExceptionDialogOpen, setIsExceptionDialogOpen] = useState();\n const { exceptions, setExceptions } = useContext(ExceptionsContext);\n\n return (\n <TopToolbar>\n <HelpButton>\n <InventoryItemHelp {...props} />\n </HelpButton>\n <Button\n label=\"Exception\"\n color=\"primary\"\n disabled={inventory?.status === InventoryStatus.IN_TRANSIT}\n onClick={() => setIsExceptionDialogOpen(true)}\n >\n <ExceptionIcon />\n </Button>\n <BackButton {...props} backPath={backPath} />\n <ExceptionDialog\n {...props}\n record={data}\n inventory={inventory}\n isExceptionDialogOpen={isExceptionDialogOpen}\n setIsExceptionDialogOpen={setIsExceptionDialogOpen}\n exceptions={exceptions}\n setExceptions={setExceptions}\n isQtyDisabled={isQtyDisabled}\n />\n </TopToolbar>\n );\n};\n\nconst EditToolbar = (props) => {\n const form = useForm();\n const history = useHistory();\n const [isSaving, setIsSaving] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const [open, setOpen] = useState(false);\n const [message, setMessage] = useState(\"\");\n const { exceptions } = useContext(ExceptionsContext);\n const { record, inventory, putawayQuantity, backPath, notify } = props;\n\n const handleValidateSave = () => {\n debugger;\n const formState = form.getState();\n\n if (formState.invalid) {\n notify(VALIDATION_MSG, \"warning\");\n } else {\n let messages = [];\n const quantityLabel = isOnHand(record) ? \"Qty. On Hand\" : \"Putaway Qty.\";\n\n if (exceptions.overShipment && exceptions.overShipmentQuantity <= 0) {\n messages.push(\"Overshipment Exception will be cleared.\");\n } else if (\n !exceptions.overShipment &&\n exceptions.overShipmentQuantity > 0\n ) {\n if (\n isBulkCommodity(inventory.reloadYardCommodityId) ||\n exceptions.otherException\n ) {\n messages.push(\n quantityLabel +\n \" exceeds Qty. Available. Press CANCEL to apply Overshipment Exception before saving.\"\n );\n } else {\n messages.push(\n quantityLabel +\n \" exceeds Qty. Available. Apply Overshipment Exception to confirm and Save.\"\n );\n }\n }\n if (exceptions.underShipment && exceptions.underShipmentQuantity <= 0) {\n messages.push(\"Undershipment Exception will be cleared.\");\n } else if (\n !exceptions.underShipment &&\n exceptions.underShipmentQuantity > 0 &&\n isOnHand(record)\n ) {\n if (\n isBulkCommodity(inventory.reloadYardCommodityId) ||\n exceptions.otherException\n ) {\n messages.push(\n quantityLabel +\n \" is less than Qty. Available. Press CANCEL to apply Undershipment Exception before saving.\"\n );\n } else {\n messages.push(\n quantityLabel +\n \" is less than Qty. Available. Apply Undershipment Exception to confirm and Save.\"\n );\n }\n }\n if (putawayQuantity === 0 && record.status !== InventoryStatus.SHIPPED) {\n messages.push(\n quantityLabel + \" set to 0. Item will be removed from inventory.\"\n );\n }\n\n if (messages.length) {\n messages.push(\"Proceed?\");\n const messageFragment = (\n <>\n {messages.map((msg, index) => (\n <React.Fragment key={index}>\n {msg} <br />\n </React.Fragment>\n ))}\n </>\n );\n setMessage(messageFragment);\n setOpen(true);\n } else handleSave();\n }\n };\n\n const handleDialogClose = () => setOpen(false);\n\n const handleDialogCconfirm = () => {\n // bulk can be zeroed-out without over/under-shipment exception.\n // other exception can also be saved without over/under.\n if (\n isBulkCommodity(inventory.reloadYardCommodityId) ||\n exceptions.otherException\n )\n handleSave();\n else if (exceptions.overShipmentQuantity > 0 && !exceptions.overShipment)\n handleDialogClose();\n else if (\n exceptions.underShipmentQuantity > 0 &&\n !exceptions.underShipment &&\n isOnHand(record)\n )\n handleDialogClose();\n else handleSave();\n };\n\n const handleSave = () => {\n handleDialogClose();\n props.handleSubmit();\n };\n\n const transform = async (data) => {\n setIsSaving(true);\n data = { ...data };\n debugger;\n\n data.hasException = data.hasException ? data.hasException : false;\n data.isDamaged = data.hasException ? data.isDamaged : false;\n data.otherException = data.hasException ? data.otherException : false;\n\n const initQty = record.quantityOnHand;\n const newQty = data.quantityOnHand;\n\n const ignoreList = [\n \"aisleId\",\n \"areaId\",\n \"hasException\",\n \"locationId\",\n \"outboundShipmentId\",\n \"quantityOnHand\",\n \"zoneId\",\n ];\n const includeArrayList = [];\n data.history = historyAutoGen(form, data, ignoreList, includeArrayList);\n\n if (initQty !== newQty) {\n const notes = [];\n if (newQty === 0) {\n data.status = InventoryStatus.SHIPPED;\n notes.push({\n type: NoteType.INVENTORY,\n date: new Date(),\n by: window.appUser?.fullName,\n text: `Status set to ${data.status}`,\n });\n }\n\n notes.push({\n type: NoteType.INVENTORY,\n date: new Date(),\n by: window.appUser?.fullName,\n text: `Quantity of ${initQty} ${inventory.inventoryUnits} changed to ${newQty}`,\n });\n\n data.history = [...data.history, ...notes];\n }\n\n delete data.aisle;\n delete data.area;\n delete data.location;\n delete data.inventory;\n delete data.inboundShipment;\n delete data.outboundShipment;\n delete data.reloadYardCommodity;\n delete data.zone;\n\n delete data.overShipment;\n delete data.underShipment;\n\n return data;\n };\n\n const onSuccess = async ({ data }) => {\n try {\n debugger;\n // const initQty = formState.initialValues.quantityOnHand;\n const initQty = record.quantityOnHand;\n const newQty = data.quantityOnHand;\n\n const notes = [];\n const promiseList = [];\n\n const inventoryToUpdate = { ...inventory, locationId: null };\n\n if (initQty !== newQty) {\n const delta = trimDecimal(initQty - newQty);\n\n // update inventory qty\n if (\n data.status !== InventoryStatus.IN_TRANSIT &&\n data.status !== InventoryStatus.ARRIVED\n ) {\n // qty onHand only updated if STORED, otherwise update qty delivered\n const totalQuantity = inventoryToUpdate.inventoryItems.items.reduce(\n (total, item) => {\n if (item.id === data.id) return total + newQty; // total + putawayQuantity\n return total + item.quantityOnHand;\n },\n 0\n );\n if (\n data.status === InventoryStatus.STORED ||\n data.status === InventoryStatus.AGGREGATED ||\n data.status === InventoryStatus.SHIPPED\n ) {\n inventoryToUpdate.quantityOnHand = totalQuantity;\n } else {\n inventoryToUpdate.quantityDelivered = totalQuantity;\n }\n }\n\n if (\n inventoryToUpdate.quantityOnHand === 0 &&\n inventoryToUpdate.status === InventoryStatus.STORED\n ) {\n inventoryToUpdate.status = InventoryStatus.SHIPPED;\n notes.push({\n type: NoteType.INVENTORY,\n date: data.updatedAt,\n by: window.appUser?.fullName,\n text: `Status set to ${inventoryToUpdate.status}`,\n });\n }\n\n notes.push({\n type: NoteType.INVENTORY,\n date: data.updatedAt,\n by: window.appUser?.fullName,\n text: `Quantity of ${initQty} ${inventoryToUpdate.inventoryUnits} changed to ${newQty} in ${data.locationFullName}`,\n });\n\n // update capacity used\n const location = data.location;\n if (\n data.status === InventoryStatus.IN_TRANSIT ||\n data.status === InventoryStatus.ARRIVED\n ) {\n // if inventoryItem is not UNLOADED / STORED update capacityAllocated\n location.capacityAllocated = trimDecimal(\n location.capacityAllocated - delta\n );\n } else {\n // update capacityUsed\n location.capacityUsed = trimDecimal(location.capacityUsed - delta);\n }\n\n promiseList.push(\n promiseSetCapacityUsed(\n location,\n location.capacityUsed,\n location.capacityAllocated\n )\n );\n }\n\n // handle exceptions.\n if (\n isBulkCommodity(inventory.reloadYardCommodityId) ||\n exceptions.otherException\n ) {\n // Bulk does not have precise quantity\n // otherException overrides over/under exception\n // handle exceptions automatically\n const overShipment = exceptions.overShipmentQuantity > 0;\n if (!overShipment) {\n // clear exceptions automatically\n inventoryToUpdate.overShipment = false;\n inventoryToUpdate.overShipmentQuantity = 0;\n inventoryToUpdate.overShipmentNote = \"\";\n } else {\n // apply ocer/under manually\n inventoryToUpdate.underShipment = exceptions.underShipment;\n inventoryToUpdate.underShipmentQuantity =\n exceptions.underShipmentQuantity;\n inventoryToUpdate.underShipmentNote = exceptions.underShipmentNote;\n }\n\n const underShipment = exceptions.underShipmentQuantity > 0;\n if (!underShipment) {\n // clear exceptions automatically\n inventoryToUpdate.underShipment = false;\n inventoryToUpdate.underShipmentQuantity = 0;\n inventoryToUpdate.underShipmentNote = \"\";\n } else {\n // apply ocer/under manually\n inventoryToUpdate.underShipment = exceptions.underShipment;\n inventoryToUpdate.underShipmentQuantity =\n exceptions.underShipmentQuantity;\n inventoryToUpdate.underShipmentNote = exceptions.underShipmentNote;\n }\n } else {\n inventoryToUpdate.overShipment = exceptions.overShipmentQuantity > 0;\n inventoryToUpdate.overShipmentQuantity =\n exceptions.overShipmentQuantity;\n inventoryToUpdate.overShipmentNote = exceptions.overShipmentNote;\n\n if (!inventory.overShipment && inventoryToUpdate.overShipment) {\n notes.push({\n type: NoteType.INVENTORY,\n date: data.updatedAt,\n by: window.appUser?.fullName,\n text: `Overshipment of ${\n exceptions.overShipmentQuantity\n } ${getUnitName(inventoryToUpdate.inventoryUnits)}`,\n });\n }\n\n inventoryToUpdate.underShipment = exceptions.underShipmentQuantity > 0;\n inventoryToUpdate.underShipmentQuantity =\n exceptions.underShipmentQuantity;\n inventoryToUpdate.underShipmentNote = exceptions.underShipmentNote;\n\n if (!inventory.underShipment && inventoryToUpdate.underShipment) {\n notes.push({\n type: NoteType.INVENTORY,\n date: data.updatedAt,\n by: window.appUser?.fullName,\n text: `Undershipment of ${\n exceptions.overShipmentQuantity\n } ${getUnitName(inventoryToUpdate.inventoryUnits)}`,\n });\n }\n }\n\n if (!inventory.isDamaged && exceptions.isDamaged)\n inventoryToUpdate.isDamaged = true;\n if (!inventory.otherException && exceptions.otherException) {\n inventoryToUpdate.otherException = true;\n if (!inventory.otherExceptionNote && exceptions.otherExceptionNote) {\n inventoryToUpdate.otherExceptionNote = exceptions.otherExceptionNote;\n }\n }\n\n inventoryToUpdate.hasException =\n inventoryToUpdate.overShipment ||\n inventoryToUpdate.underShipment ||\n inventoryToUpdate.isDamaged ||\n inventory.isRecalled ||\n inventoryToUpdate.otherException;\n\n inventoryToUpdate.history = [...inventoryToUpdate.history, ...notes];\n promiseList.push(updateIventory(inventoryToUpdate));\n\n await Promise.all(promiseList);\n\n notify(\"Inventory Item updated successfully\");\n deepRedirect(history, backPath);\n } catch (error) {\n logError(\"inventoryItems:EditToolbar:onSuccess\", error, notify);\n } finally {\n setIsSaving(false);\n }\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\"inventoryItems:EditToolbar:onFailure\", error, notify);\n };\n\n const isPristine = () => {\n const formState = form.getState();\n return formState.pristine;\n };\n\n return (\n <Toolbar style={{ justifyContent: \"space-between\" }}>\n <SaveButton\n label=\"Save\"\n submitOnEnter={false}\n // undoable={false}\n disabled={isPristine() || isDeleting}\n saving={isSaving}\n handleSubmitWithRedirect={handleValidateSave}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <Confirm\n isOpen={open}\n loading={isSaving}\n title=\"Save Confirmation\"\n content={message}\n onConfirm={handleDialogCconfirm}\n onClose={handleDialogClose}\n />\n <DeepDeleteButton\n {...props}\n isSaving={isSaving}\n isDeleting={isDeleting}\n setIsDeleting={setIsDeleting}\n inventory={inventory}\n inventoryItems={inventory.inventoryItems}\n />\n </Toolbar>\n );\n};\n\nexport const InventoryItemEdit = (props) => {\n const notify = useNotify();\n const { record } = useEditController(props);\n const inventory = record?.inventory || props.location?.state?.inventory || {};\n const [putawayQuantity, setPutawayQuantity] = useState(\n record?.quantityOnHand\n );\n\n const location = record?.location;\n const isQtyDisabled =\n location?.type === LocationType.STRUCTURED &&\n !location?.locationLoad?.other.selected;\n\n const initialExceptions = {\n overShipment: record?.inventory?.overShipment,\n overShipmentQuantity: record?.inventory?.overShipmentQuantity,\n overShipmentNote: record?.inventory?.overShipmentNote,\n underShipment: record?.inventory?.underShipment,\n underShipmentQuantity: record?.inventory?.underShipmentQuantity,\n underShipmentNote: record?.inventory?.underShipmentNote,\n\n hasException: record?.hasException,\n isDamaged: record?.isDamaged,\n originOfDamage: record?.originOfDamage,\n otherException: record?.otherException,\n otherExceptionNote: record?.otherExceptionNote,\n };\n\n const backPath = getBackPath(props);\n\n const initQtyAllocated = inventory.inventoryItems?.items?.reduce(\n (total, item) => {\n return total + item.quantityOnHand;\n },\n 0\n );\n\n const maxPutawayQty =\n initQtyAllocated <= inventory.quantityShipped\n ? inventory.quantityShipped - initQtyAllocated + record?.quantityOnHand\n : 0;\n\n const minPutawayQty =\n record?.quantityCommitted > 0\n ? trimDecimal(record?.quantityOnHand - record?.quantityCommitted)\n : 0;\n\n useEffect(() => {\n if (record) {\n debugger;\n setPutawayQuantity(record.quantityOnHand);\n }\n }, [record]);\n\n const handleOverUnderQuantity = (putawayQuantity) => {\n debugger;\n // Calculate the difference between the new putaway quantity and the original quantity on hand\n const delta = putawayQuantity - (record?.quantityOnHand || 0);\n\n // Calculate the new total quantity received with all the inventory items\n const totalReceived = initQtyAllocated + delta;\n\n // Calculate the difference between the expected shipment quantity and the total received quantity\n const shipmentDifference = inventory.quantityShipped - totalReceived;\n\n // Prepare the changes for over and under shipment quantities\n const changes = {\n overShipmentQuantity: shipmentDifference < 0 ? -shipmentDifference : 0, // Overshipment scenario\n underShipmentQuantity: shipmentDifference > 0 ? shipmentDifference : 0, // Undershipment scenario\n };\n\n return changes;\n };\n\n if (\n !record ||\n !inventory.inventoryItems ||\n !inventory.reloadYardCommodity?.commodity\n )\n return <Loading />;\n return (\n <ExceptionsProvider initialExceptions={initialExceptions}>\n <Edit\n {...props}\n title={<ForceTitle title={`Edit Inventory Item`} />}\n undoable={false}\n actions={\n <EditActions\n {...props}\n backPath={backPath}\n inventory={inventory}\n isQtyDisabled={isQtyDisabled}\n />\n }\n >\n <TabbedForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={\n <EditToolbar\n {...props}\n record={record}\n inventory={inventory}\n putawayQuantity={putawayQuantity}\n maxPutawayQty={maxPutawayQty}\n backPath={backPath}\n notify={notify}\n />\n }\n >\n <FormTab label=\"Location\">\n <InventoryItemForm\n {...props}\n record={record}\n inventory={inventory}\n isQtyDisabled={isQtyDisabled}\n putawayQuantity={putawayQuantity}\n setPutawayQuantity={setPutawayQuantity}\n maxPutawayQty={maxPutawayQty}\n minPutawayQty={minPutawayQty}\n handleOverUnderQuantity={handleOverUnderQuantity}\n initialExceptions={initialExceptions}\n notify={notify}\n />\n </FormTab>\n <FormTab label=\"History Log\">\n <HistoryTab />\n </FormTab>\n </TabbedForm>\n </Edit>\n </ExceptionsProvider>\n );\n};\n\nconst InventoryItemForm = ({\n backPath,\n record,\n inventory,\n isQtyDisabled,\n putawayQuantity,\n setPutawayQuantity,\n maxPutawayQty,\n minPutawayQty,\n handleOverUnderQuantity,\n initialExceptions,\n notify,\n ...props\n}) => {\n const form = useForm();\n const [originalLocation, setOriginalLocation] = useState();\n const [selectedLocation, setSelectedLocation] = useState();\n const [bayList, setBayList] = useState([]);\n const isMaxQuantity = putawayQuantity === maxPutawayQty;\n\n const minOvershipmentQty = useState(\n inventory?.inventoryItems?.items\n ?.filter((item) => item.id !== record.id)\n ?.reduce(\n (minQty, item) => Math.min(minQty, item.quantityOnHand),\n Infinity\n )\n );\n\n const { exceptions, setExceptions } = useContext(ExceptionsContext);\n\n useEffect(() => {\n if (record.location) {\n setOriginalLocation(record.location);\n setSelectedLocation(record.location);\n }\n }, [record?.location]);\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"hasException\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"isDamaged\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"originOfDamage\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"overShipment\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"underShipment\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"otherException\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n form.registerField(\n \"otherExceptionNote\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n useEffect(() => {\n debugger;\n const isEqual = compareObjects(initialExceptions, exceptions);\n\n if (!isEqual) {\n form.change(\"hasException\", exceptions?.hasException);\n form.change(\"isDamaged\", exceptions?.isDamaged);\n form.change(\"originOfDamage\", exceptions?.originOfDamage);\n form.change(\"otherException\", exceptions?.otherException);\n form.change(\"otherExceptionNote\", exceptions?.otherExceptionNote);\n\n form.change(\"overShipment\", exceptions?.originOfDamage);\n form.change(\"underShipment\", exceptions?.originOfDamage);\n }\n\n // trigger form validation for putawayQuantity input when overShipment is changed.\n const putawayQuantity = form.getFieldState(\"quantityOnHand\").value;\n if (putawayQuantity !== undefined && putawayQuantity !== null) {\n form.change(\"quantityOnHand\", putawayQuantity - 1);\n form.change(\"quantityOnHand\", putawayQuantity);\n }\n }, [exceptions]);\n\n const handleLocation = () => {};\n\n const handlePutawayQuantity = (event) => {\n const newPutawayQuantity = Number(event.target.value);\n setPutawayQuantity(newPutawayQuantity);\n\n // Calculate the new over and under shipment quantities based on the newPutawayQuantity if provided\n const overUnderQuantities = handleOverUnderQuantity(newPutawayQuantity);\n\n // Merge changes with existing exceptions and update state\n const updatedExceptions = {\n ...exceptions, // existing state\n ...overUnderQuantities, // updated quantities based on putawayQuantity\n };\n\n setExceptions(updatedExceptions);\n };\n\n const getQuantityValidator = () => {\n if (exceptions.overShipment) {\n return validateMinQuantity(minOvershipmentQty);\n } else if (exceptions.otherException || exceptions.underShipment) {\n return validateMinQuantity(record?.quantityCommitted);\n }\n return validateQtyRequired(minPutawayQty, maxPutawayQty);\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <>\n <Grid container spacing={1}>\n <Grid item xs={12} sm={6}>\n <TextInput\n source=\"inventory.productName\"\n label=\"Product Name\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n />\n </Grid>\n {!isOnHand(record) && (\n <Grid item xs={12} sm={3}>\n <TextField\n id=\"avaialble-quantity\"\n label=\"Quantity Avaialble\"\n variant=\"outlined\"\n margin=\"dense\"\n disabled={true}\n value={maxPutawayQty}\n fullWidth\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {\" \"}\n {getUnitName(inventory.inventoryUnits)}{\" \"}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n )}\n </Grid>\n <Grid container spacing={1}>\n <Grid item container xs={12} sm={6} spacing={1}>\n <Grid item xs={12} sm={6}>\n <NumberInput\n source=\"quantityOnHand\"\n label={\n isOnHand(record) ? \"Quantity On Hand\" : \"Putaway Quantity\"\n }\n variant=\"outlined\"\n fullWidth\n validate={getQuantityValidator()}\n min={minPutawayQty}\n max={exceptions.overShipment ? Infinity : maxPutawayQty}\n disabled={isQtyDisabled}\n onChange={handlePutawayQuantity}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {\" \"}\n {getUnitName(inventory.inventoryUnits)}{\" \"}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n {isOnHand(record) && (\n <Grid item xs={12} sm={6}>\n <NumberInput\n source=\"quantityCommitted\"\n label=\"Quantity Committed\"\n variant=\"outlined\"\n fullWidth\n disabled={true}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n {\" \"}\n {getUnitName(record.inventory.inventoryUnits)}{\" \"}\n </InputAdornment>\n ),\n }}\n />\n </Grid>\n )}\n </Grid>\n {exceptions.overShipment && (\n <Grid container item xs={12} sm={2} spacing={1}>\n <Grid item xs={3}>\n <Box mt={1} display=\"flex\" justifyContent=\"flex-end\">\n <Tooltip\n arrow\n placement=\"left\"\n title={\n exceptions.overShipmentQuantity\n ? `Qty. Over: ${\n exceptions.overShipmentQuantity || \"\"\n }`\n : \"Overshipment\"\n }\n >\n <ExceptionIcon\n fontSize=\"large\"\n style={{ color: orange[600] }}\n />\n </Tooltip>\n </Box>\n </Grid>\n <Grid item xs={9}>\n <Box mt={2}>\n <Typography variant=\"body2\">\n Overshipment\n {exceptions.overShipmentQuantity\n ? `: ${exceptions.overShipmentQuantity}`\n : \"\"}\n </Typography>\n </Box>\n </Grid>\n </Grid>\n )}\n {exceptions.underShipment && (\n <Grid container item xs={12} sm={2} spacing={1}>\n <Grid item xs={3}>\n <Box mt={1} display=\"flex\" justifyContent=\"flex-end\">\n <Tooltip\n arrow\n placement=\"left\"\n title={\n exceptions.underShipmentQuantity\n ? `Qty. Under: ${\n exceptions.underShipmentQuantity || \"\"\n }`\n : \"Undershipment\"\n }\n >\n <ExceptionIcon\n fontSize=\"large\"\n style={{ color: orange[600] }}\n />\n </Tooltip>\n </Box>\n </Grid>\n <Grid item xs={9}>\n <Box mt={2}>\n <Typography variant=\"body2\">\n Undershipment\n {exceptions.underShipmentQuantity\n ? `: ${exceptions.underShipmentQuantity}`\n : \"\"}\n </Typography>\n </Box>\n </Grid>\n </Grid>\n )}\n {formData.isDamaged && (\n <Grid container item xs={12} sm={2} spacing={1}>\n <Grid item xs={3}>\n <Box mt={1} display=\"flex\" justifyContent=\"flex-end\">\n <Tooltip\n title={\n formData.originOfDamage\n ? formData.originOfDamage\n : \"Damaged\"\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon\n fontSize=\"large\"\n style={{ color: orange[600] }}\n />\n </Tooltip>\n </Box>\n </Grid>\n <Grid item xs={9}>\n <Box mt={2}>\n <Typography variant=\"body2\">Damaged</Typography>\n </Box>\n </Grid>\n </Grid>\n )}\n {formData.otherException && (\n <Grid container item xs={12} sm={2} spacing={1}>\n <Grid item xs={3}>\n <Box mt={1} display=\"flex\" justifyContent=\"flex-end\">\n <Tooltip\n title={\n formData.otherExceptionNote\n ? formData.otherExceptionNote\n : \"Other Exception\"\n }\n placement=\"left\"\n arrow\n >\n <ExceptionIcon\n fontSize=\"large\"\n style={{ color: orange[600] }}\n />\n </Tooltip>\n </Box>\n </Grid>\n <Grid item xs={9}>\n <Box mt={2}>\n <Typography variant=\"body2\">Other Exception</Typography>\n </Box>\n </Grid>\n </Grid>\n )}\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Location:\n </Typography>\n <br />\n </Grid>\n <Grid item xs={12}>\n <LocationPicker\n {...props}\n inventory={inventory}\n inventoryItem={formData}\n originalLocation={originalLocation}\n isMaxQuantity={isMaxQuantity}\n required={true}\n disabled={true}\n bayList={bayList}\n setBayList={setBayList}\n handleLocation={handleLocation}\n selectedLocation={selectedLocation}\n setSelectedLocation={setSelectedLocation}\n />\n </Grid>\n </Grid>\n </>\n )}\n </FormDataConsumer>\n );\n};\n","export function emailInviteHTML(toName, toEmail, fromName, yardName) {\n return `<!-- Begin HTML Content -->\n <h1> ${toName}, <br><br> Welcome to transloads.co! <br></h1>\n <hr style=\"background:#2d8cff; height: 8px; width: 60px; border-style: solid; border-color: #095484; border-width: 1px 0 0 0; border-radius: 8px;\" />\n <br><br>\n ${fromName} at ${yardName} is inviting you to join transloads.co.\n To create your account, please click on the button below and register using this email address: <br>\n ${toEmail} <br>\n Once your account is activated, you will have full access to the Yard Management System.\n <br><br><br>\n <table bgcolor=\"#FF5F0F\" style=\"border-radius:3px; border-spacing:0; margin:0 auto\">\n <tbody>\n <tr style=\"background:#FF5F0F;\">\n <td class=\"mobile-cta\" style=\"border: 0 solid #FF5F0F; display: inline-block; padding: 20px 45px; text-align: center; font-family:'Lato', Helvetica, sans-serif; font-size:15px; line-height:24px; color:#FFFFFF; font-weight:900; text-decoration: none; text-transform: uppercase; letter-spacing: .2em\">\n <a href=\"https://app.transloads.co/?signUp\"\n target=\"_blank\"\n rel=\"noreferrer\"\n style=\"color:#FFFFFF; text-decoration:none;\"\n >\n CREATE ACCOUNT\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n <br><br>\n <hr style=\"border-bottom:#CCCCCC 6px dotted; border-width: 0 0 6px 0;\">\n <br>\n Button not working? Try pasting this URL into your browser: <br>\n <strong>\n <a href=\"https://app.transloads.co/?signUp\"\n target=\"_blank\"\n rel=\"noreferrer\"\n style=\"color: #2d8cff; text-decoration:none; word-break: break-all;\"\n >\n https://app.transloads.co/?signUp\n </a>\n </strong>\n <!-- End HTML Content -->`;\n}\n","export function emailWelcomeBackHTML(toName, toEmail, fromName, yardName) {\n return `<!-- Begin HTML Content -->\n <h1> ${toName}, <br><br> Welcome to transloads.co! <br></h1>\n <hr style=\"background:#2d8cff; height: 8px; width: 60px; border-style: solid; border-color: #095484; border-width: 1px 0 0 0; border-radius: 8px;\" />\n <br><br>\n ${fromName} at ${yardName} has reactivated your account on transloads.co.\n To log in to your account, please click on the button below using this email address: <br>\n ${toEmail} and your old password.<br>\n You now have full access to the Yard Management System again.\n <br><br><br>\n <table bgcolor=\"#FF5F0F\" style=\"border-radius:3px; border-spacing:0; margin:0 auto\">\n <tbody>\n <tr style=\"background:#FF5F0F;\">\n <td class=\"mobile-cta\" style=\"border: 0 solid #FF5F0F; display: inline-block; padding: 20px 45px; text-align: center; font-family:'Lato', Helvetica, sans-serif; font-size:15px; line-height:24px; color:#FFFFFF; font-weight:900; text-decoration: none; text-transform: uppercase; letter-spacing: .2em\">\n <a href=\"https://app.transloads.co/?signIn\"\n target=\"_blank\"\n rel=\"noreferrer\"\n style=\"color:#FFFFFF; text-decoration:none;\"\n >\n LOGIN\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n <br><br>\n <hr style=\"border-bottom:#CCCCCC 6px dotted; border-width: 0 0 6px 0;\">\n <br>\n Button not working? Try pasting this URL into your browser: <br>\n <strong>\n <a href=\"https://app.transloads.co/?signIn\"\n target=\"_blank\"\n rel=\"noreferrer\"\n style=\"color: #2d8cff; text-decoration:none; word-break: break-all;\"\n >\n https://app.transloads.co/?signIn\n </a>\n </strong>\n <!-- End HTML Content -->`;\n}\n","import React, { useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n customerByEmailMini,\n userByEmailMini,\n} from \"../../../graphql/reloadyard/custom-queries\";\nimport { SaveButton, useNotify, useRedirect } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { UserStatus } from \"../../../utils/constants\";\nimport { getReplyToAddress } from \"../../../utils/utils\";\nimport { emailInviteHTML } from \"./emailInviteHTML\";\nimport { emailWelcomeBackHTML } from \"./emailWelcomeBackHTML\";\nimport { updateUserMini } from \"../../../graphql/reloadyard/custom-mutations\";\nimport Backdrop from \"@material-ui/core/Backdrop\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: \"#fff\",\n },\n}));\n\nconst fetchDuplicateRecords = async (email) => {\n try {\n const [customerResponse, userResponse] = await Promise.all([\n API.graphql(graphqlOperation(customerByEmailMini, { email })),\n API.graphql(graphqlOperation(userByEmailMini, { email })),\n ]);\n return { customerResponse, userResponse };\n } catch (error) {\n logError(\"users:ValidateSaveButton:fetchDuplicateRecords\", error, false);\n throw error;\n }\n};\n\nconst handleDuplicateUser = async (dbUser, user) => {\n try {\n let toUpdateUser = {\n ...dbUser,\n ...user,\n active: true,\n };\n // if (!user?.acl) {\n // toUpdateUser.acl = []\n // }\n delete toUpdateUser.cognitoId;\n\n const updatedUser = await API.graphql(\n graphqlOperation(updateUserMini, { input: toUpdateUser })\n );\n return updatedUser?.data?.updateUser;\n } catch (err) {\n logError(\n \"managerApp:customers:ValidateSaveButton:handleDuplicateUser\",\n err,\n false\n );\n }\n return null;\n};\n\nconst validateEmailUniqueness = async (user) => {\n if (user) {\n try {\n const { customerResponse, userResponse } = await fetchDuplicateRecords(\n user.email\n );\n\n const duplicateCustomer =\n customerResponse.data.customerByEmail.items.length > 0;\n const duplicateUser = userResponse.data.userByEmail.items.length > 0;\n\n if (duplicateUser || duplicateCustomer) {\n const dbUser = userResponse.data.userByEmail.items[0];\n if (dbUser?.active === \"true\" || duplicateCustomer) {\n return { message: `User with this email already exists.` };\n } else {\n if (dbUser.reloadYardId === window.appUser.reloadYardId) {\n return await handleDuplicateUser(dbUser, user);\n } else {\n return {\n message: `Cannot reactivate a user in different reload Yard`,\n };\n }\n }\n }\n } catch (error) {\n logError(\n \"users:ValidateSaveButton:validateEmailUniqueness\",\n error,\n false\n );\n }\n }\n return null;\n};\n\nexport const ValidateSaveButton = (props) => {\n const classes = useStyles();\n const form = useForm();\n const notify = useNotify();\n const redirect = useRedirect();\n const [isSaving, setIsSaving] = useState(false);\n const { basePath } = props;\n\n const handleValidateSave = async () => {\n const formState = form.getState();\n const formData = formState.values;\n const isValid = !formState.invalid; // Form-level validation status. Submit to force field-level form validation.\n setIsSaving(true);\n\n if (isValid) {\n const isDuplicate = await validateEmailUniqueness(formData);\n if (isDuplicate?.id) {\n // re-activaqted user\n await onSuccess({ data: formData }, true);\n setIsSaving(false);\n return;\n } else if (isDuplicate) {\n // errror message\n notify(isDuplicate.message, \"error\");\n setIsSaving(false);\n return;\n }\n } else {\n setIsSaving(false);\n }\n\n handleSave(); // submit and force field-level form validation whether valid or not.\n };\n\n const handleSave = () => {\n props.handleSubmit(); // submit and force field-level form validation whether valid or not.\n };\n\n const transform = (data) => {\n data = { ...data };\n debugger;\n\n try {\n data.active = \"true\";\n data.status = UserStatus.PENDING_REG;\n data.reloadYardId = window.appUser.reloadYardId;\n data.groups = window.appUser.groups;\n\n data.fullName = `${data.firstName} ${data.lastName}`;\n data.email = data.email.toLowerCase();\n\n // must have - boundedTextField does not transform to upper case\n if (data.address?.state)\n data.address.state = data.address.state.toUpperCase();\n if (data.address?.zipCode)\n data.address.zipCode = data.address.zipCode.toUpperCase();\n delete data.address?.name;\n } catch (error) {\n logError(\"users:ValidateSaveButton:transform\", error, notify);\n return Promise.reject();\n }\n\n return data;\n };\n\n const onSuccess = async ({ data }, isReactivated = false) => {\n debugger;\n try {\n const emailContent = isReactivated\n ? emailWelcomeBackHTML(\n data.firstName,\n data.email,\n window.appUser?.firstName,\n window.appUser?.reloadYard.name\n )\n : emailInviteHTML(\n data.firstName,\n data.email,\n window.appUser?.firstName,\n window.appUser?.reloadYard.name\n );\n\n const emailSubject = isReactivated\n ? \"Welcome Back to transloads.co!\"\n : \"Your transloads.co Invite Is Waiting\";\n\n try {\n const response = await API.post(\"transREST\", \"/sendEmail\", {\n body: {\n to: data.email,\n bcc: [\"support@transloads.co\"],\n replyTo: getReplyToAddress(),\n subject: emailSubject,\n template: \"emailTemplate.html\",\n htmlContent: emailContent,\n },\n });\n\n if (response.error) {\n throw response.error;\n } else {\n notify(`User created successfully.`);\n redirect(\"list\", basePath);\n }\n } catch (error) {\n logError(\"users:UserEmailError\", error, false);\n }\n } catch (error) {\n logError(\"users:ValidateSaveButton:onSuccess\", error, notify);\n } finally {\n setIsSaving(false);\n }\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\"users:ValidateSaveButton:onFailure\", error, notify);\n };\n\n return (\n <>\n <SaveButton\n {...props}\n submitOnEnter={false}\n undoable={false}\n saving={isSaving}\n handleSubmitWithRedirect={handleValidateSave}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <Backdrop className={classes.backdrop} open={isSaving}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n </>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { Grid, Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n CheckboxGroupInput,\n Create,\n email,\n FormDataConsumer,\n maxLength,\n minLength,\n RadioButtonGroupInput,\n regex,\n required,\n SimpleForm,\n TextInput,\n Toolbar,\n TopToolbar,\n} from \"react-admin\";\n\nimport { AddressInput } from \"../../../components/common/AddressInput\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { getUserTypeAcls } from \"../../../utils/appUtils\";\nimport { REGEX_PHONE, UserType } from \"../../../utils/constants\";\nimport { UserCreateHelp } from \"./UserHelp\";\nimport { ValidateSaveButton } from \"./ValidateSaveButton\";\nimport { getUserTypeDescription, getUserTypeOptions } from \"./userUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n radioButton: {\n marginTop: theme.spacing(0),\n marginLeft: theme.spacing(1),\n },\n}));\n\nconst validateRequired = required();\nconst validateEmail = [required(), email()];\nconst validatePhone = [\n required(),\n regex(REGEX_PHONE, \"Must be valid Phone No.\"),\n minLength(10),\n maxLength(20),\n];\n\nconst UserCreateForm = (props) => {\n const classes = useStyles();\n const [aclList, setAclList] = useState(getUserTypeAcls(UserType.CREW));\n\n const handleUserTypeChange = (value) => {\n const newAclList = getUserTypeAcls(value);\n setAclList(newAclList);\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container spacing={5}>\n <Grid item xs={12} md={8}>\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"firstName\"\n label=\"First Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"lastName\"\n label=\"Last Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"email\"\n type=\"email\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toLowerCase() : undefined)}\n validate={validateEmail}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"phone\"\n type=\"tel\"\n variant=\"outlined\"\n fullWidth\n validate={validatePhone}\n />\n </Grid>\n <Grid item xs={12}>\n <Typography\n gutterBottom\n variant=\"overline\"\n color=\"textSecondary\"\n >\n Home Address\n </Typography>\n <AddressInput\n source=\"address\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v : undefined)}\n allValues={formData}\n />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} md={4}>\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <RadioButtonGroupInput\n source=\"type\"\n label=\"User Type\"\n row\n className={classes.radioButton}\n choices={getUserTypeOptions(null)}\n validate={validateRequired}\n defaultValue={UserType.CREW}\n onChange={handleUserTypeChange}\n helperText={getUserTypeDescription(formData.type)}\n />\n </Grid>\n {formData.type && formData.type !== UserType.MANAGER && (\n <Grid item xs={12}>\n <CheckboxGroupInput\n source=\"acl\"\n label=\"Access Permissions\"\n row={false}\n fullWidth\n choices={aclList}\n />\n </Grid>\n )}\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst UserCreateActions = (props) => (\n <TopToolbar>\n <HelpButton>\n <UserCreateHelp {...props} />\n </HelpButton>\n <BackButton {...props} />\n </TopToolbar>\n);\n\nconst UserCreateToolbar = (props) => (\n <Toolbar {...props}>\n <ValidateSaveButton />\n </Toolbar>\n);\n\nexport const UserCreate = (props) => {\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New User\" />}\n actions={<UserCreateActions />}\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={<UserCreateToolbar />}\n >\n <UserCreateForm />\n </SimpleForm>\n </Create>\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { Card, useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n CreateButton,\n Datagrid,\n EditButton,\n FilterButton,\n FunctionField,\n ListContextProvider,\n ListToolbar,\n RefreshButton,\n SimpleList,\n TextField,\n Title,\n TopToolbar,\n useListContext,\n} from \"react-admin\";\n\nimport { isSubscriptionDisabled } from \"../../../utils/appUtils\";\nimport { ChevronRightIcon } from \"../../../components/common\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { UserStatusIcon } from \"../users/UserStatusIcon\";\nimport { Empty } from \"../../../components/common/Empty\";\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\nimport { AccountDropDown } from \"../../../components/common/AccountDropDown\";\n\nconst useStyles = makeStyles((theme) => ({\n statusIcon: {\n marginTop: theme.spacing(1),\n },\n}));\n\nconst renderName = (record) => {\n return `${record.lastName}, ${record.firstName}`;\n};\n\nconst CustomerSearchField = ({ label, alwaysOn, ...props }) => {\n const listContext = useListContext(props);\n const { displayedFilters, filterValues, setFilters } = listContext;\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n const filters = {\n ...filterValues,\n or: [\n { accountName: { matchPhrasePrefix: `${value}` } },\n { accountName: { wildcard: `*${value}*` } },\n { lastName: { matchPhrasePrefix: `${value}` } },\n { lastName: { wildcard: `*${value}*` } },\n { email: { matchPhrasePrefix: `${value}` } },\n { email: { wildcard: `*${value}*` } },\n ],\n };\n\n setFilters(filters, displayedFilters);\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = (mdDown) => [\n <AccountDropDown source=\"accountId.eq\" label=\"Account\" alwaysOn={!mdDown} />,\n <CustomerSearchField label=\"Search\" alwaysOn />,\n];\n\nconst ListActions = ({ basePath, isXSmall, ...props }) => {\n return !isXSmall ? (\n <TopToolbar>\n <FilterButton />\n <CreateButton basePath={basePath} disabled={isSubscriptionDisabled()} />\n <RefreshButton />\n </TopToolbar>\n ) : null;\n};\n\nexport const CustomerList = (props) => {\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const mdDown = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n\n const [defaultFilter] = useState({\n reloadYardId: window.appUser?.reloadYardId,\n activeAccountNameLastName: { beginsWith: { active: \"true\" } },\n });\n\n const defaultSearchFilter = {\n reloadYardId: { eq: window.appUser?.reloadYardId },\n active: { eq: \"true\" },\n };\n\n // Include key & search to display default sort order.\n const defaultSort = {\n field: `{\"key\":\"customerByReloadYardByActiveByAccountNameByName\", \"search\":\"accountName\"}`,\n order: \"ASC\",\n };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = localStorage.getItem(`${props.resource}_perPage`);\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? Number(sessionPerPage) : 10\n );\n\n const listContext = useSearchableList({\n ...props,\n defaultTitle: \"Customers\",\n defaultFilter: defaultFilter,\n defaultSort: defaultSort,\n defaultSearchFilter: defaultSearchFilter,\n defaultPerPage: defaultPerPage,\n resource: \"customerReloadYardAccounts\",\n });\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n useEffect(() => {\n if (listContext?.filter) {\n // reset list on automatic stale list reset\n // Extract the key query from defaultSort\n const fieldObj = JSON.parse(defaultSort.field);\n const keyToCheck = fieldObj.key;\n\n // Check for the key's presence in filter\n const hasKey = keyToCheck in listContext.filter;\n const hasFilterValues = Object.keys(listContext.filterValues).length > 0;\n if (hasKey && hasFilterValues) listContext.setFilters({});\n }\n }, [listContext?.filter]);\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Customers\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters(mdDown)}\n actions={<ListActions isXSmall={isXSmall} />}\n />\n <Card>\n <CustomerGrid\n isXSmall={isXSmall}\n lteMedium={mdDown}\n classes={classes}\n basePath=\"/customers\"\n resource=\"customers\"\n />\n <Pagination {...listContext} />\n </Card>\n </ListContextProvider>\n );\n};\n\nconst CustomerGrid = (props) => {\n const { classes, isXSmall, mdDown } = props;\n const { data, ids, page, ...context } = useListContext();\n\n // Transform the data here\n const transformedData = {};\n const transformedIds = [];\n\n if (data && ids) {\n ids.forEach((id) => {\n const record = data[id];\n if (record && record.customer) {\n // Transform the record here, for example, use the user subrecord\n transformedData[record.customerId] = {\n ...record.customer,\n accountName: record.accountName,\n };\n transformedIds.push(record.customerId);\n }\n });\n }\n\n const newContext = {\n ...context,\n data: transformedData,\n ids: transformedIds,\n basePath: props.basePath,\n resource: props.resource,\n };\n\n if (ids.length === 0 && page === 1)\n return <Empty {...props} message=\"Invite a new customer\" />;\n return (\n <ListContextProvider value={newContext}>\n {isXSmall ? (\n <SimpleList\n primaryText={renderName}\n secondaryText={(record) => record.email}\n tertiaryText={(record) => record.accountName}\n linkType=\"edit\"\n leftIcon={(record) => <UserStatusIcon record={record} />}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n />\n ) : mdDown ? (\n <Datagrid rowClick=\"edit\">\n <TextField\n source=\"accountName\"\n label=\"Account\"\n sortable={true}\n sortBy={`{\"key\":\"customerByReloadYardByActiveByAccountNameByName\", \"search\":\"accountName\"}`}\n />\n <FunctionField\n source=\"lastName\"\n label=\"Name\"\n render={renderName}\n sortable={false}\n />\n <UserStatusIcon\n source=\"status\"\n label=\"Status\"\n classes={classes.statusIcon}\n sortable={false}\n />\n <TextField source=\"email\" label=\"Email\" sortable={false} />\n </Datagrid>\n ) : (\n <Datagrid rowClick=\"edit\">\n <TextField\n source=\"accountName\"\n label=\"Account\"\n sortable={true}\n sortBy={`{\"key\":\"customerByReloadYardByActiveByAccountNameByName\", \"search\":\"accountName\"}`}\n />\n <FunctionField\n source=\"lastName\"\n label=\"Name\"\n render={renderName}\n sortable={false}\n />\n <UserStatusIcon\n source=\"status\"\n label=\"Status\"\n classes={classes.statusIcon}\n sortable={false}\n />\n <TextField source=\"email\" label=\"Email\" sortable={false} />\n <TextField source=\"phone\" label=\"Phone\" sortable={false} />\n <EditButton />\n </Datagrid>\n )}\n </ListContextProvider>\n );\n};\n","import React from \"react\";\n\nimport { Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { DeleteIcon } from \"../../../components/common\";\n\nconst useStyles = makeStyles((theme) => ({\n icon: {\n verticalAlign: \"middle\",\n display: \"inline-flex\",\n },\n}));\n\nexport const CustomerCreateHelp = () => (\n <>\n <Typography variant=\"subtitle1\">\n Creating a new Customer sends out an email invitation to specified email\n address, asking the new user to complete signup process. The new User will\n not have access until they complete registration. They will need access to\n their email to complete the process.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Account: </strong> Select the Account to which the user should\n have access to. They will have access only to the selected Account's\n data. Account cannot be changed once the record is created.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Email: </strong> Email address is used to complete new User\n registration process. Each user must have a unique email address,\n since it is used as username to login into the platform. Email cannot\n be changed once the User record is created.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Phone: </strong> Phone number for record keeping.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Access Permissions: </strong> <br />\n - View Invoices: if checked, the user will have read-only access to\n view pending and settled invoices. <br />\n - User Management: if checked: the user will read-only access to view\n other users in their own account. <br />\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const CustomerEditHelp = () => {\n const classes = useStyles();\n\n return (\n <>\n <Typography variant=\"subtitle1\">\n Customer info is locked. Only they user can edit their Profile info such\n as name and phone.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Email: </strong> Email address is used to complete new User\n registration process. Each user must have a unique email address,\n since it is used as username to login into the platform. Email\n cannot be changed once the User record is created.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Access Permissions: </strong> <br />\n - View Invoices: if checked, the user will have read-only access to\n view pending and settled invoices. <br />\n - User Management: if checked: the user will read-only access to\n view other users in their own account. <br />\n </Typography>\n </li>\n <li>\n <Typography>\n <DeleteIcon className={classes.icon} />\n <strong> DELETE: </strong>\n Removes user's access to the selected Account's data.\n </Typography>\n </li>\n </ul>\n </>\n );\n};\n","export function emailInviteHTML(toName, toEmail, fromName, yardName) {\n return `<!-- Begin HTML Content -->\n <h1> ${toName}, <br><br> Welcome to transloads.co! <br></h1>\n <hr style=\"background:#2d8cff; height: 8px; width: 60px; border-style: solid; border-color: #095484; border-width: 1px 0 0 0; border-radius: 8px;\" />\n <br><br>\n ${fromName} at ${yardName} is inviting you to join transloads.co.\n To create your account, please click on the button below and register using this email address: <br>\n ${toEmail} <br>\n Once your account is activated, you will have full access to the Yard Management System.\n <br><br><br>\n <table bgcolor=\"#FF5F0F\" style=\"border-radius:3px; border-spacing:0; margin:0 auto\">\n <tbody>\n <tr style=\"background:#FF5F0F;\">\n <td class=\"mobile-cta\" style=\"border: 0 solid #FF5F0F; display: inline-block; padding: 20px 45px; text-align: center; font-family:'Lato', Helvetica, sans-serif; font-size:15px; line-height:24px; color:#FFFFFF; font-weight:900; text-decoration: none; text-transform: uppercase; letter-spacing: .2em\">\n <a href=\"https://app.transloads.co/?signUp\"\n target=\"_blank\"\n rel=\"noreferrer\"\n style=\"color:#FFFFFF; text-decoration:none;\"\n >\n CREATE ACCOUNT\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n <br><br>\n <hr style=\"border-bottom:#CCCCCC 6px dotted; border-width: 0 0 6px 0;\">\n <br>\n Button not working? Try pasting this URL into your browser: <br>\n <strong>\n <a href=\"https://app.transloads.co/?signUp\"\n target=\"_blank\"\n rel=\"noreferrer\"\n style=\"color: #2d8cff; text-decoration:none; word-break: break-all;\"\n >\n https://app.transloads.co/?signUp\n </a>\n </strong>\n <!-- End HTML Content -->`;\n}\n","import React, { useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport {\n customerByEmailMini,\n userByEmailMini,\n} from \"../../../graphql/reloadyard/custom-queries\";\n\nimport { Backdrop, CircularProgress, DialogContentText, makeStyles } from \"@material-ui/core\";\n\nimport { Confirm, SaveButton, useNotify, useRedirect } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { UserStatus } from \"../../../utils/constants\";\nimport { emailInviteHTML } from \"./emailInviteHTML\";\nimport { emailCustomerInviteHTML } from \"./emailCustomerInviteHTML\";\nimport {\n doCreateReloadYardAccount,\n doUpdateReloadYardAccount,\n} from \"./customerUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n },\n}));\n\nconst validateEmailUnicity = async (formData) => {\n debugger;\n try {\n const customerPromise = API.graphql(\n graphqlOperation(customerByEmailMini, { email: formData.email })\n );\n const userPromise = API.graphql(\n graphqlOperation(userByEmailMini, { email: formData.email })\n );\n\n const [customerResponse, userResponse] = await Promise.all([\n customerPromise,\n userPromise,\n ]);\n const duplicateCustomer = customerResponse.data.customerByEmail.items[0];\n const duplicateUser = userResponse.data.userByEmail.items[0];\n\n if (duplicateUser) {\n return {\n message: `User with this email already exists.`,\n };\n } else if (duplicateCustomer) {\n const reloadYardAccount = duplicateCustomer.reloadYardAccounts?.items[0]; // .find(itm => itm.reloadYardId);\n return {\n message: `User with this email already exists in in your account.`,\n customer: {\n ...duplicateCustomer,\n email: formData.email,\n active: reloadYardAccount?.active, // check if yard already invited this customer (filtered by auth groups)\n firstName: formData.firstName,\n },\n };\n }\n } catch (error) {\n logError(\n \"managerApp:customers:ValidateSaveButton:validateEmailUnicity\",\n error,\n false\n );\n }\n return null;\n};\n\nexport const DialogCreateButton = (props) => {\n const classes = useStyles();\n const form = useForm();\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n const [message, setMessage] = useState(\"\");\n const [duplicateUser, setDuplicateUser] = useState();\n const [isSaving, setIsSaving] = useState(false);\n const { account } = props;\n\n const handleValidateSave = async () => {\n let messages = [\n <>\n Once saved, you will not be able to change the Account or contact\n information. <br />\n Please confirm all information before saving. <br />\n </>,\n ];\n const formState = form.getState();\n const formData = formState.values;\n const isValid = !formState.invalid; // Form-level validation status. Submit to force field-level form validation.\n setIsSaving(true);\n debugger;\n\n if (isValid) {\n // if valid, check email uniqueness\n const isDuplicate = await validateEmailUnicity(formData);\n\n if (isDuplicate) {\n if (isDuplicate.customer?.active === \"true\" || !isDuplicate.customer) {\n // comes from reloadYardAccount?.active\n // Handle duplicate reloadYardAccount CUSTOMER\n // or !isDuplicate.customer\n // yard staff user\n notify(isDuplicate.message, \"error\");\n setIsSaving(false);\n return; // Halt submission if duplicate found\n } else {\n // handle existing CUSTOMER account\n setDuplicateUser(isDuplicate.customer);\n messages.push(\n <>\n <br />\n This customer already has an account on transloads.co <br />\n Continue with invitation to join your transload?\n </>\n );\n }\n }\n }\n\n if (!isValid) {\n setIsSaving(false);\n return; // return to edit form\n }\n if (messages.length > 0) {\n // Open Confirm dialog.\n setMessage(\n <DialogContentText>\n {messages.map((msg, index) => (\n <React.Fragment key={index}>{msg}</React.Fragment>\n ))}\n </DialogContentText>\n );\n setOpen(true);\n }\n };\n\n const handleDialogClose = () => {\n setOpen(false);\n setIsSaving(false);\n };\n\n const handleDialogCconfirm = async () => {\n setOpen(false);\n debugger;\n\n if (duplicateUser) {\n // handle existing CUSTOMER account\n await onSuccess({ data: duplicateUser, isDuplicate: true });\n } else {\n handleSave(); // submit and force field-level form validation whether valid or not.\n }\n };\n\n const handleSave = () => {\n props.handleSubmit(); // submit and force field-level form validation whether valid or not.\n };\n\n const transform = (data) => {\n debugger;\n data = { ...data };\n data.status = UserStatus.PENDING_REG;\n data.email = data.email.toLowerCase();\n\n delete data.accountId;\n delete data.acl;\n\n return data;\n };\n\n const onSuccess = async ({ data, isDuplicate }) => {\n try {\n debugger;\n let emailContent;\n const formData = form.getState().values;\n\n if (isDuplicate) {\n // handle existing CUSTOMER account\n // add new customerReloadyardAccount record\n if (data.active === \"false\") {\n // comes from reloadYardAccount?.active\n // update inactive reloadYardAccount\n const reloadYardAccount = data.reloadYardAccounts.items[0];\n reloadYardAccount.active = \"true\"; // re-activate inactive customer record\n reloadYardAccount.customerId = data.id;\n reloadYardAccount.email = data.email;\n reloadYardAccount.lastName = data.lastName;\n // reloadYardAccount.reloadYardId = window.appUser.reloadYardId;\n // reloadYardAccount.accountId = account? account.id : data.accountId;\n reloadYardAccount.accountName = account\n ? account.businessName\n : data.accountName;\n\n await doUpdateReloadYardAccount(reloadYardAccount);\n } else {\n // create new reloadYardAccount\n await doCreateReloadYardAccount(data, formData.acl, account);\n }\n\n emailContent = emailCustomerInviteHTML(\n data.firstName,\n data.email,\n window.appUser?.firstName,\n window.appUser?.reloadYard.name\n );\n } else {\n // comes from transform\n await doCreateReloadYardAccount(data, formData.acl, account);\n\n emailContent = emailInviteHTML(\n data.firstName,\n data.email,\n window.appUser?.firstName,\n window.appUser?.reloadYard.name\n );\n }\n\n const response = await API.post(\"transREST\", \"/sendEmail\", {\n body: {\n to: data.email,\n bcc: [\"support@transloads.co\"],\n // replyTo: getReplyToAddress(),\n subject: \"Your transloads.co Invite Is Waiting\",\n template: \"emailTemplate.html\",\n htmlContent: emailContent,\n },\n });\n\n if (response.error) {\n throw response.error;\n } else {\n notify(`User created successfully.`);\n redirect(\"/customers\");\n }\n } catch (error) {\n logError(\n \"managerApp:customers:DialogCreateButton:onSuccess\",\n error,\n notify\n );\n } finally {\n setIsSaving(false);\n }\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\n \"managerApp:customers:DialogCreateButton:onFailure\",\n error,\n notify\n );\n };\n\n return (\n <>\n <Backdrop className={classes.backdrop} open={isSaving}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n <SaveButton\n {...props}\n submitOnEnter={false}\n undoable={false}\n saving={isSaving}\n handleSubmitWithRedirect={handleValidateSave}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <Confirm\n isOpen={open}\n title=\"Save Confirmation\"\n content={message}\n onConfirm={handleDialogCconfirm}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","export function emailCustomerInviteHTML(toName, toEmail, fromName, yardName) {\n return `<!-- Begin HTML Content -->\n <h1> Hi ${toName} <br></h1>\n <hr style=\"background:#2d8cff; height: 8px; width: 60px; border-style: solid; border-color: #095484; border-width: 1px 0 0 0; border-radius: 8px;\" />\n <br><br>\n ${fromName} at ${yardName} is inviting you to join transloads.co.\n No action is required since you already have an account under this email address: <br>\n ${toEmail} <br>\n Next time you login to your account, you will have access to data at ${yardName}.\n <br><br><br>\n <table bgcolor=\"#FF5F0F\" style=\"border-radius:3px; border-spacing:0; margin:0 auto\">\n <tbody>\n <tr style=\"background:#FF5F0F;\">\n <td class=\"mobile-cta\" style=\"border: 0 solid #FF5F0F; display: inline-block; padding: 20px 45px; text-align: center; font-family:'Lato', Helvetica, sans-serif; font-size:15px; line-height:24px; color:#FFFFFF; font-weight:900; text-decoration: none; text-transform: uppercase; letter-spacing: .2em\">\n <a href=\"https://app.transloads.co/?signIn\"\n target=\"_blank\"\n rel=\"noreferrer\"\n style=\"color:#FFFFFF; text-decoration:none;\"\n >\n SIGN IN\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n <br><br>\n <hr style=\"border-bottom:#CCCCCC 6px dotted; border-width: 0 0 6px 0;\">\n <br>\n Button not working? Try pasting this URL into your browser: <br>\n <strong>\n <a href=\"https://app.transloads.co/?signIn\"\n target=\"_blank\"\n rel=\"noreferrer\"\n style=\"color: #2d8cff; text-decoration:none; word-break: break-all;\"\n >\n https://app.transloads.co/?signIn\n </a>\n </strong>\n <!-- End HTML Content -->`;\n}\n","import React, { useState } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { getAccount } from \"../../../graphql/account/custom-queries\";\n\nimport { Grid, MenuItem, TextField as TextFieldMui } from \"@material-ui/core\";\n\nimport {\n CheckboxGroupInput,\n Create,\n email,\n FormDataConsumer,\n maxLength,\n minLength,\n regex,\n required,\n SimpleForm,\n TextInput,\n Toolbar,\n TopToolbar,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { getUserTypeAcls, logError } from \"../../../utils/appUtils\";\nimport { REGEX_PHONE, UserType } from \"../../../utils/constants\";\nimport { CustomerCreateHelp } from \"./CustomerHelp\";\nimport { DialogCreateButton } from \"./DialogCreateButton\";\nimport { NewBadge } from \"../../../components/common/FeatureBadges\";\nimport { AccountDropDown } from \"../../../components/common/AccountDropDown\";\n\nconst validateRequired = required();\nconst validateEmail = [required(), email()];\nconst validatePhone = [\n regex(REGEX_PHONE, \"Must be valid Phone No.\"),\n minLength(10),\n maxLength(20),\n];\n\nconst handleAccountChange = async (value, setContacts, setAccount, notify) => {\n const accountId = value?.id;\n if (accountId) {\n try {\n debugger;\n const response = await API.graphql(\n graphqlOperation(getAccount, { id: accountId })\n );\n const account = response.data.getAccount;\n setContacts(account.contacts);\n setAccount(account);\n } catch (err) {\n logError(\"managerApp:CustomerCreate:handleAccountChange\", err, notify);\n }\n }\n};\n\nconst ContactList = ({ form, contacts }) => {\n const [selectedContact, setSelectedContact] = useState({ id: \"\", name: \"\" });\n\n const handleContactChange = (event) => {\n debugger;\n const value = event.target.value;\n setSelectedContact(value);\n\n if (value?.name) {\n const [firstName, ...rest] = value.name.split(\" \");\n const lastName = rest.pop(); // Extracts the last name\n form.change(\"firstName\", firstName);\n form.change(\"lastName\", lastName);\n form.change(\"email\", value.email);\n form.change(\"phone\", value.phone);\n } else {\n form.change(\"firstName\", \"\");\n form.change(\"lastName\", \"\");\n form.change(\"email\", \"\");\n form.change(\"phone\", \"\");\n }\n };\n\n if (contacts?.length > 0)\n return (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <TextFieldMui\n select\n label=\"Contacts\"\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={selectedContact}\n onChange={handleContactChange}\n helperText={\" \"}\n >\n {[\n <MenuItem key=\"\" value=\"\">\n <span>​Select a contact...</span>\n </MenuItem>,\n ...contacts.map((itm) => (\n <MenuItem key={itm.email} value={itm}>\n {itm.name}\n </MenuItem>\n )),\n ]}\n </TextFieldMui>\n </Grid>\n </Grid>\n );\n return null;\n};\n\nconst UserCreateForm = ({ setAccount, notify, ...props }) => {\n const form = useForm();\n const aclList = getUserTypeAcls(UserType.CUSTOMER);\n const [contacts, setContacts] = useState([]);\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container spacing={5}>\n <Grid item xs={12} md={8}>\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n {window.appUser.type !== UserType.CUSTOMER && (\n <Grid item xs={12} lg={6}>\n <AccountDropDown\n source=\"accountId\"\n label=\"Account\"\n onAccountChange={(value) =>\n handleAccountChange(\n value,\n setContacts,\n setAccount,\n notify\n )\n }\n validate={validateRequired}\n allowEmpty={false}\n />\n </Grid>\n )}\n </Grid>\n <ContactList form={form} contacts={contacts} />\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"firstName\"\n label=\"First Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"lastName\"\n label=\"Last Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"email\"\n type=\"email\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toLowerCase() : undefined)}\n validate={validateEmail}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"phone\"\n type=\"tel\"\n variant=\"outlined\"\n fullWidth\n validate={validatePhone}\n />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} md={4}>\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n {aclList?.length > 0 && (\n <Grid item xs={12}>\n <CheckboxGroupInput\n source=\"acl\"\n label={\n <>\n Access Permissions{\" \"}\n <NewBadge label=\"Access Permissions\" />\n </>\n }\n row={false}\n fullWidth\n choices={aclList}\n />\n </Grid>\n )}\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst UserCreateActions = (props) => (\n <TopToolbar>\n <HelpButton>\n <CustomerCreateHelp {...props} />\n </HelpButton>\n <BackButton {...props} />\n </TopToolbar>\n);\n\nconst UserCreateToolbar = ({ account, ...props }) => (\n <Toolbar {...props}>\n <DialogCreateButton account={account} />\n </Toolbar>\n);\n\nexport const CustomerCreate = (props) => {\n const notify = useNotify();\n const [account, setAccount] = useState();\n\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New User\" />}\n actions={<UserCreateActions />}\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={<UserCreateToolbar account={account} />}\n >\n <UserCreateForm {...props} setAccount={setAccount} notify={notify} />\n </SimpleForm>\n </Create>\n );\n};\n","export function emailDeleteHTML(fromEmail, fromName, reloadYardName) {\n return `<!-- Begin HTML Content -->\n <br>\n ${fromName} has removed your access to ${reloadYardName} on transloads.co <br/>\n If you believe this was done by mistake, please contact ${fromName} at the following email address: <br/>\n ${fromEmail} <br/>\n <br/>\n <hr style=\"border-bottom:#CCCCCC 6px dotted; border-width: 0 0 6px 0;\">\n <br>\n If we can be of service to you, please don't hesitate to contact us at:<br/>\n <a href=\"mailto:support@transloads.co\">support@transloads.co</a> <br/>\n or <br/>\n (877) TRANSLOAD / (877) 872-6756\n <br/>\n <!-- End HTML Content -->`;\n}\n","import React, { useState } from \"react\";\n\nimport { Button, Confirm, useNotify, useRedirect } from \"react-admin\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport { DeleteIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { doUpdateReloadYardAccount, sendEmails } from \"./customerUtils\";\nimport { emailDeleteHTML } from \"./emailDeleteHTML\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeepDeleteButton = ({ record, className, ...props }) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const classes = useStyles();\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const isDeleteDisabled = () => {\n return loading;\n };\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n const handleDelete = async (event) => {\n setLoading(true);\n try {\n debugger;\n // Update customer active = \"false\", tirggers lambda function \"/processCustomer\"\n // Only one reloadYardAccount / customer / reloadYard\n let reloadYardAccount = record?.reloadYardAccounts?.items[0];\n reloadYardAccount.active = \"false\";\n delete reloadYardAccount.createdAt;\n delete reloadYardAccount.updatedAt;\n\n await doUpdateReloadYardAccount(reloadYardAccount);\n\n // send silently don't await\n sendEmails(\n {\n email: window.appUser.email,\n firstName: window.appUser.firstName,\n lastName: window.appUser.lastName,\n reloadYardName: window.appUser.reloadYard.name,\n },\n emailDeleteHTML\n );\n\n notify(\"User deleted successfully\");\n redirect(\"/customers\");\n } catch (error) {\n logError(\n \"managerApp:customers:DeepDeleteButton:handleDelete\",\n error,\n notify\n );\n } finally {\n setLoading(false);\n setOpen(false);\n }\n };\n\n return (\n <>\n <Button\n {...props}\n label=\"Delete\"\n disabled={isDeleteDisabled()}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={loading}\n title={\"Delete Confirmation\"}\n content={\"Are you sure you want to delete this User?\"}\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { SaveButton, useNotify, useRedirect } from \"react-admin\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { doUpdateReloadYardAccount } from \"./customerUtils\";\n\nexport const ValidateSaveButton = ({ record, acls, ...props }) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const [isSaving, setIsSaving] = useState(false);\n\n const transform = (data) => {\n data = { ...data };\n debugger;\n\n data.email = data.email.toLowerCase();\n\n delete data.accountId;\n delete data.reloadYardAccounts;\n\n return data;\n };\n\n const onSuccess = async ({ data }) => {\n debugger;\n try {\n const reloadYardAccount = {\n ...data.reloadYardAccounts.items[0],\n acl: acls,\n };\n await doUpdateReloadYardAccount(reloadYardAccount);\n\n notify(`User updated successfully.`);\n redirect(\"/customers\");\n } catch (error) {\n logError(\n \"managerApp:customers:ValidateSaveButton:onSuccess\",\n error,\n notify\n );\n } finally {\n setIsSaving(false);\n }\n };\n\n const onFailure = (error) => {\n setIsSaving(false);\n logError(\n \"managerApp:customers:ValidateSaveButton:onFailure\",\n error,\n notify\n );\n };\n\n return (\n <SaveButton\n {...props}\n submitOnEnter={false}\n undoable={false}\n disabled={props.pristine}\n saving={isSaving}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n );\n};\n","import React from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport {\n Card,\n CardContent,\n Grid,\n makeStyles,\n Typography,\n} from \"@material-ui/core\";\n\nimport { SelectField } from \"react-admin\";\n\nimport { AclType, UserStatuses } from \"../../../utils/constants\";\nimport { UserStatusIcon } from \"../users/UserStatusIcon\";\nimport { isAuthorized } from \"../../../utils/appUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n width: \"16em\",\n minWidth: \"16em\",\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(0.5),\n overflow: \"initial\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n statusIcon: {\n marginTop: theme.spacing(-0.3),\n },\n}));\n\nexport const CustomerAside = ({ backPath, record, ...props }) => {\n const classes = useStyles();\n const account = record?.reloadYardAccounts?.items[0];\n const linkBackPath = backPath\n ? [...backPath, props.location.pathname]\n : [props.location.pathname];\n\n if (!record) return null;\n return (\n <Card className={classes.root}>\n <CardContent>\n <Grid container direction=\"column\" spacing={1}>\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Status:\n </Typography>\n <Grid container direction=\"row\">\n <Grid item xs={2}>\n <UserStatusIcon record={record} classes={classes.statusIcon} />\n </Grid>\n <Grid item xs={10} className={classes.status}>\n <SelectField\n source=\"status\"\n record={record}\n choices={UserStatuses}\n />\n </Grid>\n </Grid>\n </Grid>\n {account && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\">\n Account:\n </Typography>\n <br />\n {isAuthorized(AclType.ACCOUNTS) ? (\n <Link\n to={{\n pathname: `/accounts/${account.accountId}`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {account.accountName}\n </Typography>\n </Link>\n ) : (\n <Link\n to={{\n pathname: `/accounts/${account.accountId}/show`,\n state: { backPath: linkBackPath },\n }}\n >\n <Typography variant=\"body2\" color=\"primary\">\n {account.accountName}\n </Typography>\n </Link>\n )}\n </Grid>\n )}\n </Grid>\n </CardContent>\n </Card>\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { Grid } from \"@material-ui/core\";\n\nimport {\n CheckboxGroupInput,\n Edit,\n FormDataConsumer,\n maxLength,\n minLength,\n regex,\n required,\n SimpleForm,\n TextInput,\n Toolbar,\n TopToolbar,\n useEditController,\n} from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { getUserTypeAcls } from \"../../../utils/appUtils\";\nimport { REGEX_PHONE, UserType } from \"../../../utils/constants\";\nimport { getBackPath } from \"../../../utils/utils\";\nimport { CustomerEditHelp } from \"./CustomerHelp\";\nimport { DeepDeleteButton } from \"./DeepDeleteButton\";\nimport { ValidateSaveButton } from \"./ValidateSaveButton\";\nimport { CustomerAside } from \"./CustomerAside\";\nimport { NewBadge } from \"../../../components/common/FeatureBadges\";\n\nconst validateRequired = required();\nconst validatePhone = [\n regex(REGEX_PHONE, \"Must be valid Phone No.\"),\n minLength(10),\n maxLength(20),\n];\n\nconst CustomerEditForm = ({ record, setAcls, ...props }) => {\n const aclList = getUserTypeAcls(UserType.CUSTOMER);\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container spacing={5}>\n <Grid item xs={12} md={8}>\n <Grid container direction=\"column\" spacing={1}>\n {window.appUser.type !== UserType.CUSTOMER && (\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} lg={6}>\n <TextInput\n source=\"reloadYardAccounts.items[0].accountName\"\n label=\"Account\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n disabled={true}\n />\n </Grid>\n </Grid>\n )}\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"firstName\"\n label=\"First Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n disabled={window.appUser.type !== UserType.CUSTOMER}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"lastName\"\n label=\"Last Name\"\n variant=\"outlined\"\n fullWidth\n validate={validateRequired}\n disabled={window.appUser.type !== UserType.CUSTOMER}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"email\"\n type=\"email\"\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v !== \"\" ? v.toLowerCase() : undefined)}\n disabled={true}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"phone\"\n type=\"tel\"\n variant=\"outlined\"\n fullWidth\n validate={validatePhone}\n disabled={window.appUser.type !== UserType.CUSTOMER}\n />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} md={4}>\n <Grid container direction=\"column\" spacing={1}>\n {aclList?.length > 0 && (\n <Grid item xs={12}>\n <CheckboxGroupInput\n source=\"reloadYardAccounts.items[0].acl\"\n label={\n <>\n Access Permissions{\" \"}\n <NewBadge label=\"Access Permissions\" />\n </>\n }\n row={false}\n fullWidth\n choices={aclList}\n onChange={(value) => setAcls(value)}\n />\n </Grid>\n )}\n </Grid>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n\nconst CustomerEditActions = (props) => (\n <TopToolbar>\n <HelpButton>\n <CustomerEditHelp {...props} />\n </HelpButton>\n <BackButton {...props} />\n </TopToolbar>\n);\n\nconst CustomerEditToolbar = ({ record, acls, ...props }) => (\n <Toolbar style={{ justifyContent: \"space-between\" }} {...props}>\n <ValidateSaveButton {...props} record={record} acls={acls} />\n <DeepDeleteButton record={record} />\n </Toolbar>\n);\n\nexport const CustomerEdit = (props) => {\n const { record } = useEditController(props);\n const [acls, setAcls] = useState(\n record?.reloadYardAccounts?.items[0]?.acl || []\n );\n const backPath = getBackPath(props);\n\n useEffect(() => {\n if (record?.reloadYardAccounts?.items?.length > 0) {\n setAcls(record.reloadYardAccounts.items[0].acl || []);\n }\n }, [record]);\n\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit User\" />}\n mutationMode=\"pessimistic\"\n actions={<CustomerEditActions backPath={backPath} />}\n aside={<CustomerAside {...props} backPath={backPath} />}\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={<CustomerEditToolbar record={record} acls={acls} />}\n >\n <CustomerEditForm record={record} setAcls={setAcls} />\n </SimpleForm>\n </Edit>\n );\n};\n","import React from \"react\";\n\nimport { Typography } from \"@material-ui/core\";\n\nconst Help = () => (\n <>\n <Typography variant=\"subtitle1\">\n Use the Document Repository to upload important documnets which you need\n to quickly find and identity. For instance, you can upload MSDS sheets or\n other Safety documents and instructions which need to be easily accessible\n by the Crews in the field.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Upload File: </strong>\n Drop a File or click to select and attach.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Display Name: </strong>\n Document name to be displayed in the Document Repository. Defaults to\n raw file name, but we recommend using a more descriptive, short name.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Document Category: </strong>\n Optional - group your documents into distinct categories. You can add\n new Category directly from the dropdown, by selecting \"Add new\n category...\", or from the ATTACHMENTS tab in My Yard setup.\n </Typography>\n </li> \n <li>\n <Typography>\n <strong>Description: </strong>\n Searchable notes applicable to this document. Include keywords which\n you might use in the future when searching for this document.\n </Typography>\n </li>\n </ul>\n </>\n);\n\nexport const FileHelp = ({ ...props }) => {\n var { location } = props;\n var tabIdx = /[^/]*$/.exec(location.pathname)[0];\n var tab = tabIdx.length === 1 ? tabIdx : \"0\";\n\n switch (tab) {\n case \"0\":\n return <Help />;\n default:\n return null;\n }\n};\n","import React, { useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\n\nimport { updateReloadYard } from \"../../../graphql/mutations\";\n\nimport { useCreateSuggestionContext, useNotify } from \"react-admin\";\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n TextField,\n} from \"@material-ui/core\";\n\nimport { logError } from \"../../../utils/appUtils\";\n\nexport const CreateCategory = ({ setCategoryOptions, ...props }) => {\n const notify = useNotify();\n const { filter, onCancel, onCreate } = useCreateSuggestionContext();\n const [value, setValue] = React.useState(filter || \"\");\n const [error, setError] = useState(false);\n\n const handleSubmit = async (event) => {\n event.preventDefault();\n\n try {\n setError(false);\n debugger;\n\n const newCategory = { key: value.toLowerCase(), name: value };\n const isDuplicate = window.appUser?.reloadYard?.fileCategories?.some(\n (itm) => itm.key === newCategory.key\n );\n\n if (isDuplicate) {\n setError(\"Duplicate entry.\");\n } else if (window.appUser?.reloadYard) {\n let newCategories = undefined;\n if (window.appUser.reloadYard.fileCategories)\n newCategories = [\n ...window.appUser.reloadYard.fileCategories,\n newCategory,\n ];\n else newCategories = [newCategory];\n\n await API.graphql(\n graphqlOperation(updateReloadYard, {\n input: {\n id: window.appUser?.reloadYardId,\n active: window.appUser.reloadYard.active,\n name: window.appUser.reloadYard.name,\n fileCategories: newCategories,\n },\n })\n );\n\n window.appUser.reloadYard.fileCategories = newCategories;\n setCategoryOptions(newCategories);\n setValue(\"\");\n onCreate(newCategory);\n }\n } catch (err) {\n logError(\"documents:CreateCategory:handleSubmit\", err, notify);\n }\n };\n\n return (\n <Dialog open onClose={onCancel}>\n <form onSubmit={handleSubmit}>\n <DialogContent>\n <TextField\n label=\"New category name\"\n variant=\"outlined\"\n margin=\"dense\"\n value={value}\n onChange={(event) => setValue(event.target.value)}\n autoFocus\n error={error ? true : false}\n helperText={error}\n />\n </DialogContent>\n <DialogActions>\n <Button type=\"submit\">Save</Button>\n <Button onClick={onCancel}>Cancel</Button>\n </DialogActions>\n </form>\n </Dialog>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { filesByRawName } from \"../../../graphql/queries\";\n\nimport {\n useNotify,\n FileInput,\n SelectInput,\n TextInput,\n required,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { Grid } from \"@material-ui/core\";\n\nimport {\n ACCEPTED_FILES,\n FileVisibilityOptions,\n MAX_FILE_SIZE,\n MAX_FILE_SIZE_MSG,\n UserFileVisibility,\n UserType,\n} from \"../../../utils/constants\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { AttachFileIcon } from \"../../../components/common\";\nimport { FileField } from \"../../../components/common/FileField\";\nimport { CreateCategory } from \"./CreateCategory\";\n\nconst validateFileUnicity = async (value, record) => {\n debugger;\n if (value && value.path) {\n try {\n let resp = await API.graphql(\n graphqlOperation(filesByRawName, {\n reloadYardId: window.appUser?.reloadYardId,\n rawFileName: { beginsWith: value.path },\n })\n );\n\n if (\n resp.data.filesByRawName.items.length !== 0 &&\n value.path !== record.rawFileName\n ) {\n // return a validator-like object: { message: 'File %{file} already exists', args: { file: value.rawFile.name } }\n return { message: `File ${value.path} already exists` };\n }\n } catch (error) {\n logError(\"files:FileSetupTab:validateFileUnicity\", error, false);\n }\n }\n return null;\n};\n\nconst validateRequired = required();\n\nexport const FileSetupTab = (props) => {\n const form = useForm();\n const notify = useNotify();\n const [categoryOptions, setCategoryOptions] = useState(\n window.appUser?.reloadYard?.fileCategories || []\n );\n\n // Subscribe to field state updates for 3rd party inputs\n form.registerField(\n \"accountName\",\n (fieldState) => {\n const { blur, change, focus, ...rest } = fieldState;\n },\n { active: true, dirty: true, touched: true, valid: true, value: true }\n );\n\n const handleFileChange = async (value) => {\n debugger;\n const nameState = form.getFieldState(\"displayName\");\n const displayName = nameState.value;\n\n const isDuplicate = await validateFileUnicity(value, props.record);\n if (value?.size > MAX_FILE_SIZE) {\n notify(MAX_FILE_SIZE_MSG, \"warning\");\n form.change(\"file\", null);\n } else if (isDuplicate) {\n notify(isDuplicate.message, \"warning\");\n form.change(\"file\", null);\n } else if (!displayName || displayName === \"\")\n form.change(\"displayName\", value?.name);\n };\n\n return (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <FileInput\n source=\"file\"\n label=\"UPLOAD FILE\"\n variant=\"outlined\"\n fullWidth\n placeholder={\n <p>\n <AttachFileIcon fontSize=\"large\" /> <br /> Drop a File to\n upload, or click to select it.\n </p>\n }\n accept={ACCEPTED_FILES}\n onChange={handleFileChange}\n validate={validateRequired}\n >\n <FileField source=\"src\" title=\"title\" target=\"_blank\" />\n </FileInput>\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput\n source=\"displayName\"\n label=\"Display Name\"\n variant=\"outlined\"\n fullWidth\n resettable\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"category\"\n label=\"Document Category\"\n variant=\"outlined\"\n fullWidth\n choices={categoryOptions}\n optionValue=\"key\"\n allowEmpty\n createLabel=\"Add new category...\"\n create={<CreateCategory setCategoryOptions={setCategoryOptions} />}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <SelectInput\n source=\"visibility\"\n label=\"Visible To\"\n variant=\"outlined\"\n fullWidth\n choices={FileVisibilityOptions}\n initialValue={UserFileVisibility[UserType.CREW]}\n validate={validateRequired}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n source=\"description\"\n label=\"Description\"\n variant=\"outlined\"\n multiline\n minRows=\"5\"\n fullWidth\n />\n </Grid>\n </Grid>\n </Grid>\n );\n};\n","import React from \"react\";\nimport { API, Storage } from \"aws-amplify\";\n\nimport {\n useNotify,\n useRedirect,\n Create,\n SaveButton,\n SimpleForm,\n Toolbar,\n TopToolbar,\n} from \"react-admin\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { getDirFileKey } from \"../../../utils/fileUtils\";\nimport { FilePaths } from \"../../../utils/constants\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { FileHelp } from \"./FileHelp\";\nimport { FileSetupTab } from \"./FileSetupTab\";\n\nconst FileCreateActions = ({ basePath, data, resource, ...props }) => (\n <TopToolbar>\n <HelpButton>\n <FileHelp {...props} />\n </HelpButton>\n <BackButton basePath={basePath} />\n </TopToolbar>\n);\n\nexport const FileCreate = (props) => {\n const notify = useNotify();\n const redirect = useRedirect();\n\n const transform = async (data) => {\n data = { ...data };\n try {\n debugger;\n const key = getDirFileKey(data.file.rawFile, FilePaths.DOCUMENTS);\n const response = await Storage.put(key, data.file.rawFile, {\n level: \"public\",\n contentType: data.file.rawFile.type,\n });\n\n if (response.key) {\n data.active = \"true\";\n data.groups = window.appUser?.groups;\n data.reloadYardId = window.appUser?.reloadYardId;\n data.rawFileName = data.file.rawFile.name;\n\n if (data.file.rawFile.lastModifiedDate)\n data.contentDate = data.file.rawFile.lastModifiedDate;\n\n data.file = {\n bucket: API._options.aws_user_files_s3_bucket,\n region: API._options.aws_user_files_s3_bucket_region,\n key: response.key,\n };\n } else throw new Error(`Storage.put failed: ${key}`);\n } catch (error) {\n logError(\"files:FileCreate:transform\", error, notify);\n return Promise.reject();\n }\n\n delete data.fileCategories;\n\n return data;\n };\n\n const onSuccess = async (data) => {\n notify(\"File created successfully\");\n redirect(\"list\", props.basePath);\n };\n\n const onFailure = (error) => {\n logError(\"files:FileCreate:onFailure\", error, notify);\n };\n\n const FileCreateToolbar = (props) => (\n <Toolbar {...props}>\n <SaveButton\n label=\"Save\"\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n </Toolbar>\n );\n\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New Document\" />}\n actions={<FileCreateActions {...props} />}\n >\n <SimpleForm submitOnEnter={false} toolbar={<FileCreateToolbar />}>\n <FileSetupTab />\n </SimpleForm>\n </Create>\n );\n};\n","import React, { useState } from \"react\";\nimport { Storage } from \"aws-amplify\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport {\n useDataProvider,\n useNotify,\n useRedirect,\n Button,\n Confirm,\n} from \"react-admin\";\n\nimport { DeleteIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeepDeleteButton = ({ record, resource, className, ...props }) => {\n const classes = useStyles();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n const { basePath } = props;\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n const handleDelete = async (event) => {\n setLoading(true);\n let toUpdateRecord = null;\n debugger;\n\n try {\n debugger;\n await Storage.remove(record.file.key);\n await dataProvider.delete(resource, {\n id: record.id,\n previousData: record,\n });\n\n notify(\"File deleted successfully\");\n redirect(basePath);\n } catch (err) {\n logError(\n \"files:DeepDeleteButton:handleDelete:\" + JSON.stringify(toUpdateRecord),\n err,\n notify\n );\n }\n\n setLoading(false);\n setOpen(false);\n };\n\n return (\n <>\n <Button\n {...props}\n label=\"Delete\"\n disabled={loading}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={loading}\n title={\"Delete Confirmation\"}\n content={\"Are you sure you want to delete this File?\"}\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { API, Storage } from \"aws-amplify\";\n\nimport {\n useNotify,\n useRedirect,\n useEditController,\n Edit,\n Loading,\n SaveButton,\n SimpleForm,\n Toolbar,\n TopToolbar,\n} from \"react-admin\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { getDirFileKey, removeFile } from \"../../../utils/fileUtils\";\nimport { FilePaths } from \"../../../utils/constants\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { FileHelp } from \"./FileHelp\";\nimport { DeepDeleteButton } from \"./DeepDeleteButton\";\nimport { FileSetupTab } from \"./FileSetupTab\";\n\nconst FileEditActions = ({ notify, basePath, data, resource, ...props }) => {\n return (\n <TopToolbar>\n <HelpButton>\n <FileHelp {...props} />\n </HelpButton>\n <BackButton basePath={basePath} />\n </TopToolbar>\n );\n};\n\nexport const FileEdit = (props) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const { record } = useEditController(props);\n\n const transform = async (data) => {\n data = { ...data };\n try {\n debugger;\n if (!data.file) await removeFile(record, data, \"file\");\n else if (data.file && !data.file.key) {\n if (record.file) await removeFile(record, null, \"file\");\n\n const key = getDirFileKey(data.file.rawFile, FilePaths.DOCUMENTS);\n const response = await Storage.put(key, data.file.rawFile, {\n level: \"public\",\n contentType: data.file.rawFile.type,\n });\n\n if (response.key) {\n data.rawFileName = data.file.rawFile.name;\n if (data.file.rawFile.lastModifiedDate)\n data.contentDate = data.file.rawFile.lastModifiedDate;\n\n data.file = {\n bucket: API._options.aws_user_files_s3_bucket,\n region: API._options.aws_user_files_s3_bucket_region,\n key: response.key,\n };\n } else throw new Error(`Storage.put failed: ${key}`);\n }\n\n if (data.file) {\n delete data.file.src;\n delete data.file.title;\n }\n } catch (error) {\n logError(\"files:FileEdit:transform\", error, notify);\n return Promise.reject();\n }\n\n delete data.fileCategories;\n\n return data;\n };\n\n const onSuccess = async (data) => {\n notify(\"File updated successfully\");\n redirect(\"list\", props.basePath);\n };\n\n const onFailure = (error) => {\n logError(\"files:FileEdit:onFailure\", error, notify);\n };\n\n const FileEditToolbar = (props) => (\n <Toolbar\n style={{ justifyContent: \"space-between\" }}\n record={record}\n {...props}\n >\n <SaveButton\n label=\"Save\"\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <DeepDeleteButton />\n </Toolbar>\n );\n\n if (!record) return <Loading />;\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Document\" />}\n mutationMode=\"pessimistic\"\n actions={<FileEditActions notify={notify} {...props} />}\n >\n <SimpleForm submitOnEnter={false} toolbar={<FileEditToolbar />}>\n <FileSetupTab />\n </SimpleForm>\n </Edit>\n );\n};\n","import React, { useState } from \"react\";\nimport { API, graphqlOperation, Storage } from \"aws-amplify\";\nimport { deleteFile } from \"../../../graphql/mutations\";\n\nimport {\n useListContext,\n useRefresh,\n useNotify,\n // useUnselectAll,\n Button,\n} from \"react-admin\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport { DeleteIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const BulkDeepDeleteButton = ({ className, ...props }) => {\n const classes = useStyles();\n const notify = useNotify();\n const refresh = useRefresh();\n\n const {\n // fetched data\n data, // an id-based dictionary of the list data, e.g. { 123: { id: 123, title: 'hello world' }, 456: { ... } }\n selectedIds, // an array listing the ids of the selected rows, e.g. [123, 456]\n onUnselectItems,\n } = useListContext();\n\n const [loading, setLoading] = useState(false);\n const deleteFiles = async () => {\n try {\n setLoading(true);\n debugger;\n\n await Promise.allSettled(\n selectedIds.map((fileId) => {\n const record = data[fileId];\n if (record) return Storage.remove(record.file.key);\n })\n );\n\n await Promise.all(\n selectedIds.map((fileId) => {\n return API.graphql(\n graphqlOperation(deleteFile, { input: { id: fileId } })\n );\n })\n );\n\n notify(\"Files deleted successfully.\", \"info\");\n onUnselectItems();\n refresh();\n } catch (error) {\n logError(\"files:BulkDeepDeleteButton:deleteFiles\", error, notify);\n }\n\n setLoading(false);\n };\n\n const handleUpdate = (e) => {\n e.stopPropagation();\n e.nativeEvent.stopImmediatePropagation();\n deleteFiles();\n };\n\n return (\n <Button\n label=\"Delete\"\n disabled={loading}\n onClick={handleUpdate}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { useMediaQuery, Card } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport classnames from \"classnames\";\n\nimport {\n useListContext,\n BulkActionsToolbar,\n // Content,\n CreateButton,\n Datagrid,\n DateField,\n DateInput,\n EditButton,\n FilterButton,\n FunctionField,\n ListContextProvider,\n ListToolbar,\n RefreshButton,\n SelectField,\n SelectInput,\n SimpleList,\n TextField,\n Title,\n TopToolbar,\n} from \"react-admin\";\n\nimport { isSubscriptionDisabled } from \"../../../utils/appUtils\";\nimport { ChevronRightIcon } from \"../../../components/common\";\nimport { Empty } from \"../../../components/common/Empty\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { SearchField } from \"../../../components/common/SearchField\";\nimport { Pagination } from \"../../../components/Pagination\";\nimport { useSearchableList } from \"../../../dataProvider/useSearchableList\";\nimport { BulkDeepDeleteButton } from \"./BulkDeepDeleteButton\";\nimport { FileVisibilityOptions } from \"../../../utils/constants\";\n\nconst useStyles = makeStyles((theme) => ({\n listRoot: {\n transition: theme.transitions.create([\"all\"], {\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginTop: 0,\n },\n bulkActions: {\n // [classes.bulkActions] remove to restore original behavior\n marginTop: -theme.spacing(8),\n transition: theme.transitions.create(\"margin-top\"),\n },\n actions: {\n zIndex: 2,\n display: \"flex\",\n justifyContent: \"flex-end\",\n flexWrap: \"wrap\",\n },\n}));\n\nconst FileSearchField = (props) => {\n const listContext = useListContext(props);\n const { displayedFilters, filterValues, setFilters } = listContext;\n const { label, alwaysOn } = props;\n\n const handleSearch = (value) => {\n debugger;\n if (value) {\n delete filterValues.or;\n setFilters(\n {\n ...filterValues,\n or: [\n { displayName: { matchPhrasePrefix: `${value}` } },\n { displayName: { wildcard: `*${value}*` } },\n { rawFileName: { matchPhrasePrefix: `${value}` } },\n { rawFileName: { wildcard: `*${value}*` } },\n { description: { matchPhrasePrefix: `${value}` } },\n ],\n },\n displayedFilters\n );\n } else {\n delete filterValues.or;\n setFilters(filterValues, displayedFilters);\n }\n };\n\n return (\n <SearchField\n id=\"searchTerm\"\n label={label}\n margin=\"dense\"\n variant=\"outlined\"\n alwaysOn={alwaysOn}\n handleSearch={handleSearch}\n />\n );\n};\n\nconst getListFilters = (isMedium) => [\n <FileSearchField label=\"Search\" alwaysOn />,\n <SelectInput\n source=\"category.eq\"\n label=\"Category\"\n variant=\"outlined\"\n resettable\n alwaysOn={!isMedium}\n choices={window.appUser?.reloadYard?.fileCategories || []}\n optionValue=\"key\"\n />,\n <DateInput\n source=\"contentDate.lte\"\n label=\"Last Modified before...\"\n variant=\"outlined\"\n resettable\n onKeyPress={(event) => event.preventDefault()}\n />,\n];\n\nconst BulkListActions = (props) => <BulkDeepDeleteButton {...props} />;\n\nconst ListActions = (props) => {\n const { isXSmall, basePath } = props;\n\n return !isXSmall ? (\n <TopToolbar>\n <FilterButton />\n <CreateButton basePath={basePath} disabled={isSubscriptionDisabled()} />\n <RefreshButton color=\"secondary\" />\n </TopToolbar>\n ) : null;\n};\n\nexport const FileList = (props) => {\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const isMedium = useMediaQuery((theme) => theme.breakpoints.down(\"md\"));\n\n // Example:\n // reloadYardId: window.appUser.reloadYardId\n // statusDueDate: { beginsWith: {status: 'NEW'} },\n const [defaultFilter] = useState({\n reloadYardId: window.appUser.reloadYardId,\n });\n\n // Example:\n // reloadYardId: { eq: window.appUser.reloadYardId }\n // status: {eq: 'STORED'}\n const defaultSearchFilter = {\n reloadYardId: { eq: window.appUser.reloadYardId },\n };\n\n // Include key & search to display default sort order.\n const defaultSort = {\n field: `{\"key\":\"filesByName\", \"search\":\"displayName\"}`,\n order: \"ASC\",\n };\n\n // memorize perPage settings\n // see useEffect [listContext?.perPage]) below\n const sessionPerPage = localStorage.getItem(`${props.resource}_perPage`);\n const [defaultPerPage, setDefaultPerPage] = useState(\n sessionPerPage ? Number(sessionPerPage) : 10\n );\n\n const listContext = useSearchableList({\n ...props,\n basePath: \"/files\",\n defaultTitle: \"Documents\",\n defaultSearchFilter,\n defaultFilter,\n defaultPerPage,\n defaultSort,\n resource: \"files\",\n });\n\n useEffect(() => {\n if (listContext?.perPage) {\n localStorage.setItem(`${props.resource}_perPage`, listContext.perPage);\n setDefaultPerPage(Number(listContext.perPage));\n }\n }, [listContext?.perPage]);\n\n useEffect(() => {\n if (listContext?.filter) {\n // Extract the key query from defaultSort\n const fieldObj = JSON.parse(defaultSort.field);\n const keyToCheck = fieldObj.key;\n\n // Check for the key's presence in filter\n const hasKey = keyToCheck in listContext.filter;\n const hasFilterValues = Object.keys(listContext.filterValues).length > 0;\n if (hasKey && hasFilterValues) listContext.setFilters({});\n }\n }, [listContext?.filter]);\n\n return (\n <ListContextProvider value={listContext}>\n <Title title={<ForceTitle title=\"Documents\" />} />\n <ListToolbar\n {...props}\n filters={getListFilters(isMedium)}\n actions={<ListActions isXSmall={isXSmall} />}\n />\n <Card\n className={classnames(classes.listRoot, {\n [classes.bulkActions]: listContext.selectedIds.length > 0,\n // [classes.bulkActions] remove to restore original behavior\n })}\n >\n <BulkActionsToolbar>\n <BulkListActions />\n </BulkActionsToolbar>\n <FileGrid {...listContext} isXSmall={isXSmall} isMedium={isMedium} />\n <Pagination {...listContext} />\n </Card>\n </ListContextProvider>\n );\n};\n\nconst categoryRender = (record) => {\n const category = window.appUser?.reloadYard?.fileCategories?.find(\n (itm) => itm.key === record.category\n );\n return category ? category.name : \"\";\n};\n\nconst FileGrid = ({ ids, page, ...props }) => {\n const { isXSmall, isMedkum } = props;\n const hasBulkActions = true;\n\n if (ids?.length === 0 && page === 1)\n return <Empty {...props} message=\"Upload a new document\" />;\n else\n return isXSmall ? (\n <SimpleList\n primaryText={(record) => record.displayName}\n secondaryText={(record) => `Category: ${categoryRender(record)}`}\n tertiaryText={(record) =>\n new Date(record.contentDate).toLocaleDateString()\n }\n // leftIcon={record => <></>}\n rightIcon={() => (\n <ChevronRightIcon\n fontSize=\"large\"\n color=\"secondary\"\n style={{ marginLeft: 40, marginTop: 10 }}\n />\n )}\n linkType=\"edit\"\n />\n ) : isMedkum ? (\n <Datagrid rowClick=\"edit\" hasBulkActions={hasBulkActions}>\n <TextField\n source=\"displayName\"\n label=\"Name\"\n sortable={true}\n sortBy={`{\"key\":\"filesByName\", \"search\":\"displayName\"}`}\n />\n <DateField source=\"contentDate\" label=\"Modified\" sortable={true} />\n <FunctionField\n source=\"category\"\n label=\"Category\"\n render={categoryRender}\n sortable={true}\n />\n </Datagrid>\n ) : (\n <Datagrid rowClick=\"edit\" hasBulkActions={hasBulkActions}>\n <TextField\n source=\"displayName\"\n label=\"Name\"\n sortable={true}\n sortBy={`{\"key\":\"filesByName\", \"search\":\"displayName\"}`}\n />\n <DateField source=\"updatedAt\" label=\"Updated\" sortable={false} />\n <FunctionField\n source=\"category\"\n label=\"Category\"\n render={categoryRender}\n sortable={true}\n />\n <SelectField\n source=\"visibility\"\n choices={FileVisibilityOptions}\n label=\"Visible To\"\n sortable={true}\n />\n <EditButton />\n </Datagrid>\n );\n};\n","import React from \"react\";\n\nimport { Typography } from \"@material-ui/core\";\n\nexport const ServiceHelp = () => {\n return (\n <>\n <Typography variant=\"subtitle1\">\n Enter pricing per Unit of inventory / goods quantity. This information\n will be used for invoicing.\n </Typography>\n <ul>\n <li>\n <Typography>\n <strong>Service Name:</strong> Keep it short, 1-3 words. Service\n name cannot be changed once record is saved.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Description:</strong> Short service description.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>\n UNIT / PCS / CAR / TL / MBF / LF / SF / GAL / LBS / TON / CWT:\n </strong>{\" \"}\n Enter pricing for relevant Units of measure.\n </Typography>\n </li>\n <li>\n <Typography>\n <strong>Service Availability:</strong> Mark service as un-available\n if not relevant to your yard. E.g. mark \"inside Handling\" as\n \"Suspended\" if you have no warehouse facilities, or if service is\n temporarily not available.\n </Typography>\n </li>\n </ul>\n </>\n );\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { updateService, deleteService } from \"../../../graphql/mutations\";\nimport { invoiceServiceByService } from \"../../../graphql/queries\";\n\nimport { Button, Confirm, useNotify, useRedirect } from \"react-admin\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\n\nimport { ServiceStatus, ServiceType } from \"../../../utils/constants\";\nimport { DeleteIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { deepRedirect } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeepDeleteButton = ({ record, backPath, className, ...props }) => {\n const classes = useStyles();\n const history = useHistory();\n const notify = useNotify();\n const redirect = useRedirect();\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n const handleDelete = async (event) => {\n setLoading(true);\n\n try {\n let results = await API.graphql(\n graphqlOperation(invoiceServiceByService, {\n serviceId: record.id,\n limit: 1,\n })\n );\n const serviceItems = results.data.invoiceServiceByService.items;\n debugger;\n\n if (serviceItems.length === 0) {\n await API.graphql(\n graphqlOperation(deleteService, { input: { id: record.id } })\n );\n } else {\n let input = { ...record };\n input.active = \"false\";\n input.status = ServiceStatus.UN_AVAILABLE;\n delete input.createdAt;\n delete input.updatedAt;\n await API.graphql(graphqlOperation(updateService, { input }));\n }\n\n notify(\"Service deleted successfully\");\n deepRedirect(history, backPath);\n } catch (error) {\n logError(\n \"accounts:AccountEdit:EditRemoveButton:handleRemove\",\n error,\n notify,\n redirect\n );\n } finally {\n setLoading(false);\n setOpen(false);\n }\n };\n\n return (\n <>\n <Button\n {...props}\n label=\"Delete\"\n disabled={\n loading ||\n record?.name === ServiceType.OUTSIDE_HANDLING ||\n record?.name === ServiceType.INSIDE_HANDLING ||\n record?.name === ServiceType.ACCESSORIAL_CHARGES\n }\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n loading={loading}\n title={\"Delete Confirmation\"}\n content={\n \"You will not lose any data, but removing an active Service cannot be undaone. Continue?\"\n }\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport {\n useEditController,\n useNotify,\n Edit,\n FormTab,\n Loading,\n NumberInput,\n RadioButtonGroupInput,\n SaveButton,\n SelectInput,\n TabbedForm,\n TextInput,\n Toolbar,\n TopToolbar,\n required,\n number,\n minValue,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { Grid, InputAdornment } from \"@material-ui/core\";\n\nimport {\n NoteType,\n ServiceStatus,\n ServiceStatuses,\n ServiceType,\n UnitOptions,\n} from \"../../../utils/constants\";\nimport { getUnitLabel } from \"../../../utils/loadTypeUtils\";\nimport {\n deepRedirect,\n getBackPath,\n historyAutoGen,\n} from \"../../../utils/utils\";\n\nimport { theme } from \"../../../withRoot\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { HistoryTab } from \"../../../components/common/HistoryTab\";\nimport { ServiceHelp } from \"./ServiceHelp\";\nimport { DeepDeleteButton } from \"./DeepDeleteButton\";\n\nconst validateRequired = required();\nconst validateRate = [number(), minValue(0)];\n\nconst ServiceEditToolbar = ({ basePath, backPath, ...props }) => {\n const form = useForm();\n const history = useHistory();\n const notify = useNotify();\n\n const transform = (data) => {\n data = { ...data };\n const taxState = form.getFieldState(\"taxRate\");\n debugger;\n if (taxState?.dirty) {\n const newNote = {\n text: `Tax Rate changed from ${taxState.initial.taxRate} to ${data.taxRate.taxRate}`,\n type: NoteType.GENERIC,\n date: new Date(),\n by: window.appUser?.fullName,\n };\n data.history = data.history ? [...data.history, newNote] : [newNote];\n }\n data.history = historyAutoGen(form, data);\n\n UnitOptions.forEach((unit) => {\n data[unit.column] = data[unit.column] ? parseFloat(data[unit.column]) : 0;\n });\n\n return data;\n };\n\n const onSuccess = () => {\n notify(\"Service updated successfully.\");\n deepRedirect(history, backPath);\n };\n\n const onFailure = (error) => {\n logError(\"services:ServiceEdit:onFailure:Service Update\", error, notify);\n };\n\n return (\n <Toolbar style={{ justifyContent: \"space-between\" }} {...props}>\n <SaveButton\n label=\"Save\"\n disabled={props.pristine}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <DeepDeleteButton backPath={backPath ? backPath : \"/accounts\"} />\n </Toolbar>\n );\n};\n\nconst ServiceEditActions = ({ basePath, backPath, ...props }) => (\n <TopToolbar>\n <HelpButton>\n <ServiceHelp {...props} />\n </HelpButton>\n <BackButton basePath={\"/accounts\"} backPath={backPath} />\n </TopToolbar>\n);\n\nexport const ServiceEdit = (props) => {\n const backPath = getBackPath(props);\n const { record, loading, loaded } = useEditController(props);\n\n if (loading || !loaded) return <Loading />;\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Service\" />}\n mutationMode=\"pessimistic\"\n actions={<ServiceEditActions backPath={backPath} />}\n >\n <TabbedForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={<ServiceEditToolbar {...props} backPath={backPath} />}\n >\n <FormTab label=\"Service Setup\">\n <ServiceSetupTab record={record} {...props} />\n </FormTab>\n {record && record.history && (\n <FormTab label=\"History Log\">\n <HistoryTab />\n </FormTab>\n )}\n </TabbedForm>\n </Edit>\n );\n};\n\nexport const ServiceSetupTab = ({ record, ...props }) => {\n const taxRateOptions = window.appUser?.reloadYard?.taxRates\n ? window.appUser.reloadYard.taxRates\n : [{}];\n const rateRender = (choice) => `${choice.taxCode} : ${choice.taxRate}%`;\n\n return (\n <Grid container direction=\"column\" spacing={0}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={3}>\n <TextInput\n source=\"name\"\n label=\"Service Name\"\n variant=\"outlined\"\n fullWidth\n disabled={record?.id} // used for create & edit\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={9}>\n <TextInput\n source=\"description\"\n label=\"Description\"\n variant=\"outlined\"\n fullWidth\n disabled={record.name === ServiceType.ACCESSORIAL_CHARGES}\n />\n </Grid>\n </Grid>\n {record.name !== ServiceType.ACCESSORIAL_CHARGES && (\n <Grid container direction=\"row\" spacing={1}>\n {UnitOptions.map((unit) => (\n <Grid item xs={12} md={3}>\n <NumberInput\n source={unit.column}\n label={getUnitLabel(unit.id)}\n variant=\"outlined\"\n fullWidth\n placeholder=\"0.00\"\n min=\"0\"\n format={(v) => (Number(v) === 0 ? undefined : v)}\n parse={(v) => (v === \"0\" ? undefined : v)}\n validate={validateRate}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\"> $ </InputAdornment>\n ),\n inputMode: \"decimal\",\n }}\n />\n </Grid>\n ))}\n </Grid>\n )}\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12} md={3}>\n <SelectInput\n source={\"taxRate\"}\n label=\"Tax Rate\"\n variant=\"outlined\"\n fullWidth\n choices={taxRateOptions}\n optionValue=\"taxCode\"\n optionText={rateRender}\n allowEmpty\n format={(v) => (!v ? undefined : v.taxCode)}\n parse={(v) =>\n !v\n ? undefined\n : window.appUser.reloadYard.taxRates.find(\n (r) => r.taxCode === v\n )\n }\n validate={validateRequired}\n />\n </Grid>\n {record?.id && record.name !== ServiceType.ACCESSORIAL_CHARGES && (\n <Grid item xs={12} md={3}>\n <RadioButtonGroupInput\n source=\"status\"\n label=\"Service Availability\"\n style={{ marginTop: -theme.spacing(0.2) }}\n validate={validateRequired}\n defaultValue={ServiceStatus.AVAILABLE}\n choices={ServiceStatuses}\n />\n </Grid>\n )}\n </Grid>\n </Grid>\n );\n};\n","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nimport {\n useNotify,\n FormTab,\n SaveButton,\n TabbedForm,\n Toolbar,\n TopToolbar,\n Create,\n} from \"react-admin\";\n\nimport { NoteType, ServiceStatus, UnitOptions } from \"../../../utils/constants\";\nimport { deepRedirect, getBackPath } from \"../../../utils/utils\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { HelpButton } from \"../../../components/common/HelpButton\";\nimport { ServiceHelp } from \"./ServiceHelp\";\nimport { ServiceSetupTab } from \"./ServiceEdit\";\n\nconst ServiceCreateToolbar = ({ basePath, backPath, account, ...props }) => {\n const history = useHistory();\n const notify = useNotify();\n\n const transform = (data) => {\n data = { ...data };\n debugger;\n\n data.active = \"true\";\n data.groups = account.groups;\n data.status = ServiceStatus.AVAILABLE;\n data.reloadYardId = account.reloadYardId;\n data.accountId = account.id;\n data.accountName = account.businessName;\n\n const newNote = {\n text: `Service created.`,\n type: NoteType.GENERIC,\n date: new Date(),\n by: window.appUser?.fullName,\n };\n data.history = [newNote];\n\n UnitOptions.forEach((unit) => {\n data[unit.column] = data[unit.column] ? parseFloat(data[unit.column]) : 0;\n });\n\n return data;\n };\n\n const onSuccess = () => {\n notify(\"Service created successfully.\");\n deepRedirect(history, backPath);\n };\n\n const onFailure = (error) => {\n logError(\"services:ServiceCreate:onFailure:Service Update\", error, notify);\n };\n\n return (\n <Toolbar style={{ justifyContent: \"space-between\" }} {...props}>\n <SaveButton\n label=\"Save\"\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n </Toolbar>\n );\n};\n\nconst ServiceCreateActions = ({ basePath, backPath, ...props }) => (\n <TopToolbar>\n <HelpButton>\n <ServiceHelp {...props} />\n </HelpButton>\n <BackButton basePath={\"/accounts\"} backPath={backPath} />\n </TopToolbar>\n);\n\nexport const ServiceCreate = (props) => {\n const backPath = getBackPath(props);\n const account = props.location?.state?.account;\n\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New Service\" />}\n mutationMode=\"pessimistic\"\n actions={<ServiceCreateActions backPath={backPath} />}\n >\n <TabbedForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={\n <ServiceCreateToolbar\n {...props}\n backPath={backPath}\n account={account}\n />\n }\n >\n <FormTab label=\"Service Setup\">\n <ServiceSetupTab {...props} />\n </FormTab>\n </TabbedForm>\n </Create>\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { createAssetType } from \"../../../graphql/mutations\";\n\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n MenuItem,\n TextField as MuiTextField,\n} from \"@material-ui/core\";\n\nimport { Button, useCreateSuggestionContext, useNotify } from \"react-admin\";\n\nimport { CancelIcon, SaveIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\n\nexport const AssetTypeCreateDialog = ({\n areas,\n assets,\n setAssets,\n setSelectedAsset,\n ...props\n}) => {\n const notify = useNotify();\n const { filter, onCancel, onCreate } = useCreateSuggestionContext();\n const [name, setName] = useState(filter || \"\");\n const [maxBookings, setMaxBookings] = useState();\n const [area, setArea] = useState(\"\");\n const [newlyCreatedAsset, setNewlyCreatedAsset] = useState(null);\n\n // Ensure `onCreate(newAsset)` is called only after assets are updated\n useEffect(() => {\n if (newlyCreatedAsset) {\n onCreate(newlyCreatedAsset);\n setNewlyCreatedAsset(null); // Reset state to prevent duplicate calls\n setName(\"\");\n setMaxBookings(1);\n }\n }, [newlyCreatedAsset, onCreate]);\n\n const handleSubmit = async (event) => {\n event.preventDefault();\n\n try {\n debugger;\n const assetInput = {\n reloadYardId: window.appUser.reloadYardId,\n groups: window.appUser.groups,\n active: \"true\",\n areaId: area?.id,\n name: name,\n maxConcurrentBookings: maxBookings,\n };\n\n const response = await API.graphql(\n graphqlOperation(createAssetType, { input: assetInput })\n );\n\n const newAsset = response.data.createAssetType;\n const updatedAssets = assets ? [...assets, newAsset] : [newAsset];\n\n // window.appUser.reloadYard.assets = { items: updatedAssets };\n setAssets(updatedAssets);\n setSelectedAsset(newAsset);\n\n // Set newly created asset and trigger `useEffect` to call `onCreate`\n setNewlyCreatedAsset(newAsset);\n } catch (error) {\n logError(\"assetTypes:AssetTypeCreateDialog:handleSubmit\", error, notify);\n }\n };\n\n return (\n <Dialog open onClose={onCancel}>\n <DialogTitle>Create New Asset</DialogTitle>\n <form onSubmit={handleSubmit}>\n <DialogContent>\n <Grid container spacing={1}>\n <Grid item xs={12} md={6}>\n <MuiTextField\n label=\"Resource Name\"\n variant=\"outlined\"\n margin=\"dense\"\n value={name}\n onChange={(event) => setName(event.target.value)}\n autoFocus\n required\n fullWidth\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <MuiTextField\n type=\"number\"\n label=\"Max. Bookings\"\n variant=\"outlined\"\n margin=\"dense\"\n value={maxBookings}\n inputProps={{ min: 1 }}\n // disabled={saving}\n required\n fullWidth\n onChange={(event) =>\n setMaxBookings(parseInt(event.target.value, 10) || 1)\n }\n />\n </Grid>\n <Grid item xs={6}>\n <MuiTextField\n select\n name=\"areaId\"\n label=\"Area\"\n id=\"areaId\"\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n resettable\n value={area || \"\"}\n onChange={(event) => setArea(event.target.value)}\n >\n <MenuItem key=\"area.id\" value=\"area.id\">\n  \n </MenuItem>\n {areas.map((option) => (\n <MenuItem key={option.id} value={option.id}>\n {option.name}\n </MenuItem>\n ))}\n </MuiTextField>\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button label=\"Cancel\" color=\"default\" onClick={onCancel}>\n <CancelIcon />\n </Button>\n <Button label=\"Save\" type=\"submit\">\n <SaveIcon />\n </Button>\n </DialogActions>\n </form>\n </Dialog>\n );\n};\n","import { API, graphqlOperation } from \"aws-amplify\";\nimport { areaByActiveBySortKey } from \"../../../graphql/reloadyard/custom-queries\";\n\nimport { logError } from \"../../../utils/appUtils\";\nimport { assetTypeByActiveByName } from \"../../../graphql/queries\";\n\nexport const fetchAreas = async (setAreas, notify) => {\n try {\n const searchQuery = {\n reloadYardId: window.appUser?.reloadYardId,\n activeSortKey: {\n beginsWith: {\n active: \"true\",\n },\n },\n };\n debugger;\n const results = await API.graphql(\n graphqlOperation(areaByActiveBySortKey, searchQuery)\n );\n\n const fetchedAreas = results.data.areaByActiveBySortKey.items;\n // window.appUser.reloadYard.areas.items = fetchedAreas;\n\n // Return the list of areas\n setAreas(fetchedAreas);\n } catch (error) {\n logError(\"reloadYard:ReloadYardUtils:fetchAreas\", error, notify);\n }\n};\n\nexport const fetchAssetTypes = async (setAssetTypes, notify) => {\n try {\n const searchQuery = {\n reloadYardId: window.appUser?.reloadYardId,\n activeName: {\n beginsWith: {\n active: \"true\",\n },\n },\n };\n const results = await API.graphql(\n graphqlOperation(assetTypeByActiveByName, searchQuery)\n );\n\n const fetchedAssets = results.data.assetTypeByActiveByName.items;\n // window.appUser.reloadYard.areas.items = fetchedAssets;\n\n // Return the list of assetTypes\n setAssetTypes(fetchedAssets);\n } catch (error) {\n logError(\"reloadYard:ReloadYardUtils:fetchAssetTypes\", error, notify);\n }\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { Button as MuiButton, Grid, InputAdornment } from \"@material-ui/core\";\n\nimport {\n ArrayInput,\n BooleanInput,\n FormDataConsumer,\n maxValue,\n minValue,\n number,\n NumberInput,\n required,\n SelectInput,\n SimpleFormIterator,\n TextInput,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { generateTimeInterval, truncateText } from \"../../../utils/utils\";\nimport { Scheduler } from \"../../../components/common/scheduler/Scheduler\";\nimport { AppType } from \"../../../utils/constants\";\nimport { AssetTypeCreateDialog } from \"../assetTypes/AssetTypeCreateDialog\";\nimport {\n validateDurationAndBuffer,\n validateEndTime,\n validatePositiveNumber,\n validateStartTime,\n} from \"./EventTypeUtils\";\nimport { fetchAreas, fetchAssetTypes } from \"../reloadYard/ReloadYardUtils\";\n\nconst validateMaxBookings = (maxBookings) => [\n required(),\n number(),\n minValue(1, \"Must be 1 or greater.\"),\n maxValue(maxBookings, `Exceeds Asset max bookings of ${maxBookings}.`),\n];\n\nconst validateMaxFuture = (maxDays) => [\n required(),\n number(),\n maxValue(maxDays, `Exceeds ${maxDays} days.`),\n];\n\nconst getItemLabel = () => null;\n\nconst isYardDayDisabled = (yardDay) => {\n return yardDay ? !yardDay.selected : true;\n};\n\nconst assetTypeOptionRenderer = (record) => {\n if (!record) return \"\";\n let name = truncateText(record.name, 20);\n // Pad with spaces to ensure it always takes up exactly 25 characters\n name = name.padEnd(25, \"\\u00A0\");\n return `${name} (Max: ${record.maxConcurrentBookings})`;\n};\n\nexport const EventTypeForm = (props) => {\n const form = useForm();\n const notify = useNotify();\n const [assetTypes, setAssetTypes] = useState(\n window.appUser.reloadYard.assets || []\n );\n const [areas, setAreas] = useState(\n () =>\n window.appUser.reloadYard.areas.items.filter(\n (itm) => itm.active === \"active\"\n ),\n []\n );\n const { record } = props;\n const [selectedAssetType, setSelectedAssetType] = useState(record?.assetType);\n const [previewOpen, setPreviewOpen] = useState(false);\n const yardSchedule = window.appUser.reloadYard.schedule;\n\n useEffect(() => {\n fetchAreas(setAreas, notify);\n fetchAssetTypes(setAssetTypes, notify);\n }, []);\n\n const handleAssetTypeChange = (event) => {\n let selectedAssetTypeId;\n let nweAssetType;\n debugger;\n\n // Determine if event is an event or a direct string ID\n if (typeof event === \"string\" && selectedAssetType) {\n selectedAssetTypeId = event; // If it's a string, use it directly (inline Create)\n nweAssetType = selectedAssetType;\n } else if (event?.target?.value) {\n selectedAssetTypeId = event?.target?.value; // If it's an event, extract the value (onSelect)\n nweAssetType = assetTypes.find((itm) => itm.id === selectedAssetTypeId);\n }\n\n form.change(\"resourceName\", nweAssetType?.name || \"\");\n form.change(\"numberOfResources\", nweAssetType?.maxConcurrentBookings || 1);\n setSelectedAssetType(nweAssetType);\n };\n\n const handlePreview = (formData, notify) => {\n if (\n formData.name &&\n formData.numberOfResources &&\n formData.schedule?.minNoticeHours &&\n formData.schedule?.maxDaysIntoFuture\n ) {\n setPreviewOpen(true);\n } else {\n notify(\"Complete the Event form to open preview.\", \"warning\");\n }\n };\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container spacing={6}>\n <Grid item xs={12} md={6}>\n <Grid container spacing={1}>\n {/* <Grid item xs={6}>\n <SelectInput\n source=\"areaId\"\n label=\"Area\"\n variant=\"outlined\"\n choices={areas}\n allowEmpty\n fullWidth\n helperText={false}\n />\n </Grid> */}\n {/* {!formData.assetTypeId && (\n <Grid item xs={6}>\n <TextInput\n label=\"Resource Name\"\n source=\"resourceName\"\n variant=\"outlined\"\n fullWidth\n disabled={formData.assetTypeId}\n helperText={false}\n />\n </Grid>\n )} */}\n <Grid item xs={6}>\n <TextInput\n label=\"Event Name\"\n source=\"name\"\n variant=\"outlined\"\n fullWidth\n validate={required()}\n helperText={false}\n />\n </Grid>\n </Grid>\n <Grid container spacing={1}>\n <Grid item xs={6}>\n <NumberInput\n label=\"Duration\"\n source=\"duration\"\n variant=\"outlined\"\n fullWidth\n step={15}\n min={0}\n validate={[validatePositiveNumber, validateDurationAndBuffer]}\n helperText={false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">mins</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={6}>\n <NumberInput\n label=\"Buffer Time\"\n source=\"bufferTime\"\n min={0}\n step={15}\n variant=\"outlined\"\n fullWidth\n validate={[validatePositiveNumber, validateDurationAndBuffer]}\n helperText={false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">mins</InputAdornment>\n ),\n }}\n />\n </Grid>\n\n <Grid item xs={6}>\n <SelectInput\n source=\"assetTypeId\"\n label=\"Asset\"\n variant=\"outlined\"\n choices={assetTypes}\n optionText={assetTypeOptionRenderer}\n optionValue=\"id\"\n createLabel=\"Create a new Assett...\"\n create={\n <AssetTypeCreateDialog\n areas={areas}\n assets={assetTypes}\n setAssets={setAssetTypes}\n setSelectedAsset={setSelectedAssetType}\n />\n }\n onChange={handleAssetTypeChange}\n allowEmpty\n resettable\n fullWidth\n helperText=\"Most constrained resource\"\n />\n </Grid>\n <Grid item xs={6}>\n <NumberInput\n label=\"Max. Concurrent Bookings\"\n source=\"numberOfResources\"\n variant=\"outlined\"\n fullWidth\n min={1}\n max={selectedAssetType?.maxConcurrentBookings || Infinity}\n validate={validateMaxBookings(\n selectedAssetType?.maxConcurrentBookings || Infinity\n )}\n helperText={false}\n />\n </Grid>\n\n <Grid item xs={6}>\n <NumberInput\n source=\"schedule.minNoticeHours\"\n label=\"Min. Notice (Hours)\"\n min={0}\n variant=\"outlined\"\n fullWidth\n validate={validatePositiveNumber}\n helperText={false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">Hours</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={6}>\n <NumberInput\n source=\"schedule.maxDaysIntoFuture\"\n label=\"Max. Days into future\"\n min={0}\n max={365}\n variant=\"outlined\"\n fullWidth\n validate={validateMaxFuture(365)}\n helperText={false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">Days</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12}>\n <TextInput\n source=\"description\"\n label=\"Description\"\n variant=\"outlined\"\n multiline\n minRows={2}\n fullWidth\n validate={required()}\n helperText=\"Message to customers\"\n />\n </Grid>\n <Grid item xs={12}>\n <MuiButton\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => handlePreview(formData, notify)}\n >\n PREVIEW\n </MuiButton>\n {previewOpen && (\n <Scheduler\n eventType={formData}\n appType={AppType.CUSTOMER}\n open={previewOpen}\n setIsOpen={setPreviewOpen}\n resettable={false}\n />\n )}\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} md={6}>\n <ArrayInput\n source={\"schedule.workdays\"}\n label=\"Work days\"\n fullWidth\n >\n <SimpleFormIterator\n disableAdd\n disableRemove\n disableReordering\n getItemLabel={getItemLabel}\n >\n <FormDataConsumer>\n {({\n formData, // The whole form data\n scopedFormData, // The data for this item of the ArrayInput\n getSource, // Function to get the valid source inside an ArrayInput.\n ...rest\n }) => {\n const yardDay = yardSchedule.workdays.find(\n (day) => day.name === scopedFormData?.name\n );\n const timeIntervals = generateTimeInterval(\n yardDay?.startDayTime,\n yardDay?.endDayTime\n );\n\n return (\n <Grid container spacing={2}>\n <Grid item xs={12} md={4}>\n <BooleanInput\n source={getSource(\"selected\")}\n label={scopedFormData?.name}\n disabled={isYardDayDisabled(yardDay)}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n label=\"Start Time\"\n source={getSource(\"startDayTime\")}\n variant=\"outlined\"\n fullWidth\n helperText={false}\n choices={timeIntervals}\n disabled={!scopedFormData?.selected}\n validate={[\n (value, allValues) =>\n validateStartTime(value, allValues, getSource),\n ]}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n label=\"End Time\"\n source={getSource(\"endDayTime\")}\n variant=\"outlined\"\n fullWidth\n helperText={false}\n choices={timeIntervals}\n disabled={!scopedFormData?.selected}\n validate={[\n (value, allValues) =>\n validateEndTime(value, allValues, getSource),\n ]}\n />\n </Grid>\n </Grid>\n );\n }}\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n","import React, { useState } from \"react\";\nimport {\n Create,\n SaveButton,\n SimpleForm,\n Toolbar,\n TopToolbar,\n useNotify,\n} from \"react-admin\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { deepRedirect, getBackPath } from \"../../../utils/utils\";\nimport { EventTypeForm } from \"./EventTypeForm\";\nimport { logError } from \"../../../utils/appUtils\";\n\nconst CreateActions = (props) => {\n const { backPath, history } = props;\n const tab = history.location.state.tab;\n return (\n <TopToolbar>\n <BackButton {...props} backPath={backPath} state={{ tab }} />\n </TopToolbar>\n );\n};\n\nconst CreateToolbar = (props) => (\n <Toolbar {...props}>\n <ValidateSaveButton {...props} />\n </Toolbar>\n);\n\nexport const EventTypeCreate = (props) => {\n const { history } = props;\n const backPath = getBackPath(props);\n\n const initValues = {\n active: \"true\",\n groups: window.appUser.reloadYard.groups,\n reloadYardId: window.appUser.reloadYardId,\n schedule: { ...window.appUser.reloadYard.schedule },\n bufferTime: 0,\n duration: 30,\n areaId: \"\",\n numberOfResources: 1,\n };\n\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New Event Type\" />}\n actions={<CreateActions backPath={backPath} history={history} />}\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n initialValues={initValues}\n toolbar={\n <CreateToolbar {...props} backPath={backPath} history={history} />\n }\n >\n <EventTypeForm {...props} />\n </SimpleForm>\n </Create>\n );\n};\n\nexport const ValidateSaveButton = (props) => {\n const notify = useNotify();\n const [saving, setSaving] = useState(false);\n const { backPath, history } = props;\n\n const transform = (data) => {\n data.assetTypeId = data.assetTypeId ? data.assetTypeId : \"\";\n delete data.assetType;\n return data;\n };\n\n const onSuccess = async ({ data }) => {\n notify(`Event created successfully.`);\n setSaving(false);\n const tab = history.location.state.tab;\n debugger;\n deepRedirect(history, backPath, null, null, { tab });\n };\n\n const onFailure = (error) => {\n setSaving(false);\n logError(\"EventTypeCreate:ValidateSaveButton:onFailure\", error, notify);\n };\n\n return (\n <SaveButton\n label=\"Save\"\n disabled={saving}\n submitOnEnter={false}\n undoable={false}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n {...props}\n />\n );\n};\n","import React, { useState, useEffect } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { timeslotByEventTypeByDateByTime } from \"../../../graphql/queries\";\nimport { Button, Confirm } from \"react-admin\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\nimport { DeleteIcon } from \"../../../components/common\";\nimport { deleteEventType, updateEventType } from \"../../../graphql/mutations\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { deepRedirect } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nconst getTimeSlotsForEvent = async (\n record,\n setHasEvents,\n setHasFutureEvents\n) => {\n const today = new Date();\n\n debugger;\n const futurePromise = API.graphql(\n graphqlOperation(timeslotByEventTypeByDateByTime, {\n eventTypeId: record.id,\n yearMonthDayTime: {\n gt: {\n year: today.getFullYear(),\n month: today.getMonth(),\n day: today.getDate(),\n },\n },\n limit: 1,\n })\n );\n\n debugger;\n const allTimePromise = API.graphql(\n graphqlOperation(timeslotByEventTypeByDateByTime, {\n eventTypeId: record.id,\n limit: 1,\n })\n );\n\n // Use Promise.all to wait for both promises to resolve\n const [futureResponse, allTimeResponse] = await Promise.all([\n futurePromise,\n allTimePromise,\n ]);\n\n const hasFutureEvents =\n futureResponse.data.timeslotByEventTypeByDateByTime.items.length > 0;\n\n const hasEvents =\n allTimeResponse.data.timeslotByEventTypeByDateByTime.items.length > 0;\n\n setHasFutureEvents(hasFutureEvents);\n setHasEvents(hasEvents);\n};\n\nexport const DeleteEventTypeButton = ({\n record,\n backPath,\n history,\n notify,\n isDisabled,\n className,\n}) => {\n const [hasEvents, setHasEvents] = useState(true);\n const [hasFutureEvents, setHasFutureEvents] = useState(true);\n const [isDeleting, setIsDeleting] = useState(false);\n const [open, setOpen] = useState(false);\n const classes = useStyles();\n\n useEffect(() => {\n getTimeSlotsForEvent(record, setHasEvents, setHasFutureEvents);\n }, []);\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n const getConfirmContent = () => {\n if (hasFutureEvents)\n return \"There are future timeslots scheduled for this event Type. Are you sure you want to delete this event type, scheduled events will not be deleted?\";\n return \"Are you sure you want to delete this event type?\";\n };\n\n const handleDelete = async (event) => {\n setIsDeleting(true);\n debugger;\n\n try {\n if (record.assetTypeId) {\n notify(\"Clear Asset before deleting.\", \"warning\");\n } else {\n if (!hasEvents) {\n await API.graphql(\n graphqlOperation(deleteEventType, { input: { id: record.id } })\n );\n } else {\n const eventTypeToUpdate = {\n ...record,\n active: \"false\",\n };\n delete eventTypeToUpdate.assetType;\n delete eventTypeToUpdate.createdAt;\n delete eventTypeToUpdate.updatedAt;\n\n await API.graphql(\n graphqlOperation(updateEventType, {\n input: eventTypeToUpdate,\n })\n );\n }\n\n notify(\"Event type deleted successfully\");\n const tab = history.location.state.tab;\n deepRedirect(history, backPath, null, null, { tab });\n }\n } catch (err) {\n logError(\n \"eventTypes:DeleteEventTypeButton:handleDelete:\" +\n JSON.stringify(record),\n err,\n notify\n );\n } finally {\n setIsDeleting(false);\n setOpen(false);\n }\n };\n\n return (\n <>\n <Button\n label=\"Delete\"\n disabled={!record || isDeleting || isDisabled}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n title={\"Delete Event Type\"}\n content={getConfirmContent()}\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useState } from \"react\";\nimport {\n Edit,\n SaveButton,\n SimpleForm,\n Toolbar,\n TopToolbar,\n useNotify,\n} from \"react-admin\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { deepRedirect, getBackPath } from \"../../../utils/utils\";\nimport { EventTypeForm } from \"./EventTypeForm\";\nimport { DeleteEventTypeButton } from \"./DeleteEventTypeButton\";\n\nconst EditToolbar = ({ record, ...props }) => {\n const notify = useNotify();\n const { backPath, history } = props;\n const [saving, setSaving] = useState(false);\n\n const transform = (data) => {\n data.assetTypeId = data.assetTypeId ? data.assetTypeId : \"\";\n delete data.assetType;\n return data;\n };\n\n const onSuccess = () => {\n setSaving(false);\n notify(`Event updated successfully.`);\n deepRedirect(history, backPath);\n };\n\n const onFailure = (error) => {\n setSaving(false);\n logError(\"eventTypes:EventTypeEdit:onFailure\", error, notify);\n };\n\n return (\n <Toolbar {...props} style={{ justifyContent: \"space-between\" }}>\n <SaveButton\n label=\"Save\"\n disabled={props.pristine || saving}\n transform={transform}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <DeleteEventTypeButton\n record={record}\n history={history}\n backPath={backPath}\n notify={notify}\n />\n </Toolbar>\n );\n};\n\nconst EditActions = (props) => (\n <TopToolbar>\n <BackButton {...props} />\n </TopToolbar>\n);\n\nexport const EventTypeEdit = (props) => {\n const backPath = getBackPath(props);\n\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Event\" />}\n mutationMode=\"pessimistic\"\n actions={<EditActions {...props} backPath={backPath} />}\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={<EditToolbar {...props} backPath={backPath} />}\n >\n <EventTypeForm {...props} />\n </SimpleForm>\n </Edit>\n );\n};\n","import React, { useState, useEffect } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { checklistByResourceByProcess } from \"../../../graphql/queries\";\n\nimport {\n Button,\n Grid,\n makeStyles,\n MenuItem,\n TextField,\n} from \"@material-ui/core\";\n\nimport {\n FormDataConsumer,\n SelectInput,\n TextInput,\n required,\n BooleanInput,\n useRecordContext,\n useNotify,\n} from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { Checklist } from \"../../../components/common/Checklist\";\nimport { InboundStepsChoices, processNames } from \"../../../utils/constants\";\nimport { logError } from \"../../../utils/appUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n arrayInput: {\n marginTop: theme.spacing(-1),\n },\n}));\n\nexport const ChecklistForm = (props) => {\n const [checklists, setChecklists] = useState();\n const [selectedChecklist, setSelectedChecklist] = useState();\n const [choices, setChoices] = useState(InboundStepsChoices);\n const form = useForm();\n const classes = useStyles();\n const record = useRecordContext();\n const yardCommodities = window.appUser.reloadYard.activeYardCommodities.items;\n const notify = useNotify();\n\n useEffect(() => {\n getChecklists();\n if (!record.processName || record.processName === \"Inbound Shipment\")\n setChoices(InboundStepsChoices);\n else setChoices([]);\n }, []);\n\n const getChecklists = async () => {\n try {\n const response = await API.graphql(\n graphqlOperation(checklistByResourceByProcess, {\n resourceId: window.appUser.reloadYardId,\n })\n );\n const checklists =\n response.data.checklistByResourceByProcess.items.filter(\n (itm) => itm.active\n );\n setChecklists(checklists);\n } catch (err) {\n logError(\"checklists:ChecklistForm:getChecklists\", err, notify);\n }\n };\n\n const handleProcessChange = (evt) => {\n const value = evt.target.value;\n form.change(\"checklistItems\", [{}]);\n if (value === \"Inbound Shipment\") setChoices(InboundStepsChoices);\n else setChoices([]);\n };\n\n const handleChecklistChange = (evt) => {\n setSelectedChecklist(evt.target.value);\n };\n\n const showCopyChecklist = () => {\n const allowCopy = props.location?.state.allowCopy;\n return allowCopy && checklists?.length > 0;\n };\n\n const handleCopy = () => {\n debugger;\n const checklist = checklists.find((itm) => itm.id === selectedChecklist);\n form.change(\"name\", checklist.name);\n form.change(\"processName\", checklist.processName);\n form.change(\"reloadYardCommodityId\", checklist.reloadYardCommodityId);\n form.change(\"checklistItems\", checklist.checklistItems);\n };\n\n return (\n <>\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container item spacing={2}>\n {showCopyChecklist() && (\n <>\n <Grid item xs={8} md={4}>\n <TextField\n id=\"aisle\"\n label=\"Yard checklists\"\n variant=\"outlined\"\n select\n size=\"small\"\n disabled={!showCopyChecklist()}\n required\n fullWidth\n value={selectedChecklist || \"\"}\n onChange={handleChecklistChange}\n >\n {[\n { id: \"\", value: \"\", name: <span> </span> },\n ...checklists,\n ].map((itm) => (\n <MenuItem key={itm.id} value={itm.id}>\n {itm.name}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n <Grid item xs={4} md={8}>\n <Button\n variant=\"outlined\"\n onClick={handleCopy}\n disabled={!selectedChecklist}\n >\n Copy\n </Button>\n </Grid>\n </>\n )}\n <Grid item xs={12} md={4}>\n <TextInput\n label=\"Name\"\n source=\"name\"\n variant=\"outlined\"\n fullWidth\n validate={required()}\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n label=\"Process Name\"\n source=\"processName\"\n variant=\"outlined\"\n fullWidth\n validate={required()}\n choices={processNames}\n helperText={false}\n onChange={handleProcessChange}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SelectInput\n source=\"reloadYardCommodityId\"\n label=\"Load Type\"\n variant=\"outlined\"\n fullWidth\n choices={yardCommodities}\n optionText={(choice) =>\n `${choice.commodity.name} - ${choice.units}`\n }\n optionValue=\"id\"\n helperText={false}\n allowEmpty\n />\n </Grid>\n <Grid item xs={12} md={8}>\n <TextInput\n label=\"Description\"\n source=\"description\"\n variant=\"outlined\"\n multiline\n fullWidth\n helperText={false}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <BooleanInput label=\"Active\" source=\"active\" helperText={false} />\n </Grid>\n <Grid item xs={12}></Grid>\n <Grid item xs={12}>\n <Checklist\n {...props}\n workFlowSteps={choices}\n source=\"checklistItems\"\n label=\"Checklist Items\"\n className={classes.arrayInput}\n />\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n </>\n );\n};\n","import React, { useState } from \"react\";\nimport {\n Create,\n SaveButton,\n SimpleForm,\n Toolbar,\n TopToolbar,\n useNotify,\n} from \"react-admin\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { deepRedirect, getBackPath } from \"../../../utils/utils\";\nimport { ChecklistForm } from \"./ChecklistForm\";\nimport { logError } from \"../../../utils/appUtils\";\n\nconst CreateActions = (props) => {\n return (\n <TopToolbar>\n <BackButton {...props} />\n </TopToolbar>\n );\n};\n\nconst CreateToolbar = (props) => (\n <Toolbar {...props}>\n <ValidateSaveButton {...props} />\n </Toolbar>\n);\n\nexport const validateChecklist = (record) => {\n const errors = {};\n if (!record.checklistItems || record.checklistItems.length === 0) {\n errors.checklistItems =\n \"A checklist must contain at least one checklist item.\";\n }\n if (!record.resourceId) errors.resourceId = \"Invalid resource.\";\n return errors;\n};\n\nexport const ChecklistCreate = (props) => {\n const { history } = props;\n const backPath = getBackPath(props);\n\n const initValues = {\n active: true,\n groups: window.appUser.reloadYard.groups,\n reloadYardId: window.appUser.reloadYardId,\n resourceId: props.location.state.resourceId,\n createdBy: window.appUser.email,\n processName: \"Inbound Shipment\",\n };\n\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New Checklist\" />}\n actions={<CreateActions backPath={backPath} history={history} />}\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n initialValues={initValues}\n validate={validateChecklist}\n toolbar={\n <CreateToolbar {...props} backPath={backPath} history={history} />\n }\n >\n <ChecklistForm {...props} />\n </SimpleForm>\n </Create>\n );\n};\n\nexport const ValidateSaveButton = (props) => {\n const notify = useNotify();\n const [saving, setSaving] = useState(false);\n const { backPath, history } = props;\n\n const onSuccess = async ({ data }) => {\n notify(`Checklist created successfully.`);\n setSaving(false);\n deepRedirect(history, backPath);\n };\n\n const onFailure = (error) => {\n setSaving(false);\n logError(\n \"checklists:ChecklistCreate:ValidateSaveButton:onFailure\",\n error,\n notify\n );\n };\n\n return (\n <SaveButton\n label=\"Save\"\n disabled={saving}\n submitOnEnter={false}\n undoable={false}\n onSuccess={onSuccess}\n onFailure={onFailure}\n {...props}\n />\n );\n};\n","import React, { useState } from \"react\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { Button, Confirm } from \"react-admin\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport classnames from \"classnames\";\nimport { DeleteIcon } from \"../../../components/common\";\nimport { deleteChecklist } from \"../../../graphql/mutations\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { deepRedirect } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeleteChecklistButton = ({\n record,\n backPath,\n history,\n notify,\n isDisabled,\n className,\n}) => {\n const [isDeleting, setIsDeleting] = useState(false);\n const [open, setOpen] = useState(false);\n const classes = useStyles();\n\n const handleDelete = async (event) => {\n setIsDeleting(true);\n debugger;\n try {\n await API.graphql(\n graphqlOperation(deleteChecklist, { input: { id: record.id } })\n );\n notify(\"Checklist deleted successfully\");\n const tab = history.location.state.tab;\n deepRedirect(history, backPath, null, null, { tab });\n } catch (err) {\n logError(\n \"checklists:DeleteChecklistButton:handleDelete:\" +\n JSON.stringify(record),\n err,\n notify\n );\n } finally {\n setIsDeleting(false);\n setOpen(false);\n }\n };\n\n const handleDialogOpen = () => setOpen(true);\n const handleDialogClose = () => setOpen(false);\n\n return (\n <>\n <Button\n label=\"Delete\"\n disabled={!record || isDeleting || isDisabled}\n onClick={handleDialogOpen}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n <Confirm\n isOpen={open}\n title={\"Delete Checklist\"}\n content=\"Are you sure you want to delete this checklist?\"\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </>\n );\n};\n","import React, { useState } from \"react\";\nimport {\n useNotify,\n Edit,\n SaveButton,\n SimpleForm,\n Toolbar,\n TopToolbar,\n useRecordContext,\n} from \"react-admin\";\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { deepRedirect, getBackPath } from \"../../../utils/utils\";\nimport { ChecklistForm } from \"./ChecklistForm\";\nimport { DeleteChecklistButton } from \"./DeleteChecklistButton\";\nimport { validateChecklist } from \"./ChecklistCreate\";\n\nconst EditToolbar = (props) => {\n const notify = useNotify();\n const { backPath, history } = props;\n const [saving, setSaving] = useState(false);\n const record = useRecordContext();\n\n const onSuccess = () => {\n setSaving(false);\n notify(`Checklist updated successfully.`);\n deepRedirect(history, backPath);\n };\n\n const onFailure = (error) => {\n setSaving(false);\n logError(\"checklists:EditToolbar:onFailure\", error, notify);\n };\n\n return (\n <Toolbar {...props} style={{ justifyContent: \"space-between\" }}>\n <SaveButton\n label=\"Save\"\n disabled={props.pristine || saving}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <DeleteChecklistButton\n record={record}\n history={history}\n backPath={backPath}\n notify={notify}\n />\n </Toolbar>\n );\n};\n\nconst EditActions = (props) => {\n return (\n <TopToolbar>\n <BackButton {...props} />\n </TopToolbar>\n );\n};\n\nexport const ChecklistEdit = (props) => {\n const { history } = props;\n const backPath = getBackPath(props);\n\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Checklist\" />}\n mutationMode=\"pessimistic\"\n actions={<EditActions {...props} backPath={backPath} history={history} />}\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n validate={validateChecklist}\n toolbar={\n <EditToolbar {...props} backPath={backPath} history={history} />\n }\n >\n <ChecklistForm />\n </SimpleForm>\n </Edit>\n );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { Grid } from \"@material-ui/core\";\n\nimport {\n FormDataConsumer,\n minValue,\n number,\n NumberInput,\n required,\n SelectInput,\n TextInput,\n useNotify,\n} from \"react-admin\";\nimport { fetchAreas } from \"../reloadYard/ReloadYardUtils\";\n\nexport const AssetTypeForm = (props) => {\n const notify = useNotify();\n const [areas, setAreas] = useState(\n () =>\n window.appUser.reloadYard.areas?.items.filter(\n (itm) => itm.active === \"true\"\n ),\n []\n );\n const { eventTypes } = props;\n const [minConcurrentBookings, setMinConcurrentBookings] = useState(1);\n\n useEffect(() => {\n fetchAreas(setAreas, notify);\n }, []);\n\n useEffect(() => {\n if (eventTypes?.length > 0) {\n const minResources = Math.min(\n ...eventTypes.map((et) => et.numberOfResources || 1)\n );\n setMinConcurrentBookings(minResources);\n }\n }, [eventTypes]);\n\n return (\n <FormDataConsumer>\n {({ formData, ...rest }) => (\n <Grid container item spacing={2}>\n <Grid item xs={3}>\n <TextInput\n label=\"Resource Name\"\n source=\"name\"\n variant=\"outlined\"\n fullWidth\n validate={required()}\n helperText={false}\n />\n </Grid>\n <Grid item xs={3}>\n <NumberInput\n label=\"Max. Concurrent Bookings\"\n source=\"maxConcurrentBookings\"\n variant=\"outlined\"\n fullWidth\n min={minConcurrentBookings}\n validate={[\n required(),\n number(),\n minValue(\n minConcurrentBookings,\n `Must be ${minConcurrentBookings} or greater.`\n ),\n ]}\n helperText=\"Number of available assets.\"\n />\n </Grid>\n <Grid item xs={3}>\n <SelectInput\n label=\"Area\"\n source=\"areaId\"\n variant=\"outlined\"\n fullWidth\n choices={areas}\n allowEmpty\n resettable\n helperText={false}\n />\n </Grid>\n </Grid>\n )}\n </FormDataConsumer>\n );\n};\n","import React, { useState } from \"react\";\n\nimport {\n Create,\n SaveButton,\n SimpleForm,\n Toolbar,\n TopToolbar,\n useNotify,\n} from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { deepRedirect, getBackPath } from \"../../../utils/utils\";\nimport { AssetTypeForm } from \"./AssetTypeForm\";\nimport { logError } from \"../../../utils/appUtils\";\n\nconst CreateActions = (props) => {\n const { backPath, history } = props;\n const tab = history.location.state.tab;\n return (\n <TopToolbar>\n <BackButton {...props} backPath={backPath} state={{ tab }} />\n </TopToolbar>\n );\n};\n\nconst CreateToolbar = (props) => (\n <Toolbar {...props}>\n <CreateSaveButton {...props} />\n </Toolbar>\n);\n\nexport const AssetTypeCreate = (props) => {\n const { history } = props;\n const backPath = getBackPath(props);\n\n const initValues = {\n active: \"true\",\n groups: window.appUser.reloadYard.groups,\n reloadYardId: window.appUser.reloadYardId,\n areaId: \"\",\n maxConcurrentBookings: 1,\n };\n\n return (\n <Create\n {...props}\n title={<ForceTitle title=\"New Asset Type\" />}\n actions={<CreateActions backPath={backPath} history={history} />}\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n initialValues={initValues}\n toolbar={\n <CreateToolbar {...props} backPath={backPath} history={history} />\n }\n >\n <AssetTypeForm {...props} />\n </SimpleForm>\n </Create>\n );\n};\n\nexport const CreateSaveButton = (props) => {\n const notify = useNotify();\n const [saving, setSaving] = useState(false);\n const { backPath, history } = props;\n\n const onSuccess = ({ data }) => {\n debugger;\n notify(`Asset created successfully.`);\n setSaving(false);\n const tab = history.location.state.tab;\n deepRedirect(history, backPath, null, null, { tab });\n };\n\n const onFailure = (error) => {\n setSaving(false);\n logError(\"assetTypes:AssetTypeCreate:onFailure\", error, notify);\n };\n\n return (\n <SaveButton\n {...props}\n label=\"Save\"\n disabled={saving}\n submitOnEnter={false}\n undoable={false}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n );\n};\n","import React, { useState } from \"react\";\n\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { deleteAssetType } from \"../../../graphql/mutations\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\n\nimport { Button } from \"react-admin\";\n\nimport classnames from \"classnames\";\n\nimport { DeleteIcon } from \"../../../components/common\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { deepRedirect } from \"../../../utils/utils\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n deleteButton: {\n color: theme.palette.error.main,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n }),\n { name: \"RaDeleteWithConfirmButton\" }\n);\n\nexport const DeepDeleteAssetTypeButton = ({\n record,\n eventTypes,\n backPath,\n history,\n notify,\n isDisabled,\n className,\n}) => {\n const classes = useStyles();\n const [isDeleting, setIsDeleting] = useState(false);\n\n const handleDelete = async (event) => {\n debugger;\n if (eventTypes?.length > 0) {\n notify(\"Asset linked to an Event cannot be deleted.\", \"warning\");\n return;\n }\n\n try {\n setIsDeleting(true);\n await API.graphql(\n graphqlOperation(deleteAssetType, { input: { id: record.id } })\n );\n notify(\"Asset type deleted successfully\");\n const tab = history.location.state.tab;\n deepRedirect(history, backPath, null, null, { tab });\n } catch (error) {\n logError(\n \"assetTypes:DeepDeleteAssetTypeButton:handleDelete\",\n error,\n notify\n );\n } finally {\n setIsDeleting(false);\n }\n };\n\n return (\n <Button\n label=\"Delete\"\n disabled={!record || isDeleting || isDisabled}\n onClick={handleDelete}\n className={classnames(\n \"ra-delete-button\",\n classes.deleteButton,\n className\n )}\n >\n <DeleteIcon />\n </Button>\n );\n};\n","import { API, graphqlOperation } from \"aws-amplify\";\nimport { eventTypeByActiveByAssetType } from \"../../../graphql/queries\";\n\nimport { minValue, number, required } from \"react-admin\";\n\nimport get from \"lodash/get\";\n\nimport { parseTime } from \"../../../utils/utils\";\nimport { logError } from \"../../../utils/appUtils\";\n\nexport const fetchEventTypes = async (record, setEvents, notify) => {\n debugger;\n try {\n const searchQuery = {\n reloadYardId: window.appUser?.reloadYardId,\n activeAssetTypeId: {\n eq: {\n active: \"true\",\n assetTypeId: record.id,\n },\n },\n };\n const results = await API.graphql(\n graphqlOperation(eventTypeByActiveByAssetType, searchQuery)\n );\n const linkedEvents = results.data.eventTypeByActiveByAssetType.items;\n\n setEvents(linkedEvents);\n } catch (error) {\n logError(\"assetTypes:AssetTypeUtils:fetchEventTypes\", error, notify);\n }\n};\n\nexport const validateStartTime = (value, allValues, getSource) => {\n const today = new Date();\n const source = getSource(\"endDayTime\");\n const endDayTime = get(allValues, source, null);\n\n if (!value || !endDayTime) return undefined;\n\n // Use `value` for real-time validation of the modified field\n const startEventTime = parseTime(value);\n const endEventTime = parseTime(endDayTime);\n\n const startDate = new Date(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n startEventTime.hour,\n startEventTime.minute\n );\n\n const endDate = new Date(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n endEventTime.hour,\n endEventTime.minute\n );\n\n if (startDate >= endDate) {\n return \"Must be earlier than end time\";\n }\n\n return undefined;\n};\n\nexport const validateEndTime = (value, allValues, getSource) => {\n const today = new Date();\n const source = getSource(\"startDayTime\");\n const startDayTime = get(allValues, source, null);\n\n if (!value || !startDayTime) return undefined;\n\n // Use `value` for real-time validation of the modified field\n const startEventTime = parseTime(startDayTime);\n const endEventTime = parseTime(value);\n\n const startDate = new Date(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n startEventTime.hour,\n startEventTime.minute\n );\n\n const endDate = new Date(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n endEventTime.hour,\n endEventTime.minute\n );\n\n if (startDate >= endDate) {\n return \"Must be later than start time\";\n }\n\n return undefined;\n};\n\nexport const validateDurationAndBuffer = (value, allValues) => {\n if (!value || !allValues?.schedule?.workdays) return undefined;\n\n // Filter selected workdays\n const selectedDays = allValues.schedule.workdays.filter(\n (day) => day.selected\n );\n\n if (!selectedDays.length) return undefined;\n\n // Find the workday with the **shortest** available time range\n const shortestDay = selectedDays.reduce(\n (shortest, day) => {\n const startWorkTime = parseTime(day.startDayTime);\n const endWorkTime = parseTime(day.endDayTime);\n const availableMinutes =\n endWorkTime.hour * 60 +\n endWorkTime.minute -\n (startWorkTime.hour * 60 + startWorkTime.minute);\n\n return availableMinutes < shortest.availableMinutes\n ? { day, availableMinutes, startWorkTime, endWorkTime }\n : shortest;\n },\n {\n day: selectedDays[0], // Initialize with the first workday\n availableMinutes: Infinity, // Start with a high number\n startWorkTime: parseTime(selectedDays[0].startDayTime),\n endWorkTime: parseTime(selectedDays[0].endDayTime),\n }\n );\n\n // Compute event's total required time\n const totalEventMinutes =\n (allValues.duration || 0) + (allValues.bufferTime || 0);\n\n return totalEventMinutes > shortestDay.availableMinutes\n ? `Exceeds available hours (${shortestDay.day.name}: ${shortestDay.day.startDayTime} - ${shortestDay.day.endDayTime})`\n : undefined;\n};\n\nexport const validatePositiveNumber = [\n required(),\n number(),\n minValue(0, \"Must be 0 or greater\"),\n];\n","import React, { useEffect, useState } from \"react\";\n\nimport {\n Edit,\n SaveButton,\n SimpleForm,\n Toolbar,\n TopToolbar,\n useEditController,\n useNotify,\n useRecordContext,\n} from \"react-admin\";\n\nimport { BackButton } from \"../../../components/common/BackButton\";\nimport { ForceTitle } from \"../../../components/common/ForceTitle\";\nimport { logError } from \"../../../utils/appUtils\";\nimport { deepRedirect, getBackPath } from \"../../../utils/utils\";\nimport { AssetTypeForm } from \"./AssetTypeForm\";\nimport { DeepDeleteAssetTypeButton } from \"./DeepDeleteAssetTypeButton\";\nimport { fetchEventTypes } from \"./AssetTypeUtils\";\n\nconst EditToolbar = (props) => {\n const notify = useNotify();\n const { eventTypes, backPath, history } = props;\n const [saving, setSaving] = useState(false);\n const record = useRecordContext();\n\n const onSuccess = () => {\n setSaving(false);\n notify(`Asset updated successfully.`);\n deepRedirect(history, backPath);\n };\n\n const onFailure = (error) => {\n setSaving(false);\n logError(\"assetTypes:AssetTypeEdit:onFailure\", error, notify);\n };\n\n return (\n <Toolbar {...props} style={{ justifyContent: \"space-between\" }}>\n <SaveButton\n label=\"Save\"\n disabled={props.pristine || saving}\n onSuccess={onSuccess}\n onFailure={onFailure}\n />\n <DeepDeleteAssetTypeButton\n record={record}\n eventTypes={eventTypes}\n history={history}\n backPath={backPath}\n notify={notify}\n />\n </Toolbar>\n );\n};\n\nconst EditActions = (props) => (\n <TopToolbar>\n <BackButton {...props} />\n </TopToolbar>\n);\n\nexport const AssetTypeEdit = (props) => {\n const notify = useNotify();\n const { record } = useEditController(props);\n const [eventTypes, setEventTypes] = useState([]);\n const backPath = getBackPath(props);\n\n useEffect(() => {\n if (record) {\n fetchEventTypes(record, setEventTypes, notify);\n }\n }, [record]);\n\n return (\n <Edit\n {...props}\n title={<ForceTitle title=\"Edit Asset\" />}\n mutationMode=\"pessimistic\"\n actions={<EditActions {...props} backPath={backPath} />}\n >\n <SimpleForm\n variant=\"outlined\"\n submitOnEnter={false}\n toolbar={\n <EditToolbar {...props} eventTypes={eventTypes} backPath={backPath} />\n }\n >\n <AssetTypeForm eventTypes={eventTypes} />\n </SimpleForm>\n </Edit>\n );\n};\n","import React from \"react\";\n\nimport {\n Admin,\n Resource,\n ShowGuesser,\n // EditGuesser,\n} from \"react-admin\";\n\nimport { myDataProvider } from \"../dataProvider/dataProvider\";\nimport reducer from \"../reducer\";\n\nimport customRoutes from \"../routes\";\n\nimport { ManagerLayout } from \"./layout/ManagerLayout\";\nimport { ManagerDashboard } from \"./layout/ManagerDashboard\";\n\nimport { AccountList } from \"./resources/accounts/AccountList\";\nimport { AccountCreate } from \"./resources/accounts/AccountCreate\";\nimport { AccountEdit } from \"./resources/accounts/AccountEdit\";\nimport { AccountShow } from \"./resources/accounts/AccountShow\";\n\nimport { AuditList } from \"./resources/audits/AuditList\";\nimport { AuditCreate } from \"./resources/audits/AuditCreate\";\nimport { AuditEdit } from \"./resources/audits/AuditEdit\";\n\nimport { InvoiceList } from \"./resources/invoices/InvoiceList\";\nimport { InvoiceCreate } from \"./resources/invoices/InvoiceCreate\";\nimport { InvoiceEdit } from \"./resources/invoices/InvoiceEdit\";\nimport { InvoiceShow } from \"./resources/invoices/InvoiceShow\";\n\nimport { MyYardShow } from \"./resources/reloadYard/ReloadYardShow\";\nimport { MyYardEdit } from \"./resources/reloadYard/ReloadYardEdit\";\n\nimport { InboundList } from \"./resources/inboundShipments/InboundList\";\nimport { InboundCreate } from \"./resources/inboundShipments/InboundCreate\";\nimport { InboundEdit } from \"./resources/inboundShipments/InboundEdit\";\nimport { InboundShow } from \"./resources/inboundShipments/InboundShow\";\n\nimport { OutboundList } from \"./resources/outboundShipments/OutboundList\";\nimport { OutboundCreate } from \"./resources/outboundShipments/OutboundCreate\";\nimport { OutboundEdit } from \"./resources/outboundShipments/OutboundEdit\";\nimport { OutboundShow } from \"./resources/outboundShipments/OutboundShow\";\nimport { PickListItemEdit } from \"./resources/outboundShipments/lineItem/PickListItemEdit\";\n\nimport { InventoryList } from \"./resources/inventory/InventoryList\";\nimport { InventoryEdit } from \"./resources/inventory/InventoryEdit\";\nimport { InventoryShow } from \"./resources/inventory/InventoryShow\";\nimport { InventoryItemCreate } from \"./resources/inventory/inventoryItems/InventoryItemCreate\";\nimport { InventoryItemEdit } from \"./resources/inventory/inventoryItems/InventoryItemEdit\";\nimport { InventoryItemShow } from \"./resources/inventory/inventoryItems/InventoryItemShow\";\n\nimport { UserList } from \"./resources/users/UserList\";\nimport { UserCreate } from \"./resources/users/UserCreate\";\nimport { UserEdit } from \"./resources/users/UserEdit\";\nimport { UserShow } from \"./resources/users/UserShow\";\n\nimport { CustomerList } from \"./resources/customers/CustomerList\";\nimport { CustomerCreate } from \"./resources/customers/CustomerCreate\";\nimport { CustomerEdit } from \"./resources/customers/CustomerEdit\";\n// import { UserShow } from \"./resources/users/UserShow\";\n\nimport { FileCreate } from \"./resources/files/FileCreate\";\nimport { FileEdit } from \"./resources/files/FileEdit\";\nimport { FileList } from \"./resources/files/FileList\";\n\nimport { ProductCreate } from \"./resources/products/ProductCreate\";\nimport { ProductEdit } from \"./resources/products/ProductEdit\";\n\nimport { ServiceEdit } from \"./resources/services/ServiceEdit\";\nimport { ServiceCreate } from \"./resources/services/ServiceCreate\";\n\nimport { TaskList } from \"./resources/tasks/TaskList\";\nimport { TaskCreate } from \"./resources/tasks/TaskCreate\";\nimport { TaskEdit } from \"./resources/tasks/TaskEdit\";\n\nimport { theme, darkTheme } from \"../withRoot\";\nimport { useThemeState } from \"../ThemeStateProvider\";\n\nimport { EventTypeCreate } from \"./resources/eventTypes/EventTypeCreate\";\nimport { EventTypeEdit } from \"./resources/eventTypes/EventTypeEdit\";\nimport { ChecklistCreate } from \"./resources/checklists/ChecklistCreate\";\nimport { ChecklistEdit } from \"./resources/checklists/ChecklistEdit\";\nimport { AssetTypeCreate } from \"./resources/assetTypes/AssetTypeCreate\";\nimport { AssetTypeEdit } from \"./resources/assetTypes/AssetTypeEdit\";\n\nexport const ManagerApp = ({ adminHistory }) => {\n const { palette } = useThemeState();\n\n return (\n <Admin\n disableTelemetry\n title=\"Transloads.co\"\n dashboard={ManagerDashboard}\n options={{ authGroups: [] }}\n dataProvider={myDataProvider}\n layout={ManagerLayout}\n customRoutes={customRoutes}\n customReducers={{ data: reducer }}\n theme={palette === \"light\" ? theme : darkTheme}\n history={adminHistory}\n >\n <Resource\n title={\"Inbound Shipments\"}\n name=\"inboundShipments\"\n list={InboundList}\n create={InboundCreate}\n edit={InboundEdit}\n show={InboundShow}\n />\n <Resource\n name=\"outboundShipments\"\n list={OutboundList}\n create={OutboundCreate}\n edit={OutboundEdit}\n show={OutboundShow}\n />\n <Resource name=\"shipmentLineItems\" edit={PickListItemEdit} />\n <Resource\n name=\"inventories\"\n list={InventoryList}\n show={InventoryShow}\n edit={InventoryEdit}\n />\n <Resource\n name=\"inventoryItems\"\n create={InventoryItemCreate}\n edit={InventoryItemEdit}\n show={InventoryItemShow}\n />\n <Resource\n name=\"audits\"\n list={AuditList}\n create={AuditCreate}\n show={ShowGuesser}\n edit={AuditEdit}\n />\n <Resource\n name=\"accounts\"\n list={AccountList}\n create={AccountCreate}\n show={AccountShow}\n edit={AccountEdit}\n />\n <Resource\n name=\"invoices\"\n list={InvoiceList}\n create={InvoiceCreate}\n show={InvoiceShow}\n edit={InvoiceEdit}\n />\n <Resource name=\"reloadYards\" show={MyYardShow} edit={MyYardEdit} />\n <Resource name=\"services\" edit={ServiceEdit} create={ServiceCreate} />\n <Resource\n name=\"users\"\n list={UserList}\n create={UserCreate}\n show={UserShow}\n edit={UserEdit}\n />\n <Resource\n name=\"customers\"\n list={CustomerList}\n create={CustomerCreate}\n edit={CustomerEdit}\n // show={UserShow}\n />\n <Resource\n title={\"Tasks\"}\n name=\"tasks\"\n list={TaskList}\n create={TaskCreate}\n edit={TaskEdit}\n />\n <Resource\n title={\"Documents\"}\n name=\"files\"\n list={FileList}\n create={FileCreate}\n edit={FileEdit}\n />\n <Resource\n title={\"Product Catalog\"}\n name=\"products\"\n create={ProductCreate}\n edit={ProductEdit}\n />\n <Resource\n title={\"Asset Types\"}\n name=\"assetTypes\"\n create={AssetTypeCreate}\n edit={AssetTypeEdit}\n />\n <Resource\n title={\"Event Types\"}\n name=\"eventTypes\"\n create={EventTypeCreate}\n edit={EventTypeEdit}\n />\n <Resource\n title={\"Checklists\"}\n name=\"checklists\"\n create={ChecklistCreate}\n edit={ChecklistEdit}\n />\n <Resource name=\"areas\" />\n <Resource name=\"zones\" />\n <Resource name=\"locations\" />\n <Resource name=\"capabilitys\" />\n <Resource name=\"commoditys\" />\n <Resource name=\"reloadYardCommoditys\" />\n <Resource name=\"reloadYardCapabilitys\" />\n </Admin>\n );\n};\n","import React from \"react\";\nimport { Grid } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { Title } from \"react-admin\";\nimport { Tasks } from \"../../../crewApp/pages/myTasks/MyTasks\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n // marginTop: theme.spacing(1),\n },\n}));\n\nexport const CrewDashboard = (props) => {\n const classes = useStyles();\n\n return (\n <div className={classes.root}>\n <Title title=\" \" />\n <Grid container spacing=\"2\">\n <Grid item xs={12}>\n <Tasks {...props} hideTitle={true} redirectTo=\"/\" />\n </Grid>\n </Grid>\n </div>\n );\n};\n","import * as React from \"react\";\nimport { Route } from \"react-router-dom\";\n\nimport Audit from \"../pages/audit/Audit\";\nimport { InventorySearch } from \"../pages/inventorySearch/InventorySearch\";\nimport Locations from \"../pages/locationSearch/Locations\";\nimport { Maps } from \"../pages/yardMap/Maps\";\nimport { ProcessShipments } from \"../pages/inboundShipments/ProcessShipments\";\nimport ProcessOutboundShipments from \"../pages/outboundShipments/ProcessOutboundShipments\";\nimport { Tasks } from \"../pages/myTasks/MyTasks\";\nimport { YardUtilization } from \"../pages/utilization/YardUtilization\";\nimport { Documents } from \"../pages/documents/Documents\";\nimport Logout from \"../../components/Logout\";\nimport NetworkError from \"../../components/NetworkError\";\nimport TrackLocationContainer from \"../pages/trackManagement/TrackLocation\";\n\nconst routes = [\n <Route\n path=\"/processShipments\"\n render={(props) => <ProcessShipments {...props} />}\n />,\n <Route\n path=\"/processOutboundShipments\"\n render={(props) => <ProcessOutboundShipments {...props} />}\n />,\n <Route path=\"/locations\" render={(props) => <Locations {...props} />} />,\n <Route path=\"/search\" render={(props) => <InventorySearch {...props} />} />,\n <Route path=\"/maps\" render={(props) => <Maps {...props} />} />,\n <Route path=\"/processAudit\" render={(props) => <Audit {...props} />} />,\n <Route path=\"/mytasks\" render={(props) => <Tasks {...props} />} />,\n <Route\n path=\"/utilization\"\n render={(props) => <YardUtilization {...props} />}\n />,\n <Route\n path=\"/trackManagement\"\n render={(props) => <TrackLocationContainer {...props} />}\n />,\n <Route path=\"/documents\" render={(props) => <Documents {...props} />} />,\n <Route exact path=\"/logout\" render={() => <Logout />} />,\n <Route\n path=\"/networkError\"\n render={(props) => <NetworkError {...props} />}\n />,\n];\n\nexport default routes;\n","import React, { Fragment } from \"react\";\n\nimport { AppBar } from \"react-admin\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport Announcements from \"../../components/common/Announcements.js\";\n\nimport { theme } from \"../../withRoot.js\";\nimport { ThemeProvider } from \"@material-ui/core/styles\";\n\n// target refresh button in AppBar to hide for mobile portal.\nexport const appBarTheme = {\n ...theme,\n // overrides default theme css\n overrides: {\n // targeting refresh button\n RaAppBar: {\n toolbar: {\n \"& button\": {\n \"&:not(:nth-child(1))\": { display: \"none\" },\n },\n },\n },\n },\n};\n\nconst useStyles = makeStyles((appBarTheme) => ({\n title: { display: \"none\" },\n logo: {\n margin: \"auto\",\n },\n spacer: { flex: 1 },\n}));\n\nexport const CrewAppBar = (props, userMenu) => {\n const classes = useStyles();\n const svgLogo = \"/logo_transloads_white.svg\";\n\n return (\n <ThemeProvider theme={appBarTheme}>\n <AppBar\n {...props}\n color=\"primary\"\n userMenu={userMenu}\n container={Fragment}\n >\n <span className={classes.spacer} />\n <div className={classes.logo}>\n <img src={svgLogo} alt=\"transloads.co logo\" height=\"30px\" />\n </div>\n <span className={classes.spacer} />\n </AppBar>\n <Announcements />\n </ThemeProvider>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { FormControlLabel, Typography, ListItemIcon } from \"@material-ui/core\";\nimport { makeStyles, ThemeProvider } from \"@material-ui/core/styles\";\nimport MoreVertIcon from \"@material-ui/icons/MoreVert\";\n\nimport { Layout, Notification, UserMenu, MenuItemLink } from \"react-admin\";\n\nimport { CrewMenu } from \"./CrewMenu.js\";\nimport { CrewAppBar } from \"./CrewAppBar.js\";\nimport { useThemeState } from \"../../ThemeStateProvider.js\";\nimport { theme, darkTheme } from \"../../withRoot.js\";\nimport {\n AppInfoIcon,\n BugIcon,\n ThemeToggleIcon,\n} from \"../../components/common/index.js\";\nimport { LogoutIcon, ProfileIcon } from \"../../components/common/index.js\";\nimport DefaultError from \"../../components/DefaultError.js\";\nimport { AppInfoDialog } from \"../../components/common/AppInfoDialog.js\";\n\nconst useStyles = makeStyles((theme) => ({\n menuItemLink: {\n paddingLeft: theme.spacing(3.3),\n paddingBottom: theme.spacing(0.5),\n },\n menuItemIcon: {\n minWidth: theme.spacing(0),\n padding: 0,\n margin: 0,\n },\n menuItemLabel: {\n marginLeft: -theme.spacing(2),\n },\n}));\n\nconst CrewUserMenu = ({ toggleAppInfoOpen, ...props }) => {\n const { palette, toggleTheme } = useThemeState();\n const classes = useStyles();\n\n const handleBugReport = () => {\n window.open(\"https://transloads.co/submit-a-ticket/\", \"_blank\");\n };\n\n return (\n <ThemeProvider theme={palette === \"light\" ? theme : darkTheme}>\n <UserMenu label=\"USER\" icon={<MoreVertIcon />}>\n <MenuItemLink\n to={false}\n primaryText={window.appUser?.fullName}\n leftIcon={<ProfileIcon />}\n />\n <div>\n <FormControlLabel\n color=\"textSecondary\"\n control={\n <ListItemIcon>\n <ThemeToggleIcon\n fontSize=\"medium\"\n color=\"inherit\"\n className={classes.menuItemIcon}\n />\n </ListItemIcon>\n }\n label={\n <Typography\n color=\"textSecondary\"\n className={classes.menuItemLabel}\n >\n Theme\n </Typography>\n }\n onClick={toggleTheme}\n className={classes.menuItemLink}\n />\n </div>\n <div>\n <FormControlLabel\n color=\"textSecondary\"\n control={\n <ListItemIcon>\n <AppInfoIcon\n fontSize=\"medium\"\n color=\"inherit\"\n className={classes.menuItemIcon}\n />\n </ListItemIcon>\n }\n label={\n <Typography\n color=\"textSecondary\"\n className={classes.menuItemLabel}\n >\n App Info\n </Typography>\n }\n onClick={toggleAppInfoOpen}\n className={classes.menuItemLink}\n />\n </div>\n <div>\n <FormControlLabel\n color=\"textSecondary\"\n control={\n <ListItemIcon>\n <BugIcon\n fontSize=\"medium\"\n color=\"inherit\"\n className={classes.menuItemIcon}\n />\n </ListItemIcon>\n }\n label={\n <Typography\n color=\"textSecondary\"\n className={classes.menuItemLabel}\n >\n Log a Ticket\n </Typography>\n }\n onClick={handleBugReport}\n className={classes.menuItemLink}\n />\n </div>\n <MenuItemLink\n to=\"/logout\"\n primaryText=\"Logout\"\n leftIcon={<LogoutIcon />}\n />\n </UserMenu>\n </ThemeProvider>\n );\n};\n\nconst CrewLayout = (props) => {\n const [appInfoOpen, setAppInfoOpen] = useState(false);\n const toggleAppInfoOpen = (_, reason) => {\n if (reason !== \"backdropClick\") setAppInfoOpen(!appInfoOpen);\n };\n const userMenu = <CrewUserMenu toggleAppInfoOpen={toggleAppInfoOpen} />;\n\n return (\n <>\n <Layout\n {...props}\n appBar={(props) => CrewAppBar(props, userMenu)}\n menu={CrewMenu}\n notification={Notification}\n error={DefaultError}\n />\n <AppInfoDialog isOpen={appInfoOpen} onClose={toggleAppInfoOpen} />\n </>\n );\n};\n\nexport default CrewLayout;\n","import React from \"react\";\n\nimport { Admin, Resource } from \"react-admin\";\n\nimport reducer from \"../reducer\";\n\nimport { myDataProvider } from \"../dataProvider/dataProvider\";\n\nimport { CrewDashboard } from \"./pages/dashboard/CrewDashboard\";\n\nimport CrewRoutes from \"./layout/CrewRoutes\";\nimport CrewLayout from \"./layout/CrewLayout\";\n\nimport { TaskList } from \"../managerApp/resources/tasks/TaskList\";\nimport { TaskCreate } from \"../managerApp/resources/tasks/TaskCreate\";\nimport { TaskEdit } from \"../managerApp/resources/tasks/TaskEdit\";\n\nimport { useThemeState } from \"../ThemeStateProvider\";\nimport { theme, darkTheme } from \"../withRoot\";\n\nexport const CrewApp = ({ adminHistory }) => {\n const { palette } = useThemeState();\n\n return (\n <Admin\n disableTelemetry\n title=\"Transloads.co\"\n dashboard={CrewDashboard}\n options={{ authGroups: [] }}\n dataProvider={myDataProvider}\n customRoutes={CrewRoutes}\n customReducers={{ data: reducer }}\n layout={CrewLayout}\n theme={palette === \"light\" ? theme : darkTheme}\n history={adminHistory}\n >\n <Resource\n title={\"Tasks\"}\n name=\"tasks\"\n list={TaskList}\n edit={TaskEdit}\n create={TaskCreate}\n />\n </Admin>\n );\n};\n","import { useSnackbar } from \"notistack\";\nimport { ERROR_MSG } from \"./constants\";\n\nconst useToast = () => {\n const { enqueueSnackbar } = useSnackbar();\n\n return (msg = ERROR_MSG, variant = \"error\") =>\n enqueueSnackbar(msg, {\n variant,\n anchorOrigin: {\n vertical: \"bottom\",\n horizontal: \"center\",\n },\n });\n};\n\nexport default useToast;\n","import { createContext } from \"react\";\nimport { AreaType } from \"../utils/constants\";\nimport { EMAIL_REGEX, URL_REGEX } from \"../utils/useForm\";\n\nconst validateYard = (values) => {\n debugger;\n let errors = {};\n if (!values.firstName || values.firstName.trim().length === 0)\n errors.firstName = \"First name is required\";\n if (!values.lastName || values.lastName.trim().length === 0)\n errors.lastName = \"Last name is required\";\n if (!values.userPhone || values.userPhone.trim().length === 0)\n errors.userPhone = \"User phone is required\";\n if (!values.businessName || values.businessName.trim().length === 0)\n errors.businessName = \"Business name is required\";\n if (!values.phoneNumber || values.phoneNumber.trim().length === 0)\n errors.phoneNumber = \"Phone number is required\";\n if (!values.email) errors.email = \"Email is required\";\n else if (!EMAIL_REGEX.test(values.email)) errors.email = \"Invalid email\";\n if (values.website && !URL_REGEX.test(values.website))\n errors.website = \"Invalid URL\";\n // try {\n // values.website && new URL(values.website);\n // } catch (_) {\n // errors.website = \"Invalid URL\";\n // }\n if (!values.street || values.street.trim().length === 0)\n errors.street = \"Street name is required\";\n if (!values.city || values.city.trim().length === 0)\n errors.city = \"City is required\";\n if (!values.state || values.state.trim().length === 0)\n errors.state = \"State is required\";\n if (!values.zip || values.zip.trim().length === 0)\n errors.zip = \"Postal code is required\";\n if (!values.country || values.country.trim().length === 0)\n errors.country = \"Country is required\";\n if (!values.timeZone || values.timeZone.trim().length === 0)\n errors.timeZone = \"Time zone is required\";\n\n return errors;\n};\n\nconst validateAccess = (values) => {\n debugger;\n let errors = {};\n if (!values.lotCapacityAcres)\n errors.lotCapacityAcres = \"Yard capacity is required\";\n else if (isNaN(values.lotCapacityAcres) || values.lotCapacityAcres < 0)\n errors.lotCapacityAcres = \"Invalid Yard capacity\";\n if (!values.trackCapacity)\n errors.trackCapacity = \"Track capacity is required\";\n else if (values.trackCapacity && isNaN(values.trackCapacity))\n errors.trackCapacity = \"Invalid track capacity\";\n if (!values.warehouseCapacity)\n errors.warehouseCapacity = \"Warehouse capacity is required\";\n else if (isNaN(values.warehouseCapacity) || values.warehouseCapacity < 0)\n errors.warehouseCapacity = \"Invalid Warehouse capacity\";\n return errors;\n};\n\nconst validateCommodities = (values) => {\n return {};\n};\n\nexport const initState = {\n yardInfo: {\n firstName: \"\",\n lastName: \"\",\n userPhone: \"\",\n userEmail: \"\",\n businessName: \"\",\n phoneNumber: \"\",\n faxNumber: \"\",\n email: \"\",\n website: \"\",\n street: \"\",\n city: \"\",\n state: \"\",\n zip: \"\",\n country: \"USA\",\n taxRates: [{ taxCode: \"Exempt\", taxRate: 0 }],\n accessToRailHighway: [],\n lotCapacityAcres: \"\",\n trackCapacity: \"\",\n warehouseCapacity: \"\",\n },\n commodities: [],\n capabilities: [],\n forkLiftMaxCapacity: null,\n validators: [validateYard, validateAccess, validateCommodities],\n errors: {},\n note: \"\",\n activeStep: 0,\n areas: [\n {\n id: \"YARD\",\n name: \"Yard\",\n prefix: \"Y\",\n color: \"#81C784\",\n areaType: AreaType.YARD,\n },\n {\n id: \"WAREHOUSE\",\n name: \"Warehouse\",\n prefix: \"W\",\n color: \"#FFB74D\",\n areaType: AreaType.WAREHOUSE,\n },\n {\n id: \"TRACK\",\n name: \"Track\",\n prefix: \"T\",\n color: \"#4DD0E1\",\n areaType: AreaType.TRACK,\n },\n ],\n zones: [\n {\n id: \"DEFAULT-Y\",\n name: \"Default\",\n prefix: \"\",\n color: \"#8bc34a\",\n zoneType: \"DEFAULT\",\n areaId: \"YARD\",\n },\n {\n id: \"DEFAULT-W\",\n name: \"Default\",\n prefix: \"\",\n color: \"#FFB74D\",\n zoneType: \"DEFAULT\",\n areaId: \"WAREHOUSE\",\n },\n {\n id: \"DEFAULT-T\",\n name: \"Default\",\n prefix: \"\",\n color: \"#4DD0E1\",\n zoneType: \"DEFAULT\",\n areaId: \"TRACK\",\n },\n ],\n};\n\nexport default createContext(initState);\n","import React, { useContext } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n Grid,\n TextField,\n OutlinedInput,\n InputLabel,\n FormControl,\n FormHelperText,\n MenuItem,\n Divider,\n Typography,\n} from \"@material-ui/core\";\n\nimport { CountryList, usTimeZoneOptions } from \"../utils/constants\";\nimport useForm from \"../utils/useForm\";\nimport SetupContext from \"./context\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n },\n selectedAccess: {\n display: \"flex\",\n flexWrap: \"wrap\",\n marginTop: theme.spacing(1),\n marginLeft: theme.spacing(1),\n \"& > *\": {\n margin: theme.spacing(0.5),\n },\n },\n addButton: {\n marginTop: theme.spacing(1.25),\n marginLeft: theme.spacing(1),\n },\n addInput: {\n marginTop: theme.spacing(1),\n minWidth: \"50%\",\n },\n divider: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n },\n}));\n\nexport const YardInfo = () => {\n const classes = useStyles();\n const { state, dispatch } = useContext(SetupContext);\n const { yardInfo } = state;\n const { handleChange } = useForm(state, dispatch, \"yardInfo\");\n\n let { errors } = state;\n\n return (\n <Grid container spacing={2} className={classes.root}>\n <Grid item xs={12}>\n <Typography variant=\"subtitle1\">User information</Typography>\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n name=\"firstName\"\n label=\"First name\"\n id=\"firstName\"\n helperText={errors[\"firstName\"] ? errors[\"firstName\"] : \"\"}\n autoFocus\n error={errors[\"firstName\"] ? true : false}\n margin=\"dense\"\n required\n variant=\"outlined\"\n fullWidth\n value={yardInfo.firstName}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n name=\"lastName\"\n label=\"Last name\"\n id=\"lastName\"\n helperText={errors[\"lastName\"] ? errors[\"lastName\"] : \"\"}\n error={errors[\"lastName\"] ? true : false}\n required\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={yardInfo.lastName}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n name=\"userPhone\"\n label=\"Phone number\"\n id=\"userPhone\"\n helperText={errors[\"userPhone\"] ? errors[\"userPhone\"] : \"\"}\n error={errors[\"userPhone\"] ? true : false}\n required\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={yardInfo.userPhone}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n name=\"userEmail\"\n label=\"Email\"\n id=\"userEmail\"\n disabled\n required\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={window.appUser?.email}\n />\n </Grid>\n <Grid item xs={12} sm={12}>\n <div className={classes.divider}>\n <Divider variant=\"fullWidth\"></Divider>\n </div>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"subtitle1\">Business information</Typography>\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n name=\"businessName\"\n label=\"Business name\"\n id=\"businessName\"\n helperText={errors[\"businessName\"] ? errors[\"businessName\"] : \"\"}\n error={errors[\"businessName\"] ? true : false}\n margin=\"dense\"\n required\n variant=\"outlined\"\n fullWidth\n value={yardInfo.businessName}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n name=\"phoneNumber\"\n label=\"Phone number\"\n id=\"phoneNumber\"\n helperText={errors[\"phoneNumber\"] ? errors[\"phoneNumber\"] : \"\"}\n error={errors[\"phoneNumber\"] ? true : false}\n required\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={yardInfo.phoneNumber}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n name=\"faxNumber\"\n label=\"Fax number\"\n id=\"faxNumber\"\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={yardInfo.faxNumber}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n name=\"email\"\n label=\"Email\"\n id=\"email\"\n helperText={errors[\"email\"] ? errors[\"email\"] : \"\"}\n error={errors[\"email\"] ? true : false}\n required\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={yardInfo.email}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <FormControl fullWidth margin=\"dense\" variant=\"outlined\">\n <InputLabel htmlFor=\"outlined-dense-website\">Website</InputLabel>\n <OutlinedInput\n type=\"url\"\n name=\"website\"\n label=\"Website\"\n id=\"url\"\n error={errors[\"website\"] ? true : false}\n value={yardInfo.website}\n onChange={handleChange}\n />\n <FormHelperText id=\"outlined-website-helper-text\">\n {errors[\"website\"] ? errors[\"website\"] : \"\"}\n </FormHelperText>\n </FormControl>\n </Grid>\n <Grid item xs={12} sm={6}></Grid>\n <Grid item xs={12} sm={12}>\n <div className={classes.divider}>\n <Divider variant=\"fullWidth\"></Divider>\n </div>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"subtitle1\">Business address</Typography>\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n name=\"street\"\n label=\"Street\"\n id=\"street\"\n helperText={errors[\"street\"] ? errors[\"street\"] : \"\"}\n error={errors[\"street\"] ? true : false}\n required\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={yardInfo.street}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n name=\"city\"\n label=\"City\"\n id=\"city\"\n helperText={errors[\"city\"] ? errors[\"city\"] : \"\"}\n error={errors[\"city\"] ? true : false}\n required\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={yardInfo.city}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} sm={4}>\n <TextField\n name=\"state\"\n label=\"State/Province\"\n id=\"state\"\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n required\n inputProps={{ maxLength: 2, style: { textTransform: \"uppercase\" } }}\n helperText={errors[\"state\"] ? errors[\"state\"] : \"\"}\n error={errors[\"state\"] ? true : false}\n value={yardInfo.state}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} sm={4}>\n <TextField\n name=\"zip\"\n label=\"Postal code\"\n helperText={errors[\"zip\"] ? errors[\"zip\"] : \"\"}\n error={errors[\"zip\"] ? true : false}\n required\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={yardInfo.zip}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} sm={4}>\n <TextField\n name=\"country\"\n label=\"Country\"\n id=\"country\"\n select\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n required\n helperText={errors[\"country\"] ? errors[\"country\"] : \"\"}\n error={errors[\"country\"] ? true : false}\n value={yardInfo.country}\n onChange={handleChange}\n >\n {CountryList.map((option) => (\n <MenuItem key={option.id} value={option.id}>\n {option.name}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n <Grid item xs={12} sm={4}>\n <TextField\n name=\"timeZone\"\n label=\"Time Zone\"\n id=\"timeZone\"\n select\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n required\n helperText={errors[\"timeZone\"] ? errors[\"timeZone\"] : \"\"}\n error={errors[\"timeZone\"] ? true : false}\n value={yardInfo.timeZone}\n onChange={handleChange}\n >\n {usTimeZoneOptions.map((option) => (\n <MenuItem key={option.id} value={option.id}>\n {option.name}\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n </Grid>\n );\n};\n","import React, { useState, useContext } from \"react\";\n\nimport {\n Grid,\n TextField,\n Button,\n Chip,\n InputAdornment,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport AddIcon from \"@material-ui/icons/Add\";\n\nimport useForm from \"../utils/useForm\";\nimport SetupContext from \"./context\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: theme.spacing(4),\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n },\n selectedAccess: {\n display: \"flex\",\n flexWrap: \"wrap\",\n marginTop: theme.spacing(2),\n marginLeft: theme.spacing(2),\n \"& > *\": {\n margin: theme.spacing(0.5),\n },\n },\n addButton: {\n marginTop: theme.spacing(1.25),\n marginLeft: theme.spacing(1),\n },\n addInput: {\n marginTop: theme.spacing(1),\n\n minWidth: \"50%\",\n },\n divider: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n },\n}));\n\nexport const AccessAndCapacity = () => {\n const { state, dispatch } = useContext(SetupContext);\n const { yardInfo } = state;\n const { handleChange } = useForm(state, dispatch, \"yardInfo\");\n const [newAcess, setNewAcess] = useState();\n const classes = useStyles();\n\n const addAccess = () => {\n if (!newAcess || yardInfo.accessToRailHighway.includes(newAcess)) return;\n dispatch({ type: \"ADD_ACCESS\", payload: newAcess });\n setNewAcess(\"\");\n };\n\n const deleteAccess = (toDelete) => {\n dispatch({ type: \"REMOVE_ACCESS\", payload: toDelete });\n };\n\n const handleAccessSubmit = (evt) => {\n evt.preventDefault();\n addAccess();\n };\n let { errors } = state;\n\n return (\n <Grid container spacing={2} className={classes.root}>\n <Grid item xs={12} sm={6}>\n <TextField\n name=\"lotCapacityAcres\"\n label=\"Open Air Yard Capacity\"\n id=\"outlined-margin-dense\"\n helperText={\n errors[\"lotCapacityAcres\"] ? errors[\"lotCapacityAcres\"] : \"\"\n }\n error={errors[\"lotCapacityAcres\"] ? true : false}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"start\">Acres</InputAdornment>\n ),\n }}\n autoFocus\n required\n type=\"number\"\n margin=\"dense\"\n variant=\"outlined\"\n fullWidth\n value={yardInfo.lotCapacityAcres}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n name=\"warehouseCapacity\"\n label=\"Covered / Warehouse capacity\"\n required\n margin=\"dense\"\n helperText={\n errors[\"warehouseCapacity\"] ? errors[\"warehouseCapacity\"] : \"\"\n }\n error={errors[\"warehouseCapacity\"] ? true : false}\n variant=\"outlined\"\n fullWidth\n type=\"number\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"start\">SqFt</InputAdornment>\n ),\n }}\n value={yardInfo.warehouseCapacity}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n name=\"trackCapacity\"\n label=\"Track capacity\"\n margin=\"dense\"\n helperText={errors[\"trackCapacity\"] ? errors[\"trackCapacity\"] : \"\"}\n error={errors[\"trackCapacity\"] ? true : false}\n variant=\"outlined\"\n fullWidth\n required\n type=\"number\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"start\">Feet</InputAdornment>\n ),\n }}\n value={yardInfo.trackCapacity}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextField\n name=\"servingCarrier\"\n label=\"Serving Rail Carrier\"\n margin=\"dense\"\n helperText={errors[\"servingCarrier\"] ? errors[\"servingCarrier\"] : \"\"}\n error={errors[\"servingCarrier\"] ? true : false}\n variant=\"outlined\"\n fullWidth\n value={yardInfo.servingCarrier}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <Grid container>\n <Grid item xs={9}>\n <form onSubmit={handleAccessSubmit}>\n <TextField\n name=\"accessToRailHighway\"\n label=\"Accessible Highway(s)\"\n value={newAcess}\n size=\"small\"\n fullWidth\n variant=\"outlined\"\n className={classes.addInput}\n onChange={(evt) => setNewAcess(evt.target.value.toUpperCase())}\n inputProps={{\n style: { textTransform: \"uppercase\" },\n }}\n />\n </form>\n </Grid>\n <Grid item xs={3}>\n <Button\n className={classes.addButton}\n size=\"medium\"\n variant=\"outlined\"\n onClick={addAccess}\n startIcon={<AddIcon />}\n >\n Add\n </Button>\n </Grid>\n <Grid item xs={12}>\n <div className={classes.selectedAccess}>\n {yardInfo.accessToRailHighway.map((option) => (\n <Chip\n variant=\"outlined\"\n key={option}\n label={option}\n onClick={() => alert}\n onDelete={() => deleteAccess(option)}\n />\n ))}\n </div>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n );\n};\n","export default function reducer(state, action) {\n switch (action.type) {\n case \"YARD_INFO\":\n debugger;\n return {\n ...state,\n yardInfo: action.payload,\n };\n case \"ADD_ACCESS\":\n return {\n ...state,\n yardInfo: {\n ...state.yardInfo,\n accessToRailHighway: [\n ...state.yardInfo.accessToRailHighway,\n action.payload,\n ],\n },\n };\n case \"REMOVE_ACCESS\":\n const accessToRailHighway = state.yardInfo.accessToRailHighway.filter(\n (access) => access !== action.payload\n );\n return {\n ...state,\n yardInfo: { ...state.yardInfo, accessToRailHighway },\n };\n case \"ERROR\":\n return {\n ...state,\n errors: action.payload,\n };\n case \"CLEAR_ERROR\":\n return {\n ...state,\n errors: {},\n };\n case \"CHANGE_SERVICE\":\n debugger;\n return {\n ...state,\n services: [...action.payload],\n };\n case \"INIT_COMMODITIES\":\n return {\n ...state,\n commodities: action.payload,\n };\n case \"ADD_COMMODITY\":\n return {\n ...state,\n commodities: [\n ...state.commodities.map((itm) =>\n itm.id === action.payload.id ? { ...itm, active: true } : itm\n ),\n ],\n };\n case \"REMOVE_COMMODITY\":\n return {\n ...state,\n commodities: [\n ...state.commodities.map((itm) =>\n itm.id === action.payload.id ? { ...itm, active: false } : itm\n ),\n ],\n };\n case \"INIT_CAPABILITIES\":\n return {\n ...state,\n capabilities: action.payload,\n };\n case \"ADD_CAPABILITY\":\n return {\n ...state,\n capabilities: [\n ...state.capabilities.map((itm) =>\n itm.id === action.payload.id ? { ...itm, active: true } : itm\n ),\n ],\n };\n case \"SET_FORKLIFT_MAX_CAPACITY\":\n return {\n ...state,\n forkLiftMaxCapacity: action.payload,\n };\n case \"REMOVE_CAPABILITY\":\n return {\n ...state,\n capabilities: [\n ...state.capabilities.map((itm) =>\n itm.id === action.payload.id ? { ...itm, active: false } : itm\n ),\n ],\n };\n case \"NOTE\":\n return {\n ...state,\n note: action.payload,\n };\n case \"UPDATE_STATE\":\n return {\n ...action.payload,\n };\n default:\n break;\n }\n return state;\n}\n","export function emailYardInfoHTML(yardInfo) {\n const {\n businessName,\n street,\n city,\n state,\n zip,\n phoneNumber,\n email,\n website,\n firstName,\n lastName,\n userPhone,\n userEmail,\n } = yardInfo;\n\n debugger;\n\n return `<!-- Begin HTML Content -->\n <div style=\"text-align: left;\">\n <strong> Yard Name: ${businessName} <br> </strong>\n Yard Address: ${street}, ${city}, ${state} ${zip} <br>\n Yard Phone #: ${phoneNumber} <br>\n Yard Email: ${email} <br>\n Yard Website: ${website} <br>\n <br>\n <strong> User Name: ${firstName} ${lastName} <br> </strong>\n User Phone #: ${userPhone} <br>\n User Email: ${userEmail} <br>\n </div>\n <br>\n <br>\n <!-- End HTML Content -->`;\n}\n","import React, { useReducer, useState, useContext } from \"react\";\nimport { API } from \"aws-amplify\";\n\nimport {\n Typography,\n Button,\n Stepper,\n Step,\n StepLabel,\n Card,\n CardHeader,\n CardContent,\n Avatar,\n IconButton,\n} from \"@material-ui/core\";\nimport teal from \"@material-ui/core/colors/teal\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport clsx from \"clsx\";\nimport CheckCircleOutlineIcon from \"@material-ui/icons/CheckCircleOutline\";\nimport HighlightOffIcon from \"@material-ui/icons/HighlightOff\";\nimport SettingsIcon from \"@material-ui/icons/Settings\";\n\nimport { YardInfo } from \"./YardInfo\";\nimport { AccessAndCapacity } from \"./AccessAndCapacity\";\nimport SetupContext from \"./context\";\nimport setupReducer from \"./reducer\";\nimport { emailYardInfoHTML } from \"./emailYardInfoHTML\";\nimport useToast from \"../utils/useToast\";\nimport { logError } from \"../utils/appUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n },\n finishContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n marginTop: theme.spacing(4),\n },\n avatar: {\n color: theme.palette.getContrastText(theme.palette.secondary.main),\n backgroundColor: teal[500],\n },\n button: {\n marginRignt: theme.spacing(4),\n },\n instructions: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n },\n actions: {\n display: \"flex\",\n justifyContent: \"space-between\",\n marginTop: theme.spacing(4),\n marginLeft: theme.spacing(4),\n marginRight: theme.spacing(4),\n },\n stepAvatar: {\n backgroundColor: theme.palette.secondary.main,\n width: theme.spacing(6),\n height: theme.spacing(6),\n },\n note: {\n marginBottom: theme.spacing(2),\n mardinRight: theme.spacing(4),\n mardinLeft: theme.spacing(4),\n },\n}));\n\nfunction getSteps() {\n return [\"Business Info\", \"Access and Capacity\"];\n}\n\nfunction getStepContent(step) {\n switch (step) {\n case 0:\n return <YardInfo />;\n case 1:\n return <AccessAndCapacity />;\n default:\n return \"Unknown step\";\n }\n}\n\nconst stepKeys = [\"yardInfo\", \"yardInfo\", \"\"];\n\nconst useStepStyles = makeStyles((theme) => ({\n stepRoot: {\n color: \"#eaeaf0\",\n display: \"flex\",\n height: 22,\n alignItems: \"center\",\n },\n active: {\n color: theme.palette.secondary.main,\n },\n circle: {\n width: 36,\n height: 36,\n borderRadius: \"50%\",\n backgroundColor: \"currentColor\",\n },\n text: {\n marginTop: 3,\n display: \"flex\",\n justifyContent: \"center\",\n alighItems: \"center\",\n color: theme.palette.getContrastText(\"#000\"),\n },\n completed: {\n color: theme.palette.secondary.main,\n zIndex: 1,\n fontSize: 32,\n },\n}));\n\nfunction StepIcon(props) {\n const classes = useStepStyles();\n const { active, completed, icon } = props;\n return (\n <div\n className={clsx(classes.stepRoot, {\n [classes.active]: active,\n })}\n >\n {completed ? (\n <CheckCircleOutlineIcon\n style={{ fontSize: 36 }}\n className={classes.completed}\n />\n ) : (\n <div className={classes.circle}>\n <Typography variant=\"h6\" className={classes.text}>\n {icon}\n </Typography>\n </div>\n )}\n </div>\n );\n}\n\nconst Setup = ({ setupData, completeSetup, handleCancel, handleSave }) => {\n const classes = useStyles();\n let initState = useContext(SetupContext);\n initState = { ...JSON.parse(setupData), validators: initState.validators };\n const [state, dispatch] = useReducer(setupReducer, initState);\n const [activeStep, setActiveStep] = useState(\n initState?.activeStep ? initState.activeStep : 0\n );\n const showToast = useToast();\n\n const steps = getSteps();\n\n const handleNext = async () => {\n debugger;\n let validator = state.validators[activeStep];\n if (validator) {\n let data = state[stepKeys[activeStep]];\n let errors = validator(data);\n if (Object.keys(errors).length > 0) {\n dispatch({ type: \"ERROR\", payload: errors });\n return;\n }\n }\n try {\n dispatch({ type: \"CLEAR_ERROR\" });\n await handleSave(activeStep, state);\n setActiveStep((prevActiveStep) => prevActiveStep + 1);\n if (activeStep === steps.length - 1) {\n debugger;\n }\n } catch (err) {\n logError(\"newYard:Setup:handleNext\", err, false);\n showToast();\n }\n };\n\n const finishSetup = () => {\n try {\n debugger;\n completeSetup(activeStep, state);\n\n API.post(\"transREST\", \"/sendEmail\", {\n body: {\n to: \"support@transloads.co\",\n subject: \"NEW YARD REGISTRATION\",\n template: \"emailTemplateWide.html\",\n htmlContent: emailYardInfoHTML(state.yardInfo),\n },\n });\n } catch (err) {\n logError(\"newYard:Setup:finishSetup\", err, false);\n showToast();\n }\n };\n\n const handleBack = () => {\n setActiveStep((prevActiveStep) => prevActiveStep - 1);\n };\n\n const handleCloseSetup = async () => {\n try {\n debugger;\n const setupData = await handleSave(activeStep, state);\n dispatch({ type: \"UPDATE_STATE\", payload: setupData });\n handleCancel();\n } catch (err) {\n showToast();\n logError(\"newYard:Setup:handleCloseSetup\", err, false);\n }\n };\n\n return (\n <SetupContext.Provider value={{ state, dispatch }}>\n <Card className={classes.card}>\n <CardHeader\n avatar={\n <Avatar className={classes.avatar}>\n <SettingsIcon fontSize=\"large\" />\n </Avatar>\n }\n title={<Typography variant=\"h6\">Yard Setup</Typography>}\n subheader={\n <Typography>Any questions? Call us at 1-877-TRANSLOAD</Typography>\n }\n action={\n <IconButton edge=\"start\" onClick={handleCloseSetup}>\n <HighlightOffIcon fontSize=\"large\" />\n </IconButton>\n }\n />\n <CardContent>\n <Stepper activeStep={activeStep} alternativeLabel>\n {steps.map((label, index) => {\n return (\n <Step key={label}>\n <StepLabel StepIconComponent={StepIcon}>{label}</StepLabel>\n </Step>\n );\n })}\n </Stepper>\n {activeStep === steps.length ? (\n <div className={classes.finishContainer}>\n <Typography variant=\"h6\" align=\"center\" gutterBottom>\n You are all done! Click FINISH to submit your Transload Setup.\n </Typography>\n <div className={classes.actions}>\n <Button\n onClick={() => setActiveStep(0)}\n className={classes.button}\n size=\"large\"\n >\n Go Back\n </Button>\n\n <Button\n onClick={finishSetup}\n color=\"secondary\"\n variant=\"contained\"\n size=\"large\"\n >\n Finish\n </Button>\n </div>\n </div>\n ) : (\n <div>\n {getStepContent(activeStep)}\n <div className={classes.actions}>\n <Button\n disabled={activeStep === 0}\n onClick={handleBack}\n className={classes.button}\n size=\"large\"\n >\n Back\n </Button>\n\n <Button\n variant=\"contained\"\n color=\"secondary\"\n onClick={handleNext}\n size=\"large\"\n >\n Next\n </Button>\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n </SetupContext.Provider>\n );\n};\n\nexport default Setup;\n","export default __webpack_public_path__ + \"static/media/stripe-payment.07e4b669.png\";","import React, { useState, useEffect, useMemo, useContext } from \"react\";\nimport { API, Auth, graphqlOperation } from \"aws-amplify\";\nimport {\n capabilitiesByActiveBySortKey,\n commoditiesByActiveBySortKey,\n setupDataByCognitoIdByStatus,\n} from \"../graphql/queries\";\nimport {\n createSetupData,\n updateSetupData,\n createReloadYard,\n createUser,\n createReloadYardCommodity,\n createReloadYardCapability,\n createArea,\n createZone,\n} from \"../graphql/mutations\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { Link } from \"react-router-dom\";\nimport useToast from \"../utils/useToast\";\nimport { logError } from \"../utils/appUtils\";\n\nimport {\n AppBar,\n Toolbar,\n Typography,\n Button,\n IconButton,\n Card,\n CardHeader,\n CardContent,\n useMediaQuery,\n CircularProgress,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n Grid,\n Hidden,\n FormControl,\n FormControlLabel,\n FormLabel,\n FormHelperText,\n RadioGroup,\n Radio,\n TextField,\n Checkbox,\n Backdrop,\n} from \"@material-ui/core\";\n\nimport ExitToAppIcon from \"@material-ui/icons/ExitToApp\";\nimport MenuIcon from \"@material-ui/icons/Menu\";\nimport RefreshIcon from \"@material-ui/icons/Refresh\";\n\nimport withRoot from \"../withRoot\";\nimport Setup from \"./Setup\";\nimport SetupContext from \"./context\";\nimport {\n ERROR_MSG,\n NewCustomerStatus,\n ReloadYardStatus,\n UserStatus,\n UserType,\n workdays,\n} from \"../utils/constants\";\nimport { getEnv } from \"../utils/appUtils\";\n\nimport \"./CardSectionStyles.css\";\nimport { loadStripe } from \"@stripe/stripe-js/pure\";\nimport { Elements } from \"@stripe/react-stripe-js\";\nimport { useStripe, useElements, CardElement } from \"@stripe/react-stripe-js\";\nimport { endOfMonth, addDays, startOfDay, endOfDay } from \"date-fns\";\nimport StripeLogo from \"../images/stripe-payment.png\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flexGrow: 1,\n },\n menuButton: {\n marginRight: theme.spacing(2),\n },\n title: {\n flexGrow: 1,\n },\n logo: {\n margin: \"auto\",\n paddingTop: theme.spacing(1),\n },\n site: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n margin: theme.spacing(4),\n },\n link: {\n display: \"flex\",\n justifyContent: \"center\",\n color: \"inherit\",\n textDecoration: \"inherit\",\n },\n backdrop: {\n zIndex: 90001,\n },\n containerMobile: {\n display: \"flex\",\n flexDirection: \"column\",\n marginTop: theme.spacing(2),\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(2),\n },\n avatar: {\n backgroundColor: theme.palette.secondary.main,\n width: theme.spacing(6),\n height: theme.spacing(6),\n },\n container: {\n display: \"flex\",\n flexDirection: \"column\",\n marginTop: theme.spacing(2),\n marginLeft: theme.spacing(16),\n marginRight: theme.spacing(16),\n },\n setupButton: {\n display: \"flex\",\n justifyContent: \"center\",\n marginTop: theme.spacing(4),\n },\n card: {\n marginTop: theme.spacing(1),\n },\n cardTitle: {\n display: \"flex\",\n justifyContent: \"center\",\n },\n formControl: {\n margin: theme.spacing(3),\n },\n leftIcon: {\n marginRight: theme.spacing(1),\n },\n}));\n\nconst logout = () => {\n setTimeout(() => Auth.signOut(), 1);\n};\n\nconst NewYard = () => {\n const [setupMode, setSetupMode] = useState();\n const [newYardData, setNewYardData] = useState();\n const [areaMap, setAreaMap] = useState({});\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n const welcomeMsg = \"Thank you for choosing transloads.co\";\n const showToast = useToast();\n const svgLogo = \"/logo_transloads_white.svg\";\n\n useEffect(() => {\n getNewYardData();\n }, []);\n\n const getNewYardData = async () => {\n try {\n debugger;\n const { cognitoId } = window.appUser;\n let response = await API.graphql(\n graphqlOperation(setupDataByCognitoIdByStatus, { cognitoId })\n );\n let data = response.data.setupDataByCognitoIdByStatus.items[0];\n\n if (!data) {\n const input = {\n status: NewCustomerStatus.NEW,\n submitDate: new Date(),\n cognitoId,\n };\n response = await API.graphql(\n graphqlOperation(createSetupData, { input })\n );\n data = response.data.createSetupData;\n }\n setNewYardData(data);\n debugger;\n } catch (err) {\n showToast();\n logError(\"site:NewYard:getNewYardData\", err, false);\n }\n };\n\n const completeSetup = (activeStep, state) => {\n debugger;\n try {\n handleSave(activeStep, state, NewCustomerStatus.PENDING_APPROVAL);\n handleCancel();\n } catch (err) {\n showToast();\n logError(\"site:NewYard:completeSetup\", err, false);\n }\n };\n\n const handleSave = async (activeStep, state, status) => {\n debugger;\n state.activeStep = activeStep;\n state.yardInfo.userEmail = window.appUser?.email;\n const input = {\n ...newYardData,\n setupData: JSON.stringify(state),\n firstName: state.yardInfo.firstName,\n lastName: state.yardInfo.lastName,\n businessName: state.yardInfo.businessName,\n };\n if (status && status === NewCustomerStatus.PENDING_APPROVAL) {\n input.status = status;\n input.submitDate = new Date();\n }\n\n return await doHandleSave(input);\n };\n\n const doHandleSave = async (input) => {\n delete input.validators;\n delete input.updatedAt;\n delete input.owner;\n debugger;\n const response = await API.graphql(\n graphqlOperation(updateSetupData, { input })\n );\n setNewYardData(response.data.updateSetupData);\n debugger;\n return JSON.parse(response.data.updateSetupData.setupData);\n };\n\n const handleCancel = () => {\n setSetupMode(false);\n };\n\n const validate = () => {\n if (!newYardData.groups) {\n showToast(\"Invalid setup data\");\n return false;\n }\n debugger;\n\n return true;\n };\n\n const createYard = async () => {\n /*\n validations:\n - groups exists in newYardData\n - userreloadYardByName cognitoId is unique\n - reloadyard name is unique\n */\n\n try {\n const setupData = JSON.parse(newYardData.setupData);\n const isValid = validate();\n if (!isValid) return false;\n // if (true) return true;\n const reloadYard = await doCreateYard(setupData);\n\n const { areas, zones } = setupData;\n await createAreas(reloadYard.id, areas);\n await createZones(reloadYard.id, zones, areas);\n await doCreateUser(setupData, reloadYard.id);\n await doCreateCommodities(reloadYard.id);\n await doCreateCapabilities(reloadYard.id);\n } catch (err) {\n logError(\"site:NewYard:createYard\", err, false);\n return false;\n }\n return true;\n };\n\n const doCreateCommodities = async (reloadYardId) => {\n debugger;\n const response = await API.graphql(\n graphqlOperation(commoditiesByActiveBySortKey, { active: \"true\" })\n );\n const commodities = response.data.commoditiesByActiveBySortKey.items;\n const results = await Promise.allSettled(\n commodities.map((itm) => {\n const input = {\n reloadYardId,\n commodityId: itm.id,\n groups: newYardData.groups,\n active: itm.name === \"Other\",\n verified: true,\n units: itm.defaultUnits,\n sortKey: itm.sortKey,\n };\n return API.graphql(\n graphqlOperation(createReloadYardCommodity, { input })\n );\n })\n );\n\n const resError = results.find((itm) => itm.status === \"rejected\");\n if (resError) {\n logError(\"NewYard:doCreateCommodities\", resError, false);\n }\n };\n\n const doCreateCapabilities = async (reloadYardId) => {\n const response = await API.graphql(\n graphqlOperation(capabilitiesByActiveBySortKey, { active: \"true\" })\n );\n const capabilities = response.data.capabilitiesByActiveBySortKey.items;\n debugger;\n const results = await Promise.allSettled(\n capabilities.map((itm) => {\n const input = {\n reloadYardId,\n capabilityId: itm.id,\n groups: newYardData.groups,\n active: false,\n verified: true,\n };\n return API.graphql(\n graphqlOperation(createReloadYardCapability, { input })\n );\n })\n );\n\n debugger;\n const resError = results.find((itm) => itm.status === \"rejected\");\n if (resError) {\n logError(\"NewYard:doCreateCapabilities\", resError, false);\n }\n };\n\n const createAreas = async (reloadYardId, areas) => {\n const areaList = areas.map((itm, idx) => {\n const input = {\n active: true,\n groups: newYardData.groups,\n reloadYardId,\n name: itm.name,\n prefix: itm.prefix,\n color: itm.color,\n sortKey: idx + 1,\n areaType: itm.areaType,\n };\n return API.graphql(graphqlOperation(createArea, { input }));\n });\n const promiseResults = await Promise.allSettled(areaList);\n debugger;\n promiseResults.forEach((itm) => {\n if (itm.status === \"fulfilled\") {\n const value = itm.value;\n const newArea = value.data.createArea;\n areaMap[newArea.name] = newArea;\n setAreaMap(areaMap);\n }\n });\n };\n\n const createZones = async (reloadYardId, zones, areas) => {\n const origAreaIdsMap = {};\n areas.forEach((itm) => {\n origAreaIdsMap[itm.id] = areaMap[itm.name];\n });\n\n const zonePromiseList = zones.map((itm, idx) => {\n const areaId = origAreaIdsMap[itm.areaId].id;\n debugger;\n const input = {\n active: true,\n groups: newYardData.groups,\n reloadYardId,\n name: itm.name,\n prefix: itm.prefix,\n color: itm.color,\n sortKey: idx + 1,\n zoneType: itm.zoneType,\n areaId,\n };\n return API.graphql(graphqlOperation(createZone, { input }));\n });\n const promiseResults = await Promise.allSettled(zonePromiseList);\n debugger;\n const dbZones = promiseResults.map((itm) => {\n if (itm.status === \"fulfilled\") {\n return itm.value.data.createZone;\n }\n return null;\n });\n return dbZones;\n };\n\n const doCreateYard = async (setupData) => {\n debugger;\n const input = {\n groups: newYardData.groups,\n active: true,\n status: ReloadYardStatus.IN_NETWORK,\n name: setupData.yardInfo.businessName,\n phone: setupData.yardInfo.phoneNumber,\n fax: setupData.yardInfo.faxNumber,\n website: setupData.yardInfo.website,\n street: setupData.yardInfo.street,\n city: setupData.yardInfo.city,\n email: setupData.yardInfo.email.toLowerCase(),\n state: setupData.yardInfo.state.toUpperCase(),\n zipCode: setupData.yardInfo.zip,\n timeZone: setupData.yardInfo.timeZone,\n country: setupData.yardInfo.country,\n lotCapacity: setupData.yardInfo.lotCapacityAcres,\n trackCapacity: setupData.yardInfo.trackCapacity,\n servingCarrier: setupData.yardInfo.servingCarrier,\n warehouseCapacity: setupData.yardInfo.warehouseCapacity,\n railHighway: setupData.yardInfo.accessToRailHighway,\n invoiceNumberPrefix: setupData.yardInfo.businessName\n .replace(/\\s/g, \"\")\n .substring(0, 3)\n .toUpperCase(),\n invoiceCounter: 1000,\n bolCounter: 1000,\n receiptCounter: 1000,\n taxRates: setupData.yardInfo.taxRates,\n subscription: {\n customerId: setupData.subscription.customerId,\n subscriptionId: setupData.subscription.subscriptionId,\n priceId: setupData.subscription.priceId,\n status: \"active\",\n },\n schedule: {\n workdays,\n holidays: [],\n minNoticeHours: 24,\n maxDaysIntoFuture: 60,\n },\n tosAccept: setupData.tosAccept,\n };\n let response = await API.graphql(\n graphqlOperation(createReloadYard, { input })\n );\n debugger;\n return response.data.createReloadYard;\n };\n\n const doCreateUser = async (setupData, reloadYardId) => {\n debugger;\n const input = {\n groups: newYardData.groups,\n active: true,\n status: UserStatus.APPROVED,\n cognitoId: window.appUser?.cognitoId,\n type: UserType.MANAGER,\n firstName: setupData.yardInfo.firstName,\n lastName: setupData.yardInfo.lastName,\n fullName: `${setupData.yardInfo.firstName} ${setupData.yardInfo.lastName}`,\n email: window.appUser?.email.toLowerCase(),\n phone: setupData.yardInfo.userPhone,\n reloadYardId: reloadYardId,\n };\n const response = await API.graphql(graphqlOperation(createUser, { input }));\n debugger;\n return response.data.createUser;\n };\n\n return (\n <div className={classes.root}>\n <AppBar color=\"primary\" position=\"static\">\n <Toolbar>\n <IconButton\n edge=\"start\"\n className={classes.menuButton}\n color=\"inherit\"\n aria-label=\"menu\"\n >\n <MenuIcon />\n </IconButton>\n <div className={classes.logo}>\n <img src={svgLogo} alt=\"transloads.co logo\" height=\"30px\" />\n </div>\n <Link to=\"/\" className={classes.link}>\n <Button\n color=\"inherit\"\n size=\"large\"\n onClick={logout}\n startIcon={<ExitToAppIcon />}\n >\n Logout\n </Button>\n </Link>\n </Toolbar>\n </AppBar>\n <div className={isXSmall ? classes.containerMobile : classes.container}>\n {!setupMode ? (\n <Card>\n <CardHeader\n title={<div className={classes.cardTitle}>{welcomeMsg}</div>}\n />\n <CardContent>\n {newYardData?.status === NewCustomerStatus.NEW ? (\n <NewSetupContent\n newYardData={newYardData}\n setNewYardData={setNewYardData}\n setSetupMode={setSetupMode}\n classes={classes}\n />\n ) : newYardData?.status === NewCustomerStatus.PENDING_APPROVAL ? (\n <PendingSetupApprovalContent classes={classes} />\n ) : newYardData?.status === NewCustomerStatus.APPROVED ? (\n <ApprovedSetupContent\n createYard={createYard}\n classes={classes}\n newYardData={newYardData}\n doHandleSave={doHandleSave}\n />\n ) : (\n <div className={classes.progress}>\n <CircularProgress color=\"inherit\" />\n </div>\n )}\n </CardContent>\n </Card>\n ) : (\n <Setup\n setupData={newYardData?.setupData}\n completeSetup={completeSetup}\n handleCancel={handleCancel}\n handleSave={handleSave}\n />\n )}\n </div>\n </div>\n );\n};\n\nconst NewSetupContent = ({\n newYardData,\n setNewYardData,\n setSetupMode,\n classes,\n}) => {\n const [open, setOpen] = useState(false);\n const initState = useContext(SetupContext);\n\n const handleClick = () => {\n if (newYardData?.firstName) setSetupMode(true);\n else setOpen(true);\n };\n\n const handleTosAccept = async () => {\n const tosAccept = {\n acceptTimeStamp: new Date(),\n cognitoId: newYardData.cognitoId,\n email: window.appUser?.email,\n userAgent: window.navigator.userAgent,\n ip: \"\",\n };\n debugger;\n\n try {\n let response = await API.post(\"transREST\", \"/tos-accept\");\n\n if (response.err) {\n // get error message from body or default to response statusText\n logError(\n \"site:NewYard:NewSetupContent:handleTosAccept:transREST\",\n response.err,\n false\n );\n\n try {\n response = await fetch(\"https://api.ipify.org?format=json\");\n debugger;\n const data = await response.json();\n if (!response.ok) {\n // get error message from body or default to response statusText\n const ferror = (data && data.message) || response.statusText;\n logError(\n \"site:NewYard:NewSetupContent:handleTosAccept:ferror\",\n ferror,\n false\n );\n }\n tosAccept.ip = data.ip;\n } catch (error) {\n logError(\n \"site:NewYard:NewSetupContent:handleTosAccept:tetch\",\n response.err,\n false\n );\n }\n } else {\n tosAccept.acceptTimeStamp = response.tosSignature.acceptTimeStamp;\n tosAccept.ip = response.tosSignature.ip;\n }\n\n newYardData.setupData = JSON.stringify({\n ...initState,\n tosAccept: tosAccept,\n });\n setNewYardData(newYardData);\n } catch (error) {\n debugger;\n logError(\"site:NewYard:NewSetupContent:handleTosAccept\", error, false);\n }\n\n setSetupMode(true);\n setOpen(false);\n };\n\n const handleClose = (_, reason) => {\n if (reason !== \"backdropClick\") setOpen(false);\n };\n\n return (\n <>\n <Typography align=\"center\" gutterBottom>\n In just a few quick steps we'll setup your Yard Management System.\n </Typography>\n <Typography align=\"center\" gutterBottom>\n If you need help setting up your transload, please contact our Customer\n Success team at\n </Typography>\n <Typography align=\"center\" gutterBottom>\n 1-877-TRANSLOAD (872-6756)\n </Typography>\n <Dialog open={open} onClose={handleClose}>\n <DialogTitle id=\"alert-dialog-title\">\n <Typography variant=\"h6\">The fine print</Typography>\n </DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n <Typography gutterBottom>\n By clicking \"Accept\" you agree to and accept our \n <a\n href=\"https://www.transloads.co/terms-of-service\"\n target=\"blank\"\n rel=\"noopener\"\n >\n Terms of Service\n </a>{\" \"}\n and \n <a\n href=\"https://www.transloads.co/privacy-policy\"\n target=\"blank\"\n rel=\"noopener\"\n >\n Privacy Policy\n </a>\n .\n </Typography>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"primary\">\n Go back\n </Button>\n <Button onClick={handleTosAccept} color=\"primary\" autoFocus>\n Accept\n </Button>\n </DialogActions>\n </Dialog>\n <div className={classes.setupButton}>\n <Button\n size=\"large\"\n variant=\"contained\"\n color=\"secondary\"\n onClick={handleClick}\n >\n {newYardData?.firstName ? \"Resume setup\" : \"Start setup\"}\n </Button>\n </div>\n </>\n );\n};\n\nconst PendingSetupApprovalContent = ({ classes }) => {\n const reloadPage = () => {\n window.location.reload();\n };\n\n return (\n <div style={{ width: \"50%\", margin: \"0 auto 0 auto\" }}>\n <Typography align=\"center\" gutterBottom>\n Your registration has been sent to our Customer Success team for review.\n </Typography>\n <Typography align=\"center\" gutterBottom>\n To ensure highest level of service and information accuracy, one of our\n transload experts will shortly reach out to you to confirm your\n submission.\n </Typography>\n <Typography gutterBottom variant=\"h4\" align=\"center\">\n Pending review...\n </Typography>\n <div className={classes.setupButton}>\n <Button\n size=\"large\"\n variant=\"contained\"\n color=\"secondary\"\n startIcon={<RefreshIcon />}\n onClick={reloadPage}\n >\n Refresh\n </Button>\n </div>\n </div>\n );\n};\n\nconst BillingPanel = ({\n setupData,\n newYardData,\n paid,\n setPaid,\n doHandleSave,\n classes,\n}) => {\n const [error, setError] = useState(null);\n const [processing, setProcessing] = useState(\"\");\n const [disabled, setDisabled] = useState(true);\n\n const [price, setPrice] = useState(setupData.subscription?.priceList[0]?.id);\n const [name, setName] = useState(\n `${setupData.yardInfo.firstName} ${setupData.yardInfo.lastName}`\n );\n\n const stripe = useStripe();\n const elements = useElements();\n debugger;\n\n const cardStyle = {\n style: {\n base: {\n fontFamily: \"Arial, sans-serif\",\n fontSmoothing: \"antialiased\",\n fontSize: \"16px\",\n \"::placeholder\": {\n color: \"#32325d\",\n },\n },\n invalid: {\n color: \"#fa755a\",\n iconColor: \"#fa755a\",\n },\n },\n };\n\n const displayError = (message) => {\n setError(message ? message : null);\n setPaid(false);\n setProcessing(false);\n };\n\n const handleChange = async (event) => {\n // Listen for changes in the CardElement\n // and display any errors as the customer types their card details\n setDisabled(event.empty);\n setError(event.error ? event.error.message : null);\n };\n\n const createPaymentMethod = async (card) => {\n // Set up payment method for recurring usage\n const customerId = setupData.subscription.customerId;\n\n debugger;\n const result = await stripe.createPaymentMethod({\n type: \"card\",\n card,\n billing_details: {\n name: name,\n },\n });\n\n debugger;\n if (result.error) {\n // throw result.error;\n displayError(`Payment failed: ${result.error.message}`);\n } else {\n await createSubscription({\n customerId: customerId,\n paymentMethodId: result.paymentMethod.id,\n priceId: price,\n });\n }\n };\n\n const createSubscription = ({ customerId, paymentMethodId, priceId }) => {\n const trialDate = endOfDay(\n addDays(new Date(), setupData?.subscription?.trialPeriod || 0)\n );\n const billingDate = startOfDay(addDays(endOfMonth(new Date(trialDate)), 1));\n debugger;\n\n return (\n API.post(\"transREST\", \"/stripe-create-subscription\", {\n body: {\n customerId: customerId,\n paymentMethodId: paymentMethodId,\n priceId: priceId,\n trial_end:\n setupData.subscription.trialPeriod > 0\n ? Math.ceil(trialDate.getTime() / 1000)\n : \"now\",\n billing_cycle_anchor: Math.ceil(billingDate.getTime() / 1000),\n proration_behavior: \"create_prorations\", // 'none',\n },\n })\n // If the card is declined, display an error to the user.\n .then((result) => {\n debugger;\n if (result.error) {\n // The card had an error when trying to attach it to a customer.\n // throw result.error;\n displayError(`Payment failed: ${result.error.message}`);\n }\n return result;\n })\n // Normalize the result to contain the object returned by Stripe.\n // Add the additional details we need.\n .then((result) => {\n return {\n paymentMethodId: paymentMethodId,\n priceId: priceId,\n subscription: result,\n };\n })\n // Some payment methods require a customer to be on session\n // to complete the payment process. Check the status of the\n // payment intent to handle these actions.\n .then(handlePaymentThatRequiresCustomerAction)\n // If attaching this card to a Customer object succeeds,\n // but attempts to charge the customer fail, you\n // get a requires_payment_method error.\n .then(handleRequiresPaymentMethod)\n // No more actions required. Provision your service for the user.\n .then(onSubscriptionComplete)\n .catch((error) => {\n debugger;\n logError(\"site:NewYard:createSubscription\", error, false);\n throw error;\n })\n );\n };\n\n const handlePaymentThatRequiresCustomerAction = ({\n subscription,\n invoice,\n priceId,\n paymentMethodId,\n isRetry,\n }) => {\n debugger;\n if (\n subscription &&\n (subscription.status === \"active\" || subscription.status === \"trialing\")\n ) {\n // Subscription is active, no customer actions required.\n return { subscription, priceId, paymentMethodId };\n }\n\n // If it's a first payment attempt, the payment intent is on the subscription latest invoice.\n // If it's a retry, the payment intent will be on the invoice itself.\n let paymentIntent = invoice\n ? invoice.payment_intent\n : subscription.latest_invoice.payment_intent;\n\n if (\n paymentIntent.status === \"requires_action\" ||\n (isRetry === true && paymentIntent.status === \"requires_payment_method\")\n ) {\n return stripe\n .confirmCardPayment(paymentIntent.client_secret, {\n payment_method: paymentMethodId,\n })\n .then((result) => {\n if (result.error) {\n // Start code flow to handle updating the payment details.\n // Display error message in your UI.\n // The card was declined (i.e. insufficient funds, card has expired, etc).\n // throw result;\n setError(`Payment failed: ${result.error.message}`);\n } else {\n if (result.paymentIntent.status === \"succeeded\") {\n // Show a success message to your customer.\n return {\n priceId: priceId,\n subscription: subscription,\n invoice: invoice,\n paymentMethodId: paymentMethodId,\n };\n }\n }\n })\n .catch((error) => {\n debugger;\n // throw error.error;\n displayError(`Payment failed: ${error.error.message}`);\n });\n } else {\n // No customer action needed.\n return { subscription, priceId, paymentMethodId };\n }\n };\n\n const handleRequiresPaymentMethod = ({\n subscription,\n paymentMethodId,\n priceId,\n }) => {\n debugger;\n if (\n subscription.status === \"active\" ||\n subscription.status === \"trialing\"\n ) {\n // subscription is active, no customer actions required.\n\n return { subscription, priceId, paymentMethodId };\n } else if (\n subscription.latest_invoice.payment_intent.status ===\n \"requires_payment_method\"\n ) {\n // Using localStorage to manage the state of the retry here,\n // feel free to replace with what you prefer.\n // Store the latest invoice ID and status.\n // localStorage.setItem('latestInvoiceId', subscription.latest_invoice.id);\n // localStorage.setItem(\n // 'latestInvoicePaymentIntentStatus',\n // subscription.latest_invoice.payment_intent.status\n // );\n // throw { message: 'Your card was declined.' };\n displayError(`Payment failed: Your card was declined.`);\n } else {\n debugger;\n return { subscription, priceId, paymentMethodId };\n }\n };\n\n const onSubscriptionComplete = async (result) => {\n // Payment was successful.\n debugger;\n if (\n result.subscription.status === \"active\" ||\n result.subscription.status === \"trialing\"\n ) {\n // Change your UI to show a success message to your customer.\n // Call your backend to grant access to your service based on\n // `result.subscription.items.data[0].price.product` the customer subscribed to.\n setupData.subscription.subscriptionId = result.subscription.id;\n setupData.subscription.priceId = result.priceId;\n const input = { ...newYardData, setupData: JSON.stringify(setupData) };\n await doHandleSave(input);\n\n setError(null);\n setProcessing(false);\n setPaid(true);\n } else {\n debugger;\n // incomplete.\n }\n };\n\n const handlePaySubmit = async (event) => {\n event.preventDefault();\n setProcessing(true);\n setError(null);\n\n try {\n await createPaymentMethod(elements.getElement(CardElement));\n\n debugger;\n } catch (error) {\n debugger;\n setError(ERROR_MSG);\n setPaid(false);\n setProcessing(false);\n logError(\"site:NewYard:handlePaySubmit\", error, false);\n }\n };\n\n return (\n <form id=\"payment-form\" onSubmit={handlePaySubmit}>\n <Grid container direction=\"row\" spacing={1}>\n <Grid item xs={12}>\n <Typography align=\"center\" gutterBottom>\n Beep, beep, you've been approved!\n </Typography>\n <Typography align=\"center\" gutterBottom>\n Now, let's setup your subscription...\n </Typography>\n </Grid>\n <Hidden mdDown>\n {\" \"}\n <Grid item xs={false} lg={1}>\n {\" \"}\n </Grid>{\" \"}\n </Hidden>\n <Grid item xs={12} md={6} lg={5}>\n <FormControl component=\"fieldset\" className={classes.formControl}>\n <FormLabel component=\"legend\">\n Select the perfect plan for you...\n </FormLabel>\n {setupData.subscription.trialPeriod > 0 ? (\n <FormControlLabel\n control={<Checkbox name=\"trial\" color=\"primary\" checked />}\n label={`Free ${setupData.subscription.trialPeriod}-day trial`}\n />\n ) : null}\n <FormControlLabel\n control={<Checkbox name=\"setupFee\" color=\"primary\" checked />}\n label={`$0 Setup Fees`}\n />\n <RadioGroup\n aria-label=\"price-plan\"\n name=\"price-plan\"\n value={price}\n onChange={(e) => setPrice(e.target.value)}\n >\n {setupData.subscription?.priceList &&\n setupData.subscription.priceList.map((price) => (\n <FormControlLabel\n control={<Radio />}\n value={price.id}\n label={price.nickname}\n />\n ))}\n </RadioGroup>\n </FormControl>\n </Grid>\n <Grid item xs={12} md={6} lg={5} className={classes.formControl}>\n <img\n src={StripeLogo}\n alt=\"Secure billing with Stripe\"\n height=\"40px\"\n />\n <TextField\n id=\"name\"\n label=\"Name on Card\"\n variant=\"outlined\"\n margin=\"dense\"\n fullWidth\n required\n value={name}\n onChange={(e) => setName(e.target.value)}\n helperText=\" \"\n />\n <CardElement\n id=\"card-element\"\n options={cardStyle}\n // options={options}\n onChange={handleChange}\n />\n {/* Show any error that happens when processing the payment */}\n <FormHelperText margin=\"dense\" error={error !== null}>\n {\" \"}\n {error}{\" \"}\n </FormHelperText>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n fullWidth\n style={{ marginTop: \"16px\" }}\n disabled={processing || disabled || paid}\n >\n {processing ? (\n <CircularProgress\n color=\"inherit\"\n size={18}\n thickness={3}\n className={classes.leftIcon}\n />\n ) : null}\n Start Free Trial\n </Button>\n </Grid>\n <Hidden mdDown>\n {\" \"}\n <Grid item xs={false} lg={1}>\n {\" \"}\n </Grid>{\" \"}\n </Hidden>\n </Grid>\n </form>\n );\n};\n\nconst ApprovedSetupContent = ({\n createYard,\n classes,\n newYardData,\n doHandleSave,\n}) => {\n const [showDialog, setShowDialog] = useState();\n const [error, setError] = useState();\n const [header, setHeader] = useState(\"Setup completed sucessully\");\n const [message, setMessage] = useState();\n const [showProgress, setShowProgress] = useState();\n const setupData = JSON.parse(newYardData.setupData);\n const [paid, setPaid] = useState(setupData?.subscription?.subscriptionId);\n\n useEffect(() => {\n setPaid(setupData?.subscription?.subscriptionId);\n }, [setupData]);\n\n const doCreateYard = async () => {\n setShowProgress(true);\n const status = await createYard();\n debugger;\n setShowProgress(false);\n if (!status) {\n setError(true);\n setHeader(\"Error\");\n setMessage(ERROR_MSG);\n setShowDialog(true);\n } else window.location.reload();\n };\n\n const handleClose = (_, reason) => {\n if (reason !== \"backdropClick\") {\n setShowDialog(false);\n if (!error) window.location.reload();\n }\n };\n\n // Make sure to call `loadStripe` outside of a component’s render to avoid\n // recreating the `Stripe` object on every render. Use Publishable Key.\n const stripePromise = useMemo(\n () =>\n loadStripe(\n getEnv() === \"prod\"\n ? \"pk_live_51Iv8spLjcHh8hNWxt5bOA46FiBEoq9xFrPNMGpduU3sX2D5AcAMTAv7DOv59hb2Tu8h8GEXJfiHXcghxzDuPrATO00IRm2UZN8\"\n : \"pk_test_51ItK8SBuW3L4WKIAtEgx0hvyNGa1GNJFdvjLWu0hpTKROJDmFAMtS4CpZDdDh8yamP0hYVvo9jW9V4Ge9MfiPHWJ00s1171Abt\"\n ),\n []\n );\n\n return showProgress ? (\n <Backdrop className={classes.backdrop} open={showProgress}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n ) : (\n <>\n {!paid ? (\n <Elements stripe={stripePromise}>\n <BillingPanel\n setupData={setupData}\n newYardData={newYardData}\n paid={paid}\n setPaid={setPaid}\n doHandleSave={doHandleSave}\n classes={classes}\n />\n </Elements>\n ) : null}\n {paid ? (\n <>\n <Typography align=\"center\" gutterBottom>\n Your payment processed successfully. Thank you!\n </Typography>\n <Typography align=\"center\" gutterBottom>\n Click \"COMPLETE SETUP\" to proceed to the Manager Portal.\n </Typography>\n <Typography align=\"center\" gutterBottom>\n If at any time you require assistance, please call our Customer\n Success team at 1-877-TRANSLOAD.\n </Typography>\n <Dialog open={showDialog} onClose={handleClose}>\n <DialogTitle id=\"alert-dialog-title\">\n <Typography variant=\"h6\" color={error ? \"error\" : \"\"}>\n {header}\n </Typography>\n </DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n <Typography gutterBottom color={error ? \"error\" : \"\"}>\n {message}\n </Typography>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={handleClose} color=\"primary\">\n close\n </Button>\n </DialogActions>\n </Dialog>\n <div className={classes.setupButton}>\n <Button\n size=\"large\"\n variant=\"contained\"\n color=\"secondary\"\n disabled={showProgress}\n onClick={doCreateYard}\n >\n Complete Setup\n </Button>\n </div>\n </>\n ) : null}\n </>\n );\n};\n\nconst NewYardRooted = withRoot(NewYard);\nexport { NewYardRooted };\n","export default __webpack_public_path__ + \"static/media/logo_transloads_blue.195e34b5.svg\";","// https://github.com/aws-amplify/amplify-ui/tree/legacy/legacy/amplify-ui-react\n\nimport React, { useEffect } from \"react\";\n\nimport {\n AmplifyAuthenticator,\n AmplifySignIn,\n AmplifySignUp,\n} from \"@aws-amplify/ui-react\";\nimport { AuthState } from \"@aws-amplify/ui-components\";\nimport {\n Grid,\n Link,\n Typography,\n useMediaQuery,\n Box,\n Drawer,\n Button,\n} from \"@material-ui/core\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { blueGrey, grey } from \"@material-ui/core/colors\";\nimport { isTWA } from \"../utils/appUtils\";\nimport transloadsLogo from \"../images/transloadsLogo57.png\";\nimport svgLogo from \"../images/logo_transloads_blue.svg\";\nimport \"./index.css\";\n\nconst appStoreUrl = \"https://apps.apple.com/us/app/transloads-co/id6473465737\";\nconst privacyPolicyUrl = \"https://transloads.co/privacy-policy/\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n height: \"100vh\",\n width: \"100vw\",\n backgroundColor: grey[400],\n padding: 0,\n margin: 0,\n },\n logoSection: {\n display: \"flex\",\n },\n copyrightSection: {\n display: \"flex\",\n flexGrow: 3,\n justifyContent: \"center\",\n alignItems: \"flex-end\",\n paddingBottom: theme.spacing(2),\n },\n drawer: {\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n backgroundColor: grey[100],\n color: theme.palette.getContrastText(grey[500]),\n },\n logo: {\n backgroundColor: \"none\",\n // borderRadius: theme.spacing(2),\n // boxShadow: \"2px 2px 2px #eeeeee\",\n \"&:hover\": { cursor: \"pointer\" },\n marginTop: theme.spacing(1.5),\n marginBottom: theme.spacing(1.5),\n \"& img\": {\n maxHeight: theme.spacing(6),\n filter: \"brightness(50%) contrast(120%)\",\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n paddingRight: theme.spacing(4),\n paddingLeft: theme.spacing(4),\n },\n },\n downloadLogo: {\n borderRadius: theme.spacing(1),\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(1),\n },\n link: {\n \"&:hover\": {\n cursor: \"pointer\",\n color: theme.palette.getContrastText(blueGrey[50]),\n },\n },\n}));\n\nexport const Authenticator = ({ history }) => {\n const classes = useStyles();\n const isXSmall = useMediaQuery((theme) => theme.breakpoints.down(\"xs\"));\n\n useEffect(() => {\n const viewport = document.querySelector(\"meta[name=viewport]\");\n viewport.setAttribute(\n \"content\",\n \"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\"\n );\n }, []);\n\n const isIosBrowser = () => {\n if (isTWA()) return false;\n const userAgent =\n window.navigator.userAgent || window.navigator.vendor || window.opera;\n return /iPad|iPhone/.test(userAgent) && !window.MSStream;\n };\n\n return (\n <div className={classes.root}>\n <Grid container style={{ height: \"100%\" }}>\n <Grid container item xs={12} direction=\"column\">\n <Grid\n container\n item\n className={classes.logoSection}\n justifyContent=\"center\"\n >\n <Box className={classes.logo}>\n {isTWA() ? (\n <img src={svgLogo} alt=\"transloads.co logo\" />\n ) : (\n <Link onClick={() => window.open(\"https://transloads.co\")}>\n <img src={svgLogo} alt=\"transloads.co logo\" />\n </Link>\n )}\n </Box>\n </Grid>\n <Grid container item justifyContent=\"center\">\n <AmplifyAuthenticator\n usernameAlias=\"email\"\n initialAuthState={\n history.location.search?.toLowerCase().startsWith(\"?signup\")\n ? AuthState.SignUp\n : AuthState.SignIn\n }\n >\n <AmplifySignIn\n slot=\"sign-in\"\n headerText=\"\"\n hideSignUp={isTWA()}\n submitButtonText=\"sign in\"\n formFields={[\n {\n type: \"email\",\n label: \"Email\",\n placeholder: \"Enter your email\",\n required: true,\n },\n {\n type: \"password\",\n label: \"Password\",\n placeholder: \"Enter your password\",\n required: true,\n },\n ]}\n ></AmplifySignIn>\n <AmplifySignUp\n slot=\"sign-up\"\n usernameAlias=\"email\"\n formFields={[\n {\n type: \"email\",\n label: \"Email\",\n placeholder: \"Enter your email\",\n required: true,\n },\n {\n type: \"password\",\n label: \"Password\",\n placeholder: \"Enter your password\",\n required: true,\n },\n ]}\n />\n </AmplifyAuthenticator>\n </Grid>\n <Grid item className={classes.copyrightSection}>\n <Box>\n <Typography\n variant=\"body2\"\n style={isXSmall ? { fontSize: 12 } : {}}\n color=\"textSecondary\"\n gutterBottom\n >\n © {new Date().getFullYear()} Transloads, LLC. All rights\n reserved. |  \n <Link\n color=\"primary\"\n onClick={() => window.open(privacyPolicyUrl)}\n className={classes.link}\n href=\"#\"\n >\n Privacy\n </Link>\n </Typography>\n </Box>\n </Grid>\n </Grid>\n <Grid item>\n {isIosBrowser() && <AppStoreDrawer classes={classes} />}\n </Grid>\n </Grid>\n </div>\n );\n};\n\nconst AppStoreDrawer = ({ classes }) => {\n const [open, setOpen] = React.useState(true);\n\n const handleClick = (evt) => {\n evt.preventDefault();\n // const clickTime = Date.now();\n // setTimeout(() => {\n // if (Date.now() - clickTime > 100) return;\n // window.location.href = appStoreUrl;\n // }, 3000);\n window.open(appStoreUrl);\n // window.location.href = \"googlechrome:pega.com\";\n };\n\n return (\n <Drawer anchor=\"bottom\" open={open} variant=\"persistent\">\n <Box\n display=\"flex\"\n alignItems=\"center\"\n className={classes.drawer}\n justifyContent=\"space-between\"\n >\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"flex-start\">\n <CloseIcon\n color=\"disabled\"\n fontSize=\"small\"\n onClick={() => setOpen(false)}\n />\n <img\n src={transloadsLogo}\n className={classes.downloadLogo}\n alt=\"transloads.co logo\"\n />\n <Box>\n <Typography color=\"textSecondary\" variant=\"subtitle2\">\n FREE - On the App Store\n </Typography>\n <Typography color=\"textSecondary\" variant=\"caption\">\n All-in-one YMS / WMS\n </Typography>\n </Box>\n </Box>\n <Button variant=\"outlined\" onClick={handleClick} color=\"primary\">\n Open\n </Button>\n </Box>\n </Drawer>\n );\n};\n","export default \"data:image/png;base64,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\"","import React, { useState, useEffect } from \"react\";\nimport { BrowserRouter, Route, Switch } from \"react-router-dom\";\nimport { API, Auth, Hub, graphqlOperation } from \"aws-amplify\";\nimport { AuthState, onAuthUIStateChange } from \"@aws-amplify/ui-components\";\nimport { userByEmail } from \"./graphql/queries\";\nimport { getReloadYard } from \"./graphql/reloadyard/custom-queries\";\nimport { customerByEmail } from \"./graphql/reloadyard/custom-queries\";\nimport {\n updateCustomerMini,\n updateUserMini,\n} from \"./graphql/reloadyard/custom-mutations\";\nimport { Backdrop, CircularProgress } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { SnackbarProvider } from \"notistack\";\nimport { AdminApp } from \"./adminApp/AdminApp\";\nimport { CustomerApp } from \"./customerApp/CustomerApp\";\nimport { ManagerApp } from \"./managerApp/ManagerApp\";\nimport { CrewApp } from \"./crewApp/CrewApp\";\nimport { NewYardRooted } from \"./registrationApp/NewYard\";\nimport { Authenticator } from \"./authenticatorApp/Authenticator\";\nimport { AppType, PortalType, UserType } from \"./utils/constants\";\nimport {\n logError,\n retrieveStripeSubscription,\n setupCommodityMaps,\n setupLocationMaps,\n} from \"./utils/appUtils\";\nimport withRoot from \"./withRoot\";\nimport { ThemeStateProvider } from \"./ThemeStateProvider\";\nimport { useUser } from \"./authenticatorApp/UserContext\";\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport MuiAlert from \"@material-ui/lab/Alert\";\n\nconst useStyles = makeStyles((theme) => ({\n backdrop: {\n zIndex: 90001,\n },\n}));\n\nconst logout = () => {\n console.log(\"Hub signOut\");\n localStorage.removeItem(\"reloadYardId\");\n window.appUser = null;\n console.log(\n `redirect ${new Date()}: ${window.location.protocol}//${\n window.location.host\n }`\n );\n window.location = `${window.location.protocol}//${window.location.host}`;\n};\n\nconst listener = (data) => {\n switch (data.payload.event) {\n case \"tokenRefresh\":\n console.log(\n `token refresh succeeded ${new Date()}: ${data?.payload?.message}`\n );\n break;\n case \"tokenRefresh_failure\":\n console.log(\n `token refresh failed ${new Date()}: ${data?.payload?.message}`\n );\n logout();\n break;\n case \"signOut\":\n debugger;\n console.log(`sighout ${new Date()}: ${data?.payload?.message}`);\n logout();\n break;\n default:\n break;\n }\n};\n\nHub.listen(\"auth\", listener);\n\nconst doGetReloadYard = async (id) => {\n const response = await API.graphql(graphqlOperation(getReloadYard, { id }));\n const reloadYard = response.data.getReloadYard;\n return reloadYard;\n};\n\nconst setupCustomerData = async (appUser, authData) => {\n // setup Customer\n debugger;\n let reloadYardId = localStorage.getItem(\"reloadYardId\");\n\n // Determine if the localStorage reloadYardId is active. In-active were filtered out.\n let reloadYardAccount = appUser.reloadYardAccounts.items.find(\n (account) => account.reloadYardId === reloadYardId\n );\n\n if (!reloadYardAccount) {\n // Update localStorage with a new active reloadyard\n reloadYardAccount = appUser.reloadYardAccounts.items[0];\n reloadYardId = reloadYardAccount.reloadYardId;\n try {\n if (reloadYardId) {\n localStorage.setItem(\"reloadYardId\", reloadYardId);\n }\n } catch (err) {\n logError(\"authenticator:setupUserData\", err, false);\n }\n }\n\n const reloadYard = await doGetReloadYard(reloadYardId);\n setupLocationMaps(reloadYard);\n setupCommodityMaps(reloadYard);\n\n appUser.portalType = getPortalType(appUser);\n\n // transform ACL Permissions\n appUser.permissionList = {};\n reloadYardAccount.acl?.forEach((itm) => {\n appUser.permissionList[itm] = true;\n });\n\n return {\n ...appUser,\n fullName: appUser.firstName + \" \" + appUser.lastName,\n reloadYard,\n reloadYardId,\n appType: AppType.CUSTOMER,\n accountId: reloadYardAccount.accountId,\n accountName: reloadYardAccount.accountName,\n account: reloadYardAccount.account,\n cognitoId: authData.username,\n };\n};\n\nconst setupUserData = async (appUser, authData) => {\n // setup yard Staff\n Auth.updateUserAttributes(authData, {\n \"custom:yardId\": appUser.reloadYardId,\n });\n\n const reloadYard = await doGetReloadYard(appUser.reloadYardId);\n const subscription = await retrieveStripeSubscription(reloadYard);\n\n setupLocationMaps(reloadYard);\n setupCommodityMaps(reloadYard);\n\n appUser.portalType = getPortalType(appUser);\n\n // transform ACL Permissions\n appUser.permissionList = {};\n appUser.acl?.forEach((itm) => {\n appUser.permissionList[itm] = true;\n });\n\n return {\n ...appUser,\n reloadYard,\n subscription,\n appType: AppType.YARD,\n cognitoId: authData.username,\n };\n};\n\nconst setupAdminData = (appUser, authData) => {\n // setup ADMIN\n appUser.portalType = getPortalType(appUser);\n\n return {\n ...appUser,\n appType: AppType.ADMIN,\n cognitoId: authData.username,\n };\n};\n\nconst getPortalType = (appUser) => {\n let portalType = localStorage.getItem(\"portalType\");\n\n if (!portalType) {\n if (appUser.type === UserType.CUSTOMER) portalType = PortalType.MANAGER;\n else if (appUser.type === UserType.ADMIN) portalType = PortalType.MANAGER;\n else\n portalType =\n appUser.type !== UserType.CREW ? PortalType.MANAGER : PortalType.CREW;\n\n try {\n localStorage.setItem(\"portalType\", portalType);\n } catch (err) {\n logError(\"authenticator:getPortalType\", err, false);\n }\n }\n\n return portalType;\n};\n\nconst getUserByEmail = async (email) => {\n let user;\n\n // Create two promises for users and customers\n const userPromise = API.graphql(\n graphqlOperation(userByEmail, { email: email.toLowerCase() })\n );\n const customerPromise = API.graphql(\n graphqlOperation(customerByEmail, { email: email.toLowerCase() })\n );\n\n // Use Promise.all to wait for both promises to resolve\n const [userResponse, customerResponse] = await Promise.all([\n userPromise,\n customerPromise,\n ]);\n\n if (userResponse.data.userByEmail.items?.length > 0) {\n user = userResponse.data.userByEmail.items[0];\n } else if (customerResponse.data.customerByEmail.items?.length > 0) {\n user = customerResponse.data.customerByEmail.items[0];\n user.type = UserType.CUSTOMER;\n\n // check if user has no access to any reload yards\n const activeAccounts = user.reloadYardAccounts?.items.filter(\n (account) => account.active === \"true\"\n );\n if (activeAccounts?.length === 0) {\n user = null;\n } else {\n user.reloadYardAccounts.items = activeAccounts;\n }\n }\n\n if (user?.active === \"false\" && !user?.email?.endsWith(\"@transload.co\")) {\n // if not a Transloads Admin and inactive - then logout\n await Auth.signOut();\n }\n return user;\n};\n\nconst updateUser = (user, cognitoId) => {\n if (user.cognitoId) return;\n\n try {\n const userToUpdate = {\n ...user,\n cognitoId,\n };\n\n if (user.type === UserType.CUSTOMER) {\n delete userToUpdate.permissionList;\n delete userToUpdate.reloadYardAccounts;\n delete userToUpdate.type;\n delete userToUpdate.createdAt;\n delete userToUpdate.updatedAt;\n\n API.graphql(\n graphqlOperation(updateCustomerMini, { input: { ...userToUpdate } })\n );\n } else {\n delete userToUpdate.permissionList;\n delete userToUpdate.createdAt;\n delete userToUpdate.updatedAt;\n\n API.graphql(\n graphqlOperation(updateUserMini, { input: { ...userToUpdate } })\n );\n }\n } catch (err) {\n logError(\"src:App:updateUser\", err, false);\n }\n};\n\nconst Alert = (props) => {\n return <MuiAlert elevation={6} variant=\"filled\" {...props} />;\n};\n\nfunction App({ adminHistory }) {\n const { appUser, setAppUser } = useUser();\n const classes = useStyles();\n const [authState, setAuthState] = useState();\n const [error, setError] = useState();\n const [open, setOpen] = React.useState(false);\n\n useEffect(() => {\n const handleOffline = () => setOpen(true);\n const handleOnline = () => setOpen(false);\n\n window.addEventListener(\"offline\", handleOffline);\n window.addEventListener(\"online\", handleOnline);\n\n return onAuthUIStateChange(async (nextAuthState, authData) => {\n window.removeEventListener(\"online\", handleOffline);\n window.removeEventListener(\"online\", handleOnline);\n debugger;\n\n setAuthState(nextAuthState);\n if (authData && nextAuthState === AuthState.SignedIn) {\n try {\n if (!appUser) {\n let user;\n // get yard staff user or ustomer from db by email\n const appUser = await getUserByEmail(authData.attributes.email);\n if (appUser) {\n // set new user cognitoId in DB\n updateUser(appUser, authData.username);\n\n if (appUser.type === UserType.CUSTOMER) {\n user = await setupCustomerData(appUser, authData);\n } else if (appUser.reloadYardId) {\n user = await setupUserData(appUser, authData);\n } else if (appUser.type === UserType.ADMIN) {\n // else if (appUser.groups && appUser.groups[0] === \"admin\")\n // updateUser(appUser, authData.username);\n user = setupAdminData(appUser, authData);\n } else {\n throw new Error(\"Invalid user.\");\n }\n } else {\n user = {\n ...authData.attributes,\n appType: AppType.REGISTRATION,\n cognitoId: authData.username,\n };\n }\n window.appUser = user;\n setAppUser(user);\n const viewport = document.querySelector(\"meta[name=viewport]\");\n viewport.setAttribute(\n \"content\",\n \"width=device-width, initial-scale=1.0, user-scalable=yes\"\n );\n }\n } catch (err) {\n logError(\"src:App:onAuthUIStateChange\", err, false);\n }\n }\n });\n }, []);\n\n const handleClose = (evt, reason) => {\n if (reason === \"clickaway\") return;\n setOpen(false);\n };\n\n return (\n <BrowserRouter>\n <Snackbar open={open} autoHideDuration={10000} onClose={handleClose}>\n <Alert severity=\"error\" onClose={handleClose}>\n Internet connection lost\n </Alert>\n </Snackbar>\n <Switch>\n <Route\n path=\"/\"\n render={(props) => {\n return authState === AuthState.SignedIn ? (\n window.appUser?.appType === AppType.YARD ? (\n window.appUser?.type === UserType.CREW ? (\n <ThemeStateProvider>\n <CrewApp {...props} adminHistory={adminHistory} />\n </ThemeStateProvider>\n ) : (\n <ThemeStateProvider>\n <ManagerApp {...props} adminHistory={adminHistory} />\n </ThemeStateProvider>\n )\n ) : window.appUser?.appType === AppType.CUSTOMER ? (\n <ThemeStateProvider>\n <CustomerApp {...props} adminHistory={adminHistory} />\n </ThemeStateProvider>\n ) : window.appUser?.appType === AppType.ADMIN ? (\n <ThemeStateProvider>\n <AdminApp {...props} adminHistory={adminHistory} />\n </ThemeStateProvider>\n ) : window.appUser?.appType === AppType.REGISTRATION ? (\n <SnackbarProvider maxSnack={3}>\n <NewYardRooted {...props} />\n </SnackbarProvider>\n ) : (\n <Backdrop className={classes.backdrop} open={!appUser}>\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n )\n ) : (\n <Authenticator {...props} error={error} setError={setError} />\n );\n }}\n />\n </Switch>\n </BrowserRouter>\n );\n}\n\nexport default withRoot(App);\n\n// const RootedApp = withRoot(App);\n// export { RootedApp };\n","import React from \"react\";\n\nimport ReactDOM from \"react-dom\";\nimport { createBrowserHistory as createHistory } from \"history\";\n\nimport { Amplify } from \"@aws-amplify/core\";\nimport awsExports from \"./aws-exports\";\n\nimport * as serviceWorker from \"./serviceWorker\";\n\nimport App from \"./App\";\nimport { UserProvider } from \"./authenticatorApp/UserContext\";\n\nAmplify.configure(awsExports);\n\nif (module.hot) {\n module.hot.accept();\n}\n\nconst adminHistory = createHistory({ basename: \"/\" });\n\nReactDOM.render(\n <React.StrictMode>\n <UserProvider>\n <App adminHistory={adminHistory} />\n </UserProvider>\n </React.StrictMode>,\n document.getElementById(\"root\")\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","import React from \"react\";\n\nimport { Box, IconButton } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { Labeled, TextField } from \"react-admin\";\n\nimport { CopyIcon } from \"./\";\n\nconst useStyles = makeStyles((theme) => ({\n clipboardButton: {\n marginLeft: theme.spacing(1),\n },\n}));\n\nexport function copyToClipboard(text, notify) {\n navigator.clipboard\n .writeText(text)\n .then(() => {\n notify && notify(\"Copied to clipboard\");\n })\n .catch((error) => {\n notify && notify(\"Error copying to clipboard:\", \"error\");\n console.error(\"Error copying text to clipboard:\", error);\n });\n}\n\nexport const ClipboardTextField = ({\n record,\n source,\n label,\n notify,\n ...props\n}) => {\n if (!record) return null;\n\n return (\n <Box display=\"flex\" alignItems=\"flex-end\">\n <Labeled label={label ? label : source}>\n <TextField record={record} source={source} />\n </Labeled>\n <CopyToClipboardButton {...props} text={record[source]} notify={notify} />\n </Box>\n );\n};\n\nexport const CopyToClipboardButton = ({ text, notify }) => {\n const classes = useStyles();\n const onPress = (event) => {\n event.stopPropagation();\n copyToClipboard(text, notify);\n };\n\n return (\n <IconButton\n size=\"small\"\n className={classes.clipboardButton}\n onClick={onPress}\n >\n <CopyIcon fontSize=\"medium\" />\n </IconButton>\n );\n};\n","import { API, graphqlOperation } from \"aws-amplify\";\nimport { eventTypeByActiveByArea } from \"../../../graphql/reloadyard/custom-queries\";\n\nimport get from \"lodash/get\";\n\nimport { minValue, number, required } from \"react-admin\";\n\nimport { parseTime } from \"../../../utils/utils\";\nimport { logError } from \"../../../utils/appUtils\";\n\nexport const fetchEventTypes = async (setEventTypes, notify) => {\n try {\n const searchQuery = {\n reloadYardId: window.appUser?.reloadYardId,\n activeAreaId: { beginsWith: { active: \"true\" } },\n };\n debugger;\n const results = await API.graphql(\n graphqlOperation(eventTypeByActiveByArea, searchQuery)\n );\n setEventTypes(results.data.eventTypeByActiveByArea.items);\n } catch (error) {\n logError(\"eventTypes:eventTypeUtils:fetchEvents\", error, notify);\n }\n};\n\nexport const validateStartTime = (value, allValues, getSource) => {\n const today = new Date();\n const source = getSource(\"endDayTime\");\n const endDayTime = get(allValues, source, null);\n\n if (!value || !endDayTime) return undefined;\n\n // Use `value` for real-time validation of the modified field\n const startEventTime = parseTime(value);\n const endEventTime = parseTime(endDayTime);\n\n const startDate = new Date(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n startEventTime.hour,\n startEventTime.minute\n );\n\n const endDate = new Date(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n endEventTime.hour,\n endEventTime.minute\n );\n\n if (startDate >= endDate) {\n return \"Must be earlier than end time\";\n }\n\n return undefined;\n};\n\nexport const validateEndTime = (value, allValues, getSource) => {\n const today = new Date();\n const source = getSource(\"startDayTime\");\n const startDayTime = get(allValues, source, null);\n\n if (!value || !startDayTime) return undefined;\n\n // Use `value` for real-time validation of the modified field\n const startEventTime = parseTime(startDayTime);\n const endEventTime = parseTime(value);\n\n const startDate = new Date(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n startEventTime.hour,\n startEventTime.minute\n );\n\n const endDate = new Date(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n endEventTime.hour,\n endEventTime.minute\n );\n\n if (startDate >= endDate) {\n return \"Must be later than start time\";\n }\n\n return undefined;\n};\n\nexport const validateDurationAndBuffer = (value, allValues) => {\n if (!value || !allValues?.schedule?.workdays) return undefined;\n\n // Filter selected workdays\n const selectedDays = allValues.schedule.workdays.filter(\n (day) => day.selected\n );\n\n if (!selectedDays.length) return undefined;\n\n // Find the workday with the **shortest** available time range\n const shortestDay = selectedDays.reduce(\n (shortest, day) => {\n const startWorkTime = parseTime(day.startDayTime);\n const endWorkTime = parseTime(day.endDayTime);\n const availableMinutes =\n endWorkTime.hour * 60 +\n endWorkTime.minute -\n (startWorkTime.hour * 60 + startWorkTime.minute);\n\n return availableMinutes < shortest.availableMinutes\n ? { day, availableMinutes, startWorkTime, endWorkTime }\n : shortest;\n },\n {\n day: selectedDays[0], // Initialize with the first workday\n availableMinutes: Infinity, // Start with a high number\n startWorkTime: parseTime(selectedDays[0].startDayTime),\n endWorkTime: parseTime(selectedDays[0].endDayTime),\n }\n );\n\n // Compute event's total required time\n const totalEventMinutes =\n (allValues.duration || 0) + (allValues.bufferTime || 0);\n\n return totalEventMinutes > shortestDay.availableMinutes\n ? `Exceeds available hours (${shortestDay.day.name}: ${shortestDay.day.startDayTime} - ${shortestDay.day.endDayTime})`\n : undefined;\n};\n\nexport const validatePositiveNumber = [\n required(),\n number(),\n minValue(0, \"Must be 0 or greater\"),\n];\n","import { API, graphqlOperation } from \"aws-amplify\";\nimport {\n searchInboundShipments,\n searchOutboundShipments,\n} from \"../graphql/queries\";\nimport { updateAisle, updateLocation } from \"../graphql/mutations\";\nimport { updateInboundShipmentMini } from \"../graphql/inbound/custom-mutations\";\nimport { logError } from \"./appUtils\";\nimport {\n AreaType,\n LocationLoadType,\n LocationType,\n CarrierType,\n InventoryStatus,\n InboundStatus,\n InboundState,\n LotType,\n NoteType,\n SORTKEY_BUFFER,\n} from \"./constants\";\nimport {\n getYardCommodity,\n isBulkCommodity,\n isShippingContainer,\n} from \"./loadTypeUtils\";\nimport {\n createInventorieId,\n createInventoryItemId,\n updateInventorieId,\n updateInventoryItemMini,\n} from \"../graphql/inventory/custom-mutations\";\nimport {\n inventoryByAreaByProductByStatus,\n inventoryByAreaByProductByStatusMax,\n} from \"../graphql/inventory/custom-queries\";\nimport { createInboundShipmentId } from \"../graphql/inbound/custom-mutations\";\nimport { getLocationProduct } from \"../graphql/account/custom-queries\";\n\nexport const isCapacitySliderVisible = (location) => {\n if (!location) return false;\n if (location.area?.areaType === AreaType.TRACK) return false;\n if (location.type === LocationType.BULK) return false;\n if (location.type === LocationType.UNSTRUCTURED) return true;\n if (location.locationLoad?.container?.selected) return false;\n if (!location.locationLoad?.other?.selected) return false;\n if (!location.locationLoad) return false; // remove flash on mutate\n return true;\n};\n\nexport const setInventoryAisleList = (inventory) => {\n const aisleIdMap = {};\n if (inventory.inventoryItems?.items) {\n inventory.inventoryItems.items.forEach((itm) => {\n if (itm.status !== InventoryStatus.SHIPPED) {\n aisleIdMap[itm.aisleId] = true;\n }\n });\n }\n inventory.aisleList = Object.keys(aisleIdMap);\n};\n\nexport const updateCapacityUtilization = (\n location,\n inventory,\n newCapacityUsed = location.capacityUsed,\n newCapacityAllocated = location.capacityAllocated\n) => {\n // Update location with the new values\n const toUpdateLocation = {\n ...location,\n capacityUsed: newCapacityUsed,\n capacityAllocated: newCapacityAllocated,\n };\n\n // Update productId based on newCapacityUsed\n if (newCapacityUsed === 0 && newCapacityAllocated === 0) {\n toUpdateLocation.productName = null;\n } else if (!toUpdateLocation.productId && inventory.productId) {\n toUpdateLocation.productId = inventory.productId;\n toUpdateLocation.productName = inventory.productName;\n } else {\n toUpdateLocation.productId = null;\n toUpdateLocation.productName = null;\n }\n\n // Adjust aisle's capacity based on the effective change\n const toUpdateAisle = location.aisle;\n // Determine the effective change in total capacity (used + allocated)\n const effectiveCapacityChange =\n newCapacityUsed +\n newCapacityAllocated -\n (location.capacityUsed + location.capacityAllocated);\n\n if (\n toUpdateAisle &&\n typeof toUpdateAisle.capacityUsed === \"number\" &&\n toUpdateAisle.totalLocations\n ) {\n // Spread the effective change across the total locations, adjusting the aisle's capacity\n toUpdateAisle.capacityUsed +=\n effectiveCapacityChange / toUpdateAisle.totalLocations;\n\n // Round the aisle.capacityUsed to the nearest whole number and ensure it stays within bounds\n toUpdateAisle.capacityUsed = Math.min(\n Math.max(Math.round(toUpdateAisle.capacityUsed), 0),\n 100\n );\n }\n\n // Prepare the location for update by removing unnecessary properties\n delete toUpdateLocation.aisle;\n delete toUpdateLocation.area;\n delete toUpdateLocation.createdAt;\n delete toUpdateLocation.locationLoad;\n delete toUpdateLocation.tags;\n delete toUpdateLocation.updatedAt;\n delete toUpdateLocation.zone;\n\n // Prepare the location for update by removing unnecessary properties\n delete toUpdateAisle.area;\n delete toUpdateAisle.createdAt;\n delete toUpdateAisle.locationLoad;\n delete toUpdateAisle.locations;\n delete toUpdateAisle.tags;\n delete toUpdateAisle.updatedAt;\n delete toUpdateAisle.zone;\n\n // Perform the API call to update the location\n const locationPromise = API.graphql(\n graphqlOperation(updateLocation, { input: toUpdateLocation })\n );\n const aislePromise = API.graphql(\n graphqlOperation(updateAisle, { input: toUpdateAisle })\n );\n\n return [locationPromise, aislePromise];\n};\n\nexport const setCapacityUsed = async (\n location,\n capacityUsed = location.capacityUsed,\n capacityAllocated = location.capacityAllocated\n) => {\n await promiseSetCapacityUsed(location, capacityUsed, capacityAllocated);\n};\n\nexport const promiseSetCapacityUsed = (\n location,\n capacityUsed = location.capacityUsed,\n capacityAllocated = location.capacityAllocated\n) => {\n const toUpdateLocation = { ...location, capacityUsed, capacityAllocated };\n\n delete toUpdateLocation.aisle;\n delete toUpdateLocation.area;\n delete toUpdateLocation.createdAt;\n delete toUpdateLocation.locationLoad;\n delete toUpdateLocation.tags;\n delete toUpdateLocation.updatedAt;\n delete toUpdateLocation.zone;\n return API.graphql(\n graphqlOperation(updateLocation, { input: toUpdateLocation })\n );\n};\n\nconst getBayNumber = (locationObj) => {\n return `${locationObj.bay < 10 ? \"0\" : \"\"}${locationObj.bay}`;\n};\n\nexport const getAisleFullName = (aisle) => {\n if (!aisle || !aisle?.area) return \"\";\n return `${aisle.area.prefix}${aisle.zone.prefix}-${aisle.name}`;\n};\n\nexport const getLocationViewName = (location) => {\n if (!location || !location?.id) return \"\";\n if (location.type === LocationType.BULK) {\n if (location.name) return location.name;\n return location.position;\n } else if (location.type === LocationType.UNSTRUCTURED) {\n return location.name;\n } else {\n if (location.name) return location.name;\n return `${getBayNumber(location)}${location.position}-${location.level}`;\n }\n};\n\nexport const getLocationFullName = (location) => {\n if (!location || !location?.id) return \"\";\n if (location?.area && location?.zone && location?.aisle) {\n if (location.type === LocationType.UNSTRUCTURED) {\n return `${location.area.prefix}${location.zone.prefix}-${location.name}`;\n } else if (location.type === LocationType.BULK) {\n if (location.name)\n return `${location.area.prefix}${location.zone.prefix}${location.aisle?.name}-${location.name}`;\n return `${location.area.prefix}${location.zone.prefix}${location.aisle?.name}-${location.position}`;\n } else {\n if (location.name)\n return `${location.area.prefix}${location.zone.prefix}${location.aisle?.name}-${location.name}`;\n return `${location.area.prefix}${location.zone.prefix}${\n location.aisle?.name\n }-${getBayNumber(location)}${location.position}-${location.level}`;\n }\n } else {\n logError(\n \"admin:utils:locationUtils:getLocationFullName\",\n `Missing area/zone/aisle: ${JSON.stringify(location)}`,\n false\n );\n return \"\";\n }\n};\n\nexport const isBulkArea = (area) => {\n let areaType = null;\n\n if (typeof area === \"object\") areaType = area?.areaType;\n else if (typeof area === \"string\") {\n const newArea = getArea(area);\n areaType = newArea?.areaType;\n }\n return areaType === AreaType.BULK;\n};\n\nexport const isBulkLocation = (location) => {\n return location.type === LocationType.BULK;\n};\n\nexport const isStructuredLocation = (location) => {\n return location.type === LocationType.STRUCTURED;\n};\n\nexport const filterAreas = (areas, yardCommodity, execludeAreaType) => {\n if (!yardCommodity) return areas;\n\n let commodity = yardCommodity?.commodity;\n if (!commodity) {\n yardCommodity = getYardCommodity(yardCommodity);\n commodity = yardCommodity.commodity;\n }\n\n if (commodity && isBulkCommodity(commodity)) {\n return areas.filter((area) => {\n const isActive = area.active === \"true\";\n const isBulk =\n area.areaType === AreaType.TRACK || area.areaType === AreaType.BULK;\n const isNotExecluded = execludeAreaType\n ? area.areaType !== execludeAreaType\n : true;\n return isActive && isBulk && isNotExecluded;\n });\n }\n\n // other load types go to STRUCTURED\n return areas.filter((area) => {\n const isActive = area.active === \"true\";\n const isNotBulk = area.areaType !== AreaType.BULK;\n const isNotExecluded = execludeAreaType\n ? area.areaType !== execludeAreaType\n : true;\n return isActive && isNotBulk && isNotExecluded;\n });\n};\n\nexport const filterZones = (zones, yardCommodityId, accountId) => {\n return zones.filter((zone) => {\n const isActive = zone.active === \"true\";\n const matchesYardCommodity = yardCommodityId\n ? zone.reloadYardCommodityId === yardCommodityId ||\n !zone.reloadYardCommodityId\n : true;\n const matchesAccount = accountId\n ? zone.accountId === accountId || !zone.accountId\n : true;\n\n return isActive && matchesYardCommodity && matchesAccount;\n });\n};\n\nexport const filterAisles = (aisles, inventory) => {\n if (!aisles || aisles?.length === 0) return aisles;\n\n // CONTAINER can only by stored in CONTAINER aisle\n if (isShippingContainer(inventory?.reloadYardCommodity?.commodity)) {\n return aisles.filter((aisle) => aisle.locationLoad?.container.selected);\n }\n\n // inventoryLoadType.BULK can only be stored in BULK aisles already filtered by filterZones\n // mark NOT_AVAILABLE if full\n let area = inventory?.area;\n if (!area) area = aisles[0].area;\n\n // inventoryLoadType.OTHER can only be stored in UNSTRUCTURED and STRUCTURED.OTHER\n if (\n inventory?.reloadYardCommodity?.commodity?.locationLoadType ===\n LocationLoadType.OTHER\n ) {\n return aisles.filter(\n (aisle) =>\n aisle.type === LocationType.UNSTRUCTURED ||\n aisle.locationLoad?.other.selected\n );\n }\n\n // if load type box, pallet, or supersack, then go to any STRUCTURED, including other\n // bulk already filtered at filterZones\n return aisles.filter((aisle) => !aisle.locationLoad?.container.selected);\n};\n\nexport const isFloorLoaded = (aisleOrLocation) => {\n return (\n aisleOrLocation.topDownPickOrder ||\n aisleOrLocation.aisle?.topDownPickOrder ||\n aisleOrLocation.locationLoad?.container?.selected\n );\n};\n\nexport const isUnmanagedAisle = (aisle) => {\n if (!aisle) return true;\n if (aisle.type === LocationType.BULK) return false;\n return (\n aisle.type === LocationType.UNSTRUCTURED ||\n aisle.locationLoad?.other.selected\n );\n};\n\nexport const isUnmanagedLocation = (location) => {\n return isUnmanagedAisle(location);\n};\n\nexport const isManagedLocation = (location) => {\n return !isUnmanagedAisle(location);\n};\n\nexport const isBulkLocationAvailable = (\n toLocation,\n currentInventory,\n qtyToPlace\n) => {\n // STRUCTURED BULK\n if (!toLocation) return false;\n if (toLocation.type !== LocationType.BULK) return false;\n\n // cannot place two different products in the same location\n if (toLocation.productId !== currentInventory.productId) return false;\n\n // cannot place if location is full\n if (\n (toLocation.capacityUsed || 0) >= toLocation.bulkCapacity ||\n (toLocation.capacityAllocated || 0) >= toLocation.bulkCapacity\n ) {\n return false;\n }\n\n // cannot place if required space too small to accept qty\n const requiredSpace =\n (toLocation.capacityUsed || 0) +\n (toLocation.capacityAllocated || 0) +\n qtyToPlace;\n if (requiredSpace > toLocation.bulkCapacity) return false;\n\n return true;\n};\n\nexport const isBulkLocationAvailableMemo = (\n type,\n productId,\n invproductId,\n capacityUsed,\n capacityAllocated,\n bulkCapacity,\n qtyToPlace\n) => {\n // STRUCTURED BULK\n if (type !== LocationType.BULK) return true;\n\n // cannot place two different products in the same location\n if (productId !== invproductId) return false;\n\n // cannot place if location is full\n if (\n (capacityUsed || 0) >= bulkCapacity ||\n (capacityAllocated || 0) >= bulkCapacity\n ) {\n return false;\n }\n\n // cannot place if required space too small to accept qty\n const requiredSpace =\n (capacityUsed || 0) + (capacityAllocated || 0) + qtyToPlace;\n if (requiredSpace > bulkCapacity) return false;\n\n return true;\n};\n\nexport const isLocationAvailable = (bayList, toLocation, currentInventory) => {\n // BULK locationes are filtered out by filterAreas, filterZones and filterAisles\n\n // UNSTRUCTURED\n if (!toLocation) return false;\n if (toLocation.type === LocationType.UNSTRUCTURED) return true;\n\n // STRUCTURED\n if (bayList?.length === 0) return false;\n\n // cannot place if location is full\n if (\n (toLocation.capacityUsed || 0) >= 100 ||\n (toLocation.capacityAllocated || 0) >= 100\n )\n return false;\n\n const inventoryLoadType =\n currentInventory.reloadYardCommodity.commodity.locationLoadType;\n const toLocationLoadType = toLocation.locationLoad[inventoryLoadType];\n\n // can place any loadType to OTHER except for CONTAINER. OTHER can take any mix of products.\n if (\n toLocation.locationLoad.other.selected &&\n inventoryLoadType !== LocationLoadType.CONTAINER\n ) {\n if (isFloorLoaded(toLocation)) {\n return checkFloorLoaded(bayList, toLocation);\n }\n return true;\n }\n\n // cannot place two different products in the same location\n if (\n toLocation.productId &&\n toLocation.productId !== currentInventory.productId\n )\n return false;\n\n // cannot place if location does not accept this LoadType. inventory.loadType !== location.loadType\n if (!toLocationLoadType.selected) return false;\n\n // cannot place if required space too small to accept qty\n const requiredSpace =\n (toLocation.capacityUsed || 0) +\n (toLocation.capacityAllocated || 0) +\n toLocationLoadType.capacity;\n if (requiredSpace > 100) return false;\n\n // FLOOR-LOADED & CONTAINER\n if (isFloorLoaded(toLocation)) {\n return checkFloorLoaded(bayList, toLocation);\n }\n\n return true;\n};\n\nconst checkFloorLoaded = (bayList, toLocation) => {\n // can place on the floor\n if (toLocation.level === 1) return true;\n\n // cannot place if space above would bave more than space below\n const locationBay = bayList[toLocation.bay - 1];\n const locationBelow =\n locationBay[toLocation.level - 2][toLocation.position - 1];\n\n const quantity =\n (toLocation.capacityUsed || 0) + (toLocation.capacityAllocated || 0);\n const quantityBelow =\n (locationBelow.capacityUsed || 0) + (locationBelow.capacityAllocated || 0);\n if (quantityBelow <= quantity) return false;\n\n return true;\n};\n\n// export const canPlaceBelow = (bayList, toLocation, inventoryItem, currentInventory, selectedAisle) => {\n// if (!selectedAisle) return false;\n// if (!isFloorLoaded(selectedAisle)) return false;\n// if (selectedAisle.type === LocationType.UNSTRUCTURED || bayList.length === 0) return false;\n// if (!toLocation) return false;\n\n// const inventoryItemLocation = inventoryItem.location;\n\n// // can't relocate items that have other items above it\n// if (inventoryItemLocation) {\n// const inventoryItemBay = bayList[inventoryItemLocation.bay - 1];\n// if (inventoryItem.id && inventoryItemLocation.level < inventoryItemBay.length) {\n// const levelAbove = inventoryItemBay[inventoryItemLocation.level];\n// const locationAbove = levelAbove[inventoryItemLocation.position - 1];\n// if (locationAbove.capacityUsed !== 0) return false;\n// }\n// }\n\n// // can't place below the top location\n// if (toLocation.level === bayList[toLocation.bay - 1].length) return false;\n\n// const bay = bayList[toLocation.bay - 1];\n// const topLocation = bay[bay.length - 1][toLocation.position - 1];\n\n// // can't place below if the top location is not empty\n// if (topLocation?.capacityUsed > 0) return false;\n\n// // can't place below an empty location\n// if (toLocation.capacityUsed === 0) return false;\n\n// // can't place below the same location\n// if (inventoryItem.id && toLocation.id === inventoryItem.location?.id) return false;\n\n// // can't place below items to a location above itself\n// if (inventoryItem.id && toLocation.bay === inventoryItem.location?.bay\n// && toLocation.level >= inventoryItem.location?.level\n// && toLocation.position === inventoryItem.location?.position) {\n// return false;\n// }\n\n// // can't relocate above a location that is not full\n// const toLocationBay = bayList[toLocation.bay - 1];\n// if (toLocation.level > 1 && toLocationBay[toLocation.level - 1].length === toLocationBay[toLocation.level - 2].length) {\n// const locationBelow = toLocationBay[toLocation.level - 2][toLocation.position - 1];\n// if (locationBelow.capacityUsed < 100) {\n// return false\n// }\n// }\n\n// // can't place below if the inventory items doesn't fill the location\n// const inventoryLoadType = currentInventory.reloadYardCommodity.commodity.locationLoadType;\n// const toLocationLoadType = toLocation.locationLoad[inventoryLoadType];\n// if (!toLocationLoadType.selected) return false;\n\n// const currentQuantity = inventoryItem.quantityOnHand ? inventoryItem.quantityOnHand : 0;\n// const requiredSpace = toLocationLoadType.capacity * currentQuantity;\n// if (requiredSpace !== 100) return false;\n\n// return true;\n// }\n\nexport const canRelocate = (\n bayList,\n toLocation,\n inventoryItem,\n currentInventory,\n disableRelocateValidation,\n inventoryItemBayList\n) => {\n if (!inventoryItem) return true;\n\n if (inventoryItem.quantityCommitted > 0) return false;\n\n const fromValidation = canRelocateFrom(\n inventoryItem,\n disableRelocateValidation,\n inventoryItemBayList\n );\n if (!fromValidation) return false;\n if (!toLocation) return fromValidation;\n\n if (toLocation.type === LocationType.UNSTRUCTURED) {\n // can't relocate feom one aisle to the same aisle\n if (toLocation.aisleId === inventoryItem.aisleId) return false;\n return true;\n }\n\n // can't relocate items to the same location\n if (\n toLocation &&\n inventoryItem &&\n toLocation.id === inventoryItem.location.id\n ) {\n return false;\n }\n\n // TODO: decide how to skip validation\n if (disableRelocateValidation) {\n return true;\n }\n\n // can't relocate to a full location\n if (\n (toLocation.capacityUsed || 0) >= 100 ||\n (toLocation.capacityAllocated || 0) >= 100\n )\n return false;\n\n const inventoryLoadType =\n currentInventory.reloadYardCommodity.commodity.locationLoadType;\n const toLocationLoadType = toLocation.locationLoad[inventoryLoadType];\n\n // can relocate any load type to OTHER except CONTAINER. OTHER can take any mix of products.\n if (\n toLocation.locationLoad.other.selected &&\n inventoryLoadType !== LocationLoadType.CONTAINER\n )\n return true;\n\n // cannot place two different products in the same location\n if (\n toLocation.productId &&\n toLocation.productId !== currentInventory.productId\n )\n return false;\n\n // can't relocate to a location with a different load type\n if (!toLocationLoadType.selected) return false;\n\n // can't relocate to a location that doesn't have enough space\n const requiredSpace =\n (toLocation.capacityUsed || 0) +\n (toLocation.capacityAllocated || 0) +\n toLocationLoadType.capacity;\n if (requiredSpace > 100) return false;\n\n // floor loaded to location validationn\n if (isFloorLoaded(toLocation)) {\n // can't relocate above a location that has less capacity used\n const toLocationBay = bayList[toLocation.bay - 1];\n if (\n toLocation.level > 1 &&\n toLocationBay[toLocation.level - 1].length ===\n toLocationBay[toLocation.level - 2].length\n ) {\n const locationBelow =\n toLocationBay[toLocation.level - 2][toLocation.position - 1];\n if (locationBelow.capacityUsed < requiredSpace) {\n return false;\n }\n }\n // can't relocate items to a location above itself\n const fromLocation = inventoryItem.location;\n if (\n toLocation.aisle.id === fromLocation.aisle.id &&\n toLocation.bay === fromLocation.bay &&\n toLocation.level >= fromLocation.level &&\n toLocation.position === fromLocation.position\n ) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const canRelocateFrom = (\n inventoryItem,\n disableRelocateValidation,\n inventoryItemBayList\n) => {\n if (!inventoryItemBayList || !inventoryItem) return true;\n // TODO: decide how to skip validation\n if (disableRelocateValidation) {\n return true;\n }\n if (inventoryItem.quantityOnHand === 0) return false;\n const fromLocation = inventoryItem.location;\n\n // floor loaded from Location validation\n if (isFloorLoaded(inventoryItem.location)) {\n // can't relocate items that have other items above it\n const inventoryItemBay = inventoryItemBayList[fromLocation.bay - 1];\n if (inventoryItemBay && fromLocation.level < inventoryItemBay.length) {\n const levelAbove = inventoryItemBay[fromLocation.level];\n const locationAbove = levelAbove[fromLocation.position - 1];\n if (locationAbove.capacityUsed) return false;\n }\n }\n\n return true;\n};\n\nexport const isRailToTrack = (area, inboundShipment) => {\n return isTrack(area) && inboundShipment?.carrierType === CarrierType.RAIL;\n};\n\nexport const isTruckToRail = (area, inboundShipment) => {\n return isTrack(area) && inboundShipment?.carrierType === CarrierType.TRUCK;\n};\n\nexport const hasTracks = () => {\n const hasTracks = window.appUser?.reloadYard?.aisles?.items?.some((aisle) =>\n isTrack(aisle.area)\n );\n\n return !!hasTracks;\n};\n\nexport const isTrack = (area) => {\n if (typeof area === \"object\") return area?.areaType === AreaType.TRACK;\n else if (typeof area === \"string\")\n return window.appUser.reloadYard.areaMap[area]?.areaType === AreaType.TRACK;\n return false;\n};\n\nexport const getArea = (areaId) => {\n // avoid using since appUser data may be stale after change by another user.\n return window.appUser.reloadYard?.areaMap[areaId];\n};\n\nexport const getAreaName = (areaId) => {\n const area = getArea(areaId);\n return area?.name;\n};\n\nexport const getZone = (area, zoneId) => {\n if (typeof area === \"object\" && area.zones) {\n return area.zones.items?.find((itm) => itm.id === zoneId);\n } else if (typeof area === \"string\") {\n const newArea = getArea(area);\n return newArea.zones.items?.find((itm) => itm.id === zoneId);\n }\n return null;\n};\n\nexport const getZoneName = (areaId, zoneId) => {\n const zone = getZone(areaId, zoneId);\n return zone?.name;\n};\n\nexport const sortLinkedCars = (processedCarsList) => {\n debugger;\n if (processedCarsList.length <= 1) {\n return processedCarsList;\n } else {\n const outputList = [];\n const previousCarMap = {};\n let firstCar;\n processedCarsList.forEach((itm) => {\n if (!itm.previousCar) {\n firstCar = itm;\n outputList.push(itm);\n }\n previousCarMap[itm.previousCar] = itm;\n });\n\n let currentCar = previousCarMap[firstCar.id];\n while (currentCar) {\n outputList.push(currentCar);\n currentCar = previousCarMap[currentCar.id];\n }\n return outputList;\n }\n};\n\nexport const sortByLocation = (inventoryItems, forPicking = false) => {\n return inventoryItems.sort((itemA, itemB) => {\n const locationA = itemA.location;\n const locationB = itemB.location;\n if (!locationA || !locationB) return 0;\n\n // Compare area sortKey\n if (locationA.area.sortKey !== locationB.area.sortKey) {\n return locationA.area.sortKey - locationB.area.sortKey;\n }\n // Compare zone sortKey\n if (locationA.zone.sortKey !== locationB.zone.sortKey) {\n return locationA.zone.sortKey - locationB.zone.sortKey;\n }\n // Compare aisle sortKey - stop sort for UNSTRUCTURED\n if (locationA.aisle.sortKey !== locationB.aisle.sortKey) {\n return locationA.aisle.sortKey - locationB.aisle.sortKey;\n }\n\n // Additional sorting by name for STRUCTURED locations\n if (\n locationA.type === LocationType.STRUCTURED &&\n locationB.type === LocationType.STRUCTURED\n ) {\n if (locationA.bay !== locationB.bay) return locationA.bay - locationB.bay;\n if (locationA.position !== locationB.position)\n return locationA.position - locationB.position;\n if (\n locationA.aisle.topDownPickOrder &&\n locationB.aisle.topDownPickOrder &&\n forPicking\n )\n return locationB.level - locationA.level;\n if (locationA.level !== locationB.level)\n return locationA.level - locationB.level;\n }\n\n // If both locations are UNSTRUCTURED and all sortKeys are equal, maintain original order\n return 0;\n });\n};\n\nexport const sortShipmentItemByLocation = (\n shipmentlineItems,\n forPicking = false\n) => {\n return shipmentlineItems.sort((itemA, itemB) => {\n const locationA = itemA.inventoryItem.location;\n const locationB = itemB.inventoryItem.location;\n\n // Compare area sortKey\n if (locationA.area.sortKey !== locationB.area.sortKey) {\n return locationA.area.sortKey - locationB.area.sortKey;\n }\n // Compare zone sortKey\n if (locationA.zone.sortKey !== locationB.zone.sortKey) {\n return locationA.zone.sortKey - locationB.zone.sortKey;\n }\n // Compare aisle sortKey - stop sort for UNSTRUCTURED\n if (locationA.aisle.sortKey !== locationB.aisle.sortKey) {\n return locationA.aisle.sortKey - locationB.aisle.sortKey;\n }\n\n // Additional sorting by name for STRUCTURED locations\n if (\n locationA.type === LocationType.STRUCTURED &&\n locationB.type === LocationType.STRUCTURED\n ) {\n if (locationA.bay !== locationB.bay) return locationA.bay - locationB.bay;\n if (locationA.position !== locationB.position)\n return locationA.position - locationB.position;\n if (\n locationA.aisle.topDownPickOrder &&\n locationB.aisle.topDownPickOrder &&\n forPicking\n )\n return locationB.level - locationA.level;\n if (locationA.level !== locationB.level)\n return locationA.level - locationB.level;\n }\n\n // If both locations are UNSTRUCTURED and all sortKeys are equal, maintain original order\n return 0;\n });\n};\n\nconst saveInventory = (toUpdateInventory) => {\n toUpdateInventory.locationId = null;\n delete toUpdateInventory.account;\n delete toUpdateInventory.inboundShipment;\n delete toUpdateInventory.outboundShipment;\n delete toUpdateInventory.shipmentLineItems;\n delete toUpdateInventory.reloadYardCommodity;\n delete toUpdateInventory.product;\n delete toUpdateInventory.location;\n delete toUpdateInventory.inventoryItems;\n delete toUpdateInventory.createdAt;\n delete toUpdateInventory.updatedAt;\n\n return API.graphql(\n graphqlOperation(updateInventorieId, { input: toUpdateInventory })\n );\n};\n\nconst saveInventoryItem = (inventoryItem) => {\n debugger;\n const toUpdateRecord = { ...inventoryItem };\n\n delete toUpdateRecord.aisle;\n delete toUpdateRecord.area;\n delete toUpdateRecord.createdAt;\n delete toUpdateRecord.inventory;\n delete toUpdateRecord.location;\n delete toUpdateRecord.seals;\n delete toUpdateRecord.updatedAt;\n delete toUpdateRecord.zone;\n\n return API.graphql(\n graphqlOperation(updateInventoryItemMini, { input: toUpdateRecord })\n );\n};\n\nconst saveInbound = async (toUpdateShipment) => {\n toUpdateShipment = { ...toUpdateShipment };\n delete toUpdateShipment.account;\n delete toUpdateShipment.area;\n delete toUpdateShipment.createdAt;\n delete toUpdateShipment.inventories;\n delete toUpdateShipment.invoice;\n delete toUpdateShipment.location;\n delete toUpdateShipment.reloadYardCommodity;\n delete toUpdateShipment.seals;\n delete toUpdateShipment.timeslot;\n delete toUpdateShipment.updatedAt;\n delete toUpdateShipment.zone;\n return API.graphql(\n graphqlOperation(updateInboundShipmentMini, { input: toUpdateShipment })\n );\n};\n\nexport const resetTrackLayout = async (data, updteinbound, updateOutbound) => {\n debugger;\n let searchInput = {\n filter: {\n previousCar: { eq: data.id },\n },\n limit: 1,\n };\n\n const inboundPromise = API.graphql(\n graphqlOperation(searchInboundShipments, searchInput)\n );\n const outboundPromise = API.graphql(\n graphqlOperation(searchOutboundShipments, searchInput)\n );\n const [inboundResponse, outboundResponse] = await Promise.all([\n inboundPromise,\n outboundPromise,\n ]);\n const inbounds = inboundResponse.data.searchInboundShipments.items;\n const outbounds = outboundResponse.data.searchOutboundShipments.items;\n\n if (inbounds.length > 0) {\n inbounds[0].previousCar = data.previousCar;\n await updteinbound(inbounds[0]);\n } else if (outbounds.length > 0) {\n outbounds[0].previousCar = data.previousCar;\n await updateOutbound(outbounds[0]);\n }\n\n // clear current shipment track info\n data.trackId = null;\n data.previousCar = null;\n};\n\nexport const createAggregateInventory = async (location, account) => {\n const createDateTime = new Date();\n const historyNote = {\n type: NoteType.INVENTORY,\n date: createDateTime,\n by: window.appUser?.fullName,\n text: `Aggregate created`,\n };\n\n // Create two promises for inventories and products\n const inventoryPromise = API.graphql(\n graphqlOperation(inventoryByAreaByProductByStatus, {\n areaId: location.areaId,\n productIdStatus: {\n beginsWith: {\n productId: location.productId,\n status: InventoryStatus.STORED,\n },\n },\n limit: 1, // there should be only 1 bulk inventory per product with multiple inventoryItems\n })\n );\n const productPromise = API.graphql(\n graphqlOperation(getLocationProduct, { id: location.productId })\n );\n\n // Use Promise.all to wait for both promises to resolve\n const [inventoryResponse, productResponse] = await Promise.all([\n inventoryPromise,\n productPromise,\n ]);\n\n const existingInventory =\n inventoryResponse.data.inventoryByAreaByProductByStatus.items[0];\n const product = productResponse.data.getProduct;\n\n if (existingInventory) {\n // if inventory already exists, add a new invtentoryItem and return\n // else create aggregate inventory and related records\n debugger;\n const promiseList = [];\n\n promiseList.push(\n createAggregateInventoryItem(\n location,\n existingInventory.inboundShipmentId,\n existingInventory.id,\n existingInventory.accountId,\n historyNote\n )\n );\n\n // update aisleList\n if (!existingInventory.aisleList.includes(location.aisleId)) {\n existingInventory.aisleList.push(location.aisleId);\n }\n promiseList.push(saveInventory(existingInventory));\n\n return Promise.all(promiseList);\n }\n\n const getWeightUnits = () => {\n if (product.defaultWeightUnits) return product.defaultWeightUnits;\n if (account.defaultWeightUnits) return account.defaultWeightUnits;\n return undefined;\n };\n\n const getWeight = () => {\n const weightUnits = getWeightUnits();\n if (weightUnits) {\n const weight = product[weightUnits.toLowerCase()];\n return weight;\n }\n return undefined;\n };\n\n const inboundCreateInput = {\n active: \"true\",\n groups: location.groups,\n status: InboundStatus.AGGREGATED,\n state: InboundState.COMPLETED,\n accountName: account.businessName,\n accountId: account.id,\n shipFrom: account.businessName,\n poNumber: \"\",\n lotType: LotType.PERPETUAL,\n lotNumber: \"\",\n reloadYardCommodityId: location.zone.reloadYardCommodityId,\n carrierType: CarrierType.TRUCK,\n originCarrier: \"\",\n railCarNumber: \"\",\n scheduledDateTime: null,\n createDateTime: createDateTime,\n notifyDateTime: createDateTime,\n placedDateTime: createDateTime,\n releaseDateTime: createDateTime,\n totalQuantity: 0,\n totalUnits: location.bulkUnits,\n weightUnits: getWeightUnits(),\n reloadYardId: location.reloadYardId,\n areaId: location.areaId,\n zoneId: location.zoneId,\n history: [historyNote],\n };\n\n let result = await API.graphql(\n graphqlOperation(createInboundShipmentId, { input: inboundCreateInput })\n );\n const inbound = result.data.createInboundShipment;\n\n const inventoryCreateInput = {\n active: \"true\",\n groups: location.groups,\n status: InventoryStatus.STORED,\n inboundShipmentId: inbound.id,\n poNumber: \"\",\n lotNumber: \"\",\n lotType: LotType.PERPETUAL,\n accountId: account.id,\n accountName: account.businessName,\n productName: location.productName,\n productId: location.productId,\n productCode: product?.productCode,\n areaId: location.areaId,\n zoneId: location.zoneId,\n aisleList: [location.aisleId],\n quantityShipped: 0,\n quantityDelivered: 0,\n quantityOnHand: 0,\n quantityPhysical: 0,\n quantityCommitted: 0,\n deliveryDateTime: createDateTime,\n inventoryUnits: location.bulkUnits,\n weightUnits: getWeightUnits(),\n weight: getWeight(),\n reloadYardCommodityId: product?.reloadYardCommodityId,\n reloadYardId: location.reloadYardId,\n history: [historyNote],\n sortKey: SORTKEY_BUFFER,\n };\n\n result = await API.graphql(\n graphqlOperation(createInventorieId, { input: inventoryCreateInput })\n );\n const inventory = result.data.createInventorie;\n\n const inventoryItem = await createAggregateInventoryItem(\n location,\n inbound.id,\n inventory.id,\n account.id,\n historyNote\n );\n return { inbound, inventory, inventoryItem };\n};\n\nconst createAggregateInventoryItem = async (\n location,\n inboundShipmentId,\n inventoryId,\n accountId,\n historyNote\n) => {\n const inventoryItemInput = {\n groups: location.groups,\n status: InventoryStatus.STORED,\n quantityOnHand: 0,\n quantityCommitted: 0,\n inventoryId,\n inboundShipmentId,\n reloadYardId: location.reloadYardId,\n accountId,\n areaId: location.areaId,\n zoneId: location.zoneId,\n aisleId: location.aisleId,\n locationId: location.id,\n locationFullName: getLocationFullName(location),\n history: [historyNote],\n };\n\n const result = await API.graphql(\n graphqlOperation(createInventoryItemId, { input: inventoryItemInput })\n );\n return {\n ...inventoryItemInput,\n id: result.data.createInventoryItem.id,\n };\n};\n\nexport const deAggregateInventory = async (location) => {\n debugger;\n const response = await API.graphql(\n graphqlOperation(inventoryByAreaByProductByStatusMax, {\n areaId: location.areaId,\n productIdStatus: {\n beginsWith: {\n productId: location.productId,\n status: InventoryStatus.STORED,\n },\n },\n limit: 1,\n })\n );\n\n const existingInventory =\n response.data.inventoryByAreaByProductByStatus.items[0];\n if (existingInventory) {\n const promiseList = [];\n const { inboundShipment, inventoryItems } = existingInventory;\n inventoryItems.items = inventoryItems.items.filter(\n (item) => item.status !== InventoryStatus.ARCHIVED\n );\n\n if (inventoryItems.items.length === 1) {\n // de-aggregate last location\n // also de-aggregate inventory & inbound\n const locationInventoryItem = inventoryItems.items.find(\n (itm) => itm.locationId === location.id\n );\n if (locationInventoryItem) {\n locationInventoryItem.status = InventoryStatus.ARCHIVED;\n promiseList.push(saveInventoryItem(locationInventoryItem));\n }\n existingInventory.status = InventoryStatus.ARCHIVED;\n promiseList.push(saveInventory(existingInventory));\n\n inboundShipment.status = InboundStatus.ARCHIVED;\n promiseList.push(saveInbound(inboundShipment));\n } else {\n // de-aggregate only one location\n const locationInventoryItem = inventoryItems.items.find(\n (itm) => itm.locationId === location.id\n );\n if (locationInventoryItem) {\n // de-aggregate incentoryItem\n locationInventoryItem.status = InventoryStatus.ARCHIVED;\n promiseList.push(saveInventoryItem(locationInventoryItem));\n\n // update aisleList\n existingInventory.aisleList = existingInventory.aisleList.filter(\n (aisleId) => aisleId !== location.aisleId\n );\n promiseList.push(saveInventory(existingInventory));\n }\n }\n return Promise.all(promiseList);\n } else {\n return Promise.resolve();\n }\n};\n","import * as React from \"react\";\nimport get from \"lodash/get\";\n\nimport { useRecordContext } from \"ra-core\";\nimport { sanitizeFieldRestProps } from \"ra-ui-materialui\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { Typography } from \"@material-ui/core\";\nimport classnames from \"classnames\";\n\nimport { getPhotoUrl } from \"../../utils/fileUtils\";\n\nconst useStyles = makeStyles(\n {\n list: {\n display: \"flex\",\n listStyleType: \"none\",\n },\n image: (props) => ({\n margin: \"0.5rem\",\n maxWidth: props.scaleThumb ? `${props.thumbWidth}px` : \"none\",\n maxHeight: props.scaleThumb ? `${props.thumbHeight}px` : \"none\",\n width: props.scaleThumb ? \"auto\" : \"initial\",\n height: props.scaleThumb ? \"auto\" : \"initial\",\n }),\n },\n { name: \"RaImageField\" }\n);\n\nexport const ImageField = ({\n thumbWidth = 512,\n thumbHeight = 512,\n scaleThumb = false,\n fullSize = 1024,\n ...props\n}) => {\n const {\n className,\n classes: classesOverride,\n emptyText,\n source,\n src,\n title,\n ...rest\n } = props;\n const record = useRecordContext(props);\n const classes = useStyles({ thumbWidth, thumbHeight, scaleThumb });\n let imgSrc = get(record, source);\n let fullSizeSrc = null;\n\n const getKeySource = (record) => {\n const keyValue = get(record, \"key\");\n if (!keyValue) {\n return emptyText ? (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(rest)}\n >\n {emptyText}\n </Typography>\n ) : (\n <div className={className} {...sanitizeFieldRestProps(rest)} />\n );\n } else {\n imgSrc = getPhotoUrl(keyValue, thumbWidth);\n fullSizeSrc = getPhotoUrl(keyValue, fullSize);\n }\n };\n\n if (!imgSrc) {\n getKeySource(record);\n } else if (typeof imgSrc === \"object\") {\n getKeySource(imgSrc);\n } else {\n fullSizeSrc = imgSrc;\n }\n\n if (Array.isArray(imgSrc)) {\n return (\n <ul\n className={classnames(classes.list, className)}\n {...sanitizeFieldRestProps(rest)}\n >\n {imgSrc.map((file, index) => {\n const fileTitleValue = get(file, title) || title;\n let srcValue = get(file, src) || title;\n let fullSizeSrc = null;\n\n if (!srcValue) {\n const keyValue = get(file, \"key\");\n if (keyValue) {\n srcValue = getPhotoUrl(keyValue, thumbWidth);\n fullSizeSrc = getPhotoUrl(keyValue, fullSize);\n }\n } else {\n fullSizeSrc = srcValue;\n }\n\n return (\n <li key={index}>\n <img\n title={fileTitleValue}\n alt={fileTitleValue}\n src={srcValue}\n lowsrc={fullSizeSrc}\n className={classes.image}\n />\n </li>\n );\n })}\n </ul>\n );\n }\n\n const titleValue = get(record, title) || title;\n\n return (\n <div className={className} {...sanitizeFieldRestProps(rest)}>\n <img\n title={titleValue}\n alt={titleValue}\n src={imgSrc}\n lowsrc={fullSizeSrc}\n className={classes.image}\n />\n </div>\n );\n};\n","import {\n LocationLoadType,\n UnitConversion,\n UnitMap,\n UnitToColumn,\n Unit,\n UnitWeightOptions,\n UnitOptions,\n InventoryFieldOptions,\n InventoryField,\n} from \"./constants\";\nimport { isBulkArea } from \"./locationUtils\";\nimport { trimDecimal } from \"./utils\";\n\nconst getCommodity = (commodity) => {\n if (!commodity) return null;\n if (typeof commodity === \"object\") {\n // expecting commodity or reloadYardCommodity\n return commodity.commodity || commodity;\n } else if (typeof commodity === \"string\") {\n // expecting reloadYardCommodityId\n const commodityObj = getYardCommodity(commodity)?.commodity;\n return commodityObj;\n }\n};\n\nexport const getYardCommodity = (yardCommodityId) => {\n if (!yardCommodityId) return null;\n const yardCommodity =\n window.appUser?.reloadYard?.yardCommodityMap[yardCommodityId];\n return yardCommodity;\n};\n\nexport const isLumberCommodity = (commodity) => {\n let loadType = null;\n if (typeof commodity === \"object\") {\n // expecting commodity or reloadYardCommodity\n loadType = commodity?.name || commodity?.commodity?.name;\n } else if (typeof commodity === \"string\") {\n // expecting reloadYardCommodityId\n loadType =\n window.appUser?.reloadYard?.yardCommodityMap[commodity]?.commodity?.name;\n }\n\n return loadType === \"Lumber\";\n};\n\nexport const isPanelsCommodity = (commodity) => {\n let loadType = null;\n if (typeof commodity === \"object\") {\n // expecting commodity or reloadYardCommodity\n loadType = commodity?.name || commodity?.commodity?.name;\n } else if (typeof commodity === \"string\") {\n // expecting reloadYardCommodityId\n loadType =\n window.appUser?.reloadYard?.yardCommodityMap[commodity]?.commodity?.name;\n }\n\n return loadType === \"Panels\";\n};\n\nexport const isBulkCommodity = (commodity) => {\n let loadType = null;\n if (typeof commodity === \"object\") {\n // expecting commodity or reloadYardCommodity\n loadType =\n commodity?.locationLoadType || commodity?.commodity?.locationLoadType;\n } else if (typeof commodity === \"string\") {\n // expecting reloadYardCommodityId\n loadType =\n window.appUser?.reloadYard?.yardCommodityMap[commodity]?.commodity\n ?.locationLoadType;\n }\n\n return (\n loadType === LocationLoadType.DRY_BULK ||\n loadType === LocationLoadType.LIQUID_BULK\n );\n};\n\nexport const isBulkShipment = (commodity, area) => {\n return isBulkCommodity(commodity) || isBulkArea(area);\n};\n\nexport const isShippingContainer = (commodity) => {\n let loadType = null;\n\n if (typeof commodity === \"object\") {\n // expecting commodity\n loadType = commodity?.locationLoadType;\n } else if (typeof commodity === \"string\") {\n // expecting reloadYardCommodityId\n loadType =\n window.appUser?.reloadYard?.yardCommodityMap[commodity]?.commodity\n ?.locationLoadType;\n }\n\n return loadType === LocationLoadType.CONTAINER;\n};\n\nexport const isWeightUnits = (uom) => {\n return UnitWeightOptions.some((option) => option.id === uom);\n};\n\nexport const convertUnits = (fromQty, fromUnits, toUnits, product) => {\n let fromRate = null;\n let toRate = null;\n\n if (fromUnits !== toUnits) {\n if (product) {\n // product-based conversion\n fromRate = product[UnitToColumn[fromUnits || product.defaultUnits]];\n toRate = product[UnitToColumn[toUnits]];\n }\n if (!fromRate || !toRate) {\n // metric & emperial conversion\n const converstion = UnitConversion[fromUnits];\n fromRate = converstion?.[fromUnits];\n toRate = converstion?.[toUnits];\n }\n\n if (\n fromRate !== null &&\n !isNaN(fromRate) &&\n toRate !== null &&\n !isNaN(toRate)\n ) {\n if (Number(fromQty) !== 0) {\n const base = fromRate / fromQty;\n if (base) return { error: false, value: trimDecimal(toRate / base) };\n } else return { error: false, value: 0 };\n } else return { error: true, value: null };\n } else return { error: false, value: fromQty };\n};\n\nexport const getUnitLabel = (units) => {\n if (units) return `${UnitMap[units].name}: ${UnitMap[units].description}`;\n else return \"\";\n};\n\nexport const getUnitName = (units) => {\n if (units) {\n const unitName = UnitMap[units]?.name;\n if (unitName) return unitName;\n }\n return \"\";\n};\n\nexport const getUnit = (column) => {\n return Object.keys(UnitToColumn).find((key) => UnitToColumn[key] === column);\n};\n\nexport const getCommodityUnits = (commodity) => {\n // accpets a commodity object, or reloadYardCommodityId if commodity not available\n const commodityObject = getCommodity(commodity);\n // Check if validUom exists and is not an empty array, else return all UnitOptions\n if (!commodityObject?.validUom || commodityObject?.validUom.length === 0) {\n return [];\n }\n\n // Filter UnitOptions to only include units that are present in commodity.validUom\n return UnitOptions.filter((unitOption) =>\n commodityObject.validUom.includes(unitOption.id)\n );\n};\n\nexport const getInventoryFields = (commodity) => {\n // accpets a commodity object, or reloadYardCommodityId if commodity not available\n const commodityObject = getCommodity(commodity);\n // Check if validUom exists and is not an empty array, else return all UnitOptions\n if (\n !commodityObject?.inventoryFields ||\n commodityObject?.inventoryFields.length === 0\n ) {\n return [];\n }\n\n // Filter UnitOptions to only include units that are present in commodity.validUom\n return InventoryFieldOptions.filter((field) =>\n commodityObject.inventoryFields.includes(field.id)\n );\n};\n\nexport const isInventoryFieldVisible = (field, commodity) => {\n if (!field || !commodity) return false;\n\n const inventoryFields = getInventoryFields(commodity);\n return inventoryFields.some((item) => item.id === field);\n};\n\nexport const isPieceDimensionsVisible = (commodity) => {\n if (!commodity) return false;\n\n const inventoryFields = getInventoryFields(commodity);\n return inventoryFields.some(\n (item) =>\n item.id === InventoryField.HEIGHT ||\n item.id === InventoryField.WIDTH ||\n item.id === InventoryField.LENGTH\n );\n};\n\nexport const isQuantityInUnits = (currentInventory) => {\n return currentInventory?.inventoryUnits === Unit.UNIT;\n};\n\nexport const unitOptionRenderer = (record) =>\n `${record.name} - ${record.description}`;\n\nexport const calculateMbf = (inventory) => {\n if (!inventory) return null;\n const height = inventory.pcsHeight || inventory.product?.pcsHeight;\n const width = inventory.pcsWidth || inventory.product?.pcsWidth;\n const length = inventory.pcsLength || inventory.product?.pcsLength;\n const pcs = inventory.pcs || inventory.product?.pcs;\n\n // Check if any of the variables are null or undefined\n if (height == null || width == null || length == null || pcs == null) {\n return null;\n }\n\n const mbf = trimDecimal((height * width * length * pcs) / 12 / 1000, 3);\n return mbf;\n};\n\nexport const calculateSqf = (inventory) => {\n if (!inventory) return null;\n const height = inventory.pcsHeight || inventory.product?.pcsHeight;\n const width = inventory.pcsWidth || inventory.product?.pcsWidth;\n const pcs = inventory.pcs || inventory.product?.pcs;\n\n // Check if any of the variables are null or undefined\n if (height == null || width == null || pcs == null) {\n return null;\n }\n\n const sqf = trimDecimal((height * width * pcs) / 144, 3);\n return sqf;\n};\n","import awsconfig from \"../aws-exports\";\nimport { API, Storage } from \"aws-amplify\";\n\nimport { logError } from \"./appUtils\";\nimport {\n MAX_FILES,\n MAX_FILEs_MSG,\n MAX_FILE_SIZE,\n MAX_FILE_SIZE_MSG,\n CLOUD_FRONT_URL,\n FilePaths,\n} from \"./constants\";\n\nconst addModelPhotos = async (photos, model, selectedPhotoIdx, maxSize) => {\n if (!model.photos) model.photos = [];\n let allPhotos = [];\n const newPhotos = photos.map((key) => {\n return {\n bucket: API._options.aws_user_files_s3_bucket,\n region: API._options.aws_user_files_s3_bucket_region,\n key,\n };\n });\n if (model.photos.length >= maxSize) {\n try {\n const key = model.photos[selectedPhotoIdx].key;\n await Storage.remove(key);\n model.photos[selectedPhotoIdx] = newPhotos[0];\n allPhotos = [...model.photos];\n } catch (err) {\n logError(\"admin:utils:utils:addModelPhoto\", err, false);\n }\n } else {\n allPhotos = [...model.photos, ...newPhotos];\n }\n return allPhotos;\n};\n\nexport const handleModelPhotos = async ({\n photos,\n model,\n saveFn,\n maxNumOfPhotos,\n selectedPhotoIdx,\n notify,\n redirect,\n}) => {\n debugger;\n let newPhotos;\n if (photos) {\n newPhotos = await addModelPhotos(\n photos,\n model,\n selectedPhotoIdx,\n maxNumOfPhotos\n );\n } else {\n model.photos.splice(selectedPhotoIdx, 1);\n newPhotos = model.photos;\n }\n const toUpdateShipment = {\n ...model,\n photos: newPhotos,\n };\n try {\n await saveFn(toUpdateShipment);\n } catch (err) {\n logError(\"PlacedShipmentCard:handleShipmentPhotos\", err, notify, redirect);\n }\n};\n\nexport const base64ToBlob = (b64Data, contentType = \"\", sliceSize = 512) => {\n const byteCharacters = atob(b64Data);\n const byteArrays = [];\n\n for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n const slice = byteCharacters.slice(offset, offset + sliceSize);\n\n const byteNumbers = new Array(slice.length);\n for (let i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i);\n }\n\n const byteArray = new Uint8Array(byteNumbers);\n byteArrays.push(byteArray);\n }\n\n const blob = new Blob(byteArrays, { type: contentType });\n return blob;\n};\n\nexport const downloadFile = (file, key) => {\n const fakeLink = document.createElement(\"a\");\n fakeLink.style.display = \"none\";\n document.body.appendChild(fakeLink);\n\n // const buffer = Buffer.from(file.blob, \"base64\")\n // const blob = new Blob([buffer], {type: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"});\n\n const blob = file.Body;\n const filename = getKeyFilename(key);\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n // Manage IE11+ & Edge\n window.navigator.msSaveOrOpenBlob(blob, filename);\n } else {\n fakeLink.setAttribute(\"href\", URL.createObjectURL(blob));\n fakeLink.setAttribute(\"download\", filename);\n fakeLink.click();\n }\n};\n\nexport const getDirFileKey = (file, dir) => {\n if (!file) return;\n if (dir && window.appUser.reloadYardId)\n return `${window.appUser.reloadYardId}/${dir}/${file.name}`;\n if (dir) return `${dir}/${file.name}`;\n return `${window.appUser.reloadYardId}/${file.name}`;\n};\n\nexport const getFileKey = (file, id) => {\n if (!file) return;\n if (id)\n return `${window.appUser.reloadYardId}/${id}_${new Date().getTime()}_${\n file.name\n }`;\n else\n return `${window.appUser.reloadYardId}/${new Date().getTime()}_${\n file.name\n }`;\n};\n\nexport const getKeyFilename = (key) => {\n if (!key) return;\n return key.split(\"/\").pop();\n};\n\nexport const getFilePublicURL = (key) => {\n const serviceApi = API._options.aws_cloud_logic_custom.find(\n (itm) => itm.name === \"transREST\"\n );\n let restEndpoint = serviceApi.endpoint;\n if (!restEndpoint)\n restEndpoint = awsconfig.aws_cloud_logic_custom[0].endpoint;\n\n return restEndpoint + \"/getFiles?key=\" + key;\n};\n\nexport const getPhoto = (key, setPhoto, width = 256) => {\n if (!key || !setPhoto) return;\n if (key === \"PHOTO_LOADING\") return \"\";\n const url = getPhotoUrl(key, width);\n setPhoto(url);\n};\n\nexport const getPhotoUrl = (key, width = 256) => {\n if (!key) return;\n if (width > 1200) width = 1200;\n\n const imageRequest = {\n bucket: API._options.aws_user_files_s3_bucket,\n key: `public/${key}`,\n edits: {\n resize: {\n width: width,\n fit: \"inside\",\n },\n },\n };\n\n const encodedString = Buffer.from(JSON.stringify(imageRequest)).toString(\n \"base64\"\n );\n const url = `${CLOUD_FRONT_URL}/${encodedString}`;\n return url;\n};\n\nexport const handleFileChange = (source, value, form, notify) => {\n let error = null;\n debugger;\n\n if (value && Array.isArray(value) && value.length > 0) {\n const filesState = form.getFieldState(source);\n if (value.length > MAX_FILES) {\n error = MAX_FILEs_MSG;\n let newValue = filesState.value.filter(\n (itm) => itm.size <= MAX_FILE_SIZE || itm.rawFile?.size <= MAX_FILE_SIZE\n );\n newValue = newValue.slice(0, MAX_FILES);\n form.change(source, newValue);\n } else {\n const newValue = filesState.value.filter(\n (itm) =>\n itm.key ||\n itm.size <= MAX_FILE_SIZE ||\n itm.rawFile?.size <= MAX_FILE_SIZE\n );\n if (newValue.length !== value.length) error = MAX_FILE_SIZE_MSG;\n form.change(source, newValue);\n }\n } else if (value && typeof value === \"object\") {\n if (value?.size > MAX_FILE_SIZE) {\n error = MAX_FILE_SIZE_MSG;\n form.change(source, null);\n }\n }\n\n if (error) notify(error, \"warning\");\n};\n\nexport const removeFile = async (record, data, source) => {\n if (record && record[source]) {\n const key = record[source].key;\n if (key) await Storage.remove(key);\n if (data) data[source] = null;\n }\n};\n\nexport const removeFiles = async (record, source) => {\n if (record && record[source]?.length > 0) {\n record[source].forEach(async (element) => {\n if (element.key) await Storage.remove(element.key);\n });\n }\n};\n\nexport const saveRemoveFile = async (record, data, source, dir) => {\n debugger;\n if (!data[source]) await removeFile(record || {}, data, source);\n else if (data[source] && !data[source].key) {\n if (record && record[source]) await removeFile(record, null, source);\n\n debugger;\n const key = getDirFileKey(data[source].rawFile, dir);\n const response = await Storage.put(key, data[source].rawFile, {\n level: \"public\",\n contentType: data[source].rawFile.type,\n });\n\n if (response.key) {\n data[source] = {\n bucket: API._options.aws_user_files_s3_bucket,\n region: API._options.aws_user_files_s3_bucket_region,\n key: response.key,\n };\n } else {\n throw new Error(\n `Storage.put failed: ${\n response.reason?.message || response.reason || response\n }`\n );\n }\n }\n\n if (data[source]) {\n delete data[source].rawFile;\n delete data[source].src;\n delete data[source].title;\n }\n};\n\nexport const saveRemoveFiles = async (record, data, source, dir) => {\n const deleteList = [];\n const uploadList = [];\n const newFiles = [];\n debugger;\n\n if (record && record[source]?.length > 0) {\n record[source].forEach((element) => {\n if (data[source]?.length > 0) {\n if (!data[source].some((itm) => itm.key === element.key))\n deleteList.push(Storage.remove(element.key));\n } else deleteList.push(Storage.remove(element.key));\n });\n await Promise.allSettled(uploadList);\n }\n\n if (data[source]?.length > 0) {\n data[source].forEach((element) => {\n if (element.rawFile) {\n const key = getDirFileKey(element.rawFile, dir);\n uploadList.push(\n Storage.put(key, element.rawFile, {\n level: \"public\",\n contentType: element.rawFile.type,\n })\n );\n } else newFiles.push(element);\n });\n\n const results = await Promise.allSettled(uploadList);\n\n results.forEach((response) => {\n if (response.status === \"fulfilled\" && response.value?.key) {\n const s3Object = {\n bucket: API._options.aws_user_files_s3_bucket,\n region: API._options.aws_user_files_s3_bucket_region,\n key: response.value.key,\n };\n\n newFiles.push(s3Object);\n } else {\n throw new Error(\n `Storage.put failed: ${\n response.reason?.message || response.reason || response\n }`\n );\n }\n });\n\n debugger;\n if (newFiles.length > 0) data[source] = newFiles;\n else delete data[source];\n }\n};\n\nexport const getTemplatePath = (account, source) => {\n if (account && account[source]?.key) {\n return account[source]?.key;\n } else if (window.appUser.reloadYard[source]?.key) {\n return window.appUser.reloadYard[source]?.key;\n } else if (source === \"bolTemplate\") {\n return `${FilePaths.TEMPLATES}/${FilePaths.TEMPLATE_BOL}`;\n } else if (source === \"receiptTemplate\") {\n return `${FilePaths.TEMPLATES}/${FilePaths.TEMPLATE_RECEIPT}`;\n }\n return null;\n};\n\nexport const generateSignatureKey = (reloadYardId) => {\n return `${reloadYardId}/sig_${reloadYardId}_${Date.now()}.png`;\n};\n\nexport const generateFileName = ({ resource, ext, includeDate = false }) => {\n const date = new Date();\n const day = String(date.getDate()).padStart(2, \"0\");\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const year = date.getFullYear();\n const hours = String(date.getHours()).padStart(2, \"0\");\n\n const dateSuffix = includeDate ? `_${day}-${month}-${year}_${hours}` : \"\";\n const fileName = `${resource}_daily${dateSuffix}.${ext}`;\n\n return fileName;\n};\n\nexport const generateAndDownloadDocx = async ({\n templatePath,\n cleanData,\n outputPath,\n}) => {\n const response = await API.post(\"transREST\", \"/createDocx\", {\n body: {\n templateKey: templatePath,\n data: cleanData,\n outputFileKey: outputPath,\n },\n });\n\n if (response.body?.key) {\n const file = await Storage.get(response.body.key, { download: true });\n downloadFile(file, response.body.key);\n }\n};\n\nexport const generateAndDownloadPdf = async ({\n templateKey,\n data,\n outputFileKey,\n downloadName,\n}) => {\n try {\n const response = await API.post(\"transREST\", \"/createPdf\", {\n body: {\n templateKey,\n outputFileKey,\n data,\n },\n });\n\n if (response.body?.key) {\n const file = await Storage.get(response.body.key, { download: true });\n downloadFile(file, downloadName ? downloadName : response.body.key);\n }\n } catch (err) {\n throw err;\n }\n};\n","import React from \"react\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Switch from \"@material-ui/core/Switch\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\n\nexport const AntSwitch = withStyles((theme) => ({\n root: {\n width: 28,\n height: 16,\n padding: 0,\n display: \"flex\",\n },\n switchBase: {\n padding: 2,\n color: theme.palette.grey[500],\n \"&$checked\": {\n transform: \"translateX(12px)\",\n color: theme.palette.common.white,\n \"& + $track\": {\n opacity: 1,\n backgroundColor: theme.palette.primary.main,\n borderColor: theme.palette.primary.main,\n },\n },\n },\n thumb: {\n width: 12,\n height: 12,\n boxShadow: \"none\",\n },\n track: {\n border: `1px solid ${theme.palette.grey[500]}`,\n borderRadius: 16 / 2,\n opacity: 1,\n backgroundColor: theme.palette.common.white,\n },\n checked: {},\n}))(Switch);\n\nconst SwitchOnOff = ({\n leftLabel,\n rightLabel,\n checked,\n setChecked,\n className,\n ...props\n}) => {\n const handleTurnOn = () => setChecked(true);\n const handleTurnOff = () => setChecked(false);\n\n return (\n <Typography\n component=\"div\"\n style={{ display: \"inline-flex\", alignItems: \"center\" }}\n className={className}\n >\n <Grid container alignItems=\"center\" spacing={1} wrap=\"nowrap\">\n {\" \"}\n {/* wrap=\"nowrap\" to prevent wrapping */}\n <Grid item style={{ minWidth: \"auto\" }} onClick={handleTurnOff}>\n {leftLabel}\n </Grid>\n <Grid item>\n <AntSwitch\n {...props}\n name={`${leftLabel}_${rightLabel}`}\n checked={checked}\n onChange={() => setChecked(!checked)}\n />\n </Grid>\n <Grid item style={{ minWidth: \"auto\" }} onClick={handleTurnOn}>\n {rightLabel}\n </Grid>\n </Grid>\n </Typography>\n );\n};\n\nexport default SwitchOnOff;\n","export const APP_VERSION = \"v1.1.40\";\n\nexport const CLOUD_FRONT_URL = \"https://d3o8cvrswtcumu.cloudfront.net\";\n\nexport const CARLOT_PO_NO_CHARS = 3;\nexport const ERROR_MSG =\n \"An error occured, please contact us at 1-877-TRANSLOAD\";\nexport const HIDE_FEATURE_BADGES = false;\nexport const INVOICE_DUE_DAYS = 1;\nexport const MAX_FILE_SIZE = 10000000; // 10,000,000 bytes decimal = 10,485,760 bytes binary\nexport const MAX_FILE_SIZE_MSG = \"File too large. Max file size is 10 Mb.\";\nexport const MAX_FILES = 10;\nexport const MAX_FILEs_MSG = `Max. ${MAX_FILES} attachments per record.`;\nexport const ACCEPTED_FILES = \"image/*,.pdf,.doc,.docx,.xls,.xlsx,.csv,.txt\";\nexport const MAX_PHOTO_SIZE = 12000000; // 12,000,000 bytes decimal = 12,582,912 bytes binary\nexport const MAX_PHOTO_SIZE_MSG =\n \"Photo too large. Max image size is 12 Mb or 24 MP JPEG\";\nexport const MAX_PHOTO_NUM_INBOUND = 25;\nexport const MAX_PHOTO_NUM_OUTBOUND = 25;\nexport const MAX_PHOTO_NUM_INVENTORY = 12;\nexport const MAX_ROWS_UPLOAD = 500; // catalog upload limit\nexport const VALIDATION_MSG = \"ra.message.invalid_form\"; // \"The form is not valid. Please check for errors.\";\nexport const RA_REQUIRED = \"ra.validation.required\";\nexport const SORTKEY_BUFFER = 10001; // required for key queries where sortKey is in a coumpound key (treated as string)\nexport const MAX_INVENTORY_QUERY_LIMIT = 250; // 1MB internal query limit breaking dataProvider result count. Use when comparing (response.total > runningTotal)\n\nexport const REGEX_MULTI_EMAIL =\n /^\\s*((([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))(\\s*(;|,)\\s*|\\s*$))*$/;\nexport const REGEX_URL =\n /^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)?[a-zA-Z0-9]+([-.]{1}[a-zA-Z0-9]+)*\\.[a-zA-Z]{2,5}(:[0-9]{1,6})?(\\/.*)?$/;\nexport const REGEX_PHONE = /^(\\(?\\+?[0-9]*\\)?)?[0-9_\\- ()]*$/;\n\nexport const AclType = {\n ACCOUNTS: \"ACCOUNTS\",\n ASSIGN_LOCATION: \"ASSIGN_LOCATION\",\n INBOUND_ADVICE: \"INBOUND_ADVICE\",\n INVOICES: \"INVOICES\",\n INVOICES_VIEW: \"INVOICES_VIEW\",\n MY_YARD: \"MY_YARD\",\n OUTBOUND_ADVICE: \"OUTBOUND_ADVICE\",\n OUTBOUND_VERIFY: \"OUTBOUND_VERIFY\",\n OUTBOUND_SIGN: \"OUTBOUND_SIGN\",\n USERS: \"USERS\",\n};\n\nexport const AppType = {\n ADMIN: \"ADMIN\",\n CUSTOMER: \"CUSTOMER\",\n REGISTRATION: \"REGISTRATION\",\n YARD: \"YARD\",\n};\n\nexport const AreaType = {\n YARD: \"YARD\",\n WAREHOUSE: \"WAREHOUSE\",\n TRACK: \"TRACK\",\n BULK: \"BULK\",\n};\n\nexport const AreaTypeOptions = [\n { id: \"YARD\", name: \" Open Air Lot\" },\n { id: \"WAREHOUSE\", name: \"Covered / Warehouse\" },\n { id: \"BULK\", name: \"Bulk Storage\" },\n { id: \"TRACK\", name: \"Rail Track\" },\n];\n\nexport const AuditStatus = {\n NEW: \"NEW\",\n IN_PROGRESS: \"IN_PROGRESS\",\n PENDING_REVIEW: \"PENDING_REVIEW\",\n COMPLETED: \"COMPLETED\",\n};\n\nexport const AuditStatuses = [\n { id: \"NEW\", name: \"New\" },\n { id: \"IN_PROGRESS\", name: \"In Progress\" },\n { id: \"COMPLETED\", name: \"Completed\" },\n { id: \"PENDING_REVIEW\", name: \"Pending Review\" },\n];\n\nexport const CalendarLayout = {\n TODAY_VIEW: \"TODAY_VIEW\",\n WEEK_VIEW: \"WEEK_VIEW\",\n};\n\nexport const CarrierType = {\n RAIL: \"RAIL\",\n TRUCK: \"TRUCK\",\n};\n\nexport const CarrierTypes = [\n { id: CarrierType.RAIL, name: \"Rail\" },\n { id: CarrierType.TRUCK, name: \"Truck\" },\n];\n\nexport const colorsDark = [\n \"#F44336\",\n \"#E91E63\",\n \"#9C27B0\",\n \"#673AB7\",\n \"#3F51B5\",\n \"#2196F3\",\n \"#03A9F4\",\n \"#00BCD4\",\n \"#009688\",\n \"#4CAF50\",\n \"#8BC34A\",\n \"#CDDC39\",\n \"#FFC107\",\n \"#FF9800\",\n \"#FF5722\",\n \"#795548\",\n \"#607D8B\",\n \"#969696\",\n];\n\nexport const colorsLight = [\n \"#FFCDD2\",\n \"#F8BBD0\",\n \"#E1BEE7\",\n \"#D1C4E9\",\n \"#C5CAE9\",\n \"#BBDEFB\",\n \"#B3E5FC\",\n \"#B2EBF2\",\n \"#B2DFDB\",\n \"#C8E6C9\",\n \"#DCEDC8\",\n \"#F0F4C3\",\n \"#FFF9C4\",\n \"#FFECB3\",\n \"#FFE0B2\",\n \"#FFCCBC\",\n \"#D7CCC8\",\n \"#CFD8DC\",\n];\n\nexport const CountryList = [\n { id: \"USA\", name: \"USA\" },\n { id: \"CA\", name: \"Canada\" },\n { id: \"MX\", name: \"Mexico\" },\n];\n\nexport const CustomFieldsDisplay = {\n MOBILE: \"MOBILE\",\n POD: \"POD\",\n POS: \"POS\",\n TALLYSHEET: \"TALLYSHEET\",\n};\n\nexport const CustomFieldsDisplayOptions = [\n { id: CustomFieldsDisplay.MOBILE, name: \"Mobile\" },\n { id: CustomFieldsDisplay.TALLYSHEET, name: \"Tally Sheet\" },\n { id: CustomFieldsDisplay.POD, name: \"POD\" },\n { id: CustomFieldsDisplay.POS, name: \"POS\" },\n];\n\nexport const FileVisibilityOptions = [\n { id: 101, name: \"All\" },\n { id: 201, name: \"Manager\" },\n];\n\nexport const FilePaths = {\n ACCOUNT: \"account\",\n DOCUMENTS: \"documents\",\n INBOUND: \"inbound\",\n INVENTORY: \"inventory\",\n OUTBOUND: \"outbound\",\n INVOICE: \"invoice\",\n RELOADYARD: \"reloadYard\",\n TASKS: \"task\",\n TEMPLATES: \"docxTemplates\", // system-wide templates, specified below\n TEMPLATES_PDF: \"pdfTemplates\", // system-wide templates, specified below\n TEMPLATE_BOL: \"Bill_Of_Lading_Template.docx\",\n TEMPLATE_RECEIPT: \"Inbound_Receipt_Template.docx\",\n TEMPLATE_INBOUND: \"inbound_daily_template.ejs\",\n TEMPLATE_OUTBOUND: \"outbound_daily_template.ejs\",\n TEMPLATE_INVENTORY: \"inventory_daily_template.ejs\",\n TEMPLATE_REPORT: \"reports.ejs\",\n TRANSLOADS_LOGO: \"powered_by_transloads_logo.png\",\n};\n\nexport const InboundState = {\n NEW: \"NEW\",\n PROCESS_SHIPMENT: \"PROCESS_SHIPMENT\",\n APPROVE_SHIPMENT: \"APPROVE_SHIPMENT\",\n PROCESS_INVENTORY: \"PROCESS_INVENTORY\",\n APPROVE_INVENTORY: \"APPROVE_INVENTORY\",\n PROCESS_INVENTORY_REVIEW: \"PROCESS_INVENTORY_REVIEW\",\n APPROVE_INVENTORY_REVIEW: \"APPROVE_INVENTORY_REVIEW\",\n COMPLETED: \"COMPLETED\",\n REJECTED: \"REJECTED\",\n};\n\nexport const InboundSteps = [\n \"Accept Shipment\",\n \"Process Inventory\",\n \"Review Inventory\",\n];\nexport const InboundTrackSteps = [\"Place Railcar\", ...InboundSteps];\nexport const InboundStepsChoices = [\n // { id: 'Place Railcar', name: 'Place Railcar' },\n { id: \"Accept Shipment\", name: \"Accept Shipment\" },\n { id: \"Process Inventory\", name: \"Process Inventory\" },\n { id: \"Review Inventory\", name: \"Review Inventory\" },\n];\n\nexport const processNames = [\n { id: \"Inbound Shipment\", name: \"Inbound Shipment\" },\n // { id: 'Outbound Shipment', name: 'Outbound Shipment' },\n];\n\nexport const InboundStates = [\n { id: InboundState.NEW, name: \"\" },\n { id: InboundState.PROCESS_SHIPMENT, name: \"Inspect Shipment\" },\n { id: InboundState.APPROVE_SHIPMENT, name: \"Approve Shipment\" },\n { id: InboundState.PROCESS_INVENTORY, name: \"Accepted\" },\n { id: InboundState.APPROVE_INVENTORY, name: \"Approve Inventory\" },\n { id: InboundState.PROCESS_INVENTORY_REVIEW, name: \"Review Inventory\" },\n { id: InboundState.COMPLETED, name: \"Completed\" },\n { id: InboundState.REJECTED, name: \"Rejected\" },\n];\n\nexport const InboundStatus = {\n NEW: \"NEW\",\n ADVICE_ALL: \"ADVICE_\",\n ADVICE_PENDING: \"ADVICE_PENDING\",\n ADVICE_REJECTED: \"ADVICE_REJECTED\",\n IN_TRANSIT: \"IN_TRANSIT\",\n ARRIVED: \"ARRIVED\",\n PLACED: \"PLACED\",\n AGGREGATED: \"AGGREGATED\",\n RELEASED: \"RELEASED\",\n ARCHIVED: \"ARCHIVED\", // Aggregate bulk inbound dissociated from location\n};\n\nexport const InboundStatuses = [\n { id: \"NEW\", name: \"New, Unsaved\" },\n { id: \"IN_TRANSIT\", name: \"In Transit\" },\n { id: \"ARRIVED\", name: \"Arrived\" },\n { id: \"PLACED\", name: \"Placed\" },\n { id: \"RELEASED\", name: \"Released\" },\n];\n\nexport const InventoryStatus = {\n NEW: \"NEW\",\n IN_TRANSIT: \"IN_TRANSIT\",\n ARRIVED: \"ARRIVED\",\n UNLOADED: \"UNLOADED\", // to prevent committing to outbound before inbound RELEASE\n REVIEW: \"REVIEW\",\n STORED: \"STORED\",\n AGGREGATED: \"AGGREGATED\",\n LOADED: \"LOADED\", // NOT IN USE\n SHIPPED: \"SHIPPED\",\n ARCHIVED: \"ARCHIVED\", // Aggregate bulk inventory dissociated from location\n};\n\nexport const InventoryStatuses = [\n { id: \"NEW\", name: \"New, Unsaved\" },\n { id: \"IN_TRANSIT\", name: \"In Transit\" },\n { id: \"ARRIVED\", name: \"Placed\" },\n { id: \"UNLOADED\", name: \"Unloaded\" },\n { id: \"REVIEW\", name: \"In Review\" },\n { id: \"STORED\", name: \"Stored\" },\n { id: \"AGGREGATED\", name: \"Stored Aggregated\" },\n { id: \"SHIPPED\", name: \"Shipped\" },\n];\n\nexport const originDamageList = [\n { id: \"yard\", name: \"Yard\" },\n { id: \"carrier\", name: \"Carrier\" },\n { id: \"other\", name: \"Other\" },\n];\n\nexport const InvoiceStatus = {\n NEW: \"NEW\",\n PENDING: \"PENDING\",\n OVERDUE: \"OVERDUE\",\n PAID: \"PAID\",\n CANCELED: \"CANCELED\",\n};\n\nexport const InvoiceStatuses = [\n { id: \"NEW\", name: \"New\" },\n { id: \"PENDING\", name: \"Pending\" },\n { id: \"OVERDUE\", name: \"Overdue\" },\n { id: \"PAID\", name: \"Settled\" },\n { id: \"CANCELED\", name: \"Canceled\" },\n];\n\nexport const LocationLoadType = {\n BOX: \"box\",\n CONTAINER: \"container\",\n OTHER: \"other\",\n PALLET: \"pallet\",\n SUPERSACK: \"superSack\",\n DRY_BULK: \"dryBulk\",\n LIQUID_BULK: \"liquidBulk\",\n};\n\nexport const LocationLoadTypeOptions = [\n {\n id: LocationLoadType.BOX,\n name: \"Box\",\n },\n {\n id: LocationLoadType.PALLET,\n name: \"Pallet\",\n },\n {\n id: LocationLoadType.SUPERSACK,\n name: \"SuperSack\",\n },\n {\n id: LocationLoadType.CONTAINER,\n name: \"Container\",\n },\n {\n id: LocationLoadType.DRY_BULK,\n name: \"Dry Bulk\",\n },\n {\n id: LocationLoadType.LIQUID_BULK,\n name: \"Liquid Bulk\",\n },\n {\n id: LocationLoadType.OTHER,\n name: \"Other\",\n },\n];\n\nexport const LocationType = {\n UNSTRUCTURED: \"UNSTRUCTURED\",\n STRUCTURED: \"STRUCTURED\",\n BULK: \"BULK\",\n BULK_MOBILE: \"BULK_MOBILE\",\n};\n\nexport const LocationTypeOptions = [\n { id: LocationType.UNSTRUCTURED, name: \"Unstructured\" },\n { id: LocationType.STRUCTURED, name: \"Structured\" },\n];\n\nexport const LogStatus = {\n NEW: \"NEW\",\n CLEARED: \"CLEARED\",\n};\n\nexport const LogStatuses = [\n { id: \"NEW\", name: \"NEW\" },\n { id: \"CLEARED\", name: \"CLEARED\" },\n];\n\nexport const LotType = {\n CARLOT: \"CARLOT\",\n PERPETUAL: \"PERPETUAL\",\n};\n\nexport const LotTypes = [\n { id: \"CARLOT\", name: \"Car Lot\" },\n { id: \"PERPETUAL\", name: \"Perpetual (FIFO)\" },\n];\n\nexport const LotTypeNames = {\n CARLOT: \"Car Lot\",\n PERPETUAL: \"Perpetual (FIFO)\",\n};\n\nexport const NewCustomerStatus = {\n NEW: 10,\n PENDING_APPROVAL: 20,\n APPROVED: 30,\n REJECTED: 40,\n};\n\nexport const NewCustomerStatusOptions = [\n { id: 10, name: \"New\" },\n { id: 20, name: \"Pending Approval\" },\n { id: 30, name: \"Resolved Approved\" },\n { id: 40, name: \"Resolved Rejected\" },\n];\n\nexport const NoteType = {\n GENERIC: \"GENERIC\",\n SHIPMENT: \"SHIPMENT\",\n INVENTORY: \"INVENTORY\",\n AUDIT: \"AUDIT\",\n};\n\nexport const OutboundAdviceInputOptions = [\n { id: \"scheduledDateTime\", name: \"Schedule Appointment *\" },\n { id: \"poNumber\", name: \"PO Number *\" },\n { id: \"pickupNumber\", name: \"Pickup Number *\" },\n { id: \"carrierType\", name: \"Carrier Type *\" },\n { id: \"carrier\", name: \"Carrier Name *\" },\n { id: \"railCarNumber\", name: \"Car / Trl Number &\" },\n { id: \"mustTarp\", name: \"Must Tarp *\" },\n { id: \"shipTo\", name: \"Destination Address *\" },\n { id: \"outboundCustomFields\", name: \"Custom Fields\" },\n { id: \"attachments\", name: \"Attach Files\" },\n { id: \"bolFile\", name: \"Attach BOL\" },\n // { id: \"shipmentLineItems\", name: 'Picklist' },\n];\n\nexport const OutboundStatus = {\n NEW: \"NEW\",\n ADVICE_ALL: \"ADVICE_\",\n ADVICE_PENDING: \"ADVICE_PENDING\",\n ADVICE_REJECTED: \"ADVICE_REJECTED\",\n PENDING: \"PENDING\",\n ARRIVED: \"ARRIVED\",\n PLACED: \"PLACED\", // using ARRIVED\n LOADED: \"LOADED\",\n RELEASED: \"RELEASED\",\n};\n\nexport const OutboundState = {\n COMPLETED: \"COMPLETED\",\n REJECTED: \"REJECTED\",\n};\n\nexport const OutboundStatusLabels = {\n NEW: \"New, Unsaved\",\n PENDING: \"Pending\",\n ARRIVED: \"Arrived\",\n PLACED: \"Placed\",\n LOADED: \"Loaded\",\n RELEASED: \"Shipped, Released\",\n};\n\nexport const PaymentTermsType = {\n COD: 1,\n NET_7: 7,\n NET_10: 10,\n NET_14: 14,\n NET_30: 30,\n NET_60: 60,\n};\n\nexport const PaymentTerms = [\n { id: \"COD\", name: \"Due on receipt\" },\n { id: \"NET_7\", name: \"Net 7\" },\n { id: \"NET_10\", name: \"Net 10\" },\n { id: \"NET_14\", name: \"Net 14\" },\n { id: \"NET_30\", name: \"Net 30\" },\n { id: \"NET_60\", name: \"Net 60\" },\n];\n\nexport const PortalType = {\n CREW: \"CREW\",\n MANAGER: \"MANAGER\",\n};\n\nexport const Priorities = [\n { id: 0, name: \"Low\" },\n { id: 1, name: \"Medium\" },\n { id: 2, name: \"High\" },\n { id: 3, name: \"Critical\" },\n];\n\nexport const ReloadYardStatus = {\n IN_NETWORK: \"IN_NETWORK\",\n OUT_OF_NETWORK: \"OUT_OF_NETWORK\",\n};\n\nexport const S3ObjectType = {\n SHIPMENT: \"SHIPMENT\",\n INVENTORY: \"INVENTORY\",\n};\n\nexport const ServiceType = {\n OUTSIDE_HANDLING: \"Outside Handling\",\n INSIDE_HANDLING: \"Inside Handling\",\n OUTSIDE_STORAGE: \"Outside Storage\",\n INSIDE_STORAGE: \"Inside Storage\",\n ACCESSORIAL_CHARGES: \"Accessorial Charges\",\n};\n\nexport const ServiceStatus = {\n NEW: \"NEW\",\n AVAILABLE: \"AVAILABLE\",\n UN_AVAILABLE: \"UN_AVAILABLE\",\n};\n\nexport const ServiceStatuses = [\n { id: \"AVAILABLE\", name: \"Available\" },\n { id: \"UN_AVAILABLE\", name: \"Suspended\" },\n];\n\nexport const ShipmentLineItemStatus = {\n NEW: \"NEW\",\n PENDING: \"PENDING\",\n LOADED: \"LOADED\",\n REJECTED: \"REJECTED\",\n VERIFIED: \"VERIFIED\",\n SHIPPED: \"SHIPPED\",\n};\n\nexport const ShipmentLineItemStatuses = [\n { id: \"NEW\", name: \"New, Unsaved\" },\n { id: \"PENDING\", name: \"Pending Shipment\" },\n { id: \"LOADED\", name: \"Loaded\" },\n { id: \"REJECTED\", name: \"Loaded, Rejected\" },\n { id: \"VERIFIED\", name: \"Loaded, Verified\" },\n { id: \"SHIPPED\", name: \"Shipped\" },\n];\n\nexport const TaskStatus = [\n { id: 10, name: \"New\" },\n { id: 20, name: \"In Progress\" },\n { id: 30, name: \"Completed\" },\n { id: 40, name: \"Resolved Approved\" },\n { id: 50, name: \"Resolved Rejected\" },\n];\n\nexport const TaskType = {\n GENERIC: \"GENERIC\",\n AUDIT: \"AUDIT\",\n ACCEPT_SHIPMENT: \"ACCEPT_SHIPMENT\",\n PROCESS_OUTBOUND_SHIPMENT: \"PROCESS_OUTBOUND_SHIPMENT\",\n CAPACITY_UTILIZATION: \"CAPACITY_UTILIZATION\",\n};\n\nexport const TaskTypes = [\n {\n id: TaskType.GENERIC,\n name: \"Generic\",\n description: \"Generic Task\",\n duration: \"P1D\",\n },\n // {\n // \tid: TaskType.AUDIT,\n // \tname: \"Inventory Audit\",\n // \tdescription: \"Start a new audit from location %s\",\n // duration: \"P2D\"\n // },\n {\n id: TaskType.ACCEPT_SHIPMENT,\n name: \"Inbound Shipment\",\n description: \"Accept shipment from %s, rail car number %s\",\n duration: \"P1D\",\n },\n {\n id: TaskType.PROCESS_OUTBOUND_SHIPMENT,\n name: \"Outbound Shipment\",\n description: \"Load outbound shipment.\",\n duration: \"P3D\",\n },\n {\n id: TaskType.CAPACITY_UTILIZATION,\n name: \"Capacity Utilization\",\n description: \"Update Capacity Utilization.\",\n duration: \"P1D\",\n },\n];\n\nexport const TransferType = {\n INTERNAL: \"INTERNAL\",\n EXTERNAL: \"EXTERNAL\",\n};\n\nexport const TransferOptions = [\n { id: TransferType.INTERNAL, name: \"Internal\" },\n { id: TransferType.EXTERNAL, name: \"External\" },\n];\n\nexport const TrueOrFalse = [\n { id: true, name: \"Yes\" },\n { id: false, name: \"No\" },\n];\n\n// update CatalogHeaderMap\nexport const Unit = {\n UNIT: \"UNIT\",\n PCS: \"PCS\",\n CAR: \"CAR\",\n TL: \"TL\",\n MBF: \"MBF\",\n LF: \"LF\",\n SF: \"SF\",\n SQM: \"SQM\",\n GAL: \"GAL\",\n L: \"L\",\n LBS: \"LBS\",\n TN: \"TN\",\n CWT: \"CWT\",\n KG: \"KG\",\n MT: \"MT\",\n};\n\n// update CatalogHeaderMap\nexport const UnitToColumn = {\n [Unit.UNIT]: \"unit\",\n [Unit.PCS]: \"pcs\",\n [Unit.CAR]: \"car\",\n [Unit.TL]: \"tl\",\n [Unit.MBF]: \"mbf\",\n [Unit.LF]: \"lf\",\n [Unit.SF]: \"sf\",\n [Unit.SQM]: \"sqm\",\n [Unit.GAL]: \"gal\",\n [Unit.L]: \"l\",\n [Unit.LBS]: \"lbs\",\n [Unit.TN]: \"tn\",\n [Unit.CWT]: \"cwt\",\n [Unit.KG]: \"kg\",\n [Unit.MT]: \"mt\",\n};\n\n// CatalogHeaderMap\nexport const UnitConversionColumns = [\n UnitToColumn.UNIT,\n UnitToColumn.PCS,\n UnitToColumn.MBF,\n UnitToColumn.LF,\n UnitToColumn.SF,\n UnitToColumn.SQM,\n UnitToColumn.GAL,\n UnitToColumn.L,\n UnitToColumn.LBS,\n UnitToColumn.TN,\n UnitToColumn.CWT,\n UnitToColumn.KG,\n UnitToColumn.MT,\n];\n\nexport const UnitMap = {\n UNIT: { name: \"UNIT(s)\", description: \"Unit / Bundle\" },\n PCS: { name: \"PCs\", description: \"Piece / Item\" },\n CAR: { name: \"Car\", description: \"Rail Car\" },\n TL: { name: \"TL\", description: \"Truckload\" },\n MBF: { name: \"MBF\", description: \"1K Board Feet\" },\n LF: { name: \"LF\", description: \"Linear Feet\" },\n SF: { name: \"SF\", description: \"Square Feet\" },\n SQM: { name: \"SQM\", description: \"Meters Squared\" },\n GAL: { name: \"GAL\", description: \"Gallons\" },\n L: { name: \"L\", description: \"Liters\" },\n LBS: { name: \"LBS\", description: \"Pounds\" },\n TN: { name: \"TN\", description: \"US Ton = 2000Lbs\" },\n CWT: { name: \"CWT\", description: \"Hundredweight = 100Lbs\" },\n KG: { name: \"KG\", description: \"Kilograms\" },\n MT: { name: \"MT\", description: \"Metric Ton\" },\n};\n\nexport const UnitOptions = [\n {\n id: Unit.UNIT,\n column: UnitToColumn[Unit.UNIT],\n name: UnitMap[Unit.UNIT].name,\n description: UnitMap[Unit.UNIT].description,\n },\n {\n id: Unit.PCS,\n column: UnitToColumn[Unit.PCS],\n name: UnitMap[Unit.PCS].name,\n description: UnitMap[Unit.PCS].description,\n },\n {\n id: Unit.CAR,\n column: UnitToColumn[Unit.CAR],\n name: UnitMap[Unit.CAR].name,\n description: UnitMap[Unit.CAR].description,\n },\n {\n id: Unit.TL,\n column: UnitToColumn[Unit.TL],\n name: UnitMap[Unit.TL].name,\n description: UnitMap[Unit.TL].description,\n },\n {\n id: Unit.MBF,\n column: UnitToColumn[Unit.MBF],\n name: UnitMap[Unit.MBF].name,\n description: UnitMap[Unit.MBF].description,\n },\n {\n id: Unit.LF,\n column: UnitToColumn[Unit.LF],\n name: UnitMap[Unit.LF].name,\n description: UnitMap[Unit.LF].description,\n },\n {\n id: Unit.SF,\n column: UnitToColumn[Unit.SF],\n name: UnitMap[Unit.SF].name,\n description: UnitMap[Unit.SF].description,\n },\n {\n id: Unit.SQM,\n column: UnitToColumn[Unit.SQM],\n name: UnitMap[Unit.SQM].name,\n description: UnitMap[Unit.SQM].description,\n },\n {\n id: Unit.GAL,\n column: UnitToColumn[Unit.GAL],\n name: UnitMap[Unit.GAL].name,\n description: UnitMap[Unit.GAL].description,\n },\n {\n id: Unit.L,\n column: UnitToColumn[Unit.L],\n name: UnitMap[Unit.L].name,\n description: UnitMap[Unit.L].description,\n },\n {\n id: Unit.LBS,\n column: UnitToColumn[Unit.LBS],\n name: UnitMap[Unit.LBS].name,\n description: UnitMap[Unit.LBS].description,\n },\n {\n id: Unit.TN,\n column: UnitToColumn[Unit.TN],\n name: UnitMap[Unit.TN].name,\n description: UnitMap[Unit.TN].description,\n },\n {\n id: Unit.CWT,\n column: UnitToColumn[Unit.CWT],\n name: UnitMap[Unit.CWT].name,\n description: UnitMap[Unit.CWT].description,\n },\n {\n id: Unit.KG,\n column: UnitToColumn[Unit.KG],\n name: UnitMap[Unit.KG].name,\n description: UnitMap[Unit.KG].description,\n },\n {\n id: Unit.MT,\n column: UnitToColumn[Unit.MT],\n name: UnitMap[Unit.MT].name,\n description: UnitMap[Unit.MT].description,\n },\n];\n\n// update CatalogHeaderMap\nexport const InventoryField = {\n PCS: \"pcs\",\n HEIGHT: \"pcsHeight\",\n WIDTH: \"pcsWidth\",\n LENGTH: \"pcsLength\",\n};\n\nexport const InventoryFieldOptions = [\n { id: InventoryField.PCS, name: \"PCS\", description: \"Pieces / Unit\" },\n { id: InventoryField.HEIGHT, name: \"Piece Height\" },\n { id: InventoryField.WIDTH, name: \"Piece Width\" },\n { id: InventoryField.LENGTH, name: \"Piece Length\" },\n];\n\nexport const UnitWeightOptions = [\n {\n id: Unit.LBS,\n name: UnitMap[Unit.LBS].name,\n description: UnitMap[Unit.LBS].description,\n },\n {\n id: Unit.TN,\n name: UnitMap[Unit.TN].name,\n description: UnitMap[Unit.TN].description,\n },\n {\n id: Unit.CWT,\n name: UnitMap[Unit.CWT].name,\n description: UnitMap[Unit.CWT].description,\n },\n {\n id: Unit.KG,\n name: UnitMap[Unit.KG].name,\n description: UnitMap[Unit.KG].description,\n },\n {\n id: Unit.MT,\n name: UnitMap[Unit.MT].name,\n description: UnitMap[Unit.MT].description,\n },\n];\n\nexport const UnitAreaOptions = [\n {\n id: Unit.SF,\n name: UnitMap[Unit.SF].name,\n description: UnitMap[Unit.SF].description,\n },\n {\n id: Unit.SQM,\n name: UnitMap[Unit.SQM].name,\n description: UnitMap[Unit.SQM].description,\n },\n];\n\nexport const UnitConversion = {\n [Unit.SF]: { SF: 1, SQM: 0.092903 },\n [Unit.SQM]: { SF: 10.7639, SQM: 1 },\n [Unit.GAL]: { GAL: 1, L: 3.78541 },\n [Unit.L]: { GAL: 0.264172, L: 1 },\n [Unit.LBS]: { LBS: 1, KG: 0.453592, MT: 0.000453592, TN: 0.0005, CWT: 0.01 },\n [Unit.TN]: { LBS: 2000, KG: 907.185, MT: 0.907185, TN: 1, CWT: 20 },\n [Unit.CWT]: { LBS: 100, KG: 45.3592, MT: 0.0453592, TN: 0.05, CWT: 1 },\n [Unit.KG]: { LBS: 2.20462, KG: 1, MT: 0.001, TN: 0.00110231, CWT: 0.0220462 },\n [Unit.MT]: { LBS: 2204.62, KG: 1000, MT: 1, TN: 1.10231, CWT: 22.0462 },\n};\n\nexport const CatalogHeaderMap = {\n \"Product Code\": \"productCode\",\n Name: \"name\",\n \"Load Type\": \"reloadYardCommodityId\",\n \"Commodity Category\": \"category\",\n \"Units Of Measure\": \"defaultUnits\",\n \"Default Weight Units\": \"defaultWeightUnits\",\n \"Inbound Billing Units\": \"inboundBillingUnits\",\n \"Outbound Billing Units\": \"outboundBillingUnits\",\n [Unit.UNIT]: UnitToColumn.UNIT,\n [Unit.PCS]: UnitToColumn.PCS,\n [Unit.MBF]: UnitToColumn.MBF,\n [Unit.LF]: UnitToColumn.LF,\n [Unit.SF]: UnitToColumn.SF,\n [Unit.SQM]: UnitToColumn.SQM,\n [Unit.GAL]: UnitToColumn.GAL,\n [Unit.L]: UnitToColumn.L,\n [Unit.LBS]: UnitToColumn.LBS,\n [Unit.TN]: UnitToColumn.TN,\n [Unit.CWT]: UnitToColumn.CWT,\n [Unit.KG]: UnitToColumn.KG,\n [Unit.MT]: UnitToColumn.MT,\n \"Low Inventory Alert\": \"lowInventoryThreshold\",\n \"Piece Height\": \"pcsHeight\",\n \"Piece Width\": \"pcsWidth\",\n \"Piece Length\": \"pcsLength\",\n Height: \"height\",\n Width: \"width\",\n Length: \"length\",\n};\n\nexport const Urgency = {\n LOW: 1,\n HIGH: 2,\n};\n\nexport const UrgencyOptions = [\n { id: Urgency.LOW, name: \"LOW\" },\n { id: Urgency.HIGH, name: \"HIGH\" },\n];\n\nexport const UserStatus = {\n NEW: \"NEW\",\n PENDING_REG: \"PENDING_REG\",\n APPROVED: \"APPROVED\",\n SUSPENDED: \"SUSPENDED\",\n};\n\nexport const UserStatuses = [\n { id: UserStatus.NEW, name: \"New, Unsaved\" },\n { id: UserStatus.PENDING_REG, name: \"Pending Registration\" },\n { id: UserStatus.APPROVED, name: \"Active\" },\n { id: UserStatus.SUSPENDED, name: \"Suspended\" },\n];\n\nexport const UserType = {\n ADMIN: \"ADMIN\",\n CREW: \"CREW\",\n SUPERVISOR: \"SUPERVISOR\",\n MANAGER: \"MANAGER\",\n CUSTOMER: \"CUSTOMER\",\n};\n\nexport const UserTypeOptions = [\n { id: UserType.CREW, name: \"Crew\", description: \"Operator App access only\" },\n {\n id: UserType.SUPERVISOR,\n name: \"Supervisor\",\n description: \"Manager Portal & Operator App access.\",\n },\n {\n id: UserType.MANAGER,\n name: \"Manager\",\n description: \"Full access to Manager Portal, Subscriptions & Operator App.\",\n },\n];\n\nexport const UserFileVisibility = {\n [UserType.CREW]: 101,\n [UserType.SUPERVISOR]: 201,\n [UserType.MANAGER]: 201,\n};\n\nexport const UserAclOptions = [\n {\n id: AclType.ACCOUNTS,\n name: \"Account Management\",\n roles: {\n [UserType.SUPERVISOR]: true,\n },\n },\n {\n id: AclType.INVOICES,\n name: \"Invoicing\",\n roles: {\n [UserType.SUPERVISOR]: true,\n },\n },\n {\n id: AclType.MY_YARD,\n name: \"My Yard Setup\",\n roles: {\n [UserType.SUPERVISOR]: true,\n },\n },\n {\n id: AclType.ASSIGN_LOCATION,\n name: \"Assign Inventory Locations\",\n roles: {\n [UserType.SUPERVISOR]: true,\n [UserType.CREW]: true,\n },\n },\n {\n id: AclType.OUTBOUND_VERIFY,\n name: \"Outbound Verification\",\n roles: {\n [UserType.SUPERVISOR]: true,\n [UserType.CREW]: true,\n },\n },\n {\n id: AclType.OUTBOUND_SIGN,\n name: \"Outbound e-signature\",\n roles: {\n [UserType.SUPERVISOR]: true,\n [UserType.CREW]: true,\n },\n },\n // {\n // id: AclType.INBOUND_ADVICE,\n // name: 'Create Inbound Advice',\n // roles: {\n // [UserType.CUSTOMER]: true,\n // }\n // },\n {\n id: AclType.OUTBOUND_ADVICE,\n name: \"Create Outbound Advice\",\n roles: {\n [UserType.CUSTOMER]: true,\n },\n },\n {\n id: AclType.INVOICES_VIEW,\n name: \"View Invoices\",\n roles: {\n [UserType.CUSTOMER]: true,\n },\n },\n {\n id: AclType.USERS,\n name: \"User Management\",\n roles: {\n [UserType.SUPERVISOR]: true,\n [UserType.CUSTOMER]: true,\n },\n },\n];\n\nexport const WorkflowType = {\n ACCEPT_STORE: \"ACCEPT_STORE\",\n BULK: \"BULK\",\n};\n\nexport const workdays = [\n {\n id: \"0\",\n name: \"Sunday\",\n startDayTime: \"8:00am\",\n endDayTime: \"5:00pm\",\n selected: false,\n },\n {\n id: \"1\",\n name: \"Monday\",\n startDayTime: \"8:00am\",\n endDayTime: \"5:00pm\",\n selected: false,\n },\n {\n id: \"2\",\n name: \"Tuesday\",\n startDayTime: \"8:00am\",\n endDayTime: \"5:00pm\",\n selected: false,\n },\n {\n id: \"3\",\n name: \"Wednesday\",\n startDayTime: \"8:00am\",\n endDayTime: \"5:00pm\",\n selected: false,\n },\n {\n id: \"4\",\n name: \"Thursday\",\n startDayTime: \"8:00am\",\n endDayTime: \"5:00pm\",\n selected: false,\n },\n {\n id: \"5\",\n name: \"Friday\",\n startDayTime: \"8:00am\",\n endDayTime: \"5:00pm\",\n selected: false,\n },\n {\n id: \"6\",\n name: \"Saturday\",\n startDayTime: \"8:00am\",\n endDayTime: \"5:00pm\",\n selected: false,\n },\n];\n\nexport const usHolidays = {\n \"New Year's Day\": \"0,1\",\n \"Martin Luther King, Jr. Day\": \"0,2,1\",\n \"President's Day\": \"1,2,1\",\n \"Memorial Day\": \"4,-1,1\",\n Juneteenth: \"5,19\",\n \"Independence Day\": \"6,4\",\n \"Labor Day\": \"8,0,1\",\n \"Columbus Day\": \"9,1,1\",\n \"Veterans Day\": \"10,1\",\n \"Thanksgiving Day\": \"10,3,4\",\n \"Day after Thanksgiving\": \"10,3,5\",\n Christmas: \"11,25\",\n};\n\nexport const usTimeZoneOptions = [\n { id: \"Eastern Time\", name: \"Eastern Time\" },\n { id: \"Central Time\", name: \"Central Time\" },\n { id: \"Mountain Time\", name: \"Mountain Time\" },\n { id: \"Pacific Time\", name: \"Pacific Time\" },\n];\n\nexport const EventType = {\n RESERVED: \"RESERVED\",\n ACCEPTED: \"ACCEPTED\",\n REJECTED: \"REJECTED\",\n CANCELLED: \"CANCELLED\",\n};\n\nexport const HelpTopicOptions = [\n { id: \"inbound\", name: \"Inbound Shipment\" },\n { id: \"outbound\", name: \"Outbound Shipment\" },\n { id: \"account\", name: \"Account\" },\n { id: \"inventory\", name: \"Inventory\" },\n { id: \"invoice\", name: \"Invoice\" },\n { id: \"myYard\", name: \"My Yard\" },\n { id: \"trackManagement\", name: \"Track Management\" },\n { id: \"adminHelpPages\", name: \"Admin Help Pages\" },\n { id: \"yardUtilization\", name: \"Yard Utilization\" },\n];\n\nexport const HelpLiveOptions = [\n { id: true, name: \"true\" },\n { id: false, name: \"false\" },\n];\n\nexport const SealStatus = {\n NEW: \"new\",\n};\n\nexport const Orientations = {\n LANDSCAPE: \"Landscape\",\n PORTRAIT: \"Portrait\",\n};\n\nexport const SubscriptionStatus = {\n ACTIVE: \"active\",\n CANCELED: \"canceled\",\n TRIALING: \"trialing\",\n};\n\nexport const SubscriptionStatusChoices = [\n { id: SubscriptionStatus.ACTIVE, name: \"Active\" },\n { id: SubscriptionStatus.CANCELED, name: \"Canceled\" },\n { id: SubscriptionStatus.TRIALING, name: \"Trialing\" },\n];\n\nexport const AccountStatus = {\n ACTIVE: \"active\",\n ARCHIVE: \"archive\",\n};\n\nexport const AccountTabStatus = [\n { id: AccountStatus.ACTIVE, name: \"ACTIVE\" },\n { id: AccountStatus.ARCHIVE, name: \"ARCHIVED\" },\n];\n\nexport const barcodeExceptions = {\n MISMATCH: \"BARCODE MISMATCH\",\n INELIGIBLE: \"BARCODE INELIGIBLE\",\n MISSING: \"BARCODE MISSING\",\n};\n\nexport const barcodeExceptionsChoices = [\n {\n id: \"mismatch\",\n name: \"Barcode Mismatch\",\n value: barcodeExceptions.MISMATCH,\n },\n {\n id: \"ineligible\",\n name: \"Barcode Damaged\",\n value: barcodeExceptions.INELIGIBLE,\n },\n { id: \"missing\", name: \"Barcode Missing\", value: barcodeExceptions.MISSING },\n];\n","/* eslint-disable */\n// WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten.\n\nconst awsmobile = {\n \"aws_project_region\": \"us-east-1\",\n \"aws_appsync_graphqlEndpoint\": \"https://c55j6iqsljh5zdpe2at6bhwlue.appsync-api.us-east-1.amazonaws.com/graphql\",\n \"aws_appsync_region\": \"us-east-1\",\n \"aws_appsync_authenticationType\": \"AMAZON_COGNITO_USER_POOLS\",\n \"aws_cloud_logic_custom\": [\n {\n \"name\": \"transREST\",\n \"endpoint\": \"https://ag0tpzozvk.execute-api.us-east-1.amazonaws.com/prod\",\n \"region\": \"us-east-1\"\n },\n {\n \"name\": \"zapierREST\",\n \"endpoint\": \"https://iw6w5wtmd0.execute-api.us-east-1.amazonaws.com/prod\",\n \"region\": \"us-east-1\"\n }\n ],\n \"aws_cognito_identity_pool_id\": \"us-east-1:589ab7b6-68ee-4a02-b449-fe9590ac14a7\",\n \"aws_cognito_region\": \"us-east-1\",\n \"aws_user_pools_id\": \"us-east-1_pNaPHfDAh\",\n \"aws_user_pools_web_client_id\": \"5ca96dt9lhf18ep303kgfs15h\",\n \"oauth\": {},\n \"aws_cognito_username_attributes\": [\n \"EMAIL\"\n ],\n \"aws_cognito_social_providers\": [],\n \"aws_cognito_signup_attributes\": [\n \"EMAIL\"\n ],\n \"aws_cognito_mfa_configuration\": \"OFF\",\n \"aws_cognito_mfa_types\": [\n \"SMS\"\n ],\n \"aws_cognito_password_protection_settings\": {\n \"passwordPolicyMinLength\": 8,\n \"passwordPolicyCharacters\": []\n },\n \"aws_cognito_verification_mechanisms\": [\n \"EMAIL\"\n ],\n \"aws_user_files_s3_bucket\": \"transloads223545-prod\",\n \"aws_user_files_s3_bucket_region\": \"us-east-1\"\n};\n\n\nexport default awsmobile;\n","import React, { useEffect, useState } from \"react\";\n\nimport { keyBy, sortBy } from \"lodash\";\n\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n IconButton,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport {\n Button,\n CheckboxGroupInput,\n FunctionField,\n TextInput,\n} from \"react-admin\";\n\nimport { CustomFieldsDisplay } from \"../../utils/constants\";\nimport { AddAllIcon, CancelIcon, CloseIcon, CustomFieldsIcon } from \".\";\n\nconst useStyles = makeStyles((theme) => ({\n dialogTitle: {\n display: \"flex\",\n paddingTop: \"5px\",\n paddingBottom: \"5px\",\n justifyContent: \"space-between\",\n },\n dialogContent: {\n // https://stackoverflow.com/questions/47698037/how-can-i-set-a-height-to-a-dialog-in-material-ui\n height: \"90vh\",\n },\n hidden: { display: \"none\" },\n}));\n\nconst token = \"||\";\n\nexport const parseCustomField = (field) => {\n if (field && typeof field === \"string\") {\n const values = field.split(token);\n return { name: values[0], value: values[1] };\n }\n return {};\n};\n\nexport const parseCustomFieldToObject = (field) => {\n if (field && typeof field === \"string\") {\n const [key, value] = field.split(token);\n return { [key.trim()]: value };\n }\n return {};\n};\n\nexport const parseCustomFieldId = (field) => {\n const parsedField = parseCustomField(field);\n if (parsedField?.name) return getCustomFieldId(parsedField.name);\n else return \"\";\n};\n\nexport const parseCustomFieldName = (field) => {\n const parsedField = parseCustomField(field);\n if (parsedField?.name) return parsedField.name;\n else return \"\";\n};\n\nexport const parseCustomFieldValue = (field) => {\n const parsedField = parseCustomField(field);\n if (parsedField?.name) return parsedField.value;\n else return \"\";\n};\n\nconst getSourcePath = (source) => {\n const parts = source.split(\".customFields\");\n // Check if there is a prefix before 'customFields'\n if (parts.length > 1) {\n // Return the prefix\n return parts[0];\n }\n // If no prefix, return an empty string or null\n return null;\n};\n\nexport const CustomInput = ({\n field,\n source,\n getSource,\n target,\n disabled,\n variant,\n ...props\n}) => {\n const finalSource = getSource\n ? getSource(`${source}[${field.index}]`)\n : `${source}[${field.index}]`;\n\n if (!field) return null;\n if (target === CustomFieldsDisplay.MOBILE)\n return (\n <Typography variant={variant}>\n {\" \"}\n {field.name}: {field.value}{\" \"}\n </Typography>\n );\n return (\n <TextInput\n source={finalSource}\n label={field.name || \"Custom Field\"}\n variant=\"outlined\"\n fullWidth\n parse={(v) => (v ? `${field.name}${token}${v}` : `${field.name}${token}`)}\n format={(v) => (v ? v.split(token).pop() : \"\")}\n initialValue={`${field.name}${token}`}\n disabled={disabled}\n helperText={false}\n InputLabelProps={{ shrink: true }}\n />\n );\n};\n\nexport const CustomField = ({ field, source, record, ...props }) => {\n debugger;\n const sourcePath = getSourcePath(source);\n const sourceRecord = sourcePath ? record?.[sourcePath] : record;\n if (!field || !sourceRecord?.customFields) return <></>;\n\n const fieldIndex = sourceRecord.customFields.findIndex(\n (itm) => parseCustomFieldId(itm) === field.id\n );\n if (fieldIndex === -1) return <></>;\n\n const finalSource = `${\n sourcePath ? `${sourcePath}.` : \"\"\n }customFields[${fieldIndex}]`;\n const values = parseCustomField(sourceRecord.customFields[fieldIndex]);\n\n return (\n <FunctionField\n source={finalSource}\n label={field.name || \"Custom Field\"}\n fullWidth\n sortable={false}\n render={() => `${values?.value || \"\"}`}\n />\n );\n};\n\nexport const getCustomFieldId = (field) => {\n let fieldName = field;\n if (typeof field === \"object\") {\n fieldName = field.name;\n }\n return fieldName\n ? fieldName\n .toLowerCase()\n .split(\" \")\n .map((s, i) =>\n i === 0 ? s : s.charAt(0).toUpperCase() + s.substring(1)\n )\n .join(\"\")\n : \"\";\n};\n\nexport const getCustomFieldIdCleansed = (field) => {\n let fieldId = getCustomFieldId(field);\n return fieldId.replace(/[^a-zA-Z0-9 _-]/g, \"\");\n};\n\nexport const getCustomFieldById = (recordFields, fieldId) => {\n if (recordFields) {\n const fieldById = recordFields.find((field) => {\n const parsedField = parseCustomField(field);\n const parsedFieldId = getCustomFieldId(parsedField);\n return parsedFieldId === fieldId;\n });\n return parseCustomField(fieldById);\n }\n return null;\n};\n\nexport const getCustomFieldsToSave = (recordFields, accountFields) => {\n const allFields = sortBy(\n mergeFields(recordFields || [], accountFields || []),\n \"index\"\n );\n const toSaveFields = allFields.map((field) =>\n field.value\n ? `${field.name}${token}${field.value}`\n : `${field.name}${token}`\n );\n\n if (toSaveFields?.length > 0) return toSaveFields;\n else return undefined;\n};\n\nconst mergeFields = (recordFields, accountFields, target) => {\n let allFields = [];\n\n if (recordFields?.length > 0) {\n const fieldMap = keyBy(accountFields, \"id\");\n let index = 0;\n recordFields.forEach((field, idx) => {\n const values = parseCustomField(field);\n const fieldId = getCustomFieldId(values.name);\n const newField = {\n id: fieldId,\n name: values.name,\n value: values.value,\n index: idx,\n display: fieldMap[fieldId]?.display ? fieldMap[fieldId].display : null,\n visible: true,\n };\n index = idx;\n allFields.push(newField);\n });\n\n let parsedFieldMap = keyBy(allFields, \"id\");\n accountFields.forEach((field) => {\n if (!parsedFieldMap[field.id])\n allFields.push({ ...field, index: ++index, visible: true });\n });\n } else\n allFields = accountFields.map((field, idx) => {\n return { ...field, index: idx, visible: true };\n });\n\n // hide fields marked not to display in \"target\" && empty fields for target === MOBILE\n if (target) {\n allFields = allFields.map((field) => ({\n ...field,\n visible:\n !field.display ||\n (field.display.includes(target) &&\n !(target === CustomFieldsDisplay.MOBILE && !field.value)),\n }));\n }\n\n return sortBy(allFields, \"name\");\n};\n\nexport const CustomFields = ({\n recordFields,\n accountFields,\n source = \"customFields\",\n getSource,\n target,\n showHeader = true,\n inline = false,\n width,\n disabled,\n ...props\n}) => {\n const classes = useStyles();\n const allFields = mergeFields(\n recordFields || [],\n accountFields || [],\n target\n );\n\n if (!allFields || allFields.length === 0) return null;\n if (inline) {\n return allFields.map((field) => (\n <Grid\n key={field.name}\n item\n xs={12}\n md={width}\n className={field.visible ? \"\" : classes.hidden}\n >\n <CustomInput\n {...props}\n field={field}\n source={source}\n getSource={getSource}\n target={target}\n disabled={disabled}\n />\n </Grid>\n ));\n } else {\n return (\n <Grid container spacing={1}>\n {showHeader && (\n <Grid item xs={12}>\n <Typography variant=\"overline\" color=\"textSecondary\" gutterBottom>\n CUSTOM FIELDS\n </Typography>\n </Grid>\n )}\n {allFields.map((field) => (\n <Grid\n key={field.name}\n item\n xs={12}\n md={width}\n className={field.visible ? \"\" : classes.hidden}\n >\n <CustomInput\n {...props}\n field={field}\n source={source}\n getSource={getSource}\n target={target}\n disabled={disabled}\n />\n </Grid>\n ))}\n </Grid>\n );\n }\n};\n\n// display view only Typography.\nexport const CustomFieldsMobile = ({\n recordFields,\n accountFields,\n width,\n variant = \"body1\",\n ...props\n}) => (\n <CustomFields\n {...props}\n recordFields={recordFields}\n accountFields={accountFields}\n target={CustomFieldsDisplay.MOBILE}\n width={width}\n showHeader={false}\n variant={variant}\n />\n);\n\n// copy product fields to recordFields\n// display all reocrdFields\n// display empty accountFileds where display contains TALLYSHEET\nexport const CustomFieldsTallySheet = (props) => (\n <CustomFields\n {...props}\n target={CustomFieldsDisplay.TALLYSHEET}\n showHeader={false}\n inline={true}\n />\n);\n\n// Select CustomFields to hide / show\nexport const CustomFieldsButton = ({\n form,\n accountFields,\n selectedCustomFields,\n setSelectedFields,\n ...props\n}) => {\n const classes = useStyles();\n const [isOpen, setIsOpen] = useState(false);\n const [selected, setSelected] = useState();\n\n useEffect(() => {\n if (!selected && accountFields) {\n debugger;\n let mergeFields = selectedCustomFields\n ? [...accountFields, ...selectedCustomFields]\n : accountFields;\n const initSelection = mergeFields.reduce(\n (all, f) => (\n f.display.includes(CustomFieldsDisplay.TALLYSHEET) && all.push(f.id),\n all\n ),\n []\n );\n setSelected(initSelection);\n }\n }, [accountFields]);\n\n const handleCheckboxChange = (value) => {\n debugger;\n setSelected(value);\n };\n\n const handleClose = () => {\n setIsOpen(false);\n };\n\n const handleOpenFields = () => {\n setIsOpen(true);\n };\n\n const handleSetSelected = () => {\n debugger;\n const selectedFields = accountFields.map((field) =>\n selected.includes(field.id)\n ? { ...field, display: [CustomFieldsDisplay.TALLYSHEET] }\n : { ...field, display: [] }\n );\n\n setSelectedFields(selectedFields);\n form.change(\"selectedCustomFields\", selectedFields);\n setIsOpen(false);\n };\n\n return (\n accountFields?.length > 0 && (\n <>\n <Button\n label=\"Custom Fields\"\n color=\"default\"\n onClick={handleOpenFields}\n >\n <CustomFieldsIcon />\n </Button>\n <Dialog maxWidth=\"sm\" open={isOpen} fullWidth>\n <DialogTitle disableTypography className={classes.dialogTitle}>\n <h3>Select Custom Fields</h3>\n <IconButton aria-label=\"close\" onClick={handleClose}>\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n <DialogContent dividers className={classes.dialogContent}>\n <CheckboxGroupInput\n source=\"customFieldSelect\"\n label={false}\n row={false}\n fullWidth\n defaultValue={selected}\n choices={accountFields || []}\n onChange={handleCheckboxChange}\n />\n </DialogContent>\n <DialogActions>\n <Button\n label=\"Cancel\"\n color=\"defalut\"\n autoFocus\n onClick={handleClose}\n >\n <CancelIcon />\n </Button>\n <Button\n label=\"Set Selected\"\n color=\"primary\"\n onClick={handleSetSelected}\n >\n <AddAllIcon />\n </Button>\n </DialogActions>\n </Dialog>\n </>\n )\n );\n};\n\nexport const getCustomFieldsTable = (\n accountCustomFields = [],\n recordCustomFields = []\n) => {\n if (!accountCustomFields?.length > 0) return <></>;\n const customFields = recordCustomFields || [];\n\n const customFieldChunks = [];\n for (let i = 0; i < accountCustomFields.length; i += 3) {\n customFieldChunks.push(accountCustomFields.slice(i, i + 3));\n }\n\n const renderCustomFieldTable = (chunk, index) => (\n <Table\n key={\"custom_fields_\" + index}\n style={{ width: \"100%\", marginTop: index > 0 ? \"10px\" : \"0\" }}\n >\n <TableHead>\n <TableRow>\n {chunk.map((field, idx) => (\n <TableCell\n key={idx}\n style={{ textAlign: \"center\", width: \"33%\", padding: \"3px\" }}\n >\n {field.name}\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n {chunk.map((field, idx) => (\n <TableCell\n key={idx}\n style={{ textAlign: \"center\", padding: \"3px\" }}\n >\n {parseCustomFieldValue(\n customFields.find((cf) => cf.startsWith(field.name))\n )}\n </TableCell>\n ))}\n </TableRow>\n </TableBody>\n </Table>\n );\n\n return customFieldChunks.map((chunk, index) =>\n renderCustomFieldTable(chunk, index)\n );\n};\n","/* eslint-disable */\n// this is an auto generated file. This will be overwritten\n\nexport const getAccount = /* GraphQL */ `\n query GetAccount($id: ID!) {\n getAccount(id: $id) {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n items {\n id\n owner\n groups\n active\n status\n name\n description\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n nextToken\n }\n products {\n items {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n checklists {\n items {\n id\n owner\n groups\n active\n reloadYardId\n resourceId\n name\n description\n processName\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listAccounts = /* GraphQL */ `\n query ListAccounts(\n $filter: ModelAccountFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listAccounts(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getApiKey = /* GraphQL */ `\n query GetApiKey($id: ID!) {\n getApiKey(id: $id) {\n id\n active\n groups\n reloadYardId\n name\n keyId\n createdBy\n deletedBy\n createdAt\n updatedAt\n }\n }\n`;\nexport const listApiKeys = /* GraphQL */ `\n query ListApiKeys(\n $filter: ModelApiKeyFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listApiKeys(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n active\n groups\n reloadYardId\n name\n keyId\n createdBy\n deletedBy\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getBarcode = /* GraphQL */ `\n query GetBarcode($id: ID!) {\n getBarcode(id: $id) {\n id\n owner\n groups\n active\n status\n reloadYardId\n value\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n nextToken\n }\n barcodes {\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listBarcodes = /* GraphQL */ `\n query ListBarcodes(\n $filter: ModelBarcodeFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listBarcodes(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n status\n reloadYardId\n value\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n barcode\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getCustomer = /* GraphQL */ `\n query GetCustomer($id: ID!) {\n getCustomer(id: $id) {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n reloadYardAccounts {\n items {\n id\n owner\n active\n groups\n customerId\n email\n lastName\n reloadYardId\n accountId\n accountName\n acl\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listCustomers = /* GraphQL */ `\n query ListCustomers(\n $filter: ModelCustomerFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listCustomers(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n reloadYardAccounts {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getCustomerReloadYardAccount = /* GraphQL */ `\n query GetCustomerReloadYardAccount($id: ID!) {\n getCustomerReloadYardAccount(id: $id) {\n id\n owner\n active\n groups\n customerId\n email\n lastName\n reloadYardId\n accountId\n accountName\n acl\n customer {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n reloadYardAccounts {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n logoImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n areas {\n nextToken\n }\n zones {\n nextToken\n }\n aisles {\n nextToken\n }\n yardCommodities {\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n timeZone\n assetTypes {\n nextToken\n }\n eventTypes {\n nextToken\n }\n checklists {\n nextToken\n }\n apiKeys {\n nextToken\n }\n createdAt\n updatedAt\n }\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listCustomerReloadYardAccounts = /* GraphQL */ `\n query ListCustomerReloadYardAccounts(\n $filter: ModelCustomerReloadYardAccountFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listCustomerReloadYardAccounts(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n active\n groups\n customerId\n email\n lastName\n reloadYardId\n accountId\n accountName\n acl\n customer {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n createdAt\n updatedAt\n }\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getInboundShipment = /* GraphQL */ `\n query GetInboundShipment($id: ID!) {\n getInboundShipment(id: $id) {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listInboundShipments = /* GraphQL */ `\n query ListInboundShipments(\n $filter: ModelInboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listInboundShipments(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getSetupData = /* GraphQL */ `\n query GetSetupData($id: ID!) {\n getSetupData(id: $id) {\n id\n owner\n groups\n status\n cognitoId\n firstName\n lastName\n businessName\n setupData\n submitDate\n approvalDate\n approvedBy\n createdAt\n updatedAt\n }\n }\n`;\nexport const listSetupDatas = /* GraphQL */ `\n query ListSetupDatas(\n $filter: ModelSetupDataFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listSetupDatas(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n status\n cognitoId\n firstName\n lastName\n businessName\n setupData\n submitDate\n approvalDate\n approvedBy\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getTask = /* GraphQL */ `\n query GetTask($id: ID!) {\n getTask(id: $id) {\n id\n owner\n groups\n status\n reloadYardId\n createdAt\n updatedAt\n name\n description\n assignedTo\n assignedToName\n allowReassign\n link\n priority\n reference\n category\n dueDate\n lateDate\n completedBy\n completedDate\n resolvedDate\n resolvedBy\n note\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n }\n }\n`;\nexport const listTasks = /* GraphQL */ `\n query ListTasks(\n $filter: ModelTaskFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listTasks(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n status\n reloadYardId\n createdAt\n updatedAt\n name\n description\n assignedTo\n assignedToName\n allowReassign\n link\n priority\n reference\n category\n dueDate\n lateDate\n completedBy\n completedDate\n resolvedDate\n resolvedBy\n note\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n }\n nextToken\n }\n }\n`;\nexport const getProduct = /* GraphQL */ `\n query GetProduct($id: ID!) {\n getProduct(id: $id) {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listProducts = /* GraphQL */ `\n query ListProducts(\n $filter: ModelProductFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listProducts(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getInventorie = /* GraphQL */ `\n query GetInventorie($id: ID!) {\n getInventorie(id: $id) {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n nextToken\n }\n createdAt\n updatedAt\n }\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n outboundShipmentId\n accountId\n reloadYardId\n inventoryId\n createdAt\n updatedAt\n }\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n items {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n barcode\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n createdAt\n updatedAt\n }\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n }\n`;\nexport const listInventories = /* GraphQL */ `\n query ListInventories(\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listInventories(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getInventoryItem = /* GraphQL */ `\n query GetInventoryItem($id: ID!) {\n getInventoryItem(id: $id) {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n barcodes {\n items {\n id\n owner\n groups\n active\n status\n reloadYardId\n value\n inventoryItemId\n createdAt\n updatedAt\n }\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listInventoryItems = /* GraphQL */ `\n query ListInventoryItems(\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listInventoryItems(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n nextToken\n }\n barcodes {\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getShipmentLineItemInventoryItem = /* GraphQL */ `\n query GetShipmentLineItemInventoryItem($id: ID!) {\n getShipmentLineItemInventoryItem(id: $id) {\n id\n owner\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryId\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n nextToken\n }\n barcodes {\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n quantityToPick\n status\n hasException\n barcodeException\n barcodeExceptionNote\n otherException\n otherExceptionNote\n createdAt\n updatedAt\n }\n }\n`;\nexport const listShipmentLineItemInventoryItems = /* GraphQL */ `\n query ListShipmentLineItemInventoryItems(\n $filter: ModelShipmentLineItemInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listShipmentLineItemInventoryItems(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryId\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n barcode\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n createdAt\n updatedAt\n }\n quantityToPick\n status\n hasException\n barcodeException\n barcodeExceptionNote\n otherException\n otherExceptionNote\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getAudit = /* GraphQL */ `\n query GetAudit($id: ID!) {\n getAudit(id: $id) {\n id\n owner\n groups\n active\n status\n createdAt\n createDateTime\n notes\n reloadYardId\n processedItems\n processedLocations\n skippedItems\n nextItem\n nextItems {\n locationIdx\n owner\n name\n }\n direction\n accountId\n accountName\n assignedTo\n locations\n startDateTime\n endDateTime\n updatedAt\n }\n }\n`;\nexport const listAudits = /* GraphQL */ `\n query ListAudits(\n $filter: ModelAuditFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listAudits(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n status\n createdAt\n createDateTime\n notes\n reloadYardId\n processedItems\n processedLocations\n skippedItems\n nextItem\n nextItems {\n locationIdx\n owner\n name\n }\n direction\n accountId\n accountName\n assignedTo\n locations\n startDateTime\n endDateTime\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getChecklist = /* GraphQL */ `\n query GetChecklist($id: ID!) {\n getChecklist(id: $id) {\n id\n owner\n groups\n active\n reloadYardId\n resourceId\n name\n description\n processName\n checklistItems {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n }\n }\n`;\nexport const listChecklists = /* GraphQL */ `\n query ListChecklists(\n $filter: ModelChecklistFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listChecklists(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n resourceId\n name\n description\n processName\n checklistItems {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getShipmentLineItem = /* GraphQL */ `\n query GetShipmentLineItem($id: ID!) {\n getShipmentLineItem(id: $id) {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n pickupPhoto {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n accountId\n reloadYardId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n inventoryItems {\n items {\n id\n owner\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryId\n inventoryItemId\n quantityToPick\n status\n hasException\n barcodeException\n barcodeExceptionNote\n otherException\n otherExceptionNote\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listShipmentLineItems = /* GraphQL */ `\n query ListShipmentLineItems(\n $filter: ModelShipmentLineItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listShipmentLineItems(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n pickupPhoto {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n accountId\n reloadYardId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n inventoryItems {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getOutboundShipment = /* GraphQL */ `\n query GetOutboundShipment($id: ID!) {\n getOutboundShipment(id: $id) {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n outboundShipmentId\n accountId\n reloadYardId\n inventoryId\n createdAt\n updatedAt\n }\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n }\n`;\nexport const listOutboundShipments = /* GraphQL */ `\n query ListOutboundShipments(\n $filter: ModelOutboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listOutboundShipments(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getInvoice = /* GraphQL */ `\n query GetInvoice($id: ID!) {\n getInvoice(id: $id) {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n items {\n id\n invoiceId\n serviceId\n accountId\n reloadYardId\n owner\n groups\n quantity\n units\n unitCost\n amount\n itemTax\n serviceNote\n serviceDate\n createdAt\n updatedAt\n }\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n logoImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n areas {\n nextToken\n }\n zones {\n nextToken\n }\n aisles {\n nextToken\n }\n yardCommodities {\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n timeZone\n assetTypes {\n nextToken\n }\n eventTypes {\n nextToken\n }\n checklists {\n nextToken\n }\n apiKeys {\n nextToken\n }\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n nextToken\n }\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listInvoices = /* GraphQL */ `\n query ListInvoices(\n $filter: ModelInvoiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listInvoices(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getInvoiceService = /* GraphQL */ `\n query GetInvoiceService($id: ID!) {\n getInvoiceService(id: $id) {\n id\n invoiceId\n serviceId\n service {\n id\n owner\n groups\n active\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n accountId\n reloadYardId\n owner\n groups\n quantity\n units\n unitCost\n amount\n itemTax\n taxRate {\n taxCode\n taxRate\n }\n serviceNote\n serviceDate\n createdAt\n updatedAt\n }\n }\n`;\nexport const listInvoiceServices = /* GraphQL */ `\n query ListInvoiceServices(\n $filter: ModelInvoiceServiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listInvoiceServices(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n invoiceId\n serviceId\n service {\n id\n owner\n groups\n active\n status\n name\n description\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n accountId\n reloadYardId\n owner\n groups\n quantity\n units\n unitCost\n amount\n itemTax\n taxRate {\n taxCode\n taxRate\n }\n serviceNote\n serviceDate\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getService = /* GraphQL */ `\n query GetService($id: ID!) {\n getService(id: $id) {\n id\n owner\n groups\n active\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n }\n`;\nexport const listServices = /* GraphQL */ `\n query ListServices(\n $filter: ModelServiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listServices(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getArea = /* GraphQL */ `\n query GetArea($id: ID!) {\n getArea(id: $id) {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listAreas = /* GraphQL */ `\n query ListAreas(\n $filter: ModelAreaFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listAreas(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getZone = /* GraphQL */ `\n query GetZone($id: ID!) {\n getZone(id: $id) {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n }\n`;\nexport const listZones = /* GraphQL */ `\n query ListZones(\n $filter: ModelZoneFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listZones(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getAisle = /* GraphQL */ `\n query GetAisle($id: ID!) {\n getAisle(id: $id) {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n locations {\n items {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n nextToken\n }\n bays\n levels\n positions\n totalLocations\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n }\n`;\nexport const listAisles = /* GraphQL */ `\n query ListAisles(\n $filter: ModelAisleFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listAisles(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n locations {\n nextToken\n }\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getLocation = /* GraphQL */ `\n query GetLocation($id: ID!) {\n getLocation(id: $id) {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n locations {\n nextToken\n }\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n items {\n id\n owner\n groups\n reloadYardId\n locationId\n tagId\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listLocations = /* GraphQL */ `\n query ListLocations(\n $filter: ModelLocationFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listLocations(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getReloadYard = /* GraphQL */ `\n query GetReloadYard($id: ID!) {\n getReloadYard(id: $id) {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n logoImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n areas {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n zones {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n aisles {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n nextToken\n }\n yardCommodities {\n items {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n schedule {\n workdays {\n id\n name\n startDayTime\n endDayTime\n selected\n }\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n timeZone\n assetTypes {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n nextToken\n }\n eventTypes {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n nextToken\n }\n checklists {\n items {\n id\n owner\n groups\n active\n reloadYardId\n resourceId\n name\n description\n processName\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n }\n nextToken\n }\n apiKeys {\n items {\n id\n active\n groups\n reloadYardId\n name\n keyId\n createdBy\n deletedBy\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listReloadYards = /* GraphQL */ `\n query ListReloadYards(\n $filter: ModelReloadYardFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listReloadYards(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n logoImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n areas {\n nextToken\n }\n zones {\n nextToken\n }\n aisles {\n nextToken\n }\n yardCommodities {\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n timeZone\n assetTypes {\n nextToken\n }\n eventTypes {\n nextToken\n }\n checklists {\n nextToken\n }\n apiKeys {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getZapierHook = /* GraphQL */ `\n query GetZapierHook($id: ID!) {\n getZapierHook(id: $id) {\n id\n groups\n active\n reloadYardId\n event\n description\n zapId\n url\n link\n createdAt\n updatedAt\n }\n }\n`;\nexport const listZapierHooks = /* GraphQL */ `\n query ListZapierHooks(\n $filter: ModelZapierHookFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listZapierHooks(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n groups\n active\n reloadYardId\n event\n description\n zapId\n url\n link\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getZapierAction = /* GraphQL */ `\n query GetZapierAction($id: ID!) {\n getZapierAction(id: $id) {\n id\n groups\n active\n reloadYardId\n event\n description\n counter\n createdAt\n updatedAt\n }\n }\n`;\nexport const listZapierActions = /* GraphQL */ `\n query ListZapierActions(\n $filter: ModelZapierActionFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listZapierActions(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n groups\n active\n reloadYardId\n event\n description\n counter\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getAssetType = /* GraphQL */ `\n query GetAssetType($id: ID!) {\n getAssetType(id: $id) {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n }\n`;\nexport const listAssetTypes = /* GraphQL */ `\n query ListAssetTypes(\n $filter: ModelAssetTypeFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listAssetTypes(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getEventType = /* GraphQL */ `\n query GetEventType($id: ID!) {\n getEventType(id: $id) {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n schedule {\n workdays {\n id\n name\n startDayTime\n endDayTime\n selected\n }\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n assetType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listEventTypes = /* GraphQL */ `\n query ListEventTypes(\n $filter: ModelEventTypeFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listEventTypes(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n assetType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getTimeslot = /* GraphQL */ `\n query GetTimeslot($id: ID!) {\n getTimeslot(id: $id) {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n assetType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listTimeslots = /* GraphQL */ `\n query ListTimeslots(\n $filter: ModelTimeslotFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listTimeslots(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getReloadYardCapability = /* GraphQL */ `\n query GetReloadYardCapability($id: ID!) {\n getReloadYardCapability(id: $id) {\n id\n reloadYardId\n capabilityId\n owner\n groups\n active\n verified\n requiredValue\n capability {\n id\n active\n sortKey\n name\n description\n requiresValue\n requiredValueLabel\n quantity\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listReloadYardCapabilitys = /* GraphQL */ `\n query ListReloadYardCapabilitys(\n $filter: ModelReloadYardCapabilityFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listReloadYardCapabilitys(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n reloadYardId\n capabilityId\n owner\n groups\n active\n verified\n requiredValue\n capability {\n id\n active\n sortKey\n name\n description\n requiresValue\n requiredValueLabel\n quantity\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getCapability = /* GraphQL */ `\n query GetCapability($id: ID!) {\n getCapability(id: $id) {\n id\n active\n sortKey\n name\n description\n requiresValue\n requiredValueLabel\n quantity\n createdAt\n updatedAt\n }\n }\n`;\nexport const listCapabilitys = /* GraphQL */ `\n query ListCapabilitys(\n $filter: ModelCapabilityFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listCapabilitys(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n active\n sortKey\n name\n description\n requiresValue\n requiredValueLabel\n quantity\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getTag = /* GraphQL */ `\n query GetTag($id: ID!) {\n getTag(id: $id) {\n id\n owner\n groups\n reloadYardId\n name\n description\n createdAt\n updatedAt\n }\n }\n`;\nexport const listTags = /* GraphQL */ `\n query ListTags(\n $filter: ModelTagFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listTags(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n reloadYardId\n name\n description\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getLocationTag = /* GraphQL */ `\n query GetLocationTag($id: ID!) {\n getLocationTag(id: $id) {\n id\n owner\n groups\n reloadYardId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n tagId\n tag {\n id\n owner\n groups\n reloadYardId\n name\n description\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listLocationTags = /* GraphQL */ `\n query ListLocationTags(\n $filter: ModelLocationTagFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listLocationTags(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n reloadYardId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n tagId\n tag {\n id\n owner\n groups\n reloadYardId\n name\n description\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getReloadYardCommodity = /* GraphQL */ `\n query GetReloadYardCommodity($id: ID!) {\n getReloadYardCommodity(id: $id) {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listReloadYardCommoditys = /* GraphQL */ `\n query ListReloadYardCommoditys(\n $filter: ModelReloadYardCommodityFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listReloadYardCommoditys(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getCommodity = /* GraphQL */ `\n query GetCommodity($id: ID!) {\n getCommodity(id: $id) {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n }\n`;\nexport const listCommoditys = /* GraphQL */ `\n query ListCommoditys(\n $filter: ModelCommodityFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listCommoditys(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getAnnouncement = /* GraphQL */ `\n query GetAnnouncement($id: ID!) {\n getAnnouncement(id: $id) {\n id\n active\n createDateTime\n message\n urgency\n link\n tenantId\n createdAt\n updatedAt\n }\n }\n`;\nexport const listAnnouncements = /* GraphQL */ `\n query ListAnnouncements(\n $filter: ModelAnnouncementFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listAnnouncements(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n active\n createDateTime\n message\n urgency\n link\n tenantId\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getHelpPage = /* GraphQL */ `\n query GetHelpPage($id: ID!) {\n getHelpPage(id: $id) {\n id\n active\n isLive\n url\n topic\n name\n content\n createdAt\n updatedAt\n }\n }\n`;\nexport const listHelpPages = /* GraphQL */ `\n query ListHelpPages(\n $filter: ModelHelpPageFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listHelpPages(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n active\n isLive\n url\n topic\n name\n content\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getLog = /* GraphQL */ `\n query GetLog($id: ID!) {\n getLog(id: $id) {\n id\n status\n createdAt\n appType\n tenantId\n user\n message\n exception\n appVersion\n url\n context\n owner\n updatedAt\n }\n }\n`;\nexport const listLogs = /* GraphQL */ `\n query ListLogs(\n $filter: ModelLogFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listLogs(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n status\n createdAt\n appType\n tenantId\n user\n message\n exception\n appVersion\n url\n context\n owner\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getFile = /* GraphQL */ `\n query GetFile($id: ID!) {\n getFile(id: $id) {\n id\n owner\n groups\n active\n reloadYardId\n displayName\n rawFileName\n description\n contentDate\n category\n visibility\n file {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const listFiles = /* GraphQL */ `\n query ListFiles(\n $filter: ModelFileFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listFiles(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n displayName\n rawFileName\n description\n contentDate\n category\n visibility\n file {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getSeal = /* GraphQL */ `\n query GetSeal($id: ID!) {\n getSeal(id: $id) {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n }\n`;\nexport const listSeals = /* GraphQL */ `\n query ListSeals(\n $filter: ModelSealFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listSeals(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getUser = /* GraphQL */ `\n query GetUser($id: ID!) {\n getUser(id: $id) {\n id\n owner\n groups\n active\n status\n cognitoId\n type\n firstName\n lastName\n fullName\n phone\n email\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n reloadYardId\n acl\n createdAt\n updatedAt\n }\n }\n`;\nexport const listUsers = /* GraphQL */ `\n query ListUsers(\n $filter: ModelUserFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listUsers(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n groups\n active\n status\n cognitoId\n type\n firstName\n lastName\n fullName\n phone\n email\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n reloadYardId\n acl\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const accountByActiveByName = /* GraphQL */ `\n query AccountByActiveByName(\n $reloadYardId: ID\n $activeBusinessName: ModelAccountAccountByActiveByNameCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAccountFilterInput\n $limit: Int\n $nextToken: String\n ) {\n accountByActiveByName(\n reloadYardId: $reloadYardId\n activeBusinessName: $activeBusinessName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const accountByEmail = /* GraphQL */ `\n query AccountByEmail(\n $reloadYardId: ID\n $email: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAccountFilterInput\n $limit: Int\n $nextToken: String\n ) {\n accountByEmail(\n reloadYardId: $reloadYardId\n email: $email\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const accountByLotPrefix = /* GraphQL */ `\n query AccountByLotPrefix(\n $reloadYardId: ID\n $lotNumberPrefix: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAccountFilterInput\n $limit: Int\n $nextToken: String\n ) {\n accountByLotPrefix(\n reloadYardId: $reloadYardId\n lotNumberPrefix: $lotNumberPrefix\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const apiKeyByKeyId = /* GraphQL */ `\n query ApiKeyByKeyId(\n $keyId: String\n $sortDirection: ModelSortDirection\n $filter: ModelApiKeyFilterInput\n $limit: Int\n $nextToken: String\n ) {\n apiKeyByKeyId(\n keyId: $keyId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n active\n groups\n reloadYardId\n name\n keyId\n createdBy\n deletedBy\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const apiKeyByActiveByName = /* GraphQL */ `\n query ApiKeyByActiveByName(\n $reloadYardId: ID\n $activeName: ModelApiKeyApiKeyByActiveByNameCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelApiKeyFilterInput\n $limit: Int\n $nextToken: String\n ) {\n apiKeyByActiveByName(\n reloadYardId: $reloadYardId\n activeName: $activeName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n active\n groups\n reloadYardId\n name\n keyId\n createdBy\n deletedBy\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const barcodeByInventoryItemByActiveByValue = /* GraphQL */ `\n query BarcodeByInventoryItemByActiveByValue(\n $inventoryItemId: ID\n $activeValue: ModelBarcodeBarcodeByInventoryItemByActiveByValueCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelBarcodeFilterInput\n $limit: Int\n $nextToken: String\n ) {\n barcodeByInventoryItemByActiveByValue(\n inventoryItemId: $inventoryItemId\n activeValue: $activeValue\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n reloadYardId\n value\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n barcode\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const barcodeByActiveByValue = /* GraphQL */ `\n query BarcodeByActiveByValue(\n $reloadYardId: ID\n $activeValue: ModelBarcodeBarcodeByActiveByValueCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelBarcodeFilterInput\n $limit: Int\n $nextToken: String\n ) {\n barcodeByActiveByValue(\n reloadYardId: $reloadYardId\n activeValue: $activeValue\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n reloadYardId\n value\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n barcode\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const customerByEmail = /* GraphQL */ `\n query CustomerByEmail(\n $email: String\n $sortDirection: ModelSortDirection\n $filter: ModelCustomerFilterInput\n $limit: Int\n $nextToken: String\n ) {\n customerByEmail(\n email: $email\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n reloadYardAccounts {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const reloadYardAccountByCustomer = /* GraphQL */ `\n query ReloadYardAccountByCustomer(\n $customerId: ID\n $sortDirection: ModelSortDirection\n $filter: ModelCustomerReloadYardAccountFilterInput\n $limit: Int\n $nextToken: String\n ) {\n reloadYardAccountByCustomer(\n customerId: $customerId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n active\n groups\n customerId\n email\n lastName\n reloadYardId\n accountId\n accountName\n acl\n customer {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n createdAt\n updatedAt\n }\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const customerByReloadYardByActiveByAccountNameByName = /* GraphQL */ `\n query CustomerByReloadYardByActiveByAccountNameByName(\n $reloadYardId: ID\n $activeAccountNameLastName: ModelCustomerReloadYardAccountCustomerByReloadYardByActiveByAccountNameByNameCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelCustomerReloadYardAccountFilterInput\n $limit: Int\n $nextToken: String\n ) {\n customerByReloadYardByActiveByAccountNameByName(\n reloadYardId: $reloadYardId\n activeAccountNameLastName: $activeAccountNameLastName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n active\n groups\n customerId\n email\n lastName\n reloadYardId\n accountId\n accountName\n acl\n customer {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n createdAt\n updatedAt\n }\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const customerByAccountByActiveByName = /* GraphQL */ `\n query CustomerByAccountByActiveByName(\n $accountId: ID\n $activeLastName: ModelCustomerReloadYardAccountCustomerByAccountByActiveByNameCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelCustomerReloadYardAccountFilterInput\n $limit: Int\n $nextToken: String\n ) {\n customerByAccountByActiveByName(\n accountId: $accountId\n activeLastName: $activeLastName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n active\n groups\n customerId\n email\n lastName\n reloadYardId\n accountId\n accountName\n acl\n customer {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n createdAt\n updatedAt\n }\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inboundShipmentByStateByRailcar = /* GraphQL */ `\n query InboundShipmentByStateByRailcar(\n $reloadYardId: ID\n $stateRailCarNumber: ModelInboundShipmentInboundShipmentByStateByRailcarCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inboundShipmentByStateByRailcar(\n reloadYardId: $reloadYardId\n stateRailCarNumber: $stateRailCarNumber\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inboundShipmentByReloadYardByStatusByDates = /* GraphQL */ `\n query InboundShipmentByReloadYardByStatusByDates(\n $reloadYardId: ID\n $statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime: ModelInboundShipmentInboundShipmentByReloadYardByStatusByDatesCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inboundShipmentByReloadYardByStatusByDates(\n reloadYardId: $reloadYardId\n statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime: $statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inboundShipmentByAccountByStatusByDates = /* GraphQL */ `\n query InboundShipmentByAccountByStatusByDates(\n $accountId: ID\n $statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime: ModelInboundShipmentInboundShipmentByAccountByStatusByDatesCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inboundShipmentByAccountByStatusByDates(\n accountId: $accountId\n statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime: $statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inboundShipmentByReloadYardByAccount = /* GraphQL */ `\n query InboundShipmentByReloadYardByAccount(\n $reloadYardId: ID\n $accountId: ModelIDKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inboundShipmentByReloadYardByAccount(\n reloadYardId: $reloadYardId\n accountId: $accountId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const setupDataByStatusBySubmitDate = /* GraphQL */ `\n query SetupDataByStatusBySubmitDate(\n $status: Int\n $submitDate: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelSetupDataFilterInput\n $limit: Int\n $nextToken: String\n ) {\n setupDataByStatusBySubmitDate(\n status: $status\n submitDate: $submitDate\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n status\n cognitoId\n firstName\n lastName\n businessName\n setupData\n submitDate\n approvalDate\n approvedBy\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const setupDataByCognitoIdByStatus = /* GraphQL */ `\n query SetupDataByCognitoIdByStatus(\n $cognitoId: String\n $status: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelSetupDataFilterInput\n $limit: Int\n $nextToken: String\n ) {\n setupDataByCognitoIdByStatus(\n cognitoId: $cognitoId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n status\n cognitoId\n firstName\n lastName\n businessName\n setupData\n submitDate\n approvalDate\n approvedBy\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const taskByReference = /* GraphQL */ `\n query TaskByReference(\n $reference: ID\n $sortDirection: ModelSortDirection\n $filter: ModelTaskFilterInput\n $limit: Int\n $nextToken: String\n ) {\n taskByReference(\n reference: $reference\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n status\n reloadYardId\n createdAt\n updatedAt\n name\n description\n assignedTo\n assignedToName\n allowReassign\n link\n priority\n reference\n category\n dueDate\n lateDate\n completedBy\n completedDate\n resolvedDate\n resolvedBy\n note\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n }\n nextToken\n }\n }\n`;\nexport const taskByStatusByAssignedTo = /* GraphQL */ `\n query TaskByStatusByAssignedTo(\n $reloadYardId: ID\n $statusAssignedToName: ModelTaskTaskByStatusByAssignedToCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelTaskFilterInput\n $limit: Int\n $nextToken: String\n ) {\n taskByStatusByAssignedTo(\n reloadYardId: $reloadYardId\n statusAssignedToName: $statusAssignedToName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n status\n reloadYardId\n createdAt\n updatedAt\n name\n description\n assignedTo\n assignedToName\n allowReassign\n link\n priority\n reference\n category\n dueDate\n lateDate\n completedBy\n completedDate\n resolvedDate\n resolvedBy\n note\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n }\n nextToken\n }\n }\n`;\nexport const taskByAssignedToByStatusByDueDate = /* GraphQL */ `\n query TaskByAssignedToByStatusByDueDate(\n $assignedTo: ID\n $statusDueDate: ModelTaskTaskByAssignedToByStatusByDueDateCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelTaskFilterInput\n $limit: Int\n $nextToken: String\n ) {\n taskByAssignedToByStatusByDueDate(\n assignedTo: $assignedTo\n statusDueDate: $statusDueDate\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n status\n reloadYardId\n createdAt\n updatedAt\n name\n description\n assignedTo\n assignedToName\n allowReassign\n link\n priority\n reference\n category\n dueDate\n lateDate\n completedBy\n completedDate\n resolvedDate\n resolvedBy\n note\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n }\n nextToken\n }\n }\n`;\nexport const productByAccountByActiveByProductCode = /* GraphQL */ `\n query ProductByAccountByActiveByProductCode(\n $accountId: ID\n $activeProductCode: ModelProductProductByAccountByActiveByProductCodeCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelProductFilterInput\n $limit: Int\n $nextToken: String\n ) {\n productByAccountByActiveByProductCode(\n accountId: $accountId\n activeProductCode: $activeProductCode\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const productByAccountByActiveByName = /* GraphQL */ `\n query ProductByAccountByActiveByName(\n $accountId: ID\n $activeName: ModelProductProductByAccountByActiveByNameCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelProductFilterInput\n $limit: Int\n $nextToken: String\n ) {\n productByAccountByActiveByName(\n accountId: $accountId\n activeName: $activeName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inventoryByStatusByLot = /* GraphQL */ `\n query InventoryByStatusByLot(\n $reloadYardId: ID\n $statusLotNumber: ModelInventoryInventoryByStatusByLotCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryByStatusByLot(\n reloadYardId: $reloadYardId\n statusLotNumber: $statusLotNumber\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inventoryByStatusByAccountByProductByLot = /* GraphQL */ `\n query InventoryByStatusByAccountByProductByLot(\n $reloadYardId: ID\n $statusAccountNameProductNameLotNumber: ModelInventoryInventoryByStatusByAccountByProductByLotCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryByStatusByAccountByProductByLot(\n reloadYardId: $reloadYardId\n statusAccountNameProductNameLotNumber: $statusAccountNameProductNameLotNumber\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inventoryByStatusByAccountIdByProductByLot = /* GraphQL */ `\n query InventoryByStatusByAccountIdByProductByLot(\n $reloadYardId: ID\n $statusAccountIdProductNameLotNumber: ModelInventoryInventoryByStatusByAccountIdByProductByLotCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryByStatusByAccountIdByProductByLot(\n reloadYardId: $reloadYardId\n statusAccountIdProductNameLotNumber: $statusAccountIdProductNameLotNumber\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inventoryByAreaByProductByStatus = /* GraphQL */ `\n query InventoryByAreaByProductByStatus(\n $areaId: ID\n $productIdStatus: ModelInventoryInventoryByAreaByProductByStatusCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryByAreaByProductByStatus(\n areaId: $areaId\n productIdStatus: $productIdStatus\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inventoryByProductByStatus = /* GraphQL */ `\n query InventoryByProductByStatus(\n $reloadYardId: ID\n $productIdStatus: ModelInventoryInventoryByProductByStatusCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryByProductByStatus(\n reloadYardId: $reloadYardId\n productIdStatus: $productIdStatus\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inventoryByInboundShipmentBySortKey = /* GraphQL */ `\n query InventoryByInboundShipmentBySortKey(\n $inboundShipmentId: ID\n $sortKey: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryByInboundShipmentBySortKey(\n inboundShipmentId: $inboundShipmentId\n sortKey: $sortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inventoryByInboundShipmentByProduct = /* GraphQL */ `\n query InventoryByInboundShipmentByProduct(\n $inboundShipmentId: ID\n $productName: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryByInboundShipmentByProduct(\n inboundShipmentId: $inboundShipmentId\n productName: $productName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inventoryItemByAreaByStatus = /* GraphQL */ `\n query InventoryItemByAreaByStatus(\n $areaId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByAreaByStatus(\n areaId: $areaId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n nextToken\n }\n barcodes {\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inventoryItemByZoneByStatus = /* GraphQL */ `\n query InventoryItemByZoneByStatus(\n $zoneId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByZoneByStatus(\n zoneId: $zoneId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n nextToken\n }\n barcodes {\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inventoryItemByAisleByStatus = /* GraphQL */ `\n query InventoryItemByAisleByStatus(\n $aisleId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByAisleByStatus(\n aisleId: $aisleId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n nextToken\n }\n barcodes {\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inventoryItemByLocationByStatus = /* GraphQL */ `\n query InventoryItemByLocationByStatus(\n $locationId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByLocationByStatus(\n locationId: $locationId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n nextToken\n }\n barcodes {\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inventoryItemByInventoryByStatus = /* GraphQL */ `\n query InventoryItemByInventoryByStatus(\n $inventoryId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByInventoryByStatus(\n inventoryId: $inventoryId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n nextToken\n }\n barcodes {\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const shipmentLineItemByInventoryItem = /* GraphQL */ `\n query ShipmentLineItemByInventoryItem(\n $inventoryItemId: ID\n $sortDirection: ModelSortDirection\n $filter: ModelShipmentLineItemInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n shipmentLineItemByInventoryItem(\n inventoryItemId: $inventoryItemId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryId\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n barcode\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n createdAt\n updatedAt\n }\n quantityToPick\n status\n hasException\n barcodeException\n barcodeExceptionNote\n otherException\n otherExceptionNote\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const inventoryItemByShipmentLineItem = /* GraphQL */ `\n query InventoryItemByShipmentLineItem(\n $shipmentLineItemId: ID\n $sortDirection: ModelSortDirection\n $filter: ModelShipmentLineItemInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByShipmentLineItem(\n shipmentLineItemId: $shipmentLineItemId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryId\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n barcode\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n createdAt\n updatedAt\n }\n quantityToPick\n status\n hasException\n barcodeException\n barcodeExceptionNote\n otherException\n otherExceptionNote\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const auditByDate = /* GraphQL */ `\n query AuditByDate(\n $reloadYardId: ID\n $createDateTime: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAuditFilterInput\n $limit: Int\n $nextToken: String\n ) {\n auditByDate(\n reloadYardId: $reloadYardId\n createDateTime: $createDateTime\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n createdAt\n createDateTime\n notes\n reloadYardId\n processedItems\n processedLocations\n skippedItems\n nextItem\n nextItems {\n locationIdx\n owner\n name\n }\n direction\n accountId\n accountName\n assignedTo\n locations\n startDateTime\n endDateTime\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const auditByStatusByDate = /* GraphQL */ `\n query AuditByStatusByDate(\n $reloadYardId: ID\n $statusCreateDateTime: ModelAuditAuditByStatusByDateCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAuditFilterInput\n $limit: Int\n $nextToken: String\n ) {\n auditByStatusByDate(\n reloadYardId: $reloadYardId\n statusCreateDateTime: $statusCreateDateTime\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n createdAt\n createDateTime\n notes\n reloadYardId\n processedItems\n processedLocations\n skippedItems\n nextItem\n nextItems {\n locationIdx\n owner\n name\n }\n direction\n accountId\n accountName\n assignedTo\n locations\n startDateTime\n endDateTime\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const checklistByResourceByProcess = /* GraphQL */ `\n query ChecklistByResourceByProcess(\n $resourceId: ID\n $processName: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelChecklistFilterInput\n $limit: Int\n $nextToken: String\n ) {\n checklistByResourceByProcess(\n resourceId: $resourceId\n processName: $processName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n resourceId\n name\n description\n processName\n checklistItems {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const shipmentLineItemByOutboundShipmentBySortKey = /* GraphQL */ `\n query ShipmentLineItemByOutboundShipmentBySortKey(\n $outboundShipmentId: ID\n $sortKey: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelShipmentLineItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n shipmentLineItemByOutboundShipmentBySortKey(\n outboundShipmentId: $outboundShipmentId\n sortKey: $sortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n pickupPhoto {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n accountId\n reloadYardId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n inventoryItems {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const shipmentLineItemByInventory = /* GraphQL */ `\n query ShipmentLineItemByInventory(\n $inventoryId: ID\n $sortDirection: ModelSortDirection\n $filter: ModelShipmentLineItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n shipmentLineItemByInventory(\n inventoryId: $inventoryId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n pickupPhoto {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n accountId\n reloadYardId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n inventoryItems {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const outboundShipmentByStatus = /* GraphQL */ `\n query OutboundShipmentByStatus(\n $reloadYardId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelOutboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n outboundShipmentByStatus(\n reloadYardId: $reloadYardId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const outboundShipmentByStatusByActive = /* GraphQL */ `\n query OutboundShipmentByStatusByActive(\n $reloadYardId: ID\n $statusActive: ModelOutboundShipmentOutboundShipmentByStatusByActiveCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelOutboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n outboundShipmentByStatusByActive(\n reloadYardId: $reloadYardId\n statusActive: $statusActive\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const outboundShipmentByReloadYardByStatusByDates = /* GraphQL */ `\n query OutboundShipmentByReloadYardByStatusByDates(\n $reloadYardId: ID\n $statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime: ModelOutboundShipmentOutboundShipmentByReloadYardByStatusByDatesCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelOutboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n outboundShipmentByReloadYardByStatusByDates(\n reloadYardId: $reloadYardId\n statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime: $statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const outboundShipmentByAccountByStatusByDates = /* GraphQL */ `\n query OutboundShipmentByAccountByStatusByDates(\n $accountId: ID\n $statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime: ModelOutboundShipmentOutboundShipmentByAccountByStatusByDatesCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelOutboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n outboundShipmentByAccountByStatusByDates(\n accountId: $accountId\n statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime: $statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const invoiceByAccount = /* GraphQL */ `\n query InvoiceByAccount(\n $accountId: ID\n $sortDirection: ModelSortDirection\n $filter: ModelInvoiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n invoiceByAccount(\n accountId: $accountId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const invoiceByReloadYard = /* GraphQL */ `\n query InvoiceByReloadYard(\n $reloadYardId: ID\n $invoiceNumber: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInvoiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n invoiceByReloadYard(\n reloadYardId: $reloadYardId\n invoiceNumber: $invoiceNumber\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const invoiceByDueDate = /* GraphQL */ `\n query InvoiceByDueDate(\n $reloadYardId: ID\n $dueDate: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInvoiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n invoiceByDueDate(\n reloadYardId: $reloadYardId\n dueDate: $dueDate\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const invoiceByAccountByStatusByDate = /* GraphQL */ `\n query InvoiceByAccountByStatusByDate(\n $reloadYardId: ID\n $accountIdStatusDueDate: ModelInvoiceInvoiceByAccountByStatusByDateCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInvoiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n invoiceByAccountByStatusByDate(\n reloadYardId: $reloadYardId\n accountIdStatusDueDate: $accountIdStatusDueDate\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const invoiceByStatusByDateByAccount = /* GraphQL */ `\n query InvoiceByStatusByDateByAccount(\n $reloadYardId: ID\n $statusDueDateAccountName: ModelInvoiceInvoiceByStatusByDateByAccountCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInvoiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n invoiceByStatusByDateByAccount(\n reloadYardId: $reloadYardId\n statusDueDateAccountName: $statusDueDateAccountName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const invoiceServiceByInvoice = /* GraphQL */ `\n query InvoiceServiceByInvoice(\n $invoiceId: ID\n $serviceId: ModelIDKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInvoiceServiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n invoiceServiceByInvoice(\n invoiceId: $invoiceId\n serviceId: $serviceId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n invoiceId\n serviceId\n service {\n id\n owner\n groups\n active\n status\n name\n description\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n accountId\n reloadYardId\n owner\n groups\n quantity\n units\n unitCost\n amount\n itemTax\n taxRate {\n taxCode\n taxRate\n }\n serviceNote\n serviceDate\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const invoiceServiceByService = /* GraphQL */ `\n query InvoiceServiceByService(\n $serviceId: ID\n $invoiceId: ModelIDKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInvoiceServiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n invoiceServiceByService(\n serviceId: $serviceId\n invoiceId: $invoiceId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n invoiceId\n serviceId\n service {\n id\n owner\n groups\n active\n status\n name\n description\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n accountId\n reloadYardId\n owner\n groups\n quantity\n units\n unitCost\n amount\n itemTax\n taxRate {\n taxCode\n taxRate\n }\n serviceNote\n serviceDate\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const serviceByAccountByStatusByName = /* GraphQL */ `\n query ServiceByAccountByStatusByName(\n $accountId: ID\n $statusName: ModelServiceServiceByAccountByStatusByNameCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelServiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n serviceByAccountByStatusByName(\n accountId: $accountId\n statusName: $statusName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const serviceByAccountByActiveByName = /* GraphQL */ `\n query ServiceByAccountByActiveByName(\n $accountId: ID\n $activeName: ModelServiceServiceByAccountByActiveByNameCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelServiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n serviceByAccountByActiveByName(\n accountId: $accountId\n activeName: $activeName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const serviceByActiveByName = /* GraphQL */ `\n query ServiceByActiveByName(\n $reloadYardId: ID\n $activeName: ModelServiceServiceByActiveByNameCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelServiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n serviceByActiveByName(\n reloadYardId: $reloadYardId\n activeName: $activeName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const areaByActiveBySortKey = /* GraphQL */ `\n query AreaByActiveBySortKey(\n $reloadYardId: ID\n $activeSortKey: ModelAreaAreaByActiveBySortKeyCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAreaFilterInput\n $limit: Int\n $nextToken: String\n ) {\n areaByActiveBySortKey(\n reloadYardId: $reloadYardId\n activeSortKey: $activeSortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const areaBySortKey = /* GraphQL */ `\n query AreaBySortKey(\n $reloadYardId: ID\n $sortKey: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAreaFilterInput\n $limit: Int\n $nextToken: String\n ) {\n areaBySortKey(\n reloadYardId: $reloadYardId\n sortKey: $sortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const zoneBySortKey = /* GraphQL */ `\n query ZoneBySortKey(\n $reloadYardId: ID\n $sortKey: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelZoneFilterInput\n $limit: Int\n $nextToken: String\n ) {\n zoneBySortKey(\n reloadYardId: $reloadYardId\n sortKey: $sortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const zoneByAreaBySortKey = /* GraphQL */ `\n query ZoneByAreaBySortKey(\n $areaId: ID\n $sortKey: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelZoneFilterInput\n $limit: Int\n $nextToken: String\n ) {\n zoneByAreaBySortKey(\n areaId: $areaId\n sortKey: $sortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const aisleByActiveBySortKey = /* GraphQL */ `\n query AisleByActiveBySortKey(\n $reloadYardId: ID\n $activeSortKey: ModelAisleAisleByActiveBySortKeyCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAisleFilterInput\n $limit: Int\n $nextToken: String\n ) {\n aisleByActiveBySortKey(\n reloadYardId: $reloadYardId\n activeSortKey: $activeSortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n locations {\n nextToken\n }\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const aisleByActiveByAreaBySortKey = /* GraphQL */ `\n query AisleByActiveByAreaBySortKey(\n $areaId: ID\n $activeSortKey: ModelAisleAisleByActiveByAreaBySortKeyCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAisleFilterInput\n $limit: Int\n $nextToken: String\n ) {\n aisleByActiveByAreaBySortKey(\n areaId: $areaId\n activeSortKey: $activeSortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n locations {\n nextToken\n }\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const aisleByActiveByZoneBySortKey = /* GraphQL */ `\n query AisleByActiveByZoneBySortKey(\n $zoneId: ID\n $activeSortKey: ModelAisleAisleByActiveByZoneBySortKeyCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAisleFilterInput\n $limit: Int\n $nextToken: String\n ) {\n aisleByActiveByZoneBySortKey(\n zoneId: $zoneId\n activeSortKey: $activeSortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n locations {\n nextToken\n }\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const locationBySortKey = /* GraphQL */ `\n query LocationBySortKey(\n $reloadYardId: ID\n $sortKey: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelLocationFilterInput\n $limit: Int\n $nextToken: String\n ) {\n locationBySortKey(\n reloadYardId: $reloadYardId\n sortKey: $sortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const locationByAreaBySortKey = /* GraphQL */ `\n query LocationByAreaBySortKey(\n $reloadYardId: ID\n $areaIdSortKey: ModelLocationLocationByAreaBySortKeyCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelLocationFilterInput\n $limit: Int\n $nextToken: String\n ) {\n locationByAreaBySortKey(\n reloadYardId: $reloadYardId\n areaIdSortKey: $areaIdSortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const locationByZoneBySortKey = /* GraphQL */ `\n query LocationByZoneBySortKey(\n $reloadYardId: ID\n $zoneIdSortKey: ModelLocationLocationByZoneBySortKeyCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelLocationFilterInput\n $limit: Int\n $nextToken: String\n ) {\n locationByZoneBySortKey(\n reloadYardId: $reloadYardId\n zoneIdSortKey: $zoneIdSortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const locationByProductBySortKey = /* GraphQL */ `\n query LocationByProductBySortKey(\n $reloadYardId: ID\n $productIdSortKey: ModelLocationLocationByProductBySortKeyCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelLocationFilterInput\n $limit: Int\n $nextToken: String\n ) {\n locationByProductBySortKey(\n reloadYardId: $reloadYardId\n productIdSortKey: $productIdSortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const locationByAisleByActiveBySortKey = /* GraphQL */ `\n query LocationByAisleByActiveBySortKey(\n $aisleId: ID\n $activeSortKey: ModelLocationLocationByAisleByActiveBySortKeyCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelLocationFilterInput\n $limit: Int\n $nextToken: String\n ) {\n locationByAisleByActiveBySortKey(\n aisleId: $aisleId\n activeSortKey: $activeSortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const locationByAisleBySortKey = /* GraphQL */ `\n query LocationByAisleBySortKey(\n $aisleId: ID\n $sortKey: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelLocationFilterInput\n $limit: Int\n $nextToken: String\n ) {\n locationByAisleBySortKey(\n aisleId: $aisleId\n sortKey: $sortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const reloadYardByName = /* GraphQL */ `\n query ReloadYardByName(\n $active: String\n $name: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelReloadYardFilterInput\n $limit: Int\n $nextToken: String\n ) {\n reloadYardByName(\n active: $active\n name: $name\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n logoImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n areas {\n nextToken\n }\n zones {\n nextToken\n }\n aisles {\n nextToken\n }\n yardCommodities {\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n timeZone\n assetTypes {\n nextToken\n }\n eventTypes {\n nextToken\n }\n checklists {\n nextToken\n }\n apiKeys {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const zapByActiveByEvent = /* GraphQL */ `\n query ZapByActiveByEvent(\n $reloadYardId: ID\n $activeEvent: ModelZapierHookZapByActiveByEventCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelZapierHookFilterInput\n $limit: Int\n $nextToken: String\n ) {\n zapByActiveByEvent(\n reloadYardId: $reloadYardId\n activeEvent: $activeEvent\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n groups\n active\n reloadYardId\n event\n description\n zapId\n url\n link\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const actionByActiveByEvent = /* GraphQL */ `\n query ActionByActiveByEvent(\n $reloadYardId: ID\n $activeEvent: ModelZapierActionActionByActiveByEventCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelZapierActionFilterInput\n $limit: Int\n $nextToken: String\n ) {\n actionByActiveByEvent(\n reloadYardId: $reloadYardId\n activeEvent: $activeEvent\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n groups\n active\n reloadYardId\n event\n description\n counter\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const assetTypeByActiveByName = /* GraphQL */ `\n query AssetTypeByActiveByName(\n $reloadYardId: ID\n $activeName: ModelAssetTypeAssetTypeByActiveByNameCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAssetTypeFilterInput\n $limit: Int\n $nextToken: String\n ) {\n assetTypeByActiveByName(\n reloadYardId: $reloadYardId\n activeName: $activeName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const eventTypeByActiveByAssetType = /* GraphQL */ `\n query EventTypeByActiveByAssetType(\n $reloadYardId: ID\n $activeAssetTypeId: ModelEventTypeEventTypeByActiveByAssetTypeCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelEventTypeFilterInput\n $limit: Int\n $nextToken: String\n ) {\n eventTypeByActiveByAssetType(\n reloadYardId: $reloadYardId\n activeAssetTypeId: $activeAssetTypeId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n assetType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const eventTypeByActiveByArea = /* GraphQL */ `\n query EventTypeByActiveByArea(\n $reloadYardId: ID\n $activeAreaId: ModelEventTypeEventTypeByActiveByAreaCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelEventTypeFilterInput\n $limit: Int\n $nextToken: String\n ) {\n eventTypeByActiveByArea(\n reloadYardId: $reloadYardId\n activeAreaId: $activeAreaId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n assetType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const timeslotByYearByWeek = /* GraphQL */ `\n query TimeslotByYearByWeek(\n $reloadYardId: ID\n $yearWeek: ModelTimeslotTimeslotByYearByWeekCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelTimeslotFilterInput\n $limit: Int\n $nextToken: String\n ) {\n timeslotByYearByWeek(\n reloadYardId: $reloadYardId\n yearWeek: $yearWeek\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const timeslotByEventTypeByDateByTime = /* GraphQL */ `\n query TimeslotByEventTypeByDateByTime(\n $eventTypeId: ID\n $yearMonthDayTime: ModelTimeslotTimeslotByEventTypeByDateByTimeCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelTimeslotFilterInput\n $limit: Int\n $nextToken: String\n ) {\n timeslotByEventTypeByDateByTime(\n eventTypeId: $eventTypeId\n yearMonthDayTime: $yearMonthDayTime\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const reloadYardCapabilityByReloadYard = /* GraphQL */ `\n query ReloadYardCapabilityByReloadYard(\n $reloadYardId: ID\n $active: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelReloadYardCapabilityFilterInput\n $limit: Int\n $nextToken: String\n ) {\n reloadYardCapabilityByReloadYard(\n reloadYardId: $reloadYardId\n active: $active\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n reloadYardId\n capabilityId\n owner\n groups\n active\n verified\n requiredValue\n capability {\n id\n active\n sortKey\n name\n description\n requiresValue\n requiredValueLabel\n quantity\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const reloadYardCapabilityByCapability = /* GraphQL */ `\n query ReloadYardCapabilityByCapability(\n $reloadYardId: ID\n $capabilityIdActive: ModelReloadYardCapabilityReloadYardCapabilityByCapabilityCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelReloadYardCapabilityFilterInput\n $limit: Int\n $nextToken: String\n ) {\n reloadYardCapabilityByCapability(\n reloadYardId: $reloadYardId\n capabilityIdActive: $capabilityIdActive\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n reloadYardId\n capabilityId\n owner\n groups\n active\n verified\n requiredValue\n capability {\n id\n active\n sortKey\n name\n description\n requiresValue\n requiredValueLabel\n quantity\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const capabilitiesByActiveBySortKey = /* GraphQL */ `\n query CapabilitiesByActiveBySortKey(\n $active: String\n $sortKey: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelCapabilityFilterInput\n $limit: Int\n $nextToken: String\n ) {\n capabilitiesByActiveBySortKey(\n active: $active\n sortKey: $sortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n active\n sortKey\n name\n description\n requiresValue\n requiredValueLabel\n quantity\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const TagsByName = /* GraphQL */ `\n query TagsByName(\n $reloadYardId: ID\n $name: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelTagFilterInput\n $limit: Int\n $nextToken: String\n ) {\n TagsByName(\n reloadYardId: $reloadYardId\n name: $name\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n reloadYardId\n name\n description\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const locationTagByLocationId = /* GraphQL */ `\n query LocationTagByLocationId(\n $locationId: ID\n $sortDirection: ModelSortDirection\n $filter: ModelLocationTagFilterInput\n $limit: Int\n $nextToken: String\n ) {\n locationTagByLocationId(\n locationId: $locationId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n reloadYardId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n tagId\n tag {\n id\n owner\n groups\n reloadYardId\n name\n description\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const locationTagByTagId = /* GraphQL */ `\n query LocationTagByTagId(\n $tagId: ID\n $sortDirection: ModelSortDirection\n $filter: ModelLocationTagFilterInput\n $limit: Int\n $nextToken: String\n ) {\n locationTagByTagId(\n tagId: $tagId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n reloadYardId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n tagId\n tag {\n id\n owner\n groups\n reloadYardId\n name\n description\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const reloadYardCommodityByActiveBySortKey = /* GraphQL */ `\n query ReloadYardCommodityByActiveBySortKey(\n $reloadYardId: ID\n $activeSortKey: ModelReloadYardCommodityReloadYardCommodityByActiveBySortKeyCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelReloadYardCommodityFilterInput\n $limit: Int\n $nextToken: String\n ) {\n reloadYardCommodityByActiveBySortKey(\n reloadYardId: $reloadYardId\n activeSortKey: $activeSortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const reloadYardCommodityByCommodity = /* GraphQL */ `\n query ReloadYardCommodityByCommodity(\n $reloadYardId: ID\n $commodityIdActive: ModelReloadYardCommodityReloadYardCommodityByCommodityCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelReloadYardCommodityFilterInput\n $limit: Int\n $nextToken: String\n ) {\n reloadYardCommodityByCommodity(\n reloadYardId: $reloadYardId\n commodityIdActive: $commodityIdActive\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const commoditiesByActiveBySortKey = /* GraphQL */ `\n query CommoditiesByActiveBySortKey(\n $active: String\n $sortKey: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelCommodityFilterInput\n $limit: Int\n $nextToken: String\n ) {\n commoditiesByActiveBySortKey(\n active: $active\n sortKey: $sortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const announcementsByUrgencyByDate = /* GraphQL */ `\n query AnnouncementsByUrgencyByDate(\n $active: String\n $urgencyCreateDateTime: ModelAnnouncementAnnouncementsByUrgencyByDateCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAnnouncementFilterInput\n $limit: Int\n $nextToken: String\n ) {\n announcementsByUrgencyByDate(\n active: $active\n urgencyCreateDateTime: $urgencyCreateDateTime\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n active\n createDateTime\n message\n urgency\n link\n tenantId\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const helpPageByUrl = /* GraphQL */ `\n query HelpPageByUrl(\n $active: String\n $url: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelHelpPageFilterInput\n $limit: Int\n $nextToken: String\n ) {\n helpPageByUrl(\n active: $active\n url: $url\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n active\n isLive\n url\n topic\n name\n content\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const logByDateByUser = /* GraphQL */ `\n query LogByDateByUser(\n $tenantId: String\n $createdAtUser: ModelLogLogByDateByUserCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelLogFilterInput\n $limit: Int\n $nextToken: String\n ) {\n logByDateByUser(\n tenantId: $tenantId\n createdAtUser: $createdAtUser\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n status\n createdAt\n appType\n tenantId\n user\n message\n exception\n appVersion\n url\n context\n owner\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const logByDateByTenant = /* GraphQL */ `\n query LogByDateByTenant(\n $status: String\n $createdAtTenantId: ModelLogLogByDateByTenantCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelLogFilterInput\n $limit: Int\n $nextToken: String\n ) {\n logByDateByTenant(\n status: $status\n createdAtTenantId: $createdAtTenantId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n status\n createdAt\n appType\n tenantId\n user\n message\n exception\n appVersion\n url\n context\n owner\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const filesByName = /* GraphQL */ `\n query FilesByName(\n $reloadYardId: ID\n $displayName: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelFileFilterInput\n $limit: Int\n $nextToken: String\n ) {\n filesByName(\n reloadYardId: $reloadYardId\n displayName: $displayName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n displayName\n rawFileName\n description\n contentDate\n category\n visibility\n file {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const filesByRawName = /* GraphQL */ `\n query FilesByRawName(\n $reloadYardId: ID\n $rawFileName: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelFileFilterInput\n $limit: Int\n $nextToken: String\n ) {\n filesByRawName(\n reloadYardId: $reloadYardId\n rawFileName: $rawFileName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n displayName\n rawFileName\n description\n contentDate\n category\n visibility\n file {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const sealByReferenceId = /* GraphQL */ `\n query SealByReferenceId(\n $referenceId: ID\n $sortDirection: ModelSortDirection\n $filter: ModelSealFilterInput\n $limit: Int\n $nextToken: String\n ) {\n sealByReferenceId(\n referenceId: $referenceId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const userByEmail = /* GraphQL */ `\n query UserByEmail(\n $email: String\n $sortDirection: ModelSortDirection\n $filter: ModelUserFilterInput\n $limit: Int\n $nextToken: String\n ) {\n userByEmail(\n email: $email\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n cognitoId\n type\n firstName\n lastName\n fullName\n phone\n email\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n reloadYardId\n acl\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const userByActiveByLastName = /* GraphQL */ `\n query UserByActiveByLastName(\n $reloadYardId: ID\n $activeLastName: ModelUserUserByActiveByLastNameCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelUserFilterInput\n $limit: Int\n $nextToken: String\n ) {\n userByActiveByLastName(\n reloadYardId: $reloadYardId\n activeLastName: $activeLastName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n cognitoId\n type\n firstName\n lastName\n fullName\n phone\n email\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n reloadYardId\n acl\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const searchAccounts = /* GraphQL */ `\n query SearchAccounts(\n $filter: SearchableAccountFilterInput\n $sort: SearchableAccountSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchAccounts(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchCustomerReloadYardAccounts = /* GraphQL */ `\n query SearchCustomerReloadYardAccounts(\n $filter: SearchableCustomerReloadYardAccountFilterInput\n $sort: SearchableCustomerReloadYardAccountSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchCustomerReloadYardAccounts(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n owner\n active\n groups\n customerId\n email\n lastName\n reloadYardId\n accountId\n accountName\n acl\n customer {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n createdAt\n updatedAt\n }\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchInboundShipments = /* GraphQL */ `\n query SearchInboundShipments(\n $filter: SearchableInboundShipmentFilterInput\n $sort: SearchableInboundShipmentSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInboundShipments(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchProducts = /* GraphQL */ `\n query SearchProducts(\n $filter: SearchableProductFilterInput\n $sort: SearchableProductSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchProducts(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchInventorys = /* GraphQL */ `\n query SearchInventorys(\n $filter: SearchableInventoryFilterInput\n $sort: SearchableInventorySortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInventorys(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchInventoryItems = /* GraphQL */ `\n query SearchInventoryItems(\n $filter: SearchableInventoryItemFilterInput\n $sort: SearchableInventoryItemSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInventoryItems(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n nextToken\n }\n barcodes {\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchOutboundShipments = /* GraphQL */ `\n query SearchOutboundShipments(\n $filter: SearchableOutboundShipmentFilterInput\n $sort: SearchableOutboundShipmentSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchOutboundShipments(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchInvoices = /* GraphQL */ `\n query SearchInvoices(\n $filter: SearchableInvoiceFilterInput\n $sort: SearchableInvoiceSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInvoices(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchReloadYards = /* GraphQL */ `\n query SearchReloadYards(\n $filter: SearchableReloadYardFilterInput\n $sort: SearchableReloadYardSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchReloadYards(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n logoImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n areas {\n nextToken\n }\n zones {\n nextToken\n }\n aisles {\n nextToken\n }\n yardCommodities {\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n timeZone\n assetTypes {\n nextToken\n }\n eventTypes {\n nextToken\n }\n checklists {\n nextToken\n }\n apiKeys {\n nextToken\n }\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchAssetTypes = /* GraphQL */ `\n query SearchAssetTypes(\n $filter: SearchableAssetTypeFilterInput\n $sort: SearchableAssetTypeSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchAssetTypes(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchEventTypes = /* GraphQL */ `\n query SearchEventTypes(\n $filter: SearchableEventTypeFilterInput\n $sort: SearchableEventTypeSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchEventTypes(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n assetType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchTimeslots = /* GraphQL */ `\n query SearchTimeslots(\n $filter: SearchableTimeslotFilterInput\n $sort: SearchableTimeslotSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchTimeslots(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchHelpPages = /* GraphQL */ `\n query SearchHelpPages(\n $filter: SearchableHelpPageFilterInput\n $sort: SearchableHelpPageSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchHelpPages(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n active\n isLive\n url\n topic\n name\n content\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchLogs = /* GraphQL */ `\n query SearchLogs(\n $filter: SearchableLogFilterInput\n $sort: SearchableLogSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchLogs(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n status\n createdAt\n appType\n tenantId\n user\n message\n exception\n appVersion\n url\n context\n owner\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchFiles = /* GraphQL */ `\n query SearchFiles(\n $filter: SearchableFileFilterInput\n $sort: SearchableFileSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchFiles(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n displayName\n rawFileName\n description\n contentDate\n category\n visibility\n file {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchSeals = /* GraphQL */ `\n query SearchSeals(\n $filter: SearchableSealFilterInput\n $sort: SearchableSealSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchSeals(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\nexport const searchUsers = /* GraphQL */ `\n query SearchUsers(\n $filter: SearchableUserFilterInput\n $sort: SearchableUserSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchUsers(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n owner\n groups\n active\n status\n cognitoId\n type\n firstName\n lastName\n fullName\n phone\n email\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n reloadYardId\n acl\n createdAt\n updatedAt\n }\n nextToken\n total\n }\n }\n`;\n","/* eslint-disable */\n// this is an auto generated file. This will be overwritten\n\nexport const createAccount = /* GraphQL */ `\n mutation CreateAccount(\n $input: CreateAccountInput!\n $condition: ModelAccountConditionInput\n ) {\n createAccount(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n items {\n id\n owner\n groups\n active\n status\n name\n description\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n nextToken\n }\n products {\n items {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n checklists {\n items {\n id\n owner\n groups\n active\n reloadYardId\n resourceId\n name\n description\n processName\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateAccount = /* GraphQL */ `\n mutation UpdateAccount(\n $input: UpdateAccountInput!\n $condition: ModelAccountConditionInput\n ) {\n updateAccount(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n items {\n id\n owner\n groups\n active\n status\n name\n description\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n nextToken\n }\n products {\n items {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n checklists {\n items {\n id\n owner\n groups\n active\n reloadYardId\n resourceId\n name\n description\n processName\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteAccount = /* GraphQL */ `\n mutation DeleteAccount(\n $input: DeleteAccountInput!\n $condition: ModelAccountConditionInput\n ) {\n deleteAccount(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n items {\n id\n owner\n groups\n active\n status\n name\n description\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n nextToken\n }\n products {\n items {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n checklists {\n items {\n id\n owner\n groups\n active\n reloadYardId\n resourceId\n name\n description\n processName\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createApiKey = /* GraphQL */ `\n mutation CreateApiKey(\n $input: CreateApiKeyInput!\n $condition: ModelApiKeyConditionInput\n ) {\n createApiKey(input: $input, condition: $condition) {\n id\n active\n groups\n reloadYardId\n name\n keyId\n createdBy\n deletedBy\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateApiKey = /* GraphQL */ `\n mutation UpdateApiKey(\n $input: UpdateApiKeyInput!\n $condition: ModelApiKeyConditionInput\n ) {\n updateApiKey(input: $input, condition: $condition) {\n id\n active\n groups\n reloadYardId\n name\n keyId\n createdBy\n deletedBy\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteApiKey = /* GraphQL */ `\n mutation DeleteApiKey(\n $input: DeleteApiKeyInput!\n $condition: ModelApiKeyConditionInput\n ) {\n deleteApiKey(input: $input, condition: $condition) {\n id\n active\n groups\n reloadYardId\n name\n keyId\n createdBy\n deletedBy\n createdAt\n updatedAt\n }\n }\n`;\nexport const createBarcode = /* GraphQL */ `\n mutation CreateBarcode(\n $input: CreateBarcodeInput!\n $condition: ModelBarcodeConditionInput\n ) {\n createBarcode(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n reloadYardId\n value\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n nextToken\n }\n barcodes {\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateBarcode = /* GraphQL */ `\n mutation UpdateBarcode(\n $input: UpdateBarcodeInput!\n $condition: ModelBarcodeConditionInput\n ) {\n updateBarcode(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n reloadYardId\n value\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n nextToken\n }\n barcodes {\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteBarcode = /* GraphQL */ `\n mutation DeleteBarcode(\n $input: DeleteBarcodeInput!\n $condition: ModelBarcodeConditionInput\n ) {\n deleteBarcode(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n reloadYardId\n value\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n nextToken\n }\n barcodes {\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createCustomer = /* GraphQL */ `\n mutation CreateCustomer(\n $input: CreateCustomerInput!\n $condition: ModelCustomerConditionInput\n ) {\n createCustomer(input: $input, condition: $condition) {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n reloadYardAccounts {\n items {\n id\n owner\n active\n groups\n customerId\n email\n lastName\n reloadYardId\n accountId\n accountName\n acl\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateCustomer = /* GraphQL */ `\n mutation UpdateCustomer(\n $input: UpdateCustomerInput!\n $condition: ModelCustomerConditionInput\n ) {\n updateCustomer(input: $input, condition: $condition) {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n reloadYardAccounts {\n items {\n id\n owner\n active\n groups\n customerId\n email\n lastName\n reloadYardId\n accountId\n accountName\n acl\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteCustomer = /* GraphQL */ `\n mutation DeleteCustomer(\n $input: DeleteCustomerInput!\n $condition: ModelCustomerConditionInput\n ) {\n deleteCustomer(input: $input, condition: $condition) {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n reloadYardAccounts {\n items {\n id\n owner\n active\n groups\n customerId\n email\n lastName\n reloadYardId\n accountId\n accountName\n acl\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createCustomerReloadYardAccount = /* GraphQL */ `\n mutation CreateCustomerReloadYardAccount(\n $input: CreateCustomerReloadYardAccountInput!\n $condition: ModelCustomerReloadYardAccountConditionInput\n ) {\n createCustomerReloadYardAccount(input: $input, condition: $condition) {\n id\n owner\n active\n groups\n customerId\n email\n lastName\n reloadYardId\n accountId\n accountName\n acl\n customer {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n reloadYardAccounts {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n logoImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n areas {\n nextToken\n }\n zones {\n nextToken\n }\n aisles {\n nextToken\n }\n yardCommodities {\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n timeZone\n assetTypes {\n nextToken\n }\n eventTypes {\n nextToken\n }\n checklists {\n nextToken\n }\n apiKeys {\n nextToken\n }\n createdAt\n updatedAt\n }\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateCustomerReloadYardAccount = /* GraphQL */ `\n mutation UpdateCustomerReloadYardAccount(\n $input: UpdateCustomerReloadYardAccountInput!\n $condition: ModelCustomerReloadYardAccountConditionInput\n ) {\n updateCustomerReloadYardAccount(input: $input, condition: $condition) {\n id\n owner\n active\n groups\n customerId\n email\n lastName\n reloadYardId\n accountId\n accountName\n acl\n customer {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n reloadYardAccounts {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n logoImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n areas {\n nextToken\n }\n zones {\n nextToken\n }\n aisles {\n nextToken\n }\n yardCommodities {\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n timeZone\n assetTypes {\n nextToken\n }\n eventTypes {\n nextToken\n }\n checklists {\n nextToken\n }\n apiKeys {\n nextToken\n }\n createdAt\n updatedAt\n }\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteCustomerReloadYardAccount = /* GraphQL */ `\n mutation DeleteCustomerReloadYardAccount(\n $input: DeleteCustomerReloadYardAccountInput!\n $condition: ModelCustomerReloadYardAccountConditionInput\n ) {\n deleteCustomerReloadYardAccount(input: $input, condition: $condition) {\n id\n owner\n active\n groups\n customerId\n email\n lastName\n reloadYardId\n accountId\n accountName\n acl\n customer {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n reloadYardAccounts {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n logoImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n areas {\n nextToken\n }\n zones {\n nextToken\n }\n aisles {\n nextToken\n }\n yardCommodities {\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n timeZone\n assetTypes {\n nextToken\n }\n eventTypes {\n nextToken\n }\n checklists {\n nextToken\n }\n apiKeys {\n nextToken\n }\n createdAt\n updatedAt\n }\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createInboundShipment = /* GraphQL */ `\n mutation CreateInboundShipment(\n $input: CreateInboundShipmentInput!\n $condition: ModelInboundShipmentConditionInput\n ) {\n createInboundShipment(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateInboundShipment = /* GraphQL */ `\n mutation UpdateInboundShipment(\n $input: UpdateInboundShipmentInput!\n $condition: ModelInboundShipmentConditionInput\n ) {\n updateInboundShipment(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteInboundShipment = /* GraphQL */ `\n mutation DeleteInboundShipment(\n $input: DeleteInboundShipmentInput!\n $condition: ModelInboundShipmentConditionInput\n ) {\n deleteInboundShipment(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createSetupData = /* GraphQL */ `\n mutation CreateSetupData(\n $input: CreateSetupDataInput!\n $condition: ModelSetupDataConditionInput\n ) {\n createSetupData(input: $input, condition: $condition) {\n id\n owner\n groups\n status\n cognitoId\n firstName\n lastName\n businessName\n setupData\n submitDate\n approvalDate\n approvedBy\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateSetupData = /* GraphQL */ `\n mutation UpdateSetupData(\n $input: UpdateSetupDataInput!\n $condition: ModelSetupDataConditionInput\n ) {\n updateSetupData(input: $input, condition: $condition) {\n id\n owner\n groups\n status\n cognitoId\n firstName\n lastName\n businessName\n setupData\n submitDate\n approvalDate\n approvedBy\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteSetupData = /* GraphQL */ `\n mutation DeleteSetupData(\n $input: DeleteSetupDataInput!\n $condition: ModelSetupDataConditionInput\n ) {\n deleteSetupData(input: $input, condition: $condition) {\n id\n owner\n groups\n status\n cognitoId\n firstName\n lastName\n businessName\n setupData\n submitDate\n approvalDate\n approvedBy\n createdAt\n updatedAt\n }\n }\n`;\nexport const createTask = /* GraphQL */ `\n mutation CreateTask(\n $input: CreateTaskInput!\n $condition: ModelTaskConditionInput\n ) {\n createTask(input: $input, condition: $condition) {\n id\n owner\n groups\n status\n reloadYardId\n createdAt\n updatedAt\n name\n description\n assignedTo\n assignedToName\n allowReassign\n link\n priority\n reference\n category\n dueDate\n lateDate\n completedBy\n completedDate\n resolvedDate\n resolvedBy\n note\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n }\n }\n`;\nexport const updateTask = /* GraphQL */ `\n mutation UpdateTask(\n $input: UpdateTaskInput!\n $condition: ModelTaskConditionInput\n ) {\n updateTask(input: $input, condition: $condition) {\n id\n owner\n groups\n status\n reloadYardId\n createdAt\n updatedAt\n name\n description\n assignedTo\n assignedToName\n allowReassign\n link\n priority\n reference\n category\n dueDate\n lateDate\n completedBy\n completedDate\n resolvedDate\n resolvedBy\n note\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n }\n }\n`;\nexport const deleteTask = /* GraphQL */ `\n mutation DeleteTask(\n $input: DeleteTaskInput!\n $condition: ModelTaskConditionInput\n ) {\n deleteTask(input: $input, condition: $condition) {\n id\n owner\n groups\n status\n reloadYardId\n createdAt\n updatedAt\n name\n description\n assignedTo\n assignedToName\n allowReassign\n link\n priority\n reference\n category\n dueDate\n lateDate\n completedBy\n completedDate\n resolvedDate\n resolvedBy\n note\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n }\n }\n`;\nexport const createProduct = /* GraphQL */ `\n mutation CreateProduct(\n $input: CreateProductInput!\n $condition: ModelProductConditionInput\n ) {\n createProduct(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateProduct = /* GraphQL */ `\n mutation UpdateProduct(\n $input: UpdateProductInput!\n $condition: ModelProductConditionInput\n ) {\n updateProduct(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteProduct = /* GraphQL */ `\n mutation DeleteProduct(\n $input: DeleteProductInput!\n $condition: ModelProductConditionInput\n ) {\n deleteProduct(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createInventorie = /* GraphQL */ `\n mutation CreateInventorie(\n $input: CreateInventoryInput!\n $condition: ModelInventoryConditionInput\n ) {\n createInventorie(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n nextToken\n }\n createdAt\n updatedAt\n }\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n outboundShipmentId\n accountId\n reloadYardId\n inventoryId\n createdAt\n updatedAt\n }\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n items {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n barcode\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n createdAt\n updatedAt\n }\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateInventorie = /* GraphQL */ `\n mutation UpdateInventorie(\n $input: UpdateInventoryInput!\n $condition: ModelInventoryConditionInput\n ) {\n updateInventorie(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n nextToken\n }\n createdAt\n updatedAt\n }\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n outboundShipmentId\n accountId\n reloadYardId\n inventoryId\n createdAt\n updatedAt\n }\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n items {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n barcode\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n createdAt\n updatedAt\n }\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteInventorie = /* GraphQL */ `\n mutation DeleteInventorie(\n $input: DeleteInventoryInput!\n $condition: ModelInventoryConditionInput\n ) {\n deleteInventorie(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n nextToken\n }\n createdAt\n updatedAt\n }\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n outboundShipmentId\n accountId\n reloadYardId\n inventoryId\n createdAt\n updatedAt\n }\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n items {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n barcode\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n createdAt\n updatedAt\n }\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n }\n`;\nexport const createInventoryItem = /* GraphQL */ `\n mutation CreateInventoryItem(\n $input: CreateInventoryItemInput!\n $condition: ModelInventoryItemConditionInput\n ) {\n createInventoryItem(input: $input, condition: $condition) {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n barcodes {\n items {\n id\n owner\n groups\n active\n status\n reloadYardId\n value\n inventoryItemId\n createdAt\n updatedAt\n }\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateInventoryItem = /* GraphQL */ `\n mutation UpdateInventoryItem(\n $input: UpdateInventoryItemInput!\n $condition: ModelInventoryItemConditionInput\n ) {\n updateInventoryItem(input: $input, condition: $condition) {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n barcodes {\n items {\n id\n owner\n groups\n active\n status\n reloadYardId\n value\n inventoryItemId\n createdAt\n updatedAt\n }\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteInventoryItem = /* GraphQL */ `\n mutation DeleteInventoryItem(\n $input: DeleteInventoryItemInput!\n $condition: ModelInventoryItemConditionInput\n ) {\n deleteInventoryItem(input: $input, condition: $condition) {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n barcodes {\n items {\n id\n owner\n groups\n active\n status\n reloadYardId\n value\n inventoryItemId\n createdAt\n updatedAt\n }\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createShipmentLineItemInventoryItem = /* GraphQL */ `\n mutation CreateShipmentLineItemInventoryItem(\n $input: CreateShipmentLineItemInventoryItemInput!\n $condition: ModelShipmentLineItemInventoryItemConditionInput\n ) {\n createShipmentLineItemInventoryItem(input: $input, condition: $condition) {\n id\n owner\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryId\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n nextToken\n }\n barcodes {\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n quantityToPick\n status\n hasException\n barcodeException\n barcodeExceptionNote\n otherException\n otherExceptionNote\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateShipmentLineItemInventoryItem = /* GraphQL */ `\n mutation UpdateShipmentLineItemInventoryItem(\n $input: UpdateShipmentLineItemInventoryItemInput!\n $condition: ModelShipmentLineItemInventoryItemConditionInput\n ) {\n updateShipmentLineItemInventoryItem(input: $input, condition: $condition) {\n id\n owner\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryId\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n nextToken\n }\n barcodes {\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n quantityToPick\n status\n hasException\n barcodeException\n barcodeExceptionNote\n otherException\n otherExceptionNote\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteShipmentLineItemInventoryItem = /* GraphQL */ `\n mutation DeleteShipmentLineItemInventoryItem(\n $input: DeleteShipmentLineItemInventoryItemInput!\n $condition: ModelShipmentLineItemInventoryItemConditionInput\n ) {\n deleteShipmentLineItemInventoryItem(input: $input, condition: $condition) {\n id\n owner\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryId\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n accountId\n inboundShipmentId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n createdAt\n updatedAt\n }\n barcode\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n seals {\n nextToken\n }\n barcodes {\n nextToken\n }\n history {\n type\n date\n by\n text\n public\n }\n createdAt\n updatedAt\n }\n quantityToPick\n status\n hasException\n barcodeException\n barcodeExceptionNote\n otherException\n otherExceptionNote\n createdAt\n updatedAt\n }\n }\n`;\nexport const createAudit = /* GraphQL */ `\n mutation CreateAudit(\n $input: CreateAuditInput!\n $condition: ModelAuditConditionInput\n ) {\n createAudit(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n createdAt\n createDateTime\n notes\n reloadYardId\n processedItems\n processedLocations\n skippedItems\n nextItem\n nextItems {\n locationIdx\n owner\n name\n }\n direction\n accountId\n accountName\n assignedTo\n locations\n startDateTime\n endDateTime\n updatedAt\n }\n }\n`;\nexport const updateAudit = /* GraphQL */ `\n mutation UpdateAudit(\n $input: UpdateAuditInput!\n $condition: ModelAuditConditionInput\n ) {\n updateAudit(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n createdAt\n createDateTime\n notes\n reloadYardId\n processedItems\n processedLocations\n skippedItems\n nextItem\n nextItems {\n locationIdx\n owner\n name\n }\n direction\n accountId\n accountName\n assignedTo\n locations\n startDateTime\n endDateTime\n updatedAt\n }\n }\n`;\nexport const deleteAudit = /* GraphQL */ `\n mutation DeleteAudit(\n $input: DeleteAuditInput!\n $condition: ModelAuditConditionInput\n ) {\n deleteAudit(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n createdAt\n createDateTime\n notes\n reloadYardId\n processedItems\n processedLocations\n skippedItems\n nextItem\n nextItems {\n locationIdx\n owner\n name\n }\n direction\n accountId\n accountName\n assignedTo\n locations\n startDateTime\n endDateTime\n updatedAt\n }\n }\n`;\nexport const createChecklist = /* GraphQL */ `\n mutation CreateChecklist(\n $input: CreateChecklistInput!\n $condition: ModelChecklistConditionInput\n ) {\n createChecklist(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n resourceId\n name\n description\n processName\n checklistItems {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateChecklist = /* GraphQL */ `\n mutation UpdateChecklist(\n $input: UpdateChecklistInput!\n $condition: ModelChecklistConditionInput\n ) {\n updateChecklist(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n resourceId\n name\n description\n processName\n checklistItems {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteChecklist = /* GraphQL */ `\n mutation DeleteChecklist(\n $input: DeleteChecklistInput!\n $condition: ModelChecklistConditionInput\n ) {\n deleteChecklist(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n resourceId\n name\n description\n processName\n checklistItems {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n }\n }\n`;\nexport const createShipmentLineItem = /* GraphQL */ `\n mutation CreateShipmentLineItem(\n $input: CreateShipmentLineItemInput!\n $condition: ModelShipmentLineItemConditionInput\n ) {\n createShipmentLineItem(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n pickupPhoto {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n accountId\n reloadYardId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n inventoryItems {\n items {\n id\n owner\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryId\n inventoryItemId\n quantityToPick\n status\n hasException\n barcodeException\n barcodeExceptionNote\n otherException\n otherExceptionNote\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateShipmentLineItem = /* GraphQL */ `\n mutation UpdateShipmentLineItem(\n $input: UpdateShipmentLineItemInput!\n $condition: ModelShipmentLineItemConditionInput\n ) {\n updateShipmentLineItem(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n pickupPhoto {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n accountId\n reloadYardId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n inventoryItems {\n items {\n id\n owner\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryId\n inventoryItemId\n quantityToPick\n status\n hasException\n barcodeException\n barcodeExceptionNote\n otherException\n otherExceptionNote\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteShipmentLineItem = /* GraphQL */ `\n mutation DeleteShipmentLineItem(\n $input: DeleteShipmentLineItemInput!\n $condition: ModelShipmentLineItemConditionInput\n ) {\n deleteShipmentLineItem(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n pickupPhoto {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n accountId\n reloadYardId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n receivedDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n containerNumber\n outboundShipmentId\n latitude\n longitude\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n height\n width\n length\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n shipmentLineItems {\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n aggregateInventoryId\n inventoryItems {\n nextToken\n }\n customFields\n createdAt\n updatedAt\n }\n inventoryItems {\n items {\n id\n owner\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryId\n inventoryItemId\n quantityToPick\n status\n hasException\n barcodeException\n barcodeExceptionNote\n otherException\n otherExceptionNote\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createOutboundShipment = /* GraphQL */ `\n mutation CreateOutboundShipment(\n $input: CreateOutboundShipmentInput!\n $condition: ModelOutboundShipmentConditionInput\n ) {\n createOutboundShipment(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n outboundShipmentId\n accountId\n reloadYardId\n inventoryId\n createdAt\n updatedAt\n }\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateOutboundShipment = /* GraphQL */ `\n mutation UpdateOutboundShipment(\n $input: UpdateOutboundShipmentInput!\n $condition: ModelOutboundShipmentConditionInput\n ) {\n updateOutboundShipment(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n outboundShipmentId\n accountId\n reloadYardId\n inventoryId\n createdAt\n updatedAt\n }\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteOutboundShipment = /* GraphQL */ `\n mutation DeleteOutboundShipment(\n $input: DeleteOutboundShipmentInput!\n $condition: ModelOutboundShipmentConditionInput\n ) {\n deleteOutboundShipment(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n outboundShipmentId\n accountId\n reloadYardId\n inventoryId\n createdAt\n updatedAt\n }\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n invoiceNumberPrefix\n invoiceCounter\n bolCounter\n receiptCounter\n timeZone\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n containerDrop\n containerNumber\n customFields\n timeslotId\n stepName\n sealNumbers\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n sealNumber\n assignedTo\n instructions\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n reloadYardId\n invoiceId\n customFields\n timeslotId\n advisedBy\n stepName\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n }\n`;\nexport const createInvoice = /* GraphQL */ `\n mutation CreateInvoice(\n $input: CreateInvoiceInput!\n $condition: ModelInvoiceConditionInput\n ) {\n createInvoice(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n items {\n id\n invoiceId\n serviceId\n accountId\n reloadYardId\n owner\n groups\n quantity\n units\n unitCost\n amount\n itemTax\n serviceNote\n serviceDate\n createdAt\n updatedAt\n }\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n logoImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n areas {\n nextToken\n }\n zones {\n nextToken\n }\n aisles {\n nextToken\n }\n yardCommodities {\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n timeZone\n assetTypes {\n nextToken\n }\n eventTypes {\n nextToken\n }\n checklists {\n nextToken\n }\n apiKeys {\n nextToken\n }\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n nextToken\n }\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateInvoice = /* GraphQL */ `\n mutation UpdateInvoice(\n $input: UpdateInvoiceInput!\n $condition: ModelInvoiceConditionInput\n ) {\n updateInvoice(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n items {\n id\n invoiceId\n serviceId\n accountId\n reloadYardId\n owner\n groups\n quantity\n units\n unitCost\n amount\n itemTax\n serviceNote\n serviceDate\n createdAt\n updatedAt\n }\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n logoImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n areas {\n nextToken\n }\n zones {\n nextToken\n }\n aisles {\n nextToken\n }\n yardCommodities {\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n timeZone\n assetTypes {\n nextToken\n }\n eventTypes {\n nextToken\n }\n checklists {\n nextToken\n }\n apiKeys {\n nextToken\n }\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n nextToken\n }\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteInvoice = /* GraphQL */ `\n mutation DeleteInvoice(\n $input: DeleteInvoiceInput!\n $condition: ModelInvoiceConditionInput\n ) {\n deleteInvoice(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n lineItems {\n items {\n id\n invoiceId\n serviceId\n accountId\n reloadYardId\n owner\n groups\n quantity\n units\n unitCost\n amount\n itemTax\n serviceNote\n serviceDate\n createdAt\n updatedAt\n }\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n public\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n checklists {\n nextToken\n }\n createdAt\n updatedAt\n }\n contact {\n name\n email\n phone\n description\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n reloadYardId\n reloadYard {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n logoImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n areas {\n nextToken\n }\n zones {\n nextToken\n }\n aisles {\n nextToken\n }\n yardCommodities {\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n timeZone\n assetTypes {\n nextToken\n }\n eventTypes {\n nextToken\n }\n checklists {\n nextToken\n }\n apiKeys {\n nextToken\n }\n createdAt\n updatedAt\n }\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n containerDrop\n containerNumber\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n stepName\n sealNumbers\n seals {\n nextToken\n }\n createdAt\n updatedAt\n }\n outboundShipmentId\n outboundShipment {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n didTarp\n containerPickup\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n sealNumber\n assignedTo\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n public\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n trackId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n businessName\n displayName\n accountNumber\n corporateAccount\n lotNumberPrefix\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n invoiceAttachments\n addressState\n reloadYardId\n inboundInstructions\n secondaryReview\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n outboundEventTypeId\n generatePickupNumber\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n createdAt\n updatedAt\n }\n reloadYardId\n shipmentLineItems {\n nextToken\n }\n invoiceId\n invoice {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n paymentTerms\n dueDate\n serviceDate\n sentDate\n paidDate\n pendingDateTime\n settledDateTime\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n createdAt\n updatedAt\n }\n advisedBy\n stepName\n seals {\n nextToken\n }\n hasException\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createInvoiceService = /* GraphQL */ `\n mutation CreateInvoiceService(\n $input: CreateInvoiceServiceInput!\n $condition: ModelInvoiceServiceConditionInput\n ) {\n createInvoiceService(input: $input, condition: $condition) {\n id\n invoiceId\n serviceId\n service {\n id\n owner\n groups\n active\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n accountId\n reloadYardId\n owner\n groups\n quantity\n units\n unitCost\n amount\n itemTax\n taxRate {\n taxCode\n taxRate\n }\n serviceNote\n serviceDate\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateInvoiceService = /* GraphQL */ `\n mutation UpdateInvoiceService(\n $input: UpdateInvoiceServiceInput!\n $condition: ModelInvoiceServiceConditionInput\n ) {\n updateInvoiceService(input: $input, condition: $condition) {\n id\n invoiceId\n serviceId\n service {\n id\n owner\n groups\n active\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n accountId\n reloadYardId\n owner\n groups\n quantity\n units\n unitCost\n amount\n itemTax\n taxRate {\n taxCode\n taxRate\n }\n serviceNote\n serviceDate\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteInvoiceService = /* GraphQL */ `\n mutation DeleteInvoiceService(\n $input: DeleteInvoiceServiceInput!\n $condition: ModelInvoiceServiceConditionInput\n ) {\n deleteInvoiceService(input: $input, condition: $condition) {\n id\n invoiceId\n serviceId\n service {\n id\n owner\n groups\n active\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n accountId\n reloadYardId\n owner\n groups\n quantity\n units\n unitCost\n amount\n itemTax\n taxRate {\n taxCode\n taxRate\n }\n serviceNote\n serviceDate\n createdAt\n updatedAt\n }\n }\n`;\nexport const createService = /* GraphQL */ `\n mutation CreateService(\n $input: CreateServiceInput!\n $condition: ModelServiceConditionInput\n ) {\n createService(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateService = /* GraphQL */ `\n mutation UpdateService(\n $input: UpdateServiceInput!\n $condition: ModelServiceConditionInput\n ) {\n updateService(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteService = /* GraphQL */ `\n mutation DeleteService(\n $input: DeleteServiceInput!\n $condition: ModelServiceConditionInput\n ) {\n deleteService(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n history {\n type\n date\n by\n text\n public\n }\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n }\n`;\nexport const createArea = /* GraphQL */ `\n mutation CreateArea(\n $input: CreateAreaInput!\n $condition: ModelAreaConditionInput\n ) {\n createArea(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateArea = /* GraphQL */ `\n mutation UpdateArea(\n $input: UpdateAreaInput!\n $condition: ModelAreaConditionInput\n ) {\n updateArea(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteArea = /* GraphQL */ `\n mutation DeleteArea(\n $input: DeleteAreaInput!\n $condition: ModelAreaConditionInput\n ) {\n deleteArea(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createZone = /* GraphQL */ `\n mutation CreateZone(\n $input: CreateZoneInput!\n $condition: ModelZoneConditionInput\n ) {\n createZone(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateZone = /* GraphQL */ `\n mutation UpdateZone(\n $input: UpdateZoneInput!\n $condition: ModelZoneConditionInput\n ) {\n updateZone(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteZone = /* GraphQL */ `\n mutation DeleteZone(\n $input: DeleteZoneInput!\n $condition: ModelZoneConditionInput\n ) {\n deleteZone(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n }\n`;\nexport const createAisle = /* GraphQL */ `\n mutation CreateAisle(\n $input: CreateAisleInput!\n $condition: ModelAisleConditionInput\n ) {\n createAisle(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n locations {\n items {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n nextToken\n }\n bays\n levels\n positions\n totalLocations\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateAisle = /* GraphQL */ `\n mutation UpdateAisle(\n $input: UpdateAisleInput!\n $condition: ModelAisleConditionInput\n ) {\n updateAisle(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n locations {\n items {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n nextToken\n }\n bays\n levels\n positions\n totalLocations\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteAisle = /* GraphQL */ `\n mutation DeleteAisle(\n $input: DeleteAisleInput!\n $condition: ModelAisleConditionInput\n ) {\n deleteAisle(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n locations {\n items {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n createdAt\n updatedAt\n }\n nextToken\n }\n bays\n levels\n positions\n totalLocations\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n }\n`;\nexport const createLocation = /* GraphQL */ `\n mutation CreateLocation(\n $input: CreateLocationInput!\n $condition: ModelLocationConditionInput\n ) {\n createLocation(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n locations {\n nextToken\n }\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n items {\n id\n owner\n groups\n reloadYardId\n locationId\n tagId\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateLocation = /* GraphQL */ `\n mutation UpdateLocation(\n $input: UpdateLocationInput!\n $condition: ModelLocationConditionInput\n ) {\n updateLocation(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n locations {\n nextToken\n }\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n items {\n id\n owner\n groups\n reloadYardId\n locationId\n tagId\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteLocation = /* GraphQL */ `\n mutation DeleteLocation(\n $input: DeleteLocationInput!\n $condition: ModelLocationConditionInput\n ) {\n deleteLocation(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n zones {\n nextToken\n }\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n aisles {\n nextToken\n }\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n locations {\n nextToken\n }\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n items {\n id\n owner\n groups\n reloadYardId\n locationId\n tagId\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createReloadYard = /* GraphQL */ `\n mutation CreateReloadYard(\n $input: CreateReloadYardInput!\n $condition: ModelReloadYardConditionInput\n ) {\n createReloadYard(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n logoImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n areas {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n zones {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n aisles {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n nextToken\n }\n yardCommodities {\n items {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n schedule {\n workdays {\n id\n name\n startDayTime\n endDayTime\n selected\n }\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n timeZone\n assetTypes {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n nextToken\n }\n eventTypes {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n nextToken\n }\n checklists {\n items {\n id\n owner\n groups\n active\n reloadYardId\n resourceId\n name\n description\n processName\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n }\n nextToken\n }\n apiKeys {\n items {\n id\n active\n groups\n reloadYardId\n name\n keyId\n createdBy\n deletedBy\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateReloadYard = /* GraphQL */ `\n mutation UpdateReloadYard(\n $input: UpdateReloadYardInput!\n $condition: ModelReloadYardConditionInput\n ) {\n updateReloadYard(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n logoImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n areas {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n zones {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n aisles {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n nextToken\n }\n yardCommodities {\n items {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n schedule {\n workdays {\n id\n name\n startDayTime\n endDayTime\n selected\n }\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n timeZone\n assetTypes {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n nextToken\n }\n eventTypes {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n nextToken\n }\n checklists {\n items {\n id\n owner\n groups\n active\n reloadYardId\n resourceId\n name\n description\n processName\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n }\n nextToken\n }\n apiKeys {\n items {\n id\n active\n groups\n reloadYardId\n name\n keyId\n createdBy\n deletedBy\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteReloadYard = /* GraphQL */ `\n mutation DeleteReloadYard(\n $input: DeleteReloadYardInput!\n $condition: ModelReloadYardConditionInput\n ) {\n deleteReloadYard(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n logoImage {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n areas {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n zones {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n aisles {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n nextToken\n }\n yardCommodities {\n items {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n schedule {\n workdays {\n id\n name\n startDayTime\n endDayTime\n selected\n }\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n timeZone\n assetTypes {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n nextToken\n }\n eventTypes {\n items {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n createdAt\n updatedAt\n }\n nextToken\n }\n checklists {\n items {\n id\n owner\n groups\n active\n reloadYardId\n resourceId\n name\n description\n processName\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n }\n nextToken\n }\n apiKeys {\n items {\n id\n active\n groups\n reloadYardId\n name\n keyId\n createdBy\n deletedBy\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createZapierHook = /* GraphQL */ `\n mutation CreateZapierHook(\n $input: CreateZapierHookInput!\n $condition: ModelZapierHookConditionInput\n ) {\n createZapierHook(input: $input, condition: $condition) {\n id\n groups\n active\n reloadYardId\n event\n description\n zapId\n url\n link\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateZapierHook = /* GraphQL */ `\n mutation UpdateZapierHook(\n $input: UpdateZapierHookInput!\n $condition: ModelZapierHookConditionInput\n ) {\n updateZapierHook(input: $input, condition: $condition) {\n id\n groups\n active\n reloadYardId\n event\n description\n zapId\n url\n link\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteZapierHook = /* GraphQL */ `\n mutation DeleteZapierHook(\n $input: DeleteZapierHookInput!\n $condition: ModelZapierHookConditionInput\n ) {\n deleteZapierHook(input: $input, condition: $condition) {\n id\n groups\n active\n reloadYardId\n event\n description\n zapId\n url\n link\n createdAt\n updatedAt\n }\n }\n`;\nexport const createZapierAction = /* GraphQL */ `\n mutation CreateZapierAction(\n $input: CreateZapierActionInput!\n $condition: ModelZapierActionConditionInput\n ) {\n createZapierAction(input: $input, condition: $condition) {\n id\n groups\n active\n reloadYardId\n event\n description\n counter\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateZapierAction = /* GraphQL */ `\n mutation UpdateZapierAction(\n $input: UpdateZapierActionInput!\n $condition: ModelZapierActionConditionInput\n ) {\n updateZapierAction(input: $input, condition: $condition) {\n id\n groups\n active\n reloadYardId\n event\n description\n counter\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteZapierAction = /* GraphQL */ `\n mutation DeleteZapierAction(\n $input: DeleteZapierActionInput!\n $condition: ModelZapierActionConditionInput\n ) {\n deleteZapierAction(input: $input, condition: $condition) {\n id\n groups\n active\n reloadYardId\n event\n description\n counter\n createdAt\n updatedAt\n }\n }\n`;\nexport const createAssetType = /* GraphQL */ `\n mutation CreateAssetType(\n $input: CreateAssetTypeInput!\n $condition: ModelAssetTypeConditionInput\n ) {\n createAssetType(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateAssetType = /* GraphQL */ `\n mutation UpdateAssetType(\n $input: UpdateAssetTypeInput!\n $condition: ModelAssetTypeConditionInput\n ) {\n updateAssetType(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteAssetType = /* GraphQL */ `\n mutation DeleteAssetType(\n $input: DeleteAssetTypeInput!\n $condition: ModelAssetTypeConditionInput\n ) {\n deleteAssetType(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n }\n`;\nexport const createEventType = /* GraphQL */ `\n mutation CreateEventType(\n $input: CreateEventTypeInput!\n $condition: ModelEventTypeConditionInput\n ) {\n createEventType(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n schedule {\n workdays {\n id\n name\n startDayTime\n endDayTime\n selected\n }\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n assetType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateEventType = /* GraphQL */ `\n mutation UpdateEventType(\n $input: UpdateEventTypeInput!\n $condition: ModelEventTypeConditionInput\n ) {\n updateEventType(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n schedule {\n workdays {\n id\n name\n startDayTime\n endDayTime\n selected\n }\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n assetType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteEventType = /* GraphQL */ `\n mutation DeleteEventType(\n $input: DeleteEventTypeInput!\n $condition: ModelEventTypeConditionInput\n ) {\n deleteEventType(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n schedule {\n workdays {\n id\n name\n startDayTime\n endDayTime\n selected\n }\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n assetType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createTimeslot = /* GraphQL */ `\n mutation CreateTimeslot(\n $input: CreateTimeslotInput!\n $condition: ModelTimeslotConditionInput\n ) {\n createTimeslot(input: $input, condition: $condition) {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n assetType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateTimeslot = /* GraphQL */ `\n mutation UpdateTimeslot(\n $input: UpdateTimeslotInput!\n $condition: ModelTimeslotConditionInput\n ) {\n updateTimeslot(input: $input, condition: $condition) {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n assetType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteTimeslot = /* GraphQL */ `\n mutation DeleteTimeslot(\n $input: DeleteTimeslotInput!\n $condition: ModelTimeslotConditionInput\n ) {\n deleteTimeslot(input: $input, condition: $condition) {\n id\n owner\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n description\n schedule {\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n assetType {\n id\n owner\n groups\n active\n reloadYardId\n areaId\n name\n maxConcurrentBookings\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createReloadYardCapability = /* GraphQL */ `\n mutation CreateReloadYardCapability(\n $input: CreateReloadYardCapabilityInput!\n $condition: ModelReloadYardCapabilityConditionInput\n ) {\n createReloadYardCapability(input: $input, condition: $condition) {\n id\n reloadYardId\n capabilityId\n owner\n groups\n active\n verified\n requiredValue\n capability {\n id\n active\n sortKey\n name\n description\n requiresValue\n requiredValueLabel\n quantity\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateReloadYardCapability = /* GraphQL */ `\n mutation UpdateReloadYardCapability(\n $input: UpdateReloadYardCapabilityInput!\n $condition: ModelReloadYardCapabilityConditionInput\n ) {\n updateReloadYardCapability(input: $input, condition: $condition) {\n id\n reloadYardId\n capabilityId\n owner\n groups\n active\n verified\n requiredValue\n capability {\n id\n active\n sortKey\n name\n description\n requiresValue\n requiredValueLabel\n quantity\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteReloadYardCapability = /* GraphQL */ `\n mutation DeleteReloadYardCapability(\n $input: DeleteReloadYardCapabilityInput!\n $condition: ModelReloadYardCapabilityConditionInput\n ) {\n deleteReloadYardCapability(input: $input, condition: $condition) {\n id\n reloadYardId\n capabilityId\n owner\n groups\n active\n verified\n requiredValue\n capability {\n id\n active\n sortKey\n name\n description\n requiresValue\n requiredValueLabel\n quantity\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createCapability = /* GraphQL */ `\n mutation CreateCapability(\n $input: CreateCapabilityInput!\n $condition: ModelCapabilityConditionInput\n ) {\n createCapability(input: $input, condition: $condition) {\n id\n active\n sortKey\n name\n description\n requiresValue\n requiredValueLabel\n quantity\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateCapability = /* GraphQL */ `\n mutation UpdateCapability(\n $input: UpdateCapabilityInput!\n $condition: ModelCapabilityConditionInput\n ) {\n updateCapability(input: $input, condition: $condition) {\n id\n active\n sortKey\n name\n description\n requiresValue\n requiredValueLabel\n quantity\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteCapability = /* GraphQL */ `\n mutation DeleteCapability(\n $input: DeleteCapabilityInput!\n $condition: ModelCapabilityConditionInput\n ) {\n deleteCapability(input: $input, condition: $condition) {\n id\n active\n sortKey\n name\n description\n requiresValue\n requiredValueLabel\n quantity\n createdAt\n updatedAt\n }\n }\n`;\nexport const createTag = /* GraphQL */ `\n mutation CreateTag(\n $input: CreateTagInput!\n $condition: ModelTagConditionInput\n ) {\n createTag(input: $input, condition: $condition) {\n id\n owner\n groups\n reloadYardId\n name\n description\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateTag = /* GraphQL */ `\n mutation UpdateTag(\n $input: UpdateTagInput!\n $condition: ModelTagConditionInput\n ) {\n updateTag(input: $input, condition: $condition) {\n id\n owner\n groups\n reloadYardId\n name\n description\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteTag = /* GraphQL */ `\n mutation DeleteTag(\n $input: DeleteTagInput!\n $condition: ModelTagConditionInput\n ) {\n deleteTag(input: $input, condition: $condition) {\n id\n owner\n groups\n reloadYardId\n name\n description\n createdAt\n updatedAt\n }\n }\n`;\nexport const createLocationTag = /* GraphQL */ `\n mutation CreateLocationTag(\n $input: CreateLocationTagInput!\n $condition: ModelLocationTagConditionInput\n ) {\n createLocationTag(input: $input, condition: $condition) {\n id\n owner\n groups\n reloadYardId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n tagId\n tag {\n id\n owner\n groups\n reloadYardId\n name\n description\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateLocationTag = /* GraphQL */ `\n mutation UpdateLocationTag(\n $input: UpdateLocationTagInput!\n $condition: ModelLocationTagConditionInput\n ) {\n updateLocationTag(input: $input, condition: $condition) {\n id\n owner\n groups\n reloadYardId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n tagId\n tag {\n id\n owner\n groups\n reloadYardId\n name\n description\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteLocationTag = /* GraphQL */ `\n mutation DeleteLocationTag(\n $input: DeleteLocationTagInput!\n $condition: ModelLocationTagConditionInput\n ) {\n deleteLocationTag(input: $input, condition: $condition) {\n id\n owner\n groups\n reloadYardId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n totalLocations\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n productId\n productName\n bulkCapacity\n bulkUnits\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n tagId\n tag {\n id\n owner\n groups\n reloadYardId\n name\n description\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createReloadYardCommodity = /* GraphQL */ `\n mutation CreateReloadYardCommodity(\n $input: CreateReloadYardCommodityInput!\n $condition: ModelReloadYardCommodityConditionInput\n ) {\n createReloadYardCommodity(input: $input, condition: $condition) {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateReloadYardCommodity = /* GraphQL */ `\n mutation UpdateReloadYardCommodity(\n $input: UpdateReloadYardCommodityInput!\n $condition: ModelReloadYardCommodityConditionInput\n ) {\n updateReloadYardCommodity(input: $input, condition: $condition) {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteReloadYardCommodity = /* GraphQL */ `\n mutation DeleteReloadYardCommodity(\n $input: DeleteReloadYardCommodityInput!\n $condition: ModelReloadYardCommodityConditionInput\n ) {\n deleteReloadYardCommodity(input: $input, condition: $condition) {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createCommodity = /* GraphQL */ `\n mutation CreateCommodity(\n $input: CreateCommodityInput!\n $condition: ModelCommodityConditionInput\n ) {\n createCommodity(input: $input, condition: $condition) {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateCommodity = /* GraphQL */ `\n mutation UpdateCommodity(\n $input: UpdateCommodityInput!\n $condition: ModelCommodityConditionInput\n ) {\n updateCommodity(input: $input, condition: $condition) {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteCommodity = /* GraphQL */ `\n mutation DeleteCommodity(\n $input: DeleteCommodityInput!\n $condition: ModelCommodityConditionInput\n ) {\n deleteCommodity(input: $input, condition: $condition) {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n validUom\n inventoryFields\n createdAt\n updatedAt\n }\n }\n`;\nexport const createAnnouncement = /* GraphQL */ `\n mutation CreateAnnouncement(\n $input: CreateAnnouncementInput!\n $condition: ModelAnnouncementConditionInput\n ) {\n createAnnouncement(input: $input, condition: $condition) {\n id\n active\n createDateTime\n message\n urgency\n link\n tenantId\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateAnnouncement = /* GraphQL */ `\n mutation UpdateAnnouncement(\n $input: UpdateAnnouncementInput!\n $condition: ModelAnnouncementConditionInput\n ) {\n updateAnnouncement(input: $input, condition: $condition) {\n id\n active\n createDateTime\n message\n urgency\n link\n tenantId\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteAnnouncement = /* GraphQL */ `\n mutation DeleteAnnouncement(\n $input: DeleteAnnouncementInput!\n $condition: ModelAnnouncementConditionInput\n ) {\n deleteAnnouncement(input: $input, condition: $condition) {\n id\n active\n createDateTime\n message\n urgency\n link\n tenantId\n createdAt\n updatedAt\n }\n }\n`;\nexport const createHelpPage = /* GraphQL */ `\n mutation CreateHelpPage(\n $input: CreateHelpPageInput!\n $condition: ModelHelpPageConditionInput\n ) {\n createHelpPage(input: $input, condition: $condition) {\n id\n active\n isLive\n url\n topic\n name\n content\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateHelpPage = /* GraphQL */ `\n mutation UpdateHelpPage(\n $input: UpdateHelpPageInput!\n $condition: ModelHelpPageConditionInput\n ) {\n updateHelpPage(input: $input, condition: $condition) {\n id\n active\n isLive\n url\n topic\n name\n content\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteHelpPage = /* GraphQL */ `\n mutation DeleteHelpPage(\n $input: DeleteHelpPageInput!\n $condition: ModelHelpPageConditionInput\n ) {\n deleteHelpPage(input: $input, condition: $condition) {\n id\n active\n isLive\n url\n topic\n name\n content\n createdAt\n updatedAt\n }\n }\n`;\nexport const createLog = /* GraphQL */ `\n mutation CreateLog(\n $input: CreateLogInput!\n $condition: ModelLogConditionInput\n ) {\n createLog(input: $input, condition: $condition) {\n id\n status\n createdAt\n appType\n tenantId\n user\n message\n exception\n appVersion\n url\n context\n owner\n updatedAt\n }\n }\n`;\nexport const updateLog = /* GraphQL */ `\n mutation UpdateLog(\n $input: UpdateLogInput!\n $condition: ModelLogConditionInput\n ) {\n updateLog(input: $input, condition: $condition) {\n id\n status\n createdAt\n appType\n tenantId\n user\n message\n exception\n appVersion\n url\n context\n owner\n updatedAt\n }\n }\n`;\nexport const deleteLog = /* GraphQL */ `\n mutation DeleteLog(\n $input: DeleteLogInput!\n $condition: ModelLogConditionInput\n ) {\n deleteLog(input: $input, condition: $condition) {\n id\n status\n createdAt\n appType\n tenantId\n user\n message\n exception\n appVersion\n url\n context\n owner\n updatedAt\n }\n }\n`;\nexport const createFile = /* GraphQL */ `\n mutation CreateFile(\n $input: CreateFileInput!\n $condition: ModelFileConditionInput\n ) {\n createFile(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n displayName\n rawFileName\n description\n contentDate\n category\n visibility\n file {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateFile = /* GraphQL */ `\n mutation UpdateFile(\n $input: UpdateFileInput!\n $condition: ModelFileConditionInput\n ) {\n updateFile(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n displayName\n rawFileName\n description\n contentDate\n category\n visibility\n file {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteFile = /* GraphQL */ `\n mutation DeleteFile(\n $input: DeleteFileInput!\n $condition: ModelFileConditionInput\n ) {\n deleteFile(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n reloadYardId\n displayName\n rawFileName\n description\n contentDate\n category\n visibility\n file {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n createdAt\n updatedAt\n }\n }\n`;\nexport const createSeal = /* GraphQL */ `\n mutation CreateSeal(\n $input: CreateSealInput!\n $condition: ModelSealConditionInput\n ) {\n createSeal(input: $input, condition: $condition) {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n }\n`;\nexport const updateSeal = /* GraphQL */ `\n mutation UpdateSeal(\n $input: UpdateSealInput!\n $condition: ModelSealConditionInput\n ) {\n updateSeal(input: $input, condition: $condition) {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n }\n`;\nexport const deleteSeal = /* GraphQL */ `\n mutation DeleteSeal(\n $input: DeleteSealInput!\n $condition: ModelSealConditionInput\n ) {\n deleteSeal(input: $input, condition: $condition) {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n }\n`;\nexport const createUser = /* GraphQL */ `\n mutation CreateUser(\n $input: CreateUserInput!\n $condition: ModelUserConditionInput\n ) {\n createUser(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n cognitoId\n type\n firstName\n lastName\n fullName\n phone\n email\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n reloadYardId\n acl\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateUser = /* GraphQL */ `\n mutation UpdateUser(\n $input: UpdateUserInput!\n $condition: ModelUserConditionInput\n ) {\n updateUser(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n cognitoId\n type\n firstName\n lastName\n fullName\n phone\n email\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n reloadYardId\n acl\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteUser = /* GraphQL */ `\n mutation DeleteUser(\n $input: DeleteUserInput!\n $condition: ModelUserConditionInput\n ) {\n deleteUser(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n cognitoId\n type\n firstName\n lastName\n fullName\n phone\n email\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n reloadYardId\n acl\n createdAt\n updatedAt\n }\n }\n`;\n","export const getReloadYard = /* GraphQL */ `\n query GetReloadYard($id: ID!) {\n getReloadYard(id: $id) {\n id\n owner\n groups\n active\n status\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n timeZone\n latitude\n longitude\n lotCapacity\n trackCapacity\n warehouseCapacity\n servingCarrier\n railHighway\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolCounter\n receiptCounter\n fileCategories {\n key\n name\n }\n mapImage {\n bucket\n region\n key\n }\n logoImage {\n bucket\n region\n key\n }\n checklists {\n items {\n id\n owner\n groups\n active\n reloadYardId\n resourceId\n name\n description\n processName\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n }\n }\n areas {\n items {\n id\n active\n name\n prefix\n areaType\n color\n sortKey\n zones {\n items {\n id\n active\n name\n prefix\n accountId\n reloadYardCommodityId\n areaId\n color\n sortKey\n }\n nextToken\n }\n }\n nextToken\n }\n aisles {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n areaId\n area {\n id\n active\n name\n prefix\n color\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n active\n name\n prefix\n accountId\n reloadYardCommodityId\n areaId\n color\n sortKey\n }\n capacityUsed\n type\n bays\n levels\n length\n width\n sortKey\n }\n nextToken\n }\n yardCommodities {\n items {\n id\n active\n reloadYardId\n commodityId\n units\n sortKey\n commodity {\n id\n name\n description\n locationLoadType\n validUom\n inventoryFields\n }\n }\n nextToken\n }\n subscription {\n customerId\n subscriptionId\n priceId\n status\n }\n tosAccept {\n acceptTimeStamp\n cognitoId\n email\n userAgent\n ip\n }\n eventTypes {\n items {\n id\n active\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n schedule {\n workdays {\n id\n name\n startDayTime\n endDayTime\n selected\n }\n minNoticeHours\n maxDaysIntoFuture\n }\n }\n nextToken\n }\n schedule {\n workdays {\n id\n name\n startDayTime\n endDayTime\n selected\n }\n holidays\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n }\n }\n`;\n\nexport const countInvoices = /* GraphQL */ `\n query SearchInvoices(\n $filter: SearchableInvoiceFilterInput\n $sort: SearchableInvoiceSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInvoices(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n total\n }\n }\n`;\n\nexport const getInvoiceCounter = /* GraphQL */ `\n query GetReloadYard($id: ID!) {\n getReloadYard(id: $id) {\n id\n active\n name\n invoiceCounter\n invoiceNumberPrefix\n }\n }\n`;\n\nexport const getBOLCounter = /* GraphQL */ `\n query GetReloadYard($id: ID!) {\n getReloadYard(id: $id) {\n active\n name\n bolCounter\n }\n }\n`;\n\nexport const getReceiptCounter = /* GraphQL */ `\n query GetReloadYard($id: ID!) {\n getReloadYard(id: $id) {\n active\n name\n receiptCounter\n }\n }\n`;\n\nexport const customerByEmail = /* GraphQL */ `\n query CustomerByEmail(\n $email: String\n $sortDirection: ModelSortDirection\n $filter: ModelCustomerFilterInput\n $limit: Int\n $nextToken: String\n ) {\n customerByEmail(\n email: $email\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n status\n cognitoId\n email\n firstName\n lastName\n phone\n reloadYardAccounts {\n items {\n id\n active\n groups\n reloadYardId\n accountId\n accountName\n acl\n account {\n inboundAdviceInputs\n outboundAdviceInputs\n }\n reloadYard {\n id\n name\n phone\n fax\n email\n }\n }\n nextToken\n }\n }\n }\n }\n`;\n\nexport const userByEmailMini = /* GraphQL */ `\n query UserByEmail(\n $email: String\n $sortDirection: ModelSortDirection\n $filter: ModelUserFilterInput\n $limit: Int\n $nextToken: String\n ) {\n userByEmail(\n email: $email\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n groups\n active\n status\n reloadYardId\n cognitoId\n lastName\n }\n nextToken\n }\n }\n`;\n\nexport const customerByEmailMini = /* GraphQL */ `\n query CustomerByEmail(\n $email: String\n $sortDirection: ModelSortDirection\n $filter: ModelCustomerFilterInput\n $limit: Int\n $nextToken: String\n ) {\n customerByEmail(\n email: $email\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n status\n cognitoId\n lastName\n reloadYardAccounts {\n items {\n id\n active\n }\n }\n }\n nextToken\n }\n }\n`;\n\nexport const getCustomerReloadYardAccountMini = /* GraphQL */ `\n query GetCustomerReloadYardAccount($id: ID!) {\n getCustomerReloadYardAccount(id: $id) {\n id\n active\n groups\n accountId\n accountName\n acl\n account {\n inboundAdviceInputs\n outboundAdviceInputs\n }\n }\n }\n`;\n\nexport const aisleByActiveByZoneBySortKey = /* GraphQL */ `\n query AisleByActiveByZoneBySortKey(\n $zoneId: ID\n $activeSortKey: ModelAisleAisleByActiveByZoneBySortKeyCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAisleFilterInput\n $limit: Int\n $nextToken: String\n ) {\n aisleByActiveByZoneBySortKey(\n zoneId: $zoneId\n activeSortKey: $activeSortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n createdAt\n updatedAt\n }\n bays\n levels\n capacityUsed\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n topDownPickOrder\n length\n width\n sortKey\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\n\nexport const aisleByActiveBySortKey = /* GraphQL */ `\n query AisleByActiveBySortKey(\n $reloadYardId: ID\n $activeSortKey: ModelAisleAisleByActiveBySortKeyCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAisleFilterInput\n $limit: Int\n $nextToken: String\n ) {\n aisleByActiveBySortKey(\n reloadYardId: $reloadYardId\n activeSortKey: $activeSortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n createdAt\n updatedAt\n }\n locations {\n items {\n id\n owner\n groups\n active\n reloadYardId\n capacityUsed\n capacityAllocated\n bulkCapacity\n bulkUnits\n name\n type\n areaId\n area {\n id\n active\n name\n prefix\n areaType\n color\n sortKey\n }\n zoneId\n zone {\n id\n active\n areaId\n name\n prefix\n accountId\n color\n sortKey\n }\n aisleId\n bay\n level\n position\n length\n width\n sortKey\n }\n nextToken\n }\n bays\n levels\n positions\n capacityUsed\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n length\n width\n sortKey\n topDownPickOrder\n totalLocations\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\n\nexport const locationByAisleBySortKey = /* GraphQL */ `\n query LocationByAisleBySortKey(\n $aisleId: ID\n $sortKey: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelLocationFilterInput\n $limit: Int\n $nextToken: String\n ) {\n locationByAisleBySortKey(\n aisleId: $aisleId\n sortKey: $sortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n productId\n productName\n accountName\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n reloadYardCommodityId\n sortKey\n }\n aisleId\n aisle {\n id\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n topDownPickOrder\n totalLocations\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n length\n width\n sortKey\n topDownPickOrder\n }\n bay\n level\n position\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n capacityUsed\n capacityAllocated\n bulkCapacity\n bulkUnits\n length\n width\n sortKey\n }\n nextToken\n }\n }\n`;\n\nexport const areaBySortKey = /* GraphQL */ `\n query AreaBySortKey(\n $reloadYardId: ID\n $sortKey: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAreaFilterInput\n $limit: Int\n $nextToken: String\n ) {\n areaBySortKey(\n reloadYardId: $reloadYardId\n sortKey: $sortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n active\n name\n prefix\n areaType\n sortKey\n zones {\n items {\n id\n active\n name\n prefix\n accountId\n reloadYardCommodityId\n areaId\n color\n sortKey\n }\n nextToken\n }\n }\n nextToken\n }\n }\n`;\n\nexport const areaByActiveBySortKey = /* GraphQL */ `\n query AreaByActiveBySortKey(\n $reloadYardId: ID\n $activeSortKey: ModelAreaAreaByActiveBySortKeyCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAreaFilterInput\n $limit: Int\n $nextToken: String\n ) {\n areaByActiveBySortKey(\n reloadYardId: $reloadYardId\n activeSortKey: $activeSortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n active\n name\n prefix\n areaType\n sortKey\n zones {\n items {\n id\n active\n name\n prefix\n accountId\n reloadYardCommodityId\n areaId\n color\n sortKey\n }\n nextToken\n }\n }\n nextToken\n }\n }\n`;\n\nexport const getAisle = /* GraphQL */ `\n query GetAisle($id: ID!) {\n getAisle(id: $id) {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n active\n name\n prefix\n color\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n active\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n }\n locations {\n items {\n id\n active\n name\n type\n areaId\n zoneId\n aisleId\n area {\n id\n active\n name\n prefix\n areaType\n sortKey\n }\n zone {\n id\n active\n name\n prefix\n accountId\n areaId\n sortKey\n }\n aisle {\n id\n active\n name\n type\n bays\n levels\n capacityUsed\n length\n width\n sortKey\n }\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n bay\n level\n position\n capacityUsed\n capacityAllocated\n sortKey\n }\n nextToken\n }\n bays\n levels\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n capacityUsed\n length\n width\n sortKey\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const aisleByActiveByAreaBySortKey = /* GraphQL */ `\n query AisleByActiveByAreaBySortKey(\n $areaId: ID\n $activeSortKey: ModelAisleAisleByActiveByAreaBySortKeyCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAisleFilterInput\n $limit: Int\n $nextToken: String\n ) {\n aisleByActiveByAreaBySortKey(\n areaId: $areaId\n activeSortKey: $activeSortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n name\n type\n areaId\n area {\n active\n name\n areaType\n prefix\n color\n }\n zoneId\n zone {\n id\n active\n name\n prefix\n accountId\n color\n zoneType\n sortKey\n }\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n locations {\n items {\n id\n active\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityUsed\n capacityAllocated\n bulkCapacity\n bulkUnits\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n sortKey\n }\n }\n bays\n levels\n capacityUsed\n topDownPickOrder\n totalLocations\n sortKey\n }\n nextToken\n }\n }\n`;\n\nexport const aisleByActiveByAreaBySortKeyLocations = /* GraphQL */ `\n query AisleByActiveByAreaBySortKey(\n $areaId: ID\n $activeSortKey: ModelAisleAisleByActiveByAreaBySortKeyCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAisleFilterInput\n $limit: Int\n $nextToken: String\n ) {\n aisleByActiveByAreaBySortKey(\n areaId: $areaId\n activeSortKey: $activeSortKey\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n active\n name\n prefix\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n active\n name\n prefix\n accountId\n reloadYardCommodityId\n areaId\n color\n zoneType\n sortKey\n }\n locations {\n items {\n id\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n aisleId\n position\n capacityUsed\n capacityAllocated\n length\n width\n sortKey\n }\n nextToken\n }\n capacityUsed\n length\n width\n sortKey\n }\n nextToken\n }\n }\n`;\n\nexport const eventTypeByActiveByArea = /* GraphQL */ `\n query EventTypeByActiveByArea(\n $reloadYardId: ID\n $activeAreaId: ModelEventTypeEventTypeByActiveByAreaCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelEventTypeFilterInput\n $limit: Int\n $nextToken: String\n ) {\n eventTypeByActiveByArea(\n reloadYardId: $reloadYardId\n activeAreaId: $activeAreaId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n active\n areaId\n name\n description\n schedule {\n workdays {\n id\n name\n startDayTime\n endDayTime\n selected\n }\n minNoticeHours\n maxDaysIntoFuture\n layout\n }\n duration\n bufferTime\n resourceName\n numberOfResources\n assetTypeId\n }\n nextToken\n }\n }\n`;\n","// https://github.com/aws-amplify/amplify-cli/issues/2420\n\nexport const inventoryItemByAisleByStatus = /* GraphQL */ `\n query InventoryItemByAisleByStatus(\n $aisleId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByAisleByStatus(\n aisleId: $aisleId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n unloadedBy\n unloadedDateTime\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleList\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n customFields\n }\n areaId\n zoneId\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityUsed\n capacityAllocated\n sortKey\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n }\n nextToken\n }\n }\n`;\n\nexport const inventoryItemByAisleByStatusLookup = /* GraphQL */ `\n query InventoryItemByAisleByStatus(\n $aisleId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByAisleByStatus(\n aisleId: $aisleId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n quantityOnHand\n unloadedBy\n unloadedDateTime\n inventory {\n inventoryUnits\n reloadYardCommodity {\n commodity {\n id\n name\n description\n locationLoadType\n }\n }\n }\n }\n nextToken\n }\n }\n`;\n\nexport const inventoryItemByAisleByStatusForUpdate = /* GraphQL */ `\n query InventoryItemByAisleByStatus(\n $aisleId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByAisleByStatus(\n aisleId: $aisleId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n quantityOnHand\n unloadedBy\n unloadedDateTime\n inventoryId\n aisleId\n zoneId\n areaId\n locationId\n location {\n id\n aisleId\n areaId\n zoneId\n sortKey\n capacityUsed\n capacityAllocated\n bay\n }\n }\n nextToken\n }\n }\n`;\n\nexport const inventoryItemByLocationByStatus = /* GraphQL */ `\n query InventoryItemByLocationByStatus(\n $locationId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByLocationByStatus(\n locationId: $locationId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n status\n inboundShipmentId\n inventoryId\n unloadedBy\n unloadedDateTime\n history {\n type\n date\n by\n text\n }\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n lotType\n areaId\n zoneId\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n commodity {\n id\n name\n description\n locationLoadType\n }\n }\n customFields\n }\n areaId\n zoneId\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n capacityUsed\n topDownPickOrder\n sortKey\n }\n bay\n level\n position\n capacityUsed\n capacityAllocated\n length\n width\n sortKey\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n }\n nextToken\n }\n }\n`;\n\nexport const inventoryByAreaByProductByStatus = /* GraphQL */ `\n query InventoryByAreaByProductByStatus(\n $areaId: ID\n $productIdStatus: ModelInventoryInventoryByAreaByProductByStatusCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryByAreaByProductByStatus(\n areaId: $areaId\n productIdStatus: $productIdStatus\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n status\n lotNumber\n poNumber\n railCarNumber\n lastShipDateTime\n turnDays\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityCommitted\n inventoryUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleList\n aggregateInventoryId\n history {\n type\n date\n by\n text\n }\n accountId\n accountName\n productId\n productName\n inboundShipmentId\n inventoryItems {\n items {\n id\n areaId\n zoneId\n aisleId\n locationId\n inventoryId\n inboundShipmentId\n locationFullName\n reloadYardId\n status\n quantityOnHand\n quantityCommitted\n outboundShipmentId\n hasException\n isDamaged\n otherException\n otherExceptionNote\n }\n }\n }\n }\n }\n`;\n\nexport const inventoryByAreaByProductByStatusMax = /* GraphQL */ `\n query InventoryByAreaByProductByStatus(\n $areaId: ID\n $productIdStatus: ModelInventoryInventoryByAreaByProductByStatusCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryByAreaByProductByStatus(\n areaId: $areaId\n productIdStatus: $productIdStatus\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n status\n lotNumber\n poNumber\n railCarNumber\n lastShipDateTime\n turnDays\n quantityDelivered\n quantityAdvised\n quantityReceived\n quantityOnHand\n quantityCommitted\n inventoryUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleList\n aggregateInventoryId\n history {\n type\n date\n by\n text\n }\n accountId\n accountName\n productId\n productName\n inboundShipmentId\n inboundShipment {\n id\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n receiptNumber\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n customFields\n }\n inventoryItems {\n items {\n id\n areaId\n zoneId\n aisleId\n locationId\n inventoryId\n inboundShipmentId\n locationFullName\n reloadYardId\n status\n quantityOnHand\n quantityCommitted\n outboundShipmentId\n hasException\n isDamaged\n otherException\n otherExceptionNote\n }\n }\n }\n }\n }\n`;\n\nexport const inventoryItemByLocationByStatusInbound = /* GraphQL */ `\n query InventoryItemByLocationByStatus(\n $locationId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByLocationByStatus(\n locationId: $locationId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n quantityOnHand\n quantityCommitted\n unloadedDateTime\n inventoryId\n status\n inventory {\n productName\n productCode\n accountName\n reloadYardCommodity {\n commodity {\n name\n locationLoadType\n }\n }\n }\n }\n nextToken\n }\n }\n`;\n\nexport const inventoryItemByLocationByStatusLookup = /* GraphQL */ `\n query InventoryItemByLocationByStatus(\n $locationId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByLocationByStatus(\n locationId: $locationId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n status\n areaId\n zoneId\n aisleId\n locationId\n inventoryId\n locationFullName\n quantityOnHand\n unloadedBy\n unloadedDateTime\n }\n nextToken\n }\n }\n`;\n\nexport const inventoryItemByInventoryByStatusMini = /* GraphQL */ `\n query InventoryItemByInventoryByStatus(\n $inventoryId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByInventoryByStatus(\n inventoryId: $inventoryId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n unloadedBy\n unloadedDateTime\n inventoryId\n inventory {\n id\n inventoryUnits\n sortKey\n }\n location {\n id\n active\n name\n type\n areaId\n area {\n id\n active\n name\n prefix\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n active\n name\n prefix\n accountId\n zoneType\n sortKey\n }\n aisleId\n aisle {\n id\n active\n name\n type\n topDownPickOrder\n sortKey\n }\n bay\n level\n position\n sortKey\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n }\n nextToken\n }\n }\n`;\n\nexport const getInventorie = /* GraphQL */ `\n query GetInventorie($id: ID!) {\n getInventorie(id: $id) {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n id\n name\n prefix\n areaType\n sortKey\n zones {\n items {\n id\n accountId\n areaId\n name\n prefix\n }\n }\n }\n zoneId\n aisleList\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n productName\n productCode\n productId\n product {\n id\n # owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n # height\n # width\n # length\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n # history {\n # type\n # date\n # by\n # text\n # }\n }\n sortKey\n accountName\n accountId\n account {\n id\n groups\n active\n # status\n # accountNumber\n # lotNumberPrefix\n businessName\n inventoryStorageThreshold\n # inboundBillingUnits\n # outboundBillingUnits\n defaultWeightUnits\n # paymentTerms\n # email\n # phone\n reloadYardId\n inventoryCustomFields {\n id\n name\n type\n display\n }\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n # owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n # originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n history {\n type\n date\n by\n text\n }\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n }\n shipmentLineItems {\n items {\n id\n # owner\n groups\n active\n status\n sortKey\n lotNumber\n totalQuantityToPick\n poNumber\n outboundShipmentId\n accountId\n reloadYardId\n inventoryId\n }\n # nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n # reloadYardId\n commodityId\n # owner\n # groups\n # active\n # verified\n units\n sortKey\n commodity {\n id\n # active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n inventoryFields\n }\n }\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n areaId\n zoneId\n aisleId\n locationId\n location {\n id\n name\n type\n areaId\n area {\n name\n prefix\n areaType\n }\n zoneId\n zone {\n name\n prefix\n accountId\n }\n aisleId\n aisle {\n id\n active\n name\n type\n bays\n levels\n capacityUsed\n sortKey\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n sortKey\n productId\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n }\n history {\n type\n date\n by\n text\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n unloadedBy\n unloadedDateTime\n }\n }\n customFields\n # createdAt\n # updatedAt\n }\n }\n`;\n\nexport const getInventorieAiles = /* GraphQL */ `\n query GetInventorie($id: ID!) {\n getInventorie(id: $id) {\n inventoryItems {\n items {\n aisleId\n }\n }\n }\n }\n`;\n\nexport const getInventorieInbound = /* GraphQL */ `\n query GetInventorie($id: ID!) {\n getInventorie(id: $id) {\n id\n groups\n reloadYardId\n status\n lotNumber\n poNumber\n inboundShipmentId\n railCarNumber\n inboundShipmentId\n deliveryDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n verificationRequired\n inventoryUnits\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n turnDays\n areaId\n area {\n areaType\n }\n zoneId\n aisleId\n photos {\n bucket\n region\n key\n type\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n productName\n productId\n productCode\n accountId\n accountName\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n }\n }\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n otherException\n otherExceptionNote\n status\n unloadedBy\n unloadedDateTime\n inventoryId\n inboundShipmentId\n barcode\n originOfDamage\n reloadYardId\n areaId\n zoneId\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n productId\n productName\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n capacityUsed\n topDownPickOrder\n sortKey\n }\n bay\n level\n position\n capacityUsed\n capacityAllocated\n bulkCapacity\n bulkUnits\n sortKey\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n }\n history {\n type\n date\n by\n text\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n }\n }\n customFields\n }\n }\n`;\n\nexport const getInventorieAggregate = /* GraphQL */ `\n query GetInventorie($id: ID!) {\n getInventorie(id: $id) {\n id\n groups\n reloadYardId\n status\n areaId\n zoneId\n lotNumber\n poNumber\n inboundShipmentId\n railCarNumber\n inboundShipmentId\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n verificationRequired\n inventoryUnits\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n turnDays\n history {\n type\n date\n by\n text\n }\n productName\n productId\n productCode\n accountId\n accountName\n inventoryItems {\n items {\n id\n inventoryId\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n otherException\n otherExceptionNote\n status\n unloadedBy\n unloadedDateTime\n areaId\n zoneId\n aisleId\n locationId\n # location {\n # id\n # owner\n # groups\n # active\n # reloadYardId\n # name\n # type\n # productId\n # productName\n # areaId\n # area {\n # id\n # owner\n # groups\n # active\n # reloadYardId\n # name\n # prefix\n # color\n # areaType\n # sortKey\n # }\n # zoneId\n # zone {\n # id\n # owner\n # groups\n # active\n # reloadYardId\n # name\n # prefix\n # accountId\n # areaId\n # color\n # zoneType\n # sortKey\n # }\n # aisleId\n # aisle {\n # id\n # owner\n # groups\n # active\n # reloadYardId\n # name\n # type\n # areaId\n # zoneId\n # bays\n # levels\n # capacityUsed\n # topDownPickOrder\n # sortKey\n # }\n # bay\n # level\n # position\n # capacityUsed\n # capacityAllocated\n # bulkCapacity\n # bulkUnits\n # sortKey\n # }\n history {\n type\n date\n by\n text\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n }\n }\n customFields\n }\n }\n`;\n\nexport const getInventoryItem = /* GraphQL */ `\n query GetInventoryItem($id: ID!) {\n getInventoryItem(id: $id) {\n id\n # owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n unloadedBy\n unloadedDateTime\n inboundShipmentId\n inventoryId\n inventory {\n id\n groups\n active\n status\n lotNumber\n poNumber\n areaId\n zoneId\n aisleList\n accountId\n account {\n inventoryPrimaryField\n inventoryCustomFields {\n id\n name\n type\n display\n }\n }\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n productId\n productName\n productCode\n product {\n id\n # owner\n # groups\n active\n # accountId\n # reloadYardId\n name\n # productCode\n reloadYardCommodityId\n # category\n defaultUnits\n defaultWeightUnits\n # inboundBillingUnits\n # outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n # width\n # length\n # height\n # lowInventoryThreshold\n # totalInventoryQuantity\n # lowInventoryAlert\n customFields\n }\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n status\n }\n nextToken\n }\n # photos {\n # bucket\n # region\n # key\n # }\n history {\n type\n date\n by\n text\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n commodity {\n id\n name\n description\n locationLoadType\n }\n owner\n groups\n active\n verified\n units\n sortKey\n }\n customFields\n }\n areaId\n zoneId\n aisleId\n locationId\n location {\n id\n # owner\n groups\n active\n reloadYardId\n productId\n name\n type\n areaId\n area {\n id\n groups\n active\n name\n prefix\n color\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n groups\n active\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n }\n aisleId\n aisle {\n id\n active\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n }\n bay\n level\n position\n capacityUsed\n capacityAllocated\n length\n width\n sortKey\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n # tags {\n # nextToken\n # }\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n history {\n type\n date\n by\n text\n }\n }\n }\n`;\n\nexport const listAuditInventoriesByAccount = /* GraphQL */ `\n query InventoryByStatusByAccountByProductByLot(\n $reloadYardId: ID\n $statusAccountNameProductNameLotNumber: ModelInventoryInventoryByStatusByAccountByProductByLotCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryByStatusByAccountByProductByLot(\n reloadYardId: $reloadYardId\n statusAccountNameProductNameLotNumber: $statusAccountNameProductNameLotNumber\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n areaId\n zoneId\n customFields\n }\n nextToken\n }\n }\n`;\n\nexport const searchInventorys = /* GraphQL */ `\n query SearchInventorys(\n $filter: SearchableInventoryFilterInput\n $sort: SearchableInventorySortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInventorys(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n id\n status\n lotNumber\n poNumber\n railCarNumber\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityCommitted\n quantityPhysical\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n hasException\n overShipment\n overShipmentQuantity\n underShipment\n underShipmentQuantity\n isDamaged\n isRecalled\n otherException\n aisleList\n account {\n inventoryPrimaryField\n inventoryCustomFields {\n id\n name\n type\n display\n }\n }\n deliveryDateTime\n lastShipDateTime\n turnDays\n lotType\n inventoryItems {\n items {\n barcode\n id\n status\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n areaId\n zoneId\n aisleId\n locationId\n location {\n id\n name\n type\n area {\n name\n prefix\n areaType\n }\n zone {\n name\n prefix\n accountId\n }\n aisle {\n id\n active\n name\n type\n bays\n levels\n capacityUsed\n length\n width\n sortKey\n }\n bay\n level\n position\n }\n outboundShipmentId\n inboundShipmentId\n locationFullName\n latitude\n longitude\n }\n }\n areaId\n area {\n areaType\n }\n productName\n productCode\n productId\n product {\n category\n lowInventoryAlert\n totalInventoryQuantity\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n mbf\n lf\n sf\n }\n accountName\n accountId\n account {\n businessName\n inventoryStorageThreshold\n }\n inboundShipmentId\n inboundShipment {\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n }\n reloadYardId\n reloadYardCommodityId\n customFields\n zoneId\n }\n nextToken\n total\n }\n }\n`;\n\nexport const searchInventorysInbound = /* GraphQL */ `\n query SearchInventorys(\n $filter: SearchableInventoryFilterInput\n $sort: SearchableInventorySortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInventorys(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n status\n lotNumber\n poNumber\n railCarNumber\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityCommitted\n quantityPhysical\n quantityMismatch\n inventoryUnits\n deliveryDateTime\n lastShipDateTime\n turnDays\n lotType\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n areaId\n zoneId\n aisleId\n locationId\n location {\n id\n name\n type\n area {\n name\n prefix\n areaType\n }\n zone {\n name\n prefix\n accountId\n }\n aisle {\n id\n name\n type\n bays\n levels\n capacityUsed\n length\n width\n sortKey\n }\n bay\n level\n position\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n }\n }\n productName\n productCode\n productId\n accountName\n account {\n businessName\n inventoryStorageThreshold\n }\n customFields\n }\n nextToken\n total\n }\n }\n`;\n\nexport const searchInventoryItems = /* GraphQL */ `\n query SearchInventoryItems(\n $filter: SearchableInventoryItemFilterInput\n $sort: SearchableInventoryItemSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInventoryItems(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n inventoryId\n }\n }\n }\n`;\n\nexport const inventoryByStatusByAccountByProductByLot = /* GraphQL */ `\n query InventoryByStatusByAccountByProductByLot(\n $reloadYardId: ID\n $statusAccountNameProductNameLotNumber: ModelInventoryInventoryByStatusByAccountByProductByLotCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryByStatusByAccountByProductByLot(\n reloadYardId: $reloadYardId\n statusAccountNameProductNameLotNumber: $statusAccountNameProductNameLotNumber\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcsHeight\n pcsWidth\n pcsLength\n pcs\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n underShipment\n underShipmentQuantity\n isDamaged\n isRecalled\n otherException\n lotType\n areaId\n zoneId\n aisleList\n productName\n productCode\n productId\n product {\n id\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n pcsHeight\n pcsWidth\n pcsLength\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n }\n accountName\n accountId\n account {\n id\n # owner\n # groups\n # active\n status\n lotNumberPrefix\n businessName\n inventoryStorageThreshold\n # paymentTerms\n # reloadYardId\n }\n reloadYardId\n inboundShipmentId\n # inboundShipment {\n # id\n # active\n # status\n # state\n # poNumber\n # lotNumber\n # lotNumberOverride\n # shipFrom\n # carrierType\n # originCarrier\n # lotType\n # railCarNumber\n # totalQuantity\n # totalUnits\n # createDateTime\n # scheduledDateTime\n # notifyDateTime\n # placedDateTime\n # invoiceId\n # zoneId\n # areaId\n # reloadYardCommodityId\n # }\n # shipmentLineItems {\n # items {\n # id\n # status\n # lotNumber\n # totalQuantityToPick\n # outboundShipmentId\n # inventoryId\n # }\n # }\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n isDamaged\n originOfDamage\n otherException\n locationFullName\n }\n }\n auditId\n reloadYardCommodityId\n customFields\n }\n nextToken\n }\n }\n`;\n\nexport const inventoryByStatusByAccountIdByProductByLot = /* GraphQL */ `\n query InventoryByStatusByAccountIdByProductByLot(\n $reloadYardId: ID\n $statusAccountIdProductNameLotNumber: ModelInventoryInventoryByStatusByAccountIdByProductByLotCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryByStatusByAccountIdByProductByLot(\n reloadYardId: $reloadYardId\n statusAccountIdProductNameLotNumber: $statusAccountIdProductNameLotNumber\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n groups\n active\n status\n lotNumber\n lotType\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n weight\n weightUnits\n hasException\n overShipment\n overShipmentQuantity\n underShipment\n underShipmentQuantity\n isDamaged\n isRecalled\n otherException\n areaId\n zoneId\n productName\n productCode\n productId\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n reloadYardCommodityId\n customFields\n sortKey\n history {\n type\n date\n by\n text\n }\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n areaId\n zoneId\n aisleId\n locationId\n outboundShipmentId\n locationFullName\n longitude\n latitude\n location {\n type\n area {\n sortKey\n }\n zone {\n sortKey\n }\n aisle {\n topDownPickOrder\n sortKey\n }\n bay\n level\n position\n }\n history {\n type\n date\n by\n text\n }\n }\n }\n product {\n defaultWeightUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n }\n }\n nextToken\n }\n }\n`;\n\nexport const inventoryByStatusByAccount = /* GraphQL */ `\n query InventoryByStatusByAccountByProductByLot(\n $reloadYardId: ID\n $statusAccountNameProductNameLotNumber: ModelInventoryInventoryByStatusByAccountByProductByLotCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryByStatusByAccountByProductByLot(\n reloadYardId: $reloadYardId\n statusAccountNameProductNameLotNumber: $statusAccountNameProductNameLotNumber\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n lotType\n areaId\n zoneId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n inboundShipmentId\n auditId\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\n\nexport const inventoryItemByLocationByStatusMini = /* GraphQL */ `\n query InventoryItemByLocationByStatus(\n $locationId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByLocationByStatus(\n locationId: $locationId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n }\n nextToken\n }\n }\n`;\nexport const inventoryItemByAisleByStatusMini = /* GraphQL */ `\n query InventoryItemByAisleByStatus(\n $aisleId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByAisleByStatus(\n aisleId: $aisleId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n }\n nextToken\n }\n }\n`;\nexport const inventoryItemByZoneByStatusMini = /* GraphQL */ `\n query InventoryItemByZoneByStatus(\n $zoneId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByZoneByStatus(\n zoneId: $zoneId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n }\n nextToken\n }\n }\n`;\nexport const inventoryItemByAreaByStatusMini = /* GraphQL */ `\n query InventoryItemByAreaByStatus(\n $areaId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInventoryItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inventoryItemByAreaByStatus(\n areaId: $areaId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n }\n nextToken\n }\n }\n`;\n\nexport const getInventorieTimeline = /* GraphQL */ `\n query GetInventorie($id: ID!) {\n getInventorie(id: $id) {\n id\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n quantityDelivered\n quantityReceived\n quantityOnHand\n quantityPhysical\n quantityCommitted\n inventoryUnits\n weight\n weightUnits\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n area {\n areaType\n name\n }\n outboundShipmentId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n productName\n productCode\n productId\n accountName\n accountId\n account {\n businessName\n inboundCustomFields {\n id\n name\n type\n display\n }\n outboundCustomFields {\n id\n name\n type\n display\n }\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n }\n inboundShipmentId\n inboundShipment {\n id\n status\n state\n poNumber\n lotNumber\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n assignedTo\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n invoice {\n id\n }\n area {\n name\n prefix\n color\n areaType\n }\n zone {\n name\n prefix\n }\n trackId\n isCollected\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n }\n shipmentLineItems {\n items {\n id\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n outboundShipmentId\n outboundShipment {\n id\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n ladenWeight\n totalQuantity\n totalUnits\n billUnits\n sortKey\n accountName\n invoiceId\n customFields\n }\n inventoryItems {\n items {\n id\n inventoryId\n quantityToPick\n status\n inventoryItem {\n id\n quantityOnHand\n quantityCommitted\n status\n locationFullName\n }\n }\n }\n }\n }\n reloadYardCommodity {\n commodityId\n units\n commodity {\n name\n description\n defaultUnits\n locationLoadType\n }\n }\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n history {\n type\n date\n by\n text\n }\n barcode\n locationFullName\n unloadedBy\n unloadedDateTime\n }\n }\n customFields\n }\n }\n`;\n\nexport const countInventories = /* GraphQL */ `\n query SearchInventorys(\n $filter: SearchableInventoryFilterInput\n $sort: SearchableInventorySortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInventorys(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n total\n }\n }\n`;","// https://github.com/aws-amplify/amplify-cli/issues/2420\n\nexport const getOutboundShipment = /* GraphQL */ `\n query GetOutboundShipment($id: ID!) {\n getOutboundShipment(id: $id) {\n id\n hasException\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n tareWeight\n ladenWeight\n netWeight\n weightUnits\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n areaId\n area {\n id\n active\n reloadYardId\n name\n prefix\n areaType\n color\n sortKey\n }\n zoneId\n trackId\n location {\n id\n name\n type\n areaId\n area {\n id\n name\n prefix\n areaType\n }\n zoneId\n zone {\n id\n name\n prefix\n accountId\n zoneType\n }\n aisleId\n aisle {\n id\n name\n type\n }\n }\n previousCar\n isCollected\n sortKey\n photos {\n bucket\n region\n key\n }\n attachments {\n bucket\n region\n key\n type\n }\n bolFile {\n bucket\n region\n key\n }\n sealNumber\n seals {\n items {\n id\n active\n # reloadYardId\n # accountId\n # accountName\n # referenceId\n # referenceName\n barcode\n isScanned\n createdAt\n createdBy\n brokenAt\n brokenBy\n validated\n description\n # updatedAt\n }\n }\n assignedTo\n instructions\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n accountName\n accountId\n account {\n id\n groups # keep it\n active\n status\n lotNumberPrefix\n corporateAccount\n businessName\n reloadYardId\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundPhotos\n outboundReview\n outboundAdviceInputs\n trackOutboundSeals\n generatePickupNumber\n outboundSkipSignature\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n bolTemplate {\n bucket\n region\n key\n type\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n }\n reloadYardId\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n totalQuantityToPick\n outboundShipmentId\n reloadYardId\n inventoryId\n sortKey\n inventory {\n id\n active\n groups\n reloadYardId\n status\n outboundShipmentId\n productName\n productCode\n productId\n product {\n id\n productCode\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n pcsHeight\n pcsWidth\n pcsLength\n # width\n # length\n # height\n # lowInventoryThreshold\n # totalInventoryQuantity\n # lowInventoryAlert\n }\n accountName\n accountId\n lotType\n lotNumber\n poNumber\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n units\n sortKey\n commodity {\n id\n name\n defaultUnits\n locationLoadType\n }\n }\n areaId\n zoneId\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityOnHand\n quantityShipped\n quantityCommitted\n quantityPhysical\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n history {\n type\n date\n by\n text\n }\n customFields\n }\n inventoryItems {\n items {\n id\n groups\n reloadYardId\n outboundShipmentId\n shipmentLineItemId\n inventoryItemId\n hasException\n barcodeException\n barcodeExceptionNote\n otherException\n otherExceptionNote\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n inventoryId\n inventory {\n id\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityCommitted\n inventoryUnits\n weight\n weightUnits\n customFields\n }\n areaId\n area {\n id\n active\n reloadYardId\n name\n prefix\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n }\n aisleId\n locationId\n location {\n id\n active\n reloadYardId\n name\n type\n productId\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityUsed\n capacityAllocated\n length\n width\n sortKey\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n history {\n type\n date\n by\n text\n }\n }\n quantityToPick\n status\n }\n nextToken\n }\n history {\n type\n date\n by\n text\n }\n createdAt\n updatedAt\n }\n nextToken\n }\n invoiceId\n invoice {\n status\n invoiceNumber\n total\n }\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n units\n sortKey\n commodity {\n id\n name\n defaultUnits\n }\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n timeslotId\n timeslot {\n id\n groups\n status\n reloadYardId\n year\n month\n week\n day\n time\n startTime\n endTime\n inboundId\n outboundId\n accountName\n accountId\n eventTypeId\n eventType {\n id\n active\n areaId\n name\n description\n duration\n bufferTime\n resourceName\n numberOfResources\n schedule {\n workdays {\n id\n name\n startDayTime\n endDayTime\n selected\n }\n minNoticeHours\n maxDaysIntoFuture\n }\n }\n }\n advisedBy\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const shipmentLineItemByInventoryForValidation = /* GraphQL */ `\n query ShipmentLineItemByInventory(\n $inventoryId: ID\n $sortDirection: ModelSortDirection\n $filter: ModelShipmentLineItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n shipmentLineItemByInventory(\n inventoryId: $inventoryId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n active\n status\n outboundShipment {\n id\n active\n status\n state\n }\n }\n nextToken\n }\n }\n`;\n\nexport const getOutboundShipmentForUpdate = /* GraphQL */ `\n query GetOutboundShipment($id: ID!) {\n getOutboundShipment(id: $id) {\n id\n active\n status\n state\n pickupNumber\n carrierType\n accountName\n accountId\n billToAccountId\n createDateTime\n arrivalDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n reloadYardId\n invoiceId\n history {\n type\n date\n by\n text\n }\n }\n }\n`;\n\nexport const getOutboundShipmentForInvoice = /* GraphQL */ `\n query GetOutboundShipment($id: ID!) {\n getOutboundShipment(id: $id) {\n id\n active\n groups\n status\n state\n poNumber\n pickupNumber\n carrierType\n transfer\n transferToAccountId\n transferToAccountName\n railCarNumber\n createDateTime\n scheduledDateTime\n arrivalDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n tareWeight\n ladenWeight\n netWeight\n weightUnits\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n areaId\n zoneId\n history {\n type\n date\n by\n text\n }\n accountName\n accountId\n billToAccountId\n reloadYardId\n invoiceId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n units\n sortKey\n commodity {\n id\n name\n defaultUnits\n }\n }\n customFields\n }\n }\n`;\n\nexport const getOutboundShipmentForValidate = /* GraphQL */ `\n query GetOutboundShipment($id: ID!) {\n getOutboundShipment(id: $id) {\n id\n invoiceId\n }\n }\n`;\n\nexport const outboundShipmentByStatus = /* GraphQL */ `\n query OutboundShipmentByStatus(\n $reloadYardId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelOutboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n outboundShipmentByStatus(\n reloadYardId: $reloadYardId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n state\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n createDateTime\n pickupNumber\n yardSignatureKey\n carrierSignatureKey\n carrierType\n carrier\n bolNumber\n railCarNumber\n scheduledDateTime\n arrivalDateTime\n startDateTime\n endDateTime\n departureDateTime\n tareWeight\n ladenWeight\n netWeight\n weightUnits\n totalQuantity\n totalUnits\n areaId\n accountName\n accountId\n reloadYardId\n hasException\n }\n nextToken\n }\n }\n`;\n\nexport const outboundShipmentByStatusOptions = /* GraphQL */ `\n query OutboundShipmentByStatus(\n $reloadYardId: ID\n $status: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelOutboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n outboundShipmentByStatus(\n reloadYardId: $reloadYardId\n status: $status\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n poNumber\n pickupNumber\n accountName\n reloadYardId\n status\n active\n endDateTime\n arrivalDateTime\n scheduledDateTime\n createDateTime\n }\n }\n }\n`;\n\n//###############################################\n// managerApp/outboundList\n//###############################################\nexport const outboundShipmentByReloadYardByStatusByDates = /* GraphQL */ `\n query OutboundShipmentByReloadYardByStatusByDates(\n $reloadYardId: ID\n $statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime: ModelOutboundShipmentOutboundShipmentByReloadYardByStatusByDatesCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelOutboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n outboundShipmentByReloadYardByStatusByDates(\n reloadYardId: $reloadYardId\n statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime: $statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n status\n state\n transferToAccountName\n hasException\n poNumber\n pickupNumber\n shipTo {\n name\n state\n }\n carrier\n bolNumber\n carrierType\n railCarNumber\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n netWeight\n weightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n assignedTo\n accountName\n accountId\n account {\n id\n businessName\n }\n reloadYardId\n shipmentLineItems {\n items {\n id\n status\n lotNumber\n totalQuantityToPick\n inventoryId\n inventory {\n id\n productCode\n productName\n }\n inventoryItems {\n items {\n inventoryItem {\n id\n quantityOnHand\n quantityCommitted\n status\n locationFullName\n }\n quantityToPick\n status\n }\n nextToken\n }\n }\n }\n invoiceId\n invoice {\n total\n invoiceNumber\n }\n }\n nextToken\n }\n }\n`;\n\n//###############################################\n// customerApp/outboundList\n//###############################################\nexport const outboundShipmentByAccountByStatusByDates = /* GraphQL */ `\n query OutboundShipmentByAccountByStatusByDates(\n $accountId: ID\n $statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime: ModelOutboundShipmentOutboundShipmentByAccountByStatusByDatesCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelOutboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n outboundShipmentByAccountByStatusByDates(\n accountId: $accountId\n statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime: $statusEndDateTimeArrivalDateTimeScheduledDateTimeCreateDateTime\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n status\n state\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n state\n }\n carrier\n bolNumber\n carrierType\n railCarNumber\n createDateTime\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n daysOnDemurrageClock\n tareWeight\n ladenWeight\n netWeight\n weightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n billToAccountId\n assignedTo\n accountName\n accountId\n account {\n id\n businessName\n }\n reloadYardId\n shipmentLineItems {\n items {\n id\n status\n lotNumber\n totalQuantityToPick\n inventoryId\n inventory {\n id\n productCode\n productName\n }\n inventoryItems {\n items {\n inventoryItem {\n id\n quantityOnHand\n quantityCommitted\n status\n locationFullName\n }\n quantityToPick\n status\n }\n nextToken\n }\n }\n }\n invoiceId\n }\n nextToken\n }\n }\n`;\n\nexport const searchOutboundShipments = /* GraphQL */ `\n query SearchOutboundShipments(\n $filter: SearchableOutboundShipmentFilterInput\n $sort: SearchableOutboundShipmentSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchOutboundShipments(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n status\n state\n transfer\n transferToAccountId\n hasException\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n state\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n createDateTime\n scheduledDateTime\n arrivalDateTime\n endDateTime\n departureDateTime\n daysOnDemurrageClock\n totalQuantity\n totalUnits\n tareWeight\n ladenWeight\n netWeight\n weightUnits\n billQuantity\n billUnits\n billToAccountId\n assignedTo\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n sortKey\n reloadYardCommodityId\n accountName\n accountId\n # account {\n # id\n # businessName\n # }\n reloadYardId\n shipmentLineItems {\n items {\n id\n status\n lotNumber\n totalQuantityToPick\n inventoryId\n inventory {\n id\n productId\n productCode\n productName\n inventoryUnits\n }\n inventoryItems {\n items {\n inventoryItem {\n id\n quantityOnHand\n quantityCommitted\n status\n locationFullName\n }\n quantityToPick\n status\n }\n nextToken\n }\n }\n }\n invoiceId\n invoice {\n id\n total\n invoiceNumber\n }\n }\n nextToken\n total\n }\n }\n`;\n\nexport const searchOutboundShipmentsDropDown = /* GraphQL */ `\n query SearchOutboundShipments(\n $filter: SearchableOutboundShipmentFilterInput\n $sort: SearchableOutboundShipmentSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchOutboundShipments(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n railCarNumber\n accountName\n trackId\n }\n nextToken\n total\n }\n }\n`;\n\nexport const countOutboundShipments = /* GraphQL */ `\n query SearchOutboundShipments(\n $filter: SearchableOutboundShipmentFilterInput\n $sort: SearchableOutboundShipmentSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchOutboundShipments(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n total\n }\n }\n`;\n\nexport const getShipmentLineItem = /* GraphQL */ `\n query GetShipmentLineItem($id: ID!) {\n getShipmentLineItem(id: $id) {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n totalQuantityToPick\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n pickupPhoto {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n outboundShipmentId\n accountId\n reloadYardId\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n lotType\n areaId\n zoneId\n # outboundShipmentId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n # notes {\n # type\n # date\n # by\n # text\n # }\n history {\n type\n date\n by\n text\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n width\n length\n height\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n accountNumber\n lotNumberPrefix\n businessName\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n billingEmail\n reloadYardId\n secondaryReview\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n instructions\n accountName\n accountId\n reloadYardId\n invoiceId\n areaId\n zoneId\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n customFields\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n commodity {\n id\n name\n defaultUnits\n }\n # owner\n # groups\n # active\n # verified\n units\n sortKey\n # createdAt\n # updatedAt\n }\n customFields\n # createdAt\n # updatedAt\n }\n inventoryItems {\n items {\n id\n owner\n groups\n reloadYardId\n outboundShipmentId\n hasException\n barcodeException\n barcodeExceptionNote\n otherException\n otherExceptionNote\n shipmentLineItemId\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n status\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleList\n # outboundShipmentId\n latitude\n longitude\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n customFields\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n aisleId\n bay\n level\n position\n capacityUsed\n capacityAllocated\n length\n width\n sortKey\n createdAt\n updatedAt\n }\n history {\n type\n date\n by\n text\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n createdAt\n updatedAt\n }\n quantityToPick\n status\n createdAt\n updatedAt\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const getOutboundShipmentMobile = /* GraphQL */ `\n query GetOutboundShipment($id: ID!) {\n getOutboundShipment(id: $id) {\n id\n owner\n status\n state\n active\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n mustTarp\n seals {\n items {\n id\n active\n owner\n groups\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n status\n updatedAt\n }\n nextToken\n }\n skipSignature\n yardSignatureKey\n carrierSignatureKey\n createDateTime\n scheduledDateTime\n arrivalDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n tareWeight\n ladenWeight\n netWeight\n weightUnits\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n trackId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n location {\n id\n name\n type\n area {\n prefix\n }\n zone {\n prefix\n }\n aisle {\n name\n type\n }\n }\n previousCar\n isCollected\n sortKey\n photos {\n bucket\n region\n key\n }\n sealNumber\n assignedTo\n instructions\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n accountName\n accountId\n account {\n id\n trackInboundSeals\n lotNumberPrefix\n businessName\n reloadYardId\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n outboundReview\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n bolTemplate {\n bucket\n region\n key\n type\n }\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n }\n reloadYardId\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n totalQuantityToPick\n outboundShipmentId\n reloadYardId\n inventoryId\n sortKey\n inventory {\n id\n active\n groups\n reloadYardId\n status\n outboundShipmentId\n productName\n productCode\n productId\n product {\n id\n category\n name\n productCode\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n }\n accountName\n accountId\n lotType\n lotNumber\n poNumber\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n units\n sortKey\n commodity {\n id\n name\n defaultUnits\n locationLoadType\n }\n }\n photos {\n bucket\n region\n key\n }\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityOnHand\n quantityShipped\n quantityCommitted\n quantityPhysical\n inventoryUnits\n weight\n weightUnits\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n customFields\n }\n inventoryItems {\n items {\n id\n status\n outboundShipmentId\n shipmentLineItemId\n inventoryItemId\n inventoryItem {\n id\n quantityOnHand\n quantityCommitted\n status\n inventoryId\n inventory {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n locationFullName\n aisleList\n outboundShipmentId\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n customFields\n }\n location {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n capacityUsed\n capacityAllocated\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n areaId\n area {\n id\n active\n reloadYardId\n name\n prefix\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n sortKey\n }\n aisleId\n aisle {\n id\n name\n type\n areaId\n zoneId\n bays\n levels\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n }\n bay\n level\n position\n length\n width\n sortKey\n }\n outboundShipmentId\n locationFullName\n reloadYardId\n }\n quantityToPick\n hasException\n barcodeException\n }\n nextToken\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n }\n }\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n units\n sortKey\n commodity {\n id\n name\n defaultUnits\n }\n }\n invoiceId\n invoice {\n status\n invoiceNumber\n total\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n }\n }\n`;\n\nexport const getShipmentLineItemInventoryItemMobile = /* GraphQL */ `\n query GetShipmentLineItemInventoryItem($id: ID!) {\n getShipmentLineItemInventoryItem(id: $id) {\n id\n inventoryItemId\n shipmentLineItemId\n hasException\n barcodeException\n barcodeExceptionNote\n otherException\n otherExceptionNote\n inventoryItem {\n id\n barcode\n quantityOnHand\n quantityCommitted\n inventoryId\n inventory {\n id\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n lotType\n areaId\n zoneId\n aisleList\n outboundShipmentId\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n customFields\n }\n areaId\n zoneId\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n capacityUsed\n topDownPickOrder\n length\n width\n sortKey\n }\n bay\n level\n position\n capacityUsed\n capacityAllocated\n length\n width\n sortKey\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n productId\n # tags {\n # nextToken\n # }\n }\n outboundShipmentId\n locationFullName\n }\n quantityToPick\n status\n }\n }\n`;\n\nexport const getShipmentLineItemLookup = /* GraphQL */ `\n query GetShipmentLineItem($id: ID!) {\n getShipmentLineItem(id: $id) {\n id\n sortKey\n lotNumber\n totalQuantityToPick\n status\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n pickupPhoto {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n outboundShipmentId\n accountId\n reloadYardId\n inventoryId\n inventory {\n id\n lotNumber\n poNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n lotType\n areaId\n zoneId\n outboundShipmentId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n productName\n productCode\n productId\n product {\n id\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n status\n # accountNumber\n lotNumberPrefix\n businessName\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n trackInboundSeals\n trackInventorySeals\n verifyOutboundRailCar\n verifyInboundRailCar\n # einNumber\n # send1099\n email\n # phone\n # fax\n # website\n billingEmail\n # addressState\n reloadYardId\n # inboundInstructions\n # podEmail\n outboundInstructions\n posEmail\n secondaryReview\n }\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n commodity {\n id\n name\n defaultUnits\n locationLoadType\n }\n active\n verified\n units\n sortKey\n }\n customFields\n }\n inventoryItems {\n items {\n id\n owner\n groups\n reloadYardId\n shipmentLineItemId\n inventoryItemId\n inventoryItem {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n inventoryId\n inventory {\n id\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n lotType\n aisleList\n outboundShipmentId\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n customFields\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n createdAt\n updatedAt\n }\n quantityToPick\n }\n }\n }\n }\n`;\nexport const getOutboundShipmentTimeline = /* GraphQL */ `\n query GetOutboundShipment($id: ID!) {\n getOutboundShipment(id: $id) {\n id\n status\n transfer\n transferToAccountId\n transferToAccountName\n poNumber\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrierType\n carrier\n bolNumber\n railCarNumber\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n totalQuantity\n totalUnits\n sealNumber\n assignedTo\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n shipmentLineItems {\n items {\n id\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n }\n }\n invoiceId\n createdAt\n }\n }\n`;\nexport const shipmentLineItemByInventoryTimeline = /* GraphQL */ `\n query ShipmentLineItemByInventory(\n $inventoryId: ID\n $sortDirection: ModelSortDirection\n $filter: ModelShipmentLineItemFilterInput\n $limit: Int\n $nextToken: String\n ) {\n shipmentLineItemByInventory(\n inventoryId: $inventoryId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n status\n sortKey\n lotNumber\n poNumber\n totalQuantityToPick\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n outboundShipmentId\n outboundShipment {\n id\n poNumber\n pickupNumber\n carrierType\n carrier\n bolNumber\n railCarNumber\n scheduledDateTime\n arrivalDateTime\n placementDateTime\n startDateTime\n endDateTime\n departureDateTime\n collectedDateTime\n deliveryDateTime\n daysOnDemurrageClock\n ladenWeight\n totalQuantity\n totalUnits\n billUnits\n sortKey\n accountName\n invoiceId\n customFields\n }\n inventoryItems {\n items {\n id\n inventoryId\n quantityToPick\n status\n inventoryItem {\n id\n quantityOnHand\n quantityCommitted\n status\n locationFullName\n }\n }\n }\n }\n }\n }\n`;\n","// https://github.com/aws-amplify/amplify-cli/issues/2420\n\nexport const getInboundShipment = /* GraphQL */ `\n query GetInboundShipment($id: ID!) {\n getInboundShipment(id: $id) {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n stepName\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n sealNumbers\n seals {\n items {\n id\n active\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n brokenAt\n brokenBy\n validated\n description\n updatedAt\n }\n }\n areaId\n area {\n id\n active\n reloadYardId\n name\n prefix\n areaType\n sortKey\n zones {\n items {\n id\n active\n accountId\n areaId\n name\n prefix\n sortKey\n }\n nextToken\n }\n }\n zoneId\n zone {\n id\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n sortKey\n }\n photos {\n bucket\n region\n key\n }\n attachments {\n bucket\n region\n key\n type\n }\n receiptFile {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptNumber\n instructions\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n accountName\n accountId\n account {\n id\n lotNumberPrefix\n businessName\n inboundBillingUnits\n defaultWeightUnits\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n podEmail\n podPhotos\n podAttachments\n trackInboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n checklists {\n items {\n id\n active\n name\n processName\n checklistItems {\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n }\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n }\n reloadYardId\n inventories {\n items {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n pcs\n pcsHeight\n pcsWidth\n pcsLength\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n photos {\n bucket\n region\n key\n }\n productName\n productCode\n productId\n product {\n id\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n pcsHeight\n pcsWidth\n pcsLength\n # width\n # length\n # height\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n }\n aggregateInventoryId\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n auditId\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n reloadYardCommodityId\n reloadYardCommodity {\n commodity {\n locationLoadType\n }\n }\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n status\n inboundShipmentId\n inventoryId\n areaId\n zoneId\n aisleId\n locationId\n location {\n id\n active\n areaId\n zoneId\n aisleId\n productId\n reloadYardId\n type\n capacityUsed\n capacityAllocated\n sortKey\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n }\n outboundShipmentId\n locationFullName\n }\n }\n shipmentLineItems {\n items {\n id\n status\n inventoryId\n inventoryItems {\n items {\n id\n inventoryItemId\n status\n }\n nextToken\n }\n }\n }\n customFields\n sortKey\n # createdAt\n updatedAt\n }\n nextToken\n }\n invoiceId\n invoice {\n status\n invoiceNumber\n total\n }\n trackId\n location {\n id\n name\n type\n areaId\n area {\n id\n name\n prefix\n areaType\n }\n zoneId\n zone {\n id\n name\n prefix\n accountId\n zoneType\n }\n aisleId\n aisle {\n id\n name\n type\n }\n }\n previousCar\n reloadYardCommodityId\n reloadYardCommodity {\n id\n commodityId\n units\n sortKey\n commodity {\n name\n locationLoadType\n validUom\n inventoryFields\n }\n }\n checklistId\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n # createdAt\n updatedAt\n }\n }\n`;\n\nexport const getInboundShipmentForUpdate = /* GraphQL */ `\n query GetInboundShipment($id: ID!) {\n getInboundShipment(id: $id) {\n id\n active\n status\n state\n railCarNumber\n accountName\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n releaseDateTime\n invoiceId\n }\n }\n`;\n\nexport const getInboundShipmentForValidate = /* GraphQL */ `\n query GetInboundShipment($id: ID!) {\n getInboundShipment(id: $id) {\n id\n invoiceId\n }\n }\n`;\n\nexport const inboundShipmentByReloadYardByAccount = /* GraphQL */ `\n query InboundShipmentByReloadYardByAccount(\n $reloadYardId: ID\n $accountId: ModelIDKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inboundShipmentByReloadYardByAccount(\n reloadYardId: $reloadYardId\n accountId: $accountId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n }\n nextToken\n }\n }\n`;\n\nexport const inboundShipmentByStateByRailcarReduced = /* GraphQL */ `\n query InboundShipmentByStateByRailcar(\n $reloadYardId: ID\n $stateRailCarNumber: ModelInboundShipmentInboundShipmentByStateByRailcarCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inboundShipmentByStateByRailcar(\n reloadYardId: $reloadYardId\n stateRailCarNumber: $stateRailCarNumber\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n status\n state\n lotNumber\n poNumber\n lotNumberOverride\n railCarNumber\n accountName\n reloadYardId\n railCarNumber\n carrierType\n accountName\n releaseDateTime\n placedDateTime\n notifyDateTime\n scheduledDateTime\n createDateTime\n accountId\n assignedTo\n areaId\n zoneId\n verificationRequired\n unloadedBy\n }\n }\n }\n`;\n\nexport const getInboundShipmentMobile = /* GraphQL */ `\n query GetInboundShipment($id: ID!) {\n getInboundShipment(id: $id) {\n id\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n verificationRequired\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n collectedDateTime\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n stripeBillingDateTime\n daysOnDemurrageClock\n reloadYardCommodityId\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n sealNumbers\n seals {\n items {\n id\n active\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n createdAt\n createdBy\n brokenAt\n brokenBy\n validated\n description\n updatedAt\n }\n }\n stepName\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n areaId\n area {\n id\n name\n color\n prefix\n areaType\n }\n zoneId\n zone {\n id\n name\n prefix\n color\n accountId\n areaId\n }\n photos {\n bucket\n region\n key\n }\n instructions\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n accountName\n accountId\n account {\n id\n lotNumberPrefix\n businessName\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n inboundPhotos\n inventoryPrimaryField\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPhotos\n trackInboundSeals\n }\n reloadYardId\n inventories {\n items {\n id\n status\n accountId\n accountName\n lotNumber\n poNumber\n areaId\n zoneId\n railCarNumber\n deliveryDateTime\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n quantityShipped\n inventoryUnits\n underShipment\n history {\n type\n date\n by\n text\n }\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n sortKey\n turnDays\n reloadYardCommodityId\n aggregateInventoryId\n customFields\n inventoryItems {\n items {\n id\n status\n quantityOnHand\n locationFullName\n areaId\n zoneId\n aisleId\n locationId\n inventoryId\n location {\n id\n name\n type\n areaId\n zoneId\n aisleId\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n }\n }\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n lotType\n productName\n productCode\n productId\n }\n }\n trackId\n previousCar\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n units\n sortKey\n commodity {\n id\n name\n defaultUnits\n }\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n }\n }\n`;\n\n//###############################################\n// managerApp/inboundList\n//###############################################\nexport const inboundShipmentByReloadYardByStatusByDates = /* GraphQL */ `\n query InboundShipmentByReloadYardByStatusByDates(\n $reloadYardId: ID\n $statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime: ModelInboundShipmentInboundShipmentByReloadYardByStatusByDatesCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inboundShipmentByReloadYardByStatusByDates(\n reloadYardId: $reloadYardId\n statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime: $statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n hasException\n active\n status\n state\n poNumber\n lotNumber\n # lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n netWeight\n weightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n daysOnDemurrageClock\n assignedTo\n verificationRequired\n accountName\n accountId\n account {\n id\n lotNumberPrefix\n businessName\n inventoryStorageThreshold\n }\n reloadYardId\n inventories {\n items {\n id\n status\n productCode\n productName\n quantityDelivered\n quantityOnHand\n quantityCommitted\n }\n }\n invoiceId\n invoice {\n total\n invoiceNumber\n }\n areaId\n zoneId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n commodityId\n active\n units\n # sortKey\n }\n createdAt\n }\n nextToken\n }\n }\n`;\n\nexport const reportInboundShipmentByReloadYardByStatusByDates = /* GraphQL */ `\n query InboundShipmentByReloadYardByStatusByDates(\n $reloadYardId: ID\n $statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime: ModelInboundShipmentInboundShipmentByReloadYardByStatusByDatesCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inboundShipmentByReloadYardByStatusByDates(\n reloadYardId: $reloadYardId\n statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime: $statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n active\n status\n carrierType\n accountName\n accountId\n poNumber\n invoiceId\n railCarNumber\n createDateTime\n notes {\n type\n date\n by\n text\n public\n }\n invoice {\n invoiceNumber\n id\n total\n }\n }\n nextToken\n }\n }\n`;\n\n//###############################################\n// customerApp/inboundList\n//###############################################\nexport const inboundShipmentByAccountByStatusByDates = /* GraphQL */ `\n query InboundShipmentByAccountByStatusByDates(\n $accountId: ID\n $statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime: ModelInboundShipmentInboundShipmentByAccountByStatusByDatesCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInboundShipmentFilterInput\n $limit: Int\n $nextToken: String\n ) {\n inboundShipmentByAccountByStatusByDates(\n accountId: $accountId\n statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime: $statusReleaseDateTimePlacedDateTimeNotifyDateTimeScheduledDateTimeCreateDateTime\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n active\n status\n state\n poNumber\n lotNumber\n # lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n netWeight\n weightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n daysOnDemurrageClock\n assignedTo\n verificationRequired\n accountName\n accountId\n account {\n id\n lotNumberPrefix\n businessName\n inventoryStorageThreshold\n }\n reloadYardId\n inventories {\n items {\n id\n status\n productCode\n productName\n quantityDelivered\n quantityOnHand\n quantityCommitted\n }\n }\n invoiceId\n areaId\n zoneId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n commodityId\n active\n units\n # sortKey\n }\n createdAt\n }\n nextToken\n }\n }\n`;\n\nexport const searchInboundShipments = /* GraphQL */ `\n query SearchInboundShipments(\n $filter: SearchableInboundShipmentFilterInput\n $sort: SearchableInboundShipmentSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInboundShipments(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n netWeight\n weightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n daysOnDemurrageClock\n assignedTo\n verificationRequired\n accountName\n accountId\n account {\n id\n lotNumberPrefix\n businessName\n inventoryStorageThreshold\n }\n invoiceId\n invoice {\n id\n total\n invoiceNumber\n }\n inventories {\n items {\n id\n status\n productCode\n productName\n quantityDelivered\n quantityOnHand\n quantityCommitted\n }\n }\n areaId\n zoneId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n commodityId\n active\n units\n sortKey\n }\n createdAt\n }\n nextToken\n total\n }\n }\n`;\n\nexport const countInboundShipments = /* GraphQL */ `\n query SearchInboundShipments(\n $filter: SearchableInboundShipmentFilterInput\n $sort: SearchableInboundShipmentSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchInboundShipments(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n total\n }\n }\n`;\nexport const getInboundShipmentTimeline = /* GraphQL */ `\n query GetInboundShipment($id: ID!) {\n getInboundShipment(id: $id) {\n id\n status\n poNumber\n lotNumber\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n placedDateTime\n releaseDateTime\n collectedDateTime\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n zone {\n name\n }\n unloadedBy\n reviewedBy\n hasException\n unsafeShipment\n unsafeShipmentNote\n brokenSeal\n brokenSealNote\n otherException\n otherExceptionNote\n instructions\n checklist {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n accountName\n accountId\n account {\n id\n accountNumber\n businessName\n inboundCustomFields {\n id\n name\n type\n display\n }\n outboundCustomFields {\n id\n name\n type\n display\n }\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n }\n\n invoiceId\n invoice {\n id\n }\n isCollected\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n }\n }\n`;\n\nexport const getInboundShipmentSeals = /* GraphQL */ `\n query GetInboundShipment($id: ID!) {\n getInboundShipment(id: $id) {\n sealNumbers\n id\n owner\n groups\n reloadYardId\n accountId\n accountName\n seals {\n items {\n id\n active\n owner\n groups\n status\n reloadYardId\n accountId\n accountName\n referenceId\n referenceName\n barcode\n isScanned\n createdAt\n createdBy\n validated\n reValidated\n brokenAt\n brokenBy\n description\n updatedAt\n }\n nextToken\n }\n history {\n type\n date\n by\n text\n }\n }\n }\n`;\n","import React, { useEffect, useState } from \"react\";\nimport { Storage } from \"aws-amplify\";\n\nimport { useNotify, useRecordContext } from \"ra-core\";\nimport { sanitizeFieldRestProps } from \"ra-ui-materialui\";\n\nimport { Typography } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport classnames from \"classnames\";\n\nimport { logError } from \"../../utils/appUtils\";\nimport { getKeyFilename } from \"../../utils/fileUtils\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"inline-block\",\n marginTop: theme.spacing(0),\n },\n name: \"RaFileField\",\n linkText: { color: theme.palette.primary.main },\n}));\n\nconst getFileFromStorage = async (\n keyValue,\n download,\n setSourceValue,\n setTitleValue,\n setStatus,\n notify\n) => {\n try {\n const response = await Storage.get(keyValue, { download: download });\n if (response) {\n setSourceValue(response);\n const title = getKeyFilename(keyValue);\n setTitleValue(title);\n return { sourceValue: response, titleValue: title };\n } else {\n setStatus(\"Error...\");\n const error = `Storage error getting ${keyValue}`;\n logError(\"common:FileField:useEffect\", error, notify);\n }\n } catch (error) {\n setStatus(\"Error...\");\n logError(\"common:FileField:useEffect\", error, notify);\n }\n};\n\n/**\n * Render a link to a file based on a path contained in a record field\n *\n * @example\n * import { FileField } from 'react-admin';\n *\n * <FileField source=\"url\" title=\"title\" />\n *\n * // renders the record { id: 123, url: 'doc.pdf', title: 'Presentation' } as\n * <div>\n * <a href=\"doc.pdf\" title=\"Presentation\">Presentation</a>\n * </div>\n */\nexport const FileField = (props) => {\n const {\n className,\n classes: classesOverride,\n emptyText,\n source,\n title,\n src,\n target,\n download = false,\n ping,\n rel,\n ...rest\n } = props;\n const notify = useNotify();\n const record = useRecordContext(props);\n const classes = useStyles(props);\n\n const [keyValue, setKeyValue] = useState(null);\n const [sourceValue, setSourceValue] = useState(null);\n const [titleValue, setTitleValue] = useState(null);\n const [status, setStatus] = useState(\"Loading...\");\n\n useEffect(() => {\n const sourceData = record[source];\n\n if (Array.isArray(sourceData)) {\n // array of saved files in FileField\n const keys = sourceData.map((item) => item.key);\n setKeyValue(keys);\n } else if (typeof sourceData === \"object\" && sourceData !== null) {\n // single saved file in FileField\n const key = sourceData.key;\n setKeyValue(key);\n } else if (record.key) {\n // saved file in FileInput\n setKeyValue(record.key);\n } else if (record.src) {\n // new file in FileInput\n setSourceValue(record.src);\n setTitleValue(record.title);\n }\n }, [record, source]);\n\n useEffect(() => {\n const fetchData = async () => {\n debugger;\n if (Array.isArray(keyValue)) {\n const data = await Promise.all(\n keyValue.map((key) =>\n getFileFromStorage(\n key,\n download,\n setSourceValue,\n setTitleValue,\n setStatus,\n notify\n )\n )\n );\n setSourceValue(data);\n } else if (typeof keyValue === \"string\") {\n getFileFromStorage(\n keyValue,\n download,\n setSourceValue,\n setTitleValue,\n setStatus,\n notify\n );\n }\n };\n\n if (keyValue) fetchData();\n }, [keyValue, download]);\n\n if (record?.src && sourceValue === null) {\n return (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(rest)}\n >\n {status}\n </Typography>\n );\n }\n\n if (Array.isArray(sourceValue)) {\n debugger;\n return (\n <ul\n className={classnames(classes.root, className)}\n {...sanitizeFieldRestProps(rest)}\n >\n {sourceValue.map((file, index) => {\n const fileSourceValue = file.sourceValue;\n const fileTitleValue = file.titleValue;\n\n return (\n <li key={index}>\n <a\n href={fileSourceValue}\n title={fileTitleValue}\n target={target}\n download={download}\n ping={ping}\n rel={rel}\n className={classes.linkText}\n >\n {fileTitleValue}\n </a>\n </li>\n );\n })}\n </ul>\n );\n }\n\n return (\n <div\n className={classnames(classes.root, className)}\n {...sanitizeFieldRestProps(rest)}\n >\n <a\n href={sourceValue}\n title={titleValue}\n target={target}\n download={download}\n ping={ping}\n rel={rel}\n className={classes.linkText}\n >\n {titleValue}\n </a>\n </div>\n );\n};\n","export const getAccount = /* GraphQL */ `\n query GetAccount($id: ID!) {\n getAccount(id: $id) {\n id\n owner\n groups\n active\n status\n reloadYardId\n accountNumber\n corporateAccount\n lotNumberPrefix\n businessName\n displayName\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n history {\n type\n date\n by\n text\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n inboundPhotos\n podEmail\n podPhotos\n podAttachments\n inboundAdviceInputs\n inboundEventTypeId\n lotType\n lotNumberOverride\n verifyInboundRailCar\n trackInboundSeals\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n outboundReview\n generatePickupNumber\n outboundAdviceInputs\n outboundEventTypeId\n posEmail\n posPhotos\n posAttachments\n outboundSkipSignature\n outboundPhotos\n mustTarp\n verifyOutboundRailCar\n trackOutboundSeals\n inventoryCustomFields {\n id\n name\n type\n display\n }\n inventoryPrimaryField\n inventoryPhotos\n trackInventorySeals\n isBarcodeRequired\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n receiptTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n secondaryReview\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n items {\n id\n owner\n groups\n active\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n accountName\n accountId\n reloadYardId\n createdAt\n updatedAt\n }\n nextToken\n }\n checklists {\n items {\n id\n owner\n groups\n active\n resourceId\n name\n description\n processName\n reloadYardCommodityId\n createdBy\n createdAt\n updatedAt\n checklistItems {\n id\n name\n description\n stepName\n isRequired\n isCompleted\n completedBy\n completedAt\n }\n }\n nextToken\n }\n products {\n items {\n id\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n width\n length\n height\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n history {\n type\n date\n by\n text\n }\n }\n nextToken\n }\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const accountByLotPrefix = /* GraphQL */ `\n query AccountByLotPrefix(\n $reloadYardId: ID\n $lotNumberPrefix: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAccountFilterInput\n $limit: Int\n $nextToken: String\n ) {\n accountByLotPrefix(\n reloadYardId: $reloadYardId\n lotNumberPrefix: $lotNumberPrefix\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n lotNumberPrefix\n businessName\n reloadYardId\n }\n nextToken\n }\n }\n`;\n\nexport const accountByEmail = /* GraphQL */ `\n query AccountByEmail(\n $reloadYardId: ID\n $email: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAccountFilterInput\n $limit: Int\n $nextToken: String\n ) {\n accountByEmail(\n reloadYardId: $reloadYardId\n email: $email\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n email\n businessName\n reloadYardId\n }\n nextToken\n }\n }\n`;\n\nexport const accountByActiveByNameDropDown = /* GraphQL */ `\n query AccountByActiveByName(\n $reloadYardId: ID\n $activeBusinessName: ModelAccountAccountByActiveByNameCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAccountFilterInput\n $limit: Int\n $nextToken: String\n ) {\n accountByActiveByName(\n reloadYardId: $reloadYardId\n activeBusinessName: $activeBusinessName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n active\n businessName\n displayName\n corporateAccount\n lotNumberPrefix\n defaultWeightUnits # used in locationUtils.createAggregateInventory.getWeightUnits\n # inventoryCustomFields needed for inventory / inbound / outbound list\n inventoryCustomFields {\n id\n name\n type\n display\n }\n }\n nextToken\n }\n }\n`;\n\nexport const productByAccountByActiveByNameDropDown = /* GraphQL */ `\n query ProductByAccountByActiveByName(\n $accountId: ID\n $activeName: ModelProductProductByAccountByActiveByNameCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelProductFilterInput\n $limit: Int\n $nextToken: String\n ) {\n productByAccountByActiveByName(\n accountId: $accountId\n activeName: $activeName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n name\n reloadYardCommodityId\n productCode\n defaultUnits\n defaultWeightUnits\n lbs\n tn\n cwt\n kg\n mt\n }\n nextToken\n }\n }\n`;\n\nexport const getLocationProduct = /* GraphQL */ `\n query GetProduct($id: ID!) {\n getProduct(id: $id) {\n id\n accountId\n name\n productCode\n defaultUnits\n defaultWeightUnits\n lbs\n tn\n cwt\n kg\n mt\n }\n }\n`;\n\nexport const accountByActiveByName = /* GraphQL */ `\n query AccountByActiveByName(\n $reloadYardId: ID\n $activeBusinessName: ModelAccountAccountByActiveByNameCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelAccountFilterInput\n $limit: Int\n $nextToken: String\n ) {\n accountByActiveByName(\n reloadYardId: $reloadYardId\n activeBusinessName: $activeBusinessName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n groups\n active\n status\n accountNumber\n corporateAccount\n lotNumberPrefix\n businessName\n displayName\n inventoryStorageThreshold\n paymentTerms\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n billingEmail\n contacts {\n name\n email\n phone\n }\n addressState\n services {\n items {\n id\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n }\n }\n }\n nextToken\n }\n }\n`;\n\nexport const searchAccounts = /* GraphQL */ `\n query SearchAccounts(\n $filter: SearchableAccountFilterInput\n $sort: SearchableAccountSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchAccounts(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n groups\n active\n status\n accountNumber\n lotNumberPrefix\n businessName\n displayName\n inventoryStorageThreshold\n paymentTerms\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n billingEmail\n contacts {\n name\n email\n phone\n }\n addressState\n services {\n items {\n id\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n }\n }\n }\n nextToken\n }\n }\n`;\n\n//###############################################\n// managerApp/InvoiceList\n//###############################################\nexport const invoiceByStatusByDateByAccount = /* GraphQL */ `\n query InvoiceByStatusByDateByAccount(\n $reloadYardId: ID\n $statusDueDateAccountName: ModelInvoiceInvoiceByStatusByDateByAccountCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInvoiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n invoiceByStatusByDateByAccount(\n reloadYardId: $reloadYardId\n statusDueDateAccountName: $statusDueDateAccountName\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n dueDate\n serviceDate\n sentDate\n paidDate\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n history {\n type\n date\n by\n text\n }\n accountName\n accountId\n account {\n id\n businessName\n addressState\n }\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\n\n//###############################################\n// customerApp/InvoiceList\n//###############################################\nexport const invoiceByAccountByStatusByDate = /* GraphQL */ `\n query InvoiceByAccountByStatusByDate(\n $reloadYardId: ID\n $accountIdStatusDueDate: ModelInvoiceInvoiceByAccountByStatusByDateCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInvoiceFilterInput\n $limit: Int\n $nextToken: String\n ) {\n invoiceByAccountByStatusByDate(\n reloadYardId: $reloadYardId\n accountIdStatusDueDate: $accountIdStatusDueDate\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n dueDate\n serviceDate\n sentDate\n paidDate\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n history {\n type\n date\n by\n text\n }\n accountName\n accountId\n account {\n id\n businessName\n addressState\n }\n reloadYardId\n inboundShipmentId\n outboundShipmentId\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\n\nexport const getInvoice = /* GraphQL */ `\n query GetInvoice($id: ID!) {\n getInvoice(id: $id) {\n id\n owner\n groups\n active\n status\n invoiceNumber\n poNumber\n railCarNumber\n pickupNumber\n dueDate\n serviceDate\n sentDate\n paidDate\n lineItems {\n items {\n id\n invoiceId\n serviceId\n owner\n groups\n quantity\n units\n unitCost\n amount\n itemTax\n taxRate {\n taxCode\n taxRate\n }\n serviceNote\n serviceDate\n createdAt\n updatedAt\n }\n nextToken\n }\n subtotal\n discount\n adjustment\n tax\n total\n balance\n notes\n customFields\n history {\n type\n date\n by\n text\n }\n contact {\n name\n email\n phone\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n lotNumberPrefix\n businessName\n inventoryStorageThreshold\n paymentTerms\n email\n phone\n fax\n website\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n reloadYardId\n invoiceAttachments\n invoiceCustomFields {\n id\n name\n type\n display\n }\n services {\n items {\n id\n active\n status\n name\n description\n taxRate {\n taxCode\n taxRate\n }\n unit\n pcs\n car\n tl\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n }\n }\n createdAt\n updatedAt\n }\n attachments {\n bucket\n region\n key\n type\n }\n reloadYardId\n reloadYard {\n id\n name\n phone\n fax\n email\n website\n street\n city\n state\n zipCode\n country\n taxRates {\n taxCode\n taxRate\n }\n invoiceNumberPrefix\n invoiceCounter\n remittanceAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n logoImage {\n bucket\n region\n key\n }\n }\n inboundShipmentId\n inboundShipment {\n shipFrom\n originCarrier\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n scaleWeightUnits\n placedDateTime\n releaseDateTime\n inventories {\n items {\n productCode\n productName\n quantityShipped\n lotNumber\n customFields\n }\n }\n customFields\n }\n outboundShipmentId\n outboundShipment {\n pickupNumber\n shipTo {\n name\n street\n city\n state\n zipCode\n country\n }\n carrier\n bolNumber\n railCarNumber\n departureDateTime\n tareWeight\n ladenWeight\n scaleWeightUnits\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n sealNumber\n shipmentLineItems {\n items {\n sortKey\n totalQuantityToPick\n inventoryId\n inventory {\n productCode\n productName\n lotNumber\n }\n }\n nextToken\n }\n customFields\n }\n\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const productByAccountByActiveByProductCode = /* GraphQL */ `\n query ProductByAccountByActiveByProductCode(\n $accountId: ID\n $activeProductCode: ModelProductProductByAccountByActiveByProductCodeCompositeKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelProductFilterInput\n $limit: Int\n $nextToken: String\n ) {\n productByAccountByActiveByProductCode(\n accountId: $accountId\n activeProductCode: $activeProductCode\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n\n accountId\n name\n productCode\n }\n nextToken\n }\n }\n`;\n","// https://v4.mui.com/components/material-icons/#material-icons\n\nimport React from \"react\";\nimport { useRedirect } from \"react-admin\";\nimport { format, parse } from \"date-fns\";\nimport { Button } from \"@material-ui/core\";\n\nimport AcceptedIcon from \"@material-ui/icons/CheckCircleOutline\";\nimport AccountIcon from \"@material-ui/icons/RecentActors\";\nimport AddIcon from \"@material-ui/icons/AddCircleOutline\";\nimport AddAllIcon from \"@material-ui/icons/ControlPointDuplicate\";\nimport AnnouncementsIcon from \"@material-ui/icons/VolumeUp\";\nimport AisleOneSidedIcon from \"@material-ui/icons/KeyboardBackspace\";\nimport AisleTwoSidedIcon from \"@material-ui/icons/SyncAlt\";\nimport AppInfoIcon from \"@material-ui/icons/Info\";\nimport ApproveIcon from \"@material-ui/icons/ThumbUp\";\nimport ArrivedAtIcon from \"@material-ui/icons/Alarm\";\nimport ArrowUpwardIcon from \"@material-ui/icons/ArrowUpward\";\nimport ArrowDownwardIcon from \"@material-ui/icons/ArrowDownward\";\nimport AttachFileIcon from \"@material-ui/icons/AttachFile\";\nimport AttachPhotoIcon from \"@material-ui/icons/AddAPhotoOutlined\";\nimport AuditIcon from \"@material-ui/icons/PlaylistAddCheck\";\nimport AuditOutlinedIcon from \"@material-ui/icons/PlaylistAddCheckOutlined\";\nimport BarChartIcon from \"@material-ui/icons/BarChart\";\nimport BlankIcon from \"@material-ui/icons/RadioButtonUnchecked\";\nimport BugIcon from \"@material-ui/icons/Android\";\nimport CalculateIcon from \"@material-ui/icons/FunctionsOutlined\";\nimport CalendarIcon from \"@material-ui/icons/Event\";\nimport CancelIcon from \"@material-ui/icons/NotInterested\";\nimport CheckIcon from \"@material-ui/icons/Check\";\nimport ChevronLeftIcon from \"@material-ui/icons/ChevronLeft\";\nimport ChevronRightIcon from \"@material-ui/icons/ChevronRight\";\nimport CheckBoxBlankOutlinedIcon from \"@material-ui/icons/CheckBoxOutlineBlankOutlined\";\nimport ClearIcon from \"@material-ui/icons/Clear\";\nimport CloseIcon from \"@material-ui/icons/HighlightOff\";\nimport CloudUploadIcon from \"@material-ui/icons/CloudUpload\";\nimport CollectedAtIcon from \"@material-ui/icons/AccessTime\";\nimport CopyDownIcon from \"@material-ui/icons/SystemUpdateAlt\";\nimport CopyIcon from \"@material-ui/icons/AddToPhotos\";\nimport CorporateAccountIcon from \"@material-ui/icons/Business\";\nimport CreateIcon from \"@material-ui/icons/Add\";\nimport CreatedAtIcon from \"@material-ui/icons/AddAlarm\";\nimport CustomerIcon from \"@material-ui/icons/PermContactCalendar\";\nimport CustomersIcon from \"@material-ui/icons/RecentActors\";\nimport CustomFieldsIcon from \"@material-ui/icons/ViewColumn\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport DeliveredAtIcon from \"@material-ui/icons/AvTimer\";\nimport DesktopIcon from \"@material-ui/icons/DesktopWindows\";\nimport DocumentIcon from \"@material-ui/icons/Description\";\nimport DocumentRepoIcon from \"@material-ui/icons/FolderSpecial\";\nimport DoubleCheckIcon from \"@material-ui/icons/DoneAll\";\nimport DownloadIcon from \"@material-ui/icons/CloudDownload\";\nimport DropDownIcon from \"@material-ui/icons/ArrowDropDown\";\nimport EditIcon from \"@material-ui/icons/Create\";\nimport EditLocationIcon from \"@material-ui/icons/EditLocation\";\nimport EmailIcon from \"@material-ui/icons/Email\";\nimport ErrorFilledIcon from \"@material-ui/icons/Error\";\nimport ExceptionIcon from \"@material-ui/icons/ReportProblemOutlined\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport ExportIcon from \"@material-ui/icons/GetApp\";\nimport HelpIcon from \"@material-ui/icons/HelpOutlineOutlined\";\nimport InboundIcon from \"@material-ui/icons/FastForward\";\nimport InbounddOutlinedIcon from \"@material-ui/icons/FastForwardOutlined\";\nimport InfoOutlinedIcon from \"@material-ui/icons/InfoOutlined\";\nimport InventoryIcon from \"@material-ui/icons/FormatListNumberedRtl\";\nimport InventoryMapIcon from \"@material-ui/icons/Room\";\nimport InventoryMapOutlinedIcon from \"@material-ui/icons/Room\";\nimport InventoryStaleIcon from \"@material-ui/icons/HourglassFull\";\nimport InvoicesIcon from \"@material-ui/icons/MonetizationOn\";\nimport InvoiceIcon from \"@material-ui/icons/AttachMoney\";\nimport KeyboardOutlinedIcon from \"@material-ui/icons/KeyboardOutlined\";\nimport LaunchIcon from \"@material-ui/icons/Launch\";\nimport LineChartIcon from \"@material-ui/icons/ShowChart\";\nimport LinkIcon from \"@material-ui/icons/InsertLink\";\nimport LinkOffIcon from \"@material-ui/icons/LinkOff\";\nimport LogoutIcon from \"@material-ui/icons/ExitToApp\";\nimport LogsIcon from \"@material-ui/icons/Android\";\nimport LowInventoryAlertIcon from \"@material-ui/icons/PlaylistAdd\";\nimport MobileIcon from \"@material-ui/icons/PhoneAndroid\";\nimport MoreIcon from \"@material-ui/icons/More\";\nimport NavigateBeforeIcon from \"@material-ui/icons/NavigateBefore\";\nimport OKIcon from \"@material-ui/icons/CheckCircleOutline\";\nimport OutboundIcon from \"@material-ui/icons/FastRewind\";\nimport OutbounddOutlinedIcon from \"@material-ui/icons/FastRewindOutlined\";\nimport PhotoIcon from \"@material-ui/icons/PhotoLibrary\";\nimport PieChartIcon from \"@material-ui/icons/PieChart\";\nimport PlacedAtIcon from \"@material-ui/icons/AlarmOn\";\nimport PrintIcon from \"@material-ui/icons/Print\";\nimport ProfileIcon from \"@material-ui/icons/AccountBoxOutlined\";\nimport PublicIcon from \"@material-ui/icons/PublicOutlined\";\nimport RedoIcon from \"@material-ui/icons/Redo\";\nimport RefreshIcon from \"@material-ui/icons/Refresh\";\nimport RejectIcon from \"@material-ui/icons/ThumbDown\";\nimport ReleasedAtIcon from \"@material-ui/icons/AlarmOff\";\nimport RemoveIcon from \"@material-ui/icons/RemoveCircleOutline\";\nimport RemovePhotoIcon from \"@material-ui/icons/PhotoCameraOutlined\";\nimport ReportsIcon from \"@material-ui/icons/Assessment\";\nimport RollbackIcon from \"@material-ui/icons/Restore\";\nimport SaveIcon from \"@material-ui/icons/Save\";\nimport ScannerIcon from \"@material-ui/icons/CenterFocusWeak\";\nimport SealIcon from \"@material-ui/icons/LabelOutlined\";\nimport SealOffIcon from \"@material-ui/icons/LabelOffOutlined\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport ServiceIcon from \"@material-ui/icons/LocalOffer\";\nimport SetLocationIcon from \"@material-ui/icons/PinDrop\";\nimport ShowIcon from \"@material-ui/icons/RemoveRedEye\";\nimport StaffIcon from \"@material-ui/icons/SupervisorAccount\";\nimport SubscriptionIcon from \"@material-ui/icons/CardMembership\";\nimport TableChartIcon from \"@material-ui/icons/TableChart\";\nimport TaskListIcon from \"@material-ui/icons/AssignmentTurnedIn\";\nimport TaskListOutlinedIcon from \"@material-ui/icons/AssignmentTurnedInOutlined\";\nimport TaskItemOutlinedIcon from \"@material-ui/icons/CheckBoxOutlined\";\nimport ThemeToggleIcon from \"@material-ui/icons/Brightness6\";\nimport TimelineIcon from \"@material-ui/icons/Timeline\";\nimport TimerIcon from \"@material-ui/icons/Timer\";\nimport TimerOffIcon from \"@material-ui/icons/TimerOff\";\nimport TourIcon from \"@material-ui/icons/AccountTreeOutlined\";\nimport TrainIcon from \"@material-ui/icons/Train\";\nimport TransferIcon from \"@material-ui/icons/Repeat\";\nimport TruckIcon from \"@material-ui/icons/LocalShippingOutlined\";\nimport UploadIcon from \"@material-ui/icons/CloudUpload\";\nimport UserIcon from \"@material-ui/icons/People\";\nimport VideoCamIcon from \"@material-ui/icons/VideocamOutlined\";\nimport WarningIcon from \"@material-ui/icons/Warning\";\nimport XIcon from \"@material-ui/icons/CloseOutlined\";\nimport YardMapIcon from \"@material-ui/icons/AccountTreeOutlined\";\nimport YardSetupIcon from \"@material-ui/icons/Settings\";\n\nexport {\n AcceptedIcon,\n AccountIcon,\n AddIcon,\n AddAllIcon,\n AisleOneSidedIcon,\n AisleTwoSidedIcon,\n AnnouncementsIcon,\n AppInfoIcon,\n ApproveIcon,\n ArrivedAtIcon,\n ArrowUpwardIcon,\n ArrowDownwardIcon,\n AttachFileIcon,\n AttachPhotoIcon,\n AuditIcon,\n AuditOutlinedIcon,\n BarChartIcon,\n BlankIcon,\n BugIcon,\n CalculateIcon,\n CalendarIcon,\n CancelIcon,\n CheckIcon,\n CheckBoxBlankOutlinedIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n ClearIcon,\n CloseIcon,\n CloudUploadIcon,\n CollectedAtIcon,\n CopyDownIcon,\n CopyIcon,\n CorporateAccountIcon,\n CreateIcon,\n CreatedAtIcon,\n CustomerIcon,\n CustomersIcon,\n CustomFieldsIcon,\n DeleteIcon,\n DeliveredAtIcon,\n DesktopIcon,\n DocumentIcon,\n DocumentRepoIcon,\n DoubleCheckIcon,\n DownloadIcon,\n DropDownIcon,\n EditIcon,\n EditLocationIcon,\n EmailIcon,\n ErrorFilledIcon,\n ExceptionIcon,\n ExpandMoreIcon,\n ExportIcon,\n HelpIcon,\n InboundIcon,\n InbounddOutlinedIcon,\n InfoOutlinedIcon,\n InventoryIcon,\n InventoryMapIcon,\n InventoryMapOutlinedIcon,\n InventoryStaleIcon,\n InvoiceIcon,\n InvoicesIcon,\n KeyboardOutlinedIcon,\n LaunchIcon,\n LineChartIcon,\n LinkIcon,\n LinkOffIcon,\n LogoutIcon,\n LogsIcon,\n LowInventoryAlertIcon,\n MobileIcon,\n MoreIcon,\n NavigateBeforeIcon,\n OKIcon,\n OutboundIcon,\n OutbounddOutlinedIcon,\n PhotoIcon,\n PieChartIcon,\n PlacedAtIcon,\n ProfileIcon,\n PrintIcon,\n PublicIcon,\n RedoIcon,\n RefreshIcon,\n RejectIcon,\n ReleasedAtIcon,\n RemoveIcon,\n RemovePhotoIcon,\n ReportsIcon,\n RollbackIcon,\n SaveIcon,\n ScannerIcon,\n SealIcon,\n SealOffIcon,\n SearchIcon,\n ServiceIcon,\n SetLocationIcon,\n ShowIcon,\n StaffIcon,\n SubscriptionIcon,\n TableChartIcon,\n TaskListIcon,\n TaskListOutlinedIcon,\n TaskItemOutlinedIcon,\n TimelineIcon,\n ThemeToggleIcon,\n TimerIcon,\n TimerOffIcon,\n TourIcon,\n TrainIcon,\n TransferIcon,\n TruckIcon,\n UploadIcon,\n UserIcon,\n VideoCamIcon,\n WarningIcon,\n XIcon,\n YardMapIcon,\n YardSetupIcon,\n};\n\nexport const CancelButton = ({ color, redirectTo, label }) => {\n const redirect = useRedirect();\n\n const handleClick = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n redirect(redirectTo);\n };\n\n return (\n <Button color={color} startIcon={<CloseIcon />} onClick={handleClick}>\n {label}\n </Button>\n );\n};\n\nexport const MyDateField = ({ source, record = {} }) => {\n let value = record[source];\n if (value && value.match(/\\d{4}-\\d{2}-\\d{2}/)) {\n value = format(parse(value, \"yyyy-MM-dd\", new Date()), \"MM/dd/yyyy\");\n }\n\n return <span>{value}</span>;\n};\n","import React from \"react\";\nimport { MuiThemeProvider, createTheme } from \"@material-ui/core/styles\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\n\nimport { blue, grey } from \"@material-ui/core/colors\";\n\n// A theme with custom primary and secondary color.\nexport const theme = createTheme({\n palette: {\n type: \"light\",\n primary: {\n main: blue[600],\n },\n secondary: {\n main: blue[800], // blueGrey[500],\n },\n text: {\n disabled: grey[600],\n },\n action: {\n hover: \"rgba(0, 0, 0, 0.1)\",\n },\n background: {\n default: grey[200],\n },\n },\n typography: {\n useNextVariants: true,\n fontWeightLight: 400,\n fontWeightRegular: 500,\n fontWeightMedium: 600,\n fontWeightBold: 800,\n },\n // overrides: {\n // Style sheet name ⚛️\n // MuiTextField: {\n // // Name of the rule\n // root: {\n // // Some CSS\n // width: '20rem',\n // },\n // },\n // },\n});\n\nexport const darkTheme = createTheme({\n palette: {\n type: \"dark\",\n primary: {\n main: blue[600], // #1E88E5\n },\n secondary: {\n main: blue[300], // #ff5722\n },\n text: {\n disabled: grey[500],\n },\n action: {\n hover: \"rgba(0, 0, 0, 0.1)\",\n },\n },\n typography: {\n useNextVariants: true,\n fontWeightLight: 400,\n fontWeightRegular: 500,\n fontWeightMedium: 600,\n fontWeightBold: 800,\n },\n});\n\nfunction withRoot(Component) {\n function WithRoot(props) {\n // MuiThemeProvider makes the theme available down the React tree thanks to React context.\n return (\n <MuiThemeProvider theme={theme}>\n {/* CssBaseline kickstart an elegant, consistent, and simple baseline to build upon. */}\n {/* https://material-ui.com/getting-started/usage/#cssbaseline */}\n <CssBaseline />\n <Component {...props} />\n </MuiThemeProvider>\n );\n }\n\n return WithRoot;\n}\n\nexport default withRoot;\n","import { serializeError } from \"serialize-error\";\n\nimport awsconfig from \"../aws-exports\";\nimport { API, graphqlOperation } from \"aws-amplify\";\nimport { createLog } from \"../graphql/mutations\";\nimport { updateReloadYard } from \"../graphql/reloadyard/custom-mutations\";\n\nimport {\n APP_VERSION,\n AppType,\n ERROR_MSG,\n LogStatus,\n UserAclOptions,\n UserType,\n} from \"./constants\";\n\nconst _ = require(\"lodash\");\n\nexport const logError = (msg, error, notify, redirect) => {\n try {\n debugger;\n let errorObj;\n let exception;\n try {\n errorObj = JSON.stringify(serializeError(error?.response || error));\n exception = JSON.stringify(serializeError(errorObj));\n } catch (err) {\n if (error.errors) {\n errorObj = error.errors.map((itm) => itm.message);\n } else errorObj = error.message;\n }\n const isNetwork = errorObj.includes(\"Network Error\");\n const errorMessage = isNetwork\n ? \"Network Error! Restore internet connection and hit REFRESH.\"\n : ERROR_MSG;\n debugger;\n\n console.error(\"ERROR:\", msg, errorObj);\n if (notify) notify(errorMessage, \"error\");\n\n API.graphql(\n graphqlOperation(createLog, {\n input: {\n status: LogStatus.NEW,\n user: window.appUser?.email,\n appType: window.appUser?.appType,\n tenantId: window.appUser?.reloadYardId\n ? window.appUser.reloadYardId\n : \"ADMIN\",\n message: msg,\n exception,\n appVersion: APP_VERSION,\n url: window.location?.pathname,\n context: window.navigator?.userAgent,\n },\n })\n );\n\n if (isNetwork && redirect) redirect(\"/networkError\");\n } catch (err) {\n console.error(err);\n }\n};\n\nexport const getEnv = () => {\n let env = \"dev\";\n\n try {\n let bucket = API._options.aws_user_files_s3_bucket;\n if (bucket) {\n if (bucket.endsWith(\"prod\")) env = \"prod\";\n if (bucket.endsWith(\"hotfix\")) env = \"hotfix\";\n } else {\n bucket = awsconfig.aws_user_files_s3_bucket;\n if (bucket.endsWith(\"prod\")) env = \"prod\";\n if (bucket.endsWith(\"hotfix\")) env = \"hotfix\";\n }\n } catch (err) {\n logError(\"utils:common:getEnv\", err, false);\n }\n\n return env;\n};\n\nexport const isTWA = () => {\n return window.location.host.toLowerCase().includes(\"twa\");\n};\n\nexport const setupLocationMaps = (reloadYard) => {\n reloadYard.areas.items = reloadYard.areas.items.filter(\n (itm) => itm.active === \"true\"\n );\n const areaMap = {};\n reloadYard.areas.items.forEach((itm) => (areaMap[itm.id] = itm));\n reloadYard.areaMap = areaMap;\n};\n\nexport const setupCommodityMaps = (reloadYard) => {\n reloadYard.yardCommodities.items = _.orderBy(\n reloadYard.yardCommodities.items,\n [\"sortKey\"],\n [\"asc\"]\n );\n reloadYard.activeYardCommodities = {\n items: reloadYard.yardCommodities.items.filter(\n (itm) => itm.active === \"true\"\n ),\n };\n const commodityMap = {};\n reloadYard.yardCommodities.items.forEach(\n (itm) => (commodityMap[itm.id] = itm)\n );\n reloadYard.yardCommodityMap = commodityMap;\n};\n\nexport const retrieveStripeSubscription = async (reloadYard) => {\n try {\n const response = await API.post(\n \"transREST\",\n \"/stripe-retrieve-subscription\",\n {\n body: { subsciptionId: reloadYard.subscription.subscriptionId },\n }\n );\n\n if (response.error) {\n logError(\n \"utils:common:retrieveStripeSubscription:response\",\n response.error,\n false\n );\n return reloadYard.subscription;\n }\n\n if (response.status !== reloadYard.subscription.status) {\n API.graphql(\n graphqlOperation(updateReloadYard, {\n input: {\n id: reloadYard.id,\n active: reloadYard.active,\n name: reloadYard.name,\n subscription: {\n ...reloadYard.subscription,\n status: response.status,\n },\n },\n })\n );\n }\n\n return response;\n } catch (error) {\n logError(\"utils:common:retrieveStripeSubscription\", error, false);\n return reloadYard.subscription;\n }\n};\n\nexport const isSubscriptionDisabled = () => {\n return window.appUser?.subscription?.status === \"canceled\";\n};\n\nexport const getIndexKeyValue = (column, value) => {\n if (value) return value;\n else return \"${ctx.args.input.\" + column + \"}\";\n};\n\nexport const isAdmin = () => window.appUser?.appType === AppType.ADMIN;\n\nexport const isAuthorized = (permission) => {\n const userType = window.appUser.type;\n if (userType === UserType.MANAGER || userType === UserType.ADMIN) {\n return true;\n }\n return window.appUser.permissionList[permission];\n};\n\nexport const getUserTypeAcls = (userType) => {\n return UserAclOptions.filter((acl) => acl.roles[userType]);\n};\n\n// export const isLowRes = (isXSmall) => {\n// let screenWidth = window.innerWidth;\n// // let screenHeight = window.innerHeight;\n// let pixelRatio = window.devicePixelRatio;\n\n// return isXSmall && screenWidth <= 320 && pixelRatio <= 3.375 <= 1080;\n// }\n","export const updateInventoryItemMini = /* GraphQL */ `\n mutation UpdateInventoryItem(\n $input: UpdateInventoryItemInput!\n $condition: ModelInventoryItemConditionInput\n ) {\n updateInventoryItem(input: $input, condition: $condition) {\n id\n }\n }\n`;\n\nexport const createInventorieId = /* GraphQL */ `\n mutation CreateInventorie(\n $input: CreateInventoryInput!\n $condition: ModelInventoryConditionInput\n ) {\n createInventorie(input: $input, condition: $condition) {\n id\n }\n }\n`;\n\nexport const updateInventorieInbound = /* GraphQL */ `\n mutation UpdateInventorie(\n $input: UpdateInventoryInput!\n $condition: ModelInventoryConditionInput\n ) {\n updateInventorie(input: $input, condition: $condition) {\n id\n groups\n reloadYardId\n status\n lotNumber\n poNumber\n inboundShipmentId\n railCarNumber\n inboundShipmentId\n deliveryDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n verificationRequired\n inventoryUnits\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n turnDays\n areaId\n area {\n areaType\n }\n zoneId\n aisleId\n photos {\n bucket\n region\n key\n type\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n productName\n productId\n productCode\n accountId\n accountName\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n }\n }\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n otherException\n otherExceptionNote\n status\n unloadedBy\n unloadedDateTime\n inboundShipmentId\n inventoryId\n reloadYardId\n areaId\n zoneId\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n productId\n productName\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n capacityUsed\n topDownPickOrder\n sortKey\n }\n bay\n level\n position\n capacityUsed\n capacityAllocated\n bulkCapacity\n bulkUnits\n sortKey\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n }\n history {\n type\n date\n by\n text\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n }\n }\n customFields\n }\n }\n`;\n\nexport const updateInventorieInboundMini = /* GraphQL */ `\n mutation UpdateInventorie(\n $input: UpdateInventoryInput!\n $condition: ModelInventoryConditionInput\n ) {\n updateInventorie(input: $input, condition: $condition) {\n id\n }\n }\n`;\n\nexport const updateAuditInventorie = /* GraphQL */ `\n mutation UpdateInventorie(\n $input: UpdateInventoryInput!\n $condition: ModelInventoryConditionInput\n ) {\n updateInventorie(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n inboundShipmentId\n weight\n weightUnits\n verificationRequired\n lotType\n areaId\n zoneId\n photos {\n bucket\n region\n key\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n productId\n productCode\n productName\n product {\n totalInventoryQuantity\n lowInventoryAlert\n }\n accountName\n accountId\n account {\n id\n businessName\n }\n auditId\n reloadYardCommodityId\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const updateInventorie = /* GraphQL */ `\n mutation UpdateInventorie(\n $input: UpdateInventoryInput!\n $condition: ModelInventoryConditionInput\n ) {\n updateInventorie(input: $input, condition: $condition) {\n id\n owner\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n inboundShipmentId\n reloadYardId\n lotType\n areaId\n zoneId\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n productName\n productCode\n productId\n product {\n id\n owner\n groups\n active\n accountId\n reloadYardId\n name\n productCode\n reloadYardCommodityId\n category\n defaultUnits\n defaultWeightUnits\n inboundBillingUnits\n outboundBillingUnits\n unit\n pcs\n mbf\n lf\n sf\n sqm\n gal\n l\n lbs\n tn\n cwt\n kg\n mt\n width\n length\n height\n lowInventoryThreshold\n totalInventoryQuantity\n lowInventoryAlert\n customFields\n history {\n type\n date\n by\n text\n }\n createdAt\n updatedAt\n }\n sortKey\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n accountNumber\n lotNumberPrefix\n businessName\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n address {\n name\n street\n city\n state\n zipCode\n country\n }\n billingAddress {\n name\n street\n city\n state\n zipCode\n country\n }\n contacts {\n name\n email\n phone\n description\n }\n billingContacts {\n name\n email\n phone\n description\n }\n billingEmail\n history {\n type\n date\n by\n text\n }\n addressState\n reloadYardId\n inboundCustomFields {\n id\n name\n type\n display\n }\n inboundInstructions\n podEmail\n outboundCustomFields {\n id\n name\n type\n display\n }\n outboundInstructions\n posEmail\n outboundSkipSignature\n inventoryCustomFields {\n id\n name\n type\n display\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n bolTemplate {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n secondaryReview\n addressBook {\n name\n street\n city\n state\n zipCode\n country\n }\n services {\n nextToken\n }\n products {\n nextToken\n }\n createdAt\n updatedAt\n }\n reloadYardId\n inboundShipmentId\n inboundShipment {\n id\n owner\n groups\n active\n status\n state\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n totalQuantity\n totalUnits\n billQuantity\n billUnits\n tareWeight\n ladenWeight\n weightUnits\n netWeight\n scaleWeightUnits\n createDateTime\n scheduledDateTime\n notifyDateTime\n placedDateTime\n startDateTime\n endDateTime\n releaseDateTime\n stripeBillingDateTime\n daysOnDemurrageClock\n photos {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n attachments {\n bucket\n region\n key\n type\n createdBy\n createdAt\n }\n assignedTo\n workflowType\n unloadedBy\n reviewedBy\n secondaryReview\n verificationRequired\n instructions\n notes {\n type\n date\n by\n text\n public\n }\n history {\n type\n date\n by\n text\n }\n accountName\n accountId\n account {\n id\n owner\n groups\n active\n status\n accountNumber\n lotNumberPrefix\n businessName\n inventoryStorageThreshold\n inboundBillingUnits\n outboundBillingUnits\n defaultWeightUnits\n paymentTerms\n einNumber\n send1099\n email\n phone\n fax\n website\n billingEmail\n addressState\n reloadYardId\n inboundInstructions\n podEmail\n outboundInstructions\n posEmail\n outboundSkipSignature\n secondaryReview\n createdAt\n updatedAt\n }\n reloadYardId\n inventories {\n nextToken\n }\n invoiceId\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n createdAt\n updatedAt\n }\n trackId\n previousCar\n isCollected\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n createdAt\n updatedAt\n }\n customFields\n selectedCustomFields {\n id\n name\n type\n display\n }\n createdAt\n updatedAt\n }\n shipmentLineItems {\n items {\n id\n owner\n groups\n active\n status\n sortKey\n lotNumber\n totalQuantityToPick\n outboundShipmentId\n accountId\n reloadYardId\n inventoryId\n createdAt\n updatedAt\n }\n nextToken\n }\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n owner\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n active\n sortKey\n name\n description\n defaultUnits\n locationLoadType\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n customFields\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const updateInventorieId = /* GraphQL */ `\n mutation UpdateInventorie(\n $input: UpdateInventoryInput!\n $condition: ModelInventoryConditionInput\n ) {\n updateInventorie(input: $input, condition: $condition) {\n id\n }\n }\n`;\n\nexport const updateInventorySearch = /* GraphQL */ `\n mutation UpdateInventorie(\n $input: UpdateInventoryInput!\n $condition: ModelInventoryConditionInput\n ) {\n updateInventorie(input: $input, condition: $condition) {\n id\n status\n lotNumber\n poNumber\n railCarNumber\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityCommitted\n quantityPhysical\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n hasException\n overShipment\n overShipmentQuantity\n underShipment\n underShipmentQuantity\n isDamaged\n isRecalled\n otherException\n aisleList\n account {\n inventoryPrimaryField\n }\n deliveryDateTime\n lastShipDateTime\n turnDays\n lotType\n inventoryItems {\n items {\n id\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n originOfDamage\n otherException\n otherExceptionNote\n areaId\n zoneId\n aisleId\n locationId\n location {\n id\n name\n type\n area {\n name\n prefix\n areaType\n }\n zone {\n name\n prefix\n accountId\n }\n aisle {\n id\n active\n name\n type\n bays\n levels\n capacityUsed\n length\n width\n sortKey\n }\n bay\n level\n position\n }\n outboundShipmentId\n inboundShipmentId\n locationFullName\n latitude\n longitude\n }\n }\n areaId\n area {\n areaType\n }\n productName\n productCode\n productId\n product {\n category\n lowInventoryAlert\n totalInventoryQuantity\n }\n accountName\n accountId\n account {\n businessName\n inventoryStorageThreshold\n }\n inboundShipmentId\n inboundShipment {\n poNumber\n lotNumber\n lotNumberOverride\n shipFrom\n carrierType\n originCarrier\n lotType\n railCarNumber\n }\n reloadYardId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n commodityId\n units\n commodity {\n id\n name\n locationLoadType\n }\n }\n customFields\n zoneId\n }\n }\n`;\n\nexport const createInventoryItem = /* GraphQL */ `\n mutation CreateInventoryItem(\n $input: CreateInventoryItemInput!\n $condition: ModelInventoryItemConditionInput\n ) {\n createInventoryItem(input: $input, condition: $condition) {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n isDamaged\n hasException\n otherException\n otherExceptionNote\n status\n inboundShipmentId\n inventoryId\n inventory {\n id\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleList\n history {\n type\n date\n by\n text\n }\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n name\n description\n }\n }\n customFields\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n productId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n history {\n type\n date\n by\n text\n }\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const createInventoryItemId = /* GraphQL */ `\n mutation CreateInventoryItem(\n $input: CreateInventoryItemInput!\n $condition: ModelInventoryItemConditionInput\n ) {\n createInventoryItem(input: $input, condition: $condition) {\n id\n }\n }\n`;\n\nexport const updateInventoryItem = /* GraphQL */ `\n mutation UpdateInventoryItem(\n $input: UpdateInventoryItemInput!\n $condition: ModelInventoryItemConditionInput\n ) {\n updateInventoryItem(input: $input, condition: $condition) {\n id\n owner\n groups\n quantityOnHand\n quantityCommitted\n hasException\n isDamaged\n otherException\n otherExceptionNote\n status\n inboundShipmentId\n inventoryId\n inventory {\n id\n groups\n active\n status\n lotNumber\n poNumber\n railCarNumber\n deliveryDateTime\n lastShipDateTime\n turnDays\n quantityShipped\n quantityDelivered\n quantityOnHand\n quantityPhysical\n quantityCommitted\n quantityMismatch\n inventoryUnits\n weight\n weightUnits\n verificationRequired\n hasException\n overShipment\n overShipmentQuantity\n overShipmentNote\n underShipment\n underShipmentQuantity\n underShipmentNote\n isDamaged\n isRecalled\n recallNote\n otherException\n otherExceptionNote\n lotType\n areaId\n zoneId\n aisleId\n locationId\n locationFullName\n aisleList\n outboundShipmentId\n history {\n type\n date\n by\n text\n }\n productName\n productCode\n productId\n sortKey\n accountName\n accountId\n reloadYardId\n inboundShipmentId\n auditId\n reloadYardCommodityId\n reloadYardCommodity {\n id\n reloadYardId\n commodityId\n groups\n active\n verified\n units\n sortKey\n commodity {\n id\n name\n description\n }\n }\n inventoryItems {\n items {\n aisleId\n status\n }\n }\n customFields\n createdAt\n updatedAt\n }\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n locationId\n location {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n area {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n color\n areaType\n sortKey\n createdAt\n updatedAt\n }\n zoneId\n zone {\n id\n owner\n groups\n active\n reloadYardId\n name\n prefix\n accountId\n areaId\n color\n zoneType\n sortKey\n createdAt\n updatedAt\n }\n aisleId\n aisle {\n id\n owner\n groups\n active\n reloadYardId\n name\n type\n areaId\n zoneId\n bays\n levels\n positions\n capacityUsed\n length\n width\n sortKey\n topDownPickOrder\n createdAt\n updatedAt\n }\n bay\n level\n position\n capacityAllocated\n capacityUsed\n length\n width\n sortKey\n locationLoad {\n other {\n selected\n capacity\n }\n pallet {\n selected\n capacity\n }\n box {\n selected\n capacity\n }\n container {\n selected\n capacity\n }\n superSack {\n selected\n capacity\n }\n }\n tags {\n nextToken\n }\n createdAt\n updatedAt\n }\n outboundShipmentId\n locationFullName\n latitude\n longitude\n reloadYardId\n unloadedBy\n unloadedDateTime\n history {\n type\n date\n by\n text\n }\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const deleteInventorieMini = /* GraphQL */ `\n mutation DeleteInventorie(\n $input: DeleteInventoryInput!\n $condition: ModelInventoryConditionInput\n ) {\n deleteInventorie(input: $input, condition: $condition) {\n id\n }\n }\n`;\n\nexport const deleteInventoryItemMini = /* GraphQL */ `\n mutation DeleteInventoryItem(\n $input: DeleteInventoryItemInput!\n $condition: ModelInventoryItemConditionInput\n ) {\n deleteInventoryItem(input: $input, condition: $condition) {\n id\n createdAt\n updatedAt\n }\n }\n`;\n"],"sourceRoot":""}