DPR Import Issue

DPR Import Issue

Support Importing Job Work Slitting Issues (Separate Method)

This plan details the changes required to implement a separate, dedicated flow for importing Job Work slitting issues for production plans where PlanType is “S” (slitting) and jwPartyId is filled.

Proposed Design & Components

We will create a separate frontend page and separate backend methods to keep the Job Work import logic isolated from Inhouse slitting import:

  • Web UI Page: PrdnPlan1ImportJobworkSlittingIssue.razor
  • Controller Endpoints: ImportJobworkSlittingIssue & ImportJobworkSlittingIssueDownloadModel
  • Repository Method: ImportJobworkSlittingIssue in IPrdnPlanRepository & PrdnPlanRepository
  • Service Methods: ImportJobworkSlittingIssue & ImportJobworkSlittingIssueDownloadModel in IPrdnPlanService & PrdnPlanService

Proposed Changes

1. Web UI

[MODIFY] PrdnPlan1Index.razor

  • Update the button rendering so that:
    • If JwPartyId is empty and lineCnt == 0, show the button pointing to the Inhouse slitting import page.
    • If JwPartyId is filled and lineCnt == 0, show the button pointing to the new Job Work slitting import page (prdnplan1importjobworkslittingissue/{mainid}).
                    @if(lineCnt == 0)
                    {
                        @if(string.IsNullOrEmpty(_PrdnPlan.JwPartyId))
                        {
                            <MudButton Href=@($"prdnplan1importslittingissue/{@Convert.ToInt32(mainid)}") Variant="Variant.Filled"
                            Color="Color.Info" StartIcon="@Icons.Material.Filled.Upload">Import Issue</MudButton>
                        }
                        else
                        {
                            <MudButton Href=@($"prdnplan1importjobworkslittingissue/{@Convert.ToInt32(mainid)}") Variant="Variant.Filled"
                            Color="Color.Info" StartIcon="@Icons.Material.Filled.Upload">Import Issue</MudButton>
                        }
                    }

[NEW] PrdnPlan1ImportJobworkSlittingIssue.razor

  • Create a new Blazor page at route /prdnplan1importjobworkslittingissue/{mainid}.
  • It will upload the Excel sheet named ImportJobworkSlittingIssue.xlsx.
  • It will invoke _IPrdnPlanService.ImportJobworkSlittingIssue and download the generated model file via _IPrdnPlanService.ImportJobworkSlittingIssueDownloadModel.

2. Service Layer

[MODIFY] IPrdnPlanService.cs

  • Add declarations for:
    • Task<string> ImportJobworkSlittingIssue(string? dbname, string xlFile, string? yearLabel, string? userName, int mainId)
    • Task<string> ImportJobworkSlittingIssueDownloadModel(string? dbname)

[MODIFY] PrdnPlanService.cs

  • Implement ImportJobworkSlittingIssue and ImportJobworkSlittingIssueDownloadModel to call the backend API endpoints.

3. Backend API Layer

[MODIFY] PrdnPlanController.cs

  • Implement ImportJobworkSlittingIssue and ImportJobworkSlittingIssueDownloadModel endpoints.
  • Read uploaded Excel worksheet data.
  • Call repository ImportJobworkSlittingIssue method.
  • Generate an output Excel sheet featuring Job Work validation error codes (A, B, C, E, F, G, H, I).

[MODIFY] IPrdnPlanRepository.cs

  • Add declaration for: Task<Tuple<List<PrdnPlan1>, string>> ImportJobworkSlittingIssue(List<PrdnPlan1> listData, string dbname, string yearLabel, string userName, string yearPlanNo, string jwPartyId, string unitCode);

[MODIFY] PrdnPlanRepository.cs

  • Implement ImportJobworkSlittingIssue:
    • Create #temp table.
    • Insert imported items into #temp.
    • Update temp item values from jobwork1 (instead of DprBill1, DprStocks, etc.).
    • Get balance qty/qty1 directly from jobwork1.
    • Perform SQL validations:
      • A: Invalid Trn Id (not in jobwork1).
      • B: Already linked to a plan.
      • C: Exists in short-closed.
      • E: Coil size for width is 0 or null.
      • F: Width/item combination is not same across all rows.
      • G: Duplicate Ref Trn Id in the sheet.
      • H: Coil number is empty in jobwork1.
      • I: Jobwork Party / Unit does not match current plan’s header.
    • When successfully imported:
      • Insert records into PrdnPlan1 table.
      • Update jobwork1.planTrnId to point to the created plantrnid for each imported record.
      • Insert Log entry.