twysparks
2023-04-20 74e6a383570060d05c58f731fa7cd9f241db50bd
Merge branch 'LEX_dev' of http://47.92.229.245:8089/r/lightningupdate into LEX_dev
1个文件已删除
278个文件已添加
29个文件已修改
17609 ■■■■■ 已修改文件
.husky/pre-commit 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/Add_Report.cls 565 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/Add_Report.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/AllReceivedFseController.cls 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/AllReceivedFseController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ApplicationButtonController.cls 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ApplyJsCtl.cls 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ApplyJsCtl.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/BidAnnouncementController.cls 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/BidAnnouncementController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ControllerUtil.cls 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/EquipmentRentalPicturePDFController.cls 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/EquipmentRentalPicturePDFController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/FinLibraryButtonController.cls 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/FinLibraryButtonController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/FinLibraryButtonController2.cls 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/FinLibraryButtonController2.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/FinLibraryButtonController3.cls 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/FinLibraryButtonController3.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LightingButtonConstant.cls 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/MonthlyReportController.cls 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/OpportunityLightingButtonController.cls 524 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/OpportunityLightingButtonController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/OpportunityService.cls 457 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/OpportunityService.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/OpportunityWebService.cls 506 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/OpportunityWebService.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/QISReportController.cls 475 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/RentalApplyControllerLWT.cls 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/RentalApplyControllerLWT.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/RentalApplyESetRefreshStatusController.cls 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/RentalApplyESetRefreshStatusController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/RentalApplyWebService.cls 2069 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/RentalApplyWebService.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ReportController.cls 104 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ReturnDeliverySlipController.cls 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ReturnDeliverySlipController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/SelectSubstituteControllerLWT.cls 633 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/SelectSubstituteControllerLWT.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/SubmitExtensionApprovalProcessController.cls 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/SubmitExtensionApprovalProcessController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TenderWebService.cls 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TenderWebService.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TenderingButtonController.cls 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TransferApplyController.cls 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TransferApplyController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TransferApplyWebService.cls 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TransferApplyWebService.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/UpdateTenderInformationBatch.cls 1310 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/UpdateTenderInformationBatch.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/loanerArrangedEmailController.cls 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/loanerArrangedEmailController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/rentalApplyEquipmentRentalPDFController.cls 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/rentalApplyEquipmentRentalPDFController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexAgencyAuthorize/__tests__/lexAgencyAuthorize.test.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexAgencyAuthorize/lexAgencyAuthorize.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexAgencyAuthorize/lexAgencyAuthorize.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexAgencyAuthorize/lexAgencyAuthorize.js 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexAgencyAuthorize/lexAgencyAuthorize.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexApplicationCancelSubmit/lexApplicationCancelSubmit.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexApplicationSubmitButton/lexApplicationSubmitButton.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexAssetMaintainDetail/lexAssetMaintainDetail.css 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexAssetMaintainDetail/lexAssetMaintainDetail.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexAssetMaintainDetail/lexAssetMaintainDetail.js 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexAssetMaintainDetail/lexAssetMaintainDetail.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexAssetMaintainPage/lexAssetMaintainPage.html 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexAssetMaintainPage/lexAssetMaintainPage.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexAssetMaintainPage/lexAssetMaintainPage.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBeforeOPDPDFBtn/__tests__/lexBeforeOPDPDFBtn.test.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBeforeOPDPDFBtn/lexBeforeOPDPDFBtn.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBeforeOPDPDFBtn/lexBeforeOPDPDFBtn.html 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBeforeOPDPDFBtn/lexBeforeOPDPDFBtn.js 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBeforeOPDPDFBtn/lexBeforeOPDPDFBtn.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBeforeOPDPDFBtnSIS/__tests__/lexBeforeOPDPDFBtnSIS.test.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBeforeOPDPDFBtnSIS/lexBeforeOPDPDFBtnSIS.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBeforeOPDPDFBtnSIS/lexBeforeOPDPDFBtnSIS.html 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBeforeOPDPDFBtnSIS/lexBeforeOPDPDFBtnSIS.js 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBeforeOPDPDFBtnSIS/lexBeforeOPDPDFBtnSIS.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBidAnnouncementApplyForButton/lexBidAnnouncementApplyForButton.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBidAnnouncementApplyForButton/lexBidAnnouncementApplyForButton.js 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBidAnnouncementApplyForButton/lexBidAnnouncementApplyForButton.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBidAnnouncementConsentButton/lexBidAnnouncementConsentButton.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBidAnnouncementConsentButton/lexBidAnnouncementConsentButton.js 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBidAnnouncementConsentButton/lexBidAnnouncementConsentButton.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBidAnnouncementRejectButton/lexBidAnnouncementRejectButton.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBidAnnouncementRejectButton/lexBidAnnouncementRejectButton.js 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexBidAnnouncementRejectButton/lexBidAnnouncementRejectButton.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancel/lexCancel.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelApply/lexCancelApply.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelApply/lexCancelApply.js 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelApply/lexCancelApply.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelReport/__tests__/lexCancelReport.test.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelReport/lexCancelReport.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelReport/lexCancelReport.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelReport/lexCancelReport.js 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelReport/lexCancelReport.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelSelect/lexCancelSelect.css 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelSelect/lexCancelSelect.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelSelect/lexCancelSelect.js 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelSelect/lexCancelSelect.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelSubmit/lexCancelSubmit.js 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCancelSubmitReport/lexCancelSubmitReport.js 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexClearReturnDeliverySlip/lexClearReturnDeliverySlip.css 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexClearReturnDeliverySlip/lexClearReturnDeliverySlip.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexClearReturnDeliverySlip/lexClearReturnDeliverySlip.js 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexClearReturnDeliverySlip/lexClearReturnDeliverySlip.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexComplete/lexComplete.js 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCreateEvent/__tests__/lexCreateEvent.test.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCreateEvent/lexCreateEvent.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCreateEvent/lexCreateEvent.js 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCreateEvent/lexCreateEvent.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCreateNotesEmail/lexCreateNotesEmail.js 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCreateRepair/lexCreateRepair.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCreateRepair/lexCreateRepair.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCreateRepair/lexCreateRepair.js 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCreateRepair/lexCreateRepair.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomSubmit/lexCustomSubmit.css 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomSubmit/lexCustomSubmit.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomSubmit/lexCustomSubmit.js 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexCustomSubmit/lexCustomSubmit.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexDetailBulkUpdate/lexDetailBulkUpdate.css 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexDetailBulkUpdate/lexDetailBulkUpdate.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexDetailBulkUpdate/lexDetailBulkUpdate.js 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexDetailBulkUpdate/lexDetailBulkUpdate.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexDispatchOCSMQARA/lexDispatchOCSMQARA.js 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexEquipmentRentalPicturePDF/lexEquipmentRentalPicturePDF.css 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexEquipmentRentalPicturePDF/lexEquipmentRentalPicturePDF.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexEquipmentRentalPicturePDF/lexEquipmentRentalPicturePDF.js 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexEquipmentRentalPicturePDF/lexEquipmentRentalPicturePDF.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexFinLibrary/lexFinLibrary.css 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexFinLibrary/lexFinLibrary.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexFinLibrary/lexFinLibrary.js 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexFinLibrary/lexFinLibrary.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexFinLibrary2/lexFinLibrary2.css 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexFinLibrary2/lexFinLibrary2.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexFinLibrary2/lexFinLibrary2.js 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexFinLibrary2/lexFinLibrary2.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexFinLibrary3/lexFinLibrary3.css 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexFinLibrary3/lexFinLibrary3.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexFinLibrary3/lexFinLibrary3.js 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexFinLibrary3/lexFinLibrary3.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLoanerArrangedEmail/lexLoanerArrangedEmail.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLoanerArrangedEmail/lexLoanerArrangedEmail.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLoanerArrangedEmail/lexLoanerArrangedEmail.js 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLoanerArrangedEmail/lexLoanerArrangedEmail.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLoseBid/__tests__/lexLoseBid.test.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLoseBid/lexLoseBid.css 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLoseBid/lexLoseBid.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLoseBid/lexLoseBid.js 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLoseBid/lexLoseBid.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLoseReport/__tests__/lexLoseReport.test.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLoseReport/lexLoseReport.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLoseReport/lexLoseReport.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLoseReport/lexLoseReport.js 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLoseReport/lexLoseReport.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLostReturnDeliverySlip/lexLostReturnDeliverySlip.css 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLostReturnDeliverySlip/lexLostReturnDeliverySlip.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLostReturnDeliverySlip/lexLostReturnDeliverySlip.js 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexLostReturnDeliverySlip/lexLostReturnDeliverySlip.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexMainFixtureSelect/lexMainFixtureSelect.css 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexMainFixtureSelect/lexMainFixtureSelect.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexMainFixtureSelect/lexMainFixtureSelect.js 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexMainFixtureSelect/lexMainFixtureSelect.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOCSMNoToReportForReport/lexOCSMNoToReportForReport.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOCSMNoToReportLighting/lexOCSMNoToReportLighting.css 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOCSMNoToReportLighting/lexOCSMNoToReportLighting.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOCSMNoToReportLighting/lexOCSMNoToReportLighting.js 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOCSMNoToReportLighting/lexOCSMNoToReportLighting.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOCSMNogoods/lexOCSMNogoods.css 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOCSMNogoods/lexOCSMNogoods.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOCSMNogoods/lexOCSMNogoods.js 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOCSMNogoods/lexOCSMNogoods.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOCSMToReport/lexOCSMToReport.js 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOCSMToReportLighting/lexOCSMToReportLighting.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOCSMToReportLighting/lexOCSMToReportLighting.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOCSMToReportLighting/lexOCSMToReportLighting.js 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOCSMToReportLighting/lexOCSMToReportLighting.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOLYwinBid/__tests__/lexOLYwinBid.test.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOLYwinBid/lexOLYwinBid.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOLYwinBid/lexOLYwinBid.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOLYwinBid/lexOLYwinBid.js 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOLYwinBid/lexOLYwinBid.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOPDtoSIS/lexOPDtoSIS.js 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOSHInspect/lexOSHInspect.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOSHInspect/lexOSHInspect.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOSHInspect/lexOSHInspect.js 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOSHInspect/lexOSHInspect.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexOSHSubmit/lexOSHSubmit.js 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexPDFQISrequest/lexPDFQISrequest.css 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexPDFQISrequest/lexPDFQISrequest.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexPDFQISrequest/lexPDFQISrequest.js 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexPDFQISrequest/lexPDFQISrequest.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexPredictedDateChange/__tests__/lexPredictedDateChange.test.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexPredictedDateChange/lexPredictedDateChange.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexPredictedDateChange/lexPredictedDateChange.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexPredictedDateChange/lexPredictedDateChange.js 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexPredictedDateChange/lexPredictedDateChange.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexQISSC/lexQISSC.css 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexQISSC/lexQISSC.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexQISSC/lexQISSC.js 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexQISSC/lexQISSC.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexQuotationProductNew/__tests__/lexQuotationProductNew.test.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexQuotationProductNew/lexQuotationProductNew.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexQuotationProductNew/lexQuotationProductNew.js 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexQuotationProductNew/lexQuotationProductNew.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexQuotationRequest/__tests__/lexQuotationRequest.test.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexQuotationRequest/lexQuotationRequest.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexQuotationRequest/lexQuotationRequest.html 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexQuotationRequest/lexQuotationRequest.js 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexQuotationRequest/lexQuotationRequest.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRCRecieved/lexRCRecieved.css 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRCRecieved/lexRCRecieved.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRCRecieved/lexRCRecieved.js 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRCRecieved/lexRCRecieved.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRCinspectioncompletedate/lexRCinspectioncompletedate.css 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRCinspectioncompletedate/lexRCinspectioncompletedate.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRCinspectioncompletedate/lexRCinspectioncompletedate.js 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRCinspectioncompletedate/lexRCinspectioncompletedate.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRentalApplyESetRefreshStatus/lexRentalApplyESetRefreshStatus.css 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRentalApplyESetRefreshStatus/lexRentalApplyESetRefreshStatus.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRentalApplyESetRefreshStatus/lexRentalApplyESetRefreshStatus.js 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRentalApplyESetRefreshStatus/lexRentalApplyESetRefreshStatus.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRequestDB/__tests__/lexRequestDB.test.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRequestDB/lexRequestDB.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRequestDB/lexRequestDB.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRequestDB/lexRequestDB.js 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexRequestDB/lexRequestDB.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexReturnDeliverySlip/lexReturnDeliverySlip.css 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexReturnDeliverySlip/lexReturnDeliverySlip.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexReturnDeliverySlip/lexReturnDeliverySlip.js 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexReturnDeliverySlip/lexReturnDeliverySlip.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSIStoOPD/lexSIStoOPD.js 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSendQIS/lexSendQIS.css 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSendQIS/lexSendQIS.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSendQIS/lexSendQIS.js 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSendQIS/lexSendQIS.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexStockApply/__tests__/lexStockApply.test.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexStockApply/lexStockApply.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexStockApply/lexStockApply.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexStockApply/lexStockApply.js 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexStockApply/lexStockApply.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSubmit/lexSubmit.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSubmit/lexSubmit.html 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSubmit/lexSubmit.js 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSubmit/lexSubmit.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSubmitApprovalProcess/lexSubmitApprovalProcess.css 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSubmitApprovalProcess/lexSubmitApprovalProcess.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSubmitApprovalProcess/lexSubmitApprovalProcess.js 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSubmitApprovalProcess/lexSubmitApprovalProcess.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSubmitCompetitorReport/lexSubmitCompetitorReport.js 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSubmitExtensionApprovalProcess/lexSubmitExtensionApprovalProcess.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSubmitExtensionApprovalProcess/lexSubmitExtensionApprovalProcess.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSubmitExtensionApprovalProcess/lexSubmitExtensionApprovalProcess.js 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexSubmitExtensionApprovalProcess/lexSubmitExtensionApprovalProcess.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingAntiLogicButton/lexTenderingAntiLogicButton.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingAntiLogicButton/lexTenderingAntiLogicButton.js 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingAntiLogicButton/lexTenderingAntiLogicButton.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingAttachmentButton/lexTenderingAttachmentButton.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.js 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingHospitalButton/lexTenderingHospitalButton.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.js 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingLogicButton/lexTenderingLogicButton.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingLogicButton/lexTenderingLogicButton.js 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingLogicButton/lexTenderingLogicButton.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingLostButton/lexTenderingLostButton.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.js 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingNotarizeButton/lexTenderingNotarizeButton.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingNotarizeButton/lexTenderingNotarizeButton.js 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingNotarizeButton/lexTenderingNotarizeButton.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingRelevancyButton/lexTenderingRelevancyButton.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingRelevancyButton/lexTenderingRelevancyButton.js 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingRelevancyButton/lexTenderingRelevancyButton.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingUsedAttachmentButton/lexTenderingUsedAttachmentButton.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingUsedAttachmentButton/lexTenderingUsedAttachmentButton.js 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTenderingUsedAttachmentButton/lexTenderingUsedAttachmentButton.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTopInQueue/lexTopInQueue.css 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTopInQueue/lexTopInQueue.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTopInQueue/lexTopInQueue.js 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTopInQueue/lexTopInQueue.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTransferApplyPDF/lexTransferApplyPDF.css 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTransferApplyPDF/lexTransferApplyPDF.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTransferApplyPDF/lexTransferApplyPDF.js 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexTransferApplyPDF/lexTransferApplyPDF.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexVOCAnswer/lexVOCAnswer.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexVOCCheck/lexVOCCheck.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexVOCConfirm/lexVOCConfirm.js 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexVOCFinish/lexVOCFinish.js 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexVOCSubmit/lexVOCSubmit.js 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexcopyQIS/lexcopyQIS.css 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexcopyQIS/lexcopyQIS.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexcopyQIS/lexcopyQIS.js 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexcopyQIS/lexcopyQIS.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/rentalApplyEquipmentRentalPDF/rentalApplyEquipmentRentalPDF.css 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/rentalApplyEquipmentRentalPDF/rentalApplyEquipmentRentalPDF.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/rentalApplyEquipmentRentalPDF/rentalApplyEquipmentRentalPDF.js 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/rentalApplyEquipmentRentalPDF/rentalApplyEquipmentRentalPDF.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/rentalApplyLWT/rentalApplyLWT.css 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/rentalApplyLWT/rentalApplyLWT.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/rentalApplyLWT/rentalApplyLWT.js 659 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/rentalApplyLWT/rentalApplyLWT.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/staticresources/connection20.js 1935 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/staticresources/connection20.resource-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.husky/pre-commit
File was deleted
force-app/main/default/classes/Add_Report.cls
New file
@@ -0,0 +1,565 @@
global class Add_Report {
    // TODO reportのidで検索じゃなく、event_id__cで検索
    WebService static String addReportPr(String repOwnerId, String reportId, String dailyReportId, String eventId, String recordType, String aId, String visitor1, String visitor2, String visitor3, String visitor4,String visitor5, String description, String reportDate){
        String rt = selectRecordType(recordType);
        List<Account> aList = selectAccount(aId);
        if(reportId != null && reportId != ''){
            List<Report__c> rList = [select id, Daily_Report__c, RecordTypeId, Event_Id__c, Hospital_Department__c, Department_Class_Ref__c, Hospital_Reference__c, Date__c, Practitioner1__c, Practitioner2__c, Practitioner3__c, Practitioner4__c, Practitioner5__c, Comment__c from Report__c where id =:reportId];
            if (rList.size() > 0) {
                return rList.get(0).id;
            }
        }
        Report__c r = new Report__c();
        if(aList.size() != 0){
            Account a = aList.get(0);
            r.Hospital_Department__c = a.Id;
            r.Department_Class_Ref__c = a.Department_Class__r.Id;
            r.Hospital_Reference__c = a.Hospital__r.Id;
        } else {
            r.Manual_Name__c = aId;
        }
        r.Daily_Report__c = dailyReportId;
        r.OwnerId = repOwnerId;
        r.RecordTypeId = rt;
        r.Event_Id__c = eventId;
        if(reportDate != null && reportDate != ''){
            r.Date__c = date.parse(reportDate);
        }
        if(visitor1 != null && visitor1 != ''){
            r.Practitioner1__c = visitor1;
        }
        if(visitor2 != null && visitor2 != ''){
            r.Practitioner2__c = visitor2;
        }
        if(visitor3 != null && visitor3 != ''){
            r.Practitioner3__c = visitor3;
        }
        if(visitor4 != null && visitor4 != ''){
            r.Practitioner4__c = visitor4;
        }
        if(visitor5 != null && visitor5 != ''){
            r.Practitioner5__c = visitor5;
        }
        r.Comment__c = description;
        upsert r;
        updateEvent(r.id,eventId,recordType);
        return r.id;
    }
    WebService static String addReportOP(String repOwnerId, String reportId, String dailyReportId, String eventId, String recordType, String aId, String visitor1, String visitor2, String visitor3, String visitor4, String visitor5, String opp1, String opp2, String opp3, String opp4, String opp5, String reportDate){
        return addReportOPWithEvaluationPDF(repOwnerId, reportId, dailyReportId, eventId, recordType, aId, visitor1, visitor2, visitor3, visitor4, visitor5, opp1, opp2, opp3, opp4, opp5, reportDate, '', '', '', '');
    }
    WebService static String addReportOP2(String repOwnerId, String reportId, String dailyReportId, String eventId, String recordType, String aId, String visitor1, String visitor2, String visitor3, String visitor4, String visitor5, String opp1, String opp2, String opp3, String opp4, String opp5, String reportDate, String sTime, String eTime){
        return addReportOPWithEvaluationPDF(repOwnerId, reportId, dailyReportId, eventId, recordType, aId, visitor1, visitor2, visitor3, visitor4, visitor5, opp1, opp2, opp3, opp4, opp5, reportDate, '', '', sTime, eTime);
    }
    @AuraEnabled
    WebService static String addReportOPWithEvaluationPDF(String repOwnerId, String reportId, String dailyReportId, String eventId, String recordType, String aId, String visitor1, String visitor2, String visitor3, String visitor4, String visitor5, String opp1, String opp2, String opp3, String opp4, String opp5, String reportDate, String evaluationPDFNumber, String pro1, String sTime, String eTime) {
        String rt = selectRecordType(recordType);
        List<Account> aList = selectAccount(aId);
        if(reportId != null && reportId != ''){
            List<Report__c> rList = [select id, Daily_Report__c, RecordTypeId, Event_Id__c, Hospital_Department__c, Department_Class_Ref__c, Hospital_Reference__c, Date__c, Practitioner1__c, Practitioner2__c, Practitioner3__c, Practitioner4__c, Practitioner5__c, Opportunity1__c, Opportunity2__c, Opportunity3__c, Opportunity4__c, Opportunity5__c from Report__c where id =:reportId];
            if(rList.size() > 0){
                return rList.get(0).id;
            }
        }
        Report__c r = new Report__c();
        if(aList.size() != 0){
            Account a = aList.get(0);
            r.Hospital_Department__c = a.Id;
            r.Department_Class_Ref__c = a.Department_Class__r.Id;
            r.Hospital_Reference__c = a.Hospital__r.Id;
        } else {
            r.Manual_Name__c = aId;
        }
        if (String.isBlank(dailyReportId) == false) r.Daily_Report__c = dailyReportId;
        r.OwnerId = repOwnerId;
        r.RecordTypeId = rt;
        if (String.isBlank(eventId) == false) r.Event_Id__c = eventId;
        r.Evaluation_PDF_number__c = evaluationPDFNumber;
        if(reportDate != null && reportDate != ''){
            r.Date__c = date.parse(reportDate);
        }
        if(visitor1 != null && visitor1 != ''){
            r.Practitioner1__c = visitor1;
        }
        if(visitor2 != null && visitor2 != ''){
            r.Practitioner2__c = visitor2;
        }
        if(visitor3 != null && visitor3 != ''){
            r.Practitioner3__c = visitor3;
        }
        if(visitor4 != null && visitor4 != ''){
            r.Practitioner4__c = visitor4;
        }
        if(visitor5 != null && visitor5 != ''){
            r.Practitioner5__c = visitor5;
        }
        List<String> oppIdList = new List<String>();
        if(opp1 != null && opp1 != ''){
            oppIdList.add(opp1);
        }
        if(opp2 != null && opp2 != ''){
            oppIdList.add(opp2);
        }
        if(opp3 != null && opp3 != ''){
            oppIdList.add(opp3);
        }
        if(opp4 != null && opp4 != ''){
            oppIdList.add(opp4);
        }
        if(opp5 != null && opp5 != ''){
            oppIdList.add(opp5);
        }
        if(oppIdList.size() > 0){
            if(opp1 != null && opp1 != ''){
                r.Opportunity1__c = opp1;
            }
            if(opp2 != null && opp2 != ''){
                r.Opportunity2__c = opp2;
            }
            if(opp3 != null && opp3 != ''){
                r.Opportunity3__c = opp3;
            }
            if(opp4 != null && opp4 != ''){
                r.Opportunity4__c = opp4;
            }
            if(opp5 != null && opp5 != ''){
                r.Opportunity5__c = opp5;
            }
            r.Opportunity_Situation__c = '引合発生';
        }
        else{
            r.Opportunity_Situation__c = '引合無';
        }
        if (String.isBlank(pro1) == false) {
            r.Product1__c = pro1;
        }
        if (sTime != null && sTime != '') {
            r.Operation_From__c = datetime.parse(sTime);
        }
        if (eTime != null && eTime != '') {
            r.Operation_To__c = datetime.parse(eTime);
        }
        upsert r;
        if (String.isBlank(eventId) == false) updateEvent(r.id,eventId,recordType);
        return r.id;
    }
    WebService static String addReportNT(String repOwnerId, String reportId, String dailyReportId, String eventId, String recordType, String aId, String visitor1, String visitor2, String visitor3, String visitor4, String visitor5, String sTime, String eTime, String mainPlace){
        String rt = selectRecordType(recordType);
        List<Account> aList = selectAccount(aId);
        if(reportId != null && reportId != ''){
            List<Report__c> rList = [select id, Daily_Report__c, RecordTypeId, Event_Id__c, Hospital_Department__c, Department_Class_Ref__c, Hospital_Reference__c, Date__c, Practitioner1__c, Practitioner2__c, Practitioner3__c, Practitioner4__c, Practitioner5__c, From__c, To__c, Location__c from Report__c where id =:reportId];
            if(rList.size() > 0){
                return rList.get(0).id;
            }
        }
        Report__c r = new Report__c();
        if(aList.size() != 0){
            Account a = aList.get(0);
            r.Hospital_Department__c = a.Id;
            r.Department_Class_Ref__c = a.Department_Class__r.Id;
            r.Hospital_Reference__c = a.Hospital__r.Id;
        } else {
            r.Manual_Name__c = aId;
        }
        r.Daily_Report__c = dailyReportId;
        r.OwnerId = repOwnerId;
        r.RecordTypeId = rt;
        r.Event_Id__c = eventId;
        if(visitor1 != null && visitor1 != ''){
            r.Practitioner1__c = visitor1;
        }
        if(visitor2 != null && visitor2 != ''){
            r.Practitioner2__c = visitor2;
        }
        if(visitor3 != null && visitor3 != ''){
            r.Practitioner3__c = visitor3;
        }
        if(visitor4 != null && visitor4 != ''){
            r.Practitioner4__c = visitor4;
        }
        if(visitor5 != null && visitor5 != ''){
            r.Practitioner5__c = visitor5;
        }
        if(sTime != null && sTime != ''){
            //sTime = sTime.substring(0,16);
            r.From__c = datetime.parse(sTime);
        }
        if(eTime != null && eTime != ''){
            //eTime = eTime.substring(0,16);
            r.To__c = datetime.parse(eTime);
        }
        r.Location__c = mainPlace;
        upsert r;
        updateEvent(r.id,eventId,recordType);
        return r.id;
    }
    WebService static String addReportOn(String repOwnerId, String reportId, String dailyReportId, String eventId, String recordType, String aId, String reportDate, String v1Str, String startHour, String startMin, String endHour, String endMin, String description){
        List<Account> aList = selectAccount(aId);
        if(reportId != null && reportId != ''){
            List<On_Call__c> oList = [select id, Daily_Report__c, Event_Id__c, segment__c from On_Call__c where id =:reportId];
            if(oList.size() > 0){
                return oList.get(0).id;
            }
        }
        On_Call__c o = new On_Call__c();
        if(aList.size() != 0){
            Account a = aList.get(0);
            o.segment__c = a.Id;
            // 病院ID(18桁)差込み
            o.Hospital__c = a.Hospital__r.Id;
        }
        o.Daily_Report__c = dailyReportId;
        o.OwnerId = repOwnerId;
        o.Event_Id__c = eventId;
        o.Responsible_Person_HP__c = v1Str;
        if(String.isBlank(description) == false){
            if(description.length() > 255){
                o.Customer_Problem_c__c = description.substring(0, 255);
            } else {
                o.Customer_Problem_c__c = description;
            }
        }
        Date rDate = date.parse(reportDate);
        o.From_c__c = Datetime.newInstance(rDate.year(), rDate.month(), rDate.day(), Integer.valueOf(startHour), Integer.valueOf(StartMin), 0);
        o.To_c__c = Datetime.newInstance(rDate.year(), rDate.month(), rDate.day(), Integer.valueOf(endHour), Integer.valueOf(endMin), 0);
        upsert o;
        updateEvent(o.id,eventId,recordType);
        return o.id;
    }
    WebService static String addReportAc(String repOwnerId, String reportId, String dailyReportId, String eventId, String recordType, String aId, String reportDate, String description){
        List<Account> aList = selectAccount(aId);
        if(reportId != null && reportId != ''){
            List<Visit_Report__c> rList = [select id, Daily_Report__c, Event_Id__c, Hospital_Reference__c, Department_Class__c, Department__c, Date__c from Visit_Report__c where id =:reportId];
            if(rList.size() > 0){
                return rList.get(0).id;
            }
        }
        Visit_Report__c r = new Visit_Report__c();
        if(aList.size() != 0){
            Account a = aList.get(0);
            r.Hospital_Reference__c = a.Hospital__r.Id;
            r.Department_Class__c = a.Department_Class__r.Id;
            r.Department__c = a.Id;
//        } else {
//            r.Manual_Name__c = aId;
        }
        r.Daily_Report__c = dailyReportId;
        r.OwnerId = repOwnerId;
        r.Event_Id__c = eventId;
        r.Evaluate_And_Problem__c = description;
        if(reportDate != null && reportDate != ''){
            r.Date__c = date.parse(reportDate);
        }
        upsert r;
        updateEvent(r.id,eventId,recordType);
        return r.id;
    }
    WebService static String addClaim(String repOwnerId, String reportId, String dailyReportId, String eventId, String recordType, String aId, String reportDate, String description){
        List<Account> aList = selectAccount(aId);
        if(reportId != null && reportId != ''){
            List<QIS_Report__c> rList = [select id, Daily_Report__c, Event_Id__c, Hospital_Department__c, Date__c from QIS_Report__c where id =:reportId];
            if(rList.size() > 0){
                return rList.get(0).id;
            }
        }
        QIS_Report__c r = new QIS_Report__c();
        if(aList.size() != 0){
            Account a = aList.get(0);
            r.Hospital_Department__c = a.Id;
            r.Department_Class__c = a.Department_Class__r.Id;
            r.Hospital__c = a.Hospital__r.Id;
        }
        r.Daily_Report__c = dailyReportId;
        r.OwnerId = repOwnerId;
        r.Event_Id__c = eventId;
        //r.Department_Class_Ref__c = a.Department_Class__r.Id;
        //r.Hospital_Reference__c = a.Hospital__r.Id;
        r.problem_detail__c = description;
        if(reportDate != null && reportDate != ''){
            r.Date__c = date.parse(reportDate);
        }
        r.Generation_Source__c = '日报';
        r.Name = '*';
        upsert r;
        updateEvent(r.id,eventId,recordType);
        return r.id;
    }
    // MarketCondition or Competitor
    WebService static String addReportEx(String repOwnerId, String reportId, String dailyReportId, String eventId, String recordType, String aId, String visitor1, String reportDate, String description){
        String rt = selectRecordType(recordType);
        List<Account> aList = selectAccount(aId);
        if(reportId != null && reportId != ''){
            List<Report__c> rList = [select id, Daily_Report__c, RecordTypeId, Event_Id__c, Hospital_Department__c, Department_Class_Ref__c, Hospital_Reference__c, Date__c, Practitioner1__c, Practitioner2__c, Practitioner3__c, Practitioner4__c, Practitioner5__c, Comment__c from Report__c where id =:reportId];
            if(rList.size() > 0){
                return rList.get(0).id;
            }
        }
        Report__c r = new Report__c();
        if(aList.size() != 0){
            Account a = aList.get(0);
            r.Hospital_Department__c = a.Id;
            r.Department_Class_Ref__c = a.Department_Class__r.Id;
            r.Hospital_Reference__c = a.Hospital__r.Id;
        }
        r.Daily_Report__c = dailyReportId;
        r.OwnerId = repOwnerId;
        r.RecordTypeId = rt;
        r.Event_Id__c = eventId;
        if (String.isBlank(visitor1) == false) {
            r.Person_In_Charge__c = visitor1;
        }
        if(reportDate != null && reportDate != ''){
            r.Date__c = date.parse(reportDate);
        }
        r.Comment__c = description;
        upsert r;
        updateEvent(r.id,eventId,recordType);
        return r.id;
    }
    WebService static String addReportIm(String repOwnerId, String reportId, String dailyReportId, String eventId, String recordType, String aId, String reportDate, String description){
        String rt = selectRecordType(recordType);
        List<Account> aList = selectAccount(aId);
        if(reportId != null && reportId != ''){
            List<Report__c> rList = [select id, Daily_Report__c, RecordTypeId, Event_Id__c, Hospital_Department__c, Department_Class_Ref__c, Hospital_Reference__c, Date__c, Practitioner1__c, Practitioner2__c, Practitioner3__c, Practitioner4__c, Practitioner5__c, Comment__c from Report__c where id =:reportId];
            if(rList.size() > 0){
                return rList.get(0).id;
            }
        }
        Report__c r = new Report__c();
        if(aList.size() != 0){
            Account a = aList.get(0);
            r.Hospital_Reference__c = a.Hospital__r.Id;
        }
        r.Daily_Report__c = dailyReportId;
        r.OwnerId = repOwnerId;
        r.RecordTypeId = rt;
        r.Event_Id__c = eventId;
        if(reportDate != null && reportDate != ''){
            r.Date__c = date.parse(reportDate);
        }
        r.Comment__c = description;
        upsert r;
        updateEvent(r.id,eventId,recordType);
        return r.id;
    }
//    // Maintenance_Contract
//    WebService static String addMC(String repOwnerId, String reportId, String dailyReportId, String eventId, String recordType, String aId, String reportDate, String description){
//        List<Account> aList = selectAccount(aId);
//
//        if(reportId != null && reportId != ''){
//            List<Maintenance_Contract__c> rList = [select id, Daily_Report__c, Event_Id__c from Maintenance_Contract__c where id =:reportId];
//            if(rList.size() > 0){
//                return rList.get(0).id;
//            }
//        }
//
//        Maintenance_Contract__c r = new Maintenance_Contract__c();
//
//        if(aList.size() != 0){
//            Account a = aList.get(0);
//            r.Hospital__c = a.Hospital__r.Id;
//            r.Department_Class__c = a.Department_Class__r.Id;
//            r.Department__c = a.Id;
//        }
//
//        r.Daily_Report__c = dailyReportId;
//        r.Event_Id__c = eventId;
//        r.Description__c = description;
////        if(reportDate != null && reportDate != ''){
////            r.Estimation_Create_Date__c = date.parse(reportDate);
////        }
//
//        upsert r;
//
//        updateEvent(r.id,eventId,recordType);
//
//        return r.id;
//    }
    // Rental_Apply
    WebService static String addRA(String repOwnerId, String reportId, String dailyReportId, String eventId, String recordType, String aId, String reportDate, String description,String followOpps){
        List<Account> aList = selectAccount(aId);
        if(reportId != null && reportId != ''){
            List<Rental_Apply__c> rList = [select id, Daily_Report__c, Event_Id__c from Rental_Apply__c where id =:reportId];
            if(rList.size() > 0){
                return rList.get(0).id;
            }
        }
        Rental_Apply__c r = new Rental_Apply__c();
        if(aList.size() != 0){
            Account a = aList.get(0);
            r.Hospital__c = a.Hospital__r.Id;
            r.Strategic_dept__c = a.Department_Class__r.Id;
            r.Account__c = a.Id;
        }
        r.Daily_Report__c = dailyReportId;
        r.Event_Id__c = eventId;
        r.Demo_purpose_text__c = description;
        r.Request_return_day__c = Date.today();
        r.Person_In_Charge__c = repOwnerId;
        r.applyUser__c = repOwnerId;
        if(followOpps!=null&&followOpps!=''){
            r.Follow_UP_Opp__c = followOpps;
        }
        upsert r;
        updateEvent(r.id,eventId,recordType);
        return r.id;
    }
    WebService static String selectRecordType(String recordTypeName){
        List<RecordType> rtList = [select id from RecordType where IsActive = true and DeveloperName =:recordTypeName];
        return rtList.get(0).id;
    }
    WebService static List<Account> selectAccount(String aId){
        List<Account> aList = new List<Account>();
        if (aId != null && aId.startsWith('001')) {
            aList = [select Id, Department_Class__r.Id, Hospital__r.Id from Account where Id =:aId];
        }
        return aList;
    }
    WebService static void updateEvent(String rId, String eventId, String recordType){
        Event__c e = [
            select id,Maintenance_Contract_ID__c, Asset_Manual_ID__c, Rental_Apply_ID__c,
                   Product_Description_Id__c, OPD_ID__c, NTC_ID__c, ReportAccompanied_ID__c, CityStatus_ID__c, Improvement_ID__c, Conflict_ID__c, Claim_ID__c
              from Event__c where id =:eventId
        ];
//        if(recordType == 'Maintenance_Contract'){
//            e.Maintenance_Contract_ID__c = rId;
//        }
        if(recordType == 'Rental_Apply'){
            e.Rental_Apply_ID__c = rId;
        }
        if(recordType == 'Asset_Manual'){
            e.Asset_Manual_ID__c = rId;
        }
        if(recordType == 'Product_Explanation'){
            e.Product_Description_Id__c = rId;
        }
        else if(recordType == 'OPD' || recordType == 'SIS'){
            e.OPD_ID__c = rId;
        }
        else if(recordType == 'NTC'){
            e.NTC_ID__c = rId;
        }
        else if(recordType == 'On_Call'){
            e.OnCall_ID__c = rId;
        }
        else if(recordType == 'Visit_With'){
            e.ReportAccompanied_ID__c = rId;
        }
        else if(recordType == 'MarketCondition'){
            e.CityStatus_ID__c = rId;
        }
        else if(recordType == 'Improvement'){
            e.Improvement_ID__c = rId;
        }
        else if(recordType == 'Competitor'){
            e.Conflict_ID__c = rId;
        }
        else if(recordType == 'Complaint'){
            e.Claim_ID__c = rId;
        }
        update e;
    }
    WebService static Product2 getProduct2(String a){
        Product2 p2 = [select Id, Name, Intra_Trade_Cost_RMB__c, Intra_Trade_List_RMB__c FROM Product2 Where Id =:a];
        return p2;
    }
    WebService static Product2 getProduct2US(String a){
        Product2 p2 = [select Id, Name, Foreign_Trade_Cost_US__c, Foreign_Trade_List_US__c FROM Product2 Where Id =:a];
        return p2;
    }
    WebService static String getReportId(String oId, String rDate){
        List<Daily_Report__c> rtList = [select Id from Daily_Report__c where OwnerId =:oId and Reported_Date__c =:date.parse(rDate)];
        return rtList.get(0).id;
    }
    WebService static String checkAccountMatch(String name, String id){
        List<Account> accList = [select Id from Account where Name = :name and Id = :id];
        if (accList.size() > 0) {
            return 'OK';
        }
        return 'NG';
    }
    WebService static Account getAccountForJs(String id){
        return [select Id, Name, Department_Class__r.Name, Department_Class__r.Id,
                Hospital__r.Name, Hospital__r.Id, Hospital__r.OCM_Category__c
                from Account where Id = :id];
    }
}
force-app/main/default/classes/Add_Report.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>20.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/AllReceivedFseController.cls
New file
@@ -0,0 +1,48 @@
public with sharing class AllReceivedFseController {
    public AllReceivedFseController() {
    }
    @AuraEnabled
    public static InitData init(String recordId){
        InitData res = new InitData();
        Rental_Apply__c ra = [SELECT Id, Loaner_received_ng_num__c from Rental_Apply__c where Id = :recordId];
        res.Id = ra.Id;
        res.LoanerReceivedNgNum = Integer.valueOf(ra.Loaner_received_ng_num__c);
        return res;
    }
    @AuraEnabled
    public static String getRaeSet(String recordId){
        List<Rental_Apply_Equipment_Set__c> raeList = [SELECT Id, RAES_Status__c, Loaner_received_time__c from Rental_Apply_Equipment_Set__c WHERE Rental_Apply__c = :recordId];
        List<Rental_Apply_Equipment_Set__c> updateList = new List<Rental_Apply_Equipment_Set__c>();
        for(Integer i=0; i<raeList.size(); i++){
            if(raeList[i].Loaner_received_time__c == null && raeList[i].RAES_Status__c == '已出库'){
                Rental_Apply_Equipment_Set__c tempRAE = new Rental_Apply_Equipment_Set__c();
                tempRAE.Id = raeList[i].Id;
                tempRAE.Received_Confirm__c = 'OK';
                updateList.add(tempRAE);
            }
        }
        if(updateList.size()>0){
            try {
                update updateList;
                return 'SUCCESS';
            }
            catch (Exception e) {
                return e.getMessage();
            }
        }
        return '不存在更新明细';
    }
    public Class InitData{
        @AuraEnabled
        public String Id;
        @AuraEnabled
        public Integer LoanerReceivedNgNum;
    }
}
force-app/main/default/classes/AllReceivedFseController.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>50.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/ApplicationButtonController.cls
@@ -16,6 +16,7 @@
    //授权申请的提交按钮
    @AuraEnabled
    public static String submit(String recordId) {
       String messageText = '';
       try {
        Request_tedner_doc__c rac = [SELECT     Id,Status__c,Submit_check_flag__c,RecordTypeId,Submit_time__c FROM Request_tedner_doc__c WHERE Id = :recordId LIMIT 1];
        rac.Status__c = LightingButtonConstant.STATUS_Application_Submitted;
@@ -23,18 +24,19 @@
        rac.Submit_check_flag__c = true;
        rac.Submit_time__c = Datetime.now();
        update rac;
        return '1';
        messageText = '1';
        return messageText;
       } catch (Exception ex) {
        System.debug(LoggingLevel.INFO, '*** xu: ' + ex);
        return ex.getMessage();
       } finally {
        messageText = ex.getMessage();
        return messageText;
       }
    }
    //授权申请的取消提交按钮
    @AuraEnabled
    public static String submitCancel(String recordId) {
       String messageText = '';
       try {
        Request_tedner_doc__c report = [SELECT     Id,Status__c,Submit_check_flag__c,RecordTypeId,Submit_time__c FROM Request_tedner_doc__c WHERE Id = :recordId LIMIT 1];
        report.Status__c = LightingButtonConstant.STATUS_Application_CancelSubmit;
@@ -42,18 +44,18 @@
        report.Submit_check_flag__c = false;
        report.Submit_time__c = null;
        update report;
        return '1';
        messageText = '1';
        return messageText;
       } catch (Exception ex) {
        System.debug(LoggingLevel.INFO, '*** cancelXu: ' + ex);
        return ex.getMessage();
       } finally {
        messageText = ex.getMessage();
        return messageText;
       }
    }
    //获取当前登录人的 id
    @AuraEnabled
    public static UserResult UserInfo_Owner() {
    public static UserResult userInfo_Owner() {
        UserResult result = new UserResult();
        ID myUserID = UserInfo.getUserId();
        try { 
force-app/main/default/classes/ApplyJsCtl.cls
New file
@@ -0,0 +1,40 @@
/**************************************************************************************************
 * Name: ApplyJsCtl
 * Purpose: excute the java script of rental apply
 * Author: Prec-tech team
 * Create Date: 2021-11-17
 * Modify History:
 * 2021-11-27       Create this class
 **************************************************************************************************/
global with sharing class ApplyJsCtl{
    @AuraEnabled(cacheable=false)
    webService static String queueTop(String applyId) {
        try {
            System.debug(LoggingLevel.INFO, '*** applyId: ' + applyId);
            RentalFixtureSetAssignController.applysetMap = new Map<String,String>();
            List<Rental_Apply_Equipment_Set_Detail__c> raesdObjs = [SELECT Id,Rental_Apply_Equipment_Set__r.Name,  Rental_Apply_Equipment_Set__c, Asset__c,Rental_Apply_Equipment_Set__r.Fixture_Set__r.Product_Type__c,
                                                                   FSD_Fixture_Model_No__c, Fixture_Model_No_text__c,Rental_Apply__r.demo_purpose2__c,Queue_Day__c,ExternalKey__c,
                                                                   Is_Body__c, FSD_Is_OneToOne__c, Select_Time__c,Rental_Apply__r.EquipmentGuaranteeFlg__c,Allow_Adjust_Queue_Flag__c,
                                                                   Cancel_Select__c, Fixture_Model_No_F__c, Queue_Number__c, Internal_asset_location__c,Fixture_Model_No__c,
                                                                   Internal_asset_location_before__c,Salesdepartment__c, Product_category_F__c, Product_category_text__c,Equipment_Type_text__c,
                                                                   Salesdepartment_before__c,
                                                                   Equipment_Type__c, Rental_Apply__r.Internal_asset_location_F__c,Cancel_Reason__c,Loaner_cancel_reason__c,Loaner_cancel_Remarks__c
                                                                    FROM Rental_Apply_Equipment_Set_Detail__c
                                                                    WHERE Rental_Apply__c =:applyId
                                                                    AND Queue_Number__c > 0
                                                                    AND Cancel_Select__c = false
                                                                    AND Is_Body__c = true];
            System.debug(LoggingLevel.INFO, '*** raesdObjs: ' + raesdObjs);
            for(Rental_Apply_Equipment_Set_Detail__c detail:raesdObjs){
                RentalFixtureSetAssignController.applysetMap.put(detail.Rental_Apply_Equipment_Set__c,detail.Rental_Apply_Equipment_Set__r.Name);
            }
            RentalFixtureSetAssignController.saveAgdustQueue(raesdObjs,'backEnd');
        }
        catch (Exception e) {
            System.debug(LoggingLevel.INFO, '*** e.getMessage()+e.getLineNumber(): ' + e.getMessage()+e.getLineNumber());
            return e.getMessage();
        }
        return 'Success';
    }
}
force-app/main/default/classes/ApplyJsCtl.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>53.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/BidAnnouncementController.cls
New file
@@ -0,0 +1,106 @@
public class BidAnnouncementController {
    @AuraEnabled
    public static InitData BidAnnouncementController (String recordId){
        InitData res = new initData();
        try{
            Bid_Announcement__c report = [SELECT     Id FROM Bid_Announcement__c WHERE Id = :recordId LIMIT 1];
            res.Id = report.Id;
            System.debug(LoggingLevel.INFO, '*** res: ' + res);
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
        }
        return res;
    }
    //中标通知书 申请
    @AuraEnabled
    public static String ApplyFor(String recordId) {
        String messageText = '';
        try {
        Bid_Announcement__c Bid_Announcement = [SELECT     Id,Status__c,Request_flag__c,Request_user__c,Request_date__c FROM Bid_Announcement__c WHERE Id = :recordId LIMIT 1];
        Bid_Announcement.Id = Bid_Announcement.Id;
        Bid_Announcement.Status__c = LightingButtonConstant.STATUS_Bid_Announcement_ApplyFor;
        Bid_Announcement.Request_flag__c = true;
        Bid_Announcement.Request_user__c = Userinfo.getUserId();
        Bid_Announcement.Request_date__c = Datetime.now();
        update Bid_Announcement;
        messageText = '1';
        return messageText;
        } catch (Exception ex) {
        System.debug(LoggingLevel.INFO, '*** ApplyForXu: ' + ex);
        messageText = ex.getMessage();
        return messageText;
        }
    }
    //中标通知书 同意
    @AuraEnabled
    public static String ConSent(String recordId) {
        String messageText = '';
        try {
        Bid_Announcement__c Bid_Announcement = [SELECT     Id,Status__c,Complete__c,Agree_user__c,Complete_date__c FROM Bid_Announcement__c WHERE Id = :recordId LIMIT 1];
        Bid_Announcement.Id = Bid_Announcement.Id;
        Bid_Announcement.Status__c = LightingButtonConstant.STATUS_Bid_Announcement_Consent;
        Bid_Announcement.Complete__c = true;
        Bid_Announcement.Agree_user__c = Userinfo.getUserId();
        Bid_Announcement.Complete_date__c = Datetime.now();
        update Bid_Announcement;
        messageText = '1';
        return messageText;
        } catch (Exception ex) {
        System.debug(LoggingLevel.INFO, '*** ConsentXu: ' + ex);
        messageText = ex.getMessage();
        return messageText;
        }
    }
    //中标通知书 驳回
    @AuraEnabled
    public static String Reject(String recordId) {
        String messageText = '';
        try {
        Bid_Announcement__c Bid_Announcement = [SELECT     Id,Status__c,Complete__c,Agree_user__c,Complete_date__c,Request_flag__c,Request_user__c,Request_date__c FROM Bid_Announcement__c WHERE Id = :recordId LIMIT 1];
        Bid_Announcement.Id = Bid_Announcement.Id;
        Bid_Announcement.Status__c = LightingButtonConstant.STATUS_Bid_Announcement_Reject;
        Bid_Announcement.Complete__c = false;
        Bid_Announcement.Agree_user__c = null;
        Bid_Announcement.Complete_date__c = null;
        Bid_Announcement.Request_flag__c = false;
        Bid_Announcement.Request_user__c = null;
        Bid_Announcement.Request_date__c = null;
        update Bid_Announcement;
        messageText = '1';
        return messageText;
        } catch (Exception ex) {
        System.debug(LoggingLevel.INFO, '*** Reject: ' + ex);
        messageText = ex.getMessage();
        return messageText;
        }
    }
    //获取当前登录人的 id
    @AuraEnabled
    public static UserResult UserInfo_Owner() {
        UserResult result = new UserResult();
        ID myUserID = UserInfo.getUserId();
        try {
            User tempUser = [select id,BidCancel__c from user where id = : myUserID ];
            result.id = tempUser.id;
            result.BidCancel = tempUser.BidCancel__c;
        } catch (exception e) {
            result.result = e.getMessage();
        }
        return result;
    }
    public class InitData{
        @AuraEnabled
        public String Id;
    }
    public class UserResult {
        @AuraEnabled
        public string result;
        public UserResult( ) {
            result = 'Success';
        }
        @AuraEnabled
        public string id;
        @AuraEnabled
        public Boolean BidCancel;
    }
}
force-app/main/default/classes/BidAnnouncementController.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/ControllerUtil.cls
@@ -2717,7 +2717,7 @@
        i++;
        i++;
    }
    @AuraEnabled
    WebService static String selectCommonSequence(String valueField, String formatField) {
        Boolean insertNew = false;
        //取得共通採番序列
@@ -4968,6 +4968,7 @@
    /**
    OCM-SI需求表用,复制功能,仅限当前所有SI需求表失效的时候,才能使用
    */
    @AuraEnabled
    WebService static String ISO_Copy_Func(id isoID){
        IS_Opportunity_Demand__c checkISO = [select Opportunity_ID__c from IS_Opportunity_Demand__c where id =:isoID];
        String opporID = checkISO.Opportunity_ID__c;
force-app/main/default/classes/EquipmentRentalPicturePDFController.cls
New file
@@ -0,0 +1,32 @@
public with sharing class EquipmentRentalPicturePDFController {
    @AuraEnabled
    public static InitData init(String recordId){
        InitData res = new InitData();
        try {
            Rental_Apply__c ra = [SELECT Id, Shipment_requested_cnt__c from Rental_Apply__c where Id = :recordId];
            if(ra.Shipment_requested_cnt__c > 0){
                List<Rental_Apply_Equipment_Set__c> raeSet = [select Id from Rental_Apply_Equipment_Set__c where Rental_Apply__c = :recordId and Yi_Shipment_request__c > 0 and RAES_Status__c != '取消'];
                Integer setLength = raeSet.size();
                res.pageLength = Math.mod(setLength,10)== 0 ? setLength/10 : (setLength/10) +1 ;
                res.raesList = raeSet;
            }
            res.ShipmentRequestedCnt = Integer.valueOf(ra.Shipment_requested_cnt__c);
        }
        catch (Exception e) {
            System.debug(LoggingLevel.INFO, '****e:' + e);
        }
        return res;
    }
    public class InitData{
        @AuraEnabled
        public String Id;
        @AuraEnabled
        public Integer pagelength;
        @AuraEnabled
        public Integer ShipmentRequestedCnt;
        @AuraEnabled
        public List<Rental_Apply_Equipment_Set__c> raesList;
    }
}
force-app/main/default/classes/EquipmentRentalPicturePDFController.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>50.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/FinLibraryButtonController.cls
New file
@@ -0,0 +1,24 @@
/**********************************************************************
 *
 *
 * @url: /services/apexrest/rest
 * @data:
 *  {
    }
*************************************************************************/
global with sharing class FinLibraryButtonController {
   @AuraEnabled
   public static Bulletin_Board__c  getBulletinBoard(String recordId){
    Bulletin_Board__c res=new Bulletin_Board__c();
    try {
            res=[select iPad_Finlibrary__c from Bulletin_Board__c where Id=: recordId];
    }
    catch (Exception e) {
        System.debug(Logginglevel.info,'*******e'+e);
    }
    return res;
   }
}
force-app/main/default/classes/FinLibraryButtonController.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>51.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/FinLibraryButtonController2.cls
New file
@@ -0,0 +1,24 @@
/**********************************************************************
 *
 *
 * @url: /services/apexrest/rest
 * @data:
 *  {
    }
*************************************************************************/
global with sharing class FinLibraryButtonController2 {
   @AuraEnabled
   public static Bulletin_Board__c getBulletinBoard(String recordId){
    Bulletin_Board__c  res=new Bulletin_Board__c();
    try{
        res=[select iPad_Finlibrary_2__c from Bulletin_Board__c where Id=: recordId];
    }
    catch(Exception e){
        System.debug(Logginglevel.info,'*******e'+e);
    }
    return res;
   }
}
force-app/main/default/classes/FinLibraryButtonController2.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>51.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/FinLibraryButtonController3.cls
New file
@@ -0,0 +1,13 @@
global with sharing class FinLibraryButtonController3 {
   @AuraEnabled
   public static Bulletin_Board__c getBulletinBoard(String recordId){
    Bulletin_Board__c res=new Bulletin_Board__c();
    try{
        res=[select iPad_Finlibrary_3__c from Bulletin_Board__c where  Id= : recordId];
    }
    catch(Exception e){
        System.debug(Logginglevel.info,'*******e'+e);
    }
    return res;
   }
}
force-app/main/default/classes/FinLibraryButtonController3.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>51.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/LightingButtonConstant.cls
@@ -1,4 +1,10 @@
global without sharing class LightingButtonConstant {
    //中标通知书的状态‘处理完毕’
    public static final String STATUS_Bid_Announcement_Consent = '处理完毕';
    //中标通知书的状态‘草案中’
    public static final String STATUS_Bid_Announcement_Reject = '草案中';
    //中标通知书的状态‘申请中’
    public static final String STATUS_Bid_Announcement_ApplyFor = '申请中';
    //授权申请的状态‘已提交’
    public static final String STATUS_Application_Submitted = '已提交';
    //授权申请的状态‘草案中’
@@ -69,6 +75,13 @@
    public static final String USER_ACCESS_EDIT = '_Edit';
    //userAccess参数后缀_Read
    public static final String USER_ACCESS_READ = '_Read';
    //任务的名字‘中标结果确认’
    public static final String TASK_NAME_BY_CONFIRMATION_OF_WINNING_BID = '中标结果确认';
    //询价的ConfirmationofAward__c字段值‘OLY中标’
    public static final String OPPORTUNITY_CONFIRMATION_OF_AWARD_OLY_WIN_BID = 'OLY中标';
     //询价的ConfirmationofAward__c字段值‘竞争对手中标’
     public static final String OPPORTUNITY_CONFIRMATION_OF_AWARD_LOSE_BID = '竞争对手中标';
    public static final String PREDICTED_DATE_STATUS = '审批中';
    public static final String CN_YES = '是';
    public static final String CN_NO = '否';
    public static final String VOC_NAME = 'VOC';
force-app/main/default/classes/MonthlyReportController.cls
@@ -51,7 +51,7 @@
    }
    //取消提交操作更新相应数据
    @AuraEnabled
    public static void cancel(String recordId) {
    public static String cancel(String recordId) {
       try {
        Monthly_Report__c report = [SELECT     Id,Status__c,Submit_check_flag__c,RecordTypeId,Submit_time__c FROM Monthly_Report__c WHERE Id = :recordId LIMIT 1];
        report.Status__c = LightingButtonConstant.STATUS_DRAFT;
@@ -59,12 +59,13 @@
        report.Submit_check_flag__c = false;
        report.Submit_time__c = null;
        update report;
        return null;
       } catch (Exception e) {
        System.debug(LoggingLevel.INFO, '*** e: ' + e);
       } finally {
        String eMessage = e.getMessage();
        Integer left = eMessage.indexOf(',') + 1;
        Integer right = eMessage.length();
        return eMessage.substring(left,right);
       }
    }
force-app/main/default/classes/OpportunityLightingButtonController.cls
New file
@@ -0,0 +1,524 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-12 11:16:07
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-14 17:24:54
 */
public with sharing class OpportunityLightingButtonController {
    @AuraEnabled
    public static InitData initForPredictedDateChangeButton(String recordId){
        InitData res = new InitData();
        try {
            Opportunity opportunity = [
            select
            DirectLossFLG__c,
            Created_Day__c
            from Opportunity where Id =: recordId];
            res.createdDay = opportunity.Created_Day__c;
            res.directLossFLG = opportunity.DirectLossFLG__c;
        } catch (Exception e) {
            System.debug('e:****' + e);
        }
        return res;
    }
    @AuraEnabled
    public static InitData initForAgencyAuthorizeButton(String recordId){
        InitData res = new InitData();
        try {
            Opportunity opportunity = [
                select
                Agency1_ID_18__c,
                StageName,
                SAP_Send_OK__c,
                Opp_order_Type__c,
                If_Have_170__c,
                If_Have_AH__c,
                Cnt_Lost_cancel_Draft__c,
                Cnt_Lost_cancel_report__c,
                Estimation_Id__c,
                DetailNum__c,
                Estimation_Decision__c,
                Sales_Root__c,
                AcecideCntCheck__c,
                IF_Submit__c ,
                Trade__c,
                Is_Corrosion__c,
                If_Authorizing_Lock__c
                from Opportunity where Id =: recordId
            ];
            res.agency1Id = opportunity.Agency1_ID_18__c;
            res.stageName = opportunity.StageName;
            res.sapSendOK = opportunity.SAP_Send_OK__c;
            res.oppOrderType = opportunity.Opp_order_Type__c;
            res.ifHave170 = opportunity.If_Have_170__c;
            res.ifHaveAH = opportunity.If_Have_AH__c;
            res.cntLostCancelDraft = opportunity.Cnt_Lost_cancel_Draft__c;
            res.cntLostCancelReport = opportunity.Cnt_Lost_cancel_report__c;
            res.estimationId = opportunity.Estimation_Id__c;
            res.detailNum = opportunity.DetailNum__c;
            res.estimationDecision = opportunity.Estimation_Decision__c;
            res.salesRoot = opportunity.Sales_Root__c;
            res.acecideCntCheck = opportunity.AcecideCntCheck__c;
            res.ifSubmit = opportunity.IF_Submit__c;
            res.trade = opportunity.Trade__c;
            res.isCorrosion = opportunity.Is_Corrosion__c;
            res.ifAuthorizingLock = opportunity.If_Authorizing_Lock__c;
            String profile18 = UserInfo.getProfileId();
            res.profileId = profile18.substring(0,profile18.length() - 3);
        } catch (Exception e) {
            System.debug('e:****' + e);
        }
        return res;
    }
    @AuraEnabled
    public static InitData initForLoseBidButton(String recordId){
        InitData res = new InitData();
        try {
            Opportunity opportunity = [
                select
                ifOpenBid__c
                from Opportunity where Id =: recordId
            ];
            res.ifOpenBid = opportunity.ifOpenBid__c;
        } catch (Exception e) {
            System.debug('e:****' + e);
        }
        return res;
    }
    @AuraEnabled
    public static InitData initForOLYwinBidButton(String recordId){
        InitData res = new InitData();
        try {
            Opportunity opportunity = [
                select
                ifOpenBid__c
                from Opportunity where Id =: recordId
            ];
            res.ifOpenBid = opportunity.ifOpenBid__c;
        } catch (Exception e) {
            System.debug('e:****' + e);
        }
        return res;
    }
    @AuraEnabled
    public static InitData initForCreateEventButton(String recordId){
        InitData res = new InitData();
        try {
            Opportunity opportunity = [
                select
                AccountId
                from Opportunity where Id =: recordId];
            res.accountId = opportunity.AccountId;
        } catch (Exception e) {
            System.debug('e:****' + e);
        }
        return res;
    }
    @AuraEnabled
    public static InitData initFoBeforeOPDPDFBtnButton(String recordId){
        InitData res = new InitData();
        try {
            Opportunity opportunity = [
                select
                AccountId
                from Opportunity where Id =: recordId
            ];
            res.accountId = opportunity.AccountId;
            res.userId = UserInfo.getUserId();
        } catch (Exception e) {
            System.debug('e:****' + e);
        }
        return res;
    }
    @AuraEnabled
    public static InitData initFoBeforeOPDPDFBtnSISButton(String recordId){
        InitData res = new InitData();
        try {
            Opportunity opportunity = [
                select
                AccountId
                from Opportunity where Id =: recordId
            ];
            res.accountId = opportunity.AccountId;
            res.userId = UserInfo.getUserId();
        } catch (Exception e) {
            System.debug('e:****' + e);
        }
        return res;
    }
    @AuraEnabled
    public static InitData initForRequestDBButton(String recordId){
        InitData res = new InitData();
        try {
            Opportunity opportunity = [
                select
                StageName,
                SAP_Send_OK__c,
                Cnt_Lost_cancel_report__c,
                Cnt_Lost_cancel_Draft__c,
                Agency1__c,
                Agency1_ID_18__c,
                Name,
                Bid_Planned_Date__c,
                Sales_assistant_name__c,
                Sales_assistant_ID__c
                from Opportunity where Id =: recordId
            ];
            res.stageName = opportunity.StageName;
            res.sapSendOK = opportunity.SAP_Send_OK__c;
            res.cntLostCancelReport = opportunity.Cnt_Lost_cancel_report__c;
            res.cntLostCancelDraft = opportunity.Cnt_Lost_cancel_Draft__c;
            res.agency1 = opportunity.Agency1__c;
            res.agency1Id = opportunity.Agency1_ID_18__c;
            res.name = opportunity.Name;
            res.bidPlannedDate = opportunity.Bid_Planned_Date__c;
            res.salesAssistantName = opportunity.Sales_assistant_name__c;
            res.salesAssistantID = opportunity.Sales_assistant_ID__c;
            String profileId18 = UserInfo.getProfileId();
            res.profileId = profileId18.substring(0, profileId18.length() - 3);
        } catch (Exception e) {
            System.debug('e:****' + e);
        }
        return res;
    }
    @AuraEnabled
    public static InitData initForCancelReportButton(String recordId){
        InitData res = new InitData();
        try {
        Opportunity opportunity = [
            select
            StageName,
            SAP_Send_OK__c,
            Cnt_Lost_cancel_report__c,
            Cnt_Lost_cancel_Draft__c,
            Job_category__c,
            Bidding_Project_Name_Bid__c,
            Name,
            Sales_assistant_name__c,
            Sales_assistant_ID__c,
            Manager_name__c,
            Sales_manager_departmentID__c,
            Sales_owner_buchang__c,
            Sales_owner_buchangID__c
            from Opportunity where Id =: recordId
        ];
        res.stageName = opportunity.StageName;
        res.sapSendOK = opportunity.SAP_Send_OK__c;
        res.cntLostCancelReport = opportunity.Cnt_Lost_cancel_report__c;
        res.cntLostCancelDraft = opportunity.Cnt_Lost_cancel_Draft__c;
        res.jobCategory = opportunity.Job_category__c;
        res.biddingProjectNameBid = opportunity.Bidding_Project_Name_Bid__c;
        res.name = opportunity.Name;
        res.salesAssistantName = opportunity.Sales_assistant_name__c;
        res.salesAssistantID = opportunity.Sales_assistant_ID__c;
        res.managerName = opportunity.Manager_name__c;
        res.salesManagerDepartmentID = opportunity.Sales_manager_departmentID__c;
        res.salesOwnerBuchang = opportunity.Sales_owner_buchang__c;
        res.salesOwnerBuchangID = opportunity.Sales_owner_buchangID__c;
        } catch (Exception e) {
            throw new AuraHandledException(e.getMessage());
        }
        return res;
    }
    @AuraEnabled
    public static InitData initForLostReportButton(String recordId){
        InitData res = new InitData();
        try {
            Opportunity opportunity = [
                select
                StageName,
                SAP_Send_OK__c,
                Cnt_Lost_cancel_report__c,
                Name,
                Sales_assistant_name__c,
                Sales_assistant_ID__c,
                Manager_name__c,
                Sales_manager_departmentID__c,
                Sales_owner_buchang__c,
                Sales_owner_buchangID__c
                from Opportunity where Id =: recordId
            ];
            res.stageName = opportunity.StageName;
            res.sapSendOK = opportunity.SAP_Send_OK__c;
            res.cntLostCancelReport = opportunity.Cnt_Lost_cancel_report__c;
            res.name = opportunity.Name;
            res.salesAssistantName = opportunity.Sales_assistant_name__c;
            res.salesAssistantID = opportunity.Sales_assistant_ID__c;
            res.managerName = opportunity.Manager_name__c;
            res.salesManagerDepartmentID = opportunity.Sales_manager_departmentID__c;
            res.salesOwnerBuchang = opportunity.Sales_owner_buchang__c;
            res.salesOwnerBuchangID = opportunity.Sales_owner_buchangID__c;
        } catch (Exception e) {
            throw new AuraHandledException(e.getMessage());
        }
        return res;
    }
    @AuraEnabled
    public static InitData initForQuotationRequestButton(String recordId){
        InitData res = new InitData();
        try {
            Opportunity opportunity = [
                select
                Bidding_Project_Name_Bid__r.Id,
                Estimation_Id__c
                from Opportunity where Id =: recordId
            ];
            res.biddingProjectNameBidId = opportunity.Bidding_Project_Name_Bid__r.Id;
            res.estimationId = opportunity.Estimation_Id__c;
        } catch (Exception e) {
            throw new AuraHandledException(e.getMessage());
        }
        return res;
    }
    @AuraEnabled
    public static InitData initForStockApplyButton(String recordId){
        InitData res = new InitData();
        try {
            Opportunity opportunity = [
                select
                Stock_apply_status__c,
                Last_opportunity_file__r.Id
                from Opportunity where Id =: recordId
            ];
            res.stockApplyStatus = opportunity.Stock_apply_status__c;
            res.lastOpportunityFileId = opportunity.Last_opportunity_file__r.Id;
        } catch (Exception e) {
            throw new AuraHandledException(e.getMessage());
        }
        return res;
    }
    @AuraEnabled
    public static InitData initForQuotationProductNewButton(String recordId){
        InitData res = new InitData();
        try {
            Opportunity opportunity = [
                select
                CurrencyIsoCode
                from Opportunity where Id =: recordId
            ];
            res.currencyIsoCode = opportunity.CurrencyIsoCode;
        } catch (Exception e) {
            throw new AuraHandledException(e.getMessage());
        }
        return res;
    }
    @AuraEnabled
    public static string updateForAgencyAuthorizeButton(String recordId){
        try {
            Opportunity opp = new Opportunity();
            opp.Id = recordId;
            opp.If_Authorizing__c = true;
            opp.if_Interface_Lock__c = true;
            opp.IF_Submit__c = true;
            update opp;
            return null;
        } catch (Exception e) {
            String eMessage = e.getMessage();
            Integer left  = eMessage.indexOf(',') + 1;
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
    @AuraEnabled
    public static string updateForLoseBidButton(String recordId){
        try {
            Opportunity opp = new Opportunity();
            opp.Id = recordId;
            opp.ConfirmationofAward__c = LightingButtonConstant.OPPORTUNITY_CONFIRMATION_OF_AWARD_LOSE_BID;
            update opp;
            return null;
        } catch (Exception e) {
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',') + 1;
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
    @AuraEnabled
    public static string updateForOLYwinBidButton(String recordId){
        try {
            Opportunity opp = [select ConfirmationofAward__c,Closing_Bid_Date__c from Opportunity where Id =: recordId];
            opp.ConfirmationofAward__c = LightingButtonConstant.OPPORTUNITY_CONFIRMATION_OF_AWARD_OLY_WIN_BID;
            if (opp.Closing_Bid_Date__c == null) {
                opp.Closing_Bid_Date__c = Date.today();
            }
            update opp;
            return null;
        } catch (Exception e) {
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',') + 1;
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
    @AuraEnabled
    public static string updateForStockApplyButton(String recordId,Boolean flag){
        try {
            Opportunity opp = new Opportunity();
            opp.Id = recordId;
            if(flag){
                opp.Stock_apply_status__c  = '填写完毕';
            }else {
                opp.Stock_apply_status__c = '草案中';
            }
            update opp;
            return null;
        } catch (Exception e) {
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',') + 1;
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
    @AuraEnabled
    public static List<InquiryPredictsDateChange__c> queryForPredictedDateChangeButton(String recordId){
        List<InquiryPredictsDateChange__c> rac = null;
        try {
            rac = [
                select
                id
                from InquiryPredictsDateChange__c where Predicted_Date_Status__c = :LightingButtonConstant.PREDICTED_DATE_STATUS and Opportunity__c =:recordId];
        } catch (Exception e) {
            System.debug('e:****' + e);
        }
        return rac;
    }
    @AuraEnabled
    public static List<task__c> queryForLoseBidButton(String recordId){
        List<task__c> tasks = null;
        try {
            String obscureName = '%' + LightingButtonConstant.TASK_NAME_BY_CONFIRMATION_OF_WINNING_BID + '%';
            tasks = [
                select
                taskStatus__c
                from task__c where OpportunityId__c =: recordId and name like :obscureName];
        } catch (Exception e) {
            System.debug('e:****' + e);
        }
        return tasks;
    }
    @AuraEnabled
    public static List<task__c> queryForOLYwinBidButton(String recordId){
        List<task__c> tasks = null;
        try {
            String obscureName = '%' + LightingButtonConstant.TASK_NAME_BY_CONFIRMATION_OF_WINNING_BID + '%';
            tasks = [
                select
                taskStatus__c
                from task__c where OpportunityId__c =: recordId and name like :obscureName];
        } catch (Exception e) {
            System.debug('e:****' + e);
        }
        return tasks;
    }
    @AuraEnabled
    public static List<Tender_Opportunity_Link__c> queryForCancelReportButton(String recordId){
        List<Tender_Opportunity_Link__c> links = null;
        try {
            links = [
                select id,
                Tender_information__r.subInfoType__c
                from Tender_Opportunity_Link__c
                where (Tender_information__r.subInfoType__c = '3-1:废标公告' OR Tender_information__r.subInfoType__c ='3-2:流标公告') and Opportunity__c =: recordId
            ];
        } catch (Exception e) {
            System.debug('e:****' + e);
        }
        return links;
    }
    @AuraEnabled
    public static List<QuoteIrai__c > queryForQuotationRequestButton(String recordId){
        List<QuoteIrai__c> quotes = null;
        try {
            String opportunityId = '%' + recordId + '%';
            quotes = [
                select
                id
                from QuoteIrai__c where Note__c like :opportunityId and QuoteIrai_Status__c = '草案中'
            ];
        } catch (Exception e) {
            System.debug('e:****' + e);
        }
        return quotes;
    }
    public class InitData{
        @AuraEnabled
        public Boolean directLossFLG;
        @AuraEnabled
        public Date createdDay;
        @AuraEnabled
        public String agency1Id;
        @AuraEnabled
        public String agency1;
        @AuraEnabled
        public String stageName;
        @AuraEnabled
        public Boolean sapSendOK;
        @AuraEnabled
        public String oppOrderType;
        @AuraEnabled
        public Boolean ifHave170;
        @AuraEnabled
        public Boolean ifHaveAH;
        @AuraEnabled
        public Decimal cntLostCancelDraft;
        @AuraEnabled
        public Decimal cntLostCancelReport;
        @AuraEnabled
        public String estimationId;
        @AuraEnabled
        public Decimal detailNum;
        @AuraEnabled
        public Boolean estimationDecision;
        @AuraEnabled
        public String salesRoot;
        @AuraEnabled
        public Boolean acecideCntCheck;
        @AuraEnabled
        public Boolean ifSubmit;
        @AuraEnabled
        public String trade;
        @AuraEnabled
        public Boolean isCorrosion;
        @AuraEnabled
        public Boolean ifAuthorizingLock;
        @AuraEnabled
        public String profileId;
        @AuraEnabled
        public String ifOpenBid;
        @AuraEnabled
        public String accountId;
        @AuraEnabled
        public String userId;
        @AuraEnabled
        public String name;
        @AuraEnabled
        public Date bidPlannedDate;
        @AuraEnabled
        public String salesAssistantName;
        @AuraEnabled
        public String salesAssistantID;
        @AuraEnabled
        public String jobCategory;
        @AuraEnabled
        public String biddingProjectNameBid;
        @AuraEnabled
        public String managerName;
        @AuraEnabled
        public String salesManagerDepartmentID;
        @AuraEnabled
        public String salesOwnerBuchang;
        @AuraEnabled
        public String salesOwnerBuchangID;
        @AuraEnabled
        public String biddingProjectNameBidId;
        @AuraEnabled
        public String stockApplyStatus;
        @AuraEnabled
        public String lastOpportunityFileId;
        @AuraEnabled
        public String currencyIsoCode;
    }
}
force-app/main/default/classes/OpportunityLightingButtonController.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/OpportunityService.cls
New file
@@ -0,0 +1,457 @@
public with sharing   class OpportunityService{
  private static String opp_search_field = ' Id, Name, Account_Name_F__c, OwnerId, Hospital__c, Opportunity_No__c, Opportunity_stage__c, StageName__c, Bidding_Project_Name_Bid__c, Department_Class__r.RecordTypeId ';
  // 查询已保存的数据
  //noStr 询价的ID
  //daccountID 客户的ID 现在没用
  // IdStr 招投标的ID
  //hospital 医院的ID
  @AuraEnabled
  public  static string GetNormalProductDataSearch(String noStr,String accountId,String IdStr,String hospital,String[] hospitalArr, String departments) {
    String sql = 'select ';
    // sql += CommonUtils.GetSqlToPorps(Opportunity.SObjectType);
    sql += opp_search_field;
    sql += ' from Opportunity';
    // 多对多关系 去掉未关联的判断 start
    // sql += ' where Bidding_Project_Name_Bid__c = null ';
    sql += ' where id != null ';
    // 多对多关系 去掉未关联的判断 end
    if(noStr != null && noStr != '' && noStr != ' ')
    {
      sql += ' and Opportunity_No__c = :noStr';
    }
    if(hospitalArr!= null && hospitalArr.size() > 0)
    {
      sql += ' and Hospital__c in :hospitalArr';
    }
    if(hospital != null && hospital != '' && hospital != ' ')
    {
      sql += ' and Hospital__c = :hospital';
    }
    // String paremt1 = '012100000006KMe';
    // String paremt2 = '01210000000QekK';
    // String paremt3 = '引合';
    // sql += ' and (recordtypeid = :paremt1 or recordtypeid = :paremt2) and stagename = :paremt3 ';
    sql += ' and recordtype.developername in (\'Opportunity\',\'SI_Oppor\') and Hospital__r.Is_Active__c = \'有効\' '+
        // 这里有修改,别给盖了
    ' and ( (SAP_Send_OK__c = true and SAP_Send_OK_Date__c   = LAST_N_DAYS:183  ) '+
        'or( stagename = \'敗戦\' and Final_Contract_Proceeded_Date__c = LAST_N_DAYS:183  ) or stagename = \'引合\' ) ';
      // 这里有修改,别给盖了
    // 20210914 战略科室修改
    //if (departments != null && String.isNotBlank(departments)) {
    //  String[] depart_types = departments.split(';');
    //  if (depart_types != null && depart_types.size() > 0 && depart_types.size() < 6) {
    //    sql += ' and Department_Class__r.RecordTypeId in :depart_types ';
    //  }
    //}
    // 20210914 战略科室修改
    // 去掉已经关联的招标
    if(IdStr != null && String.isNotBlank(IdStr)) {
      sql += ' and id not in (select Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c = :IdStr) ';
    }
    // 20221014 ljh SWAG-CK28WT add start
    String proId = UserInfo.getProfileId();
    String p_2M4 = System.Label.ProfileId_2M4;
    if(proId.substring(0,15) == p_2M4.substring(0,15)){
       sql += ' AND OwnerId =\''+UserInfo.getUserId()+'\'';
    }
    System.debug('sql:'+sql);
    // 20221014 ljh SWAG-CK28WT add end
    sql += '  limit 50';
    List<Opportunity> arrays = Database.query(sql);
    return JSON.serialize(arrays);
  }
 // 查询未保存的数据
  // IdStr 招投标的ID
  //hospital 医院的ID
  @AuraEnabled
  public  static string GetNormalProductDataNotSave(String IdStr,String[] hospital, String departments) {
    //TODU
    // QueryWrapper query = new QueryWrapper(Tender_information__c.SObjectType);
    // query.eq('Id',IdStr);
    // 招标-询价关联修改 20210813 start
    String sql = 'select ';
    // sql += CommonUtils.GetSqlToPorps(Opportunity.SObjectType);
    sql += opp_search_field;
    sql += ' from Opportunity';
    // 多对多关系 去掉未关联的判断 start
    // sql += ' where Bidding_Project_Name_Bid__c = null ';
    // 多对多关系 去掉未关联的判断 end
    // String paremt1 = '012100000006KMe';
    // String paremt2 = '01210000000QekK';
    // String paremt3 = '引合';
    // sql += ' and (recordtypeid = :paremt1 or recordtypeid = :paremt2) and stagename = \'引合\' ';
    // sql += ' and recordtype.developername in (\'Opportunity\',\'SI_Oppor\') and Hospital__r.Is_Active__c = \'有効\' '+
    sql += ' where recordtype.developername in (\'Opportunity\',\'SI_Oppor\') and Hospital__r.Is_Active__c = \'有効\' '+
        // 这里有修改,别给盖了
    ' and ( (SAP_Send_OK__c = true and SAP_Send_OK_Date__c   = LAST_N_DAYS:183 ) '+
        'or( stagename = \'敗戦\' and Final_Contract_Proceeded_Date__c = LAST_N_DAYS:183  ) or stagename = \'引合\' ) ';
      // 这里有修改,别给盖了
    // 去掉已经关联的招标
    if(IdStr != null && String.isNotBlank(IdStr)) {
      sql += ' and id not in (select Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c = :IdStr) ';
    }
    // 20210914 战略科室修改
    //if (departments != null && String.isNotBlank(departments)) {
    //  String[] depart_types = departments.split(';');
    //  if (depart_types != null && depart_types.size() > 0 && depart_types.size() < 6) {
    //    sql += ' and Department_Class__r.RecordTypeId in :depart_types ';
    //  }
    //}
    // 20210914 战略科室修改
    if(hospital!= null && hospital.size() > 0)
    {
      sql += ' and Hospital__c in :hospital';
    }
    // 20221014 ljh SWAG-CK28WT add start
    String proId = UserInfo.getProfileId();
    String p_2M4 = System.Label.ProfileId_2M4;
    if(proId.substring(0,15) == p_2M4.substring(0,15)){
       sql += ' AND OwnerId =\''+UserInfo.getUserId()+'\'';
    }
    System.debug('sql:'+sql);
    // 20221014 ljh SWAG-CK28WT add end
    sql += '  limit 50';
    List<Opportunity> arrays = Database.query(sql);
    // Tender_information__c
    return JSON.serialize(arrays);
    // 招标-询价关联修改 20210813 end
  }
  //查询已保存
  // 只有一个 当前招投标
  //IdStr 招投标的ID
  @AuraEnabled
  public  static string GetNormalProductDataIsSave(String IdStr) {
    // 招标-询价关联修改 20210817 start
    // 查询方式或许应该优化一下
    // QueryWrapper query = new QueryWrapper(Opportunity.SObjectType);
    // query.eq('Bidding_Project_Name_Bid__c', IdStr);
    // List<Opportunity> arrays = DataBasePlus.listPlus(query);
    List<Id> oppIds = new List<Id>();
    List<Tender_Opportunity_Link__c> links = [select Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c = :IdStr];
    if (links != null && links.size() > 0) {
      for (Tender_Opportunity_Link__c link : links) {
        oppIds.add(link.Opportunity__c);
      }
    }
    // String sql = 'select ' + CommonUtils.GetSqlToPorps(Opportunity.SObjectType) + ' from Opportunity ';
    String sql = 'select ' + opp_search_field + ' from Opportunity ';
    sql += 'where Id in :oppIds';
    List<Opportunity> arrays = Database.query(sql);
    // 招标-询价关联修改 20210817 end
    return JSON.serialize(arrays);
  }
  //保存
   //JsonSelected JSON格式的招投标的已选择数据集合
   //JsonNotSelected JSON格式的招投标的未选择数据集合
   // BiddingId 对应的招标项目名(招投标)
   // flag  修改 招投标项目 关联询价时间的一个标识
  @AuraEnabled
  public  static string SaveData(String JsonSelected,String JsonNotSelected,String BiddingId,Boolean flag) {
    try{
      // 新增招标-询价关联关系表,去掉更新询价上的最新招标信息 20210813 start
      // if(JsonSelected != null &&  JsonSelected != '' && JsonSelected !='[]')
      // {
      //   List<Opportunity> SelectedList = (List<Opportunity>)JSON.deserialize(JsonSelected,List<Opportunity>.class);
      //   for(Opportunity item :SelectedList){
      //     item.Bidding_Project_Name_Bid__c = null;
      //   }
      // Database.update(SelectedList,false);
      // }
      // string OppOwnerId = '';
      // if(JsonNotSelected != null &&  JsonNotSelected != '' && JsonNotSelected !='[]')
      // {
      //   List<Opportunity> NotSelectedList = (List<Opportunity>)JSON.deserialize(JsonNotSelected,List<Opportunity>.class);
      //   for(Opportunity item :NotSelectedList){
      //     item.Bidding_Project_Name_Bid__c = BiddingId;
      //   }
      //   OppOwnerId = NotSelectedList[0].ownerId;
      //   Database.update(NotSelectedList);
      // }
      // if(flag != null && flag == true)
      // {
      //   string tenProp = CommonUtils.GetSqlToPorps(Tender_information__c.SObjectType);
      //   String sql = 'select '+tenProp+' from Tender_information__c  where Id = :BiddingId';
      //   List<Tender_information__c> arrays = Database.query(sql);
      //   arrays[0].RelateOppTime__c = datetime.now();
      //   //if( arrays[0].IsBid__c == null && OppOwnerId != '')
      //   //{
      //   //  arrays[0].ownerId = OppOwnerId;
      //   //}
      //   if (arrays != null && arrays.size() >0 &&
      //   (arrays[0].ownerId == '00510000005sEEM' || arrays[0].ownerId == '00510000000gmxH')
      //   && OppOwnerId != '')
      //   {
      //     arrays[0].ownerId = OppOwnerId;
      //   }
      //   Database.update(arrays);
      // }
      // 新增招标-询价关联关系表,去掉更新询价上的最新招标信息 20210813 end
      // 招标-询价关联修改 20210813 start
      // 查询招标
      // string tenProp = CommonUtils.GetSqlToPorps(Tender_information__c.SObjectType);
      // String sql = 'select '+tenProp+' from Tender_information__c  where Id = :BiddingId';
      String sql = 'SELECT ';
      sql += 'Id, ';
      sql += 'NotBidApprovalStatus__c, ';
      sql += 'IsBid__c, ';
      sql += 'TenderBeginTime__c, ';
      sql += 'InfoType__c, ';
      sql += 'OwnerId, ';
      sql += 'IsReactionOpp__c, ';
      sql += 'IsRelateProject__c, ';
      sql += 'RelateOppTime__c, ';
      sql += 'irrelevantReasons__c, ';
      sql += 'irrelevantReasonOther__c, ';
      sql += 'Hospital__c, ';
      sql += 'Hospital1__c, ';
      sql += 'Hospital2__c, ';
      sql += 'Hospital3__c, ';
      sql += 'Hospital4__c, ';
      sql += 'publicDate__c, ';// 20221114 ljh SWAG-CKL5UC
      sql += 'Tender_Order__c, ';  //20220620 you SWAG-CFD4SU
      sql += 'subInfoType__c ';  //20220718 you 招标任务
      sql += 'FROM Tender_information__c  WHERE Id = :BiddingId order by Tender_Order__c desc,relativeTime_F__c desc'; //20220620 you SWAG-CFD4SU 增加 order by
      List<Tender_information__c> arrays = Database.query(sql);
      Tender_information__c tender = arrays[0];
      // 不应标申请中的时候 调回申请修改 20210907 start
      if (tender.NotBidApprovalStatus__c != null && tender.NotBidApprovalStatus__c == '申请中') {
        List<Approval.ProcessWorkitemRequest> requests = new List<Approval.ProcessWorkitemRequest> ();
        ProcessInstance pi = [Select Id, SubmittedById from ProcessInstance where TargetObjectId = :tender.Id and Status = 'Pending' order by CreatedDate desc limit 1];
        if (pi != null) {
          for(ProcessInstanceWorkItem wi : [Select Id from ProcessInstanceWorkItem where ProcessInstanceId = :pi.Id]){
            Approval.ProcessWorkitemRequest req2 = new Approval.ProcessWorkitemRequest();
            if (pi.SubmittedById.equals(Userinfo.getUserId())) {
              req2.setAction('Removed');
              tender.NotBidApprovalStatus__c = '草案中';
            } else {
              req2.setAction('Reject');
              tender.NotBidApprovalStatus__c = '驳回';
              tender.IsBid__c = null;
            }
            req2.setWorkitemId(wi.Id);
            requests.add(req2);
          }
          system.debug('==requests.size()=='+requests.size());
          if (requests.size() > 0) {
            Approval.ProcessResult[] processResults = null;
            processResults = Approval.process(requests, true);
            system.debug('==调回结果=='+processResults);
          }
        }
      }
      // 不应标申请中的时候 调回申请修改 20210907 end
      // 合并已关联和未关联列表
      List<Opportunity> all_selected_list = new List<Opportunity>();
      if (JsonSelected != null &&  JsonSelected != '' && JsonSelected !='[]') {
        all_selected_list.addAll((List<Opportunity>)JSON.deserialize(JsonSelected,List<Opportunity>.class));
      }
      if (JsonNotSelected != null &&  JsonNotSelected != '' && JsonNotSelected !='[]') {
        all_selected_list.addAll((List<Opportunity>)JSON.deserialize(JsonNotSelected,List<Opportunity>.class));
      }
      // 招标所有人是否要修改flag
      // boolean owner_change = false;
      // 先删除旧的link
      // 跳过trigger标记
      // 没有删除逻辑
      StaticParameter.EscapeTOLinkTrigger = true;
      // List<Tender_Opportunity_Link__c> del_links = [select Id from Tender_Opportunity_Link__c where Tender_information__c = :BiddingId];
      // if (del_links != null && del_links.size() > 0) {
      //   delete del_links;
      // }
      // 更新询价
      List<Opportunity> upd_opps = new List<Opportunity>();
      List<Opportunity> upd_opps1 = new List<Opportunity>();
      List<String> owners = new List<String>();
      // 插入link
      if (all_selected_list.size() > 0) {
        // 设置招标所有人
        // OppOwnerId = all_selected_list[0].ownerId;
        // 初始化参数
        List<Tender_Opportunity_Link__c> add_list = new List<Tender_Opportunity_Link__c>();
        // 当询价关联过结果阶段的招标项目,再被另一个结果阶段的招标项目关联时,会因为数据被锁定而报错
        // 在此处重新检索询价
        List<String> oppIds = new List<String>();
        for (Opportunity opp : all_selected_list) {
          oppIds.add(opp.Id);
          owners.add(opp.ownerId);
          // 新建link
          Tender_Opportunity_Link__c link = new Tender_Opportunity_Link__c();
          link.Tender_information__c = tender.Id;
          link.Opportunity__c = opp.Id;
          link.Tender_Opportunity_Uniq__c = String.valueOf(tender.Id) + String.valueOf(opp.Id);
          add_list.add(link);
        }
        // 插入link
        if (add_list.size() > 0) {
          insert add_list;
        }
        // 恢复trigger标记
        StaticParameter.EscapeTOLinkTrigger = false;
        //20220620 you SWAG-CFD4SU 改造 start  始终显示最新的 ① 3:结果,② 4:变更,③ 2:公告,④ 1:预告,⑤ 5:其他
        List<String> tenIds = new List<String>();//20220718 you 招标任务
        system.debug('opportunityservicetest'+oppIds);
        if (oppIds.size() > 0) {
          // 20221114 SWAG-CKL5UC ljh 增加 Created_Day__c,LeadSource,LeakageNumber__c
          List<Opportunity> wait_upd_opps = [select id,Opp_Order__c,Tender_Number__c, Bidding_Project_Name_Bid__c, Bidding_Project_Name_Bid__r.InfoType__c,Created_Day__c,LeadSource,LeakageNumber__c from Opportunity where id in :oppIds ];//and Bidding_Project_Name_Bid__r.InfoType__c != '3:结果'];
          if (wait_upd_opps != null && wait_upd_opps.size() > 0) {
            for (Opportunity opp : wait_upd_opps) {
              /**
              if (opp.Bidding_Project_Name_Bid__c == null || String.isBlank(opp.Bidding_Project_Name_Bid__c)) {
                opp.Bidding_Project_Name_Bid__c = tender.Id;
                opp.TenderBeginDate_Text__c = tender.TenderBeginTime__c;
                upd_opps.add(opp);
              } else if (tender.InfoType__c == '3:结果' && opp.Bidding_Project_Name_Bid__r.InfoType__c != '3:结果') {
                opp.Bidding_Project_Name_Bid__c = tender.Id;
                upd_opps.add(opp);
              }
              **/
              if(opp.Opp_Order__c <= tender.Tender_Order__c){
                opp.Bidding_Project_Name_Bid__c =tender.Id;
                //opp.TenderBeginDate_Text__c = tender.TenderDate__c;//更改询价2时修改这个字段,引用超20,tender.TenderBeginTime__c;
                upd_opps.add(opp);
                //20220715 you 招标项目 start
                if(String.isNotBlank(tender.InfoType__c) && tender.InfoType__c=='3:结果' && String.isNotBlank(tender.subInfoType__c) && (tender.subInfoType__c=='3-5:中标通知' || tender.subInfoType__c=='3-6:合同公告')){
                  tenIds.add(opp.id); //符合条件生成任务
                }
                //20220715 you 招标项目 end
                break;
              }
            }
            //20220829 you SWAG-CHL67J start
            for (Opportunity opp : wait_upd_opps) {
              Integer returncount =0;
              if(String.isNotBlank(tender.InfoType__c) && tender.InfoType__c!='1:预告' && String.isNotBlank(tender.subInfoType__c) && tender.subInfoType__c!='3-1:废标公告' && tender.subInfoType__c!='3-2:流标公告'){
                  returncount += 1;
                }
              opp.Tender_Number__c = returncount;
              // 20221114 ljh SWAG-CKL5UC start
              if(opp.LeakageNumber__c != 1 && tender.publicDate__c != null && String.isNotBlank(opp.LeadSource) && opp.LeadSource == '招标网' && opp.Created_Day__c > tender.publicDate__c){
                opp.LeakageNumber__c = 1;
              }
              // 20221114 ljh SWAG-CKL5UC start
              upd_opps1.add(opp);
            }
            //20220829 you SWAG-CHL67J end
          }
        }
        if (upd_opps1.size() > 0) {
          update upd_opps1;
        }
        //20220620 you SWAG-CFD4SU 改造 end
        // 更新询价上的招标项目
        if (upd_opps.size() > 0) {
          update upd_opps;
        }
         //20220718 you 招标任务 start
        if (tenIds !=null && tenIds.size() > 0) {
            Database.executeBatch(new TenderResultConfirmTaskBatch(tenIds));
          }
          //20220718 you 招标任务 end
      }
      // 查询招标数量并更新
      List<Tender_Opportunity_Link__c> tenderLinks = [SELECT id, Tender_information__c, Opportunity__c, Opportunity__r.Hospital__c, Opportunity__r.OwnerId FROM Tender_Opportunity_Link__c WHERE Tender_information__c = :tender.Id];
      List<String> oppOwnerInLinks = new List<String>();
      for (Tender_Opportunity_Link__c link : tenderLinks) {
        oppOwnerInLinks.add(link.Opportunity__r.OwnerId);
      }
      // 更新招标上的所有人
      if (tender.OwnerId == null || '00510000000gmxH'.equals(tender.OwnerId) || (oppOwnerInLinks.size() > 0 && !oppOwnerInLinks.contains(tender.OwnerId))) {
        tender.ownerId = owners.size() > 0 ? owners.get(0) : '00510000000gmxH';
      }
      // 反映询价状态
      tender.IsReactionOpp__c = true;
      // 查询招标数量并更新
      //List<Tender_Opportunity_Link__c> tenderLinks = [SELECT id, Tender_information__c, Opportunity__c, Opportunity__r.Hospital__c FROM Tender_Opportunity_Link__c WHERE Tender_information__c = :tender.Id];
      tender.OpportunityNum__c = tenderLinks != null ? tenderLinks.size() : 0;
      // 关联询价时间和是否相关状态
      if (tender.IsRelateProject__c != '是') {
        tender.IsRelateProject__c = '是';
        tender.RelateOppTime__c = datetime.now();
        tender.irrelevantReasons__c = null;
        tender.irrelevantReasonOther__c = null;
      }
      // 更新关联医院
      if (tenderLinks != null && tenderLinks.size() > 0) {
        // 招标项目的医院
        Map<String,String> fiveHospitalMap = new Map<String,String>();
        fiveHospitalMap.put('Hospital__c', tender.Hospital__c);
        fiveHospitalMap.put('Hospital1__c', tender.Hospital1__c);
        fiveHospitalMap.put('Hospital2__c', tender.Hospital2__c);
        fiveHospitalMap.put('Hospital3__c', tender.Hospital3__c);
        fiveHospitalMap.put('Hospital4__c', tender.Hospital4__c);
        for(Integer i = 0; i<tenderLinks.size();i++) {
          //当招投标项目的五个医院赋值完成后不再赋值
          Boolean HospitalIsNeedBreak = false;
          for(String ApiName :fiveHospitalMap.keySet()){
              HospitalIsNeedBreak = fiveHospitalMap.get(ApiName)==null?false:true;
          }
          if(HospitalIsNeedBreak){
              break;
          }
          //给招投标项目的5个医院设值
          for(String ApiName : fiveHospitalMap.keySet()){
            String tempTenderHospId = fiveHospitalMap.get(ApiName)==null?'':fiveHospitalMap.get(ApiName);
            String oppHospId = tenderLinks.get(i).Opportunity__r.Hospital__c;
            //如果招标项目已经有该医院就判断下一个询价的医院
            if(tempTenderHospId.contains(oppHospId)){
                break;
            }
            //医院为空,赋值医院(赋值之后进行赋值下一个医院)
            if(String.isBlank( fiveHospitalMap.get(ApiName) )){
                fiveHospitalMap.put(ApiName,oppHospId);
                break;
            }
          }
        }
        tender.Hospital__c = fiveHospitalMap.get('Hospital__c');
        tender.Hospital1__c = fiveHospitalMap.get('Hospital1__c');
        tender.Hospital2__c = fiveHospitalMap.get('Hospital2__c');
        tender.Hospital3__c = fiveHospitalMap.get('Hospital3__c');
        tender.Hospital4__c = fiveHospitalMap.get('Hospital4__c');
      }
      update tender;
      // 招标-询价关联修改 20210813 end
      return '成功';
    }catch (Exception ex) {
      return  ex.getMessage();
    }
  }
}
force-app/main/default/classes/OpportunityService.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>51.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/OpportunityWebService.cls
New file
@@ -0,0 +1,506 @@
global class OpportunityWebService {
    @AuraEnabled
    WebService static String changeTrade(String oppId){
        List<Quote> quoList = [select id from Quote where OpportunityId = :oppId];
        List<OpportunityLineItem> oppLI = [select id from OpportunityLineItem where Opportunity.id = :oppId];
        Opportunity opp = new Opportunity();
        opp.id = oppId;
        opp.Estimation_Decision__c = false;
        opp.Estimation_Id__c = null;
        opp.Quote_Update_Sum__c = null;
        opp.Estimation_No__c = null;
        opp.Estimation_Proposal_Date__c = null;
        opp.Estimation_Name__c = null;
        // LHJ SWAG-C9QAAJ 去掉 Start
        // opp.Authorized_Finish_Sales__c = null;
        // opp.Authorized_DB_No__c = null;
        // opp.Authorized_Date__c = null;
        // opp.Autholization_Activated_Date__c = null;
        // opp.Bidding_Content__c = null;
        // opp.Bid_Date__c = null;
        // opp.Bidding_No__c = null;
        // opp.Bidding_Project_Name__c = null;
        // LHJ End
        Savepoint sp = Database.setSavepoint();
        try {
            delete quoList;
            delete oppLI;
            update opp;
            return '1';
        } catch (Exception ex) {
            Database.rollback(sp);
            return  ex.getMessage() + ' | Line:' + ex.getLineNumber();
        }
    }
    // LHJ CBPR Start
    webservice String parameter { get; set; }
    public OpportunityWebService() {
        this.parameter = 'value';
    }
    @AuraEnabled
    WebService static String oppCheck(String oppid, String saveFlg) {
        Map<Id, String> proMap= new Map<Id, String>();
        List<OpportunityLineItem> OppItemList = [select PricebookEntry.Product2Id, PricebookEntry.Product2.Name
                                                   From OpportunityLineItem
                                                  Where OpportunityId = :oppid];
        if (OppItemList.size() > 0) {
            for (OpportunityLineItem opl : OppItemList) {
                proMap.put(opl.PricebookEntry.Product2Id, opl.PricebookEntry.Product2.Name);
            }
        }
        List<Opportunity> oppList = [select Agency1__c from Opportunity where id = :oppid];
        String angencyId = oppList[0].Agency1__c;
        String strRet = '';
        if (saveFlg == '1') {
            strRet = checkProRegisterDecide(proMap, angencyId, oppid);
        } else {
            strRet = checkProRegisterDecide(proMap, angencyId, '');
        }
        return strRet;
    }
    @AuraEnabled
    // LHJ 阿西赛多检查 Start
    WebService  static String checkDangerItem(String agency1) {
        //没有危化品证照的提示信息
        String licenseStr = '第一经销商没有有效的危险化学品经营许可证。';
        //没有阿西赛多经销商协议的提示信息
        String accStr = '第一经销商没有阿西赛多经销商协议。';
        //检查是否有证照
        List<License_Information__c> licenseList = [SELECT Id
                                                      FROM License_Information__c
                                                     WHERE LicenseAndAccount__c = :agency1
                                                       AND LicenseType__c = '危险化学品经营许可证'
                                                       AND Is_Active_Formula__c = true
                                                    ];
        //检查是否有阿西赛多协议
        List<Account> accountList = [SELECT Id
                                                      FROM Account
                                                     WHERE Parent.id = :agency1
                                                       //阿西赛多 增加检索阿西赛多协议 以及 可以做报价(复选框) 精琢技术 wql 2021/01/04 start
                                                       AND Contract_Quote_Decide_Flag_checkbox__c =true
                                                       AND Assiesedo_Dealer__c  = true
                                                       //阿西赛多 增加检索阿西赛多协议 以及 可以做报价(复选框) 精琢技术 wql 2021/01/04 end
                                                    ];
        system.debug('licenseList:'+licenseList.size());
        system.debug('agency1:'+agency1);
        //①既没有危化品证也没有阿西赛多协议
        if(licenseList.size() == 0 && accountList.size() ==0){
            return licenseStr+accStr;
        }
        //②没有危化品证
        else if(licenseList.size() ==0){
            return licenseStr;
        }
        //②没有阿西赛多经销商协议
        else if(accountList.size() ==0){
            return accStr;
        }
        //③全都有
        else{
            return 'OK';
        }
    }
    // LHJ 阿西赛多检查 End
    public static Map<String, String> MapCheckProRegisterDecide(Map<Id, String> proMap, String agency1, String OppId) {
        Map<String, String> retMap = new Map<String, String>();
        String errormessage = '';
        Boolean error = false;
        Map<String,List<String>> proAllBSstrMap;
        List<String> proNotNeedList = new List<String>();
        Map<String,List<String>> old_newMap = new Map<String,List<String>>();
        Map<String,List<String>> new_oldMap = new Map<String,List<String>>();
        // 取得 经营范围对应产品关系
        List<String> midStr = new List<String>();
        List<String> midStrO = new List<String>();
        // List<Product_Register_contrast__c> rrList = Product_Register_contrast__c.getall().values();
        // for (Product_Register_contrast__c rr : rrList) {
        //     midStr = new List<String>();
        //     midStrO = new List<String>();
        //     // 经营范围对应产品关系 Map作成 旧-新对照
        //     if (old_newMap.containsKey(rr.Register_old__c)) {
        //         old_newMap.get(rr.Register_old__c).add(rr.Register_new__c);
        //     } else {
        //         midStrO.add(rr.Register_new__c);
        //         old_newMap.put(rr.Register_old__c, midStrO.clone());
        //     }
        //     // 经营范围对应产品关系 Map作成 新-旧对照
        //     if (new_oldMap.containsKey(rr.Register_new__c)) {
        //         new_oldMap.get(rr.Register_new__c).add(rr.Register_old__c);
        //     } else {
        //         midStr.add(rr.Register_old__c);
        //         new_oldMap.put(rr.Register_new__c, midStr.clone());
        //     }
        // }
        // 取得经销商 医疗器械经营许可证
        List<License_Information__c> licenseList = [SELECT Id,
                                                           ScopeKey__c,
                                                           LicenseType__c
                                                      FROM License_Information__c
                                                     WHERE LicenseAndAccount__c = :agency1
                                                    AND (LicenseType__c = '医疗器械经营许可证'
                                                        OR LicenseType__c = '第二类医疗器械经营备案凭证')
                                                      AND Is_Active_Formula__c = true
                                                    ];
        // 判断 医疗器械经营许可证 是否存在
        if (licenseList.size() == 0) {
            error = true;
            errormessage = '第一经销商没有有效的医疗器械经营许可证。';
            retMap.put('agency', '0');
        } else {
            //经销商经营范围
            List<String> agListA = new List<String>();
            List<String> agListTemp = new List<String>();
            List<String> agList = new List<String>();
            //取经销商下 所有医疗器械经营许可证、第二类医疗器械经营备案凭证
            for (License_Information__c li : licenseList) {
                if (li.ScopeKey__c != null) {
                    agListA.addAll(li.ScopeKey__c.split(';'));
                    agListTemp.addAll(li.ScopeKey__c.split(';'));
                }
            }
            for (String a : agListTemp) {
                if (a.length() >= 6) {
                    agList.add(a.substring(0, a.length() - 1));
                } else {
                    agList.add(a.trim());
                }
            }
            //产品注册证
            Map<String,Map<String,String>> proBSMap = new Map<String,Map<String,String>>();
            Map<String,String> proMidMap = null;
            //产品所有有效注册证(可以和经销商匹配)
            proAllBSstrMap = new Map<String,List<String>>();
            set<Id> proIdList = new set<Id>();
            for (String qli : proMap.keySet()) {
                    proIdList.add(qli);
                    proBSMap.put(qli, proMidMap);
                    List<String> empList = new List<String>();
                    proAllBSstrMap.put(qli, empList);
            }
            List<Product_Register_Link__c> prls = [
                                                 Select Product2__c,
                                                        Product2__r.Asset_Model_No__c,
                                                        Product2__r.SFDA_Approbated_Status__c,
                                                        Product2__r.SFDA_Status_New__c, // 产品的CFDA最终状态 20181225
                                                        Product_Register__r.Name,
                                                        Product_Register__r.BusinessScopeKey__c,
                                                        Product_Register__r.RegisterNoStatus__c,
                                                        Product_Register__r.MedPrdClass__c
                                                   From Product_Register_Link__c
                                                  where Product2__c in :proIdList
                                                  ];
            // LHJ 20190102 增加跳过逻辑 Start
            List<Product2> productList = [select ID,SFDA_Status__c from Product2 where id in :proIdList];
            for (Product2 pro : productList) {
                if (pro.SFDA_Status__c == '不要') {
                    proNotNeedList.add(pro.ID);
                }
            }
            // LHJ 20190102 增加跳过逻辑 End
            for (Product_Register_Link__c prl : prls) {
                // 设置产品类别MAP
                if (String.isNotBlank(prl.Product_Register__r.BusinessScopeKey__c)) {
                    system.debug('Product2 +++++++' + prl.Product2__c);
                    if (proBSMap.get(prl.Product2__c) != null) {
                        proBSMap.get(prl.Product2__c).put(prl.Product_Register__r.Name, prl.Product_Register__r.BusinessScopeKey__c);
                    } else {
                        Map<String,String> toooMap = new Map<String,String>();
                        toooMap.put(prl.Product_Register__r.Name, prl.Product_Register__r.BusinessScopeKey__c);
                        proBSMap.put(prl.Product2__c, toooMap.clone());
                    }
                }
                // 产品的产品注册证是"不要"状态 不需要匹配注册证 20181225
                if (prl.Product2__r.SFDA_Approbated_Status__c == '不要'
                        || prl.Product_Register__r.MedPrdClass__c == '1') {
                     proNotNeedList.add(prl.Product2__c);
                }
            }
            system.debug('proBSMap +++++++' + proBSMap);
            for (String qli : proMap.keySet()) {
                String proId = qli;
                String proName = proMap.get(proId);
                if (proId != null) {
                    Boolean haveBS = false;
                    // 产品属于非医疗,不用判断经营范围
                    if (proNotNeedList.contains(proId)) {
                        haveBS = true;
                        continue;
                    }
                    if (proBSMap.get(proId) == null) {
                        error = true;
                        errormessage += '产品"' + proName + '"没有有效的产品注册证。\n';
                        retMap.put(proId, '1');
                        continue;
                    }
                    if (proBSMap.get(proId) != null) {
                        system.debug('111 +++++++' + proBSMap);
                        Map<String,String> midMap = new Map<String,String>();
                        midMap = proBSMap.get(proId);
                        for (String str : midMap.keySet()) {
                            // LHJ 20200711 Start
                            String strMidMap = midMap.get(str);
                            List<String> proRegList = new List<String>();
                            proRegList.addAll(strMidMap.split(';'));
                            // LHJ 20200711 End
                            for(String strReg:proRegList){
                                // 被定义为"6815A"的产品类别,经营范围中必须有6815或者6815A外才可以匹配。
                                if (strReg.length() == 6) {
                                    for(String strAg:agListA){
                                        if(strAg.length() >= 5 && midMap.get(str.substring(0, str.length() - 1)) == strAg.substring(0,5)){
                                            proAllBSstrMap.get(proId).add(str.substring(0, str.length() - 1));
                                            haveBS = true;
                                            break;
                                        }
                                    }
                                    /*if (agListA.contains(midMap.get(str.substring(0, str.length() - 1)))) {
                                        proAllBSstrMap.get(proId).add(str.substring(0, str.length() - 1));
                                        haveBS = true;
                                    }*/
                                } else {
                                    system.debug('agList +++++++' + agList);
                                    system.debug('midMap +++++++' + strReg);
                                    if (agList.contains(strReg)) {
                                        //产品类别,匹配到经销商类别
                                        proAllBSstrMap.get(proId).add(str);
                                        haveBS = true;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    if (!haveBS) {
                        error = true;
                        errormessage += '第一经销商的经营范围中不包含产品" ' + proName + '"。\n';
                        retMap.put(proId, '2');
                    }
                }
            }
        }
        if (retMap.isEmpty() == false) {
            //return errormessage;
        } else {
            if (OppId != '') {
                // 更新所有注册证信息
                String strRegister_alleffective;
                List<Product2> pro2List = new List<Product2>();
                Map<String, Product2> pro2Map = new Map<String, Product2>();
                List<OpportunityLineItem> updList = new List<OpportunityLineItem>();
                List<OpportunityLineItem> OppItemList = [select id, Id__c, Register_alleffective__c,PricebookEntry.Product2Id
                                                           From OpportunityLineItem
                                                          Where OpportunityId = :OppId];
                // 非医疗或1类产品,取得
                if (proNotNeedList != null && proNotNeedList.size() > 0) {
                    pro2List = [select id, SFDA_Approbated_Status__c, RegisterNo_ALL__c from Product2 where Id in :proNotNeedList];
                }
                for (Product2 pro2 : pro2List) {
                    pro2Map.put(pro2.Id, pro2);
                }
                for (OpportunityLineItem ol : OppItemList) {
                    if (proAllBSstrMap.containsKey(ol.PricebookEntry.Product2Id)) {
                        ol.Register_alleffective__c = '';
                        for(String str: proAllBSstrMap.get(ol.PricebookEntry.Product2Id)) {
                            if (String.isNotBlank(ol.Register_alleffective__c)) {
                                ol.Register_alleffective__c += ';' + str;
                            } else {
                                ol.Register_alleffective__c = str;
                            }
                        }
                        // 非医疗或1类产品
                        if (pro2Map.containskey(ol.PricebookEntry.Product2Id)) {
                            if (pro2Map.get(ol.PricebookEntry.Product2Id).SFDA_Approbated_Status__c == '不要') {
                                ol.Register_alleffective__c = 'FYL';
                            } else {
                                ol.Register_alleffective__c = pro2Map.get(ol.PricebookEntry.Product2Id).RegisterNo_ALL__c;
                            }
                        }
                    }
                    updList.add(ol);
                }
                if (updList.size() > 0)  update updList;
            }
        }
        //如果不满足阿西赛多的条件,进入这个变量 20200821 ljh
        return retMap;
    }
    public static String checkProRegisterDecide(Map<Id, String> proMap, String agency1, String OppId) {
        String errormessage = '';
        Boolean error = false;
        Map<String, String> CheckMap = new Map<String, String>();
        CheckMap = MapCheckProRegisterDecide(proMap, agency1, OppId);
        if (CheckMap.isEmpty()) {
            return 'OK';
        } else {
            return '有不可销售产品或超出经销商经营范围,请更新报价单' + CheckMap;
        }
    }
    @AuraEnabled
    WebService static String updReg(String  oppid) {
        List<OpportunityLineItem> updList = new List<OpportunityLineItem>();
        List<OpportunityLineItem> OppItemList = [select id, Id__c, Register_alleffective__c,
                                                        PricebookEntry.Product2.RegisterNo_ALL__c
                                                           From OpportunityLineItem
                                                          Where OpportunityId = :oppid];
        for (OpportunityLineItem ol : OppItemList) {
            ol.Register_alleffective__c = ol.PricebookEntry.Product2.RegisterNo_ALL__c;
            updList.add(ol);
        }
        if (updList.size() > 0)  update updList;
        return 'OK';
    }
    //SWAG-CG88AG【委托】提出价格申请是在协议有效期内,允许WIN fy start
    WebService static Boolean judgeIsAssistantAppliedOutTime(String  Quoteid) {
        List<PromotionSales__c> PromotionSalesList = [select id,IsAssistantAppliedOutTime__c from PromotionSales__c where Quote__r.Quote_No__c =:Quoteid];
        for(PromotionSales__c pro : PromotionSalesList){
            if(pro.IsAssistantAppliedOutTime__c){
                return false;
            }
        }
        return true;
    }
    //SWAG-CG88AG【委托】提出价格申请是在协议有效期内,允许WIN fy end
    //贸易合规 20230307 you start
    WebService static Boolean accSendEmail(String  AccDealerBlacklist,String accname,String angency1,String angency2,String ownerids,String ddid,String oppid) {
      //发送邮件
        List<Messaging.SingleEmailMessage> sendMails = new List<Messaging.SingleEmailMessage>();
        List<String>  MailsList = new List<String>();
        List<String> userIdList = new List<String>();
        if(String.isNotBlank(ownerids)){
            userIdList.add(ownerids);
        }
        if(String.isNotBlank(ddid)){
            userIdList.add(ddid);
        }
         //询价所有人,产品担当,发邮件
        List<User> UsrList = [SELECT email FROM user WHERE id in :userIdList];
        //获取各个用户的email
        for (User u : UsrList){
            MailsList.add(u.email);
        }
        MailsList.add('youchang@prec-tech.com');
        system.debug('111===:'+MailsList);
        if (MailsList!=null&&MailsList.size()>0){
            String title = '';
            String body = '';
            title = ' 新建询价医院/经销商涉及黑名单';
            if(AccDealerBlacklist=='123'){
                body += '黑名单的客户为:' + accname+ '<br/>';
                body += '黑名单的经销商1为:' + angency1+ '<br/>';
                body += '黑名单的经销商2为:' + angency2+ '<br/>';
            }else if(AccDealerBlacklist=='12'){
                body += '黑名单的客户为:' + accname+ '<br/>';
                body += '黑名单的经销商1为:' + angency1+ '<br/>';
            }else if(AccDealerBlacklist=='23'){
                body += '黑名单的经销商1为:' + angency1+ '<br/>';
                body += '黑名单的经销商2为:' + angency2+ '<br/>';
            }else if(AccDealerBlacklist=='13'){
                body += '黑名单的客户为:' + accname+ '<br/>';
                body += '黑名单的经销商2为:' + angency2+ '<br/>';
            }else if(AccDealerBlacklist=='1'){
                body += '黑名单的客户为:' + accname+ '<br/>';
            }else if(AccDealerBlacklist=='2'){
                body += '黑名单的经销商1为:' + angency2+ '<br/>';
            }else if(AccDealerBlacklist=='3'){
                body += '黑名单的经销商2为:' + angency2+ '<br/>';
            }
            body += '<a href="' + System.Label.Environment_Url + oppid + '">'
                    + System.Label.Environment_Url+ oppid +'</a><br/>';
            body += '谢谢!';
            Messaging.SingleEmailMessage messageNEW = new Messaging.SingleEmailMessage();
            messageNEW.setSubject(title);
            messageNEW.setHtmlBody(body);
            messageNEW.setCharset('UTF-8');
            messageNEW.setToAddresses(MailsList);
            //List<String> toCcMailsList = new List<String>();
            //toCcMailsList.add('youchang@prec-tech.com');
            //messageNEW.setCcAddresses(toCcMailsList);
            sendMails.add(messageNEW);
        }
        boolean rs = true;
        if (sendMails.size() > 0) {
            Messaging.Email[] allMails = new Messaging.Email[]{};
            for(Integer j = 0; j < sendMails.size(); j++) {
                allMails.add(sendMails.get(j));
            }
            system.debug('222===:'+allMails);
            Messaging.SendEmailResult[] results = Messaging.sendEmail(allMails);
            System.debug('results 结果 :'+results);
            for (Integer i = 0; i < results.size(); i++) {
                if (results[i].success == false) {
                    system.debug('=====send mail error:' + results[i].errors[0].message);
                    rs = false;
                }
            }
        }
        return rs;
    }
    //贸易合规 20230307 you end
}
force-app/main/default/classes/OpportunityWebService.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>36.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/QISReportController.cls
@@ -350,16 +350,482 @@
        }
         return re;
    }
    //OCSM不要报告
    @AuraEnabled
    public static InitData initForlexOCSMNoToReportLightingButton (String recordId){
        InitData res = new initData();
        try{
            QIS_Report__c report = [SELECT  id ,OCSMAdministrativeReportNumber__c,OCSMAdministrativeReportDate__c,Aware_date__c FROM QIS_Report__c WHERE Id = :recordId LIMIT 1];
            res.Id = report.Id;
            res.oCSMAdministrativeReportNumber = report.OCSMAdministrativeReportNumber__c;
            res.oCSMAdministrativeReportDate = report.OCSMAdministrativeReportDate__c;
            res.Awaredate = report.Aware_date__c;
            System.debug(LoggingLevel.INFO, '*** res: ' + res);
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
        }
        return res;
    }
    @AuraEnabled
    public static String updateQisForlexOCSMNoToReportLighting (String recordId){
        String re = '成功';
        QIS_Report__c report = [SELECT  id FROM QIS_Report__c WHERE Id = :recordId LIMIT 1];
        try{
                QIS_Report__c rac  = new QIS_Report__c();
                rac.id = recordId;
                rac.OCSMAdministrativeReportStatus__c = '无需报告';
                update rac;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            re = e.getMessage();
        }
         return re;
    }
    //OCSM要报告
    @AuraEnabled
    public static InitData initForlexOCSMToReportLightingButton (String recordId){
        InitData res = new initData();
        try{
            QIS_Report__c report = [SELECT  id ,OCSMAdministrativeReportStatus__c,Aware_date__c FROM QIS_Report__c WHERE Id = :recordId LIMIT 1];
            res.Id = report.Id;
            res.oCSMAdministrativeReportStatus = report.OCSMAdministrativeReportStatus__c;
            res.Awaredate = report.Aware_date__c;
            System.debug(LoggingLevel.INFO, '*** res: ' + res);
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
        }
        return res;
    }
    @AuraEnabled
    public static String updateQisForlexOCSMToReportLighting (String recordId){
        String re = '成功';
        QIS_Report__c report = [SELECT  id FROM QIS_Report__c WHERE Id = :recordId LIMIT 1];
        try{
                QIS_Report__c rac  = new QIS_Report__c();
                rac.id = recordId;
                rac.OCSMAdministrativeReportStatus__c  = '待报告';
                update rac;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            re = e.getMessage();
        }
         return re;
    }
    //发送QIS到SPO
    @AuraEnabled
    public static InitData initForlexSendQISButton (String recordId){
        InitData res = new initData();
        ID myUserID = UserInfo.getUserId();
        User userinfo = [SELECT id,Profile.name FROM User WHERE Id = :myUserID LIMIT 1];
        try{
            QIS_Report__c report = [SELECT  id ,RecordTypeId,IsSendQIS__c FROM QIS_Report__c WHERE Id = :recordId LIMIT 1];
            RecordType rec = [SELECT id,name FROM RecordType where  Id = :report.RecordTypeId];
            res.Id = report.Id;
            res.qisRecordTypeId = report.RecordTypeId;
            res.qisRecordName = rec.name;
            res.profileName = userinfo.Profile.name;
            res.IsSendQIS = report.IsSendQIS__c;
            System.debug(LoggingLevel.INFO, '*** res: ' + res);
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
        }
        return res;
    }
    @AuraEnabled
    public static String updateQisForSendQIS (String recordId){
        String re = '成功';
        QIS_Report__c report = [SELECT Id,Name,IsSendQIS__c FROM QIS_Report__c WHERE Id = :recordId LIMIT 1];
        if(report == null ){
            return '没有QIS:' + recordId + '的数据。';
        }
        Savepoint sp = Database.setSavepoint();
        try{
                QIS_Report__c rac  = new QIS_Report__c();
                rac.id = recordId;
                rac.IsSendQIS__c = true;
                update rac;
        }catch(Exception e){
            Database.rollback(sp);
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            re = e.getMessage();
        }
         return re;
    }
    // OCSM服务本部收到实物
    @AuraEnabled
    public static InitData initForlexRCRecievedButton (String recordId){
        InitData res = new initData();
        ID myUserID = UserInfo.getUserId();
        User userinfo = [SELECT id,Profile.name FROM User WHERE Id = :myUserID LIMIT 1];
        try{
            QIS_Report__c report = [SELECT  id ,isAE_Profile__c,QIS_Status__c,isPAE_Profile__c,is_CNBuy__c FROM QIS_Report__c WHERE Id = :recordId LIMIT 1];
            res.Id = report.Id;
            res.isAEProfile = report.isAE_Profile__c;
            res.isPAEProfile = report.isPAE_Profile__c;
            res.QIStatus = report.QIS_Status__c;
            res.isCNBuy = report.is_CNBuy__c;
            System.debug(LoggingLevel.INFO, '*** res: ' + res);
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
        }
        return res;
    }
    @AuraEnabled
    public static String updateQisForRCRecieved (String recordId){
        String re = '成功';
        ID myUserID = UserInfo.getUserId();
        User userinfo = [SELECT id,Alias,BuchangApprovalManagerSales__c,JingliApprovalManager__c, BuchangApprovalManager__c, ZongjianApprovalManager__c FROM User WHERE Id = :myUserID LIMIT 1];
        try{
                QIS_Report__c rac  = new QIS_Report__c();
                rac.id = recordId;
                rac.QIS_Status__c = 'RC检测中';
                rac.OCM_RC_RecievedDate__c = Date.today();
                rac.RC__c = myUserID;
                rac.RC_Receive_staff__c = userinfo.Alias;
                if (userinfo != null  && userinfo.BuchangApprovalManagerSales__c!= null) {
                    rac.RC_Manager__c = userinfo.BuchangApprovalManagerSales__c;
                } else {
                    rac.RC_Manager__c = myUserID;
                }
                update rac;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            re = e.getMessage();
        }
         return re;
    }
    // QIS市场部意见
    @AuraEnabled
    public static InitData initForlexQISSCButton (String recordId){
        InitData res = new initData();
        ID myUserID = UserInfo.getUserId();
        User userinfo = [SELECT id,Profile.name FROM User WHERE Id = :myUserID LIMIT 1];
        try{
            QIS_Report__c report = [SELECT  id,name,QIS_SC_Report__c,QIS_SC_Id__c,next_action__c,QIS_Market_Category__c FROM QIS_Report__c WHERE Id = :recordId LIMIT 1];
            res.Id = report.Id;
            res.name = report.name;
            res.profileName = userinfo.Profile.name;
            res.qISSCId = report.QIS_SC_Id__c;
            res.qISSCReport = report.QIS_SC_Report__c;
            res.nextaction = report.next_action__c;
            res.qISMarketCategory = report.QIS_Market_Category__c;
            System.debug(LoggingLevel.INFO, '*** res: ' + res);
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
        }
        return res;
    }
     // 新建修理
    @AuraEnabled
    public static InitData initForlexCreateRepairButton (String recordId){
        InitData res = new initData();
        ID myUserID = UserInfo.getUserId();
        User userinfo = [SELECT id,RepairSalesPoint_Province_China__c FROM User WHERE Id = :myUserID LIMIT 1];
        QIS_Report__c report = [SELECT  id,Owner.name,FailureQInHospital__c,InformationFrom__c,Delay15Min__c,
                                AfterFailureInformation__c,Set_usage_product__c,BreakORFallOff__c,Opera_Name__c,
                                Which_Project__c,Report_For_Goz__c,Relation_With_The_Problem__c,Damage_For_Doc_Or_Pat__c,
                                Trable_occur_daY_collect__c,source_for_repair__c,Faliour_date__c,OwnerId,nonyushohin__c,nonyushohin__r.name,
                                Hospital_Department__c,Hospital_Department__r.name,Department_Class__c,Department_Class__r.name,Hospital__c,Hospital__r.name,name,Source_OnCall__c,Source_OnCall__r.name,
                                failuer_situation__c,Comment__c,Is_Used_For_The_Opera__c,RecordType_ID__c,
                                OCM_judgement__c,next_action__c,Special_follow__c FROM QIS_Report__c WHERE Id = :recordId LIMIT 1];
        Account acc = [SELECT id,ParentId,Parent.RecordTypeId,
                        Parent.Parent.FSE_GI_Main_Leader__c,Parent.Parent.FSE_SP_Main_Leader__c,
                        Parent.Parent.FSE_GI_Main_Leader__r.Work_Location__c,
                        Parent.Parent.FSE_SP_Main_Leader__r.Work_Location__c FROM Account WHERE id = :report.Hospital_Department__c limit 1];
        try{
            res.Id = report.Id;
            res.qisRecordTypeId = report.RecordType_ID__c;
            res.oCMjudgement = report.OCM_judgement__c;
            res.nextaction = report.next_action__c;
            res.comment = report.Comment__c;
            res.sourceOnCall = report.Source_OnCall__c;
            res.sourceOnCallname = report.Source_OnCall__r.name;
            res.name = report.name;
            res.hospitalId = report.Hospital__c;
            res.hospitalname = report.Hospital__r.name;
            res.departmentClassId = report.Department_Class__c;
            res.departmentClassname = report.Department_Class__r.name;
            res.hospitalDepartment = report.Hospital_Department__c;
            res.hospitalDepartmentname = report.Hospital_Department__r.name;
            res.nonyushohinId = report.nonyushohin__c;
            res.nonyushohinIdname = report.nonyushohin__r.name;
            res.ownerId = report.OwnerId;
            res.faliourdate = report.Faliour_date__c;
            res.sourceforrepair = report.source_for_repair__c;
            res.repairSalesPointProvinceChina = userinfo.RepairSalesPoint_Province_China__c;
            res.trableoccurdaYcollect = report.Trable_occur_daY_collect__c;
            res.damageForDocOrPat = report.Damage_For_Doc_Or_Pat__c;
            res.relationWithTheProblem = report.Relation_With_The_Problem__c;
            res.reportForGoz = report.Report_For_Goz__c;
            res.whichProject = report.Which_Project__c;
            res.operaName = report.Opera_Name__c;
            res.breakORFallOff = report.BreakORFallOff__c;
            res.setusageproduct = report.Set_usage_product__c;
            res.afterFailureInformation = report.AfterFailureInformation__c;
            res.delay15Min = report.Delay15Min__c;
            res.informationFrom = report.InformationFrom__c;
            res.failureQInHospital = report.FailureQInHospital__c;
            res.ownername = report.Owner.name;
            res.failuerSituation = report.failuer_situation__c;
            res.isUsedForTheOpera = report.Is_Used_For_The_Opera__c;
            res.specialfollow = report.Special_follow__c;
            res.accParentId = acc.ParentId;
            res.accParentRecordTypeId = acc.Parent.RecordTypeId;
            res.accParentParentFSEGIMainLeader = acc.Parent.Parent.FSE_GI_Main_Leader__c;
            res.accParentParentFSEGIMainLeaderWorkLocation = acc.Parent.Parent.FSE_GI_Main_Leader__r.Work_Location__c;
            res.accParentParentFSESPMainLeader = acc.Parent.Parent.FSE_SP_Main_Leader__c;
            res.accParentParentFSESPMainLeaderWorkLocation = acc.Parent.Parent.FSE_SP_Main_Leader__r.Work_Location__c;
            System.debug(LoggingLevel.INFO, '*** res: ' + res);
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
        }
        return res;
    }
     // PDF(QIS申请书)
    @AuraEnabled
    public static InitData initForlexPDFQISrequestButton (String recordId){
        InitData res = new initData();
        try{
            QIS_Report__c report = [SELECT  id FROM QIS_Report__c WHERE Id = :recordId LIMIT 1];
            res.Id = report.Id;
            System.debug(LoggingLevel.INFO, '*** res: ' + res);
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
        }
        return res;
    }
    // OCSM服务本部检测完毕
    @AuraEnabled
    public static InitData initForlexRCinspectioncompletedateButton (String recordId){
        InitData res = new initData();
        ID myUserID = UserInfo.getUserId();
        User userinfo = [SELECT id,Profile.name FROM User WHERE Id = :myUserID LIMIT 1];
        try{
            QIS_Report__c report = [SELECT  id ,RC_inspection_date__c,QIS_Status__c FROM QIS_Report__c WHERE Id = :recordId LIMIT 1];
            res.Id = report.Id;
            res.rCinspectionDate = report.RC_inspection_date__c;
            res.QIStatus = report.QIS_Status__c;
            System.debug(LoggingLevel.INFO, '*** res: ' + res);
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
        }
        return res;
    }
    @AuraEnabled
    public static String updateQisForRCinspectioncompletedate (String recordId){
        String re = '成功';
        ID myUserID = UserInfo.getUserId();
        User userinfo = [SELECT id,Alias FROM User WHERE Id = :myUserID LIMIT 1];
        try{
                QIS_Report__c rac  = new QIS_Report__c();
                rac.id = recordId;
                rac.RC_inspection_date__c  = Date.today();
                rac.RC__c = myUserID;
                rac.RC_Inspection_staff__c  = userinfo.Alias;
                update rac;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            re = e.getMessage();
        }
         return re;
    }
    // OSH检查受理
    @AuraEnabled
    public static InitData initForlexOSHInspectButton (String recordId){
        InitData res = new initData();
        ID myUserID = UserInfo.getUserId();
        User userinfo = [SELECT id,Profile.name FROM User WHERE Id = :myUserID LIMIT 1];
        try{
            QIS_Report__c report = [SELECT  id ,OSHInspectionDate__c,QIS_Status__c FROM QIS_Report__c WHERE Id = :recordId LIMIT 1];
            res.Id = report.Id;
            res.oSHInspectionDate = report.OSHInspectionDate__c;
            res.QIStatus = report.QIS_Status__c;
            System.debug(LoggingLevel.INFO, '*** res: ' + res);
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
        }
        return res;
    }
    @AuraEnabled
    public static String updateQisForlexOSHInspect (String recordId){
        String re = '成功';
        try{
                QIS_Report__c rac  = new QIS_Report__c();
                rac.id = recordId;
                rac.OSHInspectionDate__c   = Date.today();
                update rac;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            re = e.getMessage();
        }
         return re;
    }
     //     复制1
   @AuraEnabled
    public static InitData initForlexcopyQISButton (String recordId){
        InitData res = new initData();
        try{
            QIS_Report__c report = [SELECT  id,Name,QIS_Status__c FROM QIS_Report__c WHERE Id = :recordId LIMIT 1];
            res.Id = report.Id;
            res.name = report.Name;
            res.qIStatus = report.QIS_Status__c;
            System.debug(LoggingLevel.INFO, '*** res: ' + res);
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
        }
        return res;
    }
     // OCSM无实物送达
    @AuraEnabled
    public static InitData initForlexOCSMNogoodsButton (String recordId){
        InitData res = new initData();
        ID myUserID = UserInfo.getUserId();
        User userinfo = [SELECT id,Profile.name FROM User WHERE Id = :myUserID LIMIT 1];
        try{
            QIS_Report__c report = [SELECT  id ,QIS_Status__c,isAE_Profile__c,is_CNBuy__c FROM QIS_Report__c WHERE Id = :recordId LIMIT 1];
            res.Id = report.Id;
            res.isAEProfile = report.isAE_Profile__c;
            res.QIStatus = report.QIS_Status__c;
            res.isCNBuy = report.is_CNBuy__c;
            System.debug(LoggingLevel.INFO, '*** res: ' + res);
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
        }
        return res;
    }
    @AuraEnabled
    public static String updatelexOCSMNogoods (String recordId){
        String re = '成功';
        ID myUserID = UserInfo.getUserId();
        User userinfo = [SELECT Id,Alias__c,Alias, BuchangApprovalManagerSales__c,JingliApprovalManager__c, BuchangApprovalManager__c, ZongjianApprovalManager__c FROM User WHERE Id = :myUserID LIMIT 1];
        try{
                QIS_Report__c rac  = new QIS_Report__c();
                rac.id = recordId;
                rac.QIS_Status__c   = 'RC检测中';
                rac.OCM_RC_RecievedDate__c    = Date.today();
                rac.RC__c = myUserID;
                if (userinfo != null) {
                    rac.RC_Receive_staff__c   = userinfo.Alias;
                }
                if (userinfo != null && userinfo.BuchangApprovalManagerSales__c !=null) {
                    rac.RC_Manager__c  = userinfo.BuchangApprovalManagerSales__c;
                }else{
                    rac.RC_Manager__c = myUserID;
                }
                rac.CDS_date__c    = Date.today();
                rac.RC_CDS_staff__c   = userinfo.Alias__c;
                rac.OCSM_Nogoods__c   = true;
                update rac;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            re = e.getMessage();
        }
         return re;
    }
    public class InitData{
        @AuraEnabled
        public String Id;
        @AuraEnabled
        public String qISSCReport;
        @AuraEnabled
        public String name;
        @AuraEnabled
        public String qISSCId;
        @AuraEnabled
        public String accParentId;
        @AuraEnabled
        public String accParentRecordTypeId;
        @AuraEnabled
        public String accParentParentFSEGIMainLeader;
        @AuraEnabled
        public String accParentParentFSEGIMainLeaderWorkLocation;
        @AuraEnabled
        public String accParentParentFSESPMainLeader;
        @AuraEnabled
        public String accParentParentFSESPMainLeaderWorkLocation;
        @AuraEnabled
        public String oCMjudgement;
        @AuraEnabled
        public String comment;
        @AuraEnabled
        public String isUsedForTheOpera;
        @AuraEnabled
        public String failuerSituation;
        @AuraEnabled
        public String sourceOnCall;
        @AuraEnabled
        public String sourceOnCallname;
        @AuraEnabled
        public String hospitalId;
        @AuraEnabled
        public String hospitalname;
        @AuraEnabled
        public String departmentClassId;
        @AuraEnabled
        public String departmentClassname;
        @AuraEnabled
        public String hospitalDepartment;
        @AuraEnabled
        public String hospitalDepartmentname;
        @AuraEnabled
        public String nonyushohinId;
        @AuraEnabled
        public String nonyushohinIdname;
        @AuraEnabled
        public String sourceforrepair;
        @AuraEnabled
        public String repairSalesPointProvinceChina;
        @AuraEnabled
        public String damageForDocOrPat;
        @AuraEnabled
        public String relationWithTheProblem;
        @AuraEnabled
        public String reportForGoz;
        @AuraEnabled
        public String whichProject;
        @AuraEnabled
        public String operaName;
        @AuraEnabled
        public String breakORFallOff;
        @AuraEnabled
        public String setusageproduct;
        @AuraEnabled
        public String afterFailureInformation;
        @AuraEnabled
        public String delay15Min;
        @AuraEnabled
        public String informationFrom;
        @AuraEnabled
        public String failureQInHospital;
        @AuraEnabled
        public String ownerId;
        @AuraEnabled
        public String ownername;
        @AuraEnabled
        public String qisRecordTypeId;
        @AuraEnabled
        public String qisRecordName;
        @AuraEnabled
        public String nextaction;
        @AuraEnabled
        public String qISMarketCategory;
        @AuraEnabled
        public String profileName;
        @AuraEnabled
@@ -393,6 +859,12 @@
        @AuraEnabled
        public Date qISInstallDate;
        @AuraEnabled
        public Date oSHInspectionDate;
        @AuraEnabled
        public Date faliourdate;
        @AuraEnabled
        public Date trableoccurdaYcollect;
        @AuraEnabled
        public Date cdsdate;
        @AuraEnabled
        public Date awaredate;
@@ -404,6 +876,9 @@
        public Boolean isaohuiproduct;
        @AuraEnabled
        public Boolean isSendQIS;
        @AuraEnabled
        public Boolean specialfollow;
    }
}
force-app/main/default/classes/RentalApplyControllerLWT.cls
New file
@@ -0,0 +1,290 @@
public with sharing class RentalApplyControllerLWT {
    public RentalApplyControllerLWT() {
    }
    @AuraEnabled
    public static Rental_Apply__c initFromCancelSubmitButton(String recordId){
        InitData res = new InitData();
        try{
            Rental_Apply__c report=[select
             Status__c,Yi_loaner_arranged__c,Id,RA_Status__c,
            demo_purpose2__c,Follow_UP_Opp__c,Statu_Achievements__c,Statu_Achievements_ID__c,
            Request_shipping_day__c,Demo_purpose1__c,Repair__c,RecordTypeId,SupplementCreated__c,
            OPDPlan__c,Campaign__c,QIS_number__c,OwnerId,
            // QIS_numberId__c,CampaignId__c,applyUserId__c,
            Re_repair__c,
            QIS_ID_Line__c,
            applyUser__c
             from Rental_Apply__c where Id= :recordId];
            return report;
            // res.StatusC=report.Status__c;
            // res.Id=report.Id;
            // res.YiLoanerArrangedC=report.Yi_loaner_arranged__c;
            // res.RAStatusC=report.RA_Status__c;
            // res.DemoPurpose2C=report.demo_purpose2__c;
            // res.FollowUPOppC=report.Follow_UP_Opp__c;
            // res.StatuAchievementsC=report.Statu_Achievements__c;
            // res.StatuAchievementsIDC=report.Statu_Achievements_ID__c;
            // res.RequestShippingDayC=report.Request_shipping_day__c;
            // res.DemoPurpose1C=report.Demo_purpose1__c;
            // res.RepairC=report.Repair__c;
            // res.RecordTypeId=report.RecordTypeId;
            // res.SupplementCreatedC=report.SupplementCreated__c;
            // res.OPDPlanC=report.OPDPlan__c;
            // res.CampaignC=report.Campaign__c;
            // res.QISNumberC=report.QIS_number__c;
            // res.QISNumberIdc=report.QIS_numberId__c;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static list<Rental_Apply_Equipment_Set_Detail__c> selectRentalApplyEquipmentSetDetailByRacId(String recordId){
        InitData res = new InitData();
        try{
            list<Rental_Apply_Equipment_Set_Detail__c> report=[select
            Id, Fixture_Model_No_F__c, Product_Status_Flag_F__c
            from Rental_Apply_Equipment_Set_Detail__c where Rental_Apply__c = :recordId];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static list<QIS_Report__c> selectQISReportById(String recordId){
        InitData res = new InitData();
        try{
            list<QIS_Report__c> report=[select
            Id, nonyushohin__r.Product2.Fixture_Model_No_T__c
            from QIS_Report__c
            where id = :recordId
            ];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static list<Repair__c> selectRepairById(String recordId){
        InitData res = new InitData();
        try{
            list<Repair__c> report=[select Id, Repair_Rank__c, DW_Sign_Txt__c, FSE_ApplyForRepair_Day__c, Delivered_Product__r.Product2.Fixture_Model_No_T__c
                 , ReRepairObject_F__c,Status1__c,Agreed_Date__c,Repair_Estimated_date_formula__c,Repair_Ordered_Date__c
                 , IfCheckFixture__c
                 , Repair_Final_Inspection_Date__c,Repair_Shipped_Date__c,Number_of_EffectiveContract__c, NewProductGuaranteeObject__c, Delivered_Product__r.Product2.Asset_Model_No__c
                 from Repair__c where id = :recordId
            ];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static list<Campaign> selectCampaignById(String recordId){
        InitData res = new InitData();
        try{
            list<Campaign> report=[select
            Status, Rental_Apply_Flag__c ,IF_Approved__c,Meeting_Approved_No__c,Approved_Status__c
            from Campaign where id =:recordId
            ];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static list<Rental_Apply_Equipment_Set__c> selectRentalApplyEquipmentSetByRacId(String recordId){
        InitData res = new InitData();
        try{
            list<Rental_Apply_Equipment_Set__c> report=[select Id
                from Rental_Apply_Equipment_Set__c
                where RetalFSetDetail_Cnt__c = 0 AND Rental_Apply__c = :recordId
            ];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static list<Rental_Apply__c> selectRentalApplyById(String recordId){
        InitData res = new InitData();
        try{
            list<Rental_Apply__c> report=[select
            id,OPDPlan__c,OPDPlan__r.SalesManager_Txt__c,OPDPlan__r.BuchangApprovalManagerSales_Txt__c
            from Rental_Apply__c where id = :recordId
            ];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static list<User> selectUserById(String recordId){
        InitData res = new InitData();
        try{
            list<User> report=[select
            id,JingliEquipmentManager__c,JingliEquipmentManager__r.Name,Buzhang_Equipment_Manager__c,
            Buzhang_Equipment_Manager__r.Name
            from User where id = :recordId
            ];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static list<QIS_report__c> selectQISreportById2(String recordId){
        InitData res = new InitData();
        try{
            list<QIS_report__c> report=[select id,next_action__c
            from QIS_report__c where id =:recordId
            ];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static String getUserId(){
        return UserInfo.getUserId();
    }
    @AuraEnabled
    public static String getProfileId(){
        return UserInfo.getProfileId();
    }
    @AuraEnabled
    public static String setSObjectShare(String sobjectName, String rowCause, String parentId, List<String> userAccess, String ownerId) {
        try {
            List<SObject> sObjList = new List<SObject>();
            for (String ua : userAccess) {
                String userid = ua.split('_')[0];
                String access = ua.split('_')[1];
                SObject sObj = Schema.getGlobalDescribe().get(sobjectName).newSObject();
                if (String.isBlank(userid) == false && userid.substring(0, 15) != ownerId.substring(0, 15)) {
                    sObj.put('RowCause', rowCause);
                    sObj.put('ParentId', parentId);
                    sObj.put('UserOrGroupId', userid);
                    sObj.put('AccessLevel', access);
                    sObjList.add(sObj);
                }
            }
            if (sObjList.size() > 0) insert sObjList;
            return 'OK';
        } catch (Exception e) {
            return e.getMessage();
        }
    }
    @AuraEnabled
    public static UpdateResult updateRentalApplyC(
        String recordId,
        String SalesManagerSubmitC,
        String StatusC,
        String OPDManagerApproverC,
        String BuchangApprovalManagerSalesSubmitC,
        String OPDBuchangApproverC
    ) {
        UpdateResult result = new UpdateResult();
        result.recordId = recordId;
        try{
            // 更新记录并获取结果
            if(recordId==null) return null;
            Rental_Apply__c rac = new Rental_Apply__c( id=recordId);
            if(SalesManagerSubmitC!=null&& SalesManagerSubmitC != ''){
                rac.SalesManagerSubmit__c=SalesManagerSubmitC;
            }
            if(StatusC!=null&&StatusC!=''){
                rac.Status__c=StatusC;
            }
            if(OPDManagerApproverC!=null&&OPDManagerApproverC!=''){
                rac.OPDManagerApprover__c=OPDManagerApproverC;
            }
            if(BuchangApprovalManagerSalesSubmitC!=null&&BuchangApprovalManagerSalesSubmitC!=''){
                rac.BuchangApprovalManagerSalesSubmit__c=BuchangApprovalManagerSalesSubmitC;
            }
            if(OPDBuchangApproverC!=null&&OPDBuchangApproverC!=''){
                rac.OPDBuchangApprover__c=OPDBuchangApproverC;
            }
            if(rac.id==null)return null;
            update rac;
            result.success = true;
            result.errors = new List<String>();
            return result;
        }catch(Exception e){
            result.success = false;
            result.errors = new List<String>();
            result.errors.add(e.getMessage());
            System.debug(LoggingLevel.INFO,'Rental_Apply__c update Error : ' + e);
        }
        return result;
    }
    public class UpdateResult {
        @AuraEnabled public String recordId {get;set;}
        @AuraEnabled public Boolean success {get;set;}
        @AuraEnabled public List<String> errors {get;set;}
    }
    public class InitData{
        @AuraEnabled
        public String StatusC;
        @AuraEnabled
        public Decimal YiLoanerArrangedC;
        @AuraEnabled
        public String Id;
        @AuraEnabled
        public String RAStatusC;
        @AuraEnabled
        public String DemoPurpose2C;
        @AuraEnabled
        public String FollowUPOppC;
        @AuraEnabled
        public String StatuAchievementsC;
        @AuraEnabled
        public String StatuAchievementsIDC;
        @AuraEnabled
        public Date RequestShippingDayC;
        @AuraEnabled
        public String DemoPurpose1C;
        @AuraEnabled
        public String RepairC;
        @AuraEnabled
        public String RecordTypeId;
        @AuraEnabled
        public Boolean SupplementCreatedC;
        @AuraEnabled
        public String OPDPlanC;
        @AuraEnabled
        public String CampaignC;
        @AuraEnabled
        public String QISNumberC;
        @AuraEnabled
        public String QISNumberIdc;
    }
}
force-app/main/default/classes/RentalApplyControllerLWT.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>51.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/RentalApplyESetRefreshStatusController.cls
New file
@@ -0,0 +1,100 @@
public with sharing class RentalApplyESetRefreshStatusController {
    public RentalApplyESetRefreshStatusController() {
    }
    @AuraEnabled
    public static String eSetRefreshStatus(String raeSetId) {
        return eSetRefreshStatusBatch(new List<String> {raeSetId});
    }
    public static String eSetRefreshStatusBatch(List<String> raeSetIds) {
        List<Rental_Apply_Equipment_Set__c> updateList1 = new List<Rental_Apply_Equipment_Set__c>();
        if (!raeSetIds.isEmpty()) {
            for (Rental_Apply_Equipment_Set__c raes: [
                    select Id,Repair_Status1__c,Repair_Status_Text__c,Final_reply_day__c,Final_reply_day_text__c,
                            Received_Confirm_NG_Not_Return__c,Received_Confirm_NG_Not_Return_Text__c,
                            Received_Confirm_Status_Text__c, Received_Confirm_Status_F__c
                              , NG_Final_reply_day_Text__c
                              , NG_Final_reply_day_F__c
                              , Yizhouweixiu_Final_reply_day_Text__c
                              , Yizhouweixiu_Final_reply_day_F__c
                              , Extend_Final_reply_day_Text__c
                              , Extend_Final_reply_day_F__c
                              , QIS_Final_reply_day_Text__c
                              , QIS_Final_reply_day_F__c
                              , Repair_cancel_Final_reply_day_Text__c
                              , Repair_cancel_Final_reply_day_F__c
                              , Return_to_office_Final_reply_day_Text__c
                              , Return_to_office_Final_reply_day_F__c
                              , Repair_delete_Final_reply_day_Text__c
                              , Repair_delete_Final_reply_day_F__c
                              , Yigoudaihuo_Final_reply_day_Text__c
                              , Yigoudaihuo_Final_reply_day_F__c
                              , Guzhangpaicha_Final_reply_day_Text__c
                              , Guzhangpaicha_Final_reply_day_F__c
                              , Repair_Agreed_Quotation_Text__c
                              , Repair_Agreed_Quotation_F__c
                              , Return_to_office_Final_reply_day_U_RC__c
                              , Return_to_office_Final_reply_day_U_RC_F__c
                              , Extend_Date__c
                              , Extend_Date_F__c
                              , Received_NG_ReAssign_Text__c
                              , Received_NG_ReAssign__c
                        //【FY23大及巨大课题】长假备品借用延期开发 2022/12/27 start xxf
                              , Final_reply_day_Holiday_backup__c
                              , NG_Final_reply_day_F_Holiday_backup__c
                              , NG_Final_reply_day_Text_Holiday_backup__c
                              , Yizhouweixiu_Final_reply_day_F_Holiday__c
                              , Yizhouweixiu_Final_reply_day_TextHoliday__c
                              , Extend_Final_reply_day_F_Holiday_backup__c
                              , Extend_Final_reply_day_Text_Holiday_back__c
                              , QIS_Final_reply_day_F_Holiday_backup__c
                              , QIS_Final_reply_day_Text_Holiday_backup__c
                              , Repair_cancel_Final_reply_day_F_Holiday__c
                              , Repair_cancel_Final_reply_day_Text_Holid__c
                              , Return_to_office_Final_reply_day_F_Ho__c
                              , Return_to_office_Final_reply_day_Text_Ho__c
                              , Repair_delete_Final_reply_day_F_Holiday__c
                              , Repair_delete_Final_reply_day_Text_Ho__c
                              , Yigoudaihuo_Final_reply_day_F_Holiday__c
                              , Yigoudaihuo_Final_reply_day_Text_Holiday__c
                              , FGuzhangpaicha_Final_reply_day_F_Holiday__c
                              , Guzhangpaicha_Final_reply_day_Text_Holid__c
                              , Return_to_office_Final_reply_day_U_RC_Ho__c
                              , Return_to_office_Final_reply_day_U_RC_FH__c
                        //【FY23大及巨大课题】长假备品借用延期开发 2022/12/27 end xxf
                      from Rental_Apply_Equipment_Set__c
                     where Id IN :raeSetIds
            ]) {
                Rental_Apply_Equipment_Set__c upd = UpdateRentalApplyEquipmentSetBatch.setRAES(raes);
                if (upd != null) {
                    updateList1.add(upd);
                }
            }
        }
//bp2
//        List<Equipment_Set_Detail__c> esdList = [
//                select Id,Asset_condition__c,Asset_condition_Text__c,
//                       Serial_Lot__c,Serial_Lot_text__c,
//                       Asset__r.Loaner_accsessary__c, Loaner_accsessary_text__c,
//                       Active_judgement__c,Active_judgement_select__c,Active_judgement_text__c,
//                       Last_Reserve_RAES_Detail_RAES_F__c,Last_Reserve_RAES_Detail_RAES_Id__c,
//                       Equipment_Set_Last_Reserve_RAES_F__c,Equipment_Set_Last_Reserve_RAES_Id__c
//                  from Equipment_Set_Detail__c
//                 where Equipment_Set__c IN :eSetIds];
//        List<Equipment_Set_Detail__c> updateList2 = UpdateRentalApplyEquipmentSetBatch.setESD(esdList);
        Savepoint sp = Database.setSavepoint();
        try {
            if (!updateList1.isEmpty()) update updateList1;
//bp2            if (updateList2.size() > 0) update updateList2;
            return '1';
        } catch (System.Exception e) {
            Database.rollback(sp);
            return e.getMessage();
        }
        // return '1';
    }
}
force-app/main/default/classes/RentalApplyESetRefreshStatusController.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>51.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/RentalApplyWebService.cls
New file
@@ -0,0 +1,2069 @@
global class RentalApplyWebService {
    // TODO please use public okStatus
    public final static Integer okStatus = 99;
    public final static String okStatus2 = '引当済';
//bp2
//    /**
//     * check meisai
//     * @param rentalApplyId            备品借出申请ID
//     * @param rentalApplys             备品借出申请
//     * @param rentalApplyEquipmentSets 备品申请借出历史(备品借出申请 和 备品Set 的Link表)
//     * @param equipmentSetIdList       Equipment_Set__c.id
//     * @param idmap                    Equipment_Set__c.Id => Rental_Apply_Equipment_Set__c.Id
//     * @return 成功: 1、or 错误内容
//     */
//    private static String privateCheck(String rentalApplyId,
//            Map<String, List<List<Rental_Apply__c>>> mRentalApplys,
//            Map<String, List<List<Rental_Apply_Equipment_Set__c>>> mRentalApplyEquipmentSets,
//            Map<String, List<List<Id>>> mEquipmentSetIdList,
//            Map<String, List<Map<Id, Id>>> mIdmap
//    ) {
//        List<Rental_Apply__c> rentalApplys = mRentalApplys.get('rentalApplys')[0];
//        List<Rental_Apply_Equipment_Set__c> rentalApplyEquipmentSets = mRentalApplyEquipmentSets.get('rentalApplyEquipmentSets')[0];
//        List<Id> equipmentSetIdList = mEquipmentSetIdList.get('equipmentSetIdList')[0];
//        Map<Id, Id> idmap = mIdmap.get('idmap')[0];
//        //返回结果,1:成功。
//        String checkRS = '1';
//        //备品借出申请
//        rentalApplys = [select Rental_Apply_Equipment_Set_Cnt__c from Rental_Apply__c where Id = :rentalApplyId];
//        if (rentalApplys.size() == 0) {
//            checkRS = '没有备品借出申请,请确认。';
//            return checkRS;
//        }
//        Rental_Apply__c rentalApply = rentalApplys[0];
//        if (rentalApply.Rental_Apply_Equipment_Set_Cnt__c <= 0) {
//            //返回结果,2:message-没有备品Set,请确认。
//            checkRS = '没有借出备品set一览,请确认。';
//            return checkRS;
//        }
//        //备品申请借出历史
//        equipmentSetIdList = new List<Id>();
//        rentalApplyEquipmentSets = [
//                select Equipment_Set__c,Equipment_Set__r.Active_judgement__c
//                  from Rental_Apply_Equipment_Set__c
//                 where Rental_Apply__c = :rentalApplyId and Cancel_Select__c = false];
//        for (Rental_Apply_Equipment_Set__c rentalApplyEquipmentSet : rentalApplyEquipmentSets) {
//            equipmentSetIdList.add(rentalApplyEquipmentSet.Equipment_Set__c);
//        }
//        // Equipment_Set_Detail__c,空更新 (TODO 今後batchになる!?)
//        List<Equipment_Set_Detail__c> updDetailList = [
//                select id
//                  from Equipment_Set_Detail__c
//                 where Equipment_Set__c in :equipmentSetIdList];
//        update updDetailList;
//        //备品申请借出历史、再取得
//        List<Rental_Apply_Equipment_Set__c> raesList = new List<Rental_Apply_Equipment_Set__c>();
//        equipmentSetIdList = new List<Id>();
//        rentalApplyEquipmentSets = [
//                select Id,Name,Equipment_Set__c,ES_Stock_Status__c,Loaner_name_text__c,Loaner_code_text__c,SerialNumber_text__c,
//                        Salesdepartment_text__c,Salesprovince_text__c,Equipment_Type_text__c,Equipment_Set_Borrowed__c,Product_Class_Bor__c,
//                        Equipment_Set__r.Name,Equipment_Set__r.ES_Status__c,Equipment_Set__r.Active_judgement2__c,
//                        Equipment_Set__r.Last_Reserve_Rental_Apply_Equipment_Set__c,Rental_Start_Date__c,
//                        Equipment_Set__r.Already_Stock_Out__c, Equipment_Set__r.Loaner_name__c,
//                        Equipment_Set__r.Loaner_code__c,Equipment_Set__r.Salesdepartment__c,
//                        Equipment_Set__r.SalesProvince__c,Equipment_Set__r.Equipment_Type__c,Equipment_Set__r.SerialNumber__c,
//                        Equipment_Set__r.Contents_number__c,Equipment_Set__r.Product_category__c
//                  from Rental_Apply_Equipment_Set__c
//                 where Rental_Apply__c = :rentalApplyId and Cancel_Select__c = false];
//        idmap = new Map<Id,Id>();    // Equipment_Set__c.Id => Rental_Apply_Equipment_Set__c.Id
//        for (Rental_Apply_Equipment_Set__c rentalApplyEquipmentSet : rentalApplyEquipmentSets) {
//            if (rentalApplyEquipmentSet.Equipment_Set__r.Last_Reserve_Rental_Apply_Equipment_Set__c != rentalApplyEquipmentSet.Id) {
//                raesList.add(rentalApplyEquipmentSet);
//                equipmentSetIdList.add(rentalApplyEquipmentSet.Equipment_Set__c);
//            }
//        }
//        for (Rental_Apply_Equipment_Set__c rentalApplyEquipmentSet : raesList) {
//            /*
//            if (rentalApplyEquipmentSet.Rental_Start_Date__c <= Date.today()) {
//                checkRS = '借出开始日必须大于今日。借出备品set一览:' + rentalApplyEquipmentSet.Name;
//                return checkRS;
//            }
//            */
//            /*
//            if (rentalApplyEquipmentSet.Equipment_Set__r.Active_judgement2__c != okStatus) {
//                //返回结果,1:message-请确认备品Set状态。
//                checkRS = '备品set ' + rentalApplyEquipmentSet.Equipment_Set__r.Name + ' 的' + Schema.SObjectType.Equipment_Set__c.fields.Asset_Set_status2__c.label + '不是 99.等待预约 ,现在是 ' + rentalApplyEquipmentSet.Equipment_Set__r.Asset_Set_status2__c + ' 请确认';
//                return checkRS;
//            }
//            */
//            //
////bp2            if (rentalApplyEquipmentSet.Equipment_Set__r.Contents_number__c == 0) {
////bp2                checkRS = '备品set ' + rentalApplyEquipmentSet.Equipment_Set__r.Name + ' 没有选择借出的明细,请确认';
////bp2                return checkRS;
////bp2            }
////bp2            if (rentalApplyEquipmentSet.Equipment_Set__r.ES_Status__c != okStatus2) {
////bp2                checkRS = '备品set ' + rentalApplyEquipmentSet.Equipment_Set__r.Name + ' 的' + Schema.SObjectType.Equipment_Set__c.fields.ES_Status__c.label + '不是 ' + okStatus2 + ',现在是 ' + rentalApplyEquipmentSet.Equipment_Set__r.ES_Status__c + ' 请确认';
////bp2                return checkRS;
////bp2            }
////bp2            if (rentalApplyEquipmentSet.Equipment_Set__r.Already_Stock_Out__c == true) {
////bp2                checkRS = '备品set ' + rentalApplyEquipmentSet.Equipment_Set__r.Name + ' 没有上架,请确认';
////bp2                return checkRS;
////bp2            }
////bp2            if (rentalApplyEquipmentSet.ES_Stock_Status__c == '不能出库') {
////bp2                checkRS = '备品set ' + rentalApplyEquipmentSet.Equipment_Set__r.Name + ' 在预约期间外不能出库,请确认';
////bp2                return checkRS;
////bp2            }
//            idmap.put(rentalApplyEquipmentSet.Equipment_Set__c, rentalApplyEquipmentSet.Id);
//        }
//        mRentalApplys.get('rentalApplys')[0] = rentalApplys;
//        mRentalApplyEquipmentSets.get('rentalApplyEquipmentSets')[0] = raesList;
//        mEquipmentSetIdList.get('equipmentSetIdList')[0] = equipmentSetIdList;
//        mIdmap.get('idmap')[0] = idmap;
//        return checkRS;
//    }
//bp2
//    /**
//     *@param  : String 备品借出申请ID
//     *@return : String (成功: 1、or 错误内容)
//     */
//    WebService static String reserveCheck(String rentalApplyId) {
//        //备品借出申请
//        List<Rental_Apply__c> rentalApplys = new List<Rental_Apply__c>();
//        //备品申请借出历史
//        List<Rental_Apply_Equipment_Set__c> rentalApplyEquipmentSets = new List<Rental_Apply_Equipment_Set__c>();
//        List<Id> equipmentSetIdList = new List<Id>();
//        Map<Id, Id> idmap = new Map<Id,Id>();    // Equipment_Set__c.Id => Rental_Apply_Equipment_Set__c.Id
//        Map<String, List<List<Rental_Apply__c>>> mRentalApplys =
//                new Map<String, List<List<Rental_Apply__c>>>{'rentalApplys' => new List<List<Rental_Apply__c>>{rentalApplys}};
//        Map<String, List<List<Rental_Apply_Equipment_Set__c>>> mRentalApplyEquipmentSets =
//                new Map<String, List<List<Rental_Apply_Equipment_Set__c>>>{'rentalApplyEquipmentSets' => new List<List<Rental_Apply_Equipment_Set__c>>{rentalApplyEquipmentSets}};
//        Map<String, List<List<Id>>> mEquipmentSetIdList =
//                new Map<String, List<List<Id>>>{'equipmentSetIdList' => new List<List<Id>>{equipmentSetIdList}};
//        Map<String, List<Map<Id, Id>>> mIdmap =
//                new Map<String, List<Map<Id, Id>>>{'idmap' => new List<Map<Id, Id>>{idmap}};
//        String rt1 = RentalApplyWebService.approvalCheck(rentalApplyId);
//        if (rt1 != '1') {
//            return rt1;
//        }
//        //返回结果,1:成功。
////        return RentalApplyWebService.privateCheck(rentalApplyId, mRentalApplys, mRentalApplyEquipmentSets, mEquipmentSetIdList, mIdmap);
//        String rt2 = RentalApplyWebService.privateCheck(rentalApplyId, mRentalApplys, mRentalApplyEquipmentSets, mEquipmentSetIdList, mIdmap);
//        if (rt2 != '1') {
//            return rt2;
//        }
//        return '1';
//    }
//bp2
//    /**
//     *@param  : String 备品借出申请ID
//     *@return : String (成功: 1、or 错误内容)
//     */
//    WebService static String reserve(String rentalApplyId) {
//        //备品借出申请
//        List<Rental_Apply__c> rentalApplys = new List<Rental_Apply__c>();
//        //备品申请借出历史
//        List<Rental_Apply_Equipment_Set__c> rentalApplyEquipmentSets = new List<Rental_Apply_Equipment_Set__c>();
//        List<Id> equipmentSetIdList = new List<Id>();
//        Map<Id, Id> idmap = new Map<Id,Id>();    // Equipment_Set__c.Id => Rental_Apply_Equipment_Set__c.Id
//        Map<String, List<List<Rental_Apply__c>>> mRentalApplys =
//                new Map<String, List<List<Rental_Apply__c>>>{'rentalApplys' => new List<List<Rental_Apply__c>>{rentalApplys}};
//        Map<String, List<List<Rental_Apply_Equipment_Set__c>>> mRentalApplyEquipmentSets =
//                new Map<String, List<List<Rental_Apply_Equipment_Set__c>>>{'rentalApplyEquipmentSets' => new List<List<Rental_Apply_Equipment_Set__c>>{rentalApplyEquipmentSets}};
//        Map<String, List<List<Id>>> mEquipmentSetIdList =
//                new Map<String, List<List<Id>>>{'equipmentSetIdList' => new List<List<Id>>{equipmentSetIdList}};
//        Map<String, List<Map<Id, Id>>> mIdmap =
//                new Map<String, List<Map<Id, Id>>>{'idmap' => new List<Map<Id, Id>>{idmap}};
//        //返回结果,1:成功。
//        String checkRS = RentalApplyWebService.privateCheck(rentalApplyId, mRentalApplys, mRentalApplyEquipmentSets, mEquipmentSetIdList, mIdmap);
//        if (checkRS != '1') return checkRS;
//        rentalApplys = mRentalApplys.get('rentalApplys')[0];
//        rentalApplyEquipmentSets = mRentalApplyEquipmentSets.get('rentalApplyEquipmentSets')[0];
//        equipmentSetIdList = mEquipmentSetIdList.get('equipmentSetIdList')[0];
//        idmap = mIdmap.get('idmap')[0];
//        Rental_Apply__c rentalApply = rentalApplys[0];
//        //备品Set
//        List<Equipment_Set__c> equipmentSetUpdateList = new List<Equipment_Set__c>();
//        //备品Set明细
//        List<Equipment_Set_Detail__c> equipmentSetDetailList = new List<Equipment_Set_Detail__c>();
//        List<Equipment_Set_Detail__c> equipmentSetDetailList2 = new List<Equipment_Set_Detail__c>();
//        //备品申请借出明细历史
//        List<Rental_Apply_Equipment_Set_Detail__c> rentalApplyEquipmentSetDetailList = new List<Rental_Apply_Equipment_Set_Detail__c>();
//        for (Rental_Apply_Equipment_Set__c rentalApplyEquipmentSet : rentalApplyEquipmentSets) {
//            // 已做出库指示flag⇒前回の申請はまだ終わってない⇒出库しない
//            if (rentalApplyEquipmentSet.Equipment_Set__r.Already_Stock_Out__c == false) {
//                //更新备品Set
//                Equipment_Set__c equipmentSet = new Equipment_Set__c(
//                    Id = rentalApplyEquipmentSet.Equipment_Set__c,
//                    Last_Reserve_Rental_Apply_Equipment_Set__c = rentalApplyEquipmentSet.Id,
//                    Pre_Reserve_Rental_Apply_Equipment_Set__c = rentalApplyEquipmentSet.Equipment_Set__r.Last_Reserve_Rental_Apply_Equipment_Set__c,
//                    StockDown__c = false,
//                    StockDown_time__c = null,
//                    Shipment_request_time__c = System.now(),            //出库指示时间
//                    Shippment_loaner_time__c = null,            //备品中心出库时间
//                    Forecast_arrival_day__c = null,             //预计到货日
//                    //Loaner_received_day__c = null,              //现场签收日
//                    Return_wh_chenk_staff__c = null,
//                    Request_asset_extend_time__c = null,        //延期申请时间
//                    asset_extend_approval_time__c = null,       //延期申请批准时间
//                    //Asset_return_day__c = null,                 //物流提货日
//                    Received_loaner_time__c = null,             //备品中心回收时间
//                    delivery_company__c = null,
//                    Fedex_number__c = null,
//                    Distributor_method__c = null,
//                    Return_to_wh_staff__c = null,
//                    Return_delivery_company__c = null,
//                    Return_Fedex_number__c = null,
//                    Return_Distributor_method__c = null,
//                    Received_confirmation_staff__c = null,
//                    Customer_install_explanation_sign__c = null, //是否回收CDS确认单
//                    Send_to_return_email__c = false, //发送回收结果反馈邮件
//                    Return_comment_anoucment__c = null, //发送回收结果反馈内容(NG理由和欠品情况)
////bp2                    CDS_complete__c = false,
//                    Arrival_in_wh__c = false,
//                    Arrival_wh_time2__c = null,
//                    Already_Stock_Out__c = true,
//                    Repair_Sum_Update__c = 0
//                );
//                //更新备品Set
//                equipmentSetUpdateList.add(equipmentSet);
//            }
//        }
//        //借出设备机身号码
//        Map<String, String> assetSerialNumberMap = new Map<String, String>();
//        //备品Set明细
//        Equipment_Set_Detail__c[] equipmentSetDetails = [select Equipment_Set__c,Asset__c,Asset__r.SerialNumber,
//                                            Check_lost_Item__c,Pre_disinfection__c,Water_leacage_check__c,
//                                            Inspection_result_after__c,Arrival_in_wh__c,
//                                            Lost_item_check_staff__c,CDS_staff__c,Inspection_staff_After__c,
//                                            Return_wh_chenk_staff__c,Pre_inspection_time__c,Lost_item_check_time__c,
//                                            After_Inspection_time__c,Arrival_wh_time__c,
//                                            Inspection_result__c,Inspection_staff__c,Last_Reserve_RAES_Detail__c,
//                                            Equipment_Set__r.Already_Stock_Out__c
////bp2            , CDS_complete__c, CDS_complete_time__c
//                                            from Equipment_Set_Detail__c
//                                            where Equipment_Set__c in :equipmentSetIdList and Select_rental__c = true];
//        for (Equipment_Set_Detail__c equipmentSetDetail : equipmentSetDetails) {
//            // 已做出库指示flag⇒前回の申請はまだ終わってない⇒出库しない
//            if (equipmentSetDetail.Equipment_Set__r.Already_Stock_Out__c == false) {
//                //插入备品申请借出明细历史
//                Rental_Apply_Equipment_Set_Detail__c rentalApplyEquipmentSetDetail = new Rental_Apply_Equipment_Set_Detail__c();
//                rentalApplyEquipmentSetDetail.Rental_Apply__c = rentalApply.Id;//备品借出申请
//                rentalApplyEquipmentSetDetail.Rental_Apply_Equipment_Set__c = idmap.get(equipmentSetDetail.Equipment_Set__c);//备品Set借出历史
//                rentalApplyEquipmentSetDetail.Equipment_Set__c = equipmentSetDetail.Equipment_Set__c;//备品Set
//                rentalApplyEquipmentSetDetail.Asset__c = equipmentSetDetail.Asset__c;//保有设备
//                //插入备品申请借出明细历史
//                rentalApplyEquipmentSetDetailList.add(rentalApplyEquipmentSetDetail);
//                //更新备品Set明细
//                equipmentSetDetail.Check_lost_Item__c = null;//欠品确认结果
//                equipmentSetDetail.Lost_item_giveup__c = false;
//                equipmentSetDetail.Pre_disinfection__c = null;//清洗前
//                equipmentSetDetail.Water_leacage_check__c = null;//测漏检查结果
//                equipmentSetDetail.Inspection_result_after__c = null;//回收后-检测结果
//                equipmentSetDetail.Arrival_in_wh__c = false;//回库确认
//                equipmentSetDetail.Lost_item_check_staff__c = null;//欠品确认者
//                equipmentSetDetail.CDS_staff__c = null;//消毒人员
//                equipmentSetDetail.Inspection_staff_After__c = null;//回收后-检测人员
//                equipmentSetDetail.Return_wh_chenk_staff__c = null;//回库确认者
//                equipmentSetDetail.Inspection_result__c = null;//发货前-检测结果
//                equipmentSetDetail.Inspection_staff__c = null;//发货前-检测人员
//                equipmentSetDetail.Pre_inspection_time__c = null;//备品Set用,发货前-检测合格时间
//                equipmentSetDetail.Lost_item_check_time__c = null;//备品Set用,欠品确认时间
////bp2                equipmentSetDetail.CDS_complete_time__c = null;//备品Set用,CDS完毕时间
//                equipmentSetDetail.After_Inspection_time__c = null;//备品Set用,回收后-检测完毕时间
//                equipmentSetDetail.Arrival_wh_time__c = null;//备品Set用,回库确认完毕时间
//                equipmentSetDetail.Inspection_result_after_ng__c = null;//回收后-检测NG区分
//                equipmentSetDetail.Inspection_result_ng__c = null;//发货前-检测NG区分
////bp2                equipmentSetDetail.CDS_complete__c = false;//CDS完毕
//                //更新备品Set明细
//                equipmentSetDetailList.add(equipmentSetDetail);
//                //借出设备机身号码
//                if (String.isNotBlank(equipmentSetDetail.Asset__r.SerialNumber)) {
//                    if (assetSerialNumberMap.containsKey(equipmentSetDetail.Equipment_Set__c) == false) {
//                        assetSerialNumberMap.put(equipmentSetDetail.Equipment_Set__c, ',' + equipmentSetDetail.Asset__r.SerialNumber + ',');
//                    } else {
//                        String tmp = assetSerialNumberMap.get(equipmentSetDetail.Equipment_Set__c);
//                        tmp += equipmentSetDetail.Asset__r.SerialNumber + ',';
//                        assetSerialNumberMap.put(equipmentSetDetail.Equipment_Set__c, tmp);
//                    }
//                }
//            }
//        }
//        // TODO liang 1つsqlにまとめてください
//        Equipment_Set_Detail__c[] equipmentSetDetails2 = [select Id, Last_Reserve_RAES_Detail__c
////bp2                ,CDS_complete__c
//                                            from Equipment_Set_Detail__c
//                                            where Equipment_Set__c in :equipmentSetIdList and Select_rental__c = false];
//        for (Equipment_Set_Detail__c equipmentSetDetail : equipmentSetDetails2) {
//            equipmentSetDetail.Pre_Reserve_RAES_Detail__c = equipmentSetDetail.Last_Reserve_RAES_Detail__c;
//            equipmentSetDetail.Last_Reserve_RAES_Detail__c = null;
////bp2            equipmentSetDetail.CDS_complete__c = false;//CDS完毕
//            equipmentSetDetailList2.add(equipmentSetDetail);
//        }
//        //更新借出设备机身号码
//        List<Rental_Apply_Equipment_Set__c> rentalApplyEquipmentSetUpdateList = new List<Rental_Apply_Equipment_Set__c>();
//        for (Rental_Apply_Equipment_Set__c rentalApplyEquipmentSet : rentalApplyEquipmentSets) {
//            if (assetSerialNumberMap.containsKey(rentalApplyEquipmentSet.Equipment_Set__c)) {
//                rentalApplyEquipmentSet.Rental_Asset_SerialNumber__c = assetSerialNumberMap.get(rentalApplyEquipmentSet.Equipment_Set__c);
//              // xiongyl-start
//            }
//             rentalApplyEquipmentSet.Loaner_name_text__c =rentalApplyEquipmentSet.Equipment_Set__r.Loaner_name__c; //备品名称
//             rentalApplyEquipmentSet.Loaner_code_text__c = rentalApplyEquipmentSet.Equipment_Set__r.Loaner_code__c; //備品型番
//             rentalApplyEquipmentSet.Salesdepartment_text__c = rentalApplyEquipmentSet.Equipment_Set__r.Salesdepartment__c; // 所在地区(本部)
//             rentalApplyEquipmentSet.Salesprovince_text__c = rentalApplyEquipmentSet.Equipment_Set__r.SalesProvince__c; //所在地区(省)
//             rentalApplyEquipmentSet.Equipment_Type_text__c = rentalApplyEquipmentSet.Equipment_Set__r.Equipment_Type__c; //分类
//             rentalApplyEquipmentSet.Equipment_Set_Borrowed__c = rentalApplyEquipmentSet.Equipment_Set__r.Name;//备品set
//             rentalApplyEquipmentSet.Product_Class_Bor__c = rentalApplyEquipmentSet.Equipment_Set__r.Product_category__c;
//             rentalApplyEquipmentSet.SerialNumber_text__c = rentalApplyEquipmentSet.Equipment_Set__r.SerialNumber__c;
//             rentalApplyEquipmentSetUpdateList.add(rentalApplyEquipmentSet);
//             // xiongyl-end
//        }
//        Savepoint sp = Database.setSavepoint();
//        try {
//            if (equipmentSetUpdateList.size() > 0) {
//                update equipmentSetUpdateList;
//            }
//            if (rentalApplyEquipmentSetDetailList.size() > 0) {
//                insert rentalApplyEquipmentSetDetailList;
//            }
//            if (equipmentSetDetailList.size() > 0) {
//                for (Integer i=0; i<equipmentSetDetailList.size(); i++) {
//                    equipmentSetDetailList[i].Pre_Reserve_RAES_Detail__c = equipmentSetDetailList[i].Last_Reserve_RAES_Detail__c;
//                    equipmentSetDetailList[i].Last_Reserve_RAES_Detail__c = rentalApplyEquipmentSetDetailList[i].Id;
//                }
//                update equipmentSetDetailList;
//            }
//            if (equipmentSetDetailList2.size() > 0) {
//                update equipmentSetDetailList2;
//            }
//            if (rentalApplyEquipmentSetUpdateList.size() > 0) {
//                update rentalApplyEquipmentSetUpdateList;
//            }
//            eSetRefreshStatus(equipmentSetIdList);
//        } catch (System.Exception e) {
//            Database.rollback(sp);
//            return e.getMessage();
//        }
//        //返回结果
//        return checkRS;
//    }
    // 备品借出时间check
    @AuraEnabled
    WebService static String approvalCheck(String rentalApplyId) {
        // check结果
        String returnStr = '';
        //1388 yc 20211021 跨区域分配不能出库  start
        String rasdid = '';
        system.debug(rentalApplyId+'==');
        if(String.isNotBlank(rentalApplyId) && rentalApplyId.indexOf(';') >= 0){//说明是从一览上触发的
           rasdid = rentalApplyId.subString(rentalApplyId.indexOf(';') + 1);
           rentalApplyId = rentalApplyId.subString(0, rentalApplyId.indexOf(';'));
        }
        //1388 yc 20211021 跨区域分配不能出库  end
        //备品借出申请
        Rental_Apply__c[] rentalApply = [select Id,repair__r.Repair_Final_Inspection_Date__c,Bollow_Date__c,repair__r.Return_Without_Repair_Date__c,
                                        CreatedDate,Rental_Apply_Equipment_Set_Cnt__c,Prepare_Day__c,Cross_Region_Assign__c,
                                        demo_purpose2__c,Follow_UP_Opp__r.Shipping_Finished_Day_Func__c,next_action__c,QIS_number__r.ReplaceDeliveryDate__c
                                        from Rental_Apply__c
                                        where Id = :rentalApplyId];
        if (rentalApply.size() == 0) {
            returnStr = '没有备品借出申请,请确认。';
            return returnStr;
        }
        Rental_Apply__c ra = rentalApply[0];
        if (ra.Rental_Apply_Equipment_Set_Cnt__c <= 0) {
            returnStr = '没有借出备品set一览,请确认。';
            return returnStr;
        }
        //1822 yc 20211111 start
        if(ra.demo_purpose2__c=='已购待货' && ra.Follow_UP_Opp__r.Shipping_Finished_Day_Func__c!= null){
            returnStr = '已购待货目的,新品已有发货日,不可出库指示';
            return returnStr;
        }
        if(ra.demo_purpose2__c=='索赔QIS' && ra.next_action__c=='无偿更换' && ra.QIS_number__r.ReplaceDeliveryDate__c!= null){
            returnStr = '索赔QIS目的,QIS已有新品发货日,不可出库指示';
            return returnStr;
       }
        //1822 yc 20211111 end
//*************************Insert 20160826 SWAG-AD59Z6 趙徳芳 Start*************************//
        if(Ra.repair__r.Repair_Final_Inspection_Date__c != null) {
            return '修理最终检测日不为空,不能做出库指示';
        }
        if(Ra.repair__c!=null&&Ra.repair__r.Return_Without_Repair_Date__c != null) {
            return '未修理归还日不为空,不能做出库指示';
        }
//*************************Insert 20160826 SWAG-AD59Z6 趙徳芳 End***************************//
        //1388 yc 20211021 跨区域分配不能出库 start
        if(String.isNotBlank(ra.Cross_Region_Assign__c)){
            String soql = 'select Id, Name,Rental_Apply__c,Internal_asset_location_before__c';
                   soql +=' from Rental_Apply_Equipment_Set_Detail__c';
                   soql +=' where Rental_Apply__c = \'' + ra.Id +'\'';
                   soql +=' and Internal_asset_location_before__c !=null and Internal_asset_location_before__c != \'' + ra.Cross_Region_Assign__c+ '\'';
            if(String.isNotBlank(rasdid)){
                   soql +=' and Rental_Apply_Equipment_Set__c = :rasdid';
              }
            List<Rental_Apply_Equipment_Set_Detail__c> raesd = Database.query(soql);
            if(raesd.size()>0){
                returnStr = '分配的备品不是您所属备品中心的备品,不能做出库指示';
                return returnStr;
            }
        }
        //1388 yc 20211021 跨区域分配不能出库 end
        // 20220211 ljh add 备品FY23课题01 start
        // AggregateResult[] resultsRas = [SELECT Rental_Start_Date__c,count(Id) cnt
        //                              FROM Rental_Apply_Equipment_Set__c
        //                              WHERE Rental_Apply__c = :rentalApplyId
        //                              AND Cancel_Select__c = false
        //                              group by Rental_Start_Date__c];
        // If(resultsRas.size() > 1){
        //  returnStr = '所有一览备品预计出货日应一致,不一致不能做出库指示';
        //     return returnStr;
        // }
        // 20220211 ljh add 备品FY23课题01 end
//bp2        // 备品借出历史取得
//        List<String> equipmentSetList = new List<String>();
//        Rental_Apply_Equipment_Set__c[] raes = [
//            select Id, Name, Equipment_Set__c, Equipment_Set__r.Name, Rental_Start_Date__c, Rental_End_Date__c, Rental_Apply__c
//              from Rental_Apply_Equipment_Set__c
//             where Rental_Apply__c = :rentalApplyId and Cancel_Select__c = false];
//        // 日历范围,最小的借出开始日到最大的借出终了日
//        Date startDate = Date.today();
//        Date endDate = Date.today();
//        for (Rental_Apply_Equipment_Set__c r : raes) {
//            equipmentSetList.add(r.Equipment_Set__c);
//            if (r.Rental_Start_Date__c != null && r.Rental_Start_Date__c < startDate) {
//                startDate = r.Rental_Start_Date__c;
//            }
//            if (r.Rental_End_Date__c != null && r.Rental_End_Date__c > endDate) {
//                endDate = r.Rental_End_Date__c;
//            }
//        }
//        Integer prepareDay = ra.Prepare_Day__c == null ? Integer.valueOf(System.Label.EquipmentRentalPrepare) : ra.Prepare_Day__c.intValue();
//        Date minDate = getWD_addday(startDate, -1 * prepareDay);
//        Date maxDate = getWD_addday(endDate, prepareDay);
//        // 其他备品借出申请历史
//        Rental_Apply_Equipment_Set__c[] others = [
//                    select Id, Name, Rental_Start_Date__c, Rental_End_Date__c, Equipment_Set__c, Rental_Apply__r.Status__c ,Rental_Apply__r.Prepare_Day__c
//                      from Rental_Apply_Equipment_Set__c
//                     where Rental_Apply__c != :rentalApplyId
//                       and Equipment_Set__c in :equipmentSetList
//                       and Request_Status__c != '取消'
//                       and Request_Status__c != '删除'
//                       and Cancel_Select__c = false
//                       and ((Rental_Start_Date__c >= :minDate and Rental_Start_Date__c <= :maxDate)
//                            or (Rental_End_Date__c >= :minDate and Rental_End_Date__c <= :maxDate)
//                            or (Rental_Start_Date__c <= :startDate and Rental_End_Date__c >= :endDate))];
//        Map<String, List<Rental_Apply_Equipment_Set__c>> othersMap = new Map<String,List<Rental_Apply_Equipment_Set__c>>();
//        for (Rental_Apply_Equipment_Set__c other : others) {
//            if (othersMap.containsKey(other.Equipment_Set__c)) {
//                othersMap.get(other.Equipment_Set__c).add(other);
//            } else {
//                List<Rental_Apply_Equipment_Set__c> l = new List<Rental_Apply_Equipment_Set__c>();
//                l.add(other);
//                othersMap.put(other.Equipment_Set__c, l);
//            }
//        }
//        for (Rental_Apply_Equipment_Set__c r : raes) {
//            List<Rental_Apply_Equipment_Set__c> other = othersMap.get(r.Equipment_Set__c);
//            Map<Date, Map<String, String>> dateMap= new Map<Date, Map<String, String>>();
//            if (other != null) {
//                Date sdate = startDate;
//                Date edate = endDate;
//                for (Rental_Apply_Equipment_Set__c o : other) {
//                    if (o.Rental_Start_Date__c != null && (sdate == null || o.Rental_Start_Date__c < sdate)) {
//                        sdate = o.Rental_Start_Date__c;
//                    }
//                    if (o.Rental_End_Date__c != null && (edate == null || o.Rental_End_Date__c > edate)) {
//                        edate = o.Rental_End_Date__c;
//                    }
//                }
//                if (sdate != null && edate != null) {
//                    RentalApplyWebService raws = new RentalApplyWebService();
//                    dateMap = raws.getDateMap(sdate, edate, prepareDay);
//                }
//            }
//            if (r.Rental_Start_Date__c == null && r.Rental_End_Date__c == null) {
//                // 清空该借出历史的出库和回收时间
//            } else if (other == null || other.size() == 0) {
//                // 与其他借出历史没有冲突
//            } else {
//                Date fromDate = r.Rental_Start_Date__c;
//                Date toDate = r.Rental_End_Date__c;
//                for (Rental_Apply_Equipment_Set__c o : other) {
//                    if (o.Rental_Apply__r.Status__c != '草案中' && o.Rental_Apply__r.Status__c != '申请中' && o.Rental_Apply__r.Status__c != null) {
//                        Date startD = o.Rental_Start_Date__c;
//                        Date endD = o.Rental_End_Date__c;
//                        Integer prepare = prepareDay; //>= o.Rental_Apply__r.Prepare_Day__c || o.Rental_Apply__r.Prepare_Day__c == null ? prepareDay : o.Rental_Apply__r.Prepare_Day__c.intValue();
//                        if ((dateMap.containsKey(fromDate) && Date.valueOf(dateMap.get(fromDate).get('Next')) > startD && dateMap.containsKey(endD) && fromDate < Date.valueOf(dateMap.get(endD).get('Next'))) ||
//                            (dateMap.containsKey(toDate) && Date.valueOf(dateMap.get(toDate).get('Next')) > startD && dateMap.containsKey(endD) && toDate < Date.valueOf(dateMap.get(endD).get('Next'))) ||
//                            (dateMap.containsKey(fromDate) && Date.valueOf(dateMap.get(fromDate).get('Next')) <= startD && dateMap.containsKey(endD) && toDate >= Date.valueOf(dateMap.get(endD).get('Next')))) {
//                            returnStr = '备品' + r.Equipment_Set__r.Name + '的借出日与备品借出历史' + o.Name + '有冲突,请确认。';
//                            return returnStr;
//                        }
//                    }
//                }
//            }
//        }
        return '1';
    }
    // 延期审批Check
    @AuraEnabled
    WebService static String extension_approval_processCheck(String rentalApplyId) {
        try {
            List<Rental_Apply__c> raList = [SELECT Id,Name
                       , Demo_purpose1__c
                       , Demo_purpose2__c
                       , Loaner_received_ng_num__c
                       , ExtensionApprovalTime_Initial__c
                       , ExtensionApplicationTime_Final__c
                       , ExtensionApprovalTime_Final__c
                       , NewRepair__c
                       , NewRepair__r.Agreed_Date__c
                       , NewRepair__r.Status__c
                       , NewRepair__r.ReRepairObject_F__c
                       , NewRepair__r.Repair_Shipped_Date__c
                       , AgreementBorrowingExtensionDate__c
                       , next_action__c
                       , RC_Ordered_Date__c
                       , Bollow_Date_Add_10_WD__c
                       , Root_Rental_Apply__c
                       , Assign_Person__c
                       , Return_dadeline_final__c
                       , RA_Status__c
                       , ExtensionApplicationTime_Initial__c
                       , RecordType.DeveloperName
                       , RecordType.id
                       , ExtensionStatus__c
                    FROM Rental_Apply__c
                    WHERE Id = :rentalApplyId];
            if (raList.size() == 0) {
                return '没有备品借出申请,请确认。';
            }
            //add       wangweipeng            2021/11/26                   start
            /*List<Rental_Apply_Equipment_Set__c> raesList = RentalApplyTriggerHandler.getCan_Extend_RequestList(raList[0],'1');
            return '1';*/
            String ErrorMessageStr = unifyGetRentalApply(raList[0]);
            //add       wangweipeng            2021/11/26                   end
            return ErrorMessageStr;
        }
        catch(Exception e) {
            return e.getMessage();
        }
    }
    //add       wangweipeng            2021/11/26                   start
    /**
     * @param  rentalApplyId 备品id
     * @return               备品配套数据
     *
     * 延期整体逻辑:
     *     1:试用目的2不为:有询价和无询价,做特殊处理
     *     2:其他情况:逻辑不变
     *   上面第一个条件满足:
     *       1:从原单点击延期申请按钮,没有分割单
     *       2:从原单点击延期申请按钮,有分割单
     *       3:从单点击延期申请按钮
     *
     *      第一种情况:按照原来的逻辑走,不需要做特殊处理
     *      第二种情况:
     *          (1):记录类型为:备品中心,判断分配人是否为空,办事处分配人不可能为空
     *          (2):获取原单和原单下所有的分单,因为批量延期不光查看自己申请单情况,如果是主单进来的,还需要查看当前单子,和他下面的所有从单
     *          (2):走一个方法,这是一个延期通用的方法,用于判断此次延期的申请单是否有可以延期的一览,会在下面具体介绍
     *          (3):走上面通用的方法,没有获取到可以延期的一览,那么做提示,不能延期
     *          (4):跳转页面为:此次为批量延期自定义开发的页面
     *      第三种情况:
     *          (1):如果是从单延期,那么需要查看此单,此单的原单,此单原单下所有的从单是否满足延期条件
     *          (2):以上的单子必须满足:已出库的--已回收(不含)之间状态,且最新预定归还日≥ 今天。
     *          (3):走一个方法,这是一个延期通用的方法,用于判断此次延期的申请单是否有可以延期的一览,会在下面具体介绍
     *          (4):由于通用的方法会返回所有申请单可延期的一览,所以需要判断此单是否有可以延期的一览
     *          (5):由于通用的方法会跳过 ok并且回寄时间不为空的一览,所以此时判断这个条件,满足就不能延期
     *          (6):跳转页面为原来延期开发的自定义页面
     *
     *     通用是否可以延期的方法:(试用(有询价)、试用(无询价))
     *         (1):此方法参数为list,如果超过1条数据,默认为走批量延期的条件
     *         (2):申请单:如果size大于1,跳过一些验证:未完成到货确认不验证和延期批准时间(最初)不能延期
     *         (3):一览:如果size大于1,ok并且回寄时间不为空的一览不验证
     *
     */
    public static String unifyGetRentalApply(Rental_Apply__c rentalApply){
        Rental_Apply__c rac = rentalApply;
        //如果申请单的 使用目2为 有询价或无询价的,那么需要特殊处理一下
        if(rac.Demo_purpose1__c == '产品试用' && (rac.demo_purpose2__c == '试用(无询价)' || rac.demo_purpose2__c == '试用(有询价)')){
            if(rac.ExtensionStatus__c == '已批准'){
                return '产品试用的申请不能提交第二次延期申请。';
            }else{
                return muchRentalApply(rac);
            }
        }else{
            //办事处目前只能延期有询价或无询价
            if(rac.RecordType.DeveloperName == 'AgencyRequest'){
                return '办事处申请单,非试用(无询价)、 试用(有询价)不可延期。';
            }else{
                List<Rental_Apply_Equipment_Set__c> raesList = RentalApplyTriggerHandler.getCan_Extend_RequestList(new List<Rental_Apply__c>{rac});
                return '1';
            }
        }
    }
    /**
     *
     * @param  rac [延期入口]
     * @return     [description]
     *
     * 逻辑解释:
     *     原单(没有从单):走原来的逻辑
     *     从单:判断此从单的原单、原单下所有的从单是否满足第一条,并且当前从单必须有一条满足第二条才能延期
     *     原单(有从单):判断此申请单和原单下所有的从单是否满足第一条,并且这些申请单最少有一个申请单满足第二个条件,才能延期
     */
    public static String muchRentalApply(Rental_Apply__c rac){
        //获取所有的申请单
        List<Rental_Apply__c> rentalApplyData =  getAllRentalApply(rac);
        if(rentalApplyData != null && rentalApplyData.size() > 0){
            //如果只查到一条数据,那么证明他是原单,并且没有分割单,那么就走原来延期的逻辑
            if(rentalApplyData.size() == 1){
                List<Rental_Apply_Equipment_Set__c> raesList = RentalApplyTriggerHandler.getCan_Extend_RequestList(rentalApplyData);
                return '1';
            }else{
                //如果为多条,证明他有从单或当前要延期的单子是从单,那么就需要做特殊处理
                List<Rental_Apply__c> racList = new List<Rental_Apply__c>();
                //判断他是原单还是从单
                System.debug('--345----------'+rac.Root_Rental_Apply__c);
                if(String.isNotBlank(rac.Root_Rental_Apply__c)){
                    //可延期的申请单应满足:已出库的--已回收(不含)之间状态,且最新预定归还日≥ 今天。
                    //当前日期
                    Date today = Date.today();
                    //预定归还日不能为空
                    if(rac.Return_dadeline_final__c != null){
                        //最新预定归还日≥ 今天。
                        if(rac.Return_dadeline_final__c >= today){
                            //可延期的申请单应满足:已出库的--已回收(不含)之间状态
                            if(rac.RA_Status__c == '申请者已收货' || rac.RA_Status__c == '医院已装机确认' || rac.RA_Status__c == '已出库')
                            {
                                //能走到这里,证明延期入口的申请单不是已经延过的,所有现在判断其他的申请单是否已经延期,如果延过,那么不需要验证
                                //if(rac.ExtensionApplicationTime_Initial__c == null){
                                    racList = rentalApplyData;
                                //}
                            }else{
                                if(rac.RA_Status__c != '取消' && rac.RA_Status__c != '删除'){
                                    return '申请单:'+rac.Name+'的状态为【'+rac.RA_Status__c+'】 不可以进行延期。';
                                }
                            }
                        }else{
                            return '申请单:'+rac.Name+'的最新预定归还日小于当前时间,不可以进行延期。';
                        }
                    }else{
                        return '申请单:'+rac.Name+' 的预定归还日不能为空。';
                    }
                }else{
                    //备品中心
                    if(rac.RecordType.DeveloperName == 'StandardRequest'){
                        //a. 原单上分配人=空,点击原单上的【延期申请】按钮时,提示【原单未分配或已取消,请在分单上操作延期】
                        //注:原单未分配已取消或未分配时,原单分配人为空
                        if(String.isBlank(rac.Assign_Person__c)){
                            return '原单未分配或已取消,请在分单上操作延期。';
                        }
                    }
                    //如果是原单,直接判断是否满足第一和第二条,第三条不需要现在判断
                    racList = rentalApplyData;
                }
                if(racList != null && racList.size() > 0){
                    System.debug('-----------543---'+racList);
                    //此方法主要验证第一和第二个条件
                    List<Rental_Apply_Equipment_Set__c> raesList = RentalApplyTriggerHandler.getCan_Extend_RequestList(racList);
                    if(raesList.size() == 0){
                       return '无任何申请单满足。';
                    }else{
                        //如果从单为延期入口,会判断他的原单和此原单下所有从单满足延期条件
                        //如果满足条件,那么判断当前从单是否满足延期条件,如果是其他申请单满足,那么不能延期,
                        //如果此申请单有一个配套满足,那么可以延期,走单独延期逻辑(原来延期逻辑)
                        if(String.isNotBlank(rac.Root_Rental_Apply__c)){
                            Integer indexI = 0;
                            String racIds = rac.Id;
                            racIds = racIds.substring(0,15);
                            //循环判断此单是否有可以延期的配套吗?
                            for(Rental_Apply_Equipment_Set__c raesc : raesList){
                                String raescId = raesc.Rental_Apply__c;
                                raescId = raescId.substring(0,15);
                                if(racIds.equals(raescId)){
                                    indexI++;
                                }
                            }
                            if(indexI > 0) {
                                //如果从单为延期入口,他会走通用的批量延期验证,所以需要验证以下的条件,如果满足就不然延期
                                //判断是此申请单是否存在 ok并且回寄时间不为空的一览
                                List<Rental_Apply_Equipment_Set__c> raescc = getAllRentalApplyEs(rac);
                                if(raescc != null && raescc.size() > 0){
                                    for(Rental_Apply_Equipment_Set__c rr : raescc){
                                        if ((rr.Received_Confirm__c == 'OK' || rr.Received_Confirm__c == '默认签收-OK') && rr.Asset_return_time__c != null) {
                                            return '此单不满足延期条件。';
                                        }
                                    }
                                    return '1';
                                }
                            }else{
                                return '此单不满足延期条件。';
                            }
                        }else{
                            return '2';
                        }
                    }
                }
            }
        }
        return null;
    }
    /**
     * 根据传过来的备品id获取所有的从单和原单
     * @param  rea 延期的入口申请单
     * @return               返回所有的原单和从单
     * 参数有可能是原单id或从单id
     */
    public static List<Rental_Apply__c> getAllRentalApply(Rental_Apply__c rea){
        List<Rental_Apply__c> allRentalApply = [SELECT id,
                                                        Name,
                                                        RA_Status__c,
                                                        Request_return_day__c,
                                                        demo_purpose1__c,demo_purpose2__c,
                                                        ExtensionApprovalTime_Final__c,
                                                        RC_Ordered_Date__c,
                                                        Bollow_Date_Add_10_WD__c,
                                                        Loaner_received_ng_num__c,
                                                        ExtensionApprovalTime_Initial__c,
                                                        next_action__c,
                                                        NewRepair__c,
                                                        NewRepair__r.Agreed_Date__c,
                                                        NewRepair__r.Status__c,
                                                        NewRepair__r.ReRepairObject_F__c,
                                                        NewRepair__r.Repair_Shipped_Date__c,
                                                        AgreementBorrowingExtensionDate__c,
                                                        Return_dadeline_final__c,
                                                        ExtensionApplicationTime_Initial__c,
                                                        Root_Rental_Apply__c,
                                                        ExtensionStatus__c
                                                    FROM Rental_Apply__c
                                                    WHERE id = :rea.Id
                                                        OR id = :rea.Root_Rental_Apply__c
                                                        OR (Root_Rental_Apply__c = :rea.Id AND Root_Rental_Apply__c != NULL)
                                                        OR (Root_Rental_Apply__c = :rea.Root_Rental_Apply__c AND Root_Rental_Apply__c != NULL)
                                                        limit 1000];
        return allRentalApply;
    }
    /**
     * [getAllRentalApplyEs 获取一览]
     * @param  rea [description]
     * @return     [description]
     *
     * 只有从单为延期入口的时候,才会去查询一览
     */
    public static List<Rental_Apply_Equipment_Set__c> getAllRentalApplyEs(Rental_Apply__c rea){
        List<Rental_Apply_Equipment_Set__c> raes = [SELECT Id,name
                                                                , Rental_Apply__c
                                                                , Rental_Apply__r.Repair__r.Agreed_Date__c
                                                                , Rental_Apply__r.Repair__r.Repair_Estimated_date_formula__c
                                                                , Rental_Apply__r.NewRepair__c
                                                                , Rental_Apply__r.NewRepair__r.Agreed_Date__c
                                                                , Rental_Apply__r.NewRepair__r.Status__c
                                                                , Rental_Apply__r.NewRepair__r.ReRepairObject_F__c
                                                                , Rental_Apply__r.NewRepair__r.Repair_Shipped_Date__c
                                                                , Rental_Apply__r.QISRepair__r.Repair_Shipped_Date__c
                                                                , Rental_Apply__r.RC_return_to_office__c
                                                                , Rental_Apply__r.AgreementBorrowingExtensionDate__c
                                                                , Rental_Apply__r.ExtensionApprovalTime_Initial__c
                                                                , Rental_Apply__r.ExtensionApplicationTime_Final__c
                                                                , Rental_Apply__r.RcUnexpectExpiryDelay__c
                                                                , Final_reply_day__c
                                                                , Asset_return_time__c
                                                                , Bollow_Date__c
                                                                , demo_purpose2__c
                                                                , demo_purpose1__c
                                                                , Request_demo_time__c
                                                                , Loaner_received_time__c
                                                                , Received_Confirm__c
                                                                , Loaner_received_day2__c
                                                                , RcUnexpectExpiryDelay__c
                                                             FROM Rental_Apply_Equipment_Set__c
                                                            WHERE Rental_Apply__c = :rea.Id
                                                              AND Cancel_Reason__c = null // 取消重新分配的话需要做为NG重新分配的情况所以不能用Cancel_Select__c
                                                             ];
        return raes;
    }
    //add       wangweipeng            2021/11/26                   start
//bp2
//    // 备品借出时间check
//    WebService static String approvalCheck2(String raesId) {
//        // check结果
//        String returnStr = '';
//        // 备品借出历史取得
//        List<String> equipmentSetList = new List<String>();
//        Rental_Apply_Equipment_Set__c[] raes = [
//            select Id, Name, Equipment_Set__c, Equipment_Set__r.Name, Rental_Start_Date__c, Rental_End_Date__c, Rental_Apply__c, Rental_Apply__r.Prepare_Day__c
//              from Rental_Apply_Equipment_Set__c
//             where Id = :raesId and Cancel_Select__c = false];
//        Rental_Apply_Equipment_Set__c r = raes[0];
//        // 日历范围,最小的借出开始日到最大的借出终了日
//        Date startDate = r.Rental_Start_Date__c;
//        Date endDate = r.Rental_End_Date__c;
//        Integer prepareDay = r.Rental_Apply__r.Prepare_Day__c == null ? Integer.valueOf(System.Label.EquipmentRentalPrepare) : r.Rental_Apply__r.Prepare_Day__c.intValue();
//        Date minDate = getWD_addday(startDate, -1 * prepareDay);
//        Date maxDate = getWD_addday(endDate, prepareDay);
//        // 其他备品借出申请历史
//        Rental_Apply_Equipment_Set__c[] others = [
//                    select Id, Name, Rental_Start_Date__c, Rental_End_Date__c, Equipment_Set__c, Rental_Apply__r.Status__c ,Rental_Apply__r.Prepare_Day__c
//                      from Rental_Apply_Equipment_Set__c
//                     where Id != :raesId
//                       and Equipment_Set__c = :r.Equipment_Set__c
//                       and Request_Status__c != '取消'
//                       and Request_Status__c != '删除'
//                       and Cancel_Select__c = false
//                       and ((Rental_Start_Date__c >= :minDate and Rental_Start_Date__c <= :maxDate)
//                            or (Rental_End_Date__c >= :minDate and Rental_End_Date__c <= :maxDate)
//                            or (Rental_Start_Date__c <= :startDate and Rental_End_Date__c >= :endDate))];
//        Map<String, List<Rental_Apply_Equipment_Set__c>> othersMap = new Map<String,List<Rental_Apply_Equipment_Set__c>>();
//        for (Rental_Apply_Equipment_Set__c other : others) {
//            if (othersMap.containsKey(other.Equipment_Set__c)) {
//                othersMap.get(other.Equipment_Set__c).add(other);
//            } else {
//                List<Rental_Apply_Equipment_Set__c> l = new List<Rental_Apply_Equipment_Set__c>();
//                l.add(other);
//                othersMap.put(other.Equipment_Set__c, l);
//            }
//        }
//        List<Rental_Apply_Equipment_Set__c> other = othersMap.get(r.Equipment_Set__c);
//        Map<Date, Map<String, String>> dateMap= new Map<Date, Map<String, String>>();
//        if (other != null) {
//            Date sdate = startDate;
//            Date edate = endDate;
//            for (Rental_Apply_Equipment_Set__c o : other) {
//                if (o.Rental_Start_Date__c != null && (sdate == null || o.Rental_Start_Date__c < sdate)) {
//                    sdate = o.Rental_Start_Date__c;
//                }
//                if (o.Rental_End_Date__c != null && (edate == null || o.Rental_End_Date__c > edate)) {
//                    edate = o.Rental_End_Date__c;
//                }
//            }
//            if (sdate != null && edate != null) {
//                RentalApplyWebService raws = new RentalApplyWebService();
//                dateMap = raws.getDateMap(sdate, edate, prepareDay);
//            }
//        }
//        if (r.Rental_Start_Date__c == null && r.Rental_End_Date__c == null) {
//            // 清空该借出历史的出库和回收时间
//        } else if (other == null || other.size() == 0) {
//            // 与其他借出历史没有冲突
//        } else {
//            Date fromDate = r.Rental_Start_Date__c;
//            Date toDate = r.Rental_End_Date__c;
//            for (Rental_Apply_Equipment_Set__c o : other) {
//                if (o.Rental_Apply__r.Status__c != '草案中' && o.Rental_Apply__r.Status__c != '申请中' && o.Rental_Apply__r.Status__c != null) {
//                    Date startD = o.Rental_Start_Date__c;
//                    Date endD = o.Rental_End_Date__c;
//                    Integer prepare = prepareDay; //>= o.Rental_Apply__r.Prepare_Day__c || o.Rental_Apply__r.Prepare_Day__c == null ? prepareDay : o.Rental_Apply__r.Prepare_Day__c.intValue();
//                    Date minD = startD.addDays(-1 * prepare);
//                    Date maxD = endD.addDays(prepare);
//                    if ((dateMap.containsKey(fromDate) && Date.valueOf(dateMap.get(fromDate).get('Next')) > startD && dateMap.containsKey(endD) && fromDate < Date.valueOf(dateMap.get(endD).get('Next'))) ||
//                        (dateMap.containsKey(toDate) && Date.valueOf(dateMap.get(toDate).get('Next')) > startD && dateMap.containsKey(endD) && toDate < Date.valueOf(dateMap.get(endD).get('Next'))) ||
//                        (dateMap.containsKey(fromDate) && Date.valueOf(dateMap.get(fromDate).get('Next')) <= startD && dateMap.containsKey(endD) && toDate >= Date.valueOf(dateMap.get(endD).get('Next')))) {
//                        returnStr = '备品' + r.Equipment_Set__r.Name + '的借出日与备品借出历史' + o.Name + '有冲突,请确认。';
//                        return returnStr;
//                    }
//                }
//            }
//        }
//        return '1';
//    }
//bp2
//    WebService static String reserve2(String raesId) {
//        String checkRS = '1';
//        Rental_Apply_Equipment_Set__c raes = [
//                select Id,Name,Rental_Apply__c,Rental_Start_Date__c,ES_Stock_Status__c,
//                       Equipment_Set__c,
//                       Equipment_Set__r.Name,
//                       Equipment_Set__r.Active_judgement2__c,
//                       Equipment_Set__r.Last_Reserve_Rental_Apply_Equipment_Set__c,
//                       Equipment_Set__r.Pre_Reserve_Rental_Apply_Equipment_Set__c
//                  from Rental_Apply_Equipment_Set__c where Id = :raesId and Cancel_Select__c = false
//        ];
//        if (raes.Equipment_Set__r.Last_Reserve_Rental_Apply_Equipment_Set__c == raes.Id) {
//            checkRS = '该借出备品set一览已经做过出库指示:' + raes.Name;
//            return checkRS;
//        }
//        if (raes.ES_Stock_Status__c == '不能出库') {
//             checkRS = '备品set ' + raes.Equipment_Set__r.Name + ' 在预约期间外不能出库,请确认';
//             return checkRS;
//        }
//        checkRS = RentalApplyWebService.approvalCheck2(raesId);
//        if (checkRS != '1') {
//            return checkRS;
//        }
//        /*
//        if (raes.Rental_Start_Date__c <= Date.today()) {
//            checkRS = '借出开始日必须大于今日。借出备品set一览:' + raes.Name;
//            return checkRS;
//        }
//        if (raes.Equipment_Set__r.Active_judgement2__c != okStatus) {
//            checkRS = '备品set ' + raes.Equipment_Set__r.Name + ' 的' + Schema.SObjectType.Equipment_Set__c.fields.Asset_Set_status2__c.label + '不是 99.等待预约 ,现在是 ' + raes.Equipment_Set__r.Asset_Set_status2__c + ' 请确认';
//            return checkRS;
//        }
//        */
//        //备品Set明细
//        List<Equipment_Set_Detail__c> equipmentSetDetailList = new List<Equipment_Set_Detail__c>();
//        List<Equipment_Set_Detail__c> equipmentSetDetailList2 = new List<Equipment_Set_Detail__c>();
//        //备品申请借出明细历史
//        List<Rental_Apply_Equipment_Set_Detail__c> rentalApplyEquipmentSetDetailList = new List<Rental_Apply_Equipment_Set_Detail__c>();
//        //更新备品Set
//        Equipment_Set__c equipmentSet = new Equipment_Set__c(
//            Id = raes.Equipment_Set__c,
//            Last_Reserve_Rental_Apply_Equipment_Set__c = raes.Id,
//            Pre_Reserve_Rental_Apply_Equipment_Set__c = raes.Equipment_Set__r.Last_Reserve_Rental_Apply_Equipment_Set__c == null ? raes.Equipment_Set__r.Pre_Reserve_Rental_Apply_Equipment_Set__c : raes.Equipment_Set__r.Last_Reserve_Rental_Apply_Equipment_Set__c,
//            StockDown__c = false,
//            StockDown_time__c = null,
//            Shipment_request_time__c = System.now(),            //出库指示时间
//            Shippment_loaner_time__c = null,            //备品中心出库时间
//            Forecast_arrival_day__c = null,             //预计到货日
//            //Loaner_received_day__c = null,              //现场签收日
//            Request_asset_extend_time__c = null,        //延期申请时间
//            asset_extend_approval_time__c = null,       //延期申请批准时间
//            //Asset_return_day__c = null,                 //物流提货日
//            Received_loaner_time__c = null,             //备品中心回收时间
//            delivery_company__c = null,
//            Fedex_number__c = null,
//            Distributor_method__c = null,
//            Return_to_wh_staff__c = null,
//            Return_delivery_company__c = null,
//            Return_Fedex_number__c = null,
//            Return_Distributor_method__c = null,
//            Received_confirmation_staff__c = null,
//            Customer_install_explanation_sign__c = null, //是否回收CDS确认单
//            Send_to_return_email__c = false, //发送回收结果反馈邮件
//            Return_comment_anoucment__c = null, //发送回收结果反馈内容(NG理由和欠品情况)
////bp2            CDS_complete__c = false,
//            Arrival_in_wh__c = false,
//            Arrival_wh_time2__c = null,
//            Repair_Sum_Update__c = 0
//        );
//        //借出设备机身号码
//        String assetSerialNumber = '';
//        Boolean assetFirst = false;
//        //备品Set明细
//        Equipment_Set_Detail__c[] equipmentSetDetails = [select Equipment_Set__c,Asset__c,Asset__r.SerialNumber,
//                                            Check_lost_Item__c,Pre_disinfection__c,Water_leacage_check__c,
//                                            Inspection_result_after__c,Arrival_in_wh__c,
//                                            Lost_item_check_staff__c,CDS_staff__c,Inspection_staff_After__c,
//                                            Return_wh_chenk_staff__c,Pre_inspection_time__c,Lost_item_check_time__c,
//                                            After_Inspection_time__c,Arrival_wh_time__c,
//                                            Inspection_result__c,Inspection_staff__c,Last_Reserve_RAES_Detail__c
////bp2        CDS_complete_time__c,
//                                            from Equipment_Set_Detail__c
//                                            where Equipment_Set__c = :equipmentSet.Id and Select_rental__c = true];
//        for (Equipment_Set_Detail__c equipmentSetDetail : equipmentSetDetails) {
//            //插入备品申请借出明细历史
//            Rental_Apply_Equipment_Set_Detail__c rentalApplyEquipmentSetDetail = new Rental_Apply_Equipment_Set_Detail__c();
//            rentalApplyEquipmentSetDetail.Rental_Apply__c = raes.Rental_Apply__c;//备品借出申请
//            rentalApplyEquipmentSetDetail.Rental_Apply_Equipment_Set__c = raes.Id;//备品Set借出历史
//            rentalApplyEquipmentSetDetail.Equipment_Set__c = equipmentSetDetail.Equipment_Set__c;//备品Set
//            rentalApplyEquipmentSetDetail.Asset__c = equipmentSetDetail.Asset__c;//保有设备
//            //插入备品申请借出明细历史
//            rentalApplyEquipmentSetDetailList.add(rentalApplyEquipmentSetDetail);
//            //更新备品Set明细
//            equipmentSetDetail.Check_lost_Item__c = null;//欠品确认结果
//            equipmentSetDetail.Pre_disinfection__c = null;//清洗前
//            equipmentSetDetail.Water_leacage_check__c = null;//测漏检查结果
//            equipmentSetDetail.Inspection_result_after__c = null;//回收后-检测结果
//            equipmentSetDetail.Arrival_in_wh__c = false;//回库确认
//            equipmentSetDetail.Lost_item_check_staff__c = null;//欠品确认者
//            equipmentSetDetail.CDS_staff__c = null;//消毒人员
//            equipmentSetDetail.Inspection_staff_After__c = null;//回收后-检测人员
//            equipmentSetDetail.Return_wh_chenk_staff__c = null;//回库确认者
//            equipmentSetDetail.Inspection_result__c = null;//发货前-检测结果
//            equipmentSetDetail.Inspection_staff__c = null;//发货前-检测人员
//            equipmentSetDetail.Pre_inspection_time__c = null;//备品Set用,发货前-检测合格时间
//            equipmentSetDetail.Lost_item_check_time__c = null;//备品Set用,欠品确认时间
////bp2            equipmentSetDetail.CDS_complete_time__c = null;//备品Set用,CDS完毕时间
//            equipmentSetDetail.After_Inspection_time__c = null;//备品Set用,回收后-检测完毕时间
//            equipmentSetDetail.Arrival_wh_time__c = null;//备品Set用,回库确认完毕时间
//            //更新备品Set明细
//            equipmentSetDetailList.add(equipmentSetDetail);
//            //借出设备机身号码
//            if (String.isNotBlank(equipmentSetDetail.Asset__r.SerialNumber)) {
//                if (assetFirst == false) {
//                    assetSerialNumber += ',' + equipmentSetDetail.Asset__r.SerialNumber + ',';
//                    assetFirst = true;
//                } else {
//                    assetSerialNumber += equipmentSetDetail.Asset__r.SerialNumber + ',';
//                }
//            }
//        }
//        Equipment_Set_Detail__c[] equipmentSetDetails2 = [select Id, Last_Reserve_RAES_Detail__c
//                                            from Equipment_Set_Detail__c
//                                            where Equipment_Set__c = :equipmentSet.Id and Select_rental__c = false];
//        for (Equipment_Set_Detail__c equipmentSetDetail : equipmentSetDetails2) {
//            equipmentSetDetail.Pre_Reserve_RAES_Detail__c = equipmentSetDetail.Last_Reserve_RAES_Detail__c;
//            equipmentSetDetail.Last_Reserve_RAES_Detail__c = null;
//            equipmentSetDetailList2.add(equipmentSetDetail);
//        }
//        //更新借出设备机身号码
//        raes.Rental_Asset_SerialNumber__c = assetSerialNumber;
//        Savepoint sp = Database.setSavepoint();
//        try {
//            if (equipmentSet != null) {
//                update equipmentSet;
//            }
//            if (rentalApplyEquipmentSetDetailList.size() > 0) {
//                insert rentalApplyEquipmentSetDetailList;
//            }
//            if (equipmentSetDetailList.size() > 0) {
//                for (Integer i=0; i<equipmentSetDetailList.size(); i++) {
//                    equipmentSetDetailList[i].Pre_Reserve_RAES_Detail__c = equipmentSetDetailList[i].Last_Reserve_RAES_Detail__c;
//                    equipmentSetDetailList[i].Last_Reserve_RAES_Detail__c = rentalApplyEquipmentSetDetailList[i].Id;
//                }
//                update equipmentSetDetailList;
//            }
//            if (equipmentSetDetailList2.size() > 0) {
//                update equipmentSetDetailList2;
//            }
//            if (String.isNotBlank(assetSerialNumber)) {
//                update raes;
//            }
//            eSetRefreshStatus(equipmentSet.Id);
//        } catch (System.Exception e) {
//            Database.rollback(sp);
//            return e.getMessage();
//        }
//        //返回结果
//        return checkRS;
//    }
    // 借出备品配套一览状态即时更新
    WebService static String eSetRefreshStatus(String raeSetId) {
        return eSetRefreshStatus(new List<String> {raeSetId});
    }
    public static String eSetRefreshStatus(List<String> raeSetIds) {
        List<Rental_Apply_Equipment_Set__c> updateList1 = new List<Rental_Apply_Equipment_Set__c>();
        if (!raeSetIds.isEmpty()) {
            for (Rental_Apply_Equipment_Set__c raes: [
                    select Id,Repair_Status1__c,Repair_Status_Text__c,Final_reply_day__c,Final_reply_day_text__c,
                            Received_Confirm_NG_Not_Return__c,Received_Confirm_NG_Not_Return_Text__c,
                            Received_Confirm_Status_Text__c, Received_Confirm_Status_F__c
                              , NG_Final_reply_day_Text__c
                              , NG_Final_reply_day_F__c
                              , Yizhouweixiu_Final_reply_day_Text__c
                              , Yizhouweixiu_Final_reply_day_F__c
                              , Extend_Final_reply_day_Text__c
                              , Extend_Final_reply_day_F__c
                              , QIS_Final_reply_day_Text__c
                              , QIS_Final_reply_day_F__c
                              , Repair_cancel_Final_reply_day_Text__c
                              , Repair_cancel_Final_reply_day_F__c
                              , Return_to_office_Final_reply_day_Text__c
                              , Return_to_office_Final_reply_day_F__c
                              , Repair_delete_Final_reply_day_Text__c
                              , Repair_delete_Final_reply_day_F__c
                              , Yigoudaihuo_Final_reply_day_Text__c
                              , Yigoudaihuo_Final_reply_day_F__c
                              , Guzhangpaicha_Final_reply_day_Text__c
                              , Guzhangpaicha_Final_reply_day_F__c
                              , Repair_Agreed_Quotation_Text__c
                              , Repair_Agreed_Quotation_F__c
                              , Return_to_office_Final_reply_day_U_RC__c
                              , Return_to_office_Final_reply_day_U_RC_F__c
                              , Extend_Date__c
                              , Extend_Date_F__c
                              , Received_NG_ReAssign_Text__c
                              , Received_NG_ReAssign__c
                        //【FY23大及巨大课题】长假备品借用延期开发 2022/12/27 start xxf
                              , Final_reply_day_Holiday_backup__c
                              , NG_Final_reply_day_F_Holiday_backup__c
                              , NG_Final_reply_day_Text_Holiday_backup__c
                              , Yizhouweixiu_Final_reply_day_F_Holiday__c
                              , Yizhouweixiu_Final_reply_day_TextHoliday__c
                              , Extend_Final_reply_day_F_Holiday_backup__c
                              , Extend_Final_reply_day_Text_Holiday_back__c
                              , QIS_Final_reply_day_F_Holiday_backup__c
                              , QIS_Final_reply_day_Text_Holiday_backup__c
                              , Repair_cancel_Final_reply_day_F_Holiday__c
                              , Repair_cancel_Final_reply_day_Text_Holid__c
                              , Return_to_office_Final_reply_day_F_Ho__c
                              , Return_to_office_Final_reply_day_Text_Ho__c
                              , Repair_delete_Final_reply_day_F_Holiday__c
                              , Repair_delete_Final_reply_day_Text_Ho__c
                              , Yigoudaihuo_Final_reply_day_F_Holiday__c
                              , Yigoudaihuo_Final_reply_day_Text_Holiday__c
                              , FGuzhangpaicha_Final_reply_day_F_Holiday__c
                              , Guzhangpaicha_Final_reply_day_Text_Holid__c
                              , Return_to_office_Final_reply_day_U_RC_Ho__c
                              , Return_to_office_Final_reply_day_U_RC_FH__c
                        //【FY23大及巨大课题】长假备品借用延期开发 2022/12/27 end xxf
                      from Rental_Apply_Equipment_Set__c
                     where Id IN :raeSetIds
            ]) {
                Rental_Apply_Equipment_Set__c upd = UpdateRentalApplyEquipmentSetBatch.setRAES(raes);
                if (upd != null) {
                    updateList1.add(upd);
                }
            }
        }
//bp2
//        List<Equipment_Set_Detail__c> esdList = [
//                select Id,Asset_condition__c,Asset_condition_Text__c,
//                       Serial_Lot__c,Serial_Lot_text__c,
//                       Asset__r.Loaner_accsessary__c, Loaner_accsessary_text__c,
//                       Active_judgement__c,Active_judgement_select__c,Active_judgement_text__c,
//                       Last_Reserve_RAES_Detail_RAES_F__c,Last_Reserve_RAES_Detail_RAES_Id__c,
//                       Equipment_Set_Last_Reserve_RAES_F__c,Equipment_Set_Last_Reserve_RAES_Id__c
//                  from Equipment_Set_Detail__c
//                 where Equipment_Set__c IN :eSetIds];
//        List<Equipment_Set_Detail__c> updateList2 = UpdateRentalApplyEquipmentSetBatch.setESD(esdList);
        Savepoint sp = Database.setSavepoint();
        try {
            if (!updateList1.isEmpty()) update updateList1;
//bp2            if (updateList2.size() > 0) update updateList2;
            return '1';
        } catch (System.Exception e) {
            Database.rollback(sp);
            return e.getMessage();
        }
        return '1';
    }
//bp2    //数出一共有多少个备品Set,出库指示,全部发货会用到
//    Webservice static Integer CntEquipmentSet(String Raid){
//        List<Rental_Apply_Equipment_Set__c> Raesc = [Select Equipment_Set__c from Rental_Apply_Equipment_Set__c where Rental_Apply__c=:Raid and Cancel_Select__c = false];
//        return Raesc.size();
//    }
    // 分配验证
    Webservice static String AssignBtn(String Rid){
        List<String> statusList = System.Label.StatusProcessState.split(',');
        List<Rental_Apply__c> raList = [select demo_purpose2__c,next_action__c,QIS_number__r.ReplaceDeliveryDate__c,Follow_UP_Opp__r.Shipping_Finished_Day_Func__c,repair__r.Repair_Final_Inspection_Date__c,repair__r.Return_Without_Repair_Date__c,Campaign__c,Campaign__r.Status,Repair__r.Repair_Shipped_Date__c,Campaign__r.IF_Approved__c,Campaign__r.Meeting_Approved_No__c,Campaign__r.Approved_Status__c   from Rental_Apply__c where id = :Rid];
        // 20210803 ljh  SFDC-C5HDC7 add 查询添加 Campaign__c,Campaign__r.Status,Repair__r.Repair_Shipped_Date__c
        if(raList.size()>0){
            Rental_Apply__c Ra = raList[0];
            // 20210803 ljh  SFDC-C5HDC7 update  判断增加 Ra.repair__c != null && start
            // if(Ra.repair__r.Repair_Final_Inspection_Date__c!=null){
            //     return '修理最终检测日不为空,不能分配';
            // }else if(Ra.repair__r.Return_Without_Repair_Date__c !=null){
            //     return '未修理归还日不为空,不能分配';
            if(Ra.Campaign__c != null && Ra.Campaign__r.Status == '取消'){
                return '学会取消,不可分配';
            }else if(Ra.repair__c != null && (Ra.repair__r.Repair_Final_Inspection_Date__c!=null || Ra.Repair__r.Repair_Shipped_Date__c != null)){
                return '修理有最终检测日或修理品返送日,不可分配';
            }else if(Ra.repair__c != null && Ra.repair__r.Return_Without_Repair_Date__c !=null){
                return '未修理归还日不为空,不能分配';
            // 20210803 ljh  SFDC-C5HDC7 add end
            }//1822 yc 20211021 start
            else if(Ra.demo_purpose2__c=='已购待货' && Ra.Follow_UP_Opp__r.Shipping_Finished_Day_Func__c!= null){
                return '已购待货目的,新品已有发货日,不可分配';
           }else if(Ra.demo_purpose2__c=='索赔QIS' && Ra.next_action__c=='无偿更换' && Ra.QIS_number__r.ReplaceDeliveryDate__c!= null){
                return '索赔QIS目的,QIS已有新品发货日,不可分配';
           }//1822 yc 20211108 end
           else if(Ra.Campaign__r.IF_Approved__c && Ra.Campaign__r.Meeting_Approved_No__c == null){
                return '已申请决裁但决裁编码为空';
           }//20220301 sx obpm修改
           else if(Ra.Campaign__r.IF_Approved__c && Ra.Campaign__r.Meeting_Approved_No__c != null && statusList.contains(Ra.Campaign__r.Approved_Status__c)){
                return '已申请决裁但决裁状态不符合条件';
           }//20220315 sx obpm备品决裁状态相关修改
           else{
                return 'Fin';
            }
        }else{
            return '该借出申请不存在';
        }
    }
//bp2
//    // 补充附属品
//    WebService static String fillOtherDetail(String eSetId) {
//        // 不打勾的不要补充,所以看 Active_judgement_select__c
//        List<Equipment_Set_Detail__c> sesd = [select Id from Equipment_Set_Detail__c where Equipment_Set__c = :eSetId and Asset__r.Loaner_accsessary__c = false and Active_judgement_select__c != :okStatus];
//        if (sesd.size() > 0) {
//            // 要等主机回来了才能补
//            return '请确认备品中主机状态';
//        }
//        List<Equipment_Set_Detail__c> oesd = [select Id, Last_Reserve_RAES_Detail__c from Equipment_Set_Detail__c where Equipment_Set__c = :eSetId and Asset__r.Loaner_accsessary__c = true and Equipment_Set__r.ES_Status__c not in ('引当可','引当済') and Select_rental__c = true];
//        // 因为有参照备品set的字段,所以为了达到状态变成99的目的,在这里做了入库的操作,而不是全清空。
//        for (Equipment_Set_Detail__c esd : oesd) {
//            if (esd.Last_Reserve_RAES_Detail__c != null) {
//                esd.Pre_Reserve_RAES_Detail__c = esd.Last_Reserve_RAES_Detail__c;
//                esd.Last_Reserve_RAES_Detail__c = null;
//            }
//            esd.Inspection_result_ng__c = null;
//            esd.Pre_inspection_time__c = null;
//            esd.Inspection_staff__c = null;
//            esd.Inspection_result__c = 'OK';
//            esd.Check_lost_Item__c = 'OK';
//            esd.Lost_item_check_time__c = null;
//            esd.Lost_item_check_staff__c = null;
//            esd.Lost_item_giveup__c = false;
//            esd.Inspection_result_after_ng__c = null;
//            esd.After_Inspection_time__c = null;
//            esd.Inspection_staff_After__c = null;
//            esd.Inspection_result_after__c = 'OK';
//            esd.Arrival_in_wh__c = true;
//            esd.Arrival_wh_time__c = null;
//            esd.Return_wh_chenk_staff__c = null;
//            esd.Pre_disinfection__c = null;
//            esd.Water_leacage_check__c = null;
////bp2            esd.CDS_staff__c = null;
////bp2            esd.CDS_complete_time__c = null;
//        }
//        Savepoint sp = Database.setSavepoint();
//        try {
//            update oesd;
//            return '1';
//        } catch (System.Exception e) {
//            Database.rollback(sp);
//            return e.getMessage();
//        }
//        return '1';
//    }
    Webservice static String postponeCheck(String endDate, Integer d) {
        Date before5day = getWD_addday(date.parse(endDate), d);
        if (Date.today() > before5day) {
            return System.Label.EquipmentRentalPostponeOverDeadline;
        }
        return 'OK';
    }
    // TODO please use public
    public static Date getWD_now(Date d) {
        List<OlympusCalendar__c> workday = [
                select Id, Date__c, IsWorkDay__c
                  from OlympusCalendar__c
                 where Date__c >= :d
                   and IsWorkDay__c = 1
                 order by Date__c
                 limit 1];
        Date selectDate = workday[0].Date__c;
        return selectDate;
    }
    // TODO please use public
    public static Date getWD_addday(Date d, Integer i) {
        if (d == Date.valueOf('4000-12-31')) {
            return d;
        }
        if (i >= 0) {
            List<OlympusCalendar__c> workday = [
                    select Id, Date__c, IsWorkDay__c
                      from OlympusCalendar__c
                     where Date__c >= :d
                       and IsWorkDay__c = 1
                     order by Date__c
                     limit :(i+1)];
            Date selectDate = workday[i].Date__c;
            return selectDate;
        } else {
            i = Math.abs(i);
            List<OlympusCalendar__c> workday = [
                    select Id, Date__c, IsWorkDay__c
                      from OlympusCalendar__c
                     where Date__c <= :d
                       and IsWorkDay__c = 1
                     order by Date__c desc
                     limit :(i+1)];
            Date selectDate = workday[i].Date__c;
            return selectDate;
        }
    }
    // pd:0代表当天,1代表第二天
    public Map<Date, Map<String, String>> getDateMap(Date sd, Date ed, Integer pd) {
        Map<Date, Map<String, String>> returnMap = new Map<Date, Map<String, String>>();
        List<OlympusCalendar__c> workdayList = [
                select Id, Date__c, IsWorkDay__c
                  from OlympusCalendar__c
                 where Date__c >= :sd
                   and Date__c <= :ed.addDays(15 + pd)                  // +15 的目的是、为了取得ed の 下一个工作日
                 order by Date__c];
        for (Integer i = 0; i < workdayList.size(); i++) {
            OlympusCalendar__c wd = workdayList[i];
            if (wd.Date__c > ed) break;
            Integer nextWordDays = 0;
            Map<String, String> valueMap = new Map<String, String>();
            valueMap.put('WorkDay', String.valueOf(wd.IsWorkDay__c));
            Integer maxJ = 15 + i + pd;
            if (maxJ > workdayList.size()) maxJ = workdayList.size();
            for (Integer j = i; j < maxJ; j++) {
                OlympusCalendar__c oc = workdayList[j];
                if (oc.IsWorkDay__c == 1) {
                    nextWordDays++;
                    if (nextWordDays == pd + 1) {
                        valueMap.put('Next', String.valueOf(oc.Date__c));
                        break;
                    }
                }
            }
            returnMap.put(wd.Date__c, valueMap);
        }
        return returnMap;
    }
//bp2
//// TODO katsu select in for, why?、getBetweenWD をなくす方向、Countだけなら、getOlympusWorkDayCount のメソッドがあります。
//    //工作日
//    WebService static String getBetweenWD(String sd, String ed) {
//        String betweenWD = '0';
//        if (sd != '' && ed != '') {
//            Date sdate = Date.valueof(sd.replace('/','-'));
//            Date edate = Date.valueof(ed.replace('/','-'));
//            List<OlympusCalendar__c> workdayList = [
//                    select Id, Date__c, IsWorkDay__c
//                      from OlympusCalendar__c
//                    where Date__c >= :sdate
//                       and Date__c <= :edate
//                       and IsWorkDay__c = 1
//                     order by Date__c];
//            betweenWD = String.valueOf(workdayList.size());
//        }
//        return betweenWD;
//    }
//bp2 OLY_OCM-113
    ////自然日
    //Webservice static String getBetweenNaturalDay(String sd, String ed){
    //    String betweenND = '0';
    //    if(sd != '' && ed != ''){
    //        Date sdate = Date.valueof(sd.replace('/','-'));
    //        Date edate = Date.valueof(ed.replace('/','-'));
    //        Integer days = sdate.daysBetween(edate);
    //        betweenND = String.valueOf(days);
    //    }
    //    return betweenND;
    //}
    //WebService static String sendAll(String raid) {
    //    return '1';
    //}
////bp2 OLY_OCM-81
//*************************Create 20160825 SWAG-AD59Z6 趙徳芳 Start*************************//
//    //全部发货
//    WebService static String DeliverAll(String raid){
//        List<Rental_Apply__c> raList = [select id,repair__r.Repair_Final_Inspection_Date__c,Bollow_Date__c,repair__r.Return_Without_Repair_Date__c, delivery_company__c, Return_to_wh_staff__c, Distributor_method__c, Tracking_Number__c,
//                                               Shippment_loaner_time__c,Status__c,All_Delivery_Flag_c__c
//                                          from Rental_Apply__c
//                                         where id = :raid];
//        Rental_Apply__c Ra = new Rental_Apply__c();
//        System.debug(raList);
//        if(raList.size()>0){
//            Ra = raList[0];
//            if(Ra.delivery_company__c == null||
//                Ra.Return_to_wh_staff__c == null ||
//                 Ra.Distributor_method__c == null ||
//                  Ra.Tracking_Number__c == null){
//                return '请补全发货物流信息';
//            }else if(Ra.Status__c !='出库指示完了'){
//                return '请先做出库指示后,再进行出库';
//            }
//            //else if(Ra.repair__c.Repair_Final_Inspection_Date__c<Ra.Bollow_Date__c){
//            //  return '修理最终检测日早于发货日,不能发货';
//            //}
//            else if(Ra.repair__c!=null&&Ra.repair__r.Repair_Final_Inspection_Date__c!=null){
//                return '修理最终检测日不为空,不能发货';
//            }else if(Ra.repair__c!=null&&Ra.repair__r.Return_Without_Repair_Date__c!=null){
//                return '未修理归还日不为空,不能发货';
//            }else{
//                List<Rental_Apply_Equipment_Set__c> DeliveryGoodDetail = new List<Rental_Apply_Equipment_Set__c>();
//                DeliveryGoodDetail = [select id,name,Equipment_Set__c from Rental_Apply_Equipment_Set__c where Shippment_loaner_time__c =null and Rental_Apply__c =:raid and  Cancel_Select__c = false];
//                if(DeliveryGoodDetail.size()>0){
//                    List<Rental_Apply_Equipment_Set__c> ExistSet  = new List<Rental_Apply_Equipment_Set__c>();
//                    ExistSet = [select id,name,Equipment_Set__c from Rental_Apply_Equipment_Set__c where Rental_Apply__c =:raid and Cancel_Select__c = false];
//                    List<String> sqlLine = new List<String>();
//                    for(Rental_Apply_Equipment_Set__c RAESC : DeliveryGoodDetail){
//                        sqlLine.add(RAESC.Equipment_Set__c);
//                    }
//                    List<Equipment_Set__c> ResultSet = new List<Equipment_Set__c>();
//                    ResultSet = [select id,Pre_inspection_time__c,Shippment_loaner_time__c from Equipment_Set__c where id in:sqlLine];
//                    System.debug(ResultSet);
//                    Integer Ncnt =0;
//                    for(Equipment_Set__c ESC : ResultSet){
//                        if(ESC.Shippment_loaner_time__c!=null){
//                            Ncnt=Ncnt+1;
//                        }
//                    }
//                    Savepoint sp = Database.setSavepoint();
//                    List<Equipment_Set__c> UpsertEsc = new List<Equipment_Set__c>();
//                    if(Ncnt==0){
//                        for(Equipment_Set__c ESC : ResultSet){
//                            Equipment_Set__c EscEle =  new Equipment_Set__c();
//                            EscEle.id=ESC.id;
//                            EscEle.delivery_company__c  = Ra.delivery_company__c;
//                            EscEle.Return_to_wh_staff__c  = Ra.Return_to_wh_staff__c;
//                            EscEle.Distributor_method__c  = Ra.Distributor_method__c;
//                            EscEle.Fedex_number__c  = Ra.Tracking_Number__c;
//                            EscEle.StockDown__c  = true;
//                            UpsertEsc.add(EscEle);
//                        }
//                        if(UpsertEsc.size()>0){
//                            Ra.All_Delivery_Flag_c__c = true;
//                            try{
//                                update Ra;
//                                update UpsertEsc;
//                                return 'Fin';
//                            }catch (System.Exception e){
//                                Database.rollback(sp);
//                                return e.getMessage();
//                            }
//                        }else{
//                            return '所选备品Set,已全部出库,无法再次出库';
//                        }
//                    }else{
//                        return '备品已出库';
//                    }
//                }else{
//                    return '本借出申请无需要出库的备品';
//                }
//            }
//        }else{
//            return '无效的备品借出申请';
//        }
//    }
////bp2 OLY_OCM-81
////*************************Create 20160825 SWAG-AD59Z6 趙徳芳 End***************************//
//    WebService static String receiveAll(String raid) {
//        List<Rental_Apply__c> raList = [select id, Return_Track_Company__c, Return_Distrubutor_Method__c, Return_Trake_Staff__c, Return_Track_Number__c,
//                                               Shippment_loaner_time__c
//                                          from Rental_Apply__c
//                                         where id = :raid];
//        if (raList.size() == 0) {
//            return '无效的备品借出申请';
//        }
//        Rental_Apply__c ra = raList[0];
//        if (ra.Return_Track_Company__c == null ||
//            ra.Return_Distrubutor_Method__c == null ||
//            ra.Return_Trake_Staff__c == null ||
//            ra.Return_Track_Number__c == '' || ra.Return_Track_Number__c == null) {
//            return '请补全回库物流信息';
//        }
//        if (ra.Shippment_loaner_time__c == null) {
//            return '备品还没出库';
//        }
//        List<Rental_Apply_Equipment_Set__c> raesList = [select id, Equipment_Set__c from Rental_Apply_Equipment_Set__c where Shippment_loaner_time__c != null and Rental_Apply__c = :raid and Cancel_Select__c = false];
//        if (raesList.size() == 0) {
//            return '备品还没出库';
//        }
//        Map<id,id> RaesEsIdMap = new Map<Id,id>();
//        List<String> esidList = new List<String>();
//        for (Rental_Apply_Equipment_Set__c raes : raesList) {
//            esidList.add(raes.Equipment_Set__c);
//            RaesEsIdMap.put(raes.Equipment_Set__c, raes.Id);
//        }
//        List<Equipment_Set__c> esList = [select id,Return_Fedex_number__c,Last_Reserve_Rental_Apply_Equipment_Set__c from Equipment_Set__c where id in :esidList];
//        List<Equipment_Set__c> updList = new List<Equipment_Set__c>();
//        for (Equipment_Set__c es : esList) {
//            if ((es.Return_Fedex_number__c == null || es.Return_Fedex_number__c == '') && es.Last_Reserve_Rental_Apply_Equipment_Set__c == RaesEsIdMap.get(es.Id)) {
//                Equipment_Set__c tmp = new Equipment_Set__c(
//                    id = es.id,
//                    Return_delivery_company__c = ra.Return_Track_Company__c,
//                    Received_confirmation_staff__c = ra.Return_Trake_Staff__c,
//                    Return_Distributor_method__c = ra.Return_Distrubutor_Method__c,
//                    Return_Fedex_number__c = ra.Return_Track_Number__c
//                );
//                updList.add(tmp);
//            }
//        }
//        if (updList.size() == 0) {
//            return '备品已经全部回库';
//        } else {
//            try {
//                update updList;
//            } catch (Exception ex) {
//                return ex.getMessage();
//            }
//        }
//        return '1';
//    }
    WebService static String RentalApplyCancel(String raid, Boolean autoCancel) {
        List<Rental_Apply__c> raList = [select id, Shipment_request_Cnt__c, Status__c, RA_Status__c, Shippment_loaner_cnt__c, Loaner_cancel_request__c, Arrival_wh_cnt__c,
                Cancel_Reason__c
                from Rental_Apply__c
                where id = :raid];
        List<Rental_Apply_Equipment_Set__c> raesList = [select id, StockDown_time__c
//bp2        , Equipment_Set__c
                                                          from Rental_Apply_Equipment_Set__c
                                                         where Rental_Apply__c = :raid
                                                           and Cancel_Select__c = false];
        List<Rental_Apply_Equipment_Set__c> updList = new List<Rental_Apply_Equipment_Set__c>();
        // List<Rental_Apply_Equipment_Set_Detail__c> delList = new List<Rental_Apply_Equipment_Set_Detail__c>();
        Set<Id> esIdSet = new Set<Id>();
        if (raList.size() <= 0) {
            return '备品申请书不存在。';
        }
        Rental_Apply__c ra = raList[0];
        if (ra.Status__c == '取消') {
            return '备品申请书已经取消。';
        }
        if (ra.Status__c == '删除') {
            return '备品申请书已经删除。';
        }
        if (ra.RA_Status__c == FixtureUtil.raStatusMap.get(FixtureUtil.RaStatus.Yi_Chu_Ku.ordinal()) || ra.Arrival_wh_cnt__c > 0) {
            return '备品已经出库,不能取消。';
        }
        User loginUser = [Select Id, Name, ProfileId From User where Id = :Userinfo.getUserId()];
        if(loginUser.ProfileId != System.Label.ProfileId_SystemAdmin && loginUser.ProfileId != System.Label.ProfileId_EquipmentCenter && !System.Label.ProfileId_EquCenCheckAndDepot.contains(loginUser.ProfileId)  && !System.Label.ProfileId_EquCenAdmin.contains(loginUser.ProfileId) && loginUser.ProfileId != System.Label.ProfileId_IThelp && ra.Shipment_request_Cnt__c > 0
        ){
            return '不能取消申请,请联系备品中心窗口取消。';
        }
        if (autoCancel == false && String.isBlank(ra.Cancel_Reason__c)) {
            return '必须输入取消理由。';
        }
        ra.Status__c = '取消';
        if (autoCancel) {
            ra.Cancel_Reason__c = '被动取消';
        }
        // Map<Id, Asset> assetMap = new Map<Id, Asset>();
        // for (Rental_Apply_Equipment_Set__c raes : raesList) {
        //     // if (raes.StockDown_time__c != null) {
        //         raes.Cancel_Select__c = true;
        //         raes.Cancel_Reason__c = ra.Loaner_cancel_request__c;
        //         if (autoCancel) {
        //             raes.Cancel_Reason__c = '被动取消';
        //         }
        //         updList.add(raes);
//bp2                esIdSet.add(raes.Equipment_Set__c);
            // } else {
                // delList.add(raes);
//bp2                esIdSet.add(raes.Equipment_Set__c);
            // }
            // Asset ass = new Asset(Id = raes.Asset__c, Last_Reserve_RAES_Detail__c = null);
            // assetMap.put(raes.Asset__c, ass);
        // }
        Savepoint sp = Database.setSavepoint();
        try {
            Set<Id> assetIdSet = new Set<Id>();
            for (Rental_Apply_Equipment_Set_Detail__c raesd : [SELECT Id, Asset__c
                                                                 FROM Rental_Apply_Equipment_Set_Detail__c
                                                                WHERE Rental_Apply__c = :raid
                                                                  FOR UPDATE]
            ) {
                if (String.isNotBlank(raesd.Asset__c)) {
                    assetIdSet.add(raesd.Asset__c);
                }
            }
            if (assetIdSet.size() > 0) {
                List<Asset> assetList = [SELECT Id FROM Asset WHERE Id = :assetIdSet FOR UPDATE];
            }
            update ra;
            //if (updList.size() > 0) update updList;
            // if (!assetMap.isEmpty()) update assetMap.values();
//bp2            ControllerUtil.setEquipmentSetProvisionFlg(esIdSet);
        } catch (Exception ex) {
            return ex.getMessage();
            Database.rollback(sp);
        }
        return '1';
    }
    // 一覧単位
    @AuraEnabled
    WebService static String setRaesShipment_request(String raesid) {
      return setShipment_requests(null, raesid);
    }
    // 申請書単位
    @AuraEnabled
    WebService static String setShipment_request(String raid) {
      return setShipment_requests(raid, null);
    }
    //出库指示按钮js一次最多更新200条,所以改在WebService做出库指示
    @AuraEnabled
    WebService static String setShipment_requests(String raid, String raesid) {
      Savepoint sp = Database.setSavepoint();
      try {
        //一览情况下检索一览对应的申请书Id,soql子查询不能和主查询是同一个表,单独检索一次
        if (String.isBlank(raid)) {
            List<Rental_Apply_Equipment_Set__c> raList = [select Id, Rental_Apply__c from Rental_Apply_Equipment_Set__c where id = :raesid];
            if (raList.size() > 0) {
                raid = raList[0].Rental_Apply__c;
            } else {
                //应该不会到这里
                return '没有可以出库指示的一览';
            }
        }
        String soql = 'SELECT Id'
                + ' FROM Rental_Apply_Equipment_Set__c '
                + ' WHERE Shippment_loaner_time2__c <> null '
                + ' AND Rental_Apply__c = :raid '
                + ' ORDER BY Id' ;
        List<Rental_Apply_Equipment_Set__c> shippedRaesList = Database.query(soql);
        String raesStrShipped = '';
        for (Rental_Apply_Equipment_Set__c raes : shippedRaesList) {
            raesStrShipped += raes.Id;
        }
        //Srring soql = "SELECT Id FROM Rental_Apply_Equipment_Set_Detail__c WHERE Rental_Apply__c = '{!Rental_Apply__c.Id}' AND Cancel_Select__c = false AND Rental_Num__c > 0 AND Rental_Apply_Equipment_Set__r.Wei_Assigned_Cnt__c = 0 AND Rental_Apply_Equipment_Set__r.Yi_Assigned_Cnt__c > 0 AND Shipment_request__c  = false";
        soql = 'SELECT Id, Rental_Apply__c, Rental_Apply_Equipment_Set__c'
                + ' FROM Rental_Apply_Equipment_Set_Detail__c '
                + ' WHERE ' + (String.isNotBlank(raesid) ? 'Rental_Apply_Equipment_Set__c = :raesid ' : 'Rental_Apply__c = :raid ')
                + ' AND Cancel_Select__c = false '
                + ' AND Rental_Num__c > 0 '
                + ' AND Rental_Apply_Equipment_Set__r.Wei_Assigned_Cnt__c = 0 '
                + ' AND Rental_Apply_Equipment_Set__r.Yi_Assigned_Cnt__c > 0 '
                + ' AND Shipment_request__c  = false'
                + ' ORDER BY Rental_Apply_Equipment_Set__c, Id';
        List<Rental_Apply_Equipment_Set_Detail__c> raesds = Database.query(soql);
        Map<Id, List<String>> rental_Asset_SerialNumberMap = new Map<Id, List<String>>();
        if (raesds.size() < 1) {
            return '没有可以出库指示的一览';
        } else {
            Set<Id> raesSet = new Set<Id>();
            String raesStrRequest = '';
            for (Rental_Apply_Equipment_Set_Detail__c raesd : raesds) {
                if (false == raesSet.contains(raesd.Rental_Apply_Equipment_Set__c)) {
                    raesSet.add(raesd.Rental_Apply_Equipment_Set__c);
                    raesStrRequest += raesd.Rental_Apply_Equipment_Set__c;
                }
                raesd.Shipment_request_time2__c = Datetime.now();
                raesd.Shipment_request__c = true;
            }
            // 出库后, 再次做出库指示的一览, 一定要个出过库的一览一样
            if (false == String.isBlank(raesStrShipped) && raesStrRequest != raesStrShipped) {
                return '不能做出库指示,需要分单后再操作';
            }
        }
        // add lc 20220927 SFDC-CJ48VE 备品预计出库日逻辑调整 start
        List<Rental_Apply_Equipment_Set__c> RAESRecords = [
                SELECT Id,Rental_Start_Date__c
                FROM Rental_Apply_Equipment_Set__c
                WHERE Rental_Apply__c = :raid
                AND Cancel_Select__c = False];
        for (Integer i = 0; i < RAESRecords.size(); i++) {
            // 备品预计出库日不一致,不可出库指示
            if (RAESRecords[i].Rental_Start_Date__c != RAESRecords[0].Rental_Start_Date__c) {
                return '备品预计出货日不一致,不可出库指示';
            }
        }
        // add lc 20220927 SFDC-CJ48VE 备品预计出库日逻辑调整 end
        Rental_Apply__c ra = new Rental_Apply__c(Id = raesds[0].Rental_Apply__c, Status__c = '已出库指示');
        update ra;
        Database.SaveResult[] results = Database.update(raesds);
        Database.SaveResult dmlResult = results[0];
        if (dmlResult.isSuccess()) {
            //明细更新成功后才更新一览的Rental_Asset_SerialNumber__c
            soql = 'SELECT Id, SerialNumber_text__c, Rental_Apply_Equipment_Set__c '
                    +'FROM Rental_Apply_Equipment_Set_Detail__c '
                    +'WHERE Rental_Apply__c = \'' + raesds[0].Rental_Apply__c + '\''
                    +'AND Shipment_request_time2__c != null '
                    +'AND Shipment_request__c = true '
                    +'AND SerialNumber_text__c != null '
                    +'ORDER BY Rental_Apply_Equipment_Set__c ';
            List<Rental_Apply_Equipment_Set_Detail__c> raesdSerialNumbers = Database.query(soql);
            for (Rental_Apply_Equipment_Set_Detail__c raesd : raesdSerialNumbers) {
                if (!rental_Asset_SerialNumberMap.containsKey(raesd.Rental_Apply_Equipment_Set__c)) {
                    // Asset__r.SerialNumber + ','
                    rental_Asset_SerialNumberMap.put(raesd.Rental_Apply_Equipment_Set__c, new List<String>());
                }
                rental_Asset_SerialNumberMap.get(raesd.Rental_Apply_Equipment_Set__c).add(raesd.SerialNumber_text__c);
            }
            List<Rental_Apply_Equipment_Set__c> raess = new List<Rental_Apply_Equipment_Set__c>();
            for (Id key : rental_Asset_SerialNumberMap.keySet()) {
                raess.add(new Rental_Apply_Equipment_Set__c(Id = key,
                        Rental_Asset_SerialNumber__c = ',' + String.join(rental_Asset_SerialNumberMap.get(key), ',') + ','));
            }
            if (!raess.isEmpty()) {
                update raess;
            }
            return '状态更新到已出库指示';
        } else {
            Database.rollback(sp);
            Database.Error emsg = dmlResult.getErrors()[0];
            return 'failed to update:' + emsg.getFields() +  ' ' + emsg.getMessage();
        }
      } catch (Exception ex) {
        Database.rollback(sp);
        return ex.getMessage();
      }
    }
    /**
     * 注残申请备品的管控
     */
     WebService static String RentalApplyCheckForSAoneEle(String SaID) {
        Statu_Achievements__c Sac = [select id,
            SalesChannel__c,
            Opportunity__r.Sales_Root__c,
            Status_1__c,
            Status_2_Formula__c,
            Opp_Number__c,
            ContractNO__c,
            FirstApproveDate__c,
            CreatedDate,
            X30_Deposit_Day__c,
            Deposit_In_Full_Day__c,
            DeliveryDate__c,
            Backorder_complete_day__c,
            DeliveryStatus__c
        from Statu_Achievements__c where id = :SaID];
        if(Sac.Opportunity__r.Sales_Root__c == '販売店'){
            if(Sac.Opp_Number__c.contains('GI')||Sac.Opp_Number__c.contains('BF')||Sac.Opp_Number__c.contains('ET') ){
                //modify by lyh 20220606 start 已购待货逻辑调整
                //客户GIR订单,注残状态2是“12付全款-14已发货“这个区间且发货状态为”未交付、和部分交付“时,自付款日起第31天未生成”客户订单最终发货日“时,方可以提交”已购待货“目的的备品申请
                //if(Sac.Status_1__c == '注残' && (Sac.Status_2_Formula__c == '12 已订货・付全款'||Sac.Status_2_Formula__c == '13 待发货')){
                //    if((Date.today().addDays(-30)>Sac.Deposit_In_Full_Day__c)&&Sac.DeliveryDate__c == null){
                if((Sac.Status_2_Formula__c == '12 已订货・付全款' || Sac.Status_2_Formula__c == '13 待发货' || Sac.Status_2_Formula__c == '14 已发货')
                    && (Sac.DeliveryStatus__c == '未交付' || Sac.DeliveryStatus__c == '部分交付')) {
                    if((Date.today().addDays(-30) > Sac.Deposit_In_Full_Day__c) && Sac.Backorder_complete_day__c == null) {
                //modify by lyh 20220606 end 已购待货逻辑调整
                        return 'Fin';
                    } else {
                        return '经销商内科订单不在申请期内,不能申请备品';
                    }
                }else{
                    return '经销商内科订单状态不符合备品申请资格,不能申请备品';
                }
            }else if(Sac.Opp_Number__c.contains('SP')){
                //modify by lyh 20220606 start 已购待货逻辑调整
                //客户SP订单,注残状态2是“11付定金-14已发货“这个区间且发货状态为”未交付、和部分交付“时,自付款日起第61天未生成”客户订单最终发货日“时,方可以提交”已购待货“目的的备品申请
                //if(Sac.Status_1__c == '注残' && (Sac.Status_2_Formula__c == '11 已订货・付订金'||Sac.Status_2_Formula__c == '12 已订货・付全款'||Sac.Status_2_Formula__c == '13 待发货')){
                //    if((Date.today().addDays(-60)>Sac.X30_Deposit_Day__c )&&Sac.DeliveryDate__c == null){
                if((Sac.Status_2_Formula__c == '11 已订货・付订金'||Sac.Status_2_Formula__c == '12 已订货・付全款'||Sac.Status_2_Formula__c == '13 待发货'||Sac.Status_2_Formula__c=='14 已发货')
                    && (Sac.DeliveryStatus__c == '未交付' || Sac.DeliveryStatus__c == '部分交付')) {
                    if((Date.today().addDays(-60) > Sac.X30_Deposit_Day__c ) && Sac.Backorder_complete_day__c == null){
                //modify by lyh 20220606 end 已购待货逻辑调整
                        return 'Fin';
                    }else{
                        return '经销商SP订单不在申请期内,不能申请备品';
                    }
                }else{
                    return '经销商SP订单状态不符合备品申请资格,不能申请备品';
                }
            }else{
                return '注残销售渠道类别不在可申请备品范围内';
            }
        }else if(Sac.Opportunity__r.Sales_Root__c == 'OCM直接販売'){
            if(Sac.Opp_Number__c.contains('GI')||Sac.Opp_Number__c.contains('BF')||Sac.Opp_Number__c.contains('ET')){
                //modify by lyh 20220606 start 已购待货逻辑调整
                //注残状态2是“9已录订单未付款-14已发货“这个区间且发货状态为”未交付、和部分交付“且“销售渠道为直销时”,GIR订单自订单录入日起第31天/未生成”客户订单最终发货日“时,方可以提交”已购待货“目的的备品申请
                //if(Sac.Status_1__c == '注残' && (Sac.Status_2_Formula__c == '09 已录入订单未付款'||Sac.Status_2_Formula__c == '10 库存已预留・未付款'||Sac.Status_2_Formula__c == '11 已订货・付订金'||Sac.Status_2_Formula__c == '12 已订货・付全款'||Sac.Status_2_Formula__c == '13 待发货')){
                //    if((Date.today().addDays(-30)>Sac.FirstApproveDate__c )&&Sac.DeliveryDate__c == null){
                if((Sac.Status_2_Formula__c == '09 已录入订单未付款'||Sac.Status_2_Formula__c == '10 库存已预留・未付款'||Sac.Status_2_Formula__c == '11 已订货・付订金'||Sac.Status_2_Formula__c == '12 已订货・付全款'||Sac.Status_2_Formula__c == '13 待发货'||Sac.Status_2_Formula__c=='14 已发货')
                    && (Sac.DeliveryStatus__c == '未交付' || Sac.DeliveryStatus__c == '部分交付')){
                    if((Date.today().addDays(-30) > Sac.FirstApproveDate__c ) && Sac.Backorder_complete_day__c == null) {
                //modify by lyh 20220606 end 已购待货逻辑调整
                        return 'Fin';
                    }else{
                        return 'OCM直销内科订单不在申请期内,不能申请备品';
                    }
                }else{
                    return 'OCM直销内科订单状态不符合备品申请资格,不能申请备品';
                }
            }else if(Sac.Opp_Number__c.contains('SP')){
                    //modify by lyh 20220606 start 已购待货逻辑调整
                    //注残状态2是“9已录订单未付款-14已发货“这个区间且发货状态为”未交付、和部分交付“且“销售渠道为直销时”,SP订单61天未生成”客户订单最终发货日“时,方可以提交”已购待货“目的的备品申请
                    //if(Sac.Status_1__c == '注残' && (Sac.Status_2_Formula__c == '09 已录入订单未付款'||Sac.Status_2_Formula__c == '10 库存已预留・未付款'||Sac.Status_2_Formula__c == '11 已订货・付订金'||Sac.Status_2_Formula__c == '12 已订货・付全款'||Sac.Status_2_Formula__c == '13 待发货')){
                    //    if((Date.today().addDays(-60)>Sac.FirstApproveDate__c )&&Sac.DeliveryDate__c == null){
                    if((Sac.Status_2_Formula__c == '09 已录入订单未付款'||Sac.Status_2_Formula__c == '10 库存已预留・未付款'||Sac.Status_2_Formula__c == '11 已订货・付订金'||Sac.Status_2_Formula__c == '12 已订货・付全款'||Sac.Status_2_Formula__c == '13 待发货'||Sac.Status_2_Formula__c=='14 已发货')
                        && (Sac.DeliveryStatus__c == '未交付' || Sac.DeliveryStatus__c == '部分交付')) {
                        if((Date.today().addDays(-60) > Sac.FirstApproveDate__c ) && Sac.Backorder_complete_day__c == null) {
                    //modify by lyh 20220606 end 已购待货逻辑调整
                            return 'Fin';
                        }else{
                            return 'OCM直销SP订单不在申请期内,不能申请备品';
                        }
                    }else{
                        return 'OCM直销SP订单状态不符合备品申请资格,不能申请备品';
                    }
                }else{
                    return '注残销售渠道类别不在可申请备品范围内。';
                }
        }else{
            return '销售渠道未知,不能新建';
        }
     }
//bp2
    //public static String RentalApplyCheckForSA(String raid,String SaID) {
    //    List<String> ProList = new List<String>();
    //    if(raid!=null){
    //        Rental_Apply__c Ra = [select id,
    //            Product_category__c,
    //            ProductNameNum1__c,
    //            ProductNameNum10__c,
    //            ProductNameNum2__c,
    //            ProductNameNum3__c,
    //            ProductNameNum4__c,
    //            ProductNameNum5__c,
    //            ProductNameNum6__c,
    //            ProductNameNum7__c,
    //            ProductNameNum8__c,
    //            ProductNameNum9__c
    //        from
    //            Rental_Apply__c
    //        where
    //            id=: Raid];
    //        ProList.add(Ra.ProductNameNum1__c);
    //         ProList.add(Ra.ProductNameNum2__c);
    //          ProList.add(Ra.ProductNameNum3__c);
    //           ProList.add(Ra.ProductNameNum4__c);
    //            ProList.add(Ra.ProductNameNum5__c);
    //             ProList.add(Ra.ProductNameNum6__c);
    //              ProList.add(Ra.ProductNameNum7__c);
    //               ProList.add(Ra.ProductNameNum8__c);
    //                ProList.add(Ra.ProductNameNum9__c);
    //                 ProList.add(Ra.ProductNameNum10__c);
    //    List<asset> ast = [select
    //                            id,
    //                            Backorder__c
    //                        from
    //                            asset
    //                        where
    //                            Backorder__c =:SaID];
    //    for(asset asl : ast){
    //        for(String proStr : ProList){
    //            if(asl.Id == proStr){
    //                return '产品已发货,不能申请备品';
    //            }
    //        }
    //    }
    //    }
    //    Statu_Achievements__c Sac = [select id,
    //        SalesChannel__c,
    //        Status_1__c,
    //        Status_2_Formula__c,
    //        Opp_Number__c,
    //        CreatedDate,
    //        FirstApproveDate__c,
    //        Opportunity__r.Sales_Root__c,
    //        X30_Deposit_Day__c,
    //        Deposit_In_Full_Day__c,
    //        DeliveryDate__c
    //    from Statu_Achievements__c where id = :SaID];
    //    if(Sac.Opportunity__r.Sales_Root__c == '販売店'){
    //        if(Sac.Opp_Number__c.contains('GI')||Sac.Opp_Number__c.contains('BF')||Sac.Opp_Number__c.contains('ET') ){
    //            if(Sac.Status_1__c == '注残' && (Sac.Status_2_Formula__c == '12 已订货・付全款'||Sac.Status_2_Formula__c == '13 待发货')){
    //                if((Date.today().addDays(-30)>Sac.Deposit_In_Full_Day__c)&&Sac.DeliveryDate__c == null){
    //                    return 'Fin';
    //                }else{
    //                    return '经销商内科订单不在申请期内,不能申请备品';
    //                }
    //            }else{
    //                return '经销商内科订单状态不符合备品申请资格,不能申请备品';
    //            }
    //        }else if(Sac.Opp_Number__c.contains('SP')){
    //            if(Sac.Status_1__c == '注残' && (Sac.Status_2_Formula__c == '11 已订货・付订金'||Sac.Status_2_Formula__c == '12 已订货・付全款'||Sac.Status_2_Formula__c == '13 待发货')){
    //                if((Date.today().addDays(-60)>Sac.X30_Deposit_Day__c )&&Sac.DeliveryDate__c == null){
    //                    return 'Fin';
    //                }else{
    //                    return '经销商SP订单不在申请期内,不能申请备品';
    //                }
    //            }else{
    //                return '经销商SP订单状态不符合备品申请资格,不能申请备品';
    //            }
    //        }else{
    //            return 'Denied';
    //        }
    //    }else if(Sac.Opportunity__r.Sales_Root__c == 'OCM直接販売'){
    //        if(Sac.Opp_Number__c.contains('GI')||Sac.Opp_Number__c.contains('BF')||Sac.Opp_Number__c.contains('ET')){
    //            if(Sac.Status_1__c == '注残' && (Sac.Status_2_Formula__c == '09 已录入订单未付款'||Sac.Status_2_Formula__c == '10 库存已预留・未付款'||Sac.Status_2_Formula__c == '11 已订货・付订金'||Sac.Status_2_Formula__c == '12 已订货・付全款'||Sac.Status_2_Formula__c == '13 待发货')){
    //                if((Date.today().addDays(-30)>Sac.FirstApproveDate__c )&&Sac.DeliveryDate__c == null){
    //                    return 'Fin';
    //                }else{
    //                    return 'OCM直销内科不在申请期内,不能申请备品';
    //                }
    //            }else{
    //                 return 'OCM直销内科订单状态不符合备品申请资格,不能申请备品';
    //            }
    //        }else if(Sac.Opp_Number__c.contains('SP')){
    //            if(Sac.Status_1__c == '注残' && (Sac.Status_2_Formula__c == '09 已录入订单未付款'||Sac.Status_2_Formula__c == '10 库存已预留・未付款'||Sac.Status_2_Formula__c == '11 已订货・付订金'||Sac.Status_2_Formula__c == '12 已订货・付全款'||Sac.Status_2_Formula__c == '13 待发货')){
    //                if((Date.today().addDays(-60)>Sac.FirstApproveDate__c )&&Sac.DeliveryDate__c == null){
    //                    return 'Fin';
    //                }else{
    //                    return '直销SP订单不在申请期内,不能申请备品';
    //                }
    //            }else{
    //                 return 'OCM直销SP订单状态不符合备品申请资格,不能申请备品';
    //            }
    //        }else{
    //            return 'Fin';
    //        }
    //    }else{
    //        return '销售渠道未知,不能新建';
    //    }
    //}
// bp2
    ///**
    //备品是否可以继续操作的管控
    //*/
    //public static String rentalContiuneCheck(List<Rental_Apply__c> newList,Map<Id, Rental_Apply__c> oldMap){
    //    List<String> RaidList = new List<String>();
    //    for(Rental_Apply__c ra : newList){
    //        RaidList.add(ra.id);
    //    }
    //    List<Rental_Apply__c> RaTarList = [select Campaign__c,Repair__c,
    //                                            Campaign__r.Status,Repair__r.Repair_Final_Inspection_Date__c,Repair__r.Repair_Shipped_Date__c
    //                                        from Rental_Apply__c
    //                                        where id=:RaidList];
    //    for(Rental_Apply__c RaTar : RaTarList){
    //    String RsStr = '';
    //        if( RaTar.Campaign__r.Status == '取消'||
    //                RaTar.Campaign__r.Status == '取消申请中'||
    //                    RaTar.Campaign__r.Status == '已提交报告'||
    //                        RaTar.Campaign__r.Status == '已结束'){
    //            RsStr = RentalApplyWebService.rentalContiuneinfoCheck(newList,oldMap);
    //            if(RsStr == 'Denied'){
    //                return '学会已结束,申请单不能继续操作了';
    //            }else{
    //                return 'Fin';
    //            }
    //        }else if(   RaTar.Repair__r.Repair_Final_Inspection_Date__c!=null){
    //            RsStr = RentalApplyWebService.rentalContiuneinfoCheck(newList,oldMap);
    //            if(RsStr == 'Denied'){
    //                return '存在修理最终检测日,申请单不能继续了';
    //            }else{
    //                return 'Fin';
    //            }
    //        }else if(   RaTar.Repair__r.Repair_Shipped_Date__c!=null){
    //            RsStr = RentalApplyWebService.rentalContiuneinfoCheck(newList,oldMap);
    //            if(RsStr == 'Denied'){
    //                return '存在RC修理返送日,申请单不能继续了';
    //            }else{
    //                return 'Fin';
    //            }
    //        }else{
    //            return 'Fin';
    //        }
    //    }
    //    return 'Fin';
    //}
//bp2
//    public static String rentalContiuneinfoCheck(List<Rental_Apply__c> newList,Map<Id, Rental_Apply__c> oldMap){
//        for(Rental_Apply__c Rac : newList){
//        if(
//    //bp2  Trigger.oldMap.get(Rac.Id).get('HP_received_ng_num__c') != Rac.HP_received_ng_num__c ||
//            Trigger.oldMap.get(Rac.Id).get('StockDown_ng_num__c') != Rac.StockDown_ng_num__c ||
//             Trigger.oldMap.get(Rac.Id).get('Asset_return_time__c') != Rac.Asset_return_time__c ||
//              Trigger.oldMap.get(Rac.Id).get('Count_Extend__c') != Rac.Count_Extend__c ||
//                Trigger.oldMap.get(Rac.Id).get('Max_Extend_workday__c') != Rac.Max_Extend_workday__c ||
//    //bp2        Trigger.oldMap.get(Rac.Id).get('Lost_item_ng_num__c') != Rac.Lost_item_ng_num__c ||
//                  Trigger.oldMap.get(Rac.Id).get('Lost_item_finish__c') != Rac.Lost_item_finish__c ||
//                   Trigger.oldMap.get(Rac.Id).get('Last_Assigned_Date__c') != Rac.Last_Assigned_Date__c ||
//                    Trigger.oldMap.get(Rac.Id).get('Return_dadeline_final__c') != Rac.Return_dadeline_final__c ||
//                     Trigger.oldMap.get(Rac.Id).get('Rental_Apply_Equipment_Set_Cnt__c') != Rac.Rental_Apply_Equipment_Set_Cnt__c ||
//                      Trigger.oldMap.get(Rac.Id).get('Pre_inspection_ng_num__c') != Rac.Pre_inspection_ng_num__c ||
//                       Trigger.oldMap.get(Rac.Id).get('Shippment_ng_num__c') != Rac.Shippment_ng_num__c ||
//                        Trigger.oldMap.get(Rac.Id).get('ShelfUp_ng_num__c') != Rac.ShelfUp_ng_num__c ||
//                         Trigger.oldMap.get(Rac.Id).get('Loaner_received_ng_num__c') != Rac.Loaner_received_ng_num__c ||
//                          Trigger.oldMap.get(Rac.Id).get('Arrival_wh_cnt__c') != Rac.Arrival_wh_cnt__c ||
//                           Trigger.oldMap.get(Rac.Id).get('Shippment_loaner_cnt__c') != Rac.Shippment_loaner_cnt__c ||
//                            Trigger.oldMap.get(Rac.Id).get('Shipment_requested_cnt__c') != Rac.Shipment_requested_cnt__c ||
//                             Trigger.oldMap.get(Rac.Id).get('Pre_inspection_ng_cnt2__c') != Rac.Pre_inspection_ng_cnt2__c ||
//                              Trigger.oldMap.get(Rac.Id).get('Pre_inspection_ng_cnt__c') != Rac.Pre_inspection_ng_cnt__c ||
//                               Trigger.oldMap.get(Rac.Id).get('Shippment_loaner_time__c') != Rac.Shippment_loaner_time__c ||
//                                Trigger.oldMap.get(Rac.Id).get('Asset_loaner_closed_date__c') != Rac.Asset_loaner_closed_date__c ||
//                                 Trigger.oldMap.get(Rac.Id).get('Asset_loaner_start_date__c') != Rac.Asset_loaner_start_date__c ||
//                                  Trigger.oldMap.get(Rac.Id).get('Disposal_num__c') != Rac.Disposal_num__c ||
//                                   Trigger.oldMap.get(Rac.Id).get('Asset_return_ng_num__c') != Rac.Asset_return_ng_num__c ||
//                                    Trigger.oldMap.get(Rac.Id).get('Received_Confirm_NG_amount__c') != Rac.Received_Confirm_NG_amount__c ||
//                                     Trigger.oldMap.get(Rac.Id).get('Received_Confirm_NG_Not_Return__c') != Rac.Received_Confirm_NG_Not_Return__c ||
////bp2                                 Trigger.oldMap.get(Rac.Id).get('Loaner_received_time__c') != Rac.Loaner_received_time__c ||
//                                       Trigger.oldMap.get(Rac.Id).get('Return_Track_Company__c') != Rac.Return_Track_Company__c ||
//                                        Trigger.oldMap.get(Rac.Id).get('Return_Distrubutor_Method__c') != Rac.Return_Distrubutor_Method__c ||
//                                         Trigger.oldMap.get(Rac.Id).get('Return_Trake_Staff__c') != Rac.Return_Trake_Staff__c ||
//                                          Trigger.oldMap.get(Rac.Id).get('Return_Track_Number__c') != Rac.Return_Track_Number__c ||
//                                          Trigger.oldMap.get(Rac.Id).get('HP_received_sign_day__c') != Rac.HP_received_sign_day__c ||
//                                         Trigger.oldMap.get(Rac.Id).get('HP_received_sign_rich__c') != Rac.HP_received_sign_rich__c ||
//                                        Trigger.oldMap.get(Rac.Id).get('HP_received_sign_text__c') != Rac.HP_received_sign_text__c ||
//                                       Trigger.oldMap.get(Rac.Id).get('HP_received_sign_NG__c') != Rac.HP_received_sign_NG__c ||
//                                      Trigger.oldMap.get(Rac.Id).get('HP_received_sign_NG_Reason__c') != Rac.HP_received_sign_NG_Reason__c ||
//                                     Trigger.oldMap.get(Rac.Id).get('AssetManageConfirm__c') != Rac.AssetManageConfirm__c ||
//                                    Trigger.oldMap.get(Rac.Id).get('Loaner_cancel_request__c') != Rac.Loaner_cancel_request__c ||
//                                   Trigger.oldMap.get(Rac.Id).get('Status__c') != Rac.Status__c
//        ){
//        return 'Fin';
//    }
//}
//    return 'Denied';
//    }
}
force-app/main/default/classes/RentalApplyWebService.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>40.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/ReportController.cls
@@ -218,7 +218,7 @@
    //给提交相应的js提供初始化数据
    @AuraEnabled
    public static void updateForSubmitButton(String reocrdId){
    public static String updateForSubmitButton(String reocrdId){
        try {
            Report__c rac = new Report__c();
            rac.Id = reocrdId;
@@ -226,26 +226,34 @@
            rac.Submit_time__c = Datetime.now();
            rac.Submit_report_day__c = Date.today();
            update rac;
            return null;
        } catch (Exception e) {
            throw new AuraHandledException(e.getMessage());
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',') + 1;
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
    //OPDtoSIS操作更新相应数据
    @AuraEnabled
    public static void updateForOPDtoSISButton(String recordId){
    public static String updateForOPDtoSISButton(String recordId){
        try {
            Report__c rac = new Report__c();
            rac.Id = recordId;
            rac.RecordTypeId = Schema.SObjectType.Report__c.getRecordTypeInfosByName().get(LightingButtonConstant.RECORD_TYPE_NAME_BY_OPD).getRecordTypeId();
            update rac;
            return null;
        } catch (Exception e) {
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',') + 1;
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
    //取消提交操作更新相应数据
    @AuraEnabled
    public static void updateForCancelSubmitReportButton(String recordId){
    public static String updateForCancelSubmitReportButton(String recordId){
        try {
            Report__c rac = new Report__c();
            rac.Id = recordId;
@@ -253,33 +261,45 @@
            rac.Submit_report_day__c = null;
            rac.Submit_time__c = null;
            update rac;
            return null;
        } catch (Exception e) {
            throw new AuraHandledException(e.getMessage());
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',') + 1;
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
    //完毕操作更新相应数据
    @AuraEnabled
    public static void updateForCompleteButton(String recordId){
    public static String updateForCompleteButton(String recordId){
        Report__c rac = new Report__c();
        try {
            rac.Id = recordId;
            rac.Status__c = LightingButtonConstant.STATUS_COMPLETE;
            rac.RecordTypeId = Schema.SObjectType.Report__c.getRecordTypeInfosByName().get(LightingButtonConstant.VOC_NAME).getRecordTypeId();
            update rac;
            return null;
        } catch (Exception e) {
            throw new AuraHandledException(e.getMessage());
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',') + 1;
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
    //OCSM要报告操作更新相应数据
    @AuraEnabled
    public static void updateForOCSMToReportButton(String recordId){
    public static String updateForOCSMToReportButton(String recordId){
        try {
            Report__c rac = new Report__c();
            rac.Id = recordId;
            rac.OCSMAdministrativeReportStatus__c = LightingButtonConstant.STATUS_TO_BE_REPORTED;
            update rac;
            return null;
        } catch (Exception e) {
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',') + 1;
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
@@ -293,50 +313,65 @@
            update rac;
            return null;
        } catch (Exception e) {
            return e.getMessage();
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',') + 1;
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
    //DispatchOCSMQARA操作更新相应数据
    @AuraEnabled
    public static void updateForDispatchOCSMQARAButton(String recordId){
    public static String updateForDispatchOCSMQARAButton(String recordId){
        try {
            Report__c rac = new Report__c();
            rac.Id = recordId;
            rac.Dispatch_OCSM_QARA__c = true;
            update rac;
            return null;
        } catch (Exception e) {
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',');
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
    //OCSM不要报告操作更新相应数据
    @AuraEnabled
    public static void updateForOCSMNoToReportButton(String recordId){
    public static String updateForOCSMNoToReportButton(String recordId){
        try {
            Report__c rac = new Report__c();
            rac.Id = recordId;
            rac.OCSMAdministrativeReportStatus__c  = LightingButtonConstant.STATUS_TO_NOT_REPORT;
            update rac;
            return null;
        } catch (Exception e) {
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',');
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
    //取消操作更新相应数据
    @AuraEnabled
    public static void updateForCancelButton(String recordId){
    public static String updateForCancelButton(String recordId){
        try {
            Report__c rac = new Report__c();
            rac.Id = recordId;
            rac.Status__c = LightingButtonConstant.STATUS_CANCEL;
            update rac;
            return null;
        } catch (Exception e) {
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',');
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
    
    //VOC结果确认更新相应数据
    @AuraEnabled
    public static void updateForVOCConfirmButton(String recordId,String Satisfy,String Satisfy1){
    public static String updateForVOCConfirmButton(String recordId,String Satisfy,String Satisfy1){
        try {
            Report__c rac = new Report__c();
            rac.Id = recordId;
@@ -362,8 +397,12 @@
                }
                }
            update rac;
            return null;
        } catch (Exception e) {
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',');
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
    //VOC回答更新相应数据
@@ -388,7 +427,7 @@
    //提交竞争对手报告更新相应数据
    @AuraEnabled
    public static void updateForSubmitCompetitorReportButton(String recordId){
    public static String updateForSubmitCompetitorReportButton(String recordId){
        try {
            Report__c rac = new Report__c();
            rac.Id = recordId;
@@ -397,13 +436,17 @@
            rac.Submit_report_day__c = Date.today();
            rac.Date__c = Date.today();
            update rac;
            return null;
        } catch (Exception e) {
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',');
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
    //VOC回答更新相应数据
    @AuraEnabled
    public static void updateForVOCSubmitButton(String recordId ,String createdById){
    public static String updateForVOCSubmitButton(String recordId ,String createdById){
        try {
            Report__c rac = [select Status__c,JingliApprovalManager__r.Id,BuchangApprovalManager__r.Id,SalesManager__r.Id,BuchangApprovalManagerSales__r.Id,ZongjianApprovalManager__c,Submit_time__c,Submit_report_day__c,Owner.Id from Report__c where Id = :recordId];
            // share
@@ -424,15 +467,18 @@
            userAccess.add(rac.ZongjianApprovalManager__c + LightingButtonConstant.USER_ACCESS_READ);
            String rtn = ControllerUtil.setSObjectShare(LightingButtonConstant.SOBJECT_NAME_OF_REPORT_SHARE,LightingButtonConstant.SOBJECT_NAME_OF_VOC_SHARE,recordId,userAccess,rac.Owner.Id);
            if (rtn != LightingButtonConstant.OK) {
            return;
            return null;
            }
            rac.Status__c = LightingButtonConstant.STATUS_VOC_WRITE_OVER;
            rac.Submit_time__c = Date.today();
            rac.Submit_report_day__c = Date.today();
            update rac;
            return null;
        } catch (Exception e) {
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',');
            Integer right = eMessage.length();
            return eMessage.substring(left, right);
        }
    }
    //VOC判定更新相应数据
@@ -480,13 +526,17 @@
    }
    //VOC完毕操作更新相应数据
    @AuraEnabled
    public static void updateForVOCFinishButton (String recordId) {
    public static String updateForVOCFinishButton (String recordId) {
        try {
            Report__c report = [select Id,Status__C from Report__c where Id = :recordId];
            report.Status__c = LightingButtonConstant.STATUS_VOC_FINISH;
            update report;
            return null;
        } catch (Exception e) {
            System.debug(LoggingLevel.INFO, '*** e: ' + e);
            String eMessage = e.getMessage();
            Integer left = eMessage.indexOf(',');
            Integer right = eMessage.length();
            return eMessage.substring(left,right);
        }
    }
    public class InitData{
force-app/main/default/classes/ReturnDeliverySlipController.cls
New file
@@ -0,0 +1,37 @@
public with sharing class ReturnDeliverySlipController {
    public ReturnDeliverySlipController() {
    }
    @AuraEnabled
    public static InitData init(String recordId){
        InitData res = new InitData();
        try {
            Rental_Apply__c ra = [SELECT Id, Name, Rental_Apply_Equipment_Set_Cnt__c, Loaner_received_ng_num__c from Rental_Apply__c where Id = :recordId];
            res.raeSet = null;
            if(ra.Rental_Apply_Equipment_Set_Cnt__c > 0){
                List<Rental_Apply_Equipment_Set_Detail__c> raSet = [SELECT Id, Name from Rental_Apply_Equipment_Set_Detail__c WHERE Received_Confirm_F__c = 'NG' AND Cancel_Select__c = false AND Rental_Apply__c = :recordId];
                res.raeSet = raSet;
                system.debug('raeSet===='+res.raeSet);
            }
            res.Name = ra.Name;
            res.RentalApplyEquipmentSetCnt = Integer.valueOf(ra.Rental_Apply_Equipment_Set_Cnt__c);
            res.LoanerReceivedNgNum = Integer.valueOf(ra.Loaner_received_ng_num__c);
        }
        catch (Exception e) {
            system.debug('INFO****' + e);
        }
        return res;
    }
    public class InitData{
        @AuraEnabled
        public Integer RentalApplyEquipmentSetCnt;
        @AuraEnabled
        public Integer LoanerReceivedNgNum;
        @AuraEnabled
        public String Name;
        @AuraEnabled
        public List<Rental_Apply_Equipment_Set_Detail__c> raeSet;
    }
}
force-app/main/default/classes/ReturnDeliverySlipController.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>50.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/SelectSubstituteControllerLWT.cls
New file
@@ -0,0 +1,633 @@
public with sharing class SelectSubstituteControllerLWT {
    public SelectSubstituteControllerLWT() {
    }
    @AuraEnabled
    public static InitData initFromSelectSubstituteButton(String recordId){
        InitData res = new InitData();
        try{
            Rental_Apply_Equipment_Set__c report=[select
                    Id,Rental_Apply__r.Status__c,Rental_Apply__r.Id
            from Rental_Apply_Equipment_Set__c
            where Id= :recordId];
            res.id=report.Id;
            res.RentalApplyId=report.Rental_Apply__r.Id;
            res.Status=report.Rental_Apply__r.Status__c;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply_Equipment_Set__c Cancel Error : ' + e);
        }
        return res;
    }
    @AuraEnabled
    public static Rental_Apply_Equipment_Set__c initFromCustomSubmitButton(String recordId){
        try{
            Rental_Apply_Equipment_Set__c report=[select
                    Id,Request_extend_day__c
                    ,Extend_request_reason__c
                    ,Rental_End_Date__c,
                    Rental_Apply__c
            from Rental_Apply_Equipment_Set__c
            where Id= :recordId];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply_Equipment_Set__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static InitData initFromLoanerArrangedEmailLButton(String recordId){
        InitData res = new InitData();
        try{
            Rental_Apply_Equipment_Set__c report=[select
                    Id,Rental_Apply__r.Status__c,Rental_Apply__c,Rental_Apply__r.Wei_Assigned_Cnt__c,
                    Assigned_Not_Shipment__c,Rental_Apply__r.Bollow_Date__c
            from Rental_Apply_Equipment_Set__c
            where Id= :recordId];
            res.id=report.Id;
            res.RentalApplyC=report.Rental_Apply__c;
            res.Status=report.Rental_Apply__r.Status__c;
            res.WeiAssignedCntC=report.Rental_Apply__r.Wei_Assigned_Cnt__c;
            res.BollowDateC=report.Rental_Apply__r.Bollow_Date__c;
            res.AssignedNotShipmentC=report.Assigned_Not_Shipment__c;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply_Equipment_Set__c Cancel Error : ' + e);
        }
        return res;
    }
    @AuraEnabled
    public static InitData initClearReturnDeliverySlipButton(String recordId){
        InitData res = new InitData();
        try{
            Rental_Apply_Equipment_Set__c report=[select
                    Id,Rental_Apply__r.Status__c,Rental_Apply__c,Rental_Apply__r.Wei_Assigned_Cnt__c,
                    Assigned_Not_Shipment__c,Rental_Apply__r.Bollow_Date__c
            from Rental_Apply_Equipment_Set__c
            where Id= :recordId];
            res.id=report.Id;
            res.RentalApplyC=report.Rental_Apply__c;
            res.Status=report.Rental_Apply__r.Status__c;
            res.WeiAssignedCntC=report.Rental_Apply__r.Wei_Assigned_Cnt__c;
            res.BollowDateC=report.Rental_Apply__r.Bollow_Date__c;
            res.AssignedNotShipmentC=report.Assigned_Not_Shipment__c;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply_Equipment_Set__c Cancel Error : ' + e);
        }
        return res;
    }
    @AuraEnabled
    public static Rental_Apply_Equipment_Set__c selectRentalApplyEquipmentSetByID(String recordId){
        try{
            Rental_Apply_Equipment_Set__c report=[select
                    Cancel_Select__c,Irreplaceable_flag__c,RAES_Status__c,Shippment_loaner_time2__c
            from Rental_Apply_Equipment_Set__c
            where Id=:recordId];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply_Equipment_Set__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static list<Rental_Apply_Equipment_Set_Detail__c> selectRentalApplyEquipmentSetByRACID(String recordId){
        try{
            list<Rental_Apply_Equipment_Set_Detail__c> report=[select Allow_Adjust_Queue_Flag__c
            from Rental_Apply_Equipment_Set_Detail__c
            where Rental_Apply__c = :recordId ];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply_Equipment_Set__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static list<Rental_Apply__c> selectRentalApplyCByName(String recordId){
        try{
            list<Rental_Apply__c> report=[select
                    Id,Campaign__c,Repair__c,Status__c, Demo_purpose1__c,Contract_pdf_updated__c,Repair_Final_Inspection_Date_F__c,RC_return_to_office__c
            from Rental_Apply__c
            where id=:recordId ];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply_Equipment_Set__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static list<Campaign> selectCampaignById(String recordId){
        try{
            list<Campaign> report=[select
                    Status, Rental_Apply_Flag__c,IF_Approved__c,Meeting_Approved_No__c,Approved_Status__c
            from Campaign
            where id =:recordId ];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply_Equipment_Set__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static String getSessionId(){
        return UserInfo.getSessionId();
    }
    @AuraEnabled
    public static list<Rental_Apply_Equipment_Set__c> selectRaesById1(String recordId){
        try{
            list<Rental_Apply_Equipment_Set__c> report=[select Id
            from Rental_Apply_Equipment_Set__c
            where Rental_Apply__c = :recordId
            and Shippment_loaner_time2__c != null
            and RAES_Status__c != '已分配'
            and RAES_Status__c != '取消分配'
            ];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply_Equipment_Set__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static list<Rental_Apply_Equipment_Set__c> selectRaesById2(String recordId){
        try{
            list<Rental_Apply_Equipment_Set__c> report=[select Id
            from Rental_Apply_Equipment_Set__c
            where Rental_Apply__c = :recordId
            and RAES_Status__c != '已分配'
            and RAES_Status__c != '取消分配'
            ];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply_Equipment_Set__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static list<Rental_Apply__c> selectRacById(String recordId){
        try{
            list<Rental_Apply__c> report=[SELECT
                    Id, JingliApprovalManager__c, SalesManager__c
                    , BuchangApprovalManager__c
                    , BuchangApprovalManagerSales__c
                    , ZongjianApprovalManager__c
            FROM Rental_Apply__c
            WHERE Id = :recordId
            ];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply_Equipment_Set__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static UpdateResult updateRaesc(
            String recordId,
            String JingliApprovalManagerc,
            String SalesManagerc,
            String BuchangApprovalManagerc,
            String BuchangApprovalManagerSalesc,
            String ZongjianApprovalManagerc,
            String ExtendStatusc
    ) {
        UpdateResult result = new UpdateResult();
        result.recordId = recordId;
        try{
            // 更新记录并获取结果
            if(recordId==null) return null;
            Rental_Apply_Equipment_Set__c rac = new Rental_Apply_Equipment_Set__c( id=recordId);
            if(JingliApprovalManagerc!=null&& JingliApprovalManagerc != ''){
                rac.JingliApprovalManager__c=JingliApprovalManagerc;
            }
            if(SalesManagerc!=null&&SalesManagerc!=''){
                rac.SalesManager__c=SalesManagerc;
            }
            if(BuchangApprovalManagerc!=null&&BuchangApprovalManagerc!=''){
                rac.BuchangApprovalManager__c=BuchangApprovalManagerc;
            }
            if(BuchangApprovalManagerSalesc!=null&&BuchangApprovalManagerSalesc!=''){
                rac.BuchangApprovalManagerSales__c=BuchangApprovalManagerSalesc;
            }
            if(ZongjianApprovalManagerc!=null&&ZongjianApprovalManagerc!=''){
                rac.ZongjianApprovalManager__c=ZongjianApprovalManagerc;
            }
            if(ExtendStatusc!=null&&ExtendStatusc!=''){
                rac.Extend_Status__c=ExtendStatusc;
            }
            if(rac.id==null)return null;
            update rac;
            result.success = true;
            result.errors = new List<String>();
            return result;
        }catch(Exception e){
            result.success = false;
            result.errors = new List<String>();
            result.errors.add(e.getMessage());
            System.debug(LoggingLevel.INFO,'Rental_Apply__c update Error : ' + e);
        }
        return result;
    }
    @AuraEnabled
    public static UpdateResult updateRaescList(
            list<Rental_Apply_Equipment_Set_Detail__c> updateList
    ) {
        UpdateResult result = new UpdateResult();
        try{
            for(Rental_Apply_Equipment_Set_Detail__c item : updateList) {
                item.Return_DeliverySlip__c = null;
                item.Asset_return_time__c = null;
            }
            update updateList;
            result.success = true;
            result.errors = new List<String>();
            return result;
        }catch(Exception e){
            result.success = false;
            result.errors = new List<String>();
            result.errors.add(e.getMessage());
            System.debug(LoggingLevel.INFO,'Rental_Apply__c update Error : ' + e);
        }
        return result;
    }
    @AuraEnabled
    public static list<Rental_Apply_Equipment_Set_Detail__c> selectRaesdcId(String recordId){
        try{
            list<Rental_Apply_Equipment_Set_Detail__c> report=[Select
                    Id
            From Rental_Apply_Equipment_Set_Detail__c
            Where Return_DeliverySlip__c != null
            AND Check_lost_Item_F__c = null
            AND Rental_Apply_Equipment_Set__c = :recordId AND Cancel_Select__c = false
            ];
            return report;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO,'Rental_Apply_Equipment_Set__c Cancel Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static String approvalCheck(String rentalApplyId) {
        // check结果
        String returnStr = '';
        //1388 yc 20211021 跨区域分配不能出库  start
        String rasdid = '';
        system.debug(rentalApplyId+'==');
        if(String.isNotBlank(rentalApplyId) && rentalApplyId.indexOf(';') >= 0){//说明是从一览上触发的
            rasdid = rentalApplyId.subString(rentalApplyId.indexOf(';') + 1);
            rentalApplyId = rentalApplyId.subString(0, rentalApplyId.indexOf(';'));
        }
        //1388 yc 20211021 跨区域分配不能出库  end
        //备品借出申请
        Rental_Apply__c[] rentalApply = [select Id,repair__r.Repair_Final_Inspection_Date__c,Bollow_Date__c,repair__r.Return_Without_Repair_Date__c,
                CreatedDate,Rental_Apply_Equipment_Set_Cnt__c,Prepare_Day__c,Cross_Region_Assign__c,
                demo_purpose2__c,Follow_UP_Opp__r.Shipping_Finished_Day_Func__c,next_action__c,QIS_number__r.ReplaceDeliveryDate__c
        from Rental_Apply__c
        where Id = :rentalApplyId];
        if (rentalApply.size() == 0) {
            returnStr = '没有备品借出申请,请确认。';
            return returnStr;
        }
        Rental_Apply__c ra = rentalApply[0];
        if (ra.Rental_Apply_Equipment_Set_Cnt__c <= 0) {
            returnStr = '没有借出备品set一览,请确认。';
            return returnStr;
        }
        //1822 yc 20211111 start
        if(ra.demo_purpose2__c=='已购待货' && ra.Follow_UP_Opp__r.Shipping_Finished_Day_Func__c!= null){
            returnStr = '已购待货目的,新品已有发货日,不可出库指示';
            return returnStr;
        }
        if(ra.demo_purpose2__c=='索赔QIS' && ra.next_action__c=='无偿更换' && ra.QIS_number__r.ReplaceDeliveryDate__c!= null){
            returnStr = '索赔QIS目的,QIS已有新品发货日,不可出库指示';
            return returnStr;
        }
        //1822 yc 20211111 end
//*************************Insert 20160826 SWAG-AD59Z6 趙徳芳 Start*************************//
        if(Ra.repair__r.Repair_Final_Inspection_Date__c != null) {
            return '修理最终检测日不为空,不能做出库指示';
        }
        if(Ra.repair__c!=null&&Ra.repair__r.Return_Without_Repair_Date__c != null) {
            return '未修理归还日不为空,不能做出库指示';
        }
//*************************Insert 20160826 SWAG-AD59Z6 趙徳芳 End***************************//
        //1388 yc 20211021 跨区域分配不能出库 start
        if(String.isNotBlank(ra.Cross_Region_Assign__c)){
            String soql = 'select Id, Name,Rental_Apply__c,Internal_asset_location_before__c';
            soql +=' from Rental_Apply_Equipment_Set_Detail__c';
            soql +=' where Rental_Apply__c = \'' + ra.Id +'\'';
            soql +=' and Internal_asset_location_before__c !=null and Internal_asset_location_before__c != \'' + ra.Cross_Region_Assign__c+ '\'';
            if(String.isNotBlank(rasdid)){
                soql +=' and Rental_Apply_Equipment_Set__c = :rasdid';
            }
            List<Rental_Apply_Equipment_Set_Detail__c> raesd = Database.query(soql);
            if(raesd.size()>0){
                returnStr = '分配的备品不是您所属备品中心的备品,不能做出库指示';
                return returnStr;
            }
        }
        //1388 yc 20211021 跨区域分配不能出库 end
        // 20220211 ljh add 备品FY23课题01 start
        // AggregateResult[] resultsRas = [SELECT Rental_Start_Date__c,count(Id) cnt
        //                              FROM Rental_Apply_Equipment_Set__c
        //                              WHERE Rental_Apply__c = :rentalApplyId
        //                              AND Cancel_Select__c = false
        //                              group by Rental_Start_Date__c];
        // If(resultsRas.size() > 1){
        //  returnStr = '所有一览备品预计出货日应一致,不一致不能做出库指示';
        //     return returnStr;
        // }
        // 20220211 ljh add 备品FY23课题01 end
//bp2        // 备品借出历史取得
//        List<String> equipmentSetList = new List<String>();
//        Rental_Apply_Equipment_Set__c[] raes = [
//            select Id, Name, Equipment_Set__c, Equipment_Set__r.Name, Rental_Start_Date__c, Rental_End_Date__c, Rental_Apply__c
//              from Rental_Apply_Equipment_Set__c
//             where Rental_Apply__c = :rentalApplyId and Cancel_Select__c = false];
//        // 日历范围,最小的借出开始日到最大的借出终了日
//        Date startDate = Date.today();
//        Date endDate = Date.today();
//        for (Rental_Apply_Equipment_Set__c r : raes) {
//            equipmentSetList.add(r.Equipment_Set__c);
//            if (r.Rental_Start_Date__c != null && r.Rental_Start_Date__c < startDate) {
//                startDate = r.Rental_Start_Date__c;
//            }
//            if (r.Rental_End_Date__c != null && r.Rental_End_Date__c > endDate) {
//                endDate = r.Rental_End_Date__c;
//            }
//        }
//        Integer prepareDay = ra.Prepare_Day__c == null ? Integer.valueOf(System.Label.EquipmentRentalPrepare) : ra.Prepare_Day__c.intValue();
//        Date minDate = getWD_addday(startDate, -1 * prepareDay);
//        Date maxDate = getWD_addday(endDate, prepareDay);
//        // 其他备品借出申请历史
//        Rental_Apply_Equipment_Set__c[] others = [
//                    select Id, Name, Rental_Start_Date__c, Rental_End_Date__c, Equipment_Set__c, Rental_Apply__r.Status__c ,Rental_Apply__r.Prepare_Day__c
//                      from Rental_Apply_Equipment_Set__c
//                     where Rental_Apply__c != :rentalApplyId
//                       and Equipment_Set__c in :equipmentSetList
//                       and Request_Status__c != '取消'
//                       and Request_Status__c != '删除'
//                       and Cancel_Select__c = false
//                       and ((Rental_Start_Date__c >= :minDate and Rental_Start_Date__c <= :maxDate)
//                            or (Rental_End_Date__c >= :minDate and Rental_End_Date__c <= :maxDate)
//                            or (Rental_Start_Date__c <= :startDate and Rental_End_Date__c >= :endDate))];
//        Map<String, List<Rental_Apply_Equipment_Set__c>> othersMap = new Map<String,List<Rental_Apply_Equipment_Set__c>>();
//        for (Rental_Apply_Equipment_Set__c other : others) {
//            if (othersMap.containsKey(other.Equipment_Set__c)) {
//                othersMap.get(other.Equipment_Set__c).add(other);
//            } else {
//                List<Rental_Apply_Equipment_Set__c> l = new List<Rental_Apply_Equipment_Set__c>();
//                l.add(other);
//                othersMap.put(other.Equipment_Set__c, l);
//            }
//        }
//        for (Rental_Apply_Equipment_Set__c r : raes) {
//            List<Rental_Apply_Equipment_Set__c> other = othersMap.get(r.Equipment_Set__c);
//            Map<Date, Map<String, String>> dateMap= new Map<Date, Map<String, String>>();
//            if (other != null) {
//                Date sdate = startDate;
//                Date edate = endDate;
//                for (Rental_Apply_Equipment_Set__c o : other) {
//                    if (o.Rental_Start_Date__c != null && (sdate == null || o.Rental_Start_Date__c < sdate)) {
//                        sdate = o.Rental_Start_Date__c;
//                    }
//                    if (o.Rental_End_Date__c != null && (edate == null || o.Rental_End_Date__c > edate)) {
//                        edate = o.Rental_End_Date__c;
//                    }
//                }
//                if (sdate != null && edate != null) {
//                    RentalApplyWebService raws = new RentalApplyWebService();
//                    dateMap = raws.getDateMap(sdate, edate, prepareDay);
//                }
//            }
//            if (r.Rental_Start_Date__c == null && r.Rental_End_Date__c == null) {
//                // 清空该借出历史的出库和回收时间
//            } else if (other == null || other.size() == 0) {
//                // 与其他借出历史没有冲突
//            } else {
//                Date fromDate = r.Rental_Start_Date__c;
//                Date toDate = r.Rental_End_Date__c;
//                for (Rental_Apply_Equipment_Set__c o : other) {
//                    if (o.Rental_Apply__r.Status__c != '草案中' && o.Rental_Apply__r.Status__c != '申请中' && o.Rental_Apply__r.Status__c != null) {
//                        Date startD = o.Rental_Start_Date__c;
//                        Date endD = o.Rental_End_Date__c;
//                        Integer prepare = prepareDay; //>= o.Rental_Apply__r.Prepare_Day__c || o.Rental_Apply__r.Prepare_Day__c == null ? prepareDay : o.Rental_Apply__r.Prepare_Day__c.intValue();
//                        if ((dateMap.containsKey(fromDate) && Date.valueOf(dateMap.get(fromDate).get('Next')) > startD && dateMap.containsKey(endD) && fromDate < Date.valueOf(dateMap.get(endD).get('Next'))) ||
//                            (dateMap.containsKey(toDate) && Date.valueOf(dateMap.get(toDate).get('Next')) > startD && dateMap.containsKey(endD) && toDate < Date.valueOf(dateMap.get(endD).get('Next'))) ||
//                            (dateMap.containsKey(fromDate) && Date.valueOf(dateMap.get(fromDate).get('Next')) <= startD && dateMap.containsKey(endD) && toDate >= Date.valueOf(dateMap.get(endD).get('Next')))) {
//                            returnStr = '备品' + r.Equipment_Set__r.Name + '的借出日与备品借出历史' + o.Name + '有冲突,请确认。';
//                            return returnStr;
//                        }
//                    }
//                }
//            }
//        }
        return '1';
    }
    @AuraEnabled
    public static String setShipment_requests(String raid, String raesid) {
        Savepoint sp = Database.setSavepoint();
        try {
            //一览情况下检索一览对应的申请书Id,soql子查询不能和主查询是同一个表,单独检索一次
            if (String.isBlank(raid)) {
                List<Rental_Apply_Equipment_Set__c> raList = [select Id, Rental_Apply__c from Rental_Apply_Equipment_Set__c where id = :raesid];
                if (raList.size() > 0) {
                    raid = raList[0].Rental_Apply__c;
                } else {
                    //应该不会到这里
                    return '没有可以出库指示的一览';
                }
            }
            String soql = 'SELECT Id'
                    + ' FROM Rental_Apply_Equipment_Set__c '
                    + ' WHERE Shippment_loaner_time2__c <> null '
                    + ' AND Rental_Apply__c = :raid '
                    + ' ORDER BY Id' ;
            List<Rental_Apply_Equipment_Set__c> shippedRaesList = Database.query(soql);
            String raesStrShipped = '';
            for (Rental_Apply_Equipment_Set__c raes : shippedRaesList) {
                raesStrShipped += raes.Id;
            }
            //Srring soql = "SELECT Id FROM Rental_Apply_Equipment_Set_Detail__c WHERE Rental_Apply__c = '{!Rental_Apply__c.Id}' AND Cancel_Select__c = false AND Rental_Num__c > 0 AND Rental_Apply_Equipment_Set__r.Wei_Assigned_Cnt__c = 0 AND Rental_Apply_Equipment_Set__r.Yi_Assigned_Cnt__c > 0 AND Shipment_request__c  = false";
            soql = 'SELECT Id, Rental_Apply__c, Rental_Apply_Equipment_Set__c'
                    + ' FROM Rental_Apply_Equipment_Set_Detail__c '
                    + ' WHERE ' + (String.isNotBlank(raesid) ? 'Rental_Apply_Equipment_Set__c = :raesid ' : 'Rental_Apply__c = :raid ')
                    + ' AND Cancel_Select__c = false '
                    + ' AND Rental_Num__c > 0 '
                    + ' AND Rental_Apply_Equipment_Set__r.Wei_Assigned_Cnt__c = 0 '
                    + ' AND Rental_Apply_Equipment_Set__r.Yi_Assigned_Cnt__c > 0 '
                    + ' AND Shipment_request__c  = false'
                    + ' ORDER BY Rental_Apply_Equipment_Set__c, Id';
            List<Rental_Apply_Equipment_Set_Detail__c> raesds = Database.query(soql);
            Map<Id, List<String>> rental_Asset_SerialNumberMap = new Map<Id, List<String>>();
            if (raesds.size() < 1) {
                return '没有可以出库指示的一览';
            } else {
                Set<Id> raesSet = new Set<Id>();
                String raesStrRequest = '';
                for (Rental_Apply_Equipment_Set_Detail__c raesd : raesds) {
                    if (false == raesSet.contains(raesd.Rental_Apply_Equipment_Set__c)) {
                        raesSet.add(raesd.Rental_Apply_Equipment_Set__c);
                        raesStrRequest += raesd.Rental_Apply_Equipment_Set__c;
                    }
                    raesd.Shipment_request_time2__c = Datetime.now();
                    raesd.Shipment_request__c = true;
                }
                // 出库后, 再次做出库指示的一览, 一定要个出过库的一览一样
                if (false == String.isBlank(raesStrShipped) && raesStrRequest != raesStrShipped) {
                    return '不能做出库指示,需要分单后再操作';
                }
            }
            // add lc 20220927 SFDC-CJ48VE 备品预计出库日逻辑调整 start
            List<Rental_Apply_Equipment_Set__c> RAESRecords = [
                    SELECT Id,Rental_Start_Date__c
                    FROM Rental_Apply_Equipment_Set__c
                    WHERE Rental_Apply__c = :raid
                    AND Cancel_Select__c = False];
            for (Integer i = 0; i < RAESRecords.size(); i++) {
                // 备品预计出库日不一致,不可出库指示
                if (RAESRecords[i].Rental_Start_Date__c != RAESRecords[0].Rental_Start_Date__c) {
                    return '备品预计出货日不一致,不可出库指示';
                }
            }
            // add lc 20220927 SFDC-CJ48VE 备品预计出库日逻辑调整 end
            Rental_Apply__c ra = new Rental_Apply__c(Id = raesds[0].Rental_Apply__c, Status__c = '已出库指示');
            update ra;
            Database.SaveResult[] results = Database.update(raesds);
            Database.SaveResult dmlResult = results[0];
            if (dmlResult.isSuccess()) {
                //明细更新成功后才更新一览的Rental_Asset_SerialNumber__c
                soql = 'SELECT Id, SerialNumber_text__c, Rental_Apply_Equipment_Set__c '
                        +'FROM Rental_Apply_Equipment_Set_Detail__c '
                        +'WHERE Rental_Apply__c = \'' + raesds[0].Rental_Apply__c + '\''
                        +'AND Shipment_request_time2__c != null '
                        +'AND Shipment_request__c = true '
                        +'AND SerialNumber_text__c != null '
                        +'ORDER BY Rental_Apply_Equipment_Set__c ';
                List<Rental_Apply_Equipment_Set_Detail__c> raesdSerialNumbers = Database.query(soql);
                for (Rental_Apply_Equipment_Set_Detail__c raesd : raesdSerialNumbers) {
                    if (!rental_Asset_SerialNumberMap.containsKey(raesd.Rental_Apply_Equipment_Set__c)) {
                        // Asset__r.SerialNumber + ','
                        rental_Asset_SerialNumberMap.put(raesd.Rental_Apply_Equipment_Set__c, new List<String>());
                    }
                    rental_Asset_SerialNumberMap.get(raesd.Rental_Apply_Equipment_Set__c).add(raesd.SerialNumber_text__c);
                }
                List<Rental_Apply_Equipment_Set__c> raess = new List<Rental_Apply_Equipment_Set__c>();
                for (Id key : rental_Asset_SerialNumberMap.keySet()) {
                    raess.add(new Rental_Apply_Equipment_Set__c(Id = key,
                            Rental_Asset_SerialNumber__c = ',' + String.join(rental_Asset_SerialNumberMap.get(key), ',') + ','));
                }
                if (!raess.isEmpty()) {
                    update raess;
                }
                return '状态更新到已出库指示';
            } else {
                Database.rollback(sp);
                Database.Error emsg = dmlResult.getErrors()[0];
                return 'failed to update:' + emsg.getFields() +  ' ' + emsg.getMessage();
            }
        } catch (Exception ex) {
            Database.rollback(sp);
            return ex.getMessage();
        }
    }
    @AuraEnabled
    public static String postponeCheck(String endDate, Integer d) {
        Date before5day = getWD_addday(date.parse(endDate), d);
        if (Date.today() > before5day) {
            return System.Label.EquipmentRentalPostponeOverDeadline;
        }
        return 'OK';
    }
    public static Date getWD_addday(Date d, Integer i) {
        if (d == Date.valueOf('4000-12-31')) {
            return d;
        }
        if (i >= 0) {
            List<OlympusCalendar__c> workday = [
                    select Id, Date__c, IsWorkDay__c
                    from OlympusCalendar__c
                    where Date__c >= :d
                    and IsWorkDay__c = 1
                    order by Date__c
                    limit :(i+1)];
            Date selectDate = workday[i].Date__c;
            return selectDate;
        } else {
            i = Math.abs(i);
            List<OlympusCalendar__c> workday = [
                    select Id, Date__c, IsWorkDay__c
                    from OlympusCalendar__c
                    where Date__c <= :d
                    and IsWorkDay__c = 1
                    order by Date__c desc
                    limit :(i+1)];
            Date selectDate = workday[i].Date__c;
            return selectDate;
        }
    }
    public class UpdateResult {
        @AuraEnabled public String recordId {get;set;}
        @AuraEnabled public Boolean success {get;set;}
        @AuraEnabled public List<String> errors {get;set;}
    }
    public class InitData{
        @AuraEnabled
        public String id;
        @AuraEnabled
        public String RentalApplyId;
        @AuraEnabled
        public String Status;
        @AuraEnabled
        public String RentalApplyC;
        @AuraEnabled
        public Decimal WeiAssignedCntC;
        @AuraEnabled
        public Date BollowDateC;
        @AuraEnabled
        public Decimal AssignedNotShipmentC;
    }
}
force-app/main/default/classes/SelectSubstituteControllerLWT.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>51.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/SubmitExtensionApprovalProcessController.cls
New file
@@ -0,0 +1,42 @@
public with sharing class SubmitExtensionApprovalProcessController {
    public SubmitExtensionApprovalProcessController() {
    }
    @AuraEnabled
    public static InitData init(String recordId) {
        InitData res = new InitData();
        try {
            Rental_Apply__c rac = [SELECT Id, ExtensionStatus__c, demo_purpose2__c, AgreementBorrowingExtensionDate__c, Return_dadeline_final__c from Rental_Apply__c where Id = :recordId];
            res.Id = rac.Id;
            res.ExtensionStatus = rac.ExtensionStatus__c;
            res.RootRentalApply = rac.Root_Rental_Apply__c;
            res.demoPurpose2 = rac.demo_purpose2__c;
            res.AgreementBorrowingExtensionDate = rac.AgreementBorrowingExtensionDate__c;
            res.ReturnDadelineFinal = rac.Return_dadeline_final__c;
        }
        catch (Exception e) {
            System.debug(LoggingLevel.INFO, '****e:' + e);
        }
        return res;
    }
    public class InitData {
        @AuraEnabled
        public String Id;
        @AuraEnabled
        public String ExtensionStatus;
        @AuraEnabled
        public String RootRentalApply;
        @AuraEnabled
        public String demoPurpose2;
        @AuraEnabled
        public Date AgreementBorrowingExtensionDate;
        @AuraEnabled
        public Date ReturnDadelineFinal;
    }
}
force-app/main/default/classes/SubmitExtensionApprovalProcessController.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>50.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/TenderWebService.cls
New file
@@ -0,0 +1,83 @@
global class TenderWebService {
    public TenderWebService() {
    }
    @AuraEnabled
    //招投标反逻辑删除
    WebService static String ContraryLogicalDel(String DTenId) {
        Tender_information__c DTenInfo = [Select Id, InfoId__c, Logical_delete__c, ProjectId__c, Retain_Tender__c From Tender_information__c Where id = : DTenId];
        // 更新删除招投标
        List<Tender_information__c> updateTenInfoList = new List<Tender_information__c>();
        // 更新保留招投标
        // List<Tender_information__c> updateBTenList = new List<Tender_information__c>();
        if (String.isNotBlank(DTenInfo.Retain_Tender__c)) {
            // System.debug('11111111' + TenInfo.Retain_Tender__c);
            //要保留的招投标
            Tender_information__c BTen =  [select Id, InfoId__c From Tender_information__c
                                           Where Id = : DTenInfo.Retain_Tender__c];
            // 删除招投标关联的询价
            // List<Tender_Opportunity_Link__c> DTenLinkList = [select Opportunity__c
            //         from Tender_Opportunity_Link__c
            //         where Tender_information__c = :DTenId and IsRelated__c = true];
            // System.debug('---------2---------' + DTenLinkList);
            // Set<Id> DTenLinkOppIdSet = new Set<Id>();
            // if (DTenLinkList.size() > 0) {
            //     for (Tender_Opportunity_Link__c DTenlink : DTenLinkList) {
            //         DTenLinkOppIdSet.add(DTenlink.Opportunity__c);
            //     }
            //     System.debug('---------3---------' + DTenLinkOppIdSet);
            //     // 删除项目关联并且与保留项目关联的询价关联信息
            //     List<Tender_Opportunity_Link__c> DelD_BTenLinkList = [select id, Opportunity__c, Tender_information__c
            //             from Tender_Opportunity_Link__c
            //             where Tender_information__c = :BTen.Id and Opportunity__c in : DTenLinkOppIdSet];
            //     System.debug('---------1---------' + DelD_BTenLinkList);
            //     if (DelD_BTenLinkList.size() > 0) {
            //         Delete DelD_BTenLinkList;
            //     }
            // }
            // 保留项目通过软删除逻辑关联来的询价
            List<Tender_Opportunity_Link__c> DelD_BTenLinkList = [select id, Opportunity__c, Tender_information__c
                        from Tender_Opportunity_Link__c
                        where Tender_information__c = :BTen.Id and IsRelated__c = true];
            // 判断link是否为空
            if (DelD_BTenLinkList != null && DelD_BTenLinkList.size() > 0) {
                // 逻辑有大坑 暂时只把打标记的删掉 不做回写的操作了
                // List<Tender_Opportunity_Link__c> add_list = new List<Tender_Opportunity_Link__c>();
                // for (Tender_Opportunity_Link__c link : DelD_BTenLinkList) {
                //     Tender_Opportunity_Link__c add_link = new Tender_Opportunity_Link__c();
                //     add_link.Tender_information__c = DTenInfo.Id;
                //     add_link.Opportunity__c = link.Opportunity__c;
                //     add_link.Tender_Opportunity_Uniq__c = DTenInfo.Id + '' + link.Opportunity__c;
                //     add_link.IsRelated__c = false;
                //     add_list.add(add_link);
                // }
                // 删掉保留项目上的关联询价
                delete DelD_BTenLinkList;
                // 删除项目上的关联加回来
                // if (add_list.size() > 0) {
                //     insert add_list;
                // }
            }
            // 互换保留招投标与删除招投标的信息Id
            DTenInfo.Retain_Tender__c = BTen.Id;
            String BTenInfo = BTen.InfoId__c;
            BTen.InfoId__c = DTenInfo.InfoId__c;//保留招投标的信息Id赋给删除招投标的信息Id
            DTenInfo.InfoId__c = BTenInfo;//删除招投标的信息Id赋给保留招投标的信息Id
            // 点击保存后 删除招投标上的逻辑删除字段变为true
            DTenInfo.Logical_delete__c = false;
            // update TenInfo;
            // 一起更新就行了
            updateTenInfoList.add(DTenInfo);
            updateTenInfoList.add(BTen);
            update updateTenInfoList;
            // updateBTenList.add(BTen);
            // update updateBTenList;
        }
        return 'OK';
    }
}
force-app/main/default/classes/TenderWebService.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>45.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/TenderingButtonController.cls
@@ -11,6 +11,7 @@
            res.opportunityNum = String.valueOf(report.OpportunityNum__c);
            res.isRelateProject = report.IsRelateProject__c;
            res.profileId = UserInfo.getProfileId();
            res.Environment_Url = System.Label.Environment_Url;
            System.debug(LoggingLevel.INFO, '*** xu: ' + res);
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '*** xu: ' + e);
@@ -47,5 +48,7 @@
        public String isRelateProject;
        @AuraEnabled
        public String profileId;
        @AuraEnabled
        public String Environment_Url;
    }
}
force-app/main/default/classes/TransferApplyController.cls
New file
@@ -0,0 +1,31 @@
public with sharing class TransferApplyController {
    public TransferApplyController() {
    }
    @AuraEnabled
    public static list<TransferApplySummary__c> transferApplyPDF(string transferApplyId) {
        try {
            // var sql = "select Id from TransferApplySummary__c where TransferApply__c =
            //'{!TransferApply__c.Id}' and ApprovalDetails__c > 0 and TAS_Status__c != '取消'";
            list<TransferApplySummary__c> reports = [
                select id from TransferApplySummary__c
                where TransferApply__c = :transferApplyId
                and ApprovalDetails__c > 0
                and TAS_Status__c != '取消'];
            return reports;
        }catch ( Exception e) {
            System.debug(LoggingLevel.ERROR,'TransferApplySummary__c TransferApplyPDF Error : ' + e);
        }
        return null;
    }
    @AuraEnabled
    public static Boolean applyPermission()
    {
        Schema.DescribeSobjectResult schemaMap = Schema.describeSObjects(new String[]{'TransferApply__c'})[0];
        return schemaMap.isCreateable();
    }
}
force-app/main/default/classes/TransferApplyController.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>51.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/TransferApplyWebService.cls
New file
@@ -0,0 +1,214 @@
global without sharing class TransferApplyWebService {
    public TransferApplyWebService() {
    }
    @AuraEnabled
    WebService static String submitApply(String taId) {
        List<TransferApply__c> taList = [
            SELECT Id
                 , Status__c
                 , Add_Approval_Status__c
                 , RecordType.DeveloperName //20201202 ljh add
                 , BeiPinWindow__c //20201202 ljh add
                 , Add_Reason__c // 20210429 1831 you
             FROM TransferApply__c
            WHERE Id = :taId
              FOR UPDATE
        ];
        if (taList.isEmpty()) {
            return '调拨单不存在。';
        }
        TransferApply__c ta = taList[0];
        if(ta.Status__c != '草案中' && ta.Add_Approval_Status__c != '草案中'){
            return '请确认调拨单状态,没有待审批的明细,不能提交';
        }
        List<String> errorList = checkTransferCount(ta.Id);
        if(!errorList.isEmpty()) {
            return String.join(errorList, '\n');
        }
        if(ta.Status__c == '草案中') {
            ta.Status__c = '填写完毕';
        }
        else {
            // 20210429 1831 you start
            if(ta.Add_Approval_Status__c == '草案中' && String.isBlank(ta.Add_Reason__c) ){
                return '没有填写追加理由,不能提交';
            }else {// 20210429 1831 you end
                ta.Add_Approval_Status__c = '填写完毕';
            }
        }
        //20201202 ljh OCSM_BP5-76 add start
        if(ta.RecordType.DeveloperName == 'AgencyToCenter' && ta.BeiPinWindow__c == null){
            return '请确认审批人,没有审批人(备品总窗口),不能提交';
        }
        //20201202 ljh OCSM_BP5-76 add end
        Savepoint sp = Database.setSavepoint();
        try {
            update ta;
        }
        catch (Exception e) {
            Database.rollback(sp);
            return e.getMessage();
        }
        return '1';
    }
    public static List<String> checkTransferCount(Id taId) {
        List<TransferApplyDetail__c> tadList =  [
            SELECT Id
                 , Asset__r.Ji_Zhong_Guan_Li_Ku_Cun__c
                 , Asset__r.TransferableAbandon_F__c
                 , Asset__r.TransferableRepair_F__c
                 , Asset__r.TransferableLost_F__c
                 , Asset__r.Name
                 , Asset__c
                 , Approved_F__c
                 , TransferType__c
                 , OneToOneAccessory__c
            FROM TransferApplyDetail__c
            WHERE TransferApply__c=:taId
                AND Cancel_Select__c = false
        ];
        Map<Id, Integer> assCountMap = new Map<Id, Integer>(); // assetId->有效库存
        Map<Id, Integer> assetAbanCntMap = new Map<Id, Integer>(); // 非一对一附属品待废弃数统计,保有设备Id->待废弃调拨数量
        Map<Id, Integer> assetRepairCntMap = new Map<Id, Integer>(); // 非一对一附属品待废弃数统计,保有设备Id->待废弃调拨数量
        Map<Id, Integer> assetLostCntMap = new Map<Id, Integer>(); // 非一对一附属品待废弃数统计,保有设备Id->待废弃调拨数量
        Boolean needApprove = false;
        for(TransferApplyDetail__c tad: tadList) {
            if(!tad.Approved_F__c && !tad.OneToOneAccessory__c) {
                Integer cnt = 0;
                if(tad.TransferType__c == '待废弃') {
                    if(assetAbanCntMap.containsKey(tad.Asset__c)){
                        cnt = assetAbanCntMap.get(tad.Asset__c);
                    }
                    cnt += 1;
                    assetAbanCntMap.put(tad.Asset__c, cnt);
                }
                else if(tad.TransferType__c == '待修理'){
                    if(assetRepairCntMap.containsKey(tad.Asset__c)){
                        cnt = assetRepairCntMap.get(tad.Asset__c);
                    }
                    cnt += 1;
                    assetRepairCntMap.put(tad.Asset__c, cnt);
                }
                else if(tad.TransferType__c == '丢失找回'){
                    if(assetLostCntMap.containsKey(tad.Asset__c)){
                        cnt = assetLostCntMap.get(tad.Asset__c);
                    }
                    cnt += 1;
                    assetLostCntMap.put(tad.Asset__c, cnt);
                }
                else {
                    if(assCountMap.containsKey(tad.Asset__c)) {
                        cnt = assCountMap.get(tad.Asset__c);
                    }
                    cnt += 1;
                    assCountMap.put(tad.Asset__c, cnt);
                }
                if(!tad.Approved_F__c) {
                    needApprove = true;
                }
            }
        }
        Set<String> errorList = new Set<String>();
        if(!needApprove) {
            errorList.add('没有需要审批的明细!');
        }
        for(TransferApplyDetail__c tad: tadList) {
            if(assCountMap.containsKey(tad.Asset__c)
                && assCountMap.get(tad.Asset__c) > intValueOf(tad.Asset__r.Ji_Zhong_Guan_Li_Ku_Cun__c)) {
                String msg = tad.Asset__r.Name;
                msg += ':有效库存=' +  intValueOf(tad.Asset__r.Ji_Zhong_Guan_Li_Ku_Cun__c);
                msg += ',调拨数量=' + assCountMap.get(tad.Asset__c) ;
                msg += ',请确认数量后提交';
                errorList.add(msg);
            }
            if(assetRepairCntMap.containsKey(tad.Asset__c)
                && assetRepairCntMap.get(tad.Asset__c) > intValueOf(tad.Asset__r.TransferableRepair_F__c)) {
                String msg = tad.Asset__r.Name;
                msg += ':可调拨数_待修理=' +  intValueOf(tad.Asset__r.TransferableRepair_F__c);
                msg += ',待修理调拨数量=' + assetRepairCntMap.get(tad.Asset__c) ;
                msg += ',请确认数量后提交';
                errorList.add(msg);
            }
            if(assetAbanCntMap.containsKey(tad.Asset__c)
                && assetAbanCntMap.get(tad.Asset__c) > intValueOf(tad.Asset__r.TransferableAbandon_F__c)) {
                String msg = tad.Asset__r.Name;
                msg += ':可调拨数_待废弃=' + intValueOf(tad.Asset__r.TransferableAbandon_F__c);
                msg += ',待废弃调拨数量=' + assetAbanCntMap.get(tad.Asset__c);
                msg += ',请确认数量后提交';
                errorList.add(msg);
            }
            if(assetLostCntMap.containsKey(tad.Asset__c)
                && assetLostCntMap.get(tad.Asset__c) > intValueOf(tad.Asset__r.TransferableLost_F__c)) {
                String msg = tad.Asset__r.Name;
                msg += ':可调拨数_丢失找回=' + intValueOf(tad.Asset__r.TransferableLost_F__c);
                msg += ',待废弃调拨数量=' + assetLostCntMap.get(tad.Asset__c);
                msg += ',请确认数量后提交';
                errorList.add(msg);
            }
        }
        return new List<String>(errorList);
    }
    @AuraEnabled
    WebService static String cancelApply(Id taId) {
        List<TransferApply__c> taList = [
            SELECT Id
                 , Add_Approval_Status__c
                 , Cancel_Reason__c
                 , OwnerId
                 , Status__c
                 , TA_Status__c
                 , Yi_loaner_arranged__c
                 , RecordType.DeveloperName
                 , Request_approval_time__c
             FROM TransferApply__c
            WHERE Id = :taId
              FOR UPDATE
        ];
        if (taList.isEmpty()) {
            return '调拨单不存在。';
        }
        TransferApply__c ta = taList[0];
        if(ta.Status__c == '取消') {
            return '已经取消,不能再次取消';
        }
        if(ta.Status__c == '申请中' || ta.Add_Approval_Status__c == '申请中'){
            return '申请中不能取消';
        }
        if(ta.RecordType.DeveloperName == 'InsideCenter' && ta.Request_approval_time__c != null) {
            return '同备品中心内调拨在最终批准之后不可以取消';
        }
        if(ta.TA_Status__c == '已出库' || ta.Yi_loaner_arranged__c > 0) {
            return '已经出库,不能取消';
        }
        if(UserInfo.getUserId() != ta.OwnerId) {
            return '仅创建者可以取消';
        }
        if(String.isBlank(ta.Cancel_Reason__c)) {
            return '必须输入取消理由';
        }
        Savepoint sp = Database.setSavepoint();
        try {
            ta.Status__c = '取消';
            update ta;
        }
        catch (Exception e) {
            Database.rollback(sp);
            return e.getMessage();
        }
        return '1';
    }
    private static Integer intValueOf(Decimal d) {
        if(d == null) {
            return 0;
        }
        return Integer.valueOf(d);
    }
}
force-app/main/default/classes/TransferApplyWebService.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>46.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/UpdateTenderInformationBatch.cls
New file
@@ -0,0 +1,1310 @@
/*2021-05-08  mzy
* 更新招标信息的询价状态和询价的数量
* 更新招标信息的5个医院
* 当医院发生变化/招投标项目OCSM省发生变化时,空更新一下招投标
*/
global class UpdateTenderInformationBatch implements Database.Batchable<sObject>, Database.Stateful {
    Boolean IsNeedExecute = false;
    String tempTenderId ='';
    Boolean IsOnlyTrue = true;
    List<String> tempTenderList = new List<String>();
    //邮件信息
    List<String> emailMessages = new List<String>();
    //招投标: 报错的招投标Id
    String TenderlogStr = '招标项目 : ';
    //招投标: 报错信息
    String TendererrorStr = '';
    //招投标: 总件数
    Integer TendertotalCount = 0;
    //招投标: 失败件数
    Integer TenderfailedCount = 0;
    //执行符合条件的指定招投标项目
    global UpdateTenderInformationBatch(String tempTenderId) {
        this.tempTenderId = tempTenderId;
    }
    //执行指定招标项目里符合条件的招投标项目
    global UpdateTenderInformationBatch(List<String> tempTenderList) {
        this.tempTenderList = tempTenderList;
    }
    //处理历史数据  IsOnlyTrue = false  执行所有的招标项目
    global UpdateTenderInformationBatch(String tempOppId, Boolean IsOnlyTrue) {
        this.IsOnlyTrue = IsOnlyTrue;
    }
    //  IsOnlyTrue = false 可以手动 无条件执行多条招投标项目
    global UpdateTenderInformationBatch(String tempOppId, Boolean IsOnlyTrue,List<String> tempTenderList) {
        this.IsOnlyTrue = IsOnlyTrue;
        this.tempTenderList = tempTenderList;
    }
    //Batch 链 时使用
    global UpdateTenderInformationBatch(Boolean IsNeedExecute) {
        this.IsNeedExecute = IsNeedExecute;
    }
    global UpdateTenderInformationBatch() {
    }
    global Database.QueryLocator start(Database.BatchableContext bc) {
        String query = 'SELECT Id,IsBid__c,NotBidApprovalStatus__c,IsReactionOpp__c,Hospital__c,Hospital1__c,Hospital2__c,Hospital3__c,Hospital4__c, ';
               query += 'Hospital__r.Assume_Change__c,Hospital1__r.Assume_Change__c,Hospital2__r.Assume_Change__c,Hospital3__r.Assume_Change__c,Hospital4__r.Assume_Change__c ';
               query += 'FROM Tender_information__c ';
            if(IsOnlyTrue){
               query += 'WHERE  ((IsReactionOpp__c = true ) ';
               //2021-07-29 mzy  update 当医院发生变化/招投标项目OCSM省发生变化时,空更新一下招投标 start
               // 2022-04-08 ssm SWAG-CC58ME 增加所有人无效的判断 start
               query += 'OR (Owner.IsActive = false) ';
               // 2022-04-08 ssm SWAG-CC58ME end
               query += 'OR (BiddingOCSMAdministration__c = true) OR (Hospital__r.Assume_Change__c = true) ';
               query += 'OR (Hospital1__r.Assume_Change__c = true) OR (Hospital2__r.Assume_Change__c = true) ';
               query += 'OR (Hospital3__r.Assume_Change__c = true) OR (Hospital4__r.Assume_Change__c = true) )';
               //2021-07-29  mzy update 当医院发生变化/招投标项目OCSM省发生变化时,空更新一下招投标 end
               // DepartmentChanges__c 全部换成 Assume_Change__c
            }
            if(String.isNotBlank(this.tempTenderId)){
                if(IsOnlyTrue){
                    query += ' AND ';
                }else {
                    query += ' Where ';
                }
               query += 'Id = :tempTenderId ';
            }
            if(tempTenderList.size()>0){
                if(IsOnlyTrue){
                    query += ' AND ';
                }else {
                    query += ' Where ';
                }
               query += ' Id In :tempTenderList ';
            }
            System.debug('sql语句:'+query);
        return Database.getQueryLocator(query);
    }
    global void execute(Database.BatchableContext BC, list<Tender_information__c> TenderList) {
        //定义List封装需要空更新的招投标项目
        List<Tender_information__c> EmptyUpdateTenderList = new List<Tender_information__c>();
        Map<String,Tender_information__c> EmptyUpdateTenderMap = new Map<String,Tender_information__c>();
        //定义List封装需要更新的招标项目
        List<Tender_information__c> updateTenderList = new List<Tender_information__c>();
        //定义Map保存招投标信息
        Map<String,Tender_information__c> tenderMap = new Map<String,Tender_information__c>();
        //定义List封装所有询价的招标项目Id
        Set<String> BiddingProjectID = new Set<String>();
        for(Tender_information__c tempTender : TenderList){
            //2021-07-29   mzy  update  当医院发生变化/招投标项目OCSM省发生变化时,空更新一下招投标  start
            if(tempTender.IsReactionOpp__c){
                //如果是  是否反应询价 为 true 则需要进行 反应询价 ,否则就空更新一下
                BiddingProjectID.add(tempTender.Id);
                tenderMap.put( String.valueOf( tempTender.Id ).substring(0,15) ,tempTender);
            }else {
                //需要空更新的招投标
                EmptyUpdateTenderList.add(tempTender);
                EmptyUpdateTenderMap.put(String.valueOf( tempTender.Id ).substring(0,15) ,tempTender);
            }
            //2021-07-29  mzy  update  当医院发生变化/招投标项目OCSM省发生变化时,空更新一下招投标   end
        }
        //2021-07-29  mzy  update  空更新失败的话不清空医院的标识  start
        // System.debug('EmptyUpdateTenderList: ' + EmptyUpdateTenderList);
        if(EmptyUpdateTenderList.size()>0){
            //空更新招投标
            // fxk 2021/9/28 Star
            StaticParameter.EscapeOtherUpdateTenOwner = false;
            Database.SaveResult[] EmptySaveTenderResult = Database.update(EmptyUpdateTenderList,false);
            StaticParameter.EscapeOtherUpdateTenOwner = true;
            // fxk 2021/9/28 End
            //更新成功的招投标需要将医院的标识清空
            //保存更新失败的医院
            Set<String> faildHospIdSet = new Set<String>();
            //查看失败的医院
            for(Integer i = 0;i<EmptySaveTenderResult.size();i++){
                if(!EmptySaveTenderResult.get(i).isSuccess()){
                    String faildTenderId = String.valueOf(EmptyUpdateTenderList.get(i).id).substring(0,15);
                    Tender_information__c  faildtender = EmptyUpdateTenderMap.get(faildTenderId);
                    if(faildtender.Hospital__c != null && faildtender.Hospital__r.Assume_Change__c == true){
                        faildHospIdSet.add(faildtender.Hospital__c);
                    }
                    if(faildtender.Hospital1__c != null && faildtender.Hospital1__r.Assume_Change__c == true){
                        faildHospIdSet.add(faildtender.Hospital1__c);
                    }
                    if(faildtender.Hospital2__c != null&& faildtender.Hospital2__r.Assume_Change__c == true){
                        faildHospIdSet.add(faildtender.Hospital2__c);
                    }
                    if(faildtender.Hospital3__c != null&& faildtender.Hospital3__r.Assume_Change__c == true){
                        faildHospIdSet.add(faildtender.Hospital3__c);
                    }
                    if(faildtender.Hospital4__c != null&& faildtender.Hospital4__r.Assume_Change__c == true){
                       faildHospIdSet.add(faildtender.Hospital4__c);
                    }
                }
            }
            //查看需要清空标识的医院id
            Set<String> HospitalId = new Set<String>();
            //需要清空标识的医院i
            List<Account> needUpdateHPList = new  List<Account>();
            for(Integer i = 0;i<EmptySaveTenderResult.size();i++){
                String tenderId = String.valueOf(EmptyUpdateTenderList.get(i).id).substring(0,15);
                Tender_information__c  tender = EmptyUpdateTenderMap.get(tenderId);
                //如果失败的Set里没有这个医院,则清空这个医院的标识
                if(tender.Hospital__c != null && tender.Hospital__r.Assume_Change__c == true
                    && (!faildHospIdSet.contains(tender.Hospital__c)) ){
                    HospitalId.add(tender.Hospital__c);
                }
                if(tender.Hospital1__c != null && tender.Hospital1__r.Assume_Change__c == true
                    && (!faildHospIdSet.contains(tender.Hospital1__c)) ){
                    HospitalId.add(tender.Hospital1__c);
                }
                if(tender.Hospital2__c != null && tender.Hospital2__r.Assume_Change__c == true
                    && (!faildHospIdSet.contains(tender.Hospital2__c)) ){
                    HospitalId.add(tender.Hospital2__c);
                }
                if(tender.Hospital3__c != null && tender.Hospital3__r.Assume_Change__c == true
                    && (!faildHospIdSet.contains(tender.Hospital3__c)) ){
                    HospitalId.add(tender.Hospital3__c);
                }
                if(tender.Hospital4__c != null && tender.Hospital4__r.Assume_Change__c == true
                    && (!faildHospIdSet.contains(tender.Hospital4__c)) ){
                    HospitalId.add(tender.Hospital4__c);
                }
            }
            Iterator<String> HospitalIds = HospitalId.iterator();
            while(HospitalIds.hasNext()){
                Account acc = new Account();
                acc.id = HospitalIds.next();
                acc.Assume_Change__c = false;
                needUpdateHPList.add(acc);
            }
            if(needUpdateHPList.size()>0){
                 update needUpdateHPList;
            }
        }
        //2021-07-29  mzy  update  空更新失败的话不清空医院的标识  end
        //2021-07-29  mzy  update   如果有需要反应询价的在走下面逻辑   start
        if(BiddingProjectID.size()> 0){
            //查询招标项目下的所有询价
            Map<String,List<Opportunity>> BiddingProjectOppMap = findTenderRelativeOpp(BiddingProjectID);
            //计算询价数量
            List<Tender_information__c> updateTenderNumList = updateOpportunityNum(BiddingProjectOppMap);
            //计算询价状态
            List<Tender_information__c> updateTenderNumStatusList = updateOpportunityStatus(BiddingProjectOppMap,updateTenderNumList,tenderMap);
            updateTenderList.addAll(updateTenderNumStatusList);
        }
        //更新招投标 询价数量和状态
        if(updateTenderList.size()>0){
            //一个招投标项目更新失败
            List<String> failedTenderList = new List<String>();
            Database.SaveResult[] saveTenderResults = Database.update(updateTenderList,false);
            //招投标项目的总数
            TendertotalCount += saveTenderResults.size();
            for(Integer i = 0;i<saveTenderResults.size();i++) {
                if(!saveTenderResults.get(i).isSuccess() ){
                    /*if(TenderlogStr.equals('')){
                        TenderlogStr = '' ;
                    } */
                    TenderlogStr += updateTenderList.get(i).id +' ,';
                    //String statusCode = String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[2].split('=')[1];
                    //String errorMsg = String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[1].split('=')[1];
                    TendererrorStr += '失败招标项目 :'+updateTenderList.get(i).id+'  失败原因:'+ String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[2].split('=')[1]
                    +' : '+String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[1].split('=')[1] + '\r\n';
                    TenderfailedCount++ ;
                    //将更新失败的招投标项目添加掉集合中
                    failedTenderList.add(String.valueOf( updateTenderList.get(i).id ).substring(0,15));
                }
            }
            //更新成功后,清除招投标的反应询价标识
            List<Tender_information__c> successTenderList = new List<Tender_information__c>();
            for(Tender_information__c tempTender:TenderList){
                if(failedTenderList.contains( String.valueOf( tempTender.id ).substring(0,15)  )){
                    //更新失败,则不清除标识
                }else {
                    //更新成功,清除标识
                    tempTender.IsReactionOpp__c = false;
                    successTenderList.add(tempTender);
                }
            }
            //清除标识
            if(successTenderList.size()>0){
                update successTenderList;
            }
        }
        // 2021-07-29  mzy  update   如果有需要反应询价的在走下面逻辑   end
    }
    global void finish(Database.BatchableContext BC) {
        UpdateTenderInformationSchedule.assignOneHours();
        BatchIF_Log__c TenderIfLog = new BatchIF_Log__c();
        TenderIfLog.Type__c = 'UpdateTenderInformationBatchByTenderErrorLog';
        if (TenderlogStr.length() > 60000) {
            TenderlogStr = TenderlogStr.substring(0, 60000);
        }
        TenderIfLog.Log__c = TenderlogStr;
        TenderIfLog.Log__c += '\n end';
        if (TendererrorStr.length() > 60000) {
            TenderIfLog.ErrorLog__c = TendererrorStr.substring(0, 60000);
        } else {
            TenderIfLog.ErrorLog__c = TendererrorStr.substring(0, TendererrorStr.length());
        }
        insert TenderIfLog;
        emailMessages.add('失败日志ID为:' + TenderIfLog.Id + '\r\n失败信息:\r\n'+TendererrorStr);
        //发送邮件
        sendFieldEmail();
    }
    //批量更新招投标的询价信息
    @AuraEnabled
    WebService static String updateOpportunityInformation(List<String> TenderIdList){
        //存储错误信息
        String errorMessage = '';
        //目的 : 如果Batch执行失败,则整体rollback,标识不进行清除
        //定义List封装需要更新的招标项目
        List<Tender_information__c> updateTenderList = new List<Tender_information__c>();
        try{
            Set<String> BiddingProjectID = new Set<String>();
            for(String TenderId:TenderIdList){
                BiddingProjectID.add(TenderId);
            }
            //查询招投标信息
            List<Tender_information__c> tenderList = [SELECT Id,IsBid__c,NotBidApprovalStatus__c FROM Tender_information__c where id in :BiddingProjectID];
            Map<String,Tender_information__c> tenderMap = new Map<String,Tender_information__c>();
            for(Tender_information__c tempTender :tenderList){
                tenderMap.put( String.valueOf( tempTender.Id ).substring(0,15) ,tempTender);
            }
            //查询招标项目下的所有询价
            Map<String,List<Opportunity>> BiddingProjectOppMap = findTenderRelativeOpp(BiddingProjectID);
            //计算询价数量
            List<Tender_information__c> updateTenderNumList = updateOpportunityNum(BiddingProjectOppMap);
            //计算询价状态
            List<Tender_information__c> updateTenderNumStatusList = updateOpportunityStatus(BiddingProjectOppMap,updateTenderNumList,tenderMap);
            updateTenderList.addAll(updateTenderNumStatusList);
            //更新
            if(updateTenderList.size()>0){
                List<String> failedTenderList = new List<String>();
                // add 只有空更新招投标的时候走招投标触发器 fxk 2021/9/28 Star
                StaticParameter.EscapeOtherUpdateTenOwner = false;
                Database.SaveResult[] saveTenderResults = Database.update(updateTenderList,false);
                StaticParameter.EscapeOtherUpdateTenOwner = true;
                // add 只有空更新招投标的时候走招投标触发器 fxk 2021/9/28 End
                for(Integer i = 0;i<saveTenderResults.size();i++) {
                    if(!saveTenderResults.get(i).isSuccess()){
                        //String statusCode = String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[2].split('=')[1];
                        //String errorMsg = String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[1].split('=')[1];
                        errorMessage += '失败招标项目 :'+updateTenderList.get(i).id+'  失败原因:'
                        + String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[2].split('=')[1]
                        +' : '+String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[1].split('=')[1] + '\r\n';
                        //将更新失败的招投标项目添加掉集合中
                        failedTenderList.add(String.valueOf( updateTenderList.get(i).id ).substring(0,15));
                    }
                }
                //更新成功后,清除招投标的反应询价标识
                List<Tender_information__c> successTenderList = new List<Tender_information__c>();
                for(String tempTenderId:TenderIdList){
                    if(failedTenderList.contains( String.valueOf( tempTenderId ).substring(0,15)  )){
                        //更新失败,则不清除标识
                    }else {
                        //更新成功,清除标识
                        Tender_information__c tempTender = new Tender_information__c();
                        tempTender.Id = String.valueOf( tempTenderId ).substring(0,15);
                        tempTender.IsReactionOpp__c = false;
                        successTenderList.add(tempTender);
                    }
                }
                //清除标识
                if(successTenderList.size()>0){
                    update successTenderList;
                }
            }
            //询价流程改善 fy start
            System.debug('batch2开始');
            Id execBTId = Database.executeBatch(new UpdateTenderInformationBatch2(TenderIdList),100);
            System.debug('batch2结束');
            //询价流程改善 fy end
        }catch(NullPointerException ex){
            system.debug('aa1:'+ex.getMessage());
            return '空指针 :'+ex.getLineNumber();
        }catch(Exception ex2){
            system.debug('aa2:'+ex2.getMessage());
            return '出错了!'+ex2.getMessage();
        }
        if(String.isNotBlank(errorMessage)){
            return errorMessage;
        }
        system.debug('aa');
        return 'OK';
    }
    //0.计算询价数量
    public static List<Tender_information__c> updateOpportunityNum(Map<String,List<Opportunity>> tempMap){
        // 招标-询价关联修改 获取招标信息修改 20210817 start
        // List<Tender_information__c> updateTenderNumList = new List<Tender_information__c>();
        // //遍历Map的key
        // for(String k : tempMap.keySet()){
        //     Tender_information__c tempTender = new Tender_information__c();
        //     tempTender.id = k;
        //     String fifteenId = String.valueOf(tempTender.Id).subString(0,15);
        //     tempTender.OpportunityNum__c = tempMap.get(fifteenId).size();
        //     updateTenderNumList.add(tempTender);
        // }
        List<String> tenders = new List<String>();
        //遍历Map的key
        for(String k : tempMap.keySet()){
            tenders.add(k);
        }
        // 获得招标数据 把从询价里查询的招标字段挪到这里
        List<Tender_information__c> updateTenderNumList = [SELECT Id, Hospital__c, Hospital1__c,
        Hospital2__c, Hospital3__c, Hospital4__c, OwnerId, IsRelateProject__c, IsBid__c, department__c,
        subDepartment1__c, subDepartment2__c, subDepartment3__c, subDepartment4__c, NotBidApprovalStatus__c,
        OpportunityNum__c, OpportunityStatus__c
        //20221010  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 start
        ,OlyNumberHosts__c, RivalHostsNumber__c, TotalNumberHosts__c
        //20221010  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 end
        FROM Tender_information__c WHERE Id IN :tenders];
        // 招标-询价关联修改 20210817 end
        return updateTenderNumList;
    }
    //1.计算询价状态
    //2.赋值医院
    //3.赋值战略科室
    //  1)  如果招投标项目的关联医院为空,那么就更新为询价的医院;
    //  2)  如果招投标项目的关联主战略科室为空,那么就更新为询价创建时间最早的询价的战略科室;
    //  3)  如果招投标项目的关联副战略科室为空,那么就更新为排名优先级高的战略科室之外的其他询价的战略科室,也是以创建时间更早为先后顺序;
    //  4) 如果更新满了,多的战略科室就不更新;
    public static List<Tender_information__c> updateOpportunityStatus(Map<String,List<Opportunity>> BiddingProjectOppMap,List<Tender_information__c> updateTenderNumList,Map<String,Tender_information__c> tenderMap){
        //询价状态
        //定义List封装需要更新的招标项目
        List<Tender_information__c> updateTenderList = new List<Tender_information__c>();
        //遍历Map的key
        for(Tender_information__c tempTender : updateTenderNumList){
            String fifteenId = String.valueOf(tempTender.Id).subString(0,15);
            //获取当前招投标下的询价
            List<Opportunity> BiddingDownOppList= BiddingProjectOppMap.get(fifteenId) == null ? new List<Opportunity>() : BiddingProjectOppMap.get(fifteenId);
            //获取当前招投标下的询价的医院
            List<String> OppHospitalList = new List<String>();
            //判断状态
            if(BiddingDownOppList.size() > 0){
                //<!----  所有人 ---->
                //2021-08-09  mzy  如果招标的ownerid是奥林巴斯系统用户 就把询价的所有人写上去
                // 20210817 是不是应该直接判断tender上的?
                // if(BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.OwnerId == '00510000000gmxH'){
                if(tempTender.OwnerId == '00510000000gmxH'){
                    tempTender.OwnerId = BiddingDownOppList.get(0).ownerId;
                }
                //2021-08-09  mzy  如果招标的ownerid是奥林巴斯系统用户 就把询价的所有人写上去
                //<!----  所有人 ---->
                //<!---- 询价状态 start --->
                //<!--询价状态-->
                //WIN num
                Integer WinNum = 0;
                //失单 num
                Integer SHDNum = 0;
                //XLIU-CG98L5【委托】【评估】新需求-招标项目/询价对应流标、废标改善 fy start
                //取消 num
                Integer QuxNum = 0;
                //XLIU-CG98L5【委托】【评估】新需求-招标项目/询价对应流标、废标改善 fy end
                //中标 2022-6-29 yjk
                Integer bidNum = 0;
                //对手中标 2022-6-29 yjk
                Integer loseNum = 0;
                //20221010  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 start
                tempTender.OlyNumberHosts__c = 0;
                tempTender.RivalHostsNumber__c = 0;
                tempTender.TotalNumberHosts__c = 0;
                Decimal OlyNum = 0;
                Decimal RivalNum = 0;
                Decimal TotalNum = 0;
                //20221010  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 end
                //获取当前key的List
                for(Opportunity tempOp :BiddingDownOppList){
                    //20221010  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 start
                    System.debug('lt123---------------------------------------');
                    if(tempOp.OlyNumberHosts__c == null){
                        tempOp.OlyNumberHosts__c = 0;
                    }
                    if(tempOp.RivalHostsNumber__c == null){
                        tempOp.RivalHostsNumber__c = 0;
                    }
                    OlyNum += tempOp.OlyNumberHosts__c;
                    RivalNum += tempOp.RivalHostsNumber__c;
                    TotalNum += tempOp.InquireNumberHosts__c;
                    //20221010  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 end
                // 李慧娟备注 : 这里请替换成<SAP上传(WIN)>标识判断
                    //<!--询价状态-->
                    if(tempOp.SAP_Send_OK__c || '完毕'.equals(tempOp.StageName__c)){ // 2022-6-2 yjk SWAG-CEP9G8
                      //win
                      WinNum += 1;
                    }
                    //XLIU-CG98L5【委托】【评估】新需求-招标项目/询价对应流标、废标改善 fy start
                    // else if(tempOp.StageName__c.equals('失单') || tempOp.StageName__c.equals('取消')){ //2022-5-23 yjk SWAG-CEP9G8
                    //   //失单
                    //   SHDNum += 1;
                    // }
                    else if(tempOp.StageName__c.equals('失单')){ //2022-5-23 yjk SWAG-CEP9G8
                            //失单
                        SHDNum += 1;
                    }
                    else if(tempOp.StageName__c.equals('取消')){ //2022-5-23 yjk SWAG-CEP9G8
                            //失单
                            QuxNum += 1;
                    }
                    //XLIU-CG98L5【委托】【评估】新需求-招标项目/询价对应流标、废标改善 fy end
                    //获取询价的医院(相关性时用)
                    if(!OppHospitalList.contains(tempOp.Hospital__c)&&tempOp.Hospital__c!=null){
                        OppHospitalList.add(tempOp.Hospital__c);
                    }
                    //2022-6-29 yjk 中标确认赋值 start
                    if('OLY中标'.equals(tempOp.ConfirmationofAward__c)){
                        bidNum++;
                    }else if('竞争对手中标'.equals(tempOp.ConfirmationofAward__c)){
                        loseNum++;
                    }
                    //2022-6-29 yjk 中标确认赋值 end
                }
                //20221010  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 start
                tempTender.OlyNumberHosts__c = OlyNum;
                tempTender.RivalHostsNumber__c = RivalNum;
                tempTender.TotalNumberHosts__c = TotalNum;
                //20221010  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 end
                //<!--询价状态-->
                if(WinNum == BiddingDownOppList.size()){
                    //全部为Win,OLY确认状态 为 成交
                    tempTender.OpportunityStatus__c = '成交';
                }else if(SHDNum == BiddingDownOppList.size()){
                    //全部为失单.状态为 失单
                    tempTender.OpportunityStatus__c = '失单';
                }else if(WinNum>0&&SHDNum>0&&(WinNum + SHDNum) == BiddingDownOppList.size() ){
                    //部分Win,部分失单时, 状态为  部分成交
                    tempTender.OpportunityStatus__c = '部分成交';
                }
                //XLIU-CG98L5【委托】【评估】新需求-招标项目/询价对应流标、废标改善 fy start
                else if(QuxNum == BiddingDownOppList.size()){
                        //全部为取消.状态为 取消
                    tempTender.OpportunityStatus__c = '取消';
                }
                //XLIU-CG98L5【委托】【评估】新需求-招标项目/询价对应流标、废标改善 fy end
                else if(tempTender.OpportunityNum__c > 0){
                    //如果询价数量大于0的话就是 跟进中
                    tempTender.OpportunityStatus__c = '跟进中';
                }else{
                    //其他都是 ''
                    tempTender.OpportunityStatus__c = '';
                }
                //<!---- 询价状态  end --->
                //2022-6-29 yjk 中标确认赋值 start
                if(bidNum > 0 && loseNum == 0){
                    tempTender.ConfirmationofAward__c = 'OLY中标';
                }else if(loseNum > 0 && bidNum == 0){
                    tempTender.ConfirmationofAward__c = '竞争对手中标';
                }else if(bidNum > 0 && loseNum > 0){
                    tempTender.ConfirmationofAward__c = '部分OLY中标';
                }
                //2022-6-29 yjk 中标确认赋值 end
                //<!------ 相关性 信息   start ---->
                //定义Map存放当前招投标项目的五个医院
                Map<String,String> fiveHospitalMap = new Map<String,String>();
                // 招标-询价关联修改 这里是不是可以直接从当前招标里初始化?询价上不再关联单一的招标项目了 20210818 start
                // fiveHospitalMap.put('Hospital__c',BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.Hospital__c);
                // fiveHospitalMap.put('Hospital1__c',BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.Hospital1__c);
                // fiveHospitalMap.put('Hospital2__c',BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.Hospital2__c);
                // fiveHospitalMap.put('Hospital3__c',BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.Hospital3__c);
                // fiveHospitalMap.put('Hospital4__c',BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.Hospital4__c);
                fiveHospitalMap.put('Hospital__c', tempTender.Hospital__c);
                fiveHospitalMap.put('Hospital1__c', tempTender.Hospital1__c);
                fiveHospitalMap.put('Hospital2__c', tempTender.Hospital2__c);
                fiveHospitalMap.put('Hospital3__c', tempTender.Hospital3__c);
                fiveHospitalMap.put('Hospital4__c', tempTender.Hospital4__c);
                // 招标-询价关联修改 20210818 end
                //如果招投标项目的 是否相关 字段不为否 , 并且 相关医院 相关战略科室 相关普通科室 为空时,则更新 为询价的 医院 战略科室 客户名
                // 招标-询价关联修改 同上修改 从当前招标的数据里获得判断条件 20210818 start
                // if(!'否'.equals(BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.IsRelateProject__c)){
                if(!'否'.equals(tempTender.IsRelateProject__c)){
                // 招标-询价关联修改 20210818 end
                    //一.关联医院
                    //遍历招投标项目下所有询价的医院,给招投标项目的5个医院赋值 ---start
                    //遍历招投标项目下所有询价的医院
                    if(OppHospitalList.size()>0){
                        for(Integer i = 0; i<OppHospitalList.size();i++){
                            //当招投标项目的五个医院赋值完成后不再赋值
                            Boolean HospitalIsNeedBreak = false;
                            for(String ApiName :fiveHospitalMap.keySet()){
                                HospitalIsNeedBreak = fiveHospitalMap.get(ApiName)==null?false:true;
                            }
                            if(HospitalIsNeedBreak){
                                break;
                            }
                            //给招投标项目的5个医院设值
                            for(String ApiName : fiveHospitalMap.keySet()){
                                String tempTenderHospId = fiveHospitalMap.get(ApiName)==null?'':fiveHospitalMap.get(ApiName);
                                String oppHospId = OppHospitalList.get(i);
                                //如果招标项目已经有该医院就判断下一个询价的医院
                                if(tempTenderHospId.contains(oppHospId)){
                                    break;
                                }
                                //医院为空,赋值医院(赋值之后进行赋值下一个医院)
                                if(String.isBlank( fiveHospitalMap.get(ApiName) )){
                                    fiveHospitalMap.put(ApiName,oppHospId);
                                    break;
                                }
                            }
                        }
                    }
                    //赋值医院
                    tempTender.Hospital__c = fiveHospitalMap.get('Hospital__c');
                    tempTender.Hospital1__c = fiveHospitalMap.get('Hospital1__c');
                    tempTender.Hospital2__c = fiveHospitalMap.get('Hospital2__c');
                    tempTender.Hospital3__c = fiveHospitalMap.get('Hospital3__c');
                    tempTender.Hospital4__c = fiveHospitalMap.get('Hospital4__c');
                    //遍历招投标项目下所有询价的医院,给招投标项目的5个医院赋值 ---end
                }
                //如果 是否相关 字段已经选择否, 就不应该更新相关及相关的相关信息
                // 招标-询价关联修改 同上修改 从当前招标的数据里获得判断条件 20210818 start
                // if(!'否'.equals(BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.IsRelateProject__c)
                //     &&!'是'.equals(BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.IsRelateProject__c)){
                //     tempTender.IsRelateProject__c = '是';
                // }
                if(!'否'.equals(tempTender.IsRelateProject__c)
                    &&!'是'.equals(tempTender.IsRelateProject__c)){
                    tempTender.IsRelateProject__c = '是';
                }
                // 招标-询价关联修改 20210818 end
                //<!------ 相关性 信息   end ---->
                //<!------ 应标 信息    start---->
                //2021-08-09   mzy   关联询价成功后,不需要设置是否应标 为 是
                //如果 是否应标 字段已经选择否,就不应该更新应标及相关的相关信息
                //if(!'否'.equals(BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.IsBid__c)
                //    &&!'是'.equals(BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.IsBid__c)){
                //    tempTender.IsBid__c = '是';
                //}
                //2021-08-09  mzy  关联询价成功后,不需要设置是否应标 为 是
                //<!------ 应标 信息    end---->
            }else {
                //清空
                tempTender.OpportunityStatus__c = '';
            }
            updateTenderList.add(tempTender);
        }
        return updateTenderList;
    }
    //查询招标项目下的所有询价
    //param : 需要查询的招标项目Id
    //return Map<招投标项目Id,List<询价>>
    public static Map<String,List<Opportunity>> findTenderRelativeOpp(Set<String>  BiddingProjectID){
        //定义Map封装数据
        Map<String,List<Opportunity>> BiddingProjectOppMap = new Map<String,List<Opportunity>>();
        //查询招标项目下的所有询价
        // 招标-询价关联修改 多对多关系对应 从关联表中获取询价 20210818 start
        List<Tender_Opportunity_Link__c> links = [SELECT Id, Tender_information__c, Opportunity__c FROM Tender_Opportunity_Link__c WHERE Tender_information__c in :BiddingProjectID];
        List<String> oppIds = new List<String>();
        for (Tender_Opportunity_Link__c link : links) {
            // 多对多关系 需要去重
            if (oppIds.contains(link.Opportunity__c)) {
                continue;
            }
            oppIds.add(link.Opportunity__c);
        }
        List<Opportunity> allRelativeOppList = [SELECT Id ,AccountId,Hospital__c,Department_Class__c,SAP_Send_OK__c,CreatedDate, Whether_Bidding__c,
        Old_BiddingProject_Bid__c, OwnerId, StageName__c, Bidding_Project_Name_Bid__c, ConfirmationofAward__c
        //20221010  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 start
        ,OlyNumberHosts__c, RivalHostsNumber__c, InquireNumberHosts__c
        //20221010  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 end
        FROM Opportunity WHERE Id in :oppIds ORDER By createdDate ASC];
        // List<Opportunity> allRelativeOppList = [SELECT Id ,AccountId,Hospital__c,Department_Class__c,SAP_Send_OK__c,CreatedDate, Whether_Bidding__c,
        // Old_BiddingProject_Bid__c,Bidding_Project_Name_Bid__c ,StageName__c ,Bidding_Project_Name_Bid__r.Hospital__c,Bidding_Project_Name_Bid__r.Hospital1__c,
        // Bidding_Project_Name_Bid__r.Hospital2__c,Bidding_Project_Name_Bid__r.Hospital3__c,Bidding_Project_Name_Bid__r.Hospital4__c,
        // Bidding_Project_Name_Bid__r.OwnerId,OwnerId,
        // Bidding_Project_Name_Bid__r.IsRelateProject__c ,Bidding_Project_Name_Bid__r.IsBid__c ,Bidding_Project_Name_Bid__r.department__c,
        // Bidding_Project_Name_Bid__r.subDepartment1__c,Bidding_Project_Name_Bid__r.subDepartment2__c,Bidding_Project_Name_Bid__r.subDepartment3__c,
        // Bidding_Project_Name_Bid__r.subDepartment4__c FROM Opportunity WHERE Bidding_Project_Name_Bid__c in :BiddingProjectID ORDER By createdDate ASC];
        //遍历询价集合
        //2.按创建时间排序(正序),创建map
        for(Opportunity tempOp :allRelativeOppList){
            // 循环link,找到询价对应的招标
            for (Tender_Opportunity_Link__c link : links) {
                if (link.Opportunity__c == tempOp.Id) {
                    String fifteenTenderId = String.valueOf(link.Tender_information__c).subString(0,15);
                    //Map里面没有保存当前询价的招标项目下的询价
                    if(!BiddingProjectOppMap.containsKey(fifteenTenderId)){
                        //第一次存放
                        List<Opportunity> tempOppList = new List<Opportunity>();
                        tempOppList.add(tempOp);
                        BiddingProjectOppMap.put(fifteenTenderId,tempOppList);
                    }else {
                        //以后存放
                        List<Opportunity> tempOppListE = BiddingProjectOppMap.get(fifteenTenderId);
                        tempOppListE.add(tempOp);
                        BiddingProjectOppMap.put(fifteenTenderId,tempOppListE);
                    }
                }
            }
            //判断当前询价是否有招标项目
            // if(tempOp.Bidding_Project_Name_Bid__c!=null){
            //     String fifteenTenderId = String.valueOf(tempOp.Bidding_Project_Name_Bid__c).subString(0,15);
            //     //Map里面没有保存当前询价的招标项目下的询价
            //     if(!BiddingProjectOppMap.containsKey(fifteenTenderId)){
            //         //第一次存放
            //         List<Opportunity> tempOppList = new List<Opportunity>();
            //         tempOppList.add(tempOp);
            //         BiddingProjectOppMap.put(fifteenTenderId,tempOppList);
            //     }else {
            //         //以后存放
            //         List<Opportunity> tempOppListE =BiddingProjectOppMap.get(fifteenTenderId);
            //         tempOppListE.add(tempOp);
            //         BiddingProjectOppMap.put(fifteenTenderId,tempOppListE);
            //     }
            // }
        }
        //完善Map : 询价为0的招投标项目应该也有一列
        for(String TenderId : BiddingProjectID){
            String fifteenTenderId = TenderId.subString(0,15);
            if(!BiddingProjectOppMap.containsKey(fifteenTenderId)){
                List<Opportunity> tempOppList = new List<Opportunity>();
                BiddingProjectOppMap.put(fifteenTenderId,tempOppList);
            }
        }
        return BiddingProjectOppMap;
    }
    // 发送提醒邮件
    private void sendFieldEmail() {
        PretechBatchEmailUtil be = new PretechBatchEmailUtil();
        String[] toList = new String[] {UserInfo.getUserEmail()};
        String title = '招标项目询价状态和询价数量更新失败';
        //String[] ccList = new String[] {'Xiaochen_You@olympus.com.cn'};
        String[] ccList = new String[] {'miaoziyang@prec-tech.com'};
        if (System.Test.isRunningTest()) {
            be.successMail('', 1);
        }
        if (emailMessages.size() > 0 && TenderfailedCount > 0) {
            be.failedMail(toList, ccList, title, this.emailMessages.get(0)+'\n',
                            TendertotalCount, TendertotalCount - TenderfailedCount, TenderfailedCount,'',true);
            if(!Test.isRunningTest()){
                be.send();
            }
        }
    }
    public static void justForTest() {
        Integer i = 0;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
             i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
             i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
    }
}
force-app/main/default/classes/UpdateTenderInformationBatch.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>45.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/loanerArrangedEmailController.cls
New file
@@ -0,0 +1,95 @@
public with sharing class loanerArrangedEmailController {
    public loanerArrangedEmailController() {
    }
    @AuraEnabled
    public static InitData init(String recordId) {
        String statusSting = Label.StatusProcessState;
        List<String> status = statusSting.split(',');
        InitData res = new InitData();
        try {
            Rental_Apply__c rac = [SELECT Id, Status__c, Campaign__c, RC_return_to_office__c, Repair_Final_Inspection_Date_F__c, Repair__c, Assigned_Not_Shipment__c, Demo_purpose1__c, Contract_pdf_updated__c, Wei_Assigned_Cnt__c from Rental_Apply__c where Id = :recordId];
            if( rac.Campaign__c != null ){
                //获取学会对象
                Campaign camp = [select Id, Status, Rental_Apply_Flag__c,IF_Approved__c,Approved_Status__c, Meeting_Approved_No__c from Campaign where id = :rac.Campaign__c];
                res.CampaignId = camp.Id;
                res.CampaignStatus = camp.Status;
                res.IFApproved = camp.IF_Approved__c;
                res.MeetingApprovedNo = camp.Meeting_Approved_No__c;
                res.ApprovedStatus = camp.Approved_Status__c;
            }
            res.Id = recordId;
            res.RaStatus = rac.Status__c;
            res.WeiAssignedCnt = Integer.valueOf(rac.Wei_Assigned_Cnt__c);
            res.AssignedNotShipment = Integer.valueOf(rac.Assigned_Not_Shipment__c);
            res.DemoPurpose1 = rac.Demo_purpose1__c;
            res.ContractPdfUpdated = rac.Contract_pdf_updated__c;
            res.RepairId = rac.Repair__c;
            res.RepairFinalInspectionDateF = rac.Repair_Final_Inspection_Date_F__c;
            res.RCReturnToOffice = rac.RC_return_to_office__c;
            res.StatusList = status;
        }
        catch (Exception e) {
            System.debug(LoggingLevel.INFO, '****e:' + e);
        }
        system.debug('res======'+res);
        return res;
    }
    //获取备品借出一栏
    @AuraEnabled
    public static Integer getRentalApplyEquipmentSet(String recordId) {
        Rental_Apply__c tempRa = [SELECT Id, Bollow_Date__c from Rental_Apply__c where Id = :recordId];
        List<Rental_Apply_Equipment_Set__c> tempRaEquipSetList = new List<Rental_Apply_Equipment_Set__c>();
        Integer pageLength ;
        if(tempRa.Bollow_Date__c != null) {
            tempRaEquipSetList = [SELECT Id from Rental_Apply_Equipment_Set__c where Rental_Apply__c = :recordId AND Shippment_loaner_time__c != null and RAES_Status__c != '已分配' and RAES_Status__c != '取消分配'];
        }else {
            tempRaEquipSetList = [SELECT Id from Rental_Apply_Equipment_Set__c where Rental_Apply__c = :recordId AND RAES_Status__c != '已分配' and RAES_Status__c != '取消分配'];
        }
        //
        if(tempRaEquipSetList.size()>0) {
            Integer setLength = tempRaEquipSetList.size();
            pageLength = Math.mod(setLength,10) == 0 ? setLength/10 : Math.round(setLength) + 1;
        }
        return pageLength;
    }
    public class InitData{
        @AuraEnabled
        public String Id;
        @AuraEnabled
        public String CampaignStatus;    //学会状态
        @AuraEnabled
        public String CampaignId;    //学会Id
        @AuraEnabled
        public String RaStatus;        //备品借出申请状态
        @AuraEnabled
        public Integer WeiAssignedCnt;        //未分配件数  Wei_Assigned_Cnt__c
        @AuraEnabled
        public Integer AssignedNotShipment;    //已分配未出库指示  Assigned_Not_Shipment__c
        @AuraEnabled
        public String DemoPurpose1;            //使用目的1     Demo_purpose1__c
        @AuraEnabled
        public Boolean ContractPdfUpdated;    //合同书已上传    Contract_pdf_updated__c
        @AuraEnabled
        public String RepairId;                //学会.修理Id
        @AuraEnabled
        public Date RepairFinalInspectionDateF;        //修理最终检测日F      Repair_Final_Inspection_Date_F__c
        @AuraEnabled
        public Date RCReturnToOffice;        //RC修理品返送日        RC_return_to_office__c
        @AuraEnabled
        public Boolean IFApproved;            //学会.是否需要申请决裁
        @AuraEnabled
        public String MeetingApprovedNo;    //学会.会议决裁编码
        @AuraEnabled
        public String ApprovedStatus;        //学会.决裁状态    Approved_Status__c
        @AuraEnabled
        public List<String> StatusList;
    }
}
force-app/main/default/classes/loanerArrangedEmailController.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>51.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/rentalApplyEquipmentRentalPDFController.cls
New file
@@ -0,0 +1,25 @@
public with sharing class rentalApplyEquipmentRentalPDFController {
    public rentalApplyEquipmentRentalPDFController() {
    }
    @AuraEnabled
    public static InitData initJumptoPDFButton(String recordId) {
        InitData res = new InitData();
        try {
            List<Rental_Apply_Equipment_Set__c> raeSet = [SELECT Id from Rental_Apply_Equipment_Set__c where Rental_Apply__c = :recordId and Yi_Shipment_request__c > 0 and RAES_Status__c != '取消'];
            Integer setLength = raeSet.size();
            res.pageLength = Math.mod(setLength,10)== 0 ? setLength/10 : Math.round(setLength) +1 ;
        }catch(Exception e){
            System.debug(LoggingLevel.INFO, '****e:' + e);
        }
        return res;
    }
    public class InitData{
        @AuraEnabled
        public String Id;
        @AuraEnabled
        public Integer pageLength;
    }
}
force-app/main/default/classes/rentalApplyEquipmentRentalPDFController.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>51.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/lwc/lexAgencyAuthorize/__tests__/lexAgencyAuthorize.test.js
New file
@@ -0,0 +1,25 @@
import { createElement } from 'lwc';
import LexAgencyAuthorize from 'c/lexAgencyAuthorize';
describe('c-lex-agency-authorize', () => {
    afterEach(() => {
        // The jsdom instance is shared across test cases in a single file so reset the DOM
        while (document.body.firstChild) {
            document.body.removeChild(document.body.firstChild);
        }
    });
    it('TODO: test case generated by CLI command, please fill in test logic', () => {
        // Arrange
        const element = createElement('c-lex-agency-authorize', {
            is: LexAgencyAuthorize
        });
        // Act
        document.body.appendChild(element);
        // Assert
        // const div = element.shadowRoot.querySelector('div');
        expect(1).toBe(1);
    });
});
force-app/main/default/lwc/lexAgencyAuthorize/lexAgencyAuthorize.css
New file
@@ -0,0 +1,10 @@
.inASACEditorHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/lexAgencyAuthorize/lexAgencyAuthorize.html
New file
@@ -0,0 +1,6 @@
<template>
    <div class="inASACEditorHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
        <lightning-button label="Show Toast" onclick={showSuccess}></lightning-button>
    </div>
</template>
force-app/main/default/lwc/lexAgencyAuthorize/lexAgencyAuthorize.js
New file
@@ -0,0 +1,198 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-12 14:51:44
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-19 09:11:02
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import init  from '@salesforce/apex/OpportunityLightingButtonController.initForAgencyAuthorizeButton';
import updateForAgencyAuthorizeButton  from '@salesforce/apex/OpportunityLightingButtonController.updateForAgencyAuthorizeButton';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import checkDangerItem from '@salesforce/apex/OpportunityWebService.checkDangerItem';
import oppCheck from '@salesforce/apex/OpportunityWebService.oppCheck';
import updReg from '@salesforce/apex/OpportunityWebService.updReg';
export default class LexAgencyAuthorize extends LightningElement {
    @api recordId;
    agency1Id;
    stageName;
    sapSendOK;
    oppOrderType;
    ifHave170;
    ifHaveAH;
    cntLostCancelDraft;
    cntLostCancelReport;
    estimationId;
    detailNum;
    estimationDecision;
    salesRoot;
    acecideCntCheck;
    ifSubmit;
    trade;
    isCorrosion;
    profileId;
    ifAuthorizingLock;
    IsLoading = true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
            console.log(111);
            console.log(currentPageReference);
        if (currentPageReference) {
          const urlValue = currentPageReference.state.recordId;
          if (urlValue) {
            let str = `${urlValue}`;
            console.log("str");
            console.log(str);
            this.recordId = str;
          }
        }
    }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result=>{
            console.log(result);
            this.agency1Id = result.agency1Id;
            this.stageName = result.stageName;
            this.sapSendOK = result.sapSendOK;
            this.oppOrderType = result.oppOrderType;
            this.ifHave170 = result.ifHave170;
            this.ifHaveAH = result.ifHaveAH;
            this.cntLostCancelDraft = result.cntLostCancelDraft;
            this.cntLostCancelReport = result.cntLostCancelReport;
            this.estimationId = result.estimationId;
            this.detailNum = result.detailNum;
            this.estimationDecision = result.estimationDecision;
            this.salesRoot = result.salesRoot;
            this.acecideCntCheck = result.acecideCntCheck;
            this.ifSubmit = result.ifSubmit;
            this.trade = result.trade;
            this.isCorrosion = result.isCorrosion;
            this.profileId = result.profileId;
            this.ifAuthorizingLock = result.ifAuthorizingLock;
            this.AgencyAuthorize();
        })
    }
    AgencyAuthorize(){
        var btns = document.getElementsByName("agency_authorize");
        for (var i=0; i<btns.length; i++) {
        btns[i].disabled = true;
        btns[i].className = 'btnDisabled';
        }
        //2021-10-21 gwy 版本更改为51.0
        var oppid = this.recordId;
        var angency = this.agency1Id;
        var profileId = this.profileId;
        if (profileId != '00e10000000Y3o5' && profileId != '00e10000000Nab7' && profileId != '00e10000000xnpR' && profileId != '00e10000000xyK6' && profileId != '00e10000000NbCE'
        && profileId != '00e10000000xyK6' && profileId != '00e10000000Nb7i') {
            this.showToast("您没有授权申请的权限。请联系系统管理员。","error");
            return;
        }
        if (this.stageName != '引合' && this.stageName != '询价' ) {
            this.showToast("状态1:" + this.stageName + "、不能做授权申请!","error");
            return;
        } else if (this.sapSendOK == '1') {
            this.showToast("已经上传SAP、不能做授权申请了!","error");
            return;
        } else if (this.oppOrderType != undefined && this.ifHave170 == true) {
            this.showToast("耗材不可与170产品同时存在!","error");
            return;
        } else if (this.oppOrderType != undefined && this.ifHaveAH == true) {
            this.showToast("耗材不可与奥辉产品同时存在!","error");
            return;
        } else if (this.cntLostCancelDraft > 0) {
        if(!confirm('询价有草案中的取消/失单报告,是否继续?')){
            return ;
        }
        } else if (this.cntLostCancelReport - this.cntLostCancelDraft > 0) {
            this.showToast('询价有已提交的取消/失单报告。',"error");
            return;
        } else if (this.estimationId == undefined || this.detailNum == 0) {
            this.showToast('报价未完成,请先报价。',"error");
            return;
        } else if (this.estimationDecision == '1') {
            this.showToast('报价已决定,不能进行授权申请。',"error");
            return;
        } else if (this.salesRoot != '販売店') {
            this.showToast('医院直销不需要授权申请。',"error");
            return;
        }
        // else if ('{!Opportunity.AcecideCntCheck__c}' != '1') {
        // alert('阿西赛多询价只能包含危化品,或者,普通询价不能包含危化品。');
        // return;
        // }
        else if (this.ifSubmit == '1') {
            this.showToast('上传失败,请联系系统管理员!',"error");
            return;
        }
        if (this.ifAuthorizingLock == 'true') {
            this.showToast('询价正在授权中,请不要重复提交。',"error");
            return;
        }
        if (this.trade == '内貿') {
            if(this.isCorrosion == '1'){
                checkDangerItem({
                    agency1: angency
                }).then(result=>{
                    var rtn1 = result;
                    if (rtn1 != 'OK') {
                        this.showToast(rtn1,"error");
                        return;
                    }
                    this.update();
            });
            }else{
                oppCheck({
                    oppid: oppid,
                    saveFlg: '1'
                }).then(result=>{
                    var rtn = result;
                    if (rtn != 'OK') {
                        this.showToast(rtn,"error");
                        return;
                    }
                    this.update();
                })
            }
        } else {
            updReg({
                oppid: oppid
            }).then(()=>{
                this.update();
            });
        }
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            title: '',
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
        this.dispatchEvent(new CloseActionScreenEvent());
    }
    updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
    }
    update(){
        updateForAgencyAuthorizeButton({
            recordId: this.recordId
        }).then(result=>{
            if(result){
                this.showToast(result,"error");
            }else{
                this.updateRecordView(this.recordId);
                window.open("https://olympus.sharepoint.cn/sites/GSPWF/SitePages/HomePage.aspx");
                this.showToast('提交成功。请在SPO系统中完成授权申请。',"success");
            }
            this.IsLoading = false;
        })
    }
}
force-app/main/default/lwc/lexAgencyAuthorize/lexAgencyAuthorize.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexApplicationCancelSubmit/lexApplicationCancelSubmit.js
@@ -5,7 +5,7 @@
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import submitCancel from '@salesforce/apex/ApplicationButtonController.submitCancel';
import UserInfo_Owner from '@salesforce/apex/ApplicationButtonController.UserInfo_Owner';
import userInfo_Owner from '@salesforce/apex/ApplicationButtonController.userInfo_Owner';
export default class lexApplicationCancelSubmit extends LightningElement {
    @api recordId;//OwnerId
    ownerId;
@@ -31,16 +31,12 @@
                this.ownerId = result.OwnerId;
                this.monthlyReportId = result.Id;
                this.cancelSubmit();
        }).catch(() => {
        }).finally(() => {
        });
        })
    }
    //授权申请 取消提交
    cancelSubmit(){
        //'获取当前登陆人id'
        UserInfo_Owner({}).then(result=>{
        userInfo_Owner({}).then(result=>{
            if(this.ownerId == result.id){
                submitCancel({
                    recordId: this.recordId
force-app/main/default/lwc/lexApplicationSubmitButton/lexApplicationSubmitButton.js
@@ -2,7 +2,7 @@
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import  init  from '@salesforce/apex/ApplicationButtonController.initSubmitButton';
import UserInfo_Owner from '@salesforce/apex/ApplicationButtonController.UserInfo_Owner';
import userInfo_Owner from '@salesforce/apex/ApplicationButtonController.userInfo_Owner';
import submit  from '@salesforce/apex/ApplicationButtonController.submit';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
@@ -34,15 +34,13 @@
                this.id = result.Id;
                this.Submit();
            }
        }).catch(() => {
        }).finally(() => {
        });
        })
    }
    Submit(){
        this.arrMessage = [];
        //获取获取当前登陆人
        UserInfo_Owner({}).then(result=>{
        userInfo_Owner({}).then(result=>{
            if(this.ownerId == result.id){
                submit({
                    recordId: this.recordId
force-app/main/default/lwc/lexAssetMaintainDetail/lexAssetMaintainDetail.css
New file
@@ -0,0 +1,11 @@
.Holder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display : none !important;
}
force-app/main/default/lwc/lexAssetMaintainDetail/lexAssetMaintainDetail.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="Holder" if:true={IsLoading}>
          <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
      </div>
</template>
force-app/main/default/lwc/lexAssetMaintainDetail/lexAssetMaintainDetail.js
New file
@@ -0,0 +1,38 @@
import { LightningElement, track, wire, api } from 'lwc';
import {CurrentPageReference} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
export default class lexAssetMaintainDetail extends LightningElement {
    @api recordId;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        console.log("进入页面");
        console.log(currentPageReference);
        if(currentPageReference){
            const urvalue=currentPageReference.state.recordId;
            if(urvalue){
                let str=`${urvalue}`;
                console.log('str');
                console.log(str);
                this.recordId=str;
            }
        }
    }
    connectedCallback(){
        this.cancelSubmit().then(res=>{
            this.IsLoading=false;
            this.dispatchEvent(new CloseActionScreenEvent());
        });
    }
    async cancelSubmit(){
        window.open('/apex/AssetMaintainDetail?id='+this.recordId,'AssetMaintainDetail', 'width=600,height=200');
    }
}
// old js
// window.open('/apex/AssetMaintainDetail?id={! AssetMaintainHeader__c.Id }');
force-app/main/default/lwc/lexAssetMaintainDetail/lexAssetMaintainDetail.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexAssetMaintainDetail">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexAssetMaintainPage/lexAssetMaintainPage.html
New file
@@ -0,0 +1,3 @@
<template>
</template>
force-app/main/default/lwc/lexAssetMaintainPage/lexAssetMaintainPage.js
New file
@@ -0,0 +1,35 @@
import { LightningElement, track, wire, api } from 'lwc';
import {CurrentPageReference} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
export default class lexAssetMaintainPage extends LightningElement {
    @api recordId;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        console.log("进入页面");
        console.log(currentPageReference);
        if(currentPageReference){
            const urvalue=currentPageReference.state.recordId;
            if(urvalue){
                let str=`${urvalue}`;
                console.log('str');
                console.log(str);
                this.recordId=str;
            }
        }
    }
    connectedCallback(){
        this.cancelSubmit().then(res=>{
            this.IsLoading=false;
            this.dispatchEvent(new CloseActionScreenEvent());
        });
    }
    async cancelSubmit(){
        window.open('/apex/AssetMaintain?id='+this.recordId,'lexAssetMaintainPage', 'width=600,height=200');
    }
}
force-app/main/default/lwc/lexAssetMaintainPage/lexAssetMaintainPage.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexAssetMaintainPage">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexBeforeOPDPDFBtn/__tests__/lexBeforeOPDPDFBtn.test.js
New file
@@ -0,0 +1,25 @@
import { createElement } from 'lwc';
import LexBeforeOPDPDFBtn from 'c/lexBeforeOPDPDFBtn';
describe('c-lex-before-opdpdf-btn', () => {
    afterEach(() => {
        // The jsdom instance is shared across test cases in a single file so reset the DOM
        while (document.body.firstChild) {
            document.body.removeChild(document.body.firstChild);
        }
    });
    it('TODO: test case generated by CLI command, please fill in test logic', () => {
        // Arrange
        const element = createElement('c-lex-before-opdpdf-btn', {
            is: LexBeforeOPDPDFBtn
        });
        // Act
        document.body.appendChild(element);
        // Assert
        // const div = element.shadowRoot.querySelector('div');
        expect(1).toBe(1);
    });
});
force-app/main/default/lwc/lexBeforeOPDPDFBtn/lexBeforeOPDPDFBtn.css
New file
@@ -0,0 +1,10 @@
.lexBeforeOPDPDFBtnHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/lexBeforeOPDPDFBtn/lexBeforeOPDPDFBtn.html
New file
@@ -0,0 +1,15 @@
<!--
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-13 15:08:43
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-14 14:13:25
-->
<template>
    <div class="lexBeforeOPDPDFBtnHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
        <lightning-button label="Show Toast" onclick={showToast}></lightning-button>
        <lightning-button onclick={handleConfirmClick} label="Open Confirm Modal"></lightning-button>
    </div>
</template>
force-app/main/default/lwc/lexBeforeOPDPDFBtn/lexBeforeOPDPDFBtn.js
New file
@@ -0,0 +1,108 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-13 15:08:43
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-14 15:37:35
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import init  from '@salesforce/apex/OpportunityLightingButtonController.initFoBeforeOPDPDFBtnButton';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import selectCommonSequence from '@salesforce/apex/ControllerUtil.selectCommonSequence';
import addReportOPWithEvaluationPDF from '@salesforce/apex/Add_Report.addReportOPWithEvaluationPDF';
import LightningConfirm from 'lightning/confirm';
export default class LexBeforeOPDPDFBtn extends LightningElement {
    @api recordId;
    accountId;
    userId;
    IsLoading = true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
            console.log(111);
            console.log(currentPageReference);
        if (currentPageReference) {
          const urlValue = currentPageReference.state.recordId;
          if (urlValue) {
            let str = `${urlValue}`;
            console.log("str");
            console.log(str);
            this.recordId = str;
          }
        }
    }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result=>{
            this.accountId = result.accountId;
            this.userId = result.userId;
            this.beforeOPDPDFBtn();
        })
    }
    beforeOPDPDFBtn(){
        this.handleConfirmClick('是否新建OPD报告书?\n[确定] => 新建OPD\n[取消] => 只生成 [产品试用评价]');
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            title: '',
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
    }
    async handleConfirmClick(msg) {
        const result = await LightningConfirm.open({
            message: msg,
            variant: 'headerless',
            label: 'this is the aria-label value',
        });
        console.log(result);
        if(result){
            try {
                selectCommonSequence({
                    valueField: 'EvaluationPDF_NextValue__c',
                    formatField: 'EvaluationPDF_Format__c'
                }).then(result=>{
                    var pdfno = result;
                    addReportOPWithEvaluationPDF({
                        "repOwnerId": this.userId,
                        "reportId": "",
                        "dailyReportId": "",
                        "eventId": "",
                        "recordType": "OPD",
                        "aId": this.accountId,
                        "visitor1": "",
                        "visitor2": "",
                        "visitor3": "",
                        "visitor4": "",
                        "visitor5": "",
                        "opp1": this.recordId,
                        "opp2": "",
                        "opp3": "",
                        "opp4": "",
                        "opp5": "",
                        "reportDate": "",
                        "evaluationPDFNumber": pdfno
                    }).then(()=>{
                        // 20220913 ljh WLIG-CHMATN update end
                        this.IsLoading = false;
                        window.open('/apex/BeforeOPDPDF?oid=' + this.recordId + '&pdfNo=' + pdfno, 'BeforeOPDPDF');
                        this.dispatchEvent(new CloseActionScreenEvent());
                    })
                });
                } catch(e) {
                    this.showToast(e,"error");
                    this.dispatchEvent(new CloseActionScreenEvent());
                }
        }else{
            window.open('/apex/BeforeOPDPDF?oid=' + this.recordId, 'BeforeOPDPDF');
            this.dispatchEvent(new CloseActionScreenEvent());
        }
    }
}
force-app/main/default/lwc/lexBeforeOPDPDFBtn/lexBeforeOPDPDFBtn.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexBeforeOPDPDFBtnSIS/__tests__/lexBeforeOPDPDFBtnSIS.test.js
New file
@@ -0,0 +1,25 @@
import { createElement } from 'lwc';
import LexBeforeOPDPDFBtnSIS from 'c/lexBeforeOPDPDFBtnSIS';
describe('c-lex-before-opdpdf-btn-sis', () => {
    afterEach(() => {
        // The jsdom instance is shared across test cases in a single file so reset the DOM
        while (document.body.firstChild) {
            document.body.removeChild(document.body.firstChild);
        }
    });
    it('TODO: test case generated by CLI command, please fill in test logic', () => {
        // Arrange
        const element = createElement('c-lex-before-opdpdf-btn-sis', {
            is: LexBeforeOPDPDFBtnSIS
        });
        // Act
        document.body.appendChild(element);
        // Assert
        // const div = element.shadowRoot.querySelector('div');
        expect(1).toBe(1);
    });
});
force-app/main/default/lwc/lexBeforeOPDPDFBtnSIS/lexBeforeOPDPDFBtnSIS.css
New file
@@ -0,0 +1,10 @@
.lexBeforeOPDPDFBtnSISHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/lexBeforeOPDPDFBtnSIS/lexBeforeOPDPDFBtnSIS.html
New file
@@ -0,0 +1,14 @@
<!--
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-13 15:55:45
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-13 15:56:58
-->
<template>
    <div class="lexBeforeOPDPDFBtnSISHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
        <lightning-button label="Show Toast" onclick={showSuccess}></lightning-button>
    </div>
</template>
force-app/main/default/lwc/lexBeforeOPDPDFBtnSIS/lexBeforeOPDPDFBtnSIS.js
New file
@@ -0,0 +1,97 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-13 15:55:45
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-13 16:04:14
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import init  from '@salesforce/apex/OpportunityLightingButtonController.initFoBeforeOPDPDFBtnSISButton';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import selectCommonSequence from '@salesforce/apex/ControllerUtil.selectCommonSequence';
import addReportOPWithEvaluationPDF from '@salesforce/apex/Add_Report.addReportOPWithEvaluationPDF';
export default class LexBeforeOPDPDFBtnSIS extends LightningElement {
    @api recordId;
    accountId;
    userId;
    IsLoading = true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
            console.log(111);
            console.log(currentPageReference);
        if (currentPageReference) {
          const urlValue = currentPageReference.state.recordId;
          if (urlValue) {
            let str = `${urlValue}`;
            console.log("str");
            console.log(str);
            this.recordId = str;
          }
        }
    }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result=>{
            this.accountId = result.accountId;
            this.userId = result.userId;
            this.beforeOPDPDFBtn();
        })
    }
    beforeOPDPDFBtn(){
        if (window.confirm('是否新建SIS报告书?')) {
            try {
            selectCommonSequence({
                valueField: 'EvaluationPDF_NextValue__c',
                formatField: 'EvaluationPDF_Format__c'
            }).then(result=>{
                var pdfno = result;
                addReportOPWithEvaluationPDF({
                    "repOwnerId": this.userId,
                    "reportId": "",
                    "dailyReportId": "",
                    "eventId": "",
                    "recordType": "SIS",
                    "aId": this.accountId,
                    "visitor1": "",
                    "visitor2": "",
                    "visitor3": "",
                    "visitor4": "",
                    "visitor5": "",
                    "opp1": this.recordId,
                    "opp2": "",
                    "opp3": "",
                    "opp4": "",
                    "opp5": "",
                    "reportDate": "",
                    "evaluationPDFNumber": pdfno
                }).then(()=>{
                    // 20220913 ljh WLIG-CHMATN update end
                    this.IsLoading = false;
                    window.open('/apex/BeforeOPDPDF?oid=' + this.recordId + '&pdfNo=' + pdfno, 'BeforeOPDPDF');
                    this.dispatchEvent(new CloseActionScreenEvent());
                })
            });
            } catch(e) {
                this.showToast(e,"error");
                this.dispatchEvent(new CloseActionScreenEvent());
            }
        } else {
            window.open('/apex/BeforeOPDPDF?oid=' + this.recordId, 'BeforeOPDPDF');
            this.dispatchEvent(new CloseActionScreenEvent());
        }
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            title: '',
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
    }
}
force-app/main/default/lwc/lexBeforeOPDPDFBtnSIS/lexBeforeOPDPDFBtnSIS.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexBidAnnouncementApplyForButton/lexBidAnnouncementApplyForButton.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="ApplyFor" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexBidAnnouncementApplyForButton/lexBidAnnouncementApplyForButton.js
New file
@@ -0,0 +1,53 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import  ApplyFor  from '@salesforce/apex/BidAnnouncementController.ApplyFor';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class lexBidAnnouncementApplyForButton extends LightningElement {
    @api recordId;//
    IsLoading = true;
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             this.recordId = str;
           }
         }
     }
    connectedCallback(){
        this.IsLoading = false;
        this.ApplyFor();
    }
    //中标通知书 申请
    ApplyFor(){
        ApplyFor({recordId:this.recordId}).then(res=>{
            if(res == '1'){
                this.showToast('请求申请成功,申请中。。。','success');
                this.updateRecordView();
            }else{
                var messageage = "";
                messageage = res.split(',')[1];
                this.showToast(messageage,'error');
            }
        })
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
        this.dispatchEvent(new CloseActionScreenEvent());
    }
    updateRecordView() {
        updateRecord({fields: { Id: this.recordId }});
    }
}
force-app/main/default/lwc/lexBidAnnouncementApplyForButton/lexBidAnnouncementApplyForButton.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexBidAnnouncementConsentButton/lexBidAnnouncementConsentButton.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="Consent" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexBidAnnouncementConsentButton/lexBidAnnouncementConsentButton.js
New file
@@ -0,0 +1,53 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import  ConSent  from '@salesforce/apex/BidAnnouncementController.ConSent';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class lexBidAnnouncementRejectButton extends LightningElement {
    @api recordId;
    IsLoading = true;
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             this.recordId = str;
           }
         }
     }
    connectedCallback(){
        this.IsLoading = false;
        this.Consent();
    }
    //中标通知书 同意
    Consent(){
        ConSent({recordId:this.recordId}).then(res=>{
            if(res == '1'){
                this.showToast("同意请求成功","success");
            }
            if(res != "1"){
                var messageage = "";
                messageage = res.split(',')[1];
                this.showToast(messageage,"error");
            }
        })
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
        if(type == 'success'){
            this.updateRecordView();
        }
        this.dispatchEvent(new CloseActionScreenEvent());
    }
    updateRecordView() {
        updateRecord({fields: { Id: this.recordId }});
    }
}
force-app/main/default/lwc/lexBidAnnouncementConsentButton/lexBidAnnouncementConsentButton.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexBidAnnouncementRejectButton/lexBidAnnouncementRejectButton.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="reject" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexBidAnnouncementRejectButton/lexBidAnnouncementRejectButton.js
New file
@@ -0,0 +1,65 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import  UserInfo_Owner  from '@salesforce/apex/BidAnnouncementController.UserInfo_Owner';
import  Reject  from '@salesforce/apex/BidAnnouncementController.Reject';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class lexBidAnnouncementRejectButton extends LightningElement {
    @api recordId;
    IsLoading = true;
    BidCancel = null;
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             this.recordId = str;
           }
         }
     }
    connectedCallback(){
        this.IsLoading = false;
        this.Reject();
    }
    //中标通知书 驳回
    Reject(){
        UserInfo_Owner().then(res=>{
            this.BidCancel = res.BidCancel;
            if(this.BidCancel == false){
                this.showToast('没有驳回的权限',"error");
            }else{
                Reject({
                    recordId: this.recordId
                }).then(requst=>{
                    if(requst == '1'){
                        this.showToast("驳回请求成功","success");
                    }
                    if(requst != "1"){
                        var messageage = "";
                        messageage = requst.split(',')[1];
                        this.showToast(messageage,"error");
                    }
                })
            }
        })
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
        if(type == 'success'){
            this.updateRecordView();
        }
        this.dispatchEvent(new CloseActionScreenEvent());
    }
    updateRecordView() {
        updateRecord({fields: { Id: this.recordId }});
    }
}
force-app/main/default/lwc/lexBidAnnouncementRejectButton/lexBidAnnouncementRejectButton.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexCancel/lexCancel.js
@@ -1,3 +1,11 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-03-27 13:47:21
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-11 16:44:49
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
@@ -37,14 +45,10 @@
                this.status = result.status;
                console.log(this.status);
                this.cancel();
                this.IsLoading = false;
            }
        }).catch(error => {
            console.log("error");
            console.log(error);
        }).finally(() => {
        });
    }
@@ -65,30 +69,35 @@
    cancel () {
        if (this.status == "取消") {
            ShowToastEvent("已经取消!","error");
            this.showToast("已经取消!","error");
            this.dispatchEvent(new CloseActionScreenEvent());
            return;
            }
        if (this.status == "批准") {
            ShowToastEvent("已经批准,不能删除!","error");
            this.showToast("已经批准,不能删除!","error");
            this.dispatchEvent(new CloseActionScreenEvent());
            return;
        }
        if (this.status == "完毕") {
            ShowToastEvent("已经完毕,不能删除!","error");
            this.showToast("已经完毕,不能删除!","error");
            this.dispatchEvent(new CloseActionScreenEvent());
            return;
        }
        if (this.status == "提交") {
            ShowToastEvent("已经提交,不能删除!","error");
            this.showToast("已经提交,不能删除!","error");
            this.dispatchEvent(new CloseActionScreenEvent());
            return;
        }
        updateForCancelButton({
            recordId: this.recordId
        }).then(result =>{
            this.showToast("取消成功!","success");
            this.updateRecordView(this.recordId);
            if(result){
                this.showToast(result,"error");
            }else{
                this.showToast("取消成功!","success");
                this.updateRecordView(this.recordId);
            }
            this.IsLoading = false;
            this.dispatchEvent(new CloseActionScreenEvent());
        });
    }
force-app/main/default/lwc/lexCancelApply/lexCancelApply.html
New file
@@ -0,0 +1,4 @@
<template>
</template>
force-app/main/default/lwc/lexCancelApply/lexCancelApply.js
New file
@@ -0,0 +1,100 @@
import { LightningElement, track, wire, api } from 'lwc';
import LightningConfirm from 'lightning/confirm';
import {CurrentPageReference,NavigationMixin} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import cancelApply from '@salesforce/apex/TransferApplyWebService.cancelApply';
export default class lexCancelApply extends LightningElement {
     @api recordId;
     IsLoading=true;
     cancelResult;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        console.log("进入页面");
        console.log(currentPageReference);
        if(currentPageReference){
            const urvalue=currentPageReference.state.recordId;
            if(urvalue){
                let str=`${urvalue}`;
                console.log('str');
                console.log(str);
                this.recordId=str;
            }
        }
    }
    connectedCallback() {
        console.log('this.raeSetId:' + this.recordId);
        LightningConfirm.open({
            message: '确定取消?',
            variant: 'headerless',
            label: 'this is the aria-label value',
        }).then(cancel=>{
      //       this.IsLoading=false;
            // this.dispatchEvent(new CloseActionScreenEvent());
            if(cancel) {
                cancelApply({
                    taId : this.recordId
                }).then(result => {
                    this.cancelResult = result;
                    this.cancelSubmit().then(res=>{
                        this.IsLoading=false;
                        this.dispatchEvent(new CloseActionScreenEvent());
                    });
                }).catch( error =>{
                    console.log(error);
                }).finally(()=>{
                });
            }
        });
    }
    async cancelSubmit(){
        if(this.cancelResult == '1') {
            await this.showToast("",'取消成功',"success");
            window.location.href = window.location;
        } else {
            console.log("result:",this.cancelResult);
            await this.showToast("",this.cancelResult,"warning");
        }
    }
    showToast(_title,_message,_variant) {
        const event = new ShowToastEvent({
            title: _title,
            message:_message,
            variant: _variant,
        });
        this.dispatchEvent(event);
    }
}
//old js
// {!REQUIRESCRIPT('/soap/ajax/51.0/connection.js')}
// {!REQUIRESCRIPT('/soap/ajax/51.0/apex.js')}
// if (confirm("确定取消?")) {
// var rs = sforce.apex.execute("TransferApplyWebService","cancelApply",{taId:'{!TransferApply__c.Id}'});
// if(rs == '1'){
// alert('取消成功');
// window.location.href = window.location;
// }
// else{
// alert(rs);
// }
// }
force-app/main/default/lwc/lexCancelApply/lexCancelApply.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexCancelApply">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexCancelReport/__tests__/lexCancelReport.test.js
New file
@@ -0,0 +1,25 @@
import { createElement } from 'lwc';
import LexCancelReport from 'c/lexCancelReport';
describe('c-lex-cancel-report', () => {
    afterEach(() => {
        // The jsdom instance is shared across test cases in a single file so reset the DOM
        while (document.body.firstChild) {
            document.body.removeChild(document.body.firstChild);
        }
    });
    it('TODO: test case generated by CLI command, please fill in test logic', () => {
        // Arrange
        const element = createElement('c-lex-cancel-report', {
            is: LexCancelReport
        });
        // Act
        document.body.appendChild(element);
        // Assert
        // const div = element.shadowRoot.querySelector('div');
        expect(1).toBe(1);
    });
});
force-app/main/default/lwc/lexCancelReport/lexCancelReport.css
New file
@@ -0,0 +1,10 @@
.cancelReportHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/lexCancelReport/lexCancelReport.html
New file
@@ -0,0 +1,6 @@
<template>
    <div class="cancelReportHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
        <lightning-button label="Show Toast" onclick={ShowToastEvent}></lightning-button>
    </div>
</template>
force-app/main/default/lwc/lexCancelReport/lexCancelReport.js
New file
@@ -0,0 +1,116 @@
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import init  from '@salesforce/apex/OpportunityLightingButtonController.initForCancelReportButton';
import queryForCancelReportButton  from '@salesforce/apex/OpportunityLightingButtonController.queryForCancelReportButton';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class LexCancelReport extends LightningElement {
    @api recordId;
    stageName;
    sapSendOK;
    cntLostCancelReport;
    cntLostCancelDraft;
    jobCategory;
    biddingProjectNameBid;
    name;
    salesAssistantName;
    salesAssistantID;
    managerName;
    salesManagerDepartmentID;
    salesOwnerBuchang;
    salesOwnerBuchangID;
    IsLoading = true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
            console.log(111);
            console.log(currentPageReference);
        if (currentPageReference) {
          const urlValue = currentPageReference.state.recordId;
          if (urlValue) {
            let str = `${urlValue}`;
            console.log("str");
            console.log(str);
            this.recordId = str;
          }
        }
    }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result=>{
            this.stageName = result.stageName;
            this.sapSendOK = result.sapSendOK;
            this.cntLostCancelDraft = result.cntLostCancelDraft;
            this.cntLostCancelReport = result.cntLostCancelReport;
            this.jobCategory = result.jobCategory;
            this.biddingProjectNameBid = result.biddingProjectNameBid;
            this.name = result.name;
            this.salesAssistantID = result.salesAssistantID;
            this.salesAssistantName = result.salesAssistantName;
            this.managerName = result.managerName;
            this.salesManagerDepartmentID = result.salesManagerDepartmentID;
            this.salesOwnerBuchang = result.salesOwnerBuchang;
            this.salesOwnerBuchangID = result.salesOwnerBuchangID;
            this.cancelReport();
        })
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            title: '',
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
    }
    updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
    }
    cancelReport(){
        //XLIU-CG98L5 【委托】【评估】新需求-招标项目/询价对应流标、废标改善 start
        queryForCancelReportButton({
            recordId: this.recordId
        }).then(result=>{
            var sqlResult = result;
            // alert('测试+:'+sqlResult.size);
            //XLIU-CG98L5 【委托】【评估】新需求-招标项目/询价对应流标、废标改善 end
            // jsの場合、翻訳された値がでるので、要注意
            if (this.stageName != '引合'
            && this.stageName != '询价'
            ) {
                this.showToast("状态1:" + this.stageName + "、不能做 取消 了!","error");
            }
            else if (this.sapSendOK == '1') {
                this.showToast("已经上传SAP、不能做 取消 了!","");
            }
            else if (this.cntLostCancelReport - this.cntLostCancelDraft > 0) {
                this.showToast("询价已经有 取消/失单报告 了!","error");
            }
            else if (this.jobCategory == '支援') {
                this.showToast("询价所有人是助理的,先请修改到销售担当!","");
            }
            //XLIU-CG98L5 【委托】【评估】新需求-招标项目/询价对应流标、废标改善 start
            //else if({!NOT(ISBLANK(Opportunity.Bidding_Project_Name_Bid__c))}&& '{!Opportunity.subInfoType__c}' != '3-1:废标公告' &&'{!Opportunity.subInfoType__c}' != '3-2:流标公告'){
            else if(this.biddingProjectNameBid != undefined && sqlResult.size == 0){
                this.showToast("有招投标项目时只能做失单或部分失单报告!","error");
            }
            //XLIU-CG98L5 【委托】【评估】新需求-招标项目/询价对应流标、废标改善 end
            else {
            location.href = '/a1U/e?retURL=%2F'+ this.recordId +
            '&RecordType=01210000000R4hH' +
            '&CF00N10000004lbGT=' + this.name +
            '&CF00N10000004lbGT_lkid=' + this.recordId +
            '&CF00N10000006QShg=' + this.salesAssistantName +
            '&CF00N10000006QShg_lkid=' + this.salesAssistantID +
            '&CF00N10000006QShq='+ this.managerName +
            '&CF00N10000006QShq_lkid=' + this.salesManagerDepartmentID +
            '&CF00N10000006QShb=' + this.salesOwnerBuchang +
            '&CF00N10000006QShb_lkid=' + this.salesOwnerBuchangID +
            '';
        }
        this.dispatchEvent(new CloseActionScreenEvent());
        });
    }
}
force-app/main/default/lwc/lexCancelReport/lexCancelReport.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexCancelSelect/lexCancelSelect.css
New file
@@ -0,0 +1,11 @@
.Holder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display : none !important;
}
force-app/main/default/lwc/lexCancelSelect/lexCancelSelect.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="Holder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexCancelSelect/lexCancelSelect.js
New file
@@ -0,0 +1,53 @@
import { LightningElement,api, track, wire } from 'lwc';
import {CurrentPageReference} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import init from '@salesforce/apex/SelectSubstituteControllerLWT.initFromSelectSubstituteButton';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class lexCancelSelect extends LightningElement {
    @api recordId;
    IsLoading=true;
    id;
    RentalApplyId;
    Status;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        console.log("进入页面");
        console.log(currentPageReference);
        if(currentPageReference){
            const urvalue=currentPageReference.state.recordId;
            if(urvalue){
                let str=`${urvalue}`;
                console.log('str');
                console.log(str);
                this.recordId=str;
            }
        }
    }
    connectedCallback(){
        console.log(this.recordId);
        init({recordId:this.recordId}).then(result=>{
            console.log(result);
            if(result!=null){
                this.id=result.id;
                this.RentalApplyId=result.RentalApplyId;
                this.Status=result.Status;
                this.cancelSubmit().then(res=>{
                    this.IsLoading=false;
                    this.dispatchEvent(new CloseActionScreenEvent());
                });
            }
        }).catch(err=>{
            console.log("error:");
            console.log(err);
        }).finally(()=>{
        });
    }
    async cancelSubmit(){
        window.open("/apex/EquipmentRentalCancel?raid="+this.RentalApplyId,'cancelSelect','width=500,height=250');
    }
}
force-app/main/default/lwc/lexCancelSelect/lexCancelSelect.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexCancelSelect">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexCancelSubmit/lexCancelSubmit.js
@@ -1,3 +1,11 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-07 09:02:03
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-11 11:17:24
 */
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
@@ -37,30 +45,23 @@
        }).then(result => {
            console.log(result);
            if (result != null) {
                this.IsLoading = false;
                this.ownerId = result.ownerId;
                this.monthlyReportId = result.Id;
                this.cancelSubmit();
                console.log("end");
                this.dispatchEvent(new CloseActionScreenEvent());
                this.showToast();
                this.updateRecordView(this.recordId);
                //window.location.replace("https://ocsm--partial.sandbox.lightning.force.com/lightning/r/Monthly_Report__c/" + this.monthlyReportId + "/view");
            }
        }).catch(error => {
            console.log("error");
            console.log(error);
        }).finally(() => {
        });   
    }
    showToast() {
    showToast(msg,type) {
        const event = new ShowToastEvent({
            title: '',
            message: '取消提交成功!',
            variant: 'success'
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
    }
@@ -72,10 +73,20 @@
        if(this.ownerId == UserInfo_Owner.Id) {
            cancel({
                recordId: this.recordId
            }).then(result=>{
                if(result){
                    this.showToast(result,"error");
                }else{
                    this.showToast("成功","success");
                    this.updateRecordView(this.recordId);
                }
                this.IsLoading = false;
                this.dispatchEvent(new CloseActionScreenEvent());
            });
            console.log("321");
            } else {
            this.showToast("只有周报的所有人可以取消","error");
            this.dispatchEvent(new CloseActionScreenEvent());
            }
    }
}
force-app/main/default/lwc/lexCancelSubmitReport/lexCancelSubmitReport.js
@@ -1,3 +1,11 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-07 09:02:03
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-11 11:18:36
 */
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
@@ -33,11 +41,14 @@
        cancel({
            recordId: this.recordId
        }).then(result =>{
            this.showToast("取消提交成功!","success");
            this.updateRecordView(this.recordId);
            if(result){
                this.showToast(result,"error");
            }else{
                this.showToast("取消提交成功!","success");
                this.updateRecordView(this.recordId);
            }
            this.IsLoading = false;
            this.dispatchEvent(new CloseActionScreenEvent());
        }).catch(error=>{
            this.showToast(error,"error");
        });
    }
force-app/main/default/lwc/lexClearReturnDeliverySlip/lexClearReturnDeliverySlip.css
New file
@@ -0,0 +1,11 @@
.Holder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display : none !important;
}
force-app/main/default/lwc/lexClearReturnDeliverySlip/lexClearReturnDeliverySlip.html
New file
@@ -0,0 +1,5 @@
<template>
  <div class="Holder" if:true={IsLoading}>
              <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
  </div>
</template>
force-app/main/default/lwc/lexClearReturnDeliverySlip/lexClearReturnDeliverySlip.js
New file
@@ -0,0 +1,107 @@
import { LightningElement,api, track, wire } from 'lwc';
import {CurrentPageReference} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import getUserId from '@salesforce/apex/RentalApplyControllerLWT.getUserId';
import init from '@salesforce/apex/SelectSubstituteControllerLWT.initClearReturnDeliverySlipButton';
import updateRaescList from '@salesforce/apex/SelectSubstituteControllerLWT.updateRaescList';
import selectRacById from '@salesforce/apex/SelectSubstituteControllerLWT.selectRacById';
import selectRaesdcId from '@salesforce/apex/SelectSubstituteControllerLWT.selectRaesdcId';
import { loadScript } from 'lightning/platformResourceLoader';
import { submitForApproval } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class lexClearReturnDeliverySlip extends LightningElement {
    @api recordId;
    id;
    RentalApplyId;
    Status;
    IsLoading=true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        console.log("进入页面");
        console.log(currentPageReference);
        if(currentPageReference){
            const urvalue=currentPageReference.state.recordId;
            if(urvalue){
                let str=`${urvalue}`;
                console.log('str');
                console.log(str);
                this.recordId=str;
            }
        }
    }
    connectedCallback(){
        console.log(this.recordId);
        init({recordId:this.recordId}).then(result=>{
            console.log(result);
            if(result!=null){
                this.Rental_Apply_Equipment_Set__c=result;
                this.cancelSubmit().then(res=>{
                    this.IsLoading=false;
                    this.dispatchEvent(new CloseActionScreenEvent());
                });
            }
        }).catch(err=>{
            console.log("error:");
            console.log(err);
        }).finally(()=>{
        });
    }
    async cancelSubmit(){
        console.log("hhh1");
        var raesId = this.recordId;
        console.log("hhh2");
        var result = await selectRaesdcId({recordId:this.recordId});
        console.log("hhh3");
        var objs = result;
        if (objs.length< 1) {
            // alert('没有需要清空的一览明细');
            const event = new ShowToastEvent({
                title: '提示信息',
                message:'没有需要清空的一览明细'
            });
            this.dispatchEvent(event);
        } else {
            console.log("hhh4");
            var result;
            console.log("hhh5");
            await updateRaescList({updateList:objs})
            .then(res=>{
                console.log(res);
                result=res;
            });
            console.log("hhh6");
            if (result.success==true) {
                console.log("hhh7");
                // success
                // alert("回寄运输单信息已清空");
                const event = new ShowToastEvent({
                    title: '提示信息',
                    message:"回寄运输单信息已清空"
                });
                this.dispatchEvent(event);
                setTimeout(function() {
                    location.href = "/"+this.recordId;
                }, 100);
            } else {
                console.log("hhh8");
                // alert("failed to update:" + result.errors.fields + " " + result[0].errors.message);
                const event = new ShowToastEvent({
                    title: '提示信息',
                    message:"failed to update:" + result.errors.fields + " " + result[0].errors.message
                });
                this.dispatchEvent(event);
            }
        }
    }
}
force-app/main/default/lwc/lexClearReturnDeliverySlip/lexClearReturnDeliverySlip.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexClearReturnDeliverySlip">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexComplete/lexComplete.js
@@ -1,3 +1,11 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-07 09:02:03
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-11 11:21:30
 */
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
@@ -35,18 +43,14 @@
        }).then(result => {
            console.log(result);
            if (result != null) {
                this.IsLoading = false;
                this.status = result.status;
                this.profileId = result.profileId;
                this.complete();
                this.dispatchEvent(new CloseActionScreenEvent());
                //window.location.replace("https://ocsm--partial.sandbox.lightning.force.com/lightning/r/Report__c/" + this.recordId + "/view");
            }
        }).catch(error => {
            console.log("error");
            console.log(error);
        }).finally(() => {
        });   
        //this.updateRecordView(this.recordId);
    }
@@ -69,18 +73,24 @@
    complete () {
        // 陆胜,胡迪安,系统管理员以外没有权限
        if (UserInfo_Owner.Id != "00510000004reg2" && UserInfo_Owner.Id != "00510000000gWAE" && this.profileId != "00e10000000Y3o5") {
            ShowToastEvent("你没有权限","error");
            this.showToast("你没有权限","error");
            return;
        }
        if (this.status == "完毕") {
            ShowToastEvent("已经完毕!","error");
            this.showToast("已经完毕!","error");
            return;
        }
        updateForCompleteButton({
            recordId: this.recordId
        }).then(result =>{
            this.updateRecordView(this.recordId);
            this.showToast("完毕成功!","success");
            if(result){
                this.showToast(result,"error");
            }else{
                this.updateRecordView(this.recordId);
                this.showToast("完毕成功!","success");
            }
            this.IsLoading = false;
            this.dispatchEvent(new CloseActionScreenEvent());
        });
    }
}
force-app/main/default/lwc/lexCreateEvent/__tests__/lexCreateEvent.test.js
New file
@@ -0,0 +1,25 @@
import { createElement } from 'lwc';
import LexCreateEvent from 'c/lexCreateEvent';
describe('c-lex-create-event', () => {
    afterEach(() => {
        // The jsdom instance is shared across test cases in a single file so reset the DOM
        while (document.body.firstChild) {
            document.body.removeChild(document.body.firstChild);
        }
    });
    it('TODO: test case generated by CLI command, please fill in test logic', () => {
        // Arrange
        const element = createElement('c-lex-create-event', {
            is: LexCreateEvent
        });
        // Act
        document.body.appendChild(element);
        // Assert
        // const div = element.shadowRoot.querySelector('div');
        expect(1).toBe(1);
    });
});
force-app/main/default/lwc/lexCreateEvent/lexCreateEvent.html
New file
@@ -0,0 +1,6 @@
<template>
    <div class="lexCreateEventReportHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
        <lightning-button label="Show Toast" onclick={ShowToastEvent}></lightning-button>
    </div>
</template>
force-app/main/default/lwc/lexCreateEvent/lexCreateEvent.js
New file
@@ -0,0 +1,59 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-13 13:50:23
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-13 14:39:54
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import init  from '@salesforce/apex/OpportunityLightingButtonController.initForCreateEventButton';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class LexCreateEvent extends LightningElement {
    @api recordId;
    accountId;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
            console.log(111);
            console.log(currentPageReference);
        if (currentPageReference) {
          const urlValue = currentPageReference.state.recordId;
          if (urlValue) {
            let str = `${urlValue}`;
            console.log("str");
            console.log(str);
            this.recordId = str;
          }
        }
    }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result=>{
            this.accountId = result.accountId;
            this.createEvent();
        }).catch(error=>{
            console.log("error");
            console.log(error);
        })
    }
    createEvent(){
        window.open("/00U/e?retURL=%2Fapex%2FVFClosePage&accid=" + this.accountId + "&oid=" + this.recordId, "新建计划");
        this.dispatchEvent(new CloseActionScreenEvent());
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            title: '',
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
    }
    updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
    }
}
force-app/main/default/lwc/lexCreateEvent/lexCreateEvent.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexCreateNotesEmail/lexCreateNotesEmail.js
@@ -1,3 +1,11 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-03-27 13:53:40
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-10 14:22:27
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
@@ -85,6 +93,5 @@
        +"%0D%0A" + "连接:" 
        + this.drSumUrl
        +"%0D%0A").substring(0,320).split("<br>").join("%0D%0A");
    }
}
force-app/main/default/lwc/lexCreateRepair/lexCreateRepair.css
New file
@@ -0,0 +1,10 @@
.createEmailHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/lexCreateRepair/lexCreateRepair.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="createEmailHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexCreateRepair/lexCreateRepair.js
New file
@@ -0,0 +1,231 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import { NavigationMixin } from 'lightning/navigation';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import init  from '@salesforce/apex/QISReportController.initForlexCreateRepairButton';
import UserInfo_Owner from '@salesforce/apex/TaskFeedbackController.UserInfo_Owner';
import { updateRecord } from 'lightning/uiRecordApi';
export default class lexCreateRepair extends LightningElement {
    @api recordId;
    IsLoading = true;
    typeflag = false;
    newflag = false;
    qisReportId='';
    name='';
    qisRecordTypeId='';
    err='';
    accParentId='';
    accParentRecordTypeId='';
    accParentParentFSEGIMainLeader='';
    accParentParentFSEGIMainLeaderWorkLocation='';
    accParentParentFSESPMainLeader='';
    accParentParentFSESPMainLeaderWorkLocation='';
    WorkLocation='';
    accrecordId='';
    oCMjudgement='';
    nextaction='';
    specialfollow='';
    comment='';
    isUsedForTheOpera='';
    UseFailProductFinish='';
    failuerSituation='';
    sourceOnCall='';
    hospitalId='';
    departmentClassId='';
    hospitalDepartment='';
    nonyushohinId='';
    ownerId='';
    faliourdate='';
    sourceforrepair='';
    repairSalesPointProvinceChina='';
    trableoccurdaYcollect='';
    damageForDocOrPat='';
    relationWithTheProblem='';
    reportForGoz='';
    whichProject='';
    operaName='';
    breakORFallOff='';
    setusageproduct='';
    afterFailureInformation='';
    delay15Min='';
    informationFrom='';
    failureQInHospital='';
    ownername='';
    hospitalname = '';
    departmentClassname = '';
    hospitalDepartmentname = '';
    nonyushohinIdname = '';
    sourceOnCallname = '';
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
             console.log(111);
             console.log(currentPageReference);
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             console.log("str");
             console.log(str);
             this.recordId = str;
           }
         }
    }
    connectedCallback () {
        init({
            recordId: this.recordId
        }).then(result => {
            this.IsLoading = false;
            this.qisReportId = result.Id;
            this.oCMjudgement = result.oCMjudgement;
            this.nextaction = result.nextaction;
            this.ownername = result.ownername;
            this.specialfollow = result.specialfollow;
            this.qisRecordTypeId = result.qisRecordTypeId;
            this.accParentId = result.accParentId;
            this.comment = result.comment;
            if (result.sourceOnCall!=null) {
                this.sourceOnCall = result.sourceOnCall;
                this.sourceOnCallname = result.sourceOnCallname;
            }
            this.name = result.name;
            this.hospitalId = result.hospitalId;
            this.hospitalname = result.hospitalname;
            this.departmentClassname = result.departmentClassname;
            this.departmentClassId = result.departmentClassId;
            this.hospitalDepartment = result.hospitalDepartment;
            this.nonyushohinId = result.nonyushohinId;
            this.ownerId = result.ownerId;
            this.faliourdate = result.faliourdate;
            this.sourceforrepair = result.sourceforrepair;
            this.repairSalesPointProvinceChina = result.repairSalesPointProvinceChina;
            this.trableoccurdaYcollect = result.trableoccurdaYcollect;
            this.damageForDocOrPat = result.damageForDocOrPat;
            this.relationWithTheProblem = result.relationWithTheProblem;
            this.reportForGoz = result.reportForGoz;
            this.whichProject = result.whichProject;
            this.operaName = result.operaName;
            this.breakORFallOff = result.breakORFallOff;
            this.setusageproduct = result.setusageproduct;
            this.afterFailureInformation = result.afterFailureInformation;
            this.delay15Min = result.delay15Min;
            this.informationFrom = result.informationFrom;
            this.failureQInHospital = result.failureQInHospital;
            this.failuerSituation = result.failuerSituation;
            this.isUsedForTheOpera = result.isUsedForTheOpera;
            this.accParentRecordTypeId = result.accParentRecordTypeId;
            this.accParentParentFSEGIMainLeader = result.accParentParentFSEGIMainLeader;
            this.accParentParentFSEGIMainLeaderWorkLocation = result.accParentParentFSEGIMainLeaderWorkLocation;
            this.accParentParentFSESPMainLeader = result.accParentParentFSESPMainLeader;
            this.accParentParentFSESPMainLeaderWorkLocation = result.accParentParentFSESPMainLeaderWorkLocation;
             if (this.qisRecordTypeId != '01210000000RLWc' && this.qisRecordTypeId != '01210000000RLWh') {
                 this.typeflag = true;
             }
             if (this.accParentId != null) {
                 if (this.accParentRecordTypeId != null) {
                     this.accrecordId = this.accParentRecordTypeId.substring(0,15);
                     if (this.accrecordId == '01210000000QemL' || this.accrecordId == '01210000000QezZ' || this.accrecordId == '01210000000QemQ') {
                         if (this.accParentParentFSEGIMainLeader != null) {
                             this.WorkLocation = this.accParentParentFSEGIMainLeaderWorkLocation;
                         }
                     }else if(this.accrecordId == '01210000000Qeze' || this.accrecordId == '01210000000Qezj' || this.accrecordId == '01210000000Qezt'|| this.accrecordId == '01210000000Qezo'|| this.accrecordId == '01210000000Qezy'){
                         if (this.accParentParentFSESPMainLeader != null) {
                             this.WorkLocation = this.accParentParentFSESPMainLeaderWorkLocation;
                         }
                     }
                 }
             }
             if ((this.oCMjudgement == '质量问题' && this.nextaction == '无偿维修') ||
                 (this.oCMjudgement == '质量问题' && this.nextaction == '有偿维修' && this.specialfollow == '0') ||
                 (this.oCMjudgement == '非质量问题' && this.nextaction == '无偿维修' && this.specialfollow == '1') ||
                 (this.oCMjudgement == '非质量问题' && this.nextaction == '有偿维修' && this.specialfollow == '0') ||
                 (this.oCMjudgement == '质量问题+非质量问题' && this.nextaction == '无偿维修' && this.specialfollow == '1') ||
                 (this.oCMjudgement == '质量问题+非质量问题' && this.nextaction == '有偿维修+无偿维修' && this.specialfollow == '0') ||
                 (this.oCMjudgement == '现象未发现' && this.nextaction == '无偿维修' && this.specialfollow == '1') ||
                 (this.oCMjudgement == '现象未发现' && this.nextaction == '有偿维修' && this.specialfollow == '0')) {
                 this.newflag = true;
             }
             console.log('this.newflag = '+this.newflag);
             console.log('this.typeflag = '+this.typeflag);
             if ( this.newflag && this.typeflag) {
                 if (this.isUsedForTheOpera == 'YES') {
                     this.UseFailProductFinish = '是';
                 }else if(this.isUsedForTheOpera == 'NO-用替代品完成了'){
                     this.UseFailProductFinish = '否-用替代品完成';
                 }else if(this.isUsedForTheOpera == 'NO-用其他公司的同类产品完成了'){
                     this.UseFailProductFinish = '否-用其他公司的同类产品完成';
                 }else if(this.isUsedForTheOpera == 'NO-手术中止'){
                     this.UseFailProductFinish = '否-手术中止';
                 }
                 if ('使用前准备' == this.failuerSituation) {
                     this.failuerSituation = '使用前准备-患者未麻醉';
                 }
                 var url = '';
                     url = "/a0J/e?" +
                        "CF00N10000002FIJU_lkid="+this.sourceOnCall+"&" +
                        "CF00N10000002FIJU="+this.sourceOnCallname+"&" +
                        "CF00N10000002FIJZ_lkid="+this.qisReportId+"&" +
                        "CF00N10000002FIJZ="+this.name+"&" +
                        "CF00N10000002Dx66_lkid="+this.hospitalId+"&" +
                        "CF00N10000002Dx66="+this.hospitalname+"&" +
                        "CF00N10000002Dx5t_lkid="+this.departmentClassId+"&" +
                        "CF00N10000002Dx5t="+this.departmentClassname+"&" +
                        "CF00N10000002Dx5n_lkid="+this.hospitalDepartment+"&" +
                        "CF00N10000002Dx5n="+this.hospitalDepartmentname+"&" +
                        "CF00N10000002Dx1X_lkid="+this.nonyushohinId+"&" +
                        "CF00N10000002Dx1X="+this.nonyushohinIdname+"&" +
                        "CF00N10000002EMHw_lkid="+this.ownerId+"&" +
                        "CF00N10000002EMHw="+this.ownername+"&" +
                        "00N10000002Dx5y="+this.faliourdate+"&" +
                        "00N10000002Dx6I="+this.comment+"&" +
                        "00N10000002FH86="+this.sourceforrepair+"&" +
                        "00N10000006P6Rn="+this.repairSalesPointProvinceChina+"&" +
                        "00N10000008rsVQ="+this.trableoccurdaYcollect+"&" +
                        "00N10000008rsW7="+this.damageForDocOrPat+"&"+
                        "00N10000008rsVw="+this.relationWithTheProblem+"&"+
                        "00N10000008rsW2="+this.reportForGoz+"&"+
                        "00N10000008rsW6="+this.whichProject+"&"+
                        "00N10000008rsVk="+this.operaName+"&" +
                        "00N10000008rsVN="+this.breakORFallOff+"&"+
                        "00N10000008rsW4="+this.setusageproduct+"&" +
                        "00N10000008rsVL="+this.afterFailureInformation+"&" +
                        "00N10000008rsVR="+this.delay15Min+"&"+
                        "00N10000008rsVZ="+this.informationFrom+"&"+
                        "00N10000008rsVT="+this.failureQInHospital+"&" +
                        "00N10000008rsVv="+this.failuerSituation+"&"+
                        "00N10000008rsW5="+this.UseFailProductFinish+ "&" +
                        "00N10000006P6SM="+this.WorkLocation+ "&" +
                        "retURL=%2F"+this.qisReportId;
                        window.open(url, "_blank");
                        this.dispatchEvent(new CloseActionScreenEvent());
             }else{
                 const evt = new ShowToastEvent({
                        title : '该QIS不能新建修理',
                        message: '',
                        variant: 'error'
                    });
                    this.dispatchEvent(evt);
                this.dispatchEvent(new CloseActionScreenEvent());
                 return;
             }
        }).catch(error => {
            const evt = new ShowToastEvent({
                        title : '发生错误',
                        message: '',
                        variant: 'error'
                    });
                    this.dispatchEvent(evt);
            this.dispatchEvent(new CloseActionScreenEvent());
            console.log('error='+error);
             return;
        }).finally(() => {
        });
    }
}
force-app/main/default/lwc/lexCreateRepair/lexCreateRepair.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexCreateRepair">
   <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexCustomSubmit/lexCustomSubmit.css
New file
@@ -0,0 +1,11 @@
.Holder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display : none !important;
}
force-app/main/default/lwc/lexCustomSubmit/lexCustomSubmit.html
New file
@@ -0,0 +1,5 @@
<template>
      <div class="Holder" if:true={IsLoading}>
              <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
      </div>
</template>
force-app/main/default/lwc/lexCustomSubmit/lexCustomSubmit.js
New file
@@ -0,0 +1,158 @@
import { LightningElement,api, track, wire } from 'lwc';
import {CurrentPageReference} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import getUserId from '@salesforce/apex/RentalApplyControllerLWT.getUserId';
import init from '@salesforce/apex/SelectSubstituteControllerLWT.initFromCustomSubmitButton';
import updateRaesc from '@salesforce/apex/SelectSubstituteControllerLWT.updateRaesc';
import selectRacById from '@salesforce/apex/SelectSubstituteControllerLWT.selectRacById';
import postponeCheck from '@salesforce/apex/SelectSubstituteControllerLWT.postponeCheck';
import { loadScript } from 'lightning/platformResourceLoader';
import { submitForApproval } from 'lightning/uiRecordApi';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class lexCustomSubmit extends LightningElement {
    @api recordId;
    id;
    RentalApplyId;
    Status;
    IsLoading=true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        console.log("进入页面");
        console.log(currentPageReference);
        if(currentPageReference){
            const urvalue=currentPageReference.state.recordId;
            if(urvalue){
                let str=`${urvalue}`;
                console.log('str');
                console.log(str);
                this.recordId=str;
            }
        }
    }
    connectedCallback(){
        console.log(this.recordId);
        init({recordId:this.recordId}).then(result=>{
            console.log(result);
            if(result!=null){
                this.Rental_Apply_Equipment_Set__c=result;
                this.cancelSubmit().then(res=>{
                    this.IsLoading=false;
                    this.dispatchEvent(new CloseActionScreenEvent());
                });
            }
        }).catch(err=>{
            console.log("error:");
            console.log(err);
        }).finally(()=>{
        });
    }
    async cancelSubmit(){
        console.log("hhh1");
        if (this.Rental_Apply_Equipment_Set__c.Request_extend_day__c == ""
        || this.Rental_Apply_Equipment_Set__c.Request_extend_day__c == null
        || this.Rental_Apply_Equipment_Set__c.Extend_request_reason__c == ""
        || this.Rental_Apply_Equipment_Set__c.Extend_request_reason__c == null) {
            // alert("必须填写延期希望结束日,延期申请理由");
            const event = new ShowToastEvent({
                title: '提示信息',
                message:"必须填写延期希望结束日,延期申请理由"
            });
            this.dispatchEvent(event);
            return;
        }
        console.log("hhh2");
        let rtn;
        await postponeCheck({
            endDate:this.Rental_Apply_Equipment_Set__c.Rental_End_Date__c,
            d:-5
        }).then(res=>{
            console.log(res);
            rtn=res;
        }).catch(err=>{
            console.log("err:",err.message);
        })
        console.log(rtn);
        if (rtn != "OK") {
            // alert(rtn);
            const event = new ShowToastEvent({
                title: '提示信息',
                message:rtn
            });
            this.dispatchEvent(event);
            return;
        }
        console.log("hhh3");
        let resultSet = await selectRacById({recordId:this.Rental_Apply_Equipment_Set__c.Rental_Apply__c})
        ;
        let records = resultSet;
        console.log("hhh4");
        let result = await updateRaesc({
            recordId:this.Rental_Apply_Equipment_Set__c.Id,
            JingliApprovalManagerc:records[0].JingliApprovalManager__c,
            BuchangApprovalManagerc:records[0].SalesManager__c,
            BuchangApprovalManagerSalesc:records[0].BuchangApprovalManager__c,
            ZongjianApprovalManagerc:records[0].BuchangApprovalManagerSales__c,
            ExtendStatusc:'填写完毕',
        });
        console.log("hhh5");
        console.log(result);
        // let messages = getConnectDMLErrorMessages(result);
        if(result!=null&&result.length>0&&result.errors.length>0){
            // alert(result.errors[0].split(",")[1]);
            const event = new ShowToastEvent({
                title: '提示信息',
                message:result.errors[0].split(",")[1]
            });
            this.dispatchEvent(event);
        }
        console.log("hhh7");
        // let request = new sforce.ProcessSubmitRequest();
        // request.objectId = this.recordId;
        // let processResults = sforce.connection.process([request]);
        console.log("hhh8");
        // submitForApproval(this.Rental_Apply_Equipment_Set__c.Id).then(result => {
        //     console.log(result);
        //     if (processResults[0].errors != null) {
        //         alert(processResults[0].errors.message);
        //         return;
        //     }
        //     console.log("hhh9");
        //     window.location.reload();
        // })
        // .catch(error => {
        //   console.error('Error submitting record for approval:', error.message);
        // });
        // await submitForApproval(this.recordId);
        const fields = {}
        const recordInput = { fields };
        updateRecord({ fields: recordInput, recordId: this.recordId })
          .then(() => {
            console.log("更新成功");
          })
          .catch(error => {
              console.log(error.message);
              console.log(error);
              // alert(error.body.message);
            const event = new ShowToastEvent({
                title: '提示信息',
                message:error.body.message
            });
            this.dispatchEvent(event);
            return;
            // 处理异常情况
          });
    }
}
force-app/main/default/lwc/lexCustomSubmit/lexCustomSubmit.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexCustomSubmit">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexDetailBulkUpdate/lexDetailBulkUpdate.css
New file
@@ -0,0 +1,11 @@
.Holder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display : none !important;
}
force-app/main/default/lwc/lexDetailBulkUpdate/lexDetailBulkUpdate.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="Holder" if:true={IsLoading}>
          <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
      </div>
</template>
force-app/main/default/lwc/lexDetailBulkUpdate/lexDetailBulkUpdate.js
New file
@@ -0,0 +1,39 @@
import { LightningElement, track, wire, api } from 'lwc';
import {CurrentPageReference} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
export default class lexDetailBulkUpdate extends LightningElement {
    @api recordId;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        console.log("进入页面");
        console.log(currentPageReference);
        if(currentPageReference){
            const urvalue=currentPageReference.state.recordId;
            if(urvalue){
                let str=`${urvalue}`;
                console.log('str');
                console.log(str);
                this.recordId=str;
            }
        }
    }
    connectedCallback(){
        this.cancelSubmit().then(res=>{
            this.IsLoading=false;
            this.dispatchEvent(new CloseActionScreenEvent());
        });
    }
    async cancelSubmit(){
        window.open('/apex/TransferApplySelectDetailSub?id='+this.recordId,'DetailBulkUpdateLWC', 'width=600,height=200');
    }
    //old js
    // window.open("/apex/TransferApplySelectDetailSub?Id={!URLENCODE(TransferApply__c.Id)}");
}
force-app/main/default/lwc/lexDetailBulkUpdate/lexDetailBulkUpdate.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexDetailBulkUpdate">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexDispatchOCSMQARA/lexDispatchOCSMQARA.js
@@ -1,3 +1,11 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-07 09:02:03
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-11 11:23:37
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
@@ -28,7 +36,6 @@
    connectedCallback(){
        console.log(this.recordId);
        this.IsLoading = false;
        this.DispatchOCSMQARA();
    }
@@ -51,8 +58,13 @@
            updateForDispatchOCSMQARAButton({
                recordId: this.recordId
            }).then(result =>{
                this.showToast("成功","success");
                this.updateRecordView(this.recordId);
                if(result){
                    this.showToast(result,"error");
                }else{
                    this.showToast("成功","success");
                    this.updateRecordView(this.recordId);
                    this.IsLoading = false;
                }
                this.dispatchEvent(new CloseActionScreenEvent());
                });
    }
force-app/main/default/lwc/lexEquipmentRentalPicturePDF/lexEquipmentRentalPicturePDF.css
New file
@@ -0,0 +1,22 @@
.outerBorderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    border-top : 3px solid #565959;
}
.borderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    margin-bottom : 7px;
    border-top : 3px solid #565959;
}
.headerDorderCss{
    border-top: 1px solid #565959;
    border-bottom: 1px solid #D4D4D4;
    padding:3px;
}
.centerCss{
    text-align: center;
}
.centerCss .left{
    margin-left: 100px;
}/* sample css file */
force-app/main/default/lwc/lexEquipmentRentalPicturePDF/lexEquipmentRentalPicturePDF.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="sisToOPDHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexEquipmentRentalPicturePDF/lexEquipmentRentalPicturePDF.js
New file
@@ -0,0 +1,41 @@
import { LightningElement, track, wire, api } from 'lwc';
import { CurrentPageReference,NavigationMixin } from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import init from '@salesforce/apex/EquipmentRentalPicturePDFController.init';
export default class lexEquipmentRentalPicturePDF extends LightningElement {
    @api recordId;
        IsLoading = true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        if(currentPageReference) {
            const urlValue = currentPageReference.state.recordId;
            if(urlValue) {
                let str = `${urlValue}`;
                this.recordId = str;
            }
        }
    }
    connectedCallback(){
        console.log(this.recordId);
        init({
            recordId: this.recordId
        }).then(result=>{
            //console.log('result.ShipmentRequestedCnt===' + result.ShipmentRequestedCnt)
            if( result.ShipmentRequestedCnt > 0){
                console.log(result.pagelength);
                for(var i =0; i<result.pagelength; i++){
                    window.open('/apex/FixtureRentalPicturePDF?raid='+ this.recordId +'&page=' + i);
                }
            }else{
                alert('当前的申请单中没有已出库指示的配套。');
            }
            this.dispatchEvent(new CloseActionScreenEvent());
        }).catch(err=>{
            this.dispatchEvent(new CloseActionScreenEvent());
            console.log(err);
        })
    }
}
force-app/main/default/lwc/lexEquipmentRentalPicturePDF/lexEquipmentRentalPicturePDF.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexOCMSubmit">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexFinLibrary/lexFinLibrary.css
New file
@@ -0,0 +1,11 @@
.lexFinlibraryHolder{
 position: relative;
 display: inline-block;
 width: 80px;
 height: 80px;
 text-align: center;
}
.container .uiContainerManager{
 display : none !important;
}
force-app/main/default/lwc/lexFinLibrary/lexFinLibrary.html
New file
@@ -0,0 +1,4 @@
<template>
<div class="lexFinlibraryHolder" if:true={IsLoding}>
<lightning-spinner alternative-text="Loading" size="medium">  </lightning-spinner> </div>
</template>
force-app/main/default/lwc/lexFinLibrary/lexFinLibrary.js
New file
@@ -0,0 +1,55 @@
import { LightningElement, track, wire,api } from 'lwc';
import getBulletinBoard  from '@salesforce/apex/FinLibraryButtonController.getBulletinBoard';
import {CurrentPageReference} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
export default class lexFinLibrary extends LightningElement {
        @api recordId;
        IsLoading;
        Bulletin_Board__c;
        @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        if(currentPageReference){
            console.log(currentPageReference);
            console.log("进入获取page参数")
            const IdValue=currentPageReference.state.recordId;
            if(IdValue){
                let str=`${IdValue}`;
                this.recordId=str;
                console.log("recordId="+str);
            }
        }
    }
    connectedCallback(){
    getBulletinBoard({recordId:this.recordId}).then(res=>{
        if(res!=null){
        this.IsLoading=false;
        console.log("res");
        console.log(res);
        console.log("进入初始化对象其他属性");
        this.Bulletin_Board__c=res;
        console.log(this.Bulletin_Board__c);
        this.FinLibrary();
        }
        else{
             var a="没进方法";
             console.log(a);
        }
    }).catch(error =>{
        console.log("error");
        console.log(error.message);
    }).finally(()=>{
    });
    }
    FinLibrary(){
        window.open(this.Bulletin_Board__c.iPad_Finlibrary__c, 'FinLibrary', '_top');
        this.dispatchEvent(new CloseActionScreenEvent());
    }
}
force-app/main/default/lwc/lexFinLibrary/lexFinLibrary.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexFinLibrary">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
     <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexFinLibrary2/lexFinLibrary2.css
New file
@@ -0,0 +1,11 @@
.lexFinlibraryHolder2{
 position: relative;
 display: inline-block;
 width: 80px;
 height: 80px;
 text-align: center;
}
.container .uiContainerManager{
 display : none !important;
}
force-app/main/default/lwc/lexFinLibrary2/lexFinLibrary2.html
New file
@@ -0,0 +1,4 @@
<template>
<div class="lexFinlibraryHolder2" if:true={IsLoding}>
<lightning-spinner alternative-text="Loading" size="medium">  </lightning-spinner> </div>
</template>
force-app/main/default/lwc/lexFinLibrary2/lexFinLibrary2.js
New file
@@ -0,0 +1,62 @@
import { LightningElement, track, wire,api } from 'lwc';
import getBulletinBoard  from '@salesforce/apex/FinLibraryButtonController2.getBulletinBoard';
import {CurrentPageReference} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
export default class lexFinLibrary2 extends LightningElement {
    @api recordId;
    IsLoading;
    Bulletin_Board__c;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        if(currentPageReference){
            console.log(currentPageReference);
            console.log("进入获取page参数")
            const IdValue=currentPageReference.state.recordId;
            if(IdValue){
                let str=`${IdValue}`;
                this.recordId=str;
                console.log("recordId="+str);
            }
        }
    }
    connectedCallback(){
    getBulletinBoard({recordId:this.recordId}).then(res=>{
        if(res!=null){
        this.IsLoading=false;
        console.log("res");
        console.log(res);
        console.log("进入初始化对象其他属性");
        this.Bulletin_Board__c=res;
        console.log(this.Bulletin_Board__c);
        this.FinLibrary2();
        }
        else{
             var a="没进方法";
             console.log(a);
        }
    }).catch(error =>{
        console.log("error");
        console.log(error.message);
    }).finally(()=>{
    });
    }
    FinLibrary2(){
        window.open(this.Bulletin_Board__c.iPad_Finlibrary_2__c, 'FinLibrary', '_top');
        this.dispatchEvent(new CloseActionScreenEvent());
    }
}
force-app/main/default/lwc/lexFinLibrary2/lexFinLibrary2.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexFinLibrary2">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
      <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexFinLibrary3/lexFinLibrary3.css
New file
@@ -0,0 +1,11 @@
.lexFinlibraryHolder3{
 position: relative;
 display: inline-block;
 width: 80px;
 height: 80px;
 text-align: center;
}
.container .uiContainerManager{
 display : none !important;
}
force-app/main/default/lwc/lexFinLibrary3/lexFinLibrary3.html
New file
@@ -0,0 +1,4 @@
<template>
<div class="lexFinlibraryHolder3" if:true={IsLoding}>
<lightning-spinner alternative-text="Loading" size="medium">  </lightning-spinner> </div>
</template>
force-app/main/default/lwc/lexFinLibrary3/lexFinLibrary3.js
New file
@@ -0,0 +1,58 @@
import { LightningElement, track, wire,api } from 'lwc';
import getBulletinBoard  from '@salesforce/apex/FinLibraryButtonController3.getBulletinBoard';
import {CurrentPageReference} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
export default class lexFinLibrary3 extends LightningElement {
    @api recordId;
    IsLoading;
    Bulletin_Board__c;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        if(currentPageReference){
            console.log(currentPageReference);
            console.log("进入获取page参数")
            const IdValue=currentPageReference.state.recordId;
            if(IdValue){
                let str=`${IdValue}`;
                this.recordId=str;
                console.log("recordId="+str);
            }
        }
    }
    connectedCallback(){
    getBulletinBoard({recordId:this.recordId}).then(res=>{
        if(res!=null){
        this.IsLoading=false;
        console.log("res");
        console.log(res);
        console.log("进入初始化对象其他属性");
        this.Bulletin_Board__c=res;
        console.log(this.Bulletin_Board__c);
        this.FinLibrary3();
        }
        else{
             var a="没进方法";
             console.log(a);
        }
    }).catch(error =>{
        console.log("error");
        console.log(error.message);
    }).finally(()=>{
    });
    }
    FinLibrary3(){
        window.open(this.Bulletin_Board__c.iPad_Finlibrary_3__c, 'FinLibrary', '_top');
        this.dispatchEvent(new CloseActionScreenEvent());
    }
}
force-app/main/default/lwc/lexFinLibrary3/lexFinLibrary3.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexFinLibrary3">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
     <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexLoanerArrangedEmail/lexLoanerArrangedEmail.css
New file
@@ -0,0 +1,10 @@
.exampleHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/lexLoanerArrangedEmail/lexLoanerArrangedEmail.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="EquipmentRentalPDF" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexLoanerArrangedEmail/lexLoanerArrangedEmail.js
New file
@@ -0,0 +1,258 @@
import { LightningElement,api, track, wire } from 'lwc';
import {CurrentPageReference} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import init from '@salesforce/apex/SelectSubstituteControllerLWT.initFromLoanerArrangedEmailLButton';
import selectRentalApplyCByName from '@salesforce/apex/SelectSubstituteControllerLWT.selectRentalApplyCByName';
import selectRaesById1 from '@salesforce/apex/SelectSubstituteControllerLWT.selectRaesById1';
import selectRaesById2 from '@salesforce/apex/SelectSubstituteControllerLWT.selectRaesById2';
import getSessionId from '@salesforce/apex/SelectSubstituteControllerLWT.getSessionId';
import approvalCheck from '@salesforce/apex/SelectSubstituteControllerLWT.approvalCheck';
import setShipment_requests from '@salesforce/apex/SelectSubstituteControllerLWT.setShipment_requests';
// import { label } from '@salesforce/label';
import STATUS_PROCESS_STATE from '@salesforce/label/c.StatusProcessState';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class lexLoanerArrangedEmail extends LightningElement {
    @api recordId;
    id;
    RentalApplyC;
    Status;
    Wei_Assigned_Cnt__c;
    Bollow_Date__c;
    Assigned_Not_Shipment__c;
    IsLoading=true;
    @track statusStringg = STATUS_PROCESS_STATE;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        console.log("进入页面");
        console.log(currentPageReference);
        if(currentPageReference){
            const urvalue=currentPageReference.state.recordId;
            if(urvalue){
                let str=`${urvalue}`;
                console.log('str');
                console.log(str);
                this.recordId=str;
            }
        }
    }
    connectedCallback(){
        console.log(this.recordId);
        init({recordId:this.recordId}).then(result=>{
            console.log(result);
            if(result!=null){
                this.id=result.id;
                this.RentalApplyC=result.RentalApplyC;
                this.Status=result.Status;
                this.Wei_Assigned_Cnt__c=result.WeiAssignedCntC;
                this.Bollow_Date__c=result.BollowDateC;
                this.Assigned_Not_Shipment__c=result.AssignedNotShipmentC;
                this.cancelSubmit().then(res=>{
                    this.IsLoading=false;
                    this.dispatchEvent(new CloseActionScreenEvent());
                });
            }
        }).catch(err=>{
            console.log("error:");
            console.log(err);
        }).finally(()=>{
        });
    }
    async cancelSubmit(){
        let campaignStatus = '';
        let records = null; // 20220217 ljh OBPM市场活动联动
        console.log("Ff");
        let statusSting = "{!$Label.StatusProcessState}"; // 20220322 ljh add
        let statusList = statusSting.split(',');
        console.log(statusSting);
        console.log(statusList);
        console.log(this.statusStringg);
        let raliveryGood;
        await selectRentalApplyCByName({recordId:this.RentalApplyC})
            .then(res=>{
                console.log(res);
                if (res!=null) {
                    raliveryGood=res;
                }
            }).catch(err=>{
                console.log("selectRentalApplyCByName err:")
                console.log(err.message);
            });
        console.log(statusSting);
        console.log(raliveryGood);
        console.log("ddd");
        let RentalApply = raliveryGood[0];
        console.log(RentalApply);
        if(RentalApply.Campaign__c != null&&RentalApply.Campaign__c != '' ) {
            console.log();
            let DeliveryGood;
            // 20220217 ljh update OBPM市场活动联动 start
            // DeliveryGood = sforce.connection.query("select Status, Rental_Apply_Flag__c from Campaign where id ='" + RentalApply.Campaign__c + "'");
            // let records= DeliveryGood.getArray("records");
            await selectCampaignById({recordId:RentalApply.Campaign__c}).then(res=>{
                console.log(res);
                DeliveryGood=res;
            });
            console.log(RentalApply);
            records = DeliveryGood;
            console.log(DeliveryGood);
            // 20220217 ljh update OBPM市场活动联动 end
            campaignStatus = records[0].Status;
            console.log("hh3");
        }
        if(this.Wei_Assigned_Cnt__c > "0") {
            // alert("申请单内存在未分配的配套,请分配备品或分割申请单");
            const event = new ShowToastEvent({
                title: '提示信息',
                message:"申请单内存在未分配的配套,请分配备品或分割申请单"
            });
            this.dispatchEvent(event);
        }else if(campaignStatus == '取消'){
            // alert("学会取消,不可出库指示");
            const event = new ShowToastEvent({
                title: '提示信息',
                message:"学会取消,不可出库指示"
            });
            this.dispatchEvent(event);
        }else if (this.Assigned_Not_Shipment__c == "0") {
            // alert("没有可以出库指示的明细");
            const event = new ShowToastEvent({
                title: '提示信息',
                message:"没有可以出库指示的明细"
            });
            this.dispatchEvent(event);
        } else if (RentalApply.Demo_purpose1__c == "长期借出" && RentalApply.Contract_pdf_updated__c == "0") {
            // alert("长期借出时,必须先上传契约书");
            const event = new ShowToastEvent({
                title: '提示信息',
                message:"长期借出时,必须先上传契约书"
            });
            this.dispatchEvent(event);
        } else if(RentalApply.Repair__c != '' && RentalApply.Repair__c != null && (RentalApply.Repair_Final_Inspection_Date_F__c != null && RentalApply.Repair_Final_Inspection_Date_F__c != '') || (RentalApply.RC_return_to_office__c != null && RentalApply.RC_return_to_office__c != '')) {
            // alert("修理有最终检测日或修理品返送日,不可出库指示");
            const event = new ShowToastEvent({
                title: '提示信息',
                message:"修理有最终检测日或修理品返送日,不可出库指示"
            });
            this.dispatchEvent(event);
            // 20220217 ljh add OBPM市场活动联动 start
        } else if (records != null && records[0].IF_Approved__c == "true" && (records[0].Meeting_Approved_No__c == null || records[0].Meeting_Approved_No__c == "") ) {
            // alert("没有决裁号的,暂不能出借,请更新裁决信息。");
            const event = new ShowToastEvent({
                title: '提示信息',
                message:"没有决裁号的,暂不能出借,请更新裁决信息。"
            });
            this.dispatchEvent(event);
        } else if (records != null && records[0].IF_Approved__c == "true" && records[0].Meeting_Approved_No__c != "" && statusList.indexOf(records[0].Approved_Status__c) != -1 ) {
            // alert("已申请决裁但决裁状态不符合条件。");
            const event = new ShowToastEvent({
                title: '提示信息',
                message:"已申请决裁但决裁状态不符合条件。"
            });
            this.dispatchEvent(event);
            // 20220217 ljh add OBPM市场活动联动 end
        } else {
            console.log("hhhh3");
            let t=await getSessionId();
            console.log(t);
            window.sforce = window.sforce || {};
            window.sforce.connection = window.sforce.connection || {};
            window.sforce.connection.sessionId =t;
            //154p 1388 yc 20211020
            console.log("hhhh4");
            let raid = RentalApply.Id+";"+this.id;
            console.log(raid);
            let rs1 = await approvalCheck({rentalApplyId:raid});
            console.log(rs1);
            if (rs1 != '1') {
                // alert(rs1);
                const event = new ShowToastEvent({
                    title: '提示信息',
                    message:rs1
                });
                this.dispatchEvent(event);
            } else {
                //bp2 let rs2 = sforce.apex.execute("RentalApplyWebService", "reserve", {rentalApplyId: raid});
                //bp2 if (rs2 != '1') {
                //bp2 alert(rs2);
                //bp2 } else {
                setShipment_requests({raid:null,raesid: this.id}).then(res=>{
                    if (res == "状态更新到已出库指示") {
                        // alert("状态更新到已出库指示");
                        const event = new ShowToastEvent({
                            title: '提示信息',
                            message:"状态更新到已出库指示"
                        });
                        this.dispatchEvent(event);
                        print().then(res=>{
                            setTimeout(function() {location.href = "/"+this.RentalApplyC;}, 100);
                        });
                    } else {
                        // alert(res);
                        const event = new ShowToastEvent({
                            title: '提示信息',
                            message:res
                        });
                        this.dispatchEvent(event);
                    }
                })
                // sforce.apex.execute("RentalApplyWebService", "setRaesShipment_request",
                //  {raesid: this.id}
                //     ,function(res) {
                //         if (res == "状态更新到已出库指示") {
                //             alert("状态更新到已出库指示");
                //             print().then(res=>{
                //                 setTimeout(function() {location.href = "/"+this.RentalApplyC;}, 100);
                //             });
                //         } else {
                //             alert(res);
                //         }
                // });
            }
        }
        async function print(){
            let sqlResult;
            if(this.Bollow_Date__c != ''){
                await selectRaesById1({recordId:RentalApply.Id}).then(res=>{
                    sqlResult=res;
                });
            }else{
                await selectRaesById2({recordId:RentalApply.Id}).then(res=>{
                    sqlResult=res;
                });
            }
            let records = sqlResult;
            let size =records.length;
            let length = size%10 ==0? size/10 : parseInt(size/10) +1;
            for(let i =0;i<length;i++){
                window.open('/apex/FixtureRentalPDF?raid=' + RentalApply.Id + '&page=' + i);
            }
        }
        // function fixTime(time){
        //     if(time < 10) {time = "0" + time};
        //         return time;
        // }
        // function fixDate(date){
        //     let Month = fixTime(date.getMonth() + 1);
        //     let Day = fixTime(date.getDate());
        //     let UTC = date.toUTCString();
        //     let Time = UTC.substring(UTC.indexOf(':')-2, UTC.indexOf(':')+6);
        //     let Minutes = fixTime(date.getMinutes());
        //     let Seconds = fixTime(date.getSeconds());
        //     return date.getFullYear() + "-" + Month + "-" + Day + "T" + Time;
        // }
    }
}
force-app/main/default/lwc/lexLoanerArrangedEmail/lexLoanerArrangedEmail.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexLoanerArrangedEmail">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexLoseBid/__tests__/lexLoseBid.test.js
New file
@@ -0,0 +1,25 @@
import { createElement } from 'lwc';
import LexLoseBid from 'c/lexLoseBid';
describe('c-lex-lose-bid', () => {
    afterEach(() => {
        // The jsdom instance is shared across test cases in a single file so reset the DOM
        while (document.body.firstChild) {
            document.body.removeChild(document.body.firstChild);
        }
    });
    it('TODO: test case generated by CLI command, please fill in test logic', () => {
        // Arrange
        const element = createElement('c-lex-lose-bid', {
            is: LexLoseBid
        });
        // Act
        document.body.appendChild(element);
        // Assert
        // const div = element.shadowRoot.querySelector('div');
        expect(1).toBe(1);
    });
});
force-app/main/default/lwc/lexLoseBid/lexLoseBid.css
New file
@@ -0,0 +1,18 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-13 10:31:18
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-13 10:46:09
 */
.lexLoseBidHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/lexLoseBid/lexLoseBid.html
New file
@@ -0,0 +1,6 @@
<template>
    <div class="lexLoseBidHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
        <lightning-button label="Show Toast" onclick={ShowToastEvent}></lightning-button>
    </div>
</template>
force-app/main/default/lwc/lexLoseBid/lexLoseBid.js
New file
@@ -0,0 +1,89 @@
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import init  from '@salesforce/apex/OpportunityLightingButtonController.initForLoseBidButton';
import updateForLoseBidButton  from '@salesforce/apex/OpportunityLightingButtonController.updateForLoseBidButton';
import queryForLexLoseBidButton  from '@salesforce/apex/OpportunityLightingButtonController.queryForLoseBidButton';
export default class LexLoseBid extends LightningElement {
    @api recordId;
    ifOpenBid;
    IsLoading = true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
            console.log(111);
            console.log(currentPageReference);
        if (currentPageReference) {
          const urlValue = currentPageReference.state.recordId;
          if (urlValue) {
            let str = `${urlValue}`;
            console.log("str");
            console.log(str);
            this.recordId = str;
          }
        }
    }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result=>{
            console.log(result);
            this.ifOpenBid = result.ifOpenBid;
            this.lexLoseBid();
        }).catch(error=>{
            console.log("error");
            console.log(error);
        })
    }
    lexLoseBid(){
        console.log("query start");
        queryForLexLoseBidButton({
            recordId: this.recordId
        }).then(result=>{
            console.log("query end");
            console.log(result);
            var flag = true;
            var taskslist = result;
            for(var task of taskslist ){
                if(task.taskStatus__c != '04 取消'){
                flag = false;
            }
            }
            if(this.ifOpenBid == '非公开招标'){
                flag = false;
            }
            if(flag){
                this.showToast("条件不符合,不可操作","error");
            }else{
                if (window.confirm('是否确认竞争对手中标?')) {
                    updateForLoseBidButton({
                        recordId: this.recordId
                    }).then(result=>{
                        if (result) {
                            this.showToast(result,"error");
                        }else{
                            this.IsLoading = false;
                            this.updateRecordView(this.recordId);
                            this.showToast("操作成功!","success");
                        }
                    })
                }
            }
        });
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            title: '',
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
        this.dispatchEvent(new CloseActionScreenEvent());
    }
    updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
    }
}
force-app/main/default/lwc/lexLoseBid/lexLoseBid.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexLoseReport/__tests__/lexLoseReport.test.js
New file
@@ -0,0 +1,25 @@
import { createElement } from 'lwc';
import LexLoseReport from 'c/lexLoseReport';
describe('c-lex-lose-report', () => {
    afterEach(() => {
        // The jsdom instance is shared across test cases in a single file so reset the DOM
        while (document.body.firstChild) {
            document.body.removeChild(document.body.firstChild);
        }
    });
    it('TODO: test case generated by CLI command, please fill in test logic', () => {
        // Arrange
        const element = createElement('c-lex-lose-report', {
            is: LexLoseReport
        });
        // Act
        document.body.appendChild(element);
        // Assert
        // const div = element.shadowRoot.querySelector('div');
        expect(1).toBe(1);
    });
});
force-app/main/default/lwc/lexLoseReport/lexLoseReport.css
New file
@@ -0,0 +1,10 @@
.lexLoseReportHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/lexLoseReport/lexLoseReport.html
New file
@@ -0,0 +1,6 @@
<template>
    <div class="lexLoseReportHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
        <lightning-button label="Show Toast" onclick={ShowToastEvent}></lightning-button>
    </div>
</template>
force-app/main/default/lwc/lexLoseReport/lexLoseReport.js
New file
@@ -0,0 +1,102 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-14 10:16:19
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-14 10:41:46
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import init  from '@salesforce/apex/OpportunityLightingButtonController.initForLostReportButton';
export default class LexLoseReport extends LightningElement {
    @api recordId;
    stageName;
    sapSendOK;
    cntLostCancelReport;
    name;
    salesAssistantName;
    salesAssistantID;
    managerName;
    salesManagerDepartmentID;
    salesOwnerBuchang;
    salesOwnerBuchangID;
    IsLoading = true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
            console.log(111);
            console.log(currentPageReference);
        if (currentPageReference) {
          const urlValue = currentPageReference.state.recordId;
          if (urlValue) {
            let str = `${urlValue}`;
            console.log("str");
            console.log(str);
            this.recordId = str;
          }
        }
    }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result=>{
            this.stageName = result.stageName;
            this.sapSendOK = result.sapSendOK;
            this.cntLostCancelReport = result.cntLostCancelReport;
            this.name = result.name;
            this.salesAssistantID = result.salesAssistantID;
            this.salesAssistantName = result.salesAssistantName;
            this.managerName = result.managerName;
            this.salesManagerDepartmentID = result.salesManagerDepartmentID;
            this.salesOwnerBuchang = result.salesOwnerBuchang;
            this.salesOwnerBuchangID = result.salesOwnerBuchangID;
            this.loseReport();
        })
    }
    loseReport(){
        // jsの場合、翻訳された値がでるので、要注意
        if (this.stageName != '引合'
        && this.stageName != '询价'
        ) {
            this.showToast("状态1:" + this.stageName + "、不能做 失单 了!","error");
        }
        else if (this.sapSendOK == '1') {
            this.showToast("已经上传SAP、不能做 失单 了!","error");
        }
        else if (this.cntLostCancelReport > 0) {
            this.showToast("询价已经有 取消/失单报告 了!","error");
        }
        //else if({!Not(ISBLANK(Opportunity.Bidding_Project_Name_Bid__c))} && //'{!Opportunity.InfoTypeBid__c}' != '3:结果' ){
        //alert("关联招投标项目的询价,只能在有结果后做失单报告!");
        //}
        else {
            location.href = '/a1U/e?retURL=%2F' + this.recordId +
            '&RecordType=01210000000R4hM' +
            '&CF00N10000004lbGT=' + this.name +
            '&CF00N10000004lbGT_lkid=' + this.recordId +
            '&CF00N10000006QShg=' + this.salesAssistantName +
            '&CF00N10000006QShg_lkid=' + this.salesAssistantID +
            '&CF00N10000006QShq=' + this.managerName +
            '&CF00N10000006QShq_lkid=' + this.salesManagerDepartmentID +
            '&CF00N10000006QShb=' + this.salesOwnerBuchang +
            '&CF00N10000006QShb_lkid=' + this.salesOwnerBuchangID +
            '';
        }
        this.dispatchEvent(new CloseActionScreenEvent());
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            title: '',
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
    }
    updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
    }
}
force-app/main/default/lwc/lexLoseReport/lexLoseReport.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexLostReturnDeliverySlip/lexLostReturnDeliverySlip.css
New file
@@ -0,0 +1,11 @@
.Holder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display : none !important;
}
force-app/main/default/lwc/lexLostReturnDeliverySlip/lexLostReturnDeliverySlip.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="Holder" if:true={IsLoading}>
          <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
      </div>
</template>
force-app/main/default/lwc/lexLostReturnDeliverySlip/lexLostReturnDeliverySlip.js
New file
@@ -0,0 +1,39 @@
import { LightningElement, track, wire, api } from 'lwc';
import {CurrentPageReference} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
export default class lexLostReturnDeliverySlip extends LightningElement {
    @api recordId;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        console.log("进入页面");
        console.log(currentPageReference);
        if(currentPageReference){
            const urvalue=currentPageReference.state.recordId;
            if(urvalue){
                let str=`${urvalue}`;
                console.log('str');
                console.log(str);
                this.recordId=str;
            }
        }
    }
    connectedCallback(){
        this.cancelSubmit().then(res=>{
            this.IsLoading=false;
            this.dispatchEvent(new CloseActionScreenEvent());
        });
    }
    async cancelSubmit(){
        window.open('/apex/Lost_Return_DeliverySlip?id='+this.recordId,'LostReturnDeliverySlip', 'width=600,height=200');
    }
    //old js
    // window.open('/apex/Lost_Return_DeliverySlip?id={!TransferApply__c.Id}');
}
force-app/main/default/lwc/lexLostReturnDeliverySlip/lexLostReturnDeliverySlip.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexLostReturnDeliverySlip">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexMainFixtureSelect/lexMainFixtureSelect.css
New file
@@ -0,0 +1,22 @@
.outerBorderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    border-top : 3px solid #565959;
}
.borderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    margin-bottom : 7px;
    border-top : 3px solid #565959;
}
.headerDorderCss{
    border-top: 1px solid #565959;
    border-bottom: 1px solid #D4D4D4;
    padding:3px;
}
.centerCss{
    text-align: center;
}
.centerCss .left{
    margin-left: 100px;
}/* sample css file */
force-app/main/default/lwc/lexMainFixtureSelect/lexMainFixtureSelect.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="sisToOPDHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexMainFixtureSelect/lexMainFixtureSelect.js
New file
@@ -0,0 +1,33 @@
import { LightningElement, track, wire, api } from 'lwc';
import { CurrentPageReference,NavigationMixin } from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import init from '@salesforce/apex/MainFixtureSelectButtonController.init';
export default class lexMainFixtureSelect extends LightningElement {
    @api recordId;
    IsLoading = true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        if(currentPageReference) {
            const urlValue = currentPageReference.state.recordId;
            if(urlValue) {
                let str = `${urlValue}`;
                this.recordId = str;
            }
        }
    }
    connectedCallback(){
        init({
            recordId:this.recordId
        }).then(res=>{
            window.open("/apex/MainFixtureSelect?pt_recid=" + res, "_top");
            this.dispatchEvent(new CloseActionScreenEvent());
        }).catch(err=>{
            console.log(err);
            this.dispatchEvent(new CloseActionScreenEvent());
        })
    }
}
force-app/main/default/lwc/lexMainFixtureSelect/lexMainFixtureSelect.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexOCMSubmit">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexOCSMNoToReportForReport/lexOCSMNoToReportForReport.js
@@ -1,3 +1,11 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-03-28 15:59:44
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-11 11:24:51
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
@@ -32,13 +40,17 @@
    connectedCallback(){
        console.log("123");
        init({
            recordId: this.recordId
        }).then(result=>{
            console.log(result);
            this.OCSMAdministrativeReportDate = result.OCSMAdministrativeReportDate;
            this.OCSMAdministrativeReportNumber = result.OCSMAdministrativeReportNumber;
            this.AwareDate = result.awareDate;
            this.noToReport();
        }).catch(error=>{
            console.log(error);
        });
    }
@@ -70,8 +82,13 @@
           updateForOCSMNoToReportButton({
                recordId: this.recordId
           }).then(result=>{
            if(result){
                this.showToast(result,"error");
            }else{
                this.showToast("OCSM不要报告成功","success");
                this.updateRecordView(this.recordId);
                this.IsLoading = false;
            }
                this.dispatchEvent(new CloseActionScreenEvent());
           });
        }else{
force-app/main/default/lwc/lexOCSMNoToReportLighting/lexOCSMNoToReportLighting.css
New file
@@ -0,0 +1,22 @@
.outerBorderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    border-top : 3px solid #565959;
}
.borderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    margin-bottom : 7px;
    border-top : 3px solid #565959;
}
.headerDorderCss{
    border-top: 1px solid #565959;
    border-bottom: 1px solid #D4D4D4;
    padding:3px;
}
.centerCss{
    text-align: center;
}
.centerCss .left{
    margin-left: 100px;
}
force-app/main/default/lwc/lexOCSMNoToReportLighting/lexOCSMNoToReportLighting.html
New file
@@ -0,0 +1,5 @@
<template>
   <div class="sisToOPDHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexOCSMNoToReportLighting/lexOCSMNoToReportLighting.js
New file
@@ -0,0 +1,105 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import { NavigationMixin } from 'lightning/navigation';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import init  from '@salesforce/apex/QISReportController.initForlexOCSMNoToReportLightingButton';
import updateQis  from '@salesforce/apex/QISReportController.updateQisForlexOCSMNoToReportLighting';
import UserInfo_Owner from '@salesforce/apex/TaskFeedbackController.UserInfo_Owner';
import { updateRecord } from 'lightning/uiRecordApi';
export default class lexOCSMNoToReportLighting extends LightningElement {
    @api recordId;
    IsLoading = true;
    qisReportId;
    OCSMAdministrativeReportNumber;
    OCSMAdministrativeReportDate;
    Awaredate;
    err;
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
             console.log(111);
             console.log(currentPageReference);
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             console.log("str");
             console.log(str);
             this.recordId = str;
           }
         }
    }
    connectedCallback () {
        init({
            recordId: this.recordId
        }).then(result => {
            this.IsLoading = false;
            this.OCSMAdministrativeReportNumber = result.oCSMAdministrativeReportNumber;
            this.OCSMAdministrativeReportDate = result.oCSMAdministrativeReportDate;
            this.qisReportId = result.Id;
            this.Awaredate = result.awaredate;
            if (!confirm("不要报告后无法撤回,是否继续?")) {
                    this.dispatchEvent(new CloseActionScreenEvent());
                    return;
            }
            if (this.OCSMAdministrativeReportDate != null || this.OCSMAdministrativeReportNumber != null) {
                    const evt = new ShowToastEvent({
                            title : '已经报告的QIS,不可以点击OCSM不要报告',
                            message: '',
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
            }
             if (this.Awaredate!=null) {
                 this.updateQisSubmit();
             }else{
                 const evt = new ShowToastEvent({
                        title : '没有AwareDate或已经OCSM行政报告,请确认',
                        message: '',
                        variant: 'error'
                    });
                    this.dispatchEvent(evt);
                    this.dispatchEvent(new CloseActionScreenEvent());
                    return;
             }
        }).catch(error => {
            console.log('error='+error);
        }).finally(() => {
        });
    }
    updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
    }
    updateQisSubmit(){
            updateQis({
                 recordId: this.recordId
                }).then(result =>{
                    console.log('result'+result);
                     this.err = result;
                    if (result!='成功') {
                        const evt = new ShowToastEvent({
                            title : '更新失败',
                            message: this.err,
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                    }
                this.dispatchEvent(new CloseActionScreenEvent());
                this.updateRecordView(this.recordId);
                }).catch(error => {
            console.log('error='+error);
        }).finally(() => {
        });
    }
}
force-app/main/default/lwc/lexOCSMNoToReportLighting/lexOCSMNoToReportLighting.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexOCSMNoToReportLighting">
   <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexOCSMNogoods/lexOCSMNogoods.css
New file
@@ -0,0 +1,22 @@
.outerBorderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    border-top : 3px solid #565959;
}
.borderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    margin-bottom : 7px;
    border-top : 3px solid #565959;
}
.headerDorderCss{
    border-top: 1px solid #565959;
    border-bottom: 1px solid #D4D4D4;
    padding:3px;
}
.centerCss{
    text-align: center;
}
.centerCss .left{
    margin-left: 100px;
}/* sample css file */
force-app/main/default/lwc/lexOCSMNogoods/lexOCSMNogoods.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="sisToOPDHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexOCSMNogoods/lexOCSMNogoods.js
New file
@@ -0,0 +1,101 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import { NavigationMixin } from 'lightning/navigation';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { updateRecord } from 'lightning/uiRecordApi';
import init  from '@salesforce/apex/QISReportController.initForlexRCRecievedButton';
import updateQis  from '@salesforce/apex/QISReportController.updateQisForRCRecieved';
export default class lexOCSMNogoods extends LightningElement {
    @api recordId;
    err;
    IsLoading = true;
    qisReportId;
    qisStatus;
    isAEProfile;
    isCNBuy;
     @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
             console.log(111);
             console.log(currentPageReference);
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             console.log("str");
             console.log(str);
             this.recordId = str;
           }
         }
     }
     connectedCallback () {
        init({
            recordId: this.recordId
        }).then(result => {
            this.IsLoading = false;
            this.qisReportId = result.Id;
            this.qisStatus = result.qIStatus;
            this.isAEProfile = result.isAEProfile;
            this.isCNBuy = result.isCNBuy;
            console.log('this.qisStatus='+this.qisStatus);
             if (this.qisStatus!='RC检测申请') {
                const evt = new ShowToastEvent({
                        title : 'OCM服务本部已经收到实物',
                        message: '',
                        variant: 'error'
                    });
                this.dispatchEvent(evt);
                this.dispatchEvent(new CloseActionScreenEvent());
                return;
             }else{
                 if (this.isAEProfile == null || this.isPAEProfile == null || this.isCNBuy != 'true') {
                     const evt = new ShowToastEvent({
                        title : '安全信息未判定,请联系质量法规部',
                        message: '',
                        variant: 'error'
                    });
                    this.dispatchEvent(evt);
                    this.dispatchEvent(new CloseActionScreenEvent());
                    return;
                 }else{
                     this.updateQisSubmit();
                 }
             }
        }).catch(error => {
            console.log('error='+error);
        }).finally(() => {
        });
    }
    updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
    }
    updateQisSubmit(){
            updateQis({
                 recordId: this.recordId
                }).then(result =>{
                    console.log('result'+result);
                    this.err = result;
                    if (result!='成功') {
                        const evt = new ShowToastEvent({
                            title : '更新失败',
                            message: this.err,
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                    }
                this.dispatchEvent(new CloseActionScreenEvent());
                this.updateRecordView(this.recordId);
                }).catch(error => {
                            console.log('error='+error);
                }).finally(() => {
                });
    }
}
force-app/main/default/lwc/lexOCSMNogoods/lexOCSMNogoods.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexOCSMNogoods">
     <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexOCSMToReport/lexOCSMToReport.js
@@ -1,3 +1,11 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-07 09:02:03
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-11 11:26:11
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
@@ -35,7 +43,6 @@
        }).then(result => {
            console.log(result);
            if (result != null) {
                this.IsLoading = false;
                this.OCSMAdministrativeReportStatus = result.OCSMAdministrativeReportStatus;
                this.awareDate = result.awareDate;
                this.toReport();
@@ -43,8 +50,6 @@
        }).catch(error => {
            console.log("error");
            console.log(error);
        }).finally(() => {
        });
    }
@@ -74,8 +79,13 @@
            updateForOCSMToReportButton({
                recordId: this.recordId
            }).then(result =>{
                this.showToast("成功","success");
                this.updateRecordView(this.recordId);
                if(result){
                    this.showToast(result,"error");
                }else{
                    this.showToast("成功","success");
                    this.updateRecordView(this.recordId);
                    this.IsLoading = false;
                }
                this.dispatchEvent(new CloseActionScreenEvent());
                });
        }else{
force-app/main/default/lwc/lexOCSMToReportLighting/lexOCSMToReportLighting.css
New file
@@ -0,0 +1,10 @@
.toReportHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}/* sample css file *//* sample css file */
force-app/main/default/lwc/lexOCSMToReportLighting/lexOCSMToReportLighting.html
New file
@@ -0,0 +1,5 @@
<template>
   <div class="sisToOPDHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexOCSMToReportLighting/lexOCSMToReportLighting.js
New file
@@ -0,0 +1,89 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import { NavigationMixin } from 'lightning/navigation';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import init  from '@salesforce/apex/QISReportController.initForlexOCSMToReportLightingButton';
import updateQis  from '@salesforce/apex/QISReportController.updateQisForlexOCSMToReportLighting';
import UserInfo_Owner from '@salesforce/apex/TaskFeedbackController.UserInfo_Owner';
import { updateRecord } from 'lightning/uiRecordApi';
export default class lexOCSMToReportLighting extends LightningElement {
    @api recordId;
    str;
    err;
    IsLoading = true;
    qisReportId;
    OCSMAdministrativeReportStatus;
    Awaredate;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
        if (currentPageReference) {
            const urlValue = currentPageReference.state.recordId;
            if (urlValue) {
                let str = `${urlValue}`;
                this.recordId = str;
            }
        }
    }
    connectedCallback() {
        console.log(this.recordId);
        init({
            recordId: this.recordId
        }).then(result => {
            console.log(result);
                this.IsLoading = false;
                this.OCSMAdministrativeReportStatus = result.oCSMAdministrativeReportStatus;
                this.qisReportId = result.Id;
                this.Awaredate = result.awaredate;
                if (!confirm("不要报告后无法撤回,是否继续?")) {
                    this.dispatchEvent(new CloseActionScreenEvent());
                    return;
                }
                if (this.OCSMAdministrativeReportStatus == null && this.Awaredate!=null) {
                     this.updateQisSubmit();
                 }else{
                     const evt = new ShowToastEvent({
                            title : '没有AwareDate或已经OCSM行政报告,请确认',
                            message: '',
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
                 }
        }).catch(error => {
            console.log(error);
        }).finally(() => {
        });
    }
    updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
    }
    updateQisSubmit(){
            updateQis({
                 recordId: this.recordId
                }).then(result =>{
                    console.log('result'+result);
                     this.err = result;
                    if (result!='成功') {
                        const evt = new ShowToastEvent({
                            title : '更新失败',
                            message: this.err,
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                    }
                this.dispatchEvent(new CloseActionScreenEvent());
                this.updateRecordView(this.recordId);
                }).catch(error => {
            console.log('error='+error);
        }).finally(() => {
        });
    }
}
force-app/main/default/lwc/lexOCSMToReportLighting/lexOCSMToReportLighting.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexOCSMToReportLighting">
   <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexOLYwinBid/__tests__/lexOLYwinBid.test.js
New file
@@ -0,0 +1,25 @@
import { createElement } from 'lwc';
import LexOLYwinBid from 'c/lexOLYwinBid';
describe('c-lex-ol-ywin-bid', () => {
    afterEach(() => {
        // The jsdom instance is shared across test cases in a single file so reset the DOM
        while (document.body.firstChild) {
            document.body.removeChild(document.body.firstChild);
        }
    });
    it('TODO: test case generated by CLI command, please fill in test logic', () => {
        // Arrange
        const element = createElement('c-lex-ol-ywin-bid', {
            is: LexOLYwinBid
        });
        // Act
        document.body.appendChild(element);
        // Assert
        // const div = element.shadowRoot.querySelector('div');
        expect(1).toBe(1);
    });
});
force-app/main/default/lwc/lexOLYwinBid/lexOLYwinBid.css
New file
@@ -0,0 +1,10 @@
.lexOLYwinBidHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/lexOLYwinBid/lexOLYwinBid.html
New file
@@ -0,0 +1,6 @@
<template>
    <div class="lexOLYwinBidHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
        <lightning-button label="Show Toast" onclick={ShowToastEvent}></lightning-button>
    </div>
</template>
force-app/main/default/lwc/lexOLYwinBid/lexOLYwinBid.js
New file
@@ -0,0 +1,97 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-13 13:15:52
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-13 13:37:19
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import init  from '@salesforce/apex/OpportunityLightingButtonController.initForOLYwinBidButton';
import updateForOLYwinBidButton  from '@salesforce/apex/OpportunityLightingButtonController.updateForOLYwinBidButton';
import queryForOLYwinBidButton  from '@salesforce/apex/OpportunityLightingButtonController.queryForOLYwinBidButton';
export default class LexOLYwinBid extends LightningElement {
    @api recordId;
    ifOpenBid;
    IsLoading = true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
            console.log(111);
            console.log(currentPageReference);
        if (currentPageReference) {
          const urlValue = currentPageReference.state.recordId;
          if (urlValue) {
            let str = `${urlValue}`;
            console.log("str");
            console.log(str);
            this.recordId = str;
          }
        }
    }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result=>{
            console.log(result);
            this.ifOpenBid = result.ifOpenBid;
            this.lexLoseBid();
        }).catch(error=>{
            console.log("error");
            console.log(error);
        })
    }
    lexLoseBid(){
        console.log("query start");
        queryForOLYwinBidButton({
            recordId: this.recordId
        }).then(result=>{
            console.log("query end");
            console.log(result);
            var flag = true;
            var taskslist = result;
            for(var task of taskslist ){
                if(task.taskStatus__c != '04 取消'){
                flag = false;
            }
            }
            if(this.ifOpenBid == '非公开招标'){
                flag = false;
            }
            if(flag){
                this.showToast("条件不符合,不可操作","error");
            }else{
                if (window.confirm('是否确认OLY中标?')) {
                    updateForOLYwinBidButton({
                        recordId: this.recordId
                    }).then(result=>{
                        if (result) {
                            this.showToast(result,"error");
                        }else{
                            this.IsLoading = false;
                            this.updateRecordView(this.recordId);
                            this.showToast("操作成功!","success");
                        }
                    })
                }
            }
        });
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            title: '',
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
        this.dispatchEvent(new CloseActionScreenEvent());
    }
    updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
    }
}
force-app/main/default/lwc/lexOLYwinBid/lexOLYwinBid.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexOPDtoSIS/lexOPDtoSIS.js
@@ -1,3 +1,11 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-07 09:02:03
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-11 11:27:14
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
@@ -47,8 +55,6 @@
        }).catch(error => {
            console.log("error");
            console.log(error);
        }).finally(() => {
        });
    }
@@ -71,15 +77,19 @@
            updateForOPDtoSISButton({
                recordId: this.recordId
            }).then(result =>{
                this.updateRecordView(this.recordId);
                this.showToast("成功!","success");
                if(result){
                    this.showToast(result,"error");
                }else{
                    this.updateRecordView(this.recordId);
                    this.showToast("成功!","success");
                    this.IsLoading = false;
                }
                this.dispatchEvent(new CloseActionScreenEvent());
                });
            } else {
                this.showToast("只草案中状态及OPD/SIS报告书的所有人可以提交","error");
                this.dispatchEvent(new CloseActionScreenEvent());
            }
            this.IsLoading = false;
        
    }
}
force-app/main/default/lwc/lexOSHInspect/lexOSHInspect.css
New file
@@ -0,0 +1,10 @@
.opdToSISHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}/* sample css file */
force-app/main/default/lwc/lexOSHInspect/lexOSHInspect.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="opdToSISHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexOSHInspect/lexOSHInspect.js
New file
@@ -0,0 +1,100 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import { NavigationMixin } from 'lightning/navigation';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import init  from '@salesforce/apex/QISReportController.initForlexOSHInspectButton';
import updateQis  from '@salesforce/apex/QISReportController.updateQisForlexOSHInspect';
import UserInfo_Owner from '@salesforce/apex/TaskFeedbackController.UserInfo_Owner';
import { updateRecord } from 'lightning/uiRecordApi';
export default class lexOSHInspect extends LightningElement {
    @api recordId;
    IsLoading = true;
    qisReportId;
    qisStatus;
    oSHInspectionDate;
    err;
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
             console.log(111);
             console.log(currentPageReference);
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             console.log("str");
             console.log(str);
             this.recordId = str;
           }
         }
     }
    connectedCallback () {
        init({
            recordId: this.recordId
        }).then(result => {
            this.IsLoading = false;
            this.qisReportId = result.Id;
            this.qisStatus = result.qIStatus;
            this.oSHInspectionDate = result.oSHInspectionDate;
             if (this.qisStatus!='OSH检测中') {
                 const evt = new ShowToastEvent({
                            title : '需要先点击[OSH现品收到]',
                            message: '',
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
             }else if(this.oSHInspectionDate != null){
                 const evt = new ShowToastEvent({
                            title : 'OSH检测已经受理',
                            message: '',
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
             }else{
                 this.updateQisSubmit();
             }
        }).catch(error => {
            console.log('error='+error);
        }).finally(() => {
        });
    }
    updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
    }
    updateQisSubmit(){
            updateQis({
                 recordId: this.recordId
                }).then(result =>{
                    console.log('result'+result);
                    if (result!='成功') {
                        this.err = result;
                        const evt = new ShowToastEvent({
                            title : '更新失败',
                            message: this.err,
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                    }
                this.dispatchEvent(new CloseActionScreenEvent());
                this.updateRecordView(this.recordId);
                }).catch(error => {
            console.log('error='+error);
        }).finally(() => {
        });
    }
}
force-app/main/default/lwc/lexOSHInspect/lexOSHInspect.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexOSHInspect">
      <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexOSHSubmit/lexOSHSubmit.js
@@ -2,6 +2,7 @@
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import { NavigationMixin } from 'lightning/navigation';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import init  from '@salesforce/apex/QISReportController.initForOSHSubmitButton';
import updateQis  from '@salesforce/apex/QISReportController.updateQis1';
import UserInfo_Owner from '@salesforce/apex/TaskFeedbackController.UserInfo_Owner';
@@ -44,27 +45,59 @@
            console.log('this.OSHstaff='+this.OSHstaff);
            console.log('this.OSHstaffEmail='+this.OSHstaffEmail);
             if (this.qisStatus=='OSH检测申请' && this.qisStatus=='完毕') {
                 alert('需要先点击[OSH检查受理]');
                 return;
                const evt = new ShowToastEvent({
                            title : '需要先点击[OSH检查受理]',
                            message: '',
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
             }
             if (this.qisStatus!='OSH检测中') {
                 alert('已经提交审批');
                 return;
                const evt = new ShowToastEvent({
                            title : '已经提交审批',
                            message: '',
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
             }
             if (!confirm("一旦提交此记录以待批准,根据您的设置您可能不再能够编辑此记录或将他从批准过程中调回。是否继续?")) {
                return;
            }
            if (this.OSHstaff==null||this.OSHstaffEmail==null) {
                alert("OSH担当必须填写");
                return;
                const evt = new ShowToastEvent({
                            title : 'OSH担当必须填写',
                            message: '',
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
            }
            try{
                this.updateQisSubmit();
            }catch(err){
                if(err.faultstring !=undefined && err.faultstring.indexOf('INVALID_SESSION_ID') != -1) {
                    alert('当前网页已登出,请您重新登录后刷新该网页!');
                    const evt = new ShowToastEvent({
                            title : '当前网页已登出,请您重新登录后刷新该网页!',
                            message: '',
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
                } else {
                    alert(err.faultstring);
                    const evt = new ShowToastEvent({
                            title : err.faultstring,
                            message: '',
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
                }
                return;
            }
force-app/main/default/lwc/lexPDFQISrequest/lexPDFQISrequest.css
New file
@@ -0,0 +1,22 @@
.outerBorderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    border-top : 3px solid #565959;
}
.borderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    margin-bottom : 7px;
    border-top : 3px solid #565959;
}
.headerDorderCss{
    border-top: 1px solid #565959;
    border-bottom: 1px solid #D4D4D4;
    padding:3px;
}
.centerCss{
    text-align: center;
}
.centerCss .left{
    margin-left: 100px;
}/* sample css file *//* sample css file */
force-app/main/default/lwc/lexPDFQISrequest/lexPDFQISrequest.html
New file
@@ -0,0 +1,5 @@
<template>
   <div class="sisToOPDHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexPDFQISrequest/lexPDFQISrequest.js
New file
@@ -0,0 +1,47 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import { NavigationMixin } from 'lightning/navigation';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import init  from '@salesforce/apex/QISReportController.initForlexPDFQISrequestButton';
import UserInfo_Owner from '@salesforce/apex/TaskFeedbackController.UserInfo_Owner';
import { updateRecord } from 'lightning/uiRecordApi';
export default class lexPDFQISrequest extends LightningElement {
    @api recordId;
    IsLoading = true;
    qisReportId;
    err;
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
             console.log(111);
             console.log(currentPageReference);
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             console.log("str");
             console.log(str);
             this.recordId = str;
           }
         }
    }
    connectedCallback () {
        init({
            recordId: this.recordId
        }).then(result => {
            this.IsLoading = false;
            this.qisReportId = result.Id;
            window.open('/apex/QISPDF?id='+this.qisReportId, 'QISPDF');
            this.dispatchEvent(new CloseActionScreenEvent());
        }).catch(error => {
            console.log('error='+error);
        }).finally(() => {
        });
    }
}
force-app/main/default/lwc/lexPDFQISrequest/lexPDFQISrequest.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexPDFQISrequest">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexPredictedDateChange/__tests__/lexPredictedDateChange.test.js
New file
@@ -0,0 +1,25 @@
import { createElement } from 'lwc';
import LexPredictedDateChange from 'c/lexPredictedDateChange';
describe('c-lex-predicted-date-change', () => {
    afterEach(() => {
        // The jsdom instance is shared across test cases in a single file so reset the DOM
        while (document.body.firstChild) {
            document.body.removeChild(document.body.firstChild);
        }
    });
    it('TODO: test case generated by CLI command, please fill in test logic', () => {
        // Arrange
        const element = createElement('c-lex-predicted-date-change', {
            is: LexPredictedDateChange
        });
        // Act
        document.body.appendChild(element);
        // Assert
        // const div = element.shadowRoot.querySelector('div');
        expect(1).toBe(1);
    });
});
force-app/main/default/lwc/lexPredictedDateChange/lexPredictedDateChange.css
New file
@@ -0,0 +1,10 @@
.predictedDateChangeHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/lexPredictedDateChange/lexPredictedDateChange.html
New file
@@ -0,0 +1,6 @@
<template>
    <div class="predictedDateChangeHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
        <lightning-button label="Show Toast" onclick={ShowToastEvent}></lightning-button>
    </div>
</template>
force-app/main/default/lwc/lexPredictedDateChange/lexPredictedDateChange.js
New file
@@ -0,0 +1,82 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-12 10:46:24
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-12 13:48:26
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import queryForPredictedDateChangeButton  from '@salesforce/apex/OpportunityLightingButtonController.queryForPredictedDateChangeButton';
import init  from '@salesforce/apex/OpportunityLightingButtonController.initForPredictedDateChangeButton';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class LexPredictedDateChange extends LightningElement {
    @api recordId;
    IsLoading = true;
    directLossFLG;
    createdDay;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
            console.log(111);
            console.log(currentPageReference);
        if (currentPageReference) {
          const urlValue = currentPageReference.state.recordId;
          if (urlValue) {
            let str = `${urlValue}`;
            console.log("str");
            console.log(str);
            this.recordId = str;
          }
        }
    }
    showToast(msg,type) {
      const event = new ShowToastEvent({
          title: '',
          message: msg,
          variant: type
      });
      this.dispatchEvent(event);
    }
    updateRecordView(recordId) {
      updateRecord({fields: { Id: recordId }});
    }
    connectedCallback(){
      init({
        recordId: this.recordId
      }).then(result=>{
        this.directLossFLG = result.directLossFLG;
        this.createdDay = result.createdDay;
        this.predictedDateChange();
      }).catch(error=>{
        console.log("error");
        console.log(error);
      })
    }
    predictedDateChange(){
      // 20221206 ljh DB202212030068 start
      var DirectLossFLG = this.directLossFLG;
      var CreatedDay = this.createdDay;
      var Day =  Date('2022-12-03');
      if((DirectLossFLG == 'true' || DirectLossFLG == 1 ) && CreatedDay > Day){
        this.showToast("从招标项目点击失单新建的询价,预测OCSM签约日(KPI)和预测发货日不允许修改","error");
        return;
      }
      // 20221206 ljh DB202212030068 end
      queryForPredictedDateChangeButton({
        recordId: this.recordId
      }).then(result=>{
        var sqlResult = result;
        if (sqlResult.size > 0) {
          this.showToast("已存在待审批的变更申请!","error");
          return;
        } else {
          window.open('/apex/ImprovedForecastTime?id=' + this.recordId,'','height=500,width=800,top=200,left=250,location=no');
          this.dispatchEvent(new CloseActionScreenEvent());
        }
      })
    }
}
force-app/main/default/lwc/lexPredictedDateChange/lexPredictedDateChange.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexQISSC/lexQISSC.css
New file
@@ -0,0 +1,22 @@
.outerBorderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    border-top : 3px solid #565959;
}
.borderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    margin-bottom : 7px;
    border-top : 3px solid #565959;
}
.headerDorderCss{
    border-top: 1px solid #565959;
    border-bottom: 1px solid #D4D4D4;
    padding:3px;
}
.centerCss{
    text-align: center;
}
.centerCss .left{
    margin-left: 100px;
}/* sample css file *//* sample css file */
force-app/main/default/lwc/lexQISSC/lexQISSC.html
New file
@@ -0,0 +1,5 @@
<template>
   <div class="sisToOPDHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexQISSC/lexQISSC.js
New file
@@ -0,0 +1,96 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import { NavigationMixin } from 'lightning/navigation';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import init  from '@salesforce/apex/QISReportController.initForlexQISSCButton';
import UserInfo_Owner from '@salesforce/apex/TaskFeedbackController.UserInfo_Owner';
import { updateRecord } from 'lightning/uiRecordApi';
export default class lexQISSC extends LightningElement {
    @api recordId;
    IsLoading = true;
    qisReportId;
    name;
    profileName;
    qISSCId;
    qISSCReport;
    nextaction;
    qISMarketCategory;
    err;
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
             console.log(111);
             console.log(currentPageReference);
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             console.log("str");
             console.log(str);
             this.recordId = str;
           }
         }
    }
    connectedCallback () {
        init({
            recordId: this.recordId
        }).then(result => {
            this.IsLoading = false;
            this.qisReportId = result.Id;
            this.name = result.name;
            this.qISSCId = result.qISSCId;
            this.qISSCReport = result.qISSCReport;
            this.nextaction = result.nextaction;
            this.qISMarketCategory = result.qISMarketCategory;
            this.profileName = result.profileName;
            console.log('profileName='+this.profileName);
            console.log('qISSCReport='+this.qISSCReport);
            console.log('nextaction='+this.nextaction);
            console.log('qISMarketCategory='+this.qISMarketCategory);
            if (this.profileName == '2F4_技术推进部' || this.profileName == '2F4_技术推进部_OSH 非单点') {
                const evt = new ShowToastEvent({
                            title : '您没有新建QIS市场部权限。',
                            message: '',
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
            }
            if (this.qISSCReport!=null) {
                var url = 'https://ocsm.my.salesforce.com/'+this.qISSCId;
                window.open(url);
                this.dispatchEvent(new CloseActionScreenEvent());
                return;
            }else{
                if (this.nextaction == '送回' && (this.qISMarketCategory == 'ET' || this.qISMarketCategory == 'ENG' || this.qISMarketCategory == 'EndoRapid')) {
                    var urlStr ='/a3w/e?CF00N100000095xFJ='+this.name+
                            '&CF00N100000095xFJ_lkid='+this.qisReportId+
                            '&retURL='+this.qisReportId+
                            '&Name='+this.name;
                        window.open(urlStr);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
                }else{
                    const evt = new ShowToastEvent({
                            title : '对应方法为返回且对应主机/消耗品为ET 或 ENG 或 EndoRapid 时,才可以新建。',
                            message: '',
                            variant: 'error'
                        });
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
                }
            }
        }).catch(error => {
            console.log('error='+error);
        }).finally(() => {
        });
    }
}
force-app/main/default/lwc/lexQISSC/lexQISSC.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexQISSC">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexQuotationProductNew/__tests__/lexQuotationProductNew.test.js
New file
@@ -0,0 +1,25 @@
import { createElement } from 'lwc';
import LexQuotationProductNew from 'c/lexQuotationProductNew';
describe('c-lex-quotation-product-new', () => {
    afterEach(() => {
        // The jsdom instance is shared across test cases in a single file so reset the DOM
        while (document.body.firstChild) {
            document.body.removeChild(document.body.firstChild);
        }
    });
    it('TODO: test case generated by CLI command, please fill in test logic', () => {
        // Arrange
        const element = createElement('c-lex-quotation-product-new', {
            is: LexQuotationProductNew
        });
        // Act
        document.body.appendChild(element);
        // Assert
        // const div = element.shadowRoot.querySelector('div');
        expect(1).toBe(1);
    });
});
force-app/main/default/lwc/lexQuotationProductNew/lexQuotationProductNew.html
New file
@@ -0,0 +1,6 @@
<template>
    <div class="lexQuotationRequestHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
        <lightning-button label="Show Toast" onclick={ShowToastEvent}></lightning-button>
    </div>
</template>
force-app/main/default/lwc/lexQuotationProductNew/lexQuotationProductNew.js
New file
@@ -0,0 +1,67 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-14 17:15:33
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-14 17:20:45
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import init  from '@salesforce/apex/OpportunityLightingButtonController.initForQuotationProductNewButton';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class LexQuotationProductNew extends LightningElement {
    @api recordId;
    currencyIsoCode;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
            console.log(111);
            console.log(currentPageReference);
        if (currentPageReference) {
          const urlValue = currentPageReference.state.recordId;
          if (urlValue) {
            let str = `${urlValue}`;
            console.log("str");
            console.log(str);
            this.recordId = str;
          }
        }
    }
    connectedCallback(){
        init({
            recordId:this.recordId
        }).then(result=>{
            this.currencyIsoCode = result.currencyIsoCode;
            this.quotationProductNew();
        }).catch(error=>{
            console.log(error);
        });
    }
    quotationProductNew(){
        var Currency = this.currencyIsoCode;
        var OppID = this.recordId;
        if (Currency == 'CNY'){
        var url = '/00O10000002jviu?pv0=' + OppID;
        }
        else if (Currency == 'USD'){
        var url = '/00O10000005Ju6L?pv0=' + OppID;
        }
        window.open(url);
        this.dispatchEvent(new CloseActionScreenEvent());
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            title: '',
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
      }
      updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
      }
}
force-app/main/default/lwc/lexQuotationProductNew/lexQuotationProductNew.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexQuotationRequest/__tests__/lexQuotationRequest.test.js
New file
@@ -0,0 +1,25 @@
import { createElement } from 'lwc';
import LexQuotationRequest from 'c/lexQuotationRequest';
describe('c-lex-quotation-request', () => {
    afterEach(() => {
        // The jsdom instance is shared across test cases in a single file so reset the DOM
        while (document.body.firstChild) {
            document.body.removeChild(document.body.firstChild);
        }
    });
    it('TODO: test case generated by CLI command, please fill in test logic', () => {
        // Arrange
        const element = createElement('c-lex-quotation-request', {
            is: LexQuotationRequest
        });
        // Act
        document.body.appendChild(element);
        // Assert
        // const div = element.shadowRoot.querySelector('div');
        expect(1).toBe(1);
    });
});
force-app/main/default/lwc/lexQuotationRequest/lexQuotationRequest.css
New file
@@ -0,0 +1,10 @@
.lexQuotationRequestHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/lexQuotationRequest/lexQuotationRequest.html
New file
@@ -0,0 +1,14 @@
<!--
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-14 11:09:28
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-14 11:10:38
-->
<template>
    <div class="lexQuotationRequestHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
        <lightning-button label="Show Toast" onclick={ShowToastEvent}></lightning-button>
    </div>
</template>
force-app/main/default/lwc/lexQuotationRequest/lexQuotationRequest.js
New file
@@ -0,0 +1,73 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-14 11:09:28
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-14 11:21:24
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import queryForQuotationRequestButton  from '@salesforce/apex/OpportunityLightingButtonController.queryForQuotationRequestButton';
import init  from '@salesforce/apex/OpportunityLightingButtonController.initForQuotationRequestButton';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class LexQuotationRequest extends LightningElement {
    @api recordId;
    biddingProjectNameBidId;
    estimationId;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
            console.log(111);
            console.log(currentPageReference);
        if (currentPageReference) {
          const urlValue = currentPageReference.state.recordId;
          if (urlValue) {
            let str = `${urlValue}`;
            console.log("str");
            console.log(str);
            this.recordId = str;
          }
        }
    }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result=>{
            this.biddingProjectNameBidId = result.biddingProjectNameBidId;
            this.estimationId = result.estimationId;
            this.quotationRequest();
        })
    }
    quotationRequest(){
        queryForQuotationRequestButton({
            recordId: this.recordId
        }).then(result=>{
            var records = result;
            var size =records.length;
            if(size > 1){
                this.showToast("有2个或者2个以上的草案中报价委托,请确认。","error");
            }else if(size == 1){
                var raes = records[0].Id;
                location.href = "/apex/NewQuoteIrai?id="+ raes+"&tenderid=" + this.biddingProjectNameBidId;
            }else{
                location.href = "/apex/NewQuoteIrai?oppid=" + this.recordId + "&oppquoid=" + this.estimationId + "&tenderid=" + this.biddingProjectNameBidId;
            }
            this.dispatchEvent(new CloseActionScreenEvent());
        })
    }
    showToast(msg,type) {
      const event = new ShowToastEvent({
          title: '',
          message: msg,
          variant: type
      });
      this.dispatchEvent(event);
    }
    updateRecordView(recordId) {
      updateRecord({fields: { Id: recordId }});
    }
}
force-app/main/default/lwc/lexQuotationRequest/lexQuotationRequest.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexRCRecieved/lexRCRecieved.css
New file
@@ -0,0 +1,22 @@
.outerBorderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    border-top : 3px solid #565959;
}
.borderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    margin-bottom : 7px;
    border-top : 3px solid #565959;
}
.headerDorderCss{
    border-top: 1px solid #565959;
    border-bottom: 1px solid #D4D4D4;
    padding:3px;
}
.centerCss{
    text-align: center;
}
.centerCss .left{
    margin-left: 100px;
}/* sample css file */
force-app/main/default/lwc/lexRCRecieved/lexRCRecieved.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="sisToOPDHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexRCRecieved/lexRCRecieved.js
New file
@@ -0,0 +1,103 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import { NavigationMixin } from 'lightning/navigation';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { updateRecord } from 'lightning/uiRecordApi';
import init  from '@salesforce/apex/QISReportController.initForlexRCRecievedButton';
import updateQis  from '@salesforce/apex/QISReportController.updateQisForRCRecieved';
export default class lexRCRecieved extends LightningElement {
    @api recordId;
    err;
    IsLoading = true;
    qisReportId;
    qisStatus;
    isAEProfile;
    isPAEProfile;
    isCNBuy;
     @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
             console.log(111);
             console.log(currentPageReference);
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             console.log("str");
             console.log(str);
             this.recordId = str;
           }
         }
     }
     connectedCallback () {
        init({
            recordId: this.recordId
        }).then(result => {
            this.IsLoading = false;
            this.qisReportId = result.Id;
            this.qisStatus = result.qIStatus;
            this.isAEProfile = result.isAEProfile;
            this.isPAEProfile = result.isPAEProfile;
            this.isCNBuy = result.isCNBuy;
            console.log('this.qisStatus='+this.qisStatus);
             if (this.qisStatus!='RC检测申请') {
                const evt = new ShowToastEvent({
                        title : 'OCM服务本部已经收到实物',
                        message: '',
                        variant: 'error'
                    });
                this.dispatchEvent(evt);
                this.dispatchEvent(new CloseActionScreenEvent());
                return;
             }else{
                 if (this.isAEProfile == null || this.isPAEProfile == null || this.isCNBuy != 'true') {
                     const evt = new ShowToastEvent({
                        title : '安全信息未判定,请联系质量法规部',
                        message: '',
                        variant: 'error'
                    });
                    this.dispatchEvent(evt);
                    this.dispatchEvent(new CloseActionScreenEvent());
                    return;
                 }else{
                     this.updateQisSubmit();
                 }
             }
        }).catch(error => {
            console.log('error='+error);
        }).finally(() => {
        });
    }
    updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
    }
    updateQisSubmit(){
            updateQis({
                 recordId: this.recordId
                }).then(result =>{
                    console.log('result'+result);
                    this.err = result;
                    if (result!='成功') {
                        const evt = new ShowToastEvent({
                            title : '更新失败',
                            message: this.err,
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                    }
                this.dispatchEvent(new CloseActionScreenEvent());
                this.updateRecordView(this.recordId);
                }).catch(error => {
                            console.log('error='+error);
                }).finally(() => {
                });
    }
}
force-app/main/default/lwc/lexRCRecieved/lexRCRecieved.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexRCRecieved">
   <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexRCinspectioncompletedate/lexRCinspectioncompletedate.css
New file
@@ -0,0 +1,22 @@
.outerBorderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    border-top : 3px solid #565959;
}
.borderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    margin-bottom : 7px;
    border-top : 3px solid #565959;
}
.headerDorderCss{
    border-top: 1px solid #565959;
    border-bottom: 1px solid #D4D4D4;
    padding:3px;
}
.centerCss{
    text-align: center;
}
.centerCss .left{
    margin-left: 100px;
}/* sample css file */
force-app/main/default/lwc/lexRCinspectioncompletedate/lexRCinspectioncompletedate.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="sisToOPDHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexRCinspectioncompletedate/lexRCinspectioncompletedate.js
New file
@@ -0,0 +1,98 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import { NavigationMixin } from 'lightning/navigation';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { updateRecord } from 'lightning/uiRecordApi';
import init  from '@salesforce/apex/QISReportController.initForlexRCinspectioncompletedateButton';
import updateQis  from '@salesforce/apex/QISReportController.updateQisForRCinspectioncompletedate';
export default class lexRCinspectioncompletedate extends LightningElement {
    @api recordId;
    err;
    IsLoading = true;
    qisReportId;
    qisStatus;
    rCinspectionDate;
     @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
             console.log(111);
             console.log(currentPageReference);
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             console.log("str");
             console.log(str);
             this.recordId = str;
           }
         }
     }
     connectedCallback () {
        init({
            recordId: this.recordId
        }).then(result => {
            this.IsLoading = false;
            this.qisReportId = result.Id;
            this.qisStatus = result.qIStatus;
            this.rCinspectionDate = result.rCinspectionDate;
             if (this.qisStatus =='RC检测申请') {
                const evt = new ShowToastEvent({
                        title : '需要先点击[OCM服务本部收到实物]',
                        message: '',
                        variant: 'error'
                    });
                this.dispatchEvent(evt);
                this.dispatchEvent(new CloseActionScreenEvent());
                return;
             }else if(this.rCinspectionDate != null){
                     const evt = new ShowToastEvent({
                        title : 'OCM服务本部检测已经完毕',
                        message: '',
                        variant: 'error'
                    });
                    this.dispatchEvent(evt);
                    this.dispatchEvent(new CloseActionScreenEvent());
                    return;
             }else{
                 this.updateQisSubmit();
             }
        }).catch(error => {
            console.log('error='+error);
        }).finally(() => {
        });
    }
    updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
    }
    updateQisSubmit(){
            updateQis({
                 recordId: this.recordId
                }).then(result =>{
                    console.log('result'+result);
                    this.err = result;
                    if (result!='成功') {
                        const evt = new ShowToastEvent({
                            title : '更新失败',
                            message: this.err,
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                    }
                this.dispatchEvent(new CloseActionScreenEvent());
                this.updateRecordView(this.recordId);
                }).catch(error => {
                            console.log('error='+error);
                }).finally(() => {
                });
    }
}
force-app/main/default/lwc/lexRCinspectioncompletedate/lexRCinspectioncompletedate.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexRCinspectioncompletedate">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexRentalApplyESetRefreshStatus/lexRentalApplyESetRefreshStatus.css
New file
@@ -0,0 +1,11 @@
.Holder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display : none !important;
}
force-app/main/default/lwc/lexRentalApplyESetRefreshStatus/lexRentalApplyESetRefreshStatus.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="Holder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
      </div>
</template>
force-app/main/default/lwc/lexRentalApplyESetRefreshStatus/lexRentalApplyESetRefreshStatus.js
New file
@@ -0,0 +1,91 @@
import { LightningElement, track, wire, api } from 'lwc';
import {CurrentPageReference,NavigationMixin} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import eSetRefreshStatus from '@salesforce/apex/RentalApplyESetRefreshStatusController.eSetRefreshStatus';
export default class lexRentalApplyESetRefreshStatus extends LightningElement {
    @api raeSetId;
    IsLoading=true;
    refreshResult;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
        console.log(currentPageReference);
        if(currentPageReference) {
            const urlValue = currentPageReference.state.recordId;
            if(urlValue) {
                let str = `${urlValue}`;
                console.log("str");
                console.log(str);
                this.recordId = str;
            }
        }
    }
    connectedCallback() {
        console.log('this.raeSetId:' + this.recordId);
        eSetRefreshStatus({
            raeSetId : this.recordId
        }).then(result => {
            this.refreshResult = result;
            this.cancelSubmit().then(res=>{
                this.IsLoading=false;
                this.dispatchEvent(new CloseActionScreenEvent());
            });
        }).catch( error =>{
            console.log(error);
        }).finally(()=>{
        });
    }
    async cancelSubmit(){
        if(this.refreshResult == '1') {
            this.showToast('','状态更新完毕','success');
            // alert("状态更新完毕!");
            location.href = "/"+this.recordId;
        } else {
            console.log("result:",this.refreshResult);
            this.showToast('','更新失败,请联系管理员!','warning');
            // alert("更新失败,请联系管理员!");
        }
    }
    showToast(_title,_message,_variant) {
        const event = new ShowToastEvent({
            title: _title,
            message:_message,
            variant: _variant,
        });
        this.dispatchEvent(event);
    }
}
// old js代码:
// {!RequireScript("/soap/ajax/51.0/connection.js")}
// {!RequireScript("/soap/ajax/51.0/apex.js")}
// var raeSet = '{!Rental_Apply_Equipment_Set__c.Id}';
// try {
//     var rtn = sforce.apex.execute("RentalApplyWebService", "eSetRefreshStatus", {raeSetId: raeSet});
//     if (rtn = '1') {
//         alert("状态更新完毕!");
//         location.href = "/{!Rental_Apply_Equipment_Set__c.Id}";
//     } else {
//         alert(rtn);
//     }
// } catch(e) {
//     alert(e);
// }
force-app/main/default/lwc/lexRentalApplyESetRefreshStatus/lexRentalApplyESetRefreshStatus.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexRentalApplyESetRefreshStatus">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexRequestDB/__tests__/lexRequestDB.test.js
New file
@@ -0,0 +1,25 @@
import { createElement } from 'lwc';
import LexRequestDB from 'c/lexRequestDB';
describe('c-lex-request-db', () => {
    afterEach(() => {
        // The jsdom instance is shared across test cases in a single file so reset the DOM
        while (document.body.firstChild) {
            document.body.removeChild(document.body.firstChild);
        }
    });
    it('TODO: test case generated by CLI command, please fill in test logic', () => {
        // Arrange
        const element = createElement('c-lex-request-db', {
            is: LexRequestDB
        });
        // Act
        document.body.appendChild(element);
        // Assert
        // const div = element.shadowRoot.querySelector('div');
        expect(1).toBe(1);
    });
});
force-app/main/default/lwc/lexRequestDB/lexRequestDB.css
New file
@@ -0,0 +1,10 @@
.lexRequestDBHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/lexRequestDB/lexRequestDB.html
New file
@@ -0,0 +1,6 @@
<template>
    <div class="lexRequestDBHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
        <lightning-button label="Show Toast" onclick={ShowToastEvent}></lightning-button>
    </div>
</template>
force-app/main/default/lwc/lexRequestDB/lexRequestDB.js
New file
@@ -0,0 +1,107 @@
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import init  from '@salesforce/apex/OpportunityLightingButtonController.initForRequestDBButton';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class LexRequestDB extends LightningElement {
    @api recordId;
    stageName;
    sapSendOK;
    cntLostCancelReport;
    cntLostCancelDraft;
    agency1;
    agency1Id;
    name;
    bidPlannedDate;
    salesAssistantName;
    salesAssistantID;
    profileId;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
            console.log(111);
            console.log(currentPageReference);
        if (currentPageReference) {
          const urlValue = currentPageReference.state.recordId;
          if (urlValue) {
            let str = `${urlValue}`;
            console.log("str");
            console.log(str);
            this.recordId = str;
          }
        }
    }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result=>{
            this.stageName = result.stageName;
            this.sapSendOK = result.sapSendOK;
            this.cntLostCancelReport = result.cntLostCancelReport;
            this.cntLostCancelDraft = result.cntLostCancelDraft;
            this.agency1 = result.agency1;
            this.agency1Id = result.agency1Id;
            this.name = result.name;
            this.bidPlannedDate = result.bidPlannedDate;
            this.salesAssistantName = result.salesAssistantName;
            this.salesAssistantID = result.salesAssistantID;
            this.profileId = result.profileId;
            this.requestDB();
        })
    }
    requestDB(){
        var profileId = this.profileId;
        if (profileId != '00e10000000Y3o5' && profileId != '00e10000000xnp2' &&
        profileId != '00e10000000xnpH') {
            this.showToast("您没有授权委托的权限。请联系系统管理员。","error");
        }
        // jsの場合、翻訳された値がでるので、要注意
        else if (this.stageName != '引合'
        && this.stageName != '询价'
        ) {
            this.showToast("状态1:" + this.stageName + "、不能做授权申请!","");
        }
        else if (this.sapSendOK == '1') {
            this.showToast("已经上传SAP、不能做授权申请了!","error");
        }
        else if (this.cntLostCancelReport - this.cntLostCancelDraft > 0) {
            this.showToast("询价已经有取消/失单报告了!","error");
        }
        else {
        location.href = '/a2C/e?retURL=%2F' +
            encodeURI(this.recordId) +
            '&RecordType=01210000000RNXi' +
            '&CF00N10000006QdJz=' +
            encodeURI(this.agency1) +
            '&CF00N10000006QdJz_lkid=' +
            encodeURI(this.agency1Id) +
            '&CF00N10000006QdKn=' +
            encodeURI(this.name) +
            '&CF00N10000006QdKn_lkid=' +
            encodeURI(this.recordId) +
            '&00N10000006QdK4=' +
            encodeURI(this.name) +
            '&00N10000006QdYB=' +
            encodeURI(this.bidPlannedDate) +
            '&CF00N10000006QdZT=' +
            encodeURI(this.salesAssistantName) +
            '&CF00N10000006QdZT_lkid=' +
            encodeURI(this.salesAssistantID) +
            '';
        };
        this.dispatchEvent(new CloseActionScreenEvent());
    }
    showToast(msg,type) {
      const event = new ShowToastEvent({
          title: '',
          message: msg,
          variant: type
      });
      this.dispatchEvent(event);
    }
    updateRecordView(recordId) {
      updateRecord({fields: { Id: recordId }});
    }
}
force-app/main/default/lwc/lexRequestDB/lexRequestDB.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexReturnDeliverySlip/lexReturnDeliverySlip.css
New file
@@ -0,0 +1,22 @@
.outerBorderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    border-top : 3px solid #565959;
}
.borderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    margin-bottom : 7px;
    border-top : 3px solid #565959;
}
.headerDorderCss{
    border-top: 1px solid #565959;
    border-bottom: 1px solid #D4D4D4;
    padding:3px;
}
.centerCss{
    text-align: center;
}
.centerCss .left{
    margin-left: 100px;
}/* sample css file */
force-app/main/default/lwc/lexReturnDeliverySlip/lexReturnDeliverySlip.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="sisToOPDHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexReturnDeliverySlip/lexReturnDeliverySlip.js
New file
@@ -0,0 +1,53 @@
import { LightningElement, track, wire, api } from 'lwc';
import { CurrentPageReference,NavigationMixin } from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import { encodeDefaultFieldValues } from 'lightning/pageReferenceUtils';
import init from '@salesforce/apex/ReturnDeliverySlipController.init';
export default class lexReturnDeliverySlip extends LightningElement {
    @api recordId;
        IsLoading = true;
        raId;
        raName;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        if(currentPageReference) {
            const urlValue = currentPageReference.state.recordId;
            if(urlValue) {
                let str = `${urlValue}`;
                this.recordId = str;
            }
        }
    }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result =>{
            if(result.RentalApplyEquipmentSetCnt > 0){
                console.log(JSON.stringify(result.raeSet));
                if(JSON.stringify(result.raeSet) != '[]'){
                    var check = result.raeSet && result.raeSet.length>0;
                    if((check || result.RentalApplyEquipmentSetCnt - result.LoanerReceivedNgNum > 0) && result.RentalApplyEquipmentSetCnt > 0){
                        window.open("/apex/EquipmentSetShippmentReceived4?id=" + result.Name);
                    }else{
                        alert("没有申请者收到确认的借出备品");
                    }
                }else{
                    alert("没有符合条件的备品借出申请一览明细");
                    console.log('else');
                }
            this.dispatchEvent(new CloseActionScreenEvent());
        }else{
            this.dispatchEvent(new CloseActionScreenEvent());
            alert("没有备品借出申请一览及一览明细");
        }
        }).catch(err=>{
            this.dispatchEvent(new CloseActionScreenEvent());
            console.log('err=='+err);
        })
    }
}
force-app/main/default/lwc/lexReturnDeliverySlip/lexReturnDeliverySlip.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexOCMSubmit">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexSIStoOPD/lexSIStoOPD.js
@@ -1,3 +1,11 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-07 09:02:03
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-12 10:15:28
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
@@ -44,7 +52,6 @@
        }).catch(error => {
            console.log("error");
            console.log(error);
        }).finally(() => {
        });
    }
@@ -74,10 +81,13 @@
                }else{
                    this.showToast("成功","success");
                    this.updateRecordView(this.recordId);
                }
                this.dispatchEvent(new CloseActionScreenEvent());
                }
                this.IsLoading = false;
                this.dispatchEvent(new CloseActionScreenEvent());
            });              
    } else {
        this.showToast("只草案中状态及OPD/SIS报告书的所有人可以提交","error");
        this.dispatchEvent(new CloseActionScreenEvent());
    }
    
}
force-app/main/default/lwc/lexSendQIS/lexSendQIS.css
New file
@@ -0,0 +1,22 @@
.outerBorderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    border-top : 3px solid #565959;
}
.borderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    margin-bottom : 7px;
    border-top : 3px solid #565959;
}
.headerDorderCss{
    border-top: 1px solid #565959;
    border-bottom: 1px solid #D4D4D4;
    padding:3px;
}
.centerCss{
    text-align: center;
}
.centerCss .left{
    margin-left: 100px;
}/* sample css file */
force-app/main/default/lwc/lexSendQIS/lexSendQIS.html
New file
@@ -0,0 +1,5 @@
<template>
   <div class="sisToOPDHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexSendQIS/lexSendQIS.js
New file
@@ -0,0 +1,121 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import { NavigationMixin } from 'lightning/navigation';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import init  from '@salesforce/apex/QISReportController.initForlexSendQISButton';
import sendSPO  from '@salesforce/apex/QISReportController.updateQisForSendQIS';
import UserInfo_Owner from '@salesforce/apex/TaskFeedbackController.UserInfo_Owner';
import { updateRecord } from 'lightning/uiRecordApi';
export default class lexSendQIS extends LightningElement {
    @api recordId;
    str;
    err;
    IsLoading = true;
    qisReportId;
    qisRecordTypeId;
    qisRecordName;
    ProfileName;
    IsSendQIS;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
        if (currentPageReference) {
            const urlValue = currentPageReference.state.recordId;
            if (urlValue) {
                let str = `${urlValue}`;
                this.recordId = str;
            }
        }
    }
    connectedCallback() {
        console.log(this.recordId);
        init({
            recordId: this.recordId
        }).then(result => {
            console.log(result);
                this.IsLoading = false;
                this.qisRecordTypeId = result.qisRecordTypeId;
                this.qisReportId = result.Id;
                this.qisRecordName = result.qisRecordName;
                this.ProfileName = result.profileName;
                this.IsSendQIS = result.isSendQIS;
                if (this.qisRecordName == '2.OCSM') {
                    const evt = new ShowToastEvent({
                            title : '不能提交到SPO',
                            message: '记录类型为'+this.qisRecordName,
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
                }
                if (!(this.ProfileName == '系统管理员' || this.ProfileName == '2F4_技术推进部' || this.ProfileName == '2F1_服务窗口')) {
                    const evt = new ShowToastEvent({
                            title : '没有权限提交,请联系系统管理员',
                            message: '',
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
                }
                if (this.IsSendQIS) {
                    const evt = new ShowToastEvent({
                            title : '已提交到SPO,请不要重复提交',
                            message: '',
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
                }
                this.send2SPO();
        }).catch(error => {
            console.log(error.getMessage());
        }).finally(() => {
        });
    }
    updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
    }
    send2SPO(){
            sendSPO({
                 recordId: this.recordId
                }).then(result =>{
                    console.log('result'+result);
                     this.err = result;
                    if (result!='成功') {
                        const evt = new ShowToastEvent({
                            title : '更新失败',
                            message: this.err,
                            variant: 'error'
                        });
                        this.dispatchEvent(evt);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        return;
                    }else{
                        const evt = new ShowToastEvent({
                            title : '提交成功!请在SPO系统中完成退换货申请',
                            message: '',
                            variant: 'success'
                        });
                        this.dispatchEvent(evt);
                        this.dispatchEvent(new CloseActionScreenEvent());
                        this.updateRecordView(this.recordId);
                        window.location.replace("https://olympus.sharepoint.cn/sites/GSPWF/SitePages/HomePage.aspx");
                    }
                }).catch(error => {
            console.log('error='+error);
        }).finally(() => {
        });
    }
}
force-app/main/default/lwc/lexSendQIS/lexSendQIS.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexSendQIS">
   <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexStockApply/__tests__/lexStockApply.test.js
New file
@@ -0,0 +1,25 @@
import { createElement } from 'lwc';
import LexStockApply from 'c/lexStockApply';
describe('c-lex-stock-apply', () => {
    afterEach(() => {
        // The jsdom instance is shared across test cases in a single file so reset the DOM
        while (document.body.firstChild) {
            document.body.removeChild(document.body.firstChild);
        }
    });
    it('TODO: test case generated by CLI command, please fill in test logic', () => {
        // Arrange
        const element = createElement('c-lex-stock-apply', {
            is: LexStockApply
        });
        // Act
        document.body.appendChild(element);
        // Assert
        // const div = element.shadowRoot.querySelector('div');
        expect(1).toBe(1);
    });
});
force-app/main/default/lwc/lexStockApply/lexStockApply.css
New file
@@ -0,0 +1,10 @@
.lexStockApplyHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/lexStockApply/lexStockApply.html
New file
@@ -0,0 +1,6 @@
<template>
    <div class="lexStockApplyHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
        <lightning-button label="Show Toast" onclick={ShowToastEvent}></lightning-button>
    </div>
</template>
force-app/main/default/lwc/lexStockApply/lexStockApply.js
New file
@@ -0,0 +1,114 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-14 13:04:53
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-14 17:54:56
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import updateForStockApplyButton  from '@salesforce/apex/OpportunityLightingButtonController.updateForStockApplyButton';
import init  from '@salesforce/apex/OpportunityLightingButtonController.initForStockApplyButton';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { loadScript } from "lightning/platformResourceLoader";
import connection from '@salesforce/resourceUrl/connection20';
export default class LexStockApply extends LightningElement {
    @api recordId;
    stockApplyStatus;
    lastOpportunityFileId;
    IsLoading = true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
            console.log(111);
            console.log(currentPageReference);
        if (currentPageReference) {
          const urlValue = currentPageReference.state.recordId;
          if (urlValue) {
            let str = `${urlValue}`;
            console.log("str");
            console.log(str);
            this.recordId = str;
          }
        }
    }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result=>{
            console.log(result);
            this.stockApplyStatus = result.stockApplyStatus;
            this.lastOpportunityFileId = result.lastOpportunityFileId;
            this.stockApply();
        })
    }
    stockApply(){
        var status = this.stockApplyStatus;
        if (status != '草案中' && status != '填写完毕' && status != '不批准' && status != '' && status != undefined) {
            this.showToast("备货申请状态不正确,不能提交备货申请。","error");
            return;
        }
        var oppfile = this.lastOpportunityFileId;
        if (oppfile == undefined || oppfile == '') {
            this.showToast("请上传询价文件。","error");
            return;
        }
        if (!confirm("一旦提交此记录以待批准,根据您的设置您可能不再能够编辑此记录或将他从批准过程中调回。是否继续?")) {
            this.dispatchEvent(new CloseActionScreenEvent);
            return;
        }
        updateForStockApplyButton({
            recordId: this.recordId,
            flag: true
        }).then(result=>{
            if(result){
                this.showToast(result,"error");
                return;
            }
            Promise.all([
               loadScript(this,connection)
            ]).then(() =>{
                var request = new window.sforce.ProcessSubmitRequest();
                request.objectId = this.recordId;
                console.log("s");
                console.log(request);
                console.log("e");
                var processResults = window.sforce.Connection.prototype.process([request]);
                console.log(processResults);
                if (processResults[0].errors != null) {
                    updateForStockApplyButton({
                        recordId: this.recordId,
                        flag: false
                    }).then(result=>{
                        if(result){
                            this.showToast(result,"error");
                            return;
                        }
                        this.IsLoading = false;
                        this.updateRecordView(this.recordId);
                        this.dispatchEvent(new CloseActionScreenEvent);
                    })
                }
            });
        }).catch(error=>{
            console.log(error);
        })
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            title: '',
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
        this.dispatchEvent(new CloseActionScreenEvent);
      }
      updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
      }
}
force-app/main/default/lwc/lexStockApply/lexStockApply.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexSubmit/lexSubmit.css
New file
@@ -0,0 +1,10 @@
.submitHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/lexSubmit/lexSubmit.html
New file
@@ -0,0 +1,7 @@
<template>
    <div class="submitHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
        <lightning-button label="Show Toast" onclick={ShowToastEvent}></lightning-button>
    </div>
</template>
force-app/main/default/lwc/lexSubmit/lexSubmit.js
New file
@@ -0,0 +1,68 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-11 16:46:48
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-11 16:48:05
 */
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import updateForSubmitButton  from '@salesforce/apex/ReportController.updateForSubmitButton';
import { updateRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class LexSubmit extends LightningElement {
    @api recordId;
    IsLoading = true;
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
             console.log(111);
             console.log(currentPageReference);
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             console.log("str");
             console.log(str);
             this.recordId = str;
           }
         }
     }
     connectedCallback(){
        this.submit();
     }
     showToast(msg,type) {
      const event = new ShowToastEvent({
          title: '',
          message: msg,
          variant: type
      });
      this.dispatchEvent(event);
    }
     updateRecordView(recordId) {
        updateRecord({fields: { Id: recordId }});
    }
     submit(){
        updateForSubmitButton({
          recordId: this.recordId
        }).then(result=>{
          if(result){
            this.showToast(result,"error");
          }else{
            this.updateRecordView(this.recordId);
            this.showToast("提交成功","success");
          }
          this.IsLoading = false;
          this.dispatchEvent(new CloseActionScreenEvent());
        });
     }
}
force-app/main/default/lwc/lexSubmit/lexSubmit.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexSubmitApprovalProcess/lexSubmitApprovalProcess.css
New file
@@ -0,0 +1,11 @@
.Holder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display : none !important;
}
force-app/main/default/lwc/lexSubmitApprovalProcess/lexSubmitApprovalProcess.html
New file
@@ -0,0 +1,5 @@
<template>
    <!-- <div class="Holder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div> -->
</template>
force-app/main/default/lwc/lexSubmitApprovalProcess/lexSubmitApprovalProcess.js
New file
@@ -0,0 +1,101 @@
import { LightningElement, track, wire,api } from 'lwc';
import {CurrentPageReference,NavigationMixin} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import LightningConfirm from 'lightning/confirm';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import applyPermission from '@salesforce/apex/TransferApplyController.applyPermission';
import submitApply from '@salesforce/apex/TransferApplyWebService.submitApply';
export default class lexSubmitApprovalProcess extends LightningElement {
    @api recordId;
    transferApplyPermission;
    IsLoading=true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
        console.log(currentPageReference);
        if(currentPageReference) {
            const urlValue = currentPageReference.state.recordId;
            if(urlValue) {
                let str = `${urlValue}`;
                console.log("str");
                console.log(str);
                this.recordId = str;
            }
        }
    }
    connectedCallback() {
        console.log('this.transferApplyId:' + this.recordId);
        applyPermission().then(result => {
            console.log(result);
            this.transferApplyPermission = result;
            this.cancelSubmit();
        }).catch( error =>{
            console.log(error);
        });
    }
    cancelSubmit(){
        if (this.transferApplyPermission == false) {
            this.showToast('','没有提交申请的权限','warning');
        } else{
            LightningConfirm.open({
                message: '一旦提交此记录以待批准,根据您的设置您可能不再能够编辑此记录或将他从批准过程中调回。是否继续?',
                variant: 'headerless',
            }).then(cancel=>{
                if(cancel) {
                    submitApply({taId:this.recordId}).then(submitRes=>{
                        if(submitRes == '1'){
                            this.showToast('','提交成功','success');
                            window.location.href = window.location;
                        }else{
                            this.showToast("",submitRes,"warning");
                        }
                        this.IsLoading=false;
                        this.dispatchEvent(new CloseActionScreenEvent());
                    });
                }
            });
        }
    }
    showToast(_title,_message,_variant) {
        const event = new ShowToastEvent({
            title: _title,
            message:_message,
            variant: _variant,
        });
        this.dispatchEvent(event);
    }
}
//old js
/*
{!REQUIRESCRIPT('/soap/ajax/51.0/connection.js')}
{!REQUIRESCRIPT('/soap/ajax/51.0/apex.js')}
var result = sforce.connection.describeSObject('TransferApply__c');
if (result.createable == 'false') {
    alert('没有提交申请的权限');
}
else{
    if (confirm("一旦提交此记录以待批准,根据您的设置您可能不再能够编辑此记录或将他从批准过程中调回。是否继续?")) {
        var rs = sforce.apex.execute("TransferApplyWebService","submitApply",{taId:'{!TransferApply__c.Id}'});
        if(rs == '1'){
            alert('提交成功');
            window.location.href = window.location;
        }
        else{
            alert(rs);
        }
    }
}
*/
force-app/main/default/lwc/lexSubmitApprovalProcess/lexSubmitApprovalProcess.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexSubmitApprovalProcess">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexSubmitCompetitorReport/lexSubmitCompetitorReport.js
@@ -1,3 +1,11 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-04-07 09:02:03
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-11 11:28:51
 */
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
@@ -35,7 +43,6 @@
            recordId: this.recordId
          }).then(result=>{
            this.submit();
            this.IsLoading = false;
          });
          
    }
@@ -54,8 +61,13 @@
      otherButtonInSubmitCompetitorReport({
        recordId: this.recordId
    }).then(result=>{
      this.showToast("提交对手竞争报告成功","success")
      this.updateRecordView(this.recordId);
      if(result){
        this.showToast(result,"error");
      }else{
        this.showToast("提交对手竞争报告成功","success")
        this.updateRecordView(this.recordId);
      }
      this.IsLoading = false;
      this.dispatchEvent(new CloseActionScreenEvent());
    });
    }
force-app/main/default/lwc/lexSubmitExtensionApprovalProcess/lexSubmitExtensionApprovalProcess.css
New file
@@ -0,0 +1,10 @@
.exampleHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/lexSubmitExtensionApprovalProcess/lexSubmitExtensionApprovalProcess.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="EquipmentRentalPDF" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexSubmitExtensionApprovalProcess/lexSubmitExtensionApprovalProcess.js
New file
@@ -0,0 +1,67 @@
import { LightningElement, track, wire, api } from 'lwc';
import { CurrentPageReference,NavigationMixin } from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import init from '@salesforce/apex/SubmitExtensionApprovalProcessController.init';
export default class lexSubmitExtensionApprovalProcess extends LightningElement {
    @api
    recordId;
    IsLoading = true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        if(currentPageReference) {
            const urlValue = currentPageReference.state.recordId;
            if(urlValue) {
                let str = `${urlValue}`;
                this.recordId = str;
            }
        }
    }
    connectedCallback(){
        init({
            recordId:this.recordId
        }).then(result=>{
            var today = new Date();
            //追加备品申请状态确认,已经提交过的申请,不能重复提交Status__c
            if(result.ExtensionStatus == '填写完毕' || result.ExtensionStatus == '申请中') {
                alert('请确认延期申请状态,已经提交过的申请,不能重复提交');
                return;
            }
            var rs1 = sforce.apex.execute("RentalApplyWebService", "extension_approval_processCheck", {rentalApplyId: this.recordId});
            if(rs1 != '1'){
                if(rs1 == '2'){
                    //返回值为2,判断入口为从单还是主单,如果是从单,那么就需要跳原来的单个延期页面
                    if(result.RootRentalApply == '' || result.RootRentalApply == null){
                        window.open("/apex/RentalApplyMultiPostpone?parentId=" + this.recordId);
                    }else {
                        window.open("/apex/RentalApplyExtensions?parentId=" + this.recordId);
                    }
                }else{
                    alert(rs1);
                    return
                }
            }else{
                if(result.demoPurpose2 == '协议借用'){
                    alert('请在[附件]内上传新的合同附件,并依据合同内期限进行日期填写,之后提交审批');
                    return;
                }
                if(result.AgreementBorrowingExtensionDate =='' || result.AgreementBorrowingExtensionDate == null){
                    alert('协议借用的延期申请的【协议借用延期日期】不能为空');
                    return;
                }
                if(result.AgreementBorrowingExtensionDate <= result.ReturnDadelineFinal){
                    alert('协议借用的延期申请的【协议借用延期日期】必须大于最新预定归还日');
                    return;
                }
                if(result.AgreementBorrowingExtensionDate <= today ){
                    alert('协议借用的延期申请的【协议借用延期日期】必须大于今天');
                    return;
                }
            }
            window.open("/apex/RentalApplyExtensions?parentId=" + this.recordId);
        })
    }
}
force-app/main/default/lwc/lexSubmitExtensionApprovalProcess/lexSubmitExtensionApprovalProcess.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexTenderingAntiLogicButton/lexTenderingAntiLogicButton.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="AntiLogicButton" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexTenderingAntiLogicButton/lexTenderingAntiLogicButton.js
New file
@@ -0,0 +1,52 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import  init  from '@salesforce/apex/TenderingButtonController.initTenderingController';
import  ContraryLogicalDel  from '@salesforce/apex/TenderWebService.ContraryLogicalDel';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class LexTenderingAntiLogicButton extends LightningElement {
    @api recordId;//当前这条数据的id
    id;//返回值的id  Tender_information__c招标项目的id
    IsLoading = true;
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             this.recordId = str;
           }
         }
     }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result => {
                this.IsLoading = false;
                this.id = result.Id;
                this.AntiLogicButton();
                this.dispatchEvent(new CloseActionScreenEvent());
        })
    }
    //招标项目反逻辑删除
    AntiLogicButton(){
        ContraryLogicalDel({DTenId : this.id}).then(result =>{
            if(result == 'OK'){
                this.showToast("反逻辑删除成功","success");
            }
            this.dispatchEvent(new CloseActionScreenEvent());
        })
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
        this.dispatchEvent(new CloseActionScreenEvent());
    }
}
force-app/main/default/lwc/lexTenderingAntiLogicButton/lexTenderingAntiLogicButton.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexTenderingAttachmentButton/lexTenderingAttachmentButton.js
@@ -27,14 +27,10 @@
            this.id = result.Id;
            this.AttachmentButton();
            this.dispatchEvent(new CloseActionScreenEvent());
        }).catch(() => {
        }).finally(() => {
        });
        })
    }
    
    //查看附件
    //招标项目查看附件
    AttachmentButton(){
        window.open(`/apex/TenderInformationUploadPdf?id=${this.id}`);
    }
force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="EnquiryButton" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.js
New file
@@ -0,0 +1,62 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import  init  from '@salesforce/apex/TenderingButtonController.initTenderingController';
import  updateOpportunityInformation  from '@salesforce/apex/UpdateTenderInformationBatch.updateOpportunityInformation';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class lexTenderingEnquiryButton extends LightningElement {
    @api recordId;//当前这条数据的id
    id;//返回值的id  Tender_information__c招标项目的id
    IsLoading = true;
    isRelateProject;//判断是否反应
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             this.recordId = str;
           }
         }
     }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result => {
            if (result != null) {
                this.IsLoading = false;
                this.id = result.Id;
                this.isRelateProject = result.isRelateProject;
                this.EnquiryButton();
                this.dispatchEvent(new CloseActionScreenEvent());
            }
        })
    }
    //招标项目 反应询价状态
    EnquiryButton(){
        if(this.isRelateProject == "否"){
            this.showToast('招投标项目不相关后不能反应询价状态!','error');
            return;
        }
        var listss = [];
        listss.push(this.id);
        updateOpportunityInformation({TenderIdList : listss}).then(result=>{
            if(result != 'OK'){
                this.showToast(result,'error');
            }else {
                this.showToast('反映完了','success');
            }
        })
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
        this.dispatchEvent(new CloseActionScreenEvent());
    }
}
force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexTenderingHospitalButton/lexTenderingHospitalButton.js
@@ -6,6 +6,7 @@
    @api recordId;//当前这条数据的id
    id;//返回值的id  Tender_information__c招标项目的id
    name;//招标项目名
    Environment_Url;//新建医院地址
    IsLoading = true;
    @wire(CurrentPageReference)
@@ -26,6 +27,7 @@
                this.IsLoading = false;
                this.id = result.Id;
                this.name = result.name;
                this.Environment_Url = result.Environment_Url;
                this.HospitalButton();
                this.dispatchEvent(new CloseActionScreenEvent());
        }).catch(() => {
@@ -34,9 +36,9 @@
        });        
    }
    //新建医院
    //招标项目新建医院
    HospitalButton(){
        var url = 'https://ocsm.my.salesforce.com/?ec=302&startURL=%2F'+'001/e?CF00N10000009I0o7='+encodeURIComponent(this.name)
        var url = this.Environment_Url+'001/e?CF00N10000009I0o7='+encodeURIComponent(this.name)
        +'&CF00N10000009I0o7_lkid='+encodeURIComponent(this.id)
        +'&00N10000009HFQT='+encodeURIComponent('招标项目')
        +'&RecordType=01210000000QemG'
force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="IntentionButton" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.js
New file
@@ -0,0 +1,52 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import  init  from '@salesforce/apex/TenderingButtonController.initTenderingController';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class lexTenderingIntentionButton extends LightningElement {
    @api recordId;//当前这条数据的id
    id;//返回值的id  Tender_information__c招标项目的id
    IsLoading = true;
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             this.recordId = str;
           }
         }
     }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result => {
            if (result != null) {
                this.IsLoading = false;
                this.id = result.Id;
                this.IntentionButton();
                this.dispatchEvent(new CloseActionScreenEvent());
            }
        })
    }
    //招标项目新建意向
    IntentionButton(){
            // alert('填写失单报告请直接点击招标页面【失单】按钮');
            this.showToast('填写失单报告请直接点击招标页面【失单】按钮','success');
            var url = '/apex/NewAndEditLead?' + '00N10000009HKS5=' + this.id
            + '&LeadSource=招标网' + '&RecordTypeId=01210000000QiRf' + '&retURL=%2F' + this.id ;
            window.open(url);
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
        this.dispatchEvent(new CloseActionScreenEvent());
    }
}
force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexTenderingLogicButton/lexTenderingLogicButton.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="LogicButton" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexTenderingLogicButton/lexTenderingLogicButton.js
New file
@@ -0,0 +1,39 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import  init  from '@salesforce/apex/TenderingButtonController.initTenderingController';
export default class lexTenderingLogicButton extends LightningElement {
    @api recordId;//当前这条数据的id
    id;//返回值的id  Tender_information__c招标项目的id
    IsLoading = true;
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             this.recordId = str;
           }
         }
     }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result => {
            if (result != null) {
                this.IsLoading = false;
                this.id = result.Id;
                this.LogicButton();
                this.dispatchEvent(new CloseActionScreenEvent());
            }
        })
    }
    //招标项目逻辑删除
    LogicButton(){
        window.open (`/apex/TenderDeletePagelwc?id=${this.id}`, '', 'height=350, width=600, top=200, left=350');
    }
}
force-app/main/default/lwc/lexTenderingLogicButton/lexTenderingLogicButton.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexTenderingLostButton/lexTenderingLostButton.js
@@ -33,12 +33,10 @@
                this.profileId = result.profileId.slice(0,15);
                this.LoseButton();
                this.dispatchEvent(new CloseActionScreenEvent());
        }).catch(() => {
        }).finally(() => {
        });
        })
    }
    //失单
    //招标项目失单
    LoseButton(){
        sqlResult({id: this.id}).then(result=>{
            //简档权限 2S1_销售医院担当 2S4_销售管理者 系统管理员
@@ -68,5 +66,6 @@
            variant: type
        });
        this.dispatchEvent(event);
        this.dispatchEvent(new CloseActionScreenEvent());
    }
}
force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="NoStandardButton" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.js
New file
@@ -0,0 +1,49 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import  init  from '@salesforce/apex/TenderingButtonController.initTenderingController';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class lexTenderingNoStandardButton extends LightningElement {
    @api recordId;//当前这条数据的id
    id;//返回值的id  Tender_information__c招标项目的id
    opportunityNum;
    IsLoading = true;
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             this.recordId = str;
           }
         }
     }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result => {
                this.IsLoading = false;
                this.id = result.Id;
                this.opportunityNum = result.opportunityNum;
                this.NoStandardButton();
                this.dispatchEvent(new CloseActionScreenEvent());
        })
    }
    //招标项目不应标申请
    NoStandardButton(){
        if(Number(this.opportunityNum) > 0) {
            this.showToast('项目已关联过询价,请到询价里做不应标申请','error');
            return;
        }
        window.open ('/apex/Bidding?id='+this.id, '', 'height=350, width=600, top=200, left=350,location=no');
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
        this.dispatchEvent(new CloseActionScreenEvent());
    }
}
force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexTenderingNotarizeButton/lexTenderingNotarizeButton.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="NotarizeButton" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexTenderingNotarizeButton/lexTenderingNotarizeButton.js
New file
@@ -0,0 +1,72 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import  init  from '@salesforce/apex/TenderingButtonController.initTenderingController';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class lexTenderingNotarizeButton extends LightningElement {
    @api recordId;//当前这条数据的id
    id;//返回值的id  Tender_information__c招标项目的id
    status;//状态
    profileId;//profileId id
    IsLoading = true;
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             this.recordId = str;
           }
         }
     }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result => {
                this.IsLoading = false;
                this.id = result.Id;
                this.status = result.status;
                this.profileId = result.profileId.slice(0,15);
                this.NotarizeButton();
                this.dispatchEvent(new CloseActionScreenEvent());
        })
    }
    //招标项目 相关性确认
    NotarizeButton(){
        if( this.ProfileId!= '00e1m000000MSci'
        && this.ProfileId!= '00e10000000Y3o5'
        && this.ProfileId!= '00e10000000xnpR' && this.ProfileId!= '00e10000000xyK6'
        && this.ProfileId!= '00e10000000xnpW'
        && this.ProfileId!= '00e10000000xnpb' && this.ProfileId!= '00e10000000xyKB'
        && this.ProfileId!= '00e10000000a7NY'
        && this.ProfileId!= '00e10000000s2fZ'
        && this.ProfileId!= '00e10000000s3Jp'
        ){
            this.showToast("只有助理才能进行相关性确认!","error");
            return;
        }
        if(this.status== '01.待确认' ||
           this.status== '02.不相关' ||
           this.status == '03.不应标' ||
           this.status== '04.待关联询价'
        ){
            window.open (`/apex/Relevance?id=${this.id}`, '', 'height=500, width=800, top=200, left=250,location=no');
        }
        else{
            this.showToast("关联询价后不能进行相关性确认!","error");
        }
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
        this.dispatchEvent(new CloseActionScreenEvent());
    }
}
force-app/main/default/lwc/lexTenderingNotarizeButton/lexTenderingNotarizeButton.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexTenderingRelevancyButton/lexTenderingRelevancyButton.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="RelevancyButton" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexTenderingRelevancyButton/lexTenderingRelevancyButton.js
New file
@@ -0,0 +1,60 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import  init  from '@salesforce/apex/TenderingButtonController.initTenderingController';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class LexTenderingRelevancyButton extends LightningElement {
    @api recordId;//当前这条数据的id
    id;//返回值的id  Tender_information__c招标项目的id
    ProfileId;
    IsLoading = true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
        if (currentPageReference) {
          const urlValue = currentPageReference.state.recordId;
          if (urlValue) {
            let str = `${urlValue}`;
            this.recordId = str;
          }
        }
    }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result => {
                this.IsLoading = false;
                this.id = result.Id;
                this.ProfileId = result.profileId.slice(0,15);
                this.RelevancyButton();
                this.dispatchEvent(new CloseActionScreenEvent());
        })
    }
    //招标项目 关联已有询价
    RelevancyButton(){
        if( this.ProfileId != '00e1m000000MSci'
        && this.ProfileId != '00e10000000Y3o5'
        && this.ProfileId != '00e10000000xnp2' && this.ProfileId != '00e10000000xzQ0'
        && this.ProfileId != '00e10000000xnp7'&& this.ProfileId != '00e10000001220i'
        && this.ProfileId != '00e10000000xnpH' && this.ProfileId != '00e10000000xzQA'
        && this.ProfileId != '00e10000000hkas'
        && this.ProfileId != '00e10000000xnpR' && this.ProfileId != '00e10000000xyK6'
        && this.ProfileId != '00e10000000xnpW'
        && this.ProfileId != '00e10000000Nb7i'
        ){
        this.showToast('只有担当和助理才能关联询价','error');
        return;
        }
        window.open ('/apex/Enquiry?id='+this.recordId, '_blank');
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
        this.dispatchEvent(new CloseActionScreenEvent());
    }
}
force-app/main/default/lwc/lexTenderingRelevancyButton/lexTenderingRelevancyButton.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexTenderingUsedAttachmentButton/lexTenderingUsedAttachmentButton.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="NotarizeButton" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexTenderingUsedAttachmentButton/lexTenderingUsedAttachmentButton.js
New file
@@ -0,0 +1,46 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import  init  from '@salesforce/apex/TenderingButtonController.initTenderingController';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
export default class lexTenderingUsedAttachmentButton extends LightningElement {
    @api recordId;//当前这条数据的id
    id;//返回值的id  Tender_information__c招标项目的id
    IsLoading = true;
    @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             this.recordId = str;
           }
         }
     }
    connectedCallback(){
        init({
            recordId: this.recordId
        }).then(result => {
            this.IsLoading = false;
            this.id = result.Id;
            this.AttachmentButton();
            this.dispatchEvent(new CloseActionScreenEvent());
        })
    }
    //招标项目 查看附件(旧)
    AttachmentButton(){
        window.open(`/apex/QLMAttachmentPreview?parentId=${this.id}`);
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            message: msg,
            variant: type
        });
        this.dispatchEvent(event);
        this.dispatchEvent(new CloseActionScreenEvent());
    }
}
force-app/main/default/lwc/lexTenderingUsedAttachmentButton/lexTenderingUsedAttachmentButton.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexTopInQueue/lexTopInQueue.css
New file
@@ -0,0 +1,22 @@
.outerBorderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    border-top : 3px solid #565959;
}
.borderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    margin-bottom : 7px;
    border-top : 3px solid #565959;
}
.headerDorderCss{
    border-top: 1px solid #565959;
    border-bottom: 1px solid #D4D4D4;
    padding:3px;
}
.centerCss{
    text-align: center;
}
.centerCss .left{
    margin-left: 100px;
}/* sample css file */
force-app/main/default/lwc/lexTopInQueue/lexTopInQueue.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="sisToOPDHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexTopInQueue/lexTopInQueue.js
New file
@@ -0,0 +1,49 @@
import { LightningElement, track, wire, api } from 'lwc';
import { CurrentPageReference,NavigationMixin } from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import { encodeDefaultFieldValues } from 'lightning/pageReferenceUtils';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import queueTop from '@salesforce/apex/ApplyJsCtl.queueTop';
export default class lexTopInQueue extends LightningElement {
    @api recordId;
    IsLoading = true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        if(currentPageReference) {
            const urlValue = currentPageReference.state.recordId;
            if(urlValue) {
                let str = `${urlValue}`;
                this.recordId = str;
            }
        }
    }
    connectedCallback(){
        queueTop({
            applyId: this.recordId
        }).then(res=>{
            if(res == 'Success'){
                const evt = new ShowToastEvent({
                        title : '置顶成功',
                        message: '',
                        variant: 'success'
                    });
                this.dispatchEvent(evt);
                this.dispatchEvent(new CloseActionScreenEvent());
            }else{
                const evterr = new ShowToastEvent({
                        title : res,
                        message: '',
                        variant: 'error'
                    });
                this.dispatchEvent(evterr);
                this.dispatchEvent(new CloseActionScreenEvent());
            }
        }).catch(err=>{
            this.dispatchEvent(new CloseActionScreenEvent());
        })
    }
}
force-app/main/default/lwc/lexTopInQueue/lexTopInQueue.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexOCMSubmit">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexTransferApplyPDF/lexTransferApplyPDF.css
New file
@@ -0,0 +1,11 @@
.Holder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display : none !important;
}
force-app/main/default/lwc/lexTransferApplyPDF/lexTransferApplyPDF.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="Holder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexTransferApplyPDF/lexTransferApplyPDF.js
New file
@@ -0,0 +1,92 @@
import { LightningElement, track, wire,api } from 'lwc';
import {CurrentPageReference,NavigationMixin} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import transferApplyPDF from '@salesforce/apex/TransferApplyController.transferApplyPDF';
export default class lexTransferApplyPDF extends LightningElement {
    @api recordId;
    transferApplyPDFRes;
    IsLoading=true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
        console.log(currentPageReference);
        if(currentPageReference) {
            const urlValue = currentPageReference.state.recordId;
            if(urlValue) {
                let str = `${urlValue}`;
                console.log("str");
                console.log(str);
                this.recordId = str;
            }
        }
    }
    connectedCallback() {
        console.log('this.transferApplyId:' + this.recordId);
        transferApplyPDF({
            transferApplyId : this.recordId
        }).then(result => {
            console.log(result);
            this.transferApplyPDFRes = result;
            this.cancelSubmit().then(res=>{
                this.IsLoading=false;
                this.dispatchEvent(new CloseActionScreenEvent());
            });
        }).catch( error =>{
            console.log(error);
        });
    }
    async cancelSubmit(){
        let records = new Array();
        records = this.transferApplyPDFRes;
        var size =records.length;
        if(size>0){
            var length = size%10 ==0? size/10 : parseInt(size/10) +1;
            for(var i =0;i<length;i++){
                window.open('/apex/TransferApplyPDF?raid='+this.recordId+'&page=' + i);
            }
        }else{
            this.showToast('','当前的申请单中没有已批准备品。','warning');
        }
    }
    showToast(_title,_message,_variant) {
        const event = new ShowToastEvent({
            title: _title,
            message:_message,
            variant: _variant,
        });
        this.dispatchEvent(event);
    }
}
//old js'
/*
{!RequireScript("/soap/ajax/51.0/connection.js")}
{!RequireScript("/soap/ajax/51.0/apex.js")}
var foo = function() {
    var sql = "select Id from TransferApplySummary__c where TransferApply__c = '{!TransferApply__c.Id}' and ApprovalDetails__c > 0 and TAS_Status__c != '取消'";
    //Yi_StockDown__c->ApprovalDetails__c 20210805 ljh SFDC-C56D3K 已下架->已批准
    var sqlResult = sforce.connection.query(sql);
    var records = sqlResult.getArray("records");
    var size =records.length;
    if(size>0){
        var length = size%10 ==0? size/10 : parseInt(size/10) +1;
        for(var i =0;i<length;i++){
        window.open('/apex/TransferApplyPDF?raid={!TransferApply__c.Id}&page=' + i);
        }
    }else{
        alert('当前的申请单中没有已批准备品。');
    }
}
foo();
*/
force-app/main/default/lwc/lexTransferApplyPDF/lexTransferApplyPDF.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexTransferApplyPDF">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/lexVOCAnswer/lexVOCAnswer.js
@@ -1,3 +1,11 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-03-27 14:05:59
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-11 11:30:45
 */
import { LightningElement, wire, track, api } from "lwc";
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from "lightning/actions";
@@ -35,7 +43,6 @@
      .then((result) => {
        console.log(result);
        if (result != null) {
          this.Isloading = false;
          this.status = result.status;
          this.update();
        }
@@ -43,8 +50,7 @@
      .catch((error) => {
        console.log("error");
        console.log(error);
      })
      .finally(() => {});
      });
    //window.location.replace("https://ocsm--partial.sandbox.lightning.force.com/lightning/r/Report__c/" + this.recordId + "/view");
  }
@@ -69,13 +75,13 @@
    updateForVOCAnswerButton({
      recordId: this.recordId
    }).then(result => {
      if (result == null) {
        this.showToast("成功", "success");
      } else {
        console.log(result);
      if (result) {
        this.showToast(result,"error");
      } else {
        this.showToast("成功", "success");
        this.updateRecordView(this.recordId);
      }
      this.updateRecordView(this.recordId);
      this.Isloading = false;
      this.dispatchEvent(new CloseActionScreenEvent());
    }).catch(error=>{
      console.log(error);
force-app/main/default/lwc/lexVOCCheck/lexVOCCheck.js
@@ -40,7 +40,7 @@
        }).then(result => {
            console.log(result);
            if (result != null) {  
                this.Isloading = false;
                this.status = result.status;
                this.isVOC = result.isVOC;
                this.personId = result.personId;
@@ -52,8 +52,6 @@
        }).catch(error => {
            console.log("error");
            console.log(error);
        }).finally(() => {
        });
    }
@@ -79,13 +77,11 @@
                return;
            }
            if (this.status != "跟进中") {
                alert("不是跟进中不能点击");
                this.showToast("不是跟进中不能点击","error");
                this.dispatchEvent(new CloseActionScreenEvent());
                return;
            }
            if (this.isVOC == undefined) {
                alert("必须选择是否VOC");
                this.showToast("必须选择是否VOC","error");
                this.dispatchEvent(new CloseActionScreenEvent());
                return;
@@ -97,12 +93,13 @@
                    personId:this.personId
                }
            ).then(result =>{
                if(result == null){
                if(result){
                    this.showToast(result,"error");
                }else{
                    this.showToast("成功","success");
                    this.updateRecordView(this.recordId);
                }else {
                    this.showToast(result,"error");
                }
                this.Isloading = false;
                this.dispatchEvent(new CloseActionScreenEvent());
            });
force-app/main/default/lwc/lexVOCConfirm/lexVOCConfirm.js
@@ -1,3 +1,11 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-03-27 14:08:56
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-11 11:33:01
 */
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
@@ -37,7 +45,6 @@
        }).then(result => {
            console.log(result);
            if (result != null) {
                this.Isloading = false;
                this.status = result.status;
                this.VOCSatisfy = result.Satisfy;
                this.VOCSatisfy1 = result.Satisfy1;
@@ -49,11 +56,8 @@
        }).catch(error => {
            console.log("error");
            console.log(error);
        }).finally(() => {
        });
        //window.location.replace("https://ocsm--partial.sandbox.lightning.force.com/lightning/r/Report__c/" + this.recordId + "/view");
        this.updateRecordView(this.recordId);
    }
    updateRecordView(recordId) {
@@ -86,8 +90,13 @@
            Satisfy: this.VOCSatisfy,
            Satisfy1: this.VOCSatisfy1    
        }).then(result=>{
            this.updateRecordView(this.recordId);
            this.showToast("成功","success");
            if(result){
                this.showToast(result,"error");
            }else{
                this.updateRecordView(this.recordId);
                this.showToast("成功","success");
            }
            this.Isloading = false;
            this.dispatchEvent(new CloseActionScreenEvent());
        });
force-app/main/default/lwc/lexVOCFinish/lexVOCFinish.js
@@ -1,3 +1,11 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-03-27 14:11:17
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-11 11:34:01
 */
import { api, wire,LightningElement } from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
@@ -35,7 +43,6 @@
        }).then(result => {
            console.log(result);
            if (result != null) {
                this.IsLoading = false;
                this.status = result.status;
                this.profileId = result.profileId;
                this.VOCFinish();
@@ -43,8 +50,6 @@
        }).catch(error => {
            console.log("error");
            console.log(error);
        }).finally(() => {
        });
        //window.location.replace("https://ocsm--partial.sandbox.lightning.force.com/lightning/r/Report__c/" + this.recordId + "/view");
        //this.updateRecordView(this.recordId);
@@ -78,8 +83,13 @@
            update({
                recordId: this.recordId
            }).then(result =>{
                this.showToast("成功","success");
                this.updateRecordView(this.recordId);
                if(result){
                    this.showToast(result,"error");
                }else{
                    this.showToast("成功","success");
                    this.updateRecordView(this.recordId);
                }
                this.IsLoading = false;
                this.dispatchEvent(new CloseActionScreenEvent());
            });
    }
force-app/main/default/lwc/lexVOCSubmit/lexVOCSubmit.js
@@ -1,3 +1,11 @@
/*
 * @Description:
 * @version:
 * @Author: chen jing wu
 * @Date: 2023-03-27 13:39:23
 * @LastEditors: chen jing wu
 * @LastEditTime: 2023-04-11 11:35:31
 */
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
@@ -38,14 +46,11 @@
                this.status = result.status;
                this.createdById = result.createdById;
                this.Submit();
                this.IsLoading = false;
                //window.location.replace("https://ocsm--partial.sandbox.lightning.force.com/lightning/r/Report__c/" + this.recordId + "/view");
            }
        }).catch(error => {
            console.log("error");
            console.log(error);
        }).finally(() => {
        });   
        //this.updateRecordView(this.recordId);
    }
@@ -73,8 +78,13 @@
                recordId: this.recordId,
                createdById: this.createdById
            }).then(result =>{
                this.showToast("成功","success");
                this.updateRecordView(this.recordId);
                if(result){
                    this.showToast(result,"error");
                }else{
                    this.showToast("成功","success");
                    this.updateRecordView(this.recordId);
                }
                this.IsLoading = false;
                this.dispatchEvent(new CloseActionScreenEvent());
            });
    }
force-app/main/default/lwc/lexcopyQIS/lexcopyQIS.css
New file
@@ -0,0 +1,22 @@
.outerBorderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    border-top : 3px solid #565959;
}
.borderCss{
    border: 1px solid #D4D4D4;
    border-radius : 5px;
    margin-bottom : 7px;
    border-top : 3px solid #565959;
}
.headerDorderCss{
    border-top: 1px solid #565959;
    border-bottom: 1px solid #D4D4D4;
    padding:3px;
}
.centerCss{
    text-align: center;
}
.centerCss .left{
    margin-left: 100px;
}/* sample css file *//* sample css file */
force-app/main/default/lwc/lexcopyQIS/lexcopyQIS.html
New file
@@ -0,0 +1,5 @@
<template>
   <div class="sisToOPDHolder" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexcopyQIS/lexcopyQIS.js
New file
@@ -0,0 +1,61 @@
import { LightningElement,wire,track,api} from 'lwc';
import { CurrentPageReference } from "lightning/navigation";
import { CloseActionScreenEvent } from 'lightning/actions';
import { NavigationMixin } from 'lightning/navigation';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { updateRecord } from 'lightning/uiRecordApi';
import init  from '@salesforce/apex/QISReportController.initForlexcopyQISButton';
export default class lexcopyQIS extends LightningElement {
    @api recordId;
    err;
    IsLoading = true;
    qisReportId;
    qisStatus;
    name;
     @wire(CurrentPageReference)
     getStateParameters(currentPageReference) {
             console.log(111);
             console.log(currentPageReference);
         if (currentPageReference) {
           const urlValue = currentPageReference.state.recordId;
           if (urlValue) {
             let str = `${urlValue}`;
             console.log("str");
             console.log(str);
             this.recordId = str;
           }
         }
     }
     connectedCallback () {
        init({
            recordId: this.recordId
        }).then(result => {
            this.IsLoading = false;
            this.qisReportId = result.Id;
            this.qisStatus = result.qIStatus;
            this.name = result.name;
            if (this.qisStatus != '取消') {
                const evt = new ShowToastEvent({
                        title : '状态为取消的QIS才可以被复制并新建',
                        message: '',
                        variant: 'error'
                    });
                    this.dispatchEvent(evt);
                    this.dispatchEvent(new CloseActionScreenEvent());
                    return;
            }
               var url = "/"+this.qisReportId+"/e?newclone=1&retURL=%2F"+this.qisReportId+" &CF00N100000073PA0="+this.name+"&CF00N100000073PA0_lkid="+this.qisReportId;
               window.open(url);
               this.dispatchEvent(new CloseActionScreenEvent());
        }).catch(error => {
            console.log('error='+error);
        }).finally(() => {
        });
    }
}
force-app/main/default/lwc/lexcopyQIS/lexcopyQIS.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="lexcopyQIS">
   <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/rentalApplyEquipmentRentalPDF/rentalApplyEquipmentRentalPDF.css
New file
@@ -0,0 +1,10 @@
.exampleHolder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display: none !important;
}
force-app/main/default/lwc/rentalApplyEquipmentRentalPDF/rentalApplyEquipmentRentalPDF.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="EquipmentRentalPDF" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/rentalApplyEquipmentRentalPDF/rentalApplyEquipmentRentalPDF.js
New file
@@ -0,0 +1,44 @@
import { LightningElement, track, wire, api } from 'lwc';
import {CurrentPageReference,NavigationMixin} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import init from '@salesforce/apex/rentalApplyEquipmentRentalPDFController.initJumptoPDFButton';
export default class rentalApplyEquipmentRentalPDF extends LightningElement {
    @api recordId;
    IsLoading = true;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference) {
        console.log(currentPageReference);
        if(currentPageReference) {
            const urlValue = currentPageReference.state.recordId;
            if(urlValue) {
                let str = `${urlValue}`;
                console.log("str");
                console.log(str);
                this.recordId = str;
            }
        }
    }
    connectedCallback() {
        console.log('this.recordId' + this.recordId);
        init({
            recordId : this.recordId
        }).then(result => {
            if(result != null) {
                this.IsLoading = false;
                let num = result.pageLength;
                console.log("======"+this.recordId + '   ' +num);
                console.log("https://ocsm--partial.sandbox.lightning.force.com/lightning/r/FixtureRentalPDF?raid=" + this.recordId + "&page=" + num)
                window.location.replace("https://ocsm--partial.sandbox.lightning.force.com/apex/FixtureRentalPDF?raid=" + this.recordId + "&page=" + num);
            }
        })
        .catch( error =>{
            console.log(error);
        })
    }
}
force-app/main/default/lwc/rentalApplyEquipmentRentalPDF/rentalApplyEquipmentRentalPDF.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/lwc/rentalApplyLWT/rentalApplyLWT.css
New file
@@ -0,0 +1,11 @@
.Holder{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display : none !important;
}
force-app/main/default/lwc/rentalApplyLWT/rentalApplyLWT.html
New file
@@ -0,0 +1,5 @@
<template>
      <div class="Holder" if:true={IsLoading}>
              <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
      </div>
</template>
force-app/main/default/lwc/rentalApplyLWT/rentalApplyLWT.js
New file
@@ -0,0 +1,659 @@
import { LightningElement,api, track, wire } from 'lwc';
import getUserId from '@salesforce/apex/RentalApplyControllerLWT.getUserId';
import getProfileId from '@salesforce/apex/RentalApplyControllerLWT.getProfileId';
import init from '@salesforce/apex/RentalApplyControllerLWT.initFromCancelSubmitButton';
import selectRentalApplyEquipmentSetDetailByRacId from '@salesforce/apex/RentalApplyControllerLWT.selectRentalApplyEquipmentSetDetailByRacId';
import selectQISReportById from '@salesforce/apex/RentalApplyControllerLWT.selectQISReportById';
import selectRepairById from '@salesforce/apex/RentalApplyControllerLWT.selectRepairById';
import selectCampaignById from '@salesforce/apex/RentalApplyControllerLWT.selectCampaignById';
import selectRentalApplyEquipmentSetByRacId from '@salesforce/apex/RentalApplyControllerLWT.selectRentalApplyEquipmentSetByRacId';
import selectRentalApplyById from '@salesforce/apex/RentalApplyControllerLWT.selectRentalApplyById';
import selectUserById from '@salesforce/apex/RentalApplyControllerLWT.selectUserById';
import selectQISreportById2 from '@salesforce/apex/RentalApplyControllerLWT.selectQISreportById2';
import setSObjectShare from '@salesforce/apex/RentalApplyControllerLWT.setSObjectShare';
import updateRentalApplyC from '@salesforce/apex/RentalApplyControllerLWT.updateRentalApplyC';
import {CurrentPageReference} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import STATUS_PROCESS_STATE from '@salesforce/label/c.StatusProcessState';
export default class rentalApplyLWT extends LightningElement {
    contactFirstName = 'Yan';
    contactLastName = 'Khang';
    opportunityName = 'Possible deal';
    clickedButtonLabel;
    @api recordId;
    @track StatusProcessState=STATUS_PROCESS_STATE;
    Rental_Apply__c;
    Status__c;
    Id;
    Yi_loaner_arranged__c;
    RA_Status__c;
    IsLoading=true;
    demo_purpose2__c;
    Follow_UP_Opp__c;
    Statu_Achievements__c;
    Statu_Achievements_ID__c;
    Request_shipping_day__c;
    Demo_purpose1__c;
    Repair__c;
    RecordTypeId;
    SupplementCreated__c;
    OPDPlan__c;
    Campaign__c;
    QIS_number__c;
    RepairId__c;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        console.log("进入页面");
        console.log(currentPageReference);
        if(currentPageReference){
            const urvalue=currentPageReference.state.recordId;
            if(urvalue){
                let str=`${urvalue}`;
                console.log('str');
                console.log(str);
                this.recordId=str;
            }
        }
    }
    async connectedCallback(){
        console.log(this.recordId);
        await init({recordId:this.recordId}).then(result=>{
            console.log(result);
            if(result!=null){
                this.Rental_Apply__c=result;
                this.Status__c=result.Status__c;
                this.Yi_loaner_arranged__c=result.Yi_loaner_arranged__c;
                this.Id=result.Id;
                this.RA_Status__c=result.RA_Status__c;
                // this.Rental_Apply__c.demo_purpose2__c=result.DemoPurpose2C;
                // this..Follow_UP_Opp__c=result.FollowUPOppC;
                // this.Rental_Apply__c.Statu_Achievements__c=result.StatuAchievementsC;
                // this.Rental_Apply__c.Statu_Achievements_ID__c=result.StatuAchievementsIDC;
                // this.Rental_Apply__c.Request_shipping_day__c=result.RequestShippingDayC;
                // this.Rental_Apply__c.Demo_purpose1__c=result.DemoPurpose1C;
                // this.Rental_Apply__c.Repair__c=result.RepairC;
                // this.Rental_Apply__c.RecordTypeId=result.RecordTypeId;
                // this.Rental_Apply__c.SupplementCreated__c=result.SupplementCreatedC;
                // this.Rental_Apply__c.OPDPlan__c=result.OPDPlanC;
                // this.Rental_Apply__c.Campaign__c=result.CampaignC;
                // this.Rental_Apply__c.QIS_number__c=result.QISNumberC;
                this.sumit().then(res=>{
                    console.log("关闭窗口");
                    this.IsLoading=false;
                    this.dispatchEvent(new CloseActionScreenEvent());
                }).catch(err=>{
                    console.log("error:");
                    console.log(err.message);
                    alert("操作失败,错误信息:"+err.message);
                });
                console.log("end");
            }
        }).catch(err=>{
            console.log("error:");
            console.log(err.message);
            console.log("报错结束");
        }).finally(()=>{
            console.log("finally");
        });
    }
    handleClick(event) {
        this.clickedButtonLabel = event.target.label;
    }
    handleContactFirstNameInputChange(event) {
        this.contactFirstName = event.target.value;
    }
    cancelSubmit(){
        console.log('djwaijd');
        if (this.Rental_Apply__c.Status__c == "取消") {
            alert("已经取消!");
            console.log('1');
            return;
        }
        if (this.Rental_Apply__c.Status__c == "删除") {
            alert("已经删除!");
            console.log('2');
            return;
        }
        if(this.RA_Status__c == "已出库" || this.Yi_loaner_arranged__c > 0) {
            alert("备品已经出库,不能取消!");
            console.log('2');
            return;
        }
        let raid = this.Id;
        window.open("/apex/RentalApplyCancel?objId="+raid, 'RentalApplyCancel', 'width=500,height=250');
    }
    async sumit(){
        let buttons = document.getElementsByName('submit_approval_process'.toLowerCase());
        for (let i=0; i<buttons.length; i++) {
            buttons[i].className = "btnDisabled";
            buttons[i].disabled = true;
        }
        //kk
        if (!confirm("一旦提交此记录以待批准,根据您的设置您可能不再能够编辑此记录或将他从批准过程中调回。是否继续?")) {
            return;
        }
        //1540 you 试用(无询价)目的的备品申请单,不能关联询价信息!
        if(this.Rental_Apply__c.demo_purpose2__c == '试用(无询价)' && this.Rental_Apply__c.Follow_UP_Opp__c !=null && this.Rental_Apply__c.Follow_UP_Opp__c != ''){
            alert('试用(无询价)目的的备品申请单,不能关联询价信息!');
            return;
        }
        // 已购待货的申请单审批时,需要check注残的状态
        if (this.Rental_Apply__c.Statu_Achievements__c!=null&&this.Rental_Apply__c.Statu_Achievements__c!='') {
            let SaID=this.Rental_Apply__c.Statu_Achievements_ID__c;
            let rtn = sforce.apex.execute("RentalApplyWebService","RentalApplyCheckForSAoneEle",{SaID:SaID});
            if(rtn!='Fin'){
                alert(rtn);
                return;
            }
        }
        // 希望到货日不能早于申请提交日-0418追加
        let d=new Date();
        if (this.Rental_Apply__c.Request_shipping_day__c < d ) {
            alert('希望到货日不能早于申请提交日');
            return;
        }
        let raesdList = new Array();
        await selectRentalApplyEquipmentSetDetailByRacId({recordId:this.recordId}).then(result=>{
            console.log(result);
            if(result!=null){
                raesdList=result;
                let modelSet = new Set();
                let stoppedSet = new Set();
                for(let i=0;i<raesdList.length;i++){
                    modelSet.add(raesdList[i].Fixture_Model_No_F__c);
                    if('false' == raesdList[i].Product_Status_Flag_F__c
                    && (this.Rental_Apply__c.demo_purpose2__c == '试用(有询价)' || this.Rental_Apply__c.demo_purpose2__c == '试用(无询价)')){
                        stoppedSet.add(raesdList[i].Fixture_Model_No_F__c);
                    }
                }
                if(stoppedSet.size> 0) {
                    alert( Array.from(stoppedSet).join(',') + ' 产品注册证状态为停止,不可申请');
                    return;
                }
            }
        }).catch(err=>{
            console.log("selectRentalApplyEquipmentSetDetailByRacId error:");
            console.log(err.message);
            console.log("报错结束");
        }).finally(()=>{
        });
        if(this.Rental_Apply__c.demo_purpose2__c == '索赔QIS'){
            let DeliveryGood = new Array();
            await selectQISReportById({recordId:this.Rental_Apply__c.QIS_number__c}).then(result=>{
                console.log(result);
                DeliveryGood=result;
            }).catch(err=>{
                console.log("selectQISReportById error:");
                console.log(err.message);
            }).finally(()=>{
            });
            console.log(DeliveryGood);
            let records= DeliveryGood;
            if(records.length == 0 || !modelSet.has(records[0].nonyushohin__r.Product2.Fixture_Model_No_T__c)){
                alert('申请的型号必须与QIS申请型号一致');
                return;
            }
        }
        if(this.Rental_Apply__c.Repair__c==null){
            console.log("Repair__c为空")
        }else{
            if( this.Rental_Apply__c.Repair__c != ''){
                console.log("hhh7.1.1");
                let DeliveryGood ;
                let records;
                await selectRepairById({recordId:this.Rental_Apply__c.Repair__c}).then(result=>{
                    console.log(result);
                    DeliveryGood=result;
                    records=result;
                }).catch(err=>{
                    console.log("selectRepairById error:");
                    console.log(err.message);
                }).finally(()=>{
                });
                if(records==null||records.length==0){
                    console.log("records为空");
                }else{
                    if(this.Rental_Apply__c.Demo_purpose1__c == '维修代用' && this.Rental_Apply__c.demo_purpose2__c != '索赔QIS') {
                        if(!modelSet.has(records[0].Delivered_Product__r.Product2.Fixture_Model_No_T__c)){
                            alert('申请的型号必须与送修的型号一致');
                            return;
                        }
                    }
                    if(this.Rental_Apply__c.Demo_purpose1__c==null){
                        console.log("Demo_purpose1__c为空");
                    }else if(this.Rental_Apply__c.Demo_purpose1__c == '维修代用' && this.Rental_Apply__c.demo_purpose2__c == '一般用户' ){
                        if (records[0].Repair_Estimated_date_formula__c == null) {
                            alert('一般维修无报价日,不可借用备品');
                            return;
                        }
                        else if (records[0].Repair_Estimated_date_formula__c < '2019-07-01' && records[0].Agreed_Date__c == null) {
                            alert('报价日在2019/7/1之前且户同意日为空,不可借用备品');
                            return;
                        }
                        //20210608 ljh SFDC-C3CCN4 start
                        if(records[0].Repair_Rank__c == '' || records[0].Repair_Rank__c == null){
                            alert('报价等级为空不能申请备品');
                            return;
                        }else{
                            if(records[0].DW_Sign_Txt__c == 'false' && records[0].Repair_Rank__c == 'DW'){
                                alert('DW报价等级下此型号不符合备品申请借用条件');
                                return;
                            }
                            if(records[0].Repair_Rank__c == 'D1'
                                ||records[0].Repair_Rank__c == 'D2'
                                ||records[0].Repair_Rank__c == 'D3'
                                ||records[0].Repair_Rank__c == 'E2'){
                                alert('报价等级不符合备品申请借用条件');
                                return;
                            }
                        }
                    //20210608 ljh SFDC-C3CCN4 end
                    }
                    if(this.Rental_Apply__c.Demo_purpose1__c ==null){
                        console.log("Demo_purpose1__c为空");
                    }else if(this.Rental_Apply__c.Demo_purpose1__c == '维修代用' && this.Rental_Apply__c.demo_purpose2__c == '市场多年保修' ){
                        if (records[0].FSE_ApplyForRepair_Day__c == null) {
                            alert('市场多年保修,没有[FSE修理申请日],不可借用备品');
                            return;
                        }
                    }
                    if(this.Rental_Apply__c.Demo_purpose1__c == '维修代用' && this.Rental_Apply__c.demo_purpose2__c == '故障排查' ){
                        if (records[0].FSE_ApplyForRepair_Day__c == null) {
                            alert('故障排查,没有[FSE修理申请日],不可借用备品');
                            return;
                        }
                        if(records[0].Repair_Ordered_Date__c != null) {
                            alert('故障排查,[4.修理品RC受理日]必须为空');
                            return;
                        }
                        if(records[0].IfCheckFixture__c == 'false'){
                            alert('不满足故障排查目的');
                            return;
                        }
                    }
                    let profileId="";
                    await getProfileId().then(result=>{
                        console.log(result);
                        profileId=result;
                    }).catch(err=>{
                        console.log("getProfileId error:");
                        console.log(err.message);
                    }).finally(()=>{
                    });
                    if(this.Rental_Apply__c.RecordTypeId==null){
                        console.log("RecordTypeId为空");
                    }else if (this.Rental_Apply__c.RecordTypeId != "01210000000RHIn"
                        && profileId != '00e10000000Y3o5'
                        && records[0].NewProductGuaranteeObject__c == '8: 市场多年保修'
                        && this.Rental_Apply__c.demo_purpose2__c != '市场多年保修') {
                        alert('无偿区别标志为8: 市场多年保修,必须选择市场多年保修。');
                    }
                    if(records[0].Repair_Final_Inspection_Date__c != null){
                        alert('存在修理最终检测日,不可借用备品');
                        return;
                    }
                    if(records[0].Repair_Shipped_Date__c != null){
                        alert('存在RC修理返送日,不可借用备品');
                        return;
                    }
                    if(records[0].Status1__c =='0.删除' ||records[0].Status1__c =='0.取消' ||records[0].Status1__c =='5.完毕' ){
                        alert('修理已经结束,不能申请备品');
                        return;
                    }
                    if ( this.Rental_Apply__c.demo_purpose2__c == '再修理' && records[0].ReRepairObject_F__c == 'false') {
                        alert('不属于再受理参考对象,不可借用备品');
                        return;
                    }
                    if (this.Rental_Apply__c.RecordTypeId != '01210000000RHIn'
                        && this.Rental_Apply__c.demo_purpose2__c != '保修用户'
                        && this.Rental_Apply__c.demo_purpose2__c != '市场多年保修'
                        && records[0].Number_of_EffectiveContract__c == '有' ) {
                        alert('有维修合同,必须选择保修用户.');
                        return;
                    }
                    let AssetModelNo = records[0].Delivered_Product__r.Product2.Asset_Model_No__c;
                    if (this.Rental_Apply__c.RecordTypeId != '01210000000RHIn' && records[0].Number_of_EffectiveContract__c == '无'
                        && (records[0].NewProductGuaranteeObject__c == '2: 服务多年保修'
                        && (AssetModelNo == 'LTF-190-10-3D' || AssetModelNo == 'LTF-S190-5' || AssetModelNo == 'CYF-VHA' || AssetModelNo == 'CYF-VA2' || AssetModelNo == 'CYF-5A'|| AssetModelNo == 'LTF-S190-10'|| AssetModelNo == 'OER-AW'|| AssetModelNo == 'URF-V'|| AssetModelNo == 'URF-V2'|| AssetModelNo == 'URF-P6'))
                        && this.Rental_Apply__c.demo_purpose2__c != '保修用户' ) {
                        alert('此设备型号多年保修,请选择保修用户.');
                        return;
                    }
                    if (this.Rental_Apply__c.RecordTypeId != '01210000000RHIn'
                        && records[0].NewProductGuaranteeObject__c == '2: 服务多年保修'
                        && (AssetModelNo == 'CV-V1' || AssetModelNo == 'CV-V1(A)' || AssetModelNo == 'CV-V1(B)' || AssetModelNo == 'GIF-LV1' || AssetModelNo == 'CF-LV1L' || AssetModelNo == 'CF-LV1I' || AssetModelNo == 'MAJ-1910')
                        && (this.Rental_Apply__c.demo_purpose2__c == '一般用户' || this.Rental_Apply__c.demo_purpose2__c == '再修理')
                        ) {
                            alert('奥辉设备,保修期内不提供备品.');
                            return;
                    }
                }
            }
        }
        if(this.Rental_Apply__c.SupplementCreated__c==null){
            console.log("SupplementCreated__c为空");
        }else if (this.Rental_Apply__c.SupplementCreated__c == '1' && this.Rental_Apply__c.OPDPlan__c != '') {
            let raId = this.Id;
            //kk
            let raesCountCheck = sforce.apex.execute("OpdPlanWebService", "raesCountCheck", {rentalApplyId: raId});
            if(raesCountCheck != 'OK'){
                alert(raesCountCheck);
                return;
            }
        }
        console.log("hhh10");
        if(this.Rental_Apply__c.Campaign__c==null){
            console.log("Campaign__c为空");
        }else if( this.Rental_Apply__c.Campaign__c != ''){
            let DeliveryGood = new Array();
            // 20220324 ljh obpm update start
            //kk1
            let statusSting = this.StatusProcessState;
            let statusList = statusSting.split(',');
            // DeliveryGood = sforce.connection.query("select Status, Rental_Apply_Flag__c from Campaign where id ='{!Rental_Apply__c.Campaign__c}'");
            // DeliveryGood = await selectCampaignById(this.Rental_Apply__c.Campaign__c);
            await selectCampaignById({recordId:this.Rental_Apply__c.Campaign__c}).then(result=>{
                console.log(result);
                DeliveryGood=result;
            }).catch(err=>{
                console.log("selectCampaignById error:");
                console.log(err.message);
            }).finally(()=>{
            });
            // 20220324 ljh obpm update start
            //kk
            let records= DeliveryGood;
            let interval = records[0].Status;
            let records_Date = records[0].Rental_Apply_Flag__c;
            if (interval==null ) {
                alert("请确认学会状态");
                return;
            }
            else if (interval == '草案中') {
                alert('学会状态为草案中,不能提交');
                return;
            }
            else if (interval == '申请中') {
                alert('学会状态为申请中,不能提交');
                return;
            }
            else if (interval == '已结束') {
                alert('学会状态为已结束,不能提交');
                return;
            }
            else if (interval == '已提交报告') {
                alert('学会状态为已提交报告,不能提交');
                return;
            }
            else if (interval == '取消申请中') {
                alert('学会状态为取消申请中,不能提交');
                return;
            }
            else if (interval == '取消') {
                alert('学会状态为取消,不能提交');
                return;
            }
            //kk
            if(this.Rental_Apply__c.Request_shipping_day__c==null){
                alert("请确认希望到货日期");
                return;
            }else{
                if (d >= this.Rental_Apply__c.Request_shipping_day__c -7) {
                    alert("必须提前于希望到货日7天以上提交申请");
                    return;
                }
                // 20220324 ljh obpm add start
                if (records != null && records[0].IF_Approved__c == "true" && (records[0].Meeting_Approved_No__c == null || records[0].Meeting_Approved_No__c == "") ) {
                    alert("没有决裁号的,暂不能出借,请更新裁决信息。");
                    return;
                }
                if (records != null && records[0].IF_Approved__c == "true" && records[0].Meeting_Approved_No__c != "" && statusList.indexOf(records[0].Approved_Status__c) != -1 && records[0].Approved_Status__c != '草稿' ) {
                    alert("已申请决裁但决裁状态不符合条件。");
                    return;
                }
            }
            // 20220324 ljh obpm add end
        }
        if (this.Rental_Apply__c.QIS_number__c == null) {
            console.log("QIS_number__c 是空的");
        }else{
            if( this.Rental_Apply__c.QIS_number__c != ''){
                let DeliveryGood = new Array();
                // DeliveryGood =await selectQISreportById2(this.Rental_Apply__c.QIS_ID_Line__c);
                await selectQISreportById2({recordId:this.Rental_Apply__c.QIS_ID_Line__c}).then(result=>{
                    console.log(result);
                    DeliveryGood=result;
                }).catch(err=>{
                    console.log("selectQISreportById2 error:");
                    console.log(err.message);
                }).finally(()=>{
                });
                let records= DeliveryGood;
                let interval = records[0].next_action__c;
                if (interval == '送回') {
                    alert("QIS 已送回,不能再申请备品了");
                    return;
                }
            }
        }
        // share
        let userAccess = new Array();
        //kk
        let t=this.Rental_Apply__c.applyUser__c+'_Edit';
        userAccess.push(t);
        let rtn ;
        await setSObjectShare({sobjectName:'Rental_Apply__Share',rowCause:'ApplyUserShare__c',parentId:this.Rental_Apply__c.Id,userAccess:userAccess,ownerId:this.Rental_Apply__c.OwnerId}).then(result=>{
            console.log(result);
            rtn=result;
        }).catch(err=>{
            console.log("setSObjectShare error:");
            console.log(err.message);
        }).finally(()=>{
        });
        if(rtn==null){
            alert("rtn为空");
            return;
        }else{
            if (rtn != 'OK') {
                alert(rtn);
                return;
            }
        }
        if(this.Rental_Apply__c.Status__c == null){
            alert('请备品申请状态确认,不能为空');
            return;
        }else{
            if (this.Rental_Apply__c.Status__c == '填写完毕' ||
                this.Rental_Apply__c.Status__c == '申请中' ||
                this.Rental_Apply__c.Status__c == '已批准' ||
                //现在申请书的Status__c已经没有引当完了状态。所以这里不需要判断
                //'{!Rental_Apply__c.Status__c}' == '引当完了' ||
                this.Rental_Apply__c.Status__c == '已出库指示' ||
                this.Rental_Apply__c.Status__c == '删除' ||
                this.Rental_Apply__c.Status__c == '取消' ) {
                    alert('请备品申请状态确认,已经提交过的申请,不能重复提交');
                    return;
            }
        }
            // 没有明细的一览check
        let raesList = new Array();
        // raesList = selectRentalApplyEquipmentSetByRacId(this.recordId);
        await selectRentalApplyEquipmentSetByRacId({recordId:this.recordId}).then(result=>{
            console.log(result);
            raesList=result;
        }).catch(err=>{
            console.log("selectRentalApplyEquipmentSetByRacId error:");
            console.log(err.message);
        }).finally(()=>{
        });
        let records= raesList;
        if(records.length > 0){
            alert('有没有明细的借出备品配套一览,不能提交');
            return;
        }
        let racs ;
        await selectRentalApplyById({recordId:this.recordId}).then(result=>{
            console.log(result);
            racs=result;
        }).catch(err=>{
            console.log("selectRentalApplyById error:");
            console.log(err.message);
        }).finally(()=>{
        });
        let racNew = racs[0];
        let id=this.Rental_Apply__c.Id;
        let Status__c="填写完毕";
        let userId;
        await getUserId().then(result=>{
            console.log(result);
            userId=result;
        }).catch(err=>{
            console.log("getUserId error:");
            console.log(err.message);
        }).finally(()=>{
        });
        let manageUsers;
        await selectUserById({recordId:userId}).then(result=>{
            console.log(result);
            manageUsers=result;
        }).catch(err=>{
            console.log("selectUserById error:");
            console.log(err.message);
        }).finally(()=>{
        });
        let SalesManagerSubmit__c;
        let OPDManagerApprover__c;
        let BuchangApprovalManagerSalesSubmit__c;
        let OPDBuchangApprover__c;
        if(manageUsers[0].JingliEquipmentManager__c != null){
            SalesManagerSubmit__c = manageUsers[0].JingliEquipmentManager__r.Name;
        // 20220930 ljh SWAG-CJR8S7 start
            if(racNew.OPDPlan__c != null){
                OPDManagerApprover__c = SalesManagerSubmit__c == racNew.OPDPlan__r.SalesManager_Txt__c?SalesManagerSubmit__c:' ';
            }
        // 20220930 ljh SWAG-CJR8S7 end
        }
        if(manageUsers[0].Buzhang_Equipment_Manager__c != null){
            BuchangApprovalManagerSalesSubmit__c = manageUsers[0].Buzhang_Equipment_Manager__r.Name; //2022-07-22 zyh
        // 20220930 ljh SWAG-CJR8S7 start
            if(racNew.OPDPlan__c != null){
                OPDBuchangApprover__c = BuchangApprovalManagerSalesSubmit__c == racNew.OPDPlan__r.BuchangApprovalManagerSales_Txt__c?BuchangApprovalManagerSalesSubmit__c:' ';
            }
        // 20220930 ljh SWAG-CJR8S7 end
        }
        let resultt;
        await updateRentalApplyC({
            recordId:id,
            SalesManagerSubmitC:SalesManagerSubmit__c,
            StatusC:Status__c,
            OPDManagerApproverC:OPDManagerApprover__c,
            BuchangApprovalManagerSalesSubmitC:BuchangApprovalManagerSalesSubmit__c,
            OPDBuchangApproverC:OPDBuchangApprover__c
        }).then(res=>{
            console.log(res);
            if(res!=null&&res.success==false){
                resultt=res;
                let messages ="";
                messages=resultt.errors[0].split(',')[1];
                if (messages!=null&&messages!="") {
                    console.log("hhh26");
                    alert("操作失败,错误信息:"+messages);
                    return;
                }
            }
        }).catch(err=>{
            console.log("updateRentalApplyC error:");
            console.log(err.message);
        }).finally(()=>{
            console.log("finally");
            console.log(resultt);
        });
        this.dispatchEvent(new CloseActionScreenEvent());
    };
    getConnectDMLErrorMessages (results) {
        console.log("in 1");
        console.log(results);
        let messages = [];
        let    i = 0;
        let    len = results.length;
        let    r;
        console.log("in 1.1");
        for (; i < len; i++) {
            console.log("in 1.2");
            r = results[i];
            console.log("in 1.3");
            if (r.success==false) {
                console.log("in 1.4");
                messages = messages.concat(this.getConnectDMLMessagesOfAResult(r));
            }
        }
        console.log("in 1");
        console.log("1结果");
        console.log(messages);
        return messages;
    };
    getConnectDMLMessagesOfAResult(res) {
        console.log("in 2");
        console.log(res);
        let messages = [];
        let    errors = res.errors;
        let    i = 0;
        let    len = errors.length;
        let    e;
        for (; i < len; i++) {
            e = errors[i];
            console.log("in 2.1");
            messages.push(e + " " + this.getConnectDMLErrorFields(errors));
            console.log("3结果");
            console.log(this.getConnectDMLErrorFields(errors));
            console.log("in 2.2");
        }
        console.log("in 2");
        console.log("2结果");
        console.log(messages);
        return messages;
    };
    getConnectDMLErrorFields (error) {
        console.log("in 3");
        console.log(error);
        let fields = error;
        if (fields.length > 0) {
            console.log("in 3");
            return "[" + fields + ",]"
        }
        else {
            console.log("in 3");
            return "";
        }
    };
}
force-app/main/default/lwc/rentalApplyLWT/rentalApplyLWT.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="rentalApplyLWT">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>
force-app/main/default/staticresources/connection20.js
New file
@@ -0,0 +1,1935 @@
/*
Salesforce.com AJAX Connector 51.0
Copyright, 1999, salesforce.com, inc.
All Rights Reserved
*/
/** check if sforce is already created by some other lib*/
window.sforce = window.sforce || {};
sforce.internal = {};
/** StringBuffer */
sforce.StringBuffer = function() {
    this.buffer = [];
    this.append = function (s) {
        this.buffer.push(s);
        return this;
    };
    this.toString = function() {
        return this.buffer.join("");
    };
};
/** Base64Binary */
sforce.Base64Binary = function(text) {
    this.input = text;
};
sforce.Base64Binary.prototype.keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
sforce.Base64Binary.prototype.toString = function() {
    var output = [];
    var chr1, chr2, chr3 = "";
    var enc1, enc2, enc3, enc4 = "";
    var i = 0;
    do {
        chr1 = this.input.charCodeAt(i++);
        chr2 = this.input.charCodeAt(i++);
        chr3 = this.input.charCodeAt(i++);
        enc1 = chr1 >> 2;
        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
        enc4 = chr3 & 63;
        if (isNaN(chr2)) {
            enc3 = enc4 = 64;
        } else if (isNaN(chr3)) {
            enc4 = 64;
        }
        output.push(this.keyStr.charAt(enc1) + this.keyStr.charAt(enc2) + this.keyStr.charAt(enc3) + this.keyStr.charAt(enc4));
        chr1 = chr2 = chr3 = "";
        enc1 = enc2 = enc3 = enc4 = "";
    } while (i < this.input.length);
    return output.join("");
};
sforce.Base64Binary.prototype.decode = function(input) {
    var output = [];
    var chr1, chr2, chr3 = "";
    var enc1, enc2, enc3, enc4 = "";
    var i = 0;
    var base64test = /[^A-Za-z0-9\+\/\=]/g;
    if (base64test.exec(input)) {
        alert("There were invalid base64 characters in the input text.\n" +
              "Valid base64 characters are A-Z, a-z, 0-9, '+', '/', and '='\n" + "Expect errors in decoding.");
    }
    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
    do {
        enc1 = this.keyStr.indexOf(input.charAt(i++));
        enc2 = this.keyStr.indexOf(input.charAt(i++));
        enc3 = this.keyStr.indexOf(input.charAt(i++));
        enc4 = this.keyStr.indexOf(input.charAt(i++));
        chr1 = (enc1 << 2) | (enc2 >> 4);
        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
        chr3 = ((enc3 & 3) << 6) | enc4;
        output.push(String.fromCharCode(chr1));
        if (enc3 != 64) {
            output.push(String.fromCharCode(chr2));
        }
        if (enc4 != 64) {
            output.push(String.fromCharCode(chr3));
        }
        chr1 = chr2 = chr3 = "";
        enc1 = enc2 = enc3 = enc4 = "";
    } while (i < input.length);
    return output.join("");
};
/**DateCodec.js*/
sforce.internal.dateToString = function(theDate) {
    var today = theDate;
    var year = today.getFullYear();
    var month = today.getMonth() + 1;
    var day = today.getDate();
    return  year + "-" + month + "-" + day;
};
sforce.internal.dateTimeToString = function(theDate) {
    var today = theDate;
    var year = today.getFullYear();
    var month = today.getMonth() + 1;
    var day = today.getDate();
    var hour = today.getHours();
    var minute = today.getMinutes();
    var second = today.getSeconds();
    var offset = today.getTimezoneOffset();
    var pm = (offset < 0) ? "+" : "-";
    offset = Math.abs(offset);
    var hourdifference = offset / 60;
    var minutedifference = offset % 60;
    if (second <= 9) {
        second = "0" + second;
    }
    var milli = today.getMilliseconds();
    if (milli !== 0) {
        milli = "." + milli;
        if (milli.length > 4) {
            milli = milli.substring(0, 4);
        }
        second = second + milli;
    }
    var timezone;
    if (offset === 0) {
        timezone = "Z";
    } else {
        if (minutedifference < 10) {
            minutedifference = "0" + minutedifference;
        }
        if (hourdifference < 10) {
            hourdifference = "0" + hourdifference;
        }
        timezone = pm + hourdifference + ":" + minutedifference;
    }
    if (month <= 9) {
        month = "0" + month;
    }
    if (day <= 9) {
        day = "0" + day;
    }
    if (hour <= 9) {
        hour = "0" + hour;
    }
    if (minute <= 9) {
        minute = "0" + minute;
    }
    return  year + "-" + month + "-" + day + "T" + hour + ":" + minute + ":" + second + timezone;
};
sforce.internal.stringToDate = function(source) {
    var bc = false;
    if (source === null || source.length === 0) {
        throw "Unable to parse dateTime";
    }
    if (source.charAt(0) == '+') {
        source = source.substring(1);
    }
    if (source.charAt(0) == '-') {
        source = source.substring(1);
        bc = true;
    }
    if (source.length != 10) {
        throw ("Unable to parse date, " + source + " length != 10");
    }
    if (source.charAt(4) != '-' || source.charAt(7) != '-') {
        throw ("Unable to parse date");
    }
    var year = source.substring(0, 4);
    var month = source.substring(5, 7);
    var day = source.substring(8, 10);
    var date = new Date(year, month-1, day, 0, 0, 0);
    date.setMilliseconds(0);
    return date;
};
sforce.internal.stringToDateTime = function(source) {
    var bc = false;
    if (source === null || source.length === 0) {
        throw "Unable to parse dateTime";
    }
    if (source.charAt(0) == '+') {
        source = source.substring(1);
    }
    if (source.charAt(0) == '-') {
        source = source.substring(1);
        bc = true;
    }
    if (source.length < 19) {
        throw ("Unable to parse dateTime");
    }
    if (source.charAt(4) != '-' || source.charAt(7) != '-' ||
        source.charAt(10) != 'T') {
        throw ("Unable to parse dateTime");
    }
    if (source.charAt(13) != ':' || source.charAt(16) != ':') {
        throw ("Unable to parse dateTime");
    }
    var year = source.substring(0, 4);
    var month = source.substring(5, 7);
    var day = source.substring(8, 10);
    var hour = source.substring(11, 13);
    var min = source.substring(14, 16);
    var sec = source.substring(17, 19);
    var date = new Date(year, month-1, day, hour, min, sec);
    var pos = 19;
    // parse optional milliseconds
    if (pos < source.length && source.charAt(pos) == '.') {
        var milliseconds = 0;
        var start = ++pos;
        while (pos < source.length && sforce.internal.isDigit(source.charAt(pos))) {
            pos++;
        }
        var decimal = source.substring(start, pos);
        if (decimal.length == 3) {
            milliseconds = decimal;
        } else if (decimal.length < 3) {
            milliseconds = (decimal + "000").substring(0, 3);
        } else {
            milliseconds = decimal.substring(0, 3);
            if (decimal.charAt(3) >= '5') {
                ++milliseconds;
            }
        }
        date.setMilliseconds(milliseconds);
    }
    var offset = date.getTimezoneOffset() * 60000;
    //offset in milli;
    // parse optional timezone
    if (pos + 5 < source.length &&
        (source.charAt(pos) == '+' || (source.charAt(pos) == '-'))) {
        if (!sforce.internal.isDigit(source.charAt(pos + 1)) ||
            !sforce.internal.isDigit(source.charAt(pos + 2)) ||
            source.charAt(pos + 3) != ':' ||
            !sforce.internal.isDigit(source.charAt(pos + 4)) ||
            !sforce.internal.isDigit(source.charAt(pos + 5))) {
            throw "Unable to parse dateTime";
        }
        var hours = (source.charAt(pos + 1) - '0') * 10 + source.charAt(pos + 2) - '0';
        var mins = (source.charAt(pos + 4) - '0') * 10 + source.charAt(pos + 5) - '0';
        var mseconds = (hours * 60 + mins) * 60 * 1000;
        // subtract milliseconds from current date to obtain GMT
        if (source.charAt(pos) == '+') {
            mseconds = -mseconds;
        }
        date = new Date(date.getTime() - offset + mseconds);
        pos += 6;
    }
    if (pos < source.length && source.charAt(pos) == 'Z') {
        pos++;
        date = new Date(date.getTime() - offset);
    }
    if (pos < source.length) {
        throw ("Unable to parse dateTime");
    }
    return date;
};
sforce.internal.isDigit = function (ch) {
    if (ch == '0' || ch == '1' || ch == '2' || ch == '3' || ch == '4' ||
        ch == '5' || ch == '6' || ch == '7' || ch == '8' || ch == '9') {
        return true;
    } else {
        return false;
    }
};
/** Xml */
sforce.Xml = function(name) {
};
sforce.Xml.prototype.toXml = function (sobjectNs, name, writer) {
    writer.writeStartElement(name, sobjectNs);
    if (this._xsiType) {
        writer.writeXsiType(this._xsiType);
    }
    for (var f in this) {
        if ("_name" == f || "_xsiType" == f) {
            //skip
        } else {
            var val = this[f];
            if (typeof val != "function") {
                // if (typeof val == "array") {
                if (Array.isArray(val)) {
                    for (var i=0; i<val.length; i++) {
                        this.writeValue(sobjectNs, writer, f, val[i]);
                    }
                } else {
                    this.writeValue(sobjectNs, writer, f, val);
                }
            }
        }
    }
    writer.writeEndElement(name, sobjectNs);
};
sforce.Xml.prototype.writeValue = function (sobjectNs, writer, name, val) {
    if (val === null) {
        writer.writeNameValueNode("fieldsToNull", name);
        return;
    }
    if (typeof(val) === "undefined") {
        //TODO:  throw "value for field " + name + " is undefined"; Bug: 100000000000Ufg
        return; //skip for now
    }
    if (val.toXml) {
        val.toXml(sobjectNs, name, writer);
    } else {
        writer.writeNameValueNode(name, val);
    }
};
sforce.Xml.prototype.get = function(name) {
    return this[name] ? this[name] : null;
};
sforce.Xml.prototype.set = function(name, value) {
    this[name] = value;
};
sforce.Xml.prototype.getArray = function(name) {
    var obj = this[name];
    if (obj) {
        if (obj.join) {
            return obj;
        } else {
            return [obj];
        }
    } else {
        return [];
    }
};
sforce.Xml.prototype.getBoolean = function(name) {
    return ("true" == this[name]) ? true : false;
};
sforce.Xml.prototype.getDate = function(name) {
    if (this[name]) {
        if (this[name].getFullYear) {
            return this[name];
        } else {
            return sforce.internal.stringToDate(this[name]);
        }
    } else {
        return null;
    }
};
sforce.Xml.prototype.getDateTime = function(name) {
    if (this[name]) {
        if (this[name].getFullYear) {
            return this[name];
        } else {
            return sforce.internal.stringToDateTime(this[name]);
        }
    } else {
        return null;
    }
};
sforce.Xml.prototype.getInt = function(name) {
    if (this[name]) {
        if (typeof this[name] === "number") {
            return this[name];
        } else {
            return parseInt(this[name], 10);
        }
    } else {
        throw "Unable to parse int field: " + name;
    }
};
sforce.Xml.prototype.getFloat = function(name) {
    if (this[name]) {
        if (typeof this[name] === "number") {
            return this[name];
        } else {
            return parseFloat(this[name]);
        }
    } else {
        throw "Unable to parse float field: " + name;
    }
};
sforce.Xml.prototype.getBase64Binary = function(name) {
    if (this[name]) {
        return sforce.Base64Binary.prototype.decode(this[name]);
    } else {
        throw "Unable to parse base64Binary field: " + name;
    }
};
sforce.Xml.prototype.toString = function() {
    var sb = new sforce.StringBuffer();
    sb.append("{");
    for (var f in this) {
        var field = this[f];
        if (!field) {
            sb.append(f).append(":").append("" + field);
        } else  if (typeof(field) == "object") {
            sb.append(f).append(":").append(field.toString());
        } else if (field.join) {
            sb.append(f).append(":").append("[");
            for (var i = 0; i < field.length; i++) {
                sb.append(field[i]);
                if (i < field.length - 1) {
                    sb.append(", ");
                }
            }
            sb.append("]");
        } else if (typeof(field) == "function") {
            continue;
        } else {
            sb.append(f).append(":").append("'" + field + "'");
        }
        sb.append(", ");
    }
    sb.append("}");
    return sb.toString();
};
/** Debug */
sforce.internal.Debug = function() {
    this.output = null;
    this.trace = false;
    this.apexTrace = false;
    this.win = null;
    this.traceQueue = [];
    this.quiet = false;
    this.open = function() {
        this.println("", "print");
    };
    this.println = function(s, type) {
        if (this.quiet) {
            return;
        }
        if (typeof(println) === "function") {
            println(s, type);
            return;
        }
        if (this.win === null || !this.win.document) {
            this.output = null;
            this.win = window.open((typeof window.UserContext != "undefined") ? UserContext.getUrl('/soap/ajax/51.0/debugshell.html') : '/soap/ajax/51.0/debugshell.html', '',
                    'width=800,height=400,toolbar=no,location=no,directories=no,alwaysRaised=yes,' +
                    'status=no,menubar=no,scrollbars=yes,copyhistory=yes,resizable=yes');
        }
        if (this.output === null) {
            this.findOutput();
        }
        if (this.output !== null) {
            if (sforce.debug.traceQueue.length > 0) {
                this.traceCallback();
            }
            this.win.println(s, type);
       } else {
            sforce.debug.traceQueue.push({message: s, type: type});
            setTimeout(sforce.debug.traceCallback, 1000);
        }
    };
    this.traceCallback = function() {
        sforce.debug.findOutput();
        if (sforce.debug.output === null) {
            setTimeout(sforce.debug.traceCallback, 1000);
            return;
        }
        for (var i=0; i<sforce.debug.traceQueue.length; i++) {
            var element = sforce.debug.traceQueue[i];
            sforce.debug.win.println(element.message, element.type);
        }
        sforce.debug.traceQueue = [];
    };
    this.findOutput = function() {
        if (this.output === null) {
            this.output = this.win.document.getElementById("output");
        }
        return this.output;
    };
    this.logXml = function(str) {
        str = str.replace(/</g, "&lt;");
        str = str.replace(/>/g, "&gt;");
        str = "<textarea cols=80 rows=5 wrap=hard>" + str + "</textarea>";
        this.println(str, "printxml");
    };
    this.log = function(str) {
        this.println(str, "print");
    };
    this.logApex = function(response) {
        var start = response.indexOf("<debugLog>");
        var end = response.indexOf("</debugLog>");
        if (start === -1)
            start = 0;
        else
            start = start + '<debugLog>'.length;
        if (end === -1) end = response.length;
        var msg = response.substring(start, end);
        this.println(msg, "printxml");
    };
};
sforce.debug = new sforce.internal.Debug();
/** Transport */
sforce.internal._connections = [];
sforce.internal.ConnectionHolder = function(connection, callback) {
    this.connection = connection;
    this.callback = callback;
    this.timedout = false;
};
sforce.Transport = function(url) {
    this.url = url;
    this.connection = null;
    this.newConnection = function() {
        try {
            this.connection = new ActiveXObject('Msxml2.XMLHTTP');
        } catch(e) {
            try {
                this.connection = new ActiveXObject('Microsoft.XMLHTTP');
            } catch(e) {
                this.connection = new XMLHttpRequest();
            }
        }
        return this.connection;
    };
    this.send = function (envelope, callback, async, timeout) {
        this.newConnection();
        if (async) {
            this.connection.onreadystatechange = this.httpConnectionCallback;
        }
        var holder = new sforce.internal.ConnectionHolder(this.connection, callback);
        sforce.internal._connections.push(holder);
        this.connection.open("POST", this.url, async);
        this.connection.setRequestHeader("Content-Type", "text/xml; charset=UTF-8");
        this.connection.setRequestHeader("SOAPAction", "\"\"");
        this.connection.setRequestHeader("Accept", "text/xml");
        this.connection.setRequestHeader("X-SFDC-User-Agent", "SFAJAX 1.0");
        this.connection.send(envelope);
        if (async && typeof(timeout) !== "undefined") {
            this.setTimeoutOn(holder, timeout);
        }
        if (!async) {
            this.httpConnectionCallback();
        }
    };
    this.setTimeoutOn = function (holder, timeout) {
        function abortConnection() {
            if (holder.connection.readyState !== 4) {
                holder.timedout = true;
                holder.connection.abort();
            }
        }
        setTimeout(abortConnection, timeout);
    };
    this.httpConnectionCallback = function () {
        for (var i = 0; i < sforce.internal._connections.length; i++) {
            var holder = sforce.internal._connections[i];
            if (holder !== null) {
                if (holder.timedout) {
                    sforce.internal._connections[i] = null;
                    sforce.internal._connections.slice(i,1);
                    holder.callback.httpCallback("Remote invocation timed out", false);
                } else  if (holder.connection.readyState == 4) {
                    sforce.internal._connections[i] = null;
                    sforce.internal._connections.slice(i,1);
                    var success = holder.connection.status == 200;
                    if (sforce.debug.trace) {
                        sforce.debug.log("Response : status - " + holder.connection.status);
                        sforce.debug.logXml(holder.connection.responseText);
                    }
                    if (sforce.debug.apexTrace) {
                        sforce.debug.logApex(holder.connection.responseText);
                    }
                    if (holder.connection.responseXML && holder.connection.responseXML.documentElement) {
                        holder.callback.httpCallback(holder.connection.responseXML.documentElement, success);
                    } else {
                        holder.callback.httpCallback("Remote invocation failed, due to: " + holder.connection.responseText +
                                                     " status code: ", holder.connection.status);
                    }
                }
            }
        }
    };
};
/** XmlWriter */
sforce.XmlWriter = function() {
    this.buffer = new sforce.StringBuffer();
    this.namespaces = {};
    this.prefixCount = 0;
    this.writingStartElement = false;
};
sforce.XmlWriter.prototype.writeStartElement = function(name, namesp, prefix) {
    if (this.writingStartElement) {
        this.buffer.append(">");
    }
    this.buffer.append("<");
    var newns = false;
    if (namesp) {
        if (!this.namespaces[namesp] && this.namespaces[namesp] !== "") {
            newns = true;
        }
        if (!prefix) {
            prefix = this.getPrefix(namesp);
        }
        if (prefix !== null && prefix !== "") {
           this.buffer.append(prefix);
           this.buffer.append(":");
        }
    }
    this.buffer.append(name);
    if (newns === true) {
        this.writeNamespace(namesp, prefix);
    }
    this.writingStartElement = true;
};
sforce.XmlWriter.prototype.writeEndElement = function(name, namesp) {
    if (this.writingStartElement) {
        this.buffer.append("/>");
    } else {
        this.buffer.append("</");
        if (namesp) {
            var prefix = this.getPrefix(namesp);
            if (prefix && prefix !== "") {
              this.buffer.append(prefix);
              this.buffer.append(":");
            }
        }
        this.buffer.append(name);
        this.buffer.append(">");
    }
    this.writingStartElement = false;
};
sforce.XmlWriter.prototype.writeNamespace = function(namesp, prefix) {
    if (prefix && "" !== prefix) {
        this.namespaces[namesp] = prefix;
        this.buffer.append(" ");
        this.buffer.append("xmlns:");
        this.buffer.append(prefix);
    } else {
        this.namespaces[namesp] = "";
        this.buffer.append(" ");
        this.buffer.append("xmlns");
    }
    this.buffer.append("=\"");
    this.buffer.append(namesp);
    this.buffer.append("\"");
};
sforce.XmlWriter.prototype.writeText = function(text) {
    if (this.writingStartElement) {
        this.buffer.append(">");
        this.writingStartElement = false;
    } else {
        throw "Can only write text after a start element";
    }
    if (typeof text == 'string') {
        text = text.replace(/&/g, '\&amp;');
        text = text.replace(/</g, '&lt;');
        text = text.replace(/>/g, '&gt;');
    }
    this.buffer.append(text);
};
sforce.XmlWriter.prototype.writeXsiType = function(xsiType) {
    this.writeNamespace("http://www.w3.org/2001/XMLSchema-instance", "xsi");
    this.writeAttribute("xsi:type", xsiType);
};
sforce.XmlWriter.prototype.writeAttribute = function(name, value) {
    this.buffer.append(" " + name + "=\"" + value + "\"");
};
sforce.XmlWriter.prototype.getPrefix = function(namesp) {
    var prefix = this.namespaces[namesp];
    //sforce.debug.log("--------");
    //sforce.debug.log(namesp + ":" + (prefix === null ? "null":prefix) + ":");
    if (!prefix && prefix !== "") {
        prefix = "ns" + this.prefixCount;
        this.prefixCount++;
        this.namespaces[namesp] = prefix;
        return prefix;
    }
    return prefix;
};
sforce.XmlWriter.prototype.toString = function() {
    return this.buffer.toString();
};
/** soap writer*/
sforce.XmlWriter.prototype.soapNS = "http://schemas.xmlsoap.org/soap/envelope/";
sforce.XmlWriter.prototype.startEnvelope = function() {
    this.writeStartElement("Envelope", this.soapNS, "se");
};
sforce.XmlWriter.prototype.endEnvelope = function() {
    this.writeEndElement("Envelope", this.soapNS);
};
sforce.XmlWriter.prototype.startHeader = function() {
    this.writeStartElement("Header", this.soapNS, "se");
};
sforce.XmlWriter.prototype.endHeader = function() {
    this.writeEndElement("Header", this.soapNS);
};
sforce.XmlWriter.prototype.startBody = function() {
    this.writeStartElement("Body", this.soapNS, "se");
};
sforce.XmlWriter.prototype.endBody = function() {
    this.writeEndElement("Body", this.soapNS);
};
sforce.XmlWriter.prototype.writeNameValueNode = function(name, value) {
    if (value === null) {
        this.writeStartElement(name);
        this.writeNamespace("http://www.w3.org/2001/XMLSchema-instance", "xsi");
        this.writeAttribute("xsi:nill", "true");
        this.writeEndElement(name);
        return;
    }
    if (value.toUTCString) {
        value = sforce.internal.dateTimeToString(value);
    }
    if (typeof value == "boolean") {
        // boolean 'false' values get joined in string buffer,
        // so convert to strings:
        value = value ? "true" : "false";
    }
    if (value && value.join) {
        for (var i=0; i<value.length; i++) {
            this.writeStartElement(name);
            this.writeText(value[i]);
            this.writeEndElement(name);
        }
    } else {
        this.writeStartElement(name);
        this.writeText(value);
        this.writeEndElement(name);
    }
};
/** XmlReader */
sforce.XmlReader = function(root) {
    this.envelope = root;
};
sforce.XmlReader.prototype.getEnvelope = function() {
    if (this.isTag("Envelope", this.envelope)) {
        return this.envelope;
    }
    throw "Unable to find soap envelope, but found " + this.envelope.nodeName;
};
sforce.XmlReader.prototype.getBody = function() {
    return this.getChild("Body", this.envelope);
};
sforce.XmlReader.prototype.getHeader = function() {
    return this.getChild("Header", this.envelope);
};
sforce.XmlReader.prototype.getChild = function(name, node) {
    var children = node.childNodes;
    for (var i = 0; i < children.length; i++) {
        if (children[i].nodeType == 1 && this.isTag(name, children[i])) {
            return children[i];
        }
    }
    return null;
};
sforce.XmlReader.prototype.getFirstElement = function(node) {
    var children = node.childNodes;
    for (var i = 0; i < children.length; i++) {
        if (children[i].nodeType == 1) {
            return children[i];
        }
    }
    return null;
};
sforce.XmlReader.prototype.isTag = function(name, node) {
    var ns = node.nodeName.split(":");
    if (ns.length == 2 && ns[1] == name) {
        return true;
    }
    if (ns.length == 1 && ns[0] == name) {
        return true;
    }
    return false;
};
sforce.XmlReader.prototype.isNameValueNode = function(node) {
    var children = node.childNodes;
    for (var i = 0; i < children.length; i++) {
        if (children[i].nodeType != 3) {
            return false;
        }
    }
    return true;
};
sforce.XmlReader.prototype.getTextValue = function(node) {
    if (node.nodeType == 3) {
        return node.nodeValue;
    }
    //todo: fix the hardcoded xsi prefix
    var xsiNil = node.getAttribute("xsi:nil");
    if (xsiNil == "true") {
        return null;
    }
    var sb = "";
    var children = node.childNodes;
    for (var i = 0; i < children.length; i++) {
        if (children[i].nodeType == 3) {
            sb += children[i].nodeValue;
        } else {
            throw "Not a simple name value node";
        }
    }
    return sb;
};
//todo: optimize
/*
sforce.XmlReader.prototype.toXmlObject2 = function(node) {
    var children = node.childNodes;
    var obj = new sforce.Xml();
    for (var i = 0; i < children.length; i++) {
        var child = children[i];
        if (child.nodeType != 1) continue;
        var name = child.nodeName;
        var index = name.indexOf(":");
        name = (index == -1) ? name : name.substring(index + 1);
        var value;
        if (this.isNameValueNode(child)) {
            value = this.getTextValue(child);
        } else {
            value = this.toXmlObject(child);
        }
        this.addToObject(obj, name, value);
    }
    return obj;
}
*/
sforce.XmlReader.prototype.toXmlObject = function(n) {
    //todo: fix the hardcoded xsi prefix
    var xsiNil = n.getAttribute("xsi:nil");
    if (xsiNil == "true") {
        return null;
    }
    var top = new sforce.Xml();
    var stack = [];
    stack.push({node: n, obj: top});
    while (stack.length > 0) {
        var st = stack.shift();
        for (var child = st.node.firstChild; child !== null; child = child.nextSibling) {
            if (child.nodeType != 1) {
                continue;
            }
            var name = child.nodeName;
            var index = name.indexOf(":");
            name = (index == -1) ? name : name.substring(index + 1);
            var value;
            var isNameValue = true;
            var sb = "";
            for (var tc = child.firstChild; tc !== null; tc = tc.nextSibling) {
                if (tc.nodeType != 3) {
                    isNameValue = false;
                    break;
                } else {
                    sb += tc.nodeValue;
                }
            }
            if (isNameValue) {
                if (child.getAttribute("xsi:nil") == "true") {
                    value = null;
                } else {
                    value = sb;
                }
            } else {
                value = new sforce.Xml();
                stack.push({node: child, obj: value});
            }
            if (!st.obj[name]) {
                st.obj[name] = value;
            } else {
                if (st.obj[name].push) {
                    st.obj[name].push(value);
                } else {
                    var old = st.obj[name];
                    if (name === "Id" && old === value) {
                        //skip, special case for dup Id in sobject
                    } else {
                        st.obj[name] = [];
                        st.obj[name].push(old);
                        st.obj[name].push(value);
                    }
                }
            }
        }
    }
    return top;
};
/** SoapTransport */
sforce.SoapTransport = function() {
    this.connectionCallback = null;
    this.result = null;
    this.fault = null;
    this.isAsync = true;
    this.isArray = false;
};
sforce.SoapTransport.prototype.onFailure = function(res, writer) {
    var error = "ERROR: ........... ";
    alert(error + res);
    this.result = null;
};
sforce.SoapTransport.prototype.send = function(url, writer, isArray, connectionCallback) {
    this.isArray = isArray;
    var transport = new sforce.Transport(url);
    this.isAsync = connectionCallback ? true : false;
    if (this.isAsync) {
        this.connectionCallback = connectionCallback;
        transport.send(writer.toString(), this, this.isAsync, connectionCallback.timeout);
    } else {
        transport.send(writer.toString(), this, this.isAsync);
        if (this.fault !== null) {
            throw this.fault;
        }
        return this.result;
    }
};
sforce.SoapTransport.prototype.httpCallback = function(response, success) {
    try {
        if (success === true) {
            var reader = new sforce.XmlReader(response);
            var envelope = reader.getEnvelope();
            var body = reader.getBody();
            var operation = reader.getFirstElement(body);
            if (operation === null) {
                throw "Unable to find operation response element";
            }
            var resultArray = [];
            var children = operation.childNodes;
            for (var i = 0; i < children.length; i++) {
                if (children[i].nodeType != 1) {
                    continue;
                }
                if (reader.isNameValueNode(children[i])) {
                    resultArray.push(reader.getTextValue(children[i]));
                } else {
                    resultArray.push(reader.toXmlObject(children[i]));
                }
            }
            if (this.isArray) {
                this.result = resultArray;
            } else {
                if (resultArray.length > 1) {
                    throw "Found more than one response: " + resultArray;
                }
                this.result = resultArray[0];
            }
            if (this.isAsync) {
                try {
                    this.beforeCallback();
                    if (typeof this.connectionCallback == "function") {
                        this.connectionCallback(this.result);
                    } else {
                        if (this.connectionCallback.onSuccess) {
                            this.connectionCallback.onSuccess(this.result, this.connectionCallback.source);
                        } else {
                            throw "Unable to find onSuccess method in the callback object";
                        }
                    }
                } finally {
                    this.afterCallback();
                }
            }
        } else {
            if (typeof(response.nodeName) !== "undefined") {
                var reader2 = new sforce.XmlReader(response);
                var envelope2 = reader2.getEnvelope();
                var body2 = reader2.getBody();
                var soapfaultEl = reader2.getFirstElement(body2);
                var soapfault = reader2.toXmlObject(soapfaultEl);
                this.sendFault(soapfault);
            } else {
                this.sendFault(response);
            }
        }
    } catch(fault) {
        this.sendFault(fault);
    }
};
sforce.SoapTransport.prototype.sendFault = function(fault) {
    if (this.isAsync) {
        if (this.connectionCallback.onFailure) {
            try {
                this.beforeCallback();
                this.connectionCallback.onFailure(fault, this.connectionCallback.source);
            } finally {
                this.afterCallback();
            }
        } else {
            this.onFailure(fault);
        }
    } else {
        this.fault = fault;
    }
};
sforce.SoapTransport.prototype.beforeCallback = function () {};
sforce.SoapTransport.prototype.afterCallback = function () {};
/** SObject */
sforce.SObject = function(type) {
    this.type = type;
};
sforce.SObject.prototype = new sforce.Xml("sObjects");
/** LeadConvert */
sforce.LeadConvert = function() {
};
sforce.LeadConvert.prototype = new sforce.Xml("leadConverts");
/** MergeRequest */
sforce.MergeRequest = function() {
};
sforce.MergeRequest.prototype = new sforce.Xml("request");
/** DescribeSoqlListViewsRequest - see describeSoqlListViews() */
sforce.DescribeSoqlListViewsRequest  = function() {
};
sforce.DescribeSoqlListViewsRequest.prototype = new sforce.Xml("request");
/** DescribeSoqlListViewParams - see describeSoqlListViews() */
sforce.DescribeSoqlListViewParams = function() {
};
sforce.DescribeSoqlListViewParams.prototype = new sforce.Xml("listViewParams");
/** DescribePicklistsParam - see describePicklists() */
sforce.DescribePicklistsParam = function() {
};
sforce.DescribePicklistsParam.prototype = new sforce.Xml("picklistParams");
/** QuickAction */
sforce.QuickAction = function() {
};
sforce.QuickAction.prototype = new sforce.Xml("quickActions");
/** Connection */
sforce.Connection = function() {
    this.sessionId = null;
    this.updateMru = null;
    this.allowFieldTruncation = null;
    this.disableFeedTracking = null;
    this.streamingEnabled = null;
    this.allOrNone = null;
    this.client = null;
    this.defaultNamespace = null;
    this.batchSize = null;
    this.loginScopeHeader = null;
    this.emailHeader = null;
    this.assignmentRuleHeader = null;
    this.duplicateRuleHeader = null;
    this.transferToUserId = null;
    this.debuggingHeader = null;
    this.serverUrl = (typeof window.UserContext != "undefined") ? UserContext.getUrl("/services/Soap/u/51.0") : "/services/Soap/u/51.0";
};
/** internal methods */
sforce.internal.Parameter = function (n, v, a) {
    this.name = n;
    this.value = v;
    this.isArray = a;
};
sforce.Connection.prototype.sforceNs = "urn:partner.soap.sforce.com";
sforce.Connection.prototype.sobjectNs = "sobject.partner.soap.sforce.com";
sforce.Connection.prototype.writeOne = function (writer, name, value, sobjectNs) {
    if (value === null) {
        writer.writeNameValueNode(name, null);
    } else if (value.toXml) {
        value.toXml(sobjectNs, name, writer);
    } else {
        writer.writeNameValueNode(name, value);
    }
};
sforce.Connection.prototype.init = function(sessionId, serverUrl) {
    this.sessionId = sessionId;
    this.serverUrl = serverUrl;
};
sforce.Connection.prototype.login = function (username, password) {
    var arg1 = new sforce.internal.Parameter("username", username, false);
    var arg2 = new sforce.internal.Parameter("password", password, false);
    var result = this.invoke("login", [arg1, arg2], false, null);
    this.sessionId = result.sessionId;
    return result;
};
sforce.Connection.prototype.describeSObject = function(type, callback) {
    var arg = new sforce.internal.Parameter("sObjectType", type, false);
    return this.invoke("describeSObject", [arg], false, callback);
};
sforce.Connection.prototype.describeSObjects = function(types, callback) {
    var arg = new sforce.internal.Parameter("sObjectType", types, true);
    return this.invoke("describeSObjects", [arg], true, callback);
};
sforce.Connection.prototype.describeSearchLayouts = function(type, callback) {
    var arg = new sforce.internal.Parameter("sObjectType", type, true);
    return this.invoke("describeSearchLayouts", [arg], true, callback);
};
sforce.Connection.prototype.describeListViews = function(type, callback) {
    var arg = new sforce.internal.Parameter("sObjectType", type, true);
    return this.invoke("describeListViews", [arg], true, callback);
};
sforce.Connection.prototype.describeSoqlListViews = function(name, type, callback) {
    // this interface is only for a single list
    // build up a request for the user - easier than making caller do it
    var rp = new sforce.DescribeSoqlListViewParams();
    rp.developerNameOrId = name;
    rp.sobjectType = type;
    var describeRequest = new sforce.DescribeSoqlListViewsRequest();
    describeRequest.listViewParams = [ rp ];
    var arg1 = new sforce.internal.Parameter("request", describeRequest, false);
    return this.invoke("describeSoqlListViews", [arg1], false, callback);
};
sforce.Connection.prototype.describeGlobal = function(callback) {
    return this.invoke("describeGlobal", [], false, callback);
};
sforce.Connection.prototype.describeLayout = function(type, layoutName, recordTypes, callback) {
    var arg1 = new sforce.internal.Parameter("sObjectType", type, false);
    if (!layoutName) {
        layoutName = null;
    }
    var arg2 = new sforce.internal.Parameter("layoutName", layoutName, false);
    if (!recordTypes) {
        recordTypes = [];
    }
    var arg3 = new sforce.internal.Parameter("recordTypeIds", recordTypes, true);
    return this.invoke("describeLayout", [arg1, arg2, arg3], false, callback);
};
sforce.Connection.prototype.describeAvailableQuickActions = function(parentType, callback) {
    var arg = new sforce.internal.Parameter("parentType", parentType, false);
    return this.invoke("describeAvailableQuickActions", [arg], true, callback);
};
sforce.Connection.prototype.describeQuickActions = function(quickActionNames, callback) {
    var arg = new sforce.internal.Parameter("quickActionNames", quickActionNames, true);
    return this.invoke("describeQuickActions", [arg], true, callback);
};
sforce.Connection.prototype.describeQuickActionsForRecordType = function(quickActionNames, recordTypeId, callback) {
    var arg = new sforce.internal.Parameter("quickActionNames", quickActionNames, true);
    var arg2 = new sforce.internal.Parameter("recordTypeId", recordTypeId, false);
    return this.invoke("describeQuickActionsForRecordType", [arg,arg2], true, callback);
};
sforce.Connection.prototype.performQuickActions = function(quickActions, callback) {
    var arg = new sforce.internal.Parameter("quickActions", quickActions, true);
    return this.invoke("performQuickActions", [arg], true, callback);
};
sforce.Connection.prototype.describeCompactLayouts = function(type, recordTypes, callback) {
    var arg = new sforce.internal.Parameter("sObjectType", type, false);
    if (!recordTypes) {
        recordTypes = [];
    }
    var arg2 = new sforce.internal.Parameter("recordTypeIds", recordTypes, true);
    return this.invoke("describeCompactLayouts", [arg, arg2], false, callback);
};
sforce.Connection.prototype.describePathAssistants = function(type, picklistValue, recordTypes, callback) {
    var arg = new sforce.internal.Parameter("sObjectType", type, false);
    if (!picklistValue) {
        picklistValue = null;
    }
    var arg2 = new sforce.internal.Parameter("picklistValue", picklistValue, false);
    if (!recordTypes) {
        recordTypes = [];
    }
    var arg3 = new sforce.internal.Parameter("recordTypeIds", recordTypes, true);
    return this.invoke("describePathAssistants", [arg, arg2, arg3], false, callback);
};
sforce.Connection.prototype.describePicklists = function(entityName, fieldNames, recordTypeId, callback) {
    var picklistParams = new sforce.DescribePicklistsParam();
    picklistParams.entityName = entityName;
    picklistParams.fieldNames = fieldNames;
    picklistParams.recordTypeId = recordTypeId;
    var arg1 = new sforce.internal.Parameter("param", picklistParams, false);
    return this.invoke("describePicklists", [arg1], false, callback);
};
sforce.Connection.prototype.describePrimaryCompactLayouts = function(sObjectTypes, callback) {
    var arg = new sforce.internal.Parameter("sObjectTypes", sObjectTypes, true);
    return this.invoke("describePrimaryCompactLayouts", [arg], true, callback);
};
sforce.Connection.prototype.describeApprovalLayout = function(type, approvalProcessNames, callback) {
    var arg1 = new sforce.internal.Parameter("sObjectType", type, false);
    if (!approvalProcessNames) {
        approvalProcessNames = [];
    }
    var arg2 = new sforce.internal.Parameter("approvalProcessNames", approvalProcessNames, true);
    return this.invoke("describeApprovalLayout", [arg1, arg2], false, callback);
};
sforce.Connection.prototype.describeSObjectListViews = function(type, recentlyViewed, callback) {
    var arg1 = new sforce.internal.Parameter("sObjectType", type, false);
    var arg2 = new sforce.internal.Parameter("recentlyViewed", recentlyViewed, false);
    var arg3 = new sforce.internal.Parameter("isSoqlCompatible", isSoqlCompatible, false);
    var arg4 = new sforce.internal.Parameter("limit", limit, false);
    var arg5 = new sforce.internal.Parameter("offset", offset, false);
    return this.invoke("describeSObjectListViews", [arg1, arg2, arg3, arg4, arg5], true, callback);
};
sforce.Connection.prototype.describeTabs = function(callback) {
    return this.invoke("describeTabs", [], true, callback);
};
sforce.Connection.prototype.describeAllTabs = function(callback) {
    return this.invoke("describeAllTabs", [], true, callback);
};
sforce.Connection.prototype.describeAppMenu = function(appMenuType, networkId, callback) {
    var arg1 = new sforce.internal.Parameter("appMenuType", appMenuType, false);
    var arg2 = new sforce.internal.Parameter("networkId", networkId, false);
    return this.invoke("describeAppMenu", [arg1, arg2], true, callback);
};
sforce.Connection.prototype.describeFlexiPages = function(flexipageDevName, callback) {
    var arg1 = new sforce.internal.Parameter("FlexiPage", flexipageDevName, false);
    return this.invoke("describeFlexiPages", [arg1], true, callback);
};
sforce.Connection.prototype.describeTheme = function(callback) {
    return this.invoke("describeTheme", [], true, callback);
};
sforce.Connection.prototype.describeGlobalTheme = function(callback) {
    return this.invoke("describeGlobalTheme", [], true, callback);
};
sforce.Connection.prototype.describeSoftphoneLayout = function(callback) {
    return this.invoke("describeSoftphoneLayout", [], false, callback);
};
sforce.Connection.prototype.describeMiniLayout = function (type, recordTypeIds, callback) {
    var arg1 = new sforce.internal.Parameter("sObjectType", type, false);
    var arg2 = new sforce.internal.Parameter("recordTypeIds", recordTypeIds, true);
    return this.invoke("describeMiniLayout", [arg1, arg2], false, callback);
};
sforce.Connection.prototype.describeSearchScopeOrder = function(callback) {
     return this.invoke("describeSearchScopeOrder", [], true, callback);
};
sforce.Connection.prototype.create = function (sobjects, callback) {
    var arg = new sforce.internal.Parameter("sObjects", sobjects, true);
    return this.invoke("create", [arg], true, callback);
};
sforce.Connection.prototype.update = function (sobjects, callback) {
    var arg = new sforce.internal.Parameter("sObjects", sobjects, true);
    return this.invoke("update", [arg], true, callback);
};
sforce.Connection.prototype.upsert = function (externalIDFieldName, sobjects, callback) {
    var arg1 = new sforce.internal.Parameter("externalIDFieldName", externalIDFieldName, false);
    var arg2 = new sforce.internal.Parameter("sObjects", sobjects, true);
    return this.invoke("upsert", [arg1, arg2], true, callback);
};
sforce.Connection.prototype.deleteIds = function (ids, callback) {
    var arg = new sforce.internal.Parameter("ids", ids, true);
    return this.invoke("delete", [arg], true, callback);
};
sforce.Connection.prototype.deleteByExample = function (sobjects, callback) {
    var arg = new sforce.internal.Parameter("sObjects", sobjects, true);
    return this.invoke("deleteByExample", [arg], true, callback);
};
sforce.Connection.prototype.impersonateUser = function (ids, callback) {
    var arg = new sforce.internal.Parameter("ids", ids, true);
    return this.invoke("impersonateUser", [arg], true, callback);
};
sforce.Connection.prototype.query = function(queryString, callback) {
    var arg = new sforce.internal.Parameter("queryString", queryString, false);
    return this.invoke("query", [arg], false, callback);
};
sforce.Connection.prototype.queryAll = function(queryString, callback) {
    var arg = new sforce.internal.Parameter("queryString", queryString, false);
    return this.invoke("queryAll", [arg], false, callback);
};
sforce.Connection.prototype.queryMore = function(queryLocator, callback) {
    var arg = new sforce.internal.Parameter("queryLocator", queryLocator, false);
    return this.invoke("queryMore", [arg], false, callback);
};
sforce.Connection.prototype.retrieve = function(fieldList, sObjectType, ids, callback) {
    var arg1 = new sforce.internal.Parameter("fieldList", fieldList, false);
    var arg2 = new sforce.internal.Parameter("sObjectType", sObjectType, false);
    var arg3 = new sforce.internal.Parameter("ids", ids, true);
    return this.invoke("retrieve", [arg1, arg2, arg3], true, callback);
};
sforce.Connection.prototype.getAccessInfo = function(callback) {
    return this.invoke("getAccessInfo", [], false, callback);
};
sforce.Connection.prototype.getUserInfo = function(callback) {
    return this.invoke("getUserInfo", [], false, callback);
};
sforce.Connection.prototype.resetPassword = function(userId, callback) {
    var arg1 = new sforce.internal.Parameter("userId", userId, false);
    return this.invoke("resetPassword", [arg1], false, callback);
};
sforce.Connection.prototype.setPassword = function(userId, password, callback) {
    var arg1 = new sforce.internal.Parameter("userId", userId, false);
    var arg2 = new sforce.internal.Parameter("password", password, false);
    return this.invoke("setPassword", [arg1, arg2], false, callback);
};
sforce.Connection.prototype.search = function(searchString, callback) {
    var arg1 = new sforce.internal.Parameter("searchString", searchString, false);
    return this.invoke("search", [arg1], false, callback);
};
sforce.Connection.prototype.getDeleted = function(sObjectType, startDate, endDate, callback) {
    var arg1 = new sforce.internal.Parameter("sObjectType", sObjectType, false);
    var arg2 = new sforce.internal.Parameter("startDate", startDate, false);
    var arg3 = new sforce.internal.Parameter("endDate", endDate, false);
    return this.invoke("getDeleted", [arg1, arg2, arg3], false, callback);
};
sforce.Connection.prototype.getUpdated = function(sObjectType, startDate, endDate, callback) {
    var arg1 = new sforce.internal.Parameter("sObjectType", sObjectType, false);
    var arg2 = new sforce.internal.Parameter("startDate", startDate, false);
    var arg3 = new sforce.internal.Parameter("endDate", endDate, false);
    return this.invoke("getUpdated", [arg1, arg2, arg3], false, callback);
};
sforce.Connection.prototype.getServerTimestamp = function(callback) {
    return this.invoke("getServerTimestamp", [], false, callback);
};
sforce.Connection.prototype.convertLead = function(leadConverts, callback) {
    var arg1 = new sforce.internal.Parameter("leadConverts", leadConverts, true);
    return this.invoke("convertLead", [arg1], true, callback);
};
sforce.Connection.prototype.merge = function(mergeRequest, callback) {
    var arg1 = new sforce.internal.Parameter("request", mergeRequest, true);
    return this.invoke("merge", [arg1], true, callback);
};
sforce.Connection.prototype.findDuplicates = function(sObjects, callback) {
    var arg1 = new sforce.internal.Parameter("sObjects", sObjects, true);
    return this.invoke("findDuplicates", [arg1], true, callback);
};
sforce.Connection.prototype.findDuplicatesByIds = function(ids, callback) {
    var arg1 = new sforce.internal.Parameter("ids", ids, true);
    return this.invoke("findDuplicatesByIds", [arg1], true, callback);
};
sforce.Connection.prototype.undelete = function(ids, callback) {
    var arg1 = new sforce.internal.Parameter("ids", ids, true);
    return this.invoke("undelete", [arg1], true, callback);
};
sforce.Connection.prototype.process = function(actions, callback) {
    var arg1 = new sforce.internal.Parameter("actions", actions, true);
    return this.invoke("process", [arg1], true, callback);
};
sforce.Connection.prototype.sendEmail = function(messages, callback) {
    var arg1 = new sforce.internal.Parameter("messages", messages, true);
    return this.invoke("sendEmail", [arg1], true, callback);
};
sforce.Connection.prototype.emptyRecycleBin = function(ids, callback) {
    var arg1 = new sforce.internal.Parameter("ids", ids, true);
    return this.invoke("emptyRecycleBin", [arg1], true, callback);
};
sforce.Connection.prototype.invalidateSessions = function(sessionIds, callback) {
    var arg = new sforce.internal.Parameter("sessionIds", sessionIds, true);
    return this.invoke("invalidateSessions", [arg], true, callback);
};
sforce.Connection.prototype.logout = function(callback) {
    return this.invoke("logout", [], true, callback);
};
sforce.Connection.prototype.remoteFunction = function(args) {
    if (!args.url) {
        throw "url not defined";
    }
    if (!args.onSuccess) {
        throw "onSuccess method not defined";
    }
    if (!args.method) {
        args.method = "GET";
    }
    if (!args.mimeType) {
        args.mimeType = "text/plain";
    }
    if (typeof(args.async) == 'undefined') {
        args.async = true;
    }
    if (typeof(args.cache) == 'undefined') {
        args.cache = false;
    }
    if (!(args.mimeType == "text/plain" ||
          args.mimeType == "text/xml")) {
        throw "Unknown mime type " + args.mimeType;
    }
    if (sforce.debug.trace) {
        sforce.debug.log("Open connection to ... " + args.url);
    }
    var request = new sforce.Transport().newConnection();
    var proxyUrl = (typeof window.UserContext != "undefined") ? UserContext.getUrl("/services/proxy") : "/services/proxy";
    if (args.cache) {
        proxyUrl = proxyUrl + "?end-point-url=" + args.url;
    } else {
        proxyUrl = proxyUrl + "?no-cache=" + new Date().getTime();
    }
    request.open(args.method, proxyUrl, args.async);
    if (args.requestHeaders) {
        for (var k in args.requestHeaders) {
            if (typeof args.requestHeaders[k] != "function") {
                request.setRequestHeader(k, args.requestHeaders[k]);
            }
        }
    }
    request.setRequestHeader("SalesforceProxy-Endpoint", args.url);
    request.setRequestHeader("SalesforceProxy-SID", this.sessionId);
    if (args.async) {
        request.onreadystatechange = _remoteFunctionCallback;
    }
    if (sforce.debug.trace) {
        sforce.debug.log("Sending ...");
    }
    if (args.requestData) {
        request.send(args.requestData);
    } else {
        request.send(null);
    }
    if (sforce.debug.trace) {
        sforce.debug.log("Done Sending ...");
    }
    if (!args.async) {
        _remoteFunctionCallback();
    }
    function _remoteFunctionCallback() {
        if (sforce.debug.trace) {
            sforce.debug.log("callback called ...");
        }
        if (request.readyState == 4) {
            if (request.status == 200) {
                if (args.mimeType == "text/plain") {
                    args.onSuccess(request.responseText, request);
                } else if (args.mimeType == "text/xml") {
                    if (!request.responseXML || !request.responseXML.documentElement) {
                        throw "Response not text/xml mime type: " + request.responseText;
                    }
                    args.onSuccess(request.responseXML.documentElement, request);
                } else {
                    throw "unsupported mime type: " + args.mimeType;
                }
            } else {
                if (args.onFailure) {
                    args.onFailure(request.responseText, request);
                } else {
                    sforce.debug.log(request.responseText);
                }
            }
        }
    }
};
sforce.Connection.prototype.writeHeader = function(writer, headerNs) {
    writer.startHeader();
    writer.writeNamespace(headerNs, "sfns");
    if (this.sessionId !== null) {
        writer.writeStartElement("SessionHeader", headerNs);
        writer.writeNameValueNode("sessionId", this.sessionId);
        writer.writeEndElement("SessionHeader", headerNs);
    }
    if (typeof(this.organizationId) !== "undefined") {
        throw "Use sforce.connection.loginScopeHeader.organizationId instead of sforce.connection.organizationId";
    }
    if (this.loginScopeHeader !== null) {
        writer.writeStartElement("LoginScopeHeader", headerNs);
        if (this.loginScopeHeader.organizationId !== null) {
            writer.writeNameValueNode("organizationId", this.loginScopeHeader.organizationId);
        }
        if (this.loginScopeHeader.portalId !== null) {
            writer.writeNameValueNode("portalId", this.loginScopeHeader.portalId);
        }
        writer.writeEndElement("LoginScopeHeader", headerNs);
    }
    if (this.client !== null || this.defaultNamespace !== null) {
        writer.writeStartElement("CallOptions", headerNs);
        if (this.client !== null) {
            writer.writeNameValueNode("client", this.client);
        }
        if (this.defaultNamespace !== null) {
            writer.writeNameValueNode("defaultNamespace", this.defaultNamespace);
         }
        writer.writeEndElement("CallOptions", headerNs);
    }
    if (this.batchSize !== null) {
        writer.writeStartElement("QueryOptions", headerNs);
        writer.writeNameValueNode("batchSize", this.batchSize);
        writer.writeEndElement("QueryOptions", headerNs);
    }
    if (this.allowFieldTruncation !== null) {
        writer.writeStartElement("AllowFieldTruncationHeader", headerNs);
        writer.writeNameValueNode("allowFieldTruncation", this.allowFieldTruncation);
        writer.writeEndElement("AllowFieldTruncationHeader", headerNs);
    }
    if (this.disableFeedTracking !== null) {
        writer.writeStartElement("DisableFeedTrackingHeader", headerNs);
        writer.writeNameValueNode("disableFeedTracking", this.disableFeedTracking);
        writer.writeEndElement("DisableFeedTrackingHeader", headerNs);
    }
    if (this.streamingEnabled !== null) {
        writer.writeStartElement("StreamingEnabledHeader", headerNs);
        writer.writeNameValueNode("StreamingEnabled", this.streamingEnabled);
        writer.writeEndElement("StreamingEnabledHeader", headerNs);
    }
    if (this.allOrNone !== null) {
        writer.writeStartElement("AllOrNoneHeader", headerNs);
        writer.writeNameValueNode("allOrNone", this.allOrNone);
        writer.writeEndElement("AllOrNoneHeader", headerNs);
    }
    if (this.updateMru !== null) {
        writer.writeStartElement("MruHeader", headerNs);
        writer.writeNameValueNode("updateMru", this.updateMru);
        writer.writeEndElement("MruHeader", headerNs);
    }
    if (this.emailHeader !== null) {
        writer.writeStartElement("EmailHeader", headerNs);
        if (this.emailHeader.triggerAutoResponseEmail) {
            writer.writeNameValueNode("triggerAutoResponseEmail", this.emailHeader.triggerAutoResponseEmail);
        }
        if (this.emailHeader.triggerOtherEmail) {
            writer.writeNameValueNode("triggerOtherEmail", this.emailHeader.triggerOtherEmail);
        }
        if (this.emailHeader.triggerUserEmail) {
            writer.writeNameValueNode("triggerUserEmail", this.emailHeader.triggerUserEmail);
        }
        writer.writeEndElement("EmailHeader", headerNs);
    }
    if (this.assignmentRuleHeader !== null) {
        writer.writeStartElement("AssignmentRuleHeader", headerNs);
        if (this.assignmentRuleHeader.assignmentRuleId) {
            writer.writeNameValueNode("assignmentRuleId", this.assignmentRuleHeader.assignmentRuleId);
        }
        if (this.assignmentRuleHeader.useDefaultRule) {
            writer.writeNameValueNode("useDefaultRule", this.assignmentRuleHeader.useDefaultRule);
        }
        writer.writeEndElement("AssignmentRuleHeader", headerNs);
    }
    if (this.transferToUserId !== null) {
        writer.writeStartElement("UserTerritoryDeleteHeader", headerNs);
        writer.writeNameValueNode("transferToUserId", this.transferToUserId);
        writer.writeEndElement("UserTerritoryDeleteHeader", headerNs);
    }
    if (this.duplicateRuleHeader !== null) {
        writer.writeStartElement("DuplicateRuleHeader", headerNs);
        if (this.duplicateRuleHeader.allowSave) {
            writer.writeNameValueNode("allowSave", this.duplicateRuleHeader.allowSave);
        }
        if (this.duplicateRuleHeader.includeRecordDetails) {
            writer.writeNameValueNode("includeRecordDetails", this.duplicateRuleHeader.includeRecordDetails);
        }
        if (this.duplicateRuleHeader.runAsCurrentUser) {
            writer.writeNameValueNode("runAsCurrentUser", this.duplicateRuleHeader.runAsCurrentUser);
        }
        writer.writeEndElement("DuplicateRuleHeader", headerNs);
    }
    if (this.debuggingHeader !== null) {
        writer.writeStartElement("DebuggingHeader", headerNs);
        // Write out old style if specified
        if (this.debuggingHeader.debugLevel) {
            writer.writeNameValueNode("debugLevel", this.debuggingHeader.debugLevel);
        }
        // Write out the new style debugging categories and levels
        if (this.debuggingHeader.debugCategories) {
            var categories = this.debuggingHeader.debugCategories;
            for (var i = 0; i < categories.length; i++) {
                var catAndLevel = categories[i].split(",");
                if (catAndLevel.length == 2) {
                    writer.writeStartElement("categories");
                    writer.writeNameValueNode("category", catAndLevel[0]);
                    writer.writeNameValueNode("level", catAndLevel[1]);
                    writer.writeEndElement("categories");
                }
            }
        }
        writer.writeEndElement("DebuggingHeader", headerNs);
    }
    writer.endHeader();
};
sforce.Connection.prototype.namespaceMap = [
{ns:sforce.Connection.prototype.sforceNs, prefix:null},
{ns:sforce.Connection.prototype.sobjectNs, prefix:"ns1"}
        ];
sforce.Connection.prototype.invoke = function(method, args, isArray, callback) {
    return this._invoke(method, args, isArray, callback, this.namespaceMap, this.serverUrl, this.sforceNs, this.sobjectNs);
};
sforce.Connection.prototype._invoke = function(method, args, isArray, callback, namespaces, url, headerNs, sobjectNs) {
    if (callback) {
        if (typeof(callback) == "function") {
        } else {
            if (!callback.onSuccess) {
                throw "onSuccess not defined in the callback";
            }
            if (!callback.onFailure) {
                throw "onFailure not defined in the callback";
            }
        }
    }
    var writer = new sforce.XmlWriter();
    writer.startEnvelope();
    this.writeHeader(writer, headerNs);
    writer.startBody();
    writer.writeStartElement(method);
    for (var i = 0; i<namespaces.length; i++) {
        writer.writeNamespace(namespaces[i].ns, namespaces[i].prefix);
    }
    for (var i = 0; i < args.length; i++) {
        var arg = args[i];
        if (typeof(arg.value) === "undefined") {
            throw "arg " + i + " '" + arg.name + "' not specified";
        }
        if (arg.value !== null) {
            if (arg.isArray && !arg.value.push) {
                throw "arg " + i + " '" + arg.name + "' is an array. But passed in value is not an array";
            }
            if (!arg.isArray && arg.value.push) {
                throw "arg " + i + " '" + arg.name + "' is not an array. But passed in value is an array";
            }
        }
        if (arg.value === null) {
            this.writeOne(writer, arg.name, null, sobjectNs);
        } else if (arg.value.push) { //this is an array
            for (var j = 0; j < arg.value.length; j++) {
                var obj = arg.value[j];
                if (!obj) {
                    throw "Array element at " + j + " is null.";
                }
                this.writeOne(writer, arg.name, obj, sobjectNs);
            }
        } else {
            this.writeOne(writer, arg.name, arg.value, sobjectNs);
        }
    }
    writer.writeEndElement(method);
    writer.endBody();
    writer.endEnvelope();
    if (sforce.debug.trace) {
        sforce.debug.log("Request: server- " + url);
        sforce.debug.logXml(writer.toString());
    }
    var transport = new sforce.SoapTransport();
    return transport.send(url, writer, isArray, callback);
};
/* QueryResultIterator */
sforce.QueryResultIterator = function(queryResult) {
    this.queryResult = queryResult;
    this.index = 0;
    this.records = this.queryResult.getArray("records");
};
sforce.QueryResultIterator.prototype.hasNext = function() {
    if (this.records.length > this.index) {
        return true;
    }
    if (this.queryResult.queryLocator !== null) {
        this.queryResult = sforce.connection.queryMore(this.queryResult.queryLocator);
        this.records = this.queryResult.getArray("records");
        this.index = 0;
    }
    if (this.records.length > this.index) {
        return true;
    } else {
        return false;
    }
};
sforce.QueryResultIterator.prototype.next = function() {
    if (this.records.length > this.index) {
        var result = this.records[this.index];
        this.index++;
        return result;
    } else {
        throw "Index out of bound : " + this.index;
    }
};
/* Email */
sforce.Email = function() {
};
sforce.Email.prototype = new sforce.Xml("messages");
sforce.MassEmailMessage = function() {
};
sforce.MassEmailMessage.prototype = new sforce.Xml("messages");
sforce.MassEmailMessage.prototype._xsiType = "MassEmailMessage";
sforce.SingleEmailMessage = function() {
};
sforce.SingleEmailMessage.prototype = new sforce.Xml("messages");
sforce.SingleEmailMessage.prototype._xsiType = "SingleEmailMessage";
/* ProcessRequest */
sforce.ProcessRequest = function() {
};
sforce.ProcessRequest.prototype = new sforce.Xml("actions");
sforce.ProcessSubmitRequest = function() {
};
sforce.ProcessSubmitRequest.prototype = new sforce.Xml("actions");
sforce.ProcessSubmitRequest.prototype._xsiType = "ProcessSubmitRequest";
sforce.ProcessWorkitemRequest = function() {
};
sforce.ProcessWorkitemRequest.prototype = new sforce.Xml("actions");
sforce.ProcessWorkitemRequest.prototype._xsiType = "ProcessWorkitemRequest";
/* set up connection */
sforce.connection = new sforce.Connection();
var UserContext = (typeof window.UserContext != "undefined") ? window.UserContext : {
    siteUrlPrefix : "",
    getUrl : function (url) {
        // fix URL for sites with prefixes
        if (typeof url == "undefined" || typeof UserContext.siteUrlPrefix == "undefined" || !UserContext.siteUrlPrefix)
            return url;
        if (url.indexOf('/') != 0)
            return url;
        if(url.indexOf(UserContext.siteUrlPrefix) == 0)
            return url;
        return UserContext.siteUrlPrefix + url;
    }
};
if (typeof(__sfdcSiteUrlPrefix) != "undefined") {
    UserContext.siteUrlPrefix = __sfdcSiteUrlPrefix;
}
sforce.connection.serverUrl = (typeof window.UserContext != "undefined") ? UserContext.getUrl("/services/Soap/u/51.0") : "/services/Soap/u/51.0";
if (typeof(__sfdcSessionId) != "undefined") {
    sforce.connection.sessionId = __sfdcSessionId;
}
force-app/main/default/staticresources/connection20.resource-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaticResource xmlns="http://soap.sforce.com/2006/04/metadata">
    <cacheControl>Public</cacheControl>
    <contentType>application/x-javascript</contentType>
</StaticResource>