# Instructions
- NonConformance/GetResolutionById Endpoint
- Get Data to fill the form of NCR being edited
- Receives a NonConformanceId
- NonConformance/GetAllOpenByJobRouterDetailId
- Get Data to fill the NCR list at the tablet, where the operator can see NC Summary and choose to edit/delete
- Receives the JobRouterDetailId
- NonConformance/CreateOrUpdateNonConformance
- Receives the newly created or edited NonConformance and persists form data into DB.
- Receives the form data
- If it's new NonConformance, NonConformanceId should be undefined
- Parts is a list of PartDetailToJobRouterDetailId of the parts being added to that NonConformance.
- Parts that were already there, before edition, should be kept on the list.
- Parts to be added to the NonConformance should be added to the list.
- Parts to be remove of the NonConformance should be out of the list (procedure will know who they are)
- NonConformance/DeleteNonConformance
- Hard Deletes a NonConformance
- Call this when the user click onDelete in the list of NonConformances
- Receives a NonConformanceId
- OperationStep/StartOperation
- Creates SignOffRoundId and associate parts set as NonConformant or Ready by the user in that selection to the SignOffRoundId
- Call this endpoint when user is done with selecting parts and "Start Ready Parts" or "Proceed to Sign-off" (Select Parts Screen Only)
- Part/SetOrUnsetPartsAsReady
- Call this when from Remaining Tab, the user clicks "Set as Ready" or, when in "Ready to Process" tab the user clicks "Remove"
- Parts is a list of PartDetailToJobRouterDetailId of the parts being added to Ready.
- Parts that were already there, before edition, should be kept on the list.
- Parts to become Ready should be added to the list.
- Parts to be set as Not Started should be out of the list (procedure will know who they are)
## Notes:
- Cascade Update of statuses are now made through triggers.
- NCPDTJRD (Insert/Delete) -> PDTJRD
- PDTJRD (Update) -> PD
- PD (Update) -> JR
# Tasks
## Back
### Tables
- [x] Update PartDetailToJobRouterDetailStatus (PDTJRDS) Table:
- [x] Drop Selected, Impediment and Rejected
- [x] Add NonConformant
---
- [x] Update PartDetailToJobRouterDetail (PDTJRD) Table:
- [x] Drop RejectionReasonId FK
- [x] Drop RejectionReasonId
- [x] Drop RejectionDate
---
- [x] Drop RejectionReason (RR) Table
---
- [x] Update NonConformance (NC) Table:
- [x] Drop UK NCR Number/SignOffRoundId
- [x] Drop SignOffRoundId
- [x] Add UK NCR Number
---
- [x] Update NonConformanceDetail (NCD) Table:
- [x] Add WorkCenter field VARCHAR(200) NOT NULL
### Triggers
- [x] Use trigger to update status of partdetailtojobrouterdetail upon insert/deletion of nonConformanceToPartDetailToJobRouterDetail
- [x] "Not Started" if there's no SignOffRoundId or "Ready", if it does.
- [x] Use trigger to update status of partDetail upon status update of partdetailtojobrouterdetail
- [x] Use trigger to update status of jobrouter upon status update of partdetail
- [x] See where PDTJRD/PD/JR statuses are being updated as consequence of prior status update and delete them.
- [x] Part/FinishProcess
- [x] NonConformance/CreateOrUpdateNCR
- [x] sp_UpdatePartsAndAssociations
- [x] sp_SignAndHandleSignature
### Endpoints
- [x] Update NonConformance/GetByStep Endpoint:
- [x] if step = {NonConformanceStepEnum.CREATED_NC}: Make available in the Web only the NCRs that, upon join with NCPDTJRD, the PDTJRD isFinished = 1
---
- [x] Create NonConformance/GetAllOpen Endpoint:
---
- [x] Update NonConformance/GetResolutionById Endpoint -> Rename to GetDetailsById:
- [x] Get WorkCenter from NC Detail, instead of OrganizationAddress
- [x] This will be the endpoint to get ncr on tablet, upon editing existing.
- [x] Join with NCPDTJRD and the PDTJRD isFinished = 0
- [x] Pass JobRouterDetailId to get Pre-filled data, when there's NonConformanceId. (Done by Marissa)
---
**Assigned to:** Alex
- [x] Update OperationStep/GetProcessStep Endpoint:
- [x] Remove "PartsCheckUp" From OperationStepProcess Enum.
- [x] ProcessStep = some PDTJRD Status != Not Started ? DataSheet : Selecting Parts
- [x] Validate:
- [x] More than one Part is sent
- [x] All parts are associated with that user, are either Ready or NonConformant and have no SignOffRoundId
---
- [ ] Create OperationStep/StartOperation Endpoint
- [x] Receives PDTJRDs
- [x] Creates SignOffRoundId
- [x] Insert at SignOffRound
- [x] Update PDTJRD with SignOffRoundId
- [x] Update sp_CreateOrUpdateProcessDataSheetDetail
- Bonus: simplify procedure using merge
---
**Assigned to:** Gabriel
- [x] Update GetUnavailablePartsToSelectAsync Method -> Rename to CheckUnavailableParts
- [x] Receives a list of @PDTJRD [PartDetailToJobRouterDetail] and @UserId
- [x] Returns the serial numbers of that @PDTJRD
WHERE UserId IS NOT NULL AND UserId <> @UserId
---
**Assigned to:** Alex
- [ ] Create Part/SetOrUnsetPartsAsReady Endpoint:
- [x] Receives a list of @PDTJRD Id that should be set as ready
- [x] Validation:
- [x] Validate that all PDTJRD in that list have UserId IS NULL OR UserId = @UserId
- [x] Use GetUnavailablePartsToSelectAsync
- [x] Merges with PDTJRD table.
- [x] When Matched -> Set PDTJRD status as Ready
- [x] When not Matched by Source
AND JobRouterDetailId = @JobRouterDetailId
AND SignOffRoundId IS NULL
AND UserId IS NOT NULL
AND Status = Ready
-> Set PDTJRD status as Not Started.
---
**Assigned to:** Gabriel
- [ ] Update NonConformance/CreateOrUpdateNonConformance Endpoint:
- [ ] Validation:
- [x] Validate that PDTJRD list has at least one Id. PDTJRD.Any() && !Any(q => !q.Id.IsValid())
- [x] Validate that all PDTJRD in that list have UserId IS NULL OR UserId = @UserId
- [x] Use GetUnavailablePartsToSelectAsync
- [x] Description Code/ Cause Code/ Inspection Step/ NCR Number/ Work Center are mandatory.
- [x] Validate that NCR Number is a valid number, less than 7 digits long.
- [x] If creating a NonConformance (NonConformanceId null ou Guid.Empty) and NCR Number passed validation above,
check in database if exists a register in NonConformance with that same NCR Number. If exists, Request Status fail
- [x] NCR Number cannot be changed once NC is created.
---
**Assigned to:** Alex
- [x] Create NonConformance/Delete Endpoint:
- [x] Validation:
- [x] Ensure that the PDTJRDs of that NC are associated with the user deleting it.
- [x] Ensure that the PDTJRDs of that NC are all isFinished = 0 AND that it has no record in Disposition Table.
* For Continuity Approach "Accept as Is" doesn't remove parts records from NCPDTJRD and set IsFinished = 0
- [x] Procedure:
- [x] NCPDTJRD with NonConformanceId = @NonConformanceId
- [x] NC Detail with NonConformanceId = @NonConformanceId
- [x] NC with NonConformanceId = @NonConformanceId
* Receives @NonConformanceId
* Hard Delete
---
- [x] Update FinishProcess Endpoint:
- [x] Remove SignOffRoundId if Part is @NotStarted
---
- [x] Drop Part/SelectPartsForProcess
- [x] Drop Part/Unblock
- [x] Drop Part/CheckUpParts
- [x] Drop Part/CreateOrUpdateImpediments
### Others
---
- [x] Update PartDetailToJobRouterDetailType
- [x] drop rejection reason id
- [x] drop rejection date
---
- [x] drop sp_CreateOrUpdateImpediments
- [x] drop sp_UnblockPartsAndAssociations
---
- [x] drop PartImpedimentDTO
- [x] drop PartDetailToJobRouterDetailDTO
---
- [x] Revise References to Selected/Impediment/Rejected
- [x] Revisit code that uses JobRouterDetailOperatorStatusEnum
* Roughly:
- NonConformant + IsFinished 1 = Rejected
- NonConformant + IsFinished 0 = Impediment
- IsFinished is a flag from PDTJRD that is set to 1 at the end of FinishTheProcess and it's 0 until then.
---
**Assigned to:** Saturnino
- [ ] Review logic of GetOperationStepStatus at JobRouterDetailService
---
Bonus:
- Create jobRouterDetailController and move some endpoints to there.
## Front
- [ ] Toggle text between "Start Ready Parts" become "Proceed to Sign-off" in "Select" screen, depending if all parts are NCR or not and redirecting to "Finish the Process" if it's "Proceed to Sign-off".
- [ ] Remove "PartsCheckUp" From OperationStepProcess Enum.
- [ ] Remove References to RejectionReason.
- [ ] Update PartDetailToJobRouterDetailStatuses.
- [ ] Remove Endpoints
- [ ] Part/SelectPartsForProcess
- [ ] Part/Unblock
- [ ] Part/CheckUpParts
- [ ] Part/CreateOrUpdateImpediments
- [ ] Remove Components
- Parts Check-up