database:procedures:pears_iqxpopulateaccountstatisticsiqac



pears.IQXPopulateAccountStatisticsIQAc

Generated schema reference. Regenerate this page from the SQL unload; keep hand-maintained business notes in the narrative namespace.

CREATE PROCEDURE "pears"."IQXPopulateAccountStatisticsIQAc"( IN @FromDate DATE,IN @ToDate DATE,IN @TransferBatch INTEGER,IN @AccountFilter CHAR(30),IN @DivFilter CHAR(30),IN @DeptFilter CHAR(30) ) 
BEGIN
  --
  --
  --
  DECLARE @AnalysisBatch INTEGER;
  DECLARE @DoNothing SMALLINT;
  DECLARE @AccountFilterLike CHAR(40);
  DECLARE @DivFilterLike CHAR(40);
  DECLARE @DeptFilterLike CHAR(40);
  DECLARE @TimeSheetLines INTEGER;
  --
  --
  -- create temporary table (DO NOT ALTER THIS SECTION)
  --
  --
  --
  --
  -- work out the like clause if any 
  --
  --
  IF(@AccountFilter IS NULL OR "trim"(@AccountFilter) = '') THEN
    SET @AccountFilterLike = '%'
  ELSE
    SET @AccountFilterLike = "string"('[',"trim"(@AccountFilter),']%')
  END IF;
  IF(@DivFilter IS NULL OR "trim"(@DivFilter) = '') THEN
    SET @DivFilterLike = '%'
  ELSE
    SET @DivFilterLike = "string"('[',"trim"(@DivFilter),']%')
  END IF;
  IF(@DeptFilter IS NULL OR "trim"(@DeptFilter) = '') THEN
    SET @DeptFilterLike = '%'
  ELSE
    SET @DeptFilterLike = "string"('[',"trim"(@DeptFilter),']%')
  END IF;
  --
  --
  -- Are there any Timesheet lines that cover the search criocumentdateteria, if not abort
  --
  --
  IF "Isnull"(@TransferBatch,0) > 0 THEN
    SELECT "count"()
      INTO @TimeSheetLines
      FROM "temptimesheetline" KEY JOIN "temptimesheet" AS "t" LEFT OUTER JOIN("placement" KEY JOIN "employment" KEY JOIN "company")
      WHERE "isnull"("t"."TransferBatch",0) > 0 AND "company"."clientcode" LIKE @AccountFilterLike
      AND "isnull"("t"."AnalysisBatch",0) = 0
      AND "isnull"("company"."divisionid",'') LIKE @DivFilterLike
      AND "isnull"("placement"."departmentid",'') LIKE @DeptFilterLike
  ELSE
    SELECT "count"()
      INTO @TimeSheetLines
      FROM "temptimesheetline" KEY JOIN "temptimesheet" AS "t" LEFT OUTER JOIN("placement" KEY JOIN "employment" KEY JOIN "company")
      WHERE "company"."clientcode" LIKE @AccountFilterLike AND "isnull"("t"."AnalysisBatch",0) = 0
      AND "date"("t"."WhenEntered") BETWEEN @FromDate AND @ToDate
      AND "isnull"("company"."divisionid",'') LIKE @DivFilterLike
      AND "isnull"("placement"."departmentid",'') LIKE @DeptFilterLike
  END IF;
  IF "isnull"(@TimeSheetLines,0) = 0 THEN RETURN END IF;
  --
  --
  -- Get the next analysis batch number
  --
  --
  BEGIN
    UPDATE "params" SET "LastAnalysisBatch" = "isnull"("LastAnalysisBatch",0)+1;
    SELECT "LastAnalysisBatch" INTO @AnalysisBatch FROM "params";
    commit WORK
  END;
  -- Should only be needed if debugging - table should not exist
  BEGIN
    DROP TABLE "pears"."TEMPAccountsStatistics"
  exception
    WHEN others THEN SET @DoNothing = 1
  END;
  --
  -- create temporary table (DO NOT ALTER THIS SECTION)
  --
  CREATE LOCAL TEMPORARY TABLE "pears"."TEMPAccountsStatistics"(
    "AccountsStatisticsID" CHAR(20) NOT NULL,
    "AccountingDate" DATE NULL,
    "Amount" NUMERIC(12,2) NULL,
    "Description" CHAR(100) NULL,
    "Type" CHAR(20) NULL,
    "NominalCodeSegment1" CHAR(12) NULL,
    "NominalCodeSegment2" CHAR(12) NULL,
    "NominalCodeSegment3" CHAR(12) NULL,
    "NominalCodeSegment4" CHAR(12) NULL,
    "NominalCodeSegment5" CHAR(12) NULL,
    "PayrollCompany" CHAR(10) NULL,
    "DivisionAnalysisCode" CHAR(50) NULL,
    "DepartmentAnalysisCode" CHAR(50) NULL,
    "TimesheetAnalysisCode" CHAR(50) NULL,
    "TimesheetConsultantAnalysisCode" CHAR(50) NULL,
    "PlacementConsultantAnalysisCode" CHAR(50) NULL,
    "vacancyConsultantAnalysisCode" CHAR(50) NULL,
    "ConsultantAnalysisCode" CHAR(50) NULL,
    "ShiftConsultantAnalysisCode" CHAR(50) NULL,
    "ClientAccountCode" CHAR(20) NULL,
    "CompanyID" CHAR(20) NULL,
    "PersonID" CHAR(20) NULL,
    "TempTimesheetID" CHAR(20) NULL,
    "TempTimesheetLineID" CHAR(20) NULL,
    "TempDeskID" CHAR(20) NULL,
    "TimeSheetStaffID" CHAR(20) NULL,
    "VacancyStaffID" CHAR(20) NULL,
    "PlacementStaffID" CHAR(20) NULL,
    "PayrollNumber" CHAR(20) NULL,
    "PersonName" CHAR(50) NULL,
    "CompanyName" CHAR(50) NULL,
    "TimesheetSerial" CHAR(20) NULL,
    "TimesheetLineNumber" SMALLINT NULL,
    "DocumentNumber" CHAR(20) NULL,
    "DocumentID" CHAR(20) NULL,
    "DocumentDate" DATE NULL,
    "JournalLineNumber" SMALLINT NULL,
    "SalesOrCost" CHAR(1) NULL,
    "Currency" CHAR(3) NULL,
    "PlacementID" CHAR(20) NULL,
    "VacancyID" CHAR(20) NULL,
    "TempShiftID" CHAR(20) NULL,
    "TempShiftDate" DATE NULL,
    "DocumentLineType" CHAR(1) NULL,
    "Quantity" DOUBLE NULL,
    "JournalClass" CHAR(20) NULL,
    "Unitdescription" CHAR(50) NULL,
    "PayBandPayrollFlag" CHAR(10) NULL, // payrollflag
    "IsExpenses" SMALLINT NULL,
    "TaxMethod" INTEGER NULL,
    "Paid" DOUBLE NULL,
    "HolPay" DOUBLE NULL,
    "HolLiab" DOUBLE NULL,
    "AWRHolRate" DOUBLE NULL,
    "Levy" DOUBLE NULL,
    "HolLiabNI" DOUBLE NULL,
    "ActualNI" DOUBLE NULL,
    "Pension" DOUBLE NULL,
    "Statutory" DOUBLE NULL,
    "Charged" DOUBLE NULL,
    "TempdeskAnalysiscode" CHAR(20) NULL,
    "GoodsAmount" NUMERIC(12,2) NULL,
    "PriceEach" DOUBLE NULL,
    "VatAmount" DOUBLE NULL,
    "VatCode" CHAR(3) NULL,
    "JournalNominalCode" CHAR(12) NULL,
    "PayrollIdentifier" CHAR(1) NULL,
    "Period" INTEGER NULL,
    "TimesheetSupplierCode" CHAR(12) NULL,
    "ShiftAnalysisCode" CHAR(20) NULL,
    "ShiftReferenceCode" CHAR(20) NULL,
    "ShiftSerialNumber" BIGINT NULL,
    "TempShiftTypeID" CHAR(20) NULL,
    "AnalysisBatch" INTEGER NULL,
    "TransferBatch" INTEGER NULL,
    "EmploymentPosition" CHAR(50) NULL,
    "EssentialSkillGradeID" CHAR(4) NULL,
    "vacancytheirref" CHAR(50) NULL,
    "vacancyrefcode" CHAR(20) NULL,
    "CustomString1" CHAR(40) NULL,
    "CustomString2" CHAR(40) NULL,
    "CustomString3" CHAR(40) NULL,
    "CustomString4" CHAR(40) NULL,
    "CustomString5" CHAR(40) NULL,
    "CustomDouble1" DOUBLE NULL,
    "CustomDouble2" DOUBLE NULL,
    "CustomDouble3" DOUBLE NULL,
    "CustomDouble4" DOUBLE NULL,
    "CustomDouble5" DOUBLE NULL,
    PRIMARY KEY("AccountsStatisticsID"),
    ) ON commit DELETE ROWS;
  CREATE INDEX "a" ON "pears"."TEMPAccountsStatistics"("TempTimesheetID");
  CREATE INDEX "b" ON "pears"."TEMPAccountsStatistics"("PersonID");
  CREATE INDEX "c" ON "pears"."TEMPAccountsStatistics"("PayrollNumber");
  CREATE INDEX "d" ON "pears"."TEMPAccountsStatistics"("TempTimesheetLineID");
  CREATE INDEX "e" ON "pears"."TEMPAccountsStatistics"("NominalCodeSegment1");
  CREATE INDEX "f" ON "pears"."TEMPAccountsStatistics"("NominalCodeSegment2");
  CREATE INDEX "g" ON "pears"."TEMPAccountsStatistics"("NominalCodeSegment3");
  CREATE INDEX "h" ON "pears"."TEMPAccountsStatistics"("NominalCodeSegment4");
  CREATE INDEX "i" ON "pears"."TEMPAccountsStatistics"("NominalCodeSegment5");
  CREATE INDEX "j" ON "pears"."TEMPAccountsStatistics"("PlacementID");
  CREATE INDEX "l" ON "pears"."TEMPAccountsStatistics"("TempTimesheetLineID");
  CREATE INDEX "k" ON "pears"."TEMPAccountsStatistics"("DocumentID");
  BEGIN atomic
    --
    --
    --  Update the Temptimesheet lines with the new Analysis batch
    --  if transfer batch > 0 then use this as a filter, ie records in transfer batch will mirror the transfer batch number
    --  if transferbatch = 0, then pick up journal records in the date range @PeriodFrom to @periodto
    --
    IF "Isnull"(@TransferBatch,0) > 0 THEN
      UPDATE "Temptimesheet" AS "t"
        SET "t"."AnalysisBatch" = @AnalysisBatch FROM
        "temptimesheet" AS "t" LEFT OUTER JOIN("placement" KEY JOIN "employment" KEY JOIN "company")
        WHERE "isnull"("t"."TransferBatch",0) = @transferbatch AND "company"."clientcode" LIKE @AccountFilterLike
        AND "isnull"("t"."AnalysisBatch",0) = 0
        AND "isnull"("company"."divisionid",'') LIKE @DivFilterLike
        AND "isnull"("placement"."departmentid",'') LIKE @DeptFilterLike
    ELSE
      UPDATE "Temptimesheet" AS "t"
        SET "t"."AnalysisBatch" = @AnalysisBatch FROM
        "temptimesheet" AS "t" LEFT OUTER JOIN("placement" KEY JOIN "employment" KEY JOIN "company")
        WHERE "company"."clientcode" LIKE @AccountFilterLike AND "isnull"("t"."AnalysisBatch",0) = 0
        AND "date"("t"."whenentered") BETWEEN @FromDate AND @ToDate
        AND "isnull"("company"."divisionid",'') LIKE @DivFilterLike
        AND "isnull"("placement"."departmentid",'') LIKE @DeptFilterLike
    END IF;
    --
    --
    --  Populate temporary table with Data, fixed data first. Should not needs to change this section
    --
    --  
    --
    --
    -- timesheet line related details, dont change this section
    --
    --
    INSERT INTO "TEMPAccountsStatistics"( "AccountsStatisticsID",
      "TemptimesheetID","TimesheetSerial","TimesheetLineNumber","Personid","PayrollNumber","Placementid","Tempdeskid",
      "TimesheetAnalysisCode","tempshiftid","paid","PayBandPayRollFlag","IsExpenses","charged","AnalysisBatch",
      "TaxMethod","TempTimesheetLineID","Period","Quantity",
      "Unitdescription","accountingdate","transferbatch" ) 
      SELECT "uniquekey"("number"()),
        "tl"."TempTimesheetID",
        "t"."SerialNumber",
        "tl"."LineNumber",
        "t"."personid",
        "t"."payrollnumber",
        "t"."PlacementID",
        "t"."TempDeskID",
        "t"."AnalysisCode",
        "tl"."TempShiftID",
        "isnull"("tl"."unitspaid"*"tl"."payrate",0) AS "paid",
        "PayrollFlag",
        "ISNULL"("IsExpenses",0),
        "isnull"("tl"."UnitsCharged"*"tl"."ChargeRate",0) AS "charged",
        "AnalysisBatch","TaxMethod","tl"."TempTimesheetLineID","Period",
        "isnull"("unitspaid",0),
        "b"."unit","whenentered","t"."transferbatch"
        FROM "TempTimesheetLine" AS "tl"
          KEY JOIN("TempTimesheet" AS "t","temppayband" AS "b") WHERE "analysisbatch" = @AnalysisBatch;
    --
    -- 
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "journallinenumber" = "j"."linenumber","amount" = "j"."amount",
      "goodsamount" = "j"."goodsamount","JournalNominalCode" = "j"."NominalCode",
      "journalclass" = "j"."journalclass","priceeach" = "j"."priceeach","vatamount" = "j"."vatamount","vatcode" = "j"."vatcode",
      "description" = "j"."description","documentid" = "j"."documentid" FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "iqacjournal" AS "j" ON "xref" = 'T' AND "xrefid" = "tas"."temptimesheetlineid";
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "documentnumber" = "ourref","DocumentDate" = "d"."Documentdate" FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "iqacdocument" AS "d" ON "tas"."documentid" = "d"."documentid" AND "d"."ledgerid" = 'SALES';
    --
    -- Person ID when no timesheet line
    --
    -- 
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "vacancyid" = "v"."vacancyid","vacancytheirref" = "v"."theirref","vacancyrefcode" = "v"."refcode" FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "placement" AS "p" ON "tas"."placementID" = "p"."placementID" KEY JOIN("vacancy" AS "v","employment" AS "e");
    --
    --
    -- Employment Position, Placement Temp, Currency
    --
    -- 
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "EmploymentPosition" = "Employment"."Position",
      "currency" = "isnull"("tas"."currency","p"."currency") FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "placement" AS "p" ON "tas"."placementID" = "p"."placementID"
      ,"placement" AS "p" KEY JOIN "employment";
    --
    -- Employment Position, Placement Temp, Currency
    --
    -- 
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "Period" = "t"."Period","payrollidentifier" = "t"."payrollidentifier","TimesheetSupplierCode" = "t"."SupplierCode" FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "TempTimesheet" AS "t" ON "tas"."TempTimesheetID" = "t"."TempTimesheetID";
    --
    -- Shift Fields
    --
    -- 
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "ShiftReferenceCode" = "t"."referencecode","ShiftSerialNumber" = "p"."shiftserialnumber","tempshiftdate" = "t"."shiftdate",
      "Shiftanalysiscode" = "t"."AnalysisCode","EssentialSkillGradeID" = "t"."EssentialSkillGradeID",
      "TempShifttypeid" = "t"."TempShifttypeid","shiftconsultantAnalysisCode" = (SELECT "s"."analysiscode" FROM "staff" AS "s" WHERE "s"."staffid" = "t"."staffid") FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "TempShift" AS "t" ON "tas"."TempShiftID" = "t"."TempShiftID"
      ,"TempShift" AS "t" KEY JOIN "TempShiftplan" AS "p";
    --
    --
    -- Person names 
    --
    -- 
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "personname" = "p"."name" FROM "TEMPAccountsStatistics" AS "tas" JOIN "person" AS "p" ON "tas"."personid" = "p"."personid";
    --
    --
    -- Company Details for placement related invoices
    --
    --
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "CompanyID" = "c"."CompanyID",
      "CompanyName" = "c"."Name",
      "ClientAccountCode" = "c"."clientcode" FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "placement" AS "p" ON "tas"."placementID" = "p"."placementID"
      KEY JOIN "vacancy" KEY JOIN "employment" AS "e" KEY JOIN "company" AS "c";
    --
    --
    --
    -- Placement Nominal  Codes
    --
    --
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "NominalCodeSegment1" = (SELECT FIRST "nominalcode"
        FROM(SELECT top 1 "nominalcode" FROM "placementanalysis" AS "pl1"
              ,(SELECT "count"() AS "plc" FROM "placementanalysis" AS "pl" WHERE "pl"."placementid" = "tas"."placementid") AS "t2"
            WHERE "pl1"."placementid" = "tas"."placementid" AND "plc" > 0 ORDER BY "whenauthorised" ASC) AS "t1" ORDER BY "nominalcode" DESC) WHERE "placementid" IS NOT NULL;
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "NominalCodeSegment2"
       = (SELECT FIRST "nominalcode"
        FROM(SELECT top 2 "nominalcode" FROM "placementanalysis" AS "pl1"
              ,(SELECT "count"() AS "plc" FROM "placementanalysis" AS "pl" WHERE "pl"."placementid" = "tas"."placementid") AS "t2"
            WHERE "pl1"."placementid" = "tas"."placementid" AND "plc" > 1 ORDER BY "whenauthorised" ASC) AS "t1" ORDER BY "nominalcode" DESC) WHERE "placementid" IS NOT NULL AND "NominalCodeSegment1" IS NOT NULL;
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "NominalCodeSegment3" = (SELECT FIRST "nominalcode"
        FROM(SELECT top 3 "nominalcode" FROM "placementanalysis" AS "pl1"
              ,(SELECT "count"() AS "plc" FROM "placementanalysis" AS "pl" WHERE "pl"."placementid" = "tas"."placementid") AS "t2"
            WHERE "pl1"."placementid" = "tas"."placementid" AND "plc" > 2 ORDER BY "whenauthorised" ASC) AS "t1" ORDER BY "nominalcode" DESC) WHERE "placementid" IS NOT NULL AND "NominalCodeSegment2" IS NOT NULL;
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "NominalCodeSegment4" = (SELECT FIRST "nominalcode"
        FROM(SELECT top 4 "nominalcode" FROM "placementanalysis" AS "pl1"
              ,(SELECT "count"() AS "plc" FROM "placementanalysis" AS "pl" WHERE "pl"."placementid" = "tas"."placementid") AS "t2"
            WHERE "pl1"."placementid" = "tas"."placementid" AND "plc" > 3 ORDER BY "whenauthorised" ASC) AS "t1" ORDER BY "nominalcode" DESC) WHERE "placementid" IS NOT NULL AND "NominalCodeSegment3" IS NOT NULL;
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "NominalCodeSegment5" = (SELECT FIRST "nominalcode"
        FROM(SELECT top 5 "nominalcode" FROM "placementanalysis" AS "pl1"
              ,(SELECT "count"() AS "plc" FROM "placementanalysis" AS "pl" WHERE "pl"."placementid" = "tas"."placementid") AS "t2"
            WHERE "pl1"."placementid" = "tas"."placementid" AND "plc" > 4 ORDER BY "whenauthorised" ASC) AS "t1" ORDER BY "nominalcode" DESC) WHERE "placementid" IS NOT NULL AND "NominalCodeSegment4" IS NOT NULL;
    --
    --
    -- StaffID 
    --
    --
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "TimesheetStaffID" = (SELECT "staffid" FROM "temptimesheet" AS "t" WHERE "t"."temptimesheetid" = "tas"."temptimesheetid"),
      "PlacementStaffID" = (SELECT "staffid" FROM "placement" AS "p" WHERE "p"."placementid" = "tas"."placementid"),
      "vacancyStaffID" = (SELECT "staffid" FROM "vacancy" AS "v" WHERE "v"."vacancyid" = "tas"."vacancyid");
    --
    --
    -- Analysis Codes  
    --
    --
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "DivisionAnalysisCode" = "isnull"((SELECT "Analysis" FROM "Division" KEY JOIN "TempDesk" WHERE "TempDesk"."TempDeskID" = "tas"."TempDeskID"),
      (SELECT "Analysis" FROM "Division" KEY JOIN "Company" WHERE "tas"."CompanyID" = "Company"."CompanyID")),
      "DepartmentAnalysisCode" = (SELECT "Analysis" FROM "Department" KEY JOIN "Placement" WHERE "Placement"."PlacementID" = "tas"."PlacementID"),
      "TempdeskAnalysiscode" = "isnull"((SELECT "Defanalysiscode" FROM "TempDesk" WHERE "TempDesk"."TempDeskID" = "tas"."TempDeskID"),''),
      "VacancyConsultantAnalysisCode" = (SELECT "s"."analysiscode" FROM "staff" AS "s" WHERE "tas"."vacancystaffid" = "s"."staffid"),
      "PlacementConsultantAnalysisCode" = (SELECT "s"."analysiscode" FROM "staff" AS "s" WHERE "tas"."placementstaffid" = "s"."staffid"),
      "TimeSheetConsultantAnalysisCode" = (SELECT "s"."analysiscode" FROM "staff" AS "s" WHERE "tas"."timesheetstaffid" = "s"."staffid"),
      "ConsultantAnalysisCode" = (SELECT "s"."analysiscode" FROM "person" KEY JOIN "staff" AS "s" WHERE "tas"."personid" = "person"."personid");
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "personname" = "p"."name" FROM "TEMPAccountsStatistics" AS "tas" JOIN "person" AS "p" ON "tas"."personid" = "p"."personid";
    --
    --
    -- Now the extras which WILL different per site
    --
    --un
    --
    -- Pensions, Holiday, Levy 
    --
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "HolPay" = IF "IncludeInHolidayPay" = '1' THEN "paid" ELSE 0 endif FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "temptimesheetline" AS "l" ON("l"."temptimesheetlineid" = "tas"."temptimesheetlineid"),"temptimesheetline" AS "l" KEY JOIN "temppayband" WHERE "tas"."temptimesheetlineid"
       = "l"."temptimesheetlineid";
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "AWRHolRate"
       = IF "isnull"("AWRWasInvolved",0) = 0 THEN
        "isnull"((SELECT FIRST("ExtraHols"/(52-"ExtraHols")) FROM "AWRJobMaster" AS "a" WHERE "a"."placementid" = "tas"."placementid"),0) ELSE 0 endif FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "temptimesheet" AS "t" ON "tas"."temptimesheetid" = "t"."temptimesheetid";
    --  update "TEMPAccountsStatistics" as "tas" set "HolLiab" = "PayRate"*"UnitsPaid" from
    --  "temptimesheetline" key join "temppayband" as "b" where "b"."description" like '%HP';
    --  update "TEMPAccountsStatistics" as "tas" set "Levy" = "isnull"((select "sum"("amount") from "accord"."IQXJournalHistory" where "trim"("cosegmenta") = "timesheetserial" and("wtcode" = '603950')),0);
    --  update "TEMPAccountsStatistics" as "tas" set "HolLiabNI" = "iqmoneyround"("HolLiab"*.1);
    --  update "TEMPAccountsStatistics" as "tas" set "ActualNI" = "isnull"((select "sum"("amount") from "accord"."IQXJournalHistory" where "trim"("cosegmenta") = "timesheetserial" and(("wtcode" = '603000') or("wtcode" = '603500'))),0);
    --  update "TEMPAccountsStatistics" as "tas" set "Pension" = "isnull"((select "sum"("amount") from "accord"."iQXJournalHistory" where "trim"("cosegmenta") = "timesheetserial" and("wtcode" = '540620')),0);
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "Statutory" = 0;
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "Charged" = "Charged"+"Pension"
      WHERE EXISTS(SELECT * FROM "placement" AS "p" KEY JOIN "employment" KEY JOIN "companyaccount" WHERE "p"."placementid" = "tas"."placementid" AND "ERNIoninvoice" = 1)
      AND EXISTS(SELECT * FROM "temptimesheetline" AS "l" WHERE "l"."temptimesheetlineid" = "tas"."temptimesheetlineid" AND "l"."linenumber" = 1);
    --
    -- questions etc, WILL different per site
    --
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomDouble1" = (SELECT("unitscharged"*"chargerate")-("unitspaid"*"payrate") FROM "temptimesheetline" AS "t" WHERE "tas"."temptimesheetlineid" = "t"."temptimesheetlineid");
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomDouble2" = (("paid"/"charged")*100) WHERE "charged" <> 0;
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomDouble3" = "paid";
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomDouble4" = "charged";
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomDouble5" = 0;
    UPDATE "TEMPAccountsStatistics" SET "type" = '';
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomString1" = (SELECT "department"."name" FROM "placement" KEY JOIN "department" WHERE "placement"."placementid" = "tas"."placementid");
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomString2" = (SELECT "staff"."userid" FROM "staff" WHERE "staff"."staffid" = "tas"."vacancystaffid");
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomString3" = (SELECT "keyname" FROM "person" WHERE "person"."personid" = "tas"."personid");
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomString4" = (SELECT "surname" FROM "person" WHERE "person"."personid" = "tas"."personid");
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomString5" = (SELECT "forenames" FROM "person" WHERE "person"."personid" = "tas"."personid");
    --
    --
    -- Finally Insert the temp table into the Main Accounts Stats table - Do not modify
    --
    --
    --
    --	
    -- delete from "TEMPAccountsStatistics";
    --
    --
    -- Insert the Analysis Batch into the batch transfer table- Do not modify
    INSERT INTO "IQXAccountsStatistics"
      ( "IQXAccountsStatisticsID","AccountingDate","Amount","Description","Type",
      "NominalCodeSegment1","NominalCodeSegment2","NominalCodeSegment3","NominalCodeSegment4","NominalCodeSegment5","PayrollCompany",
      "DivisionAnalysisCode","DepartmentAnalysisCode","TimesheetAnalysisCode","TimesheetConsultantAnalysisCode","VacancyConsultantAnalysisCode","PlacementConsultantAnalysisCode","ConsultantAnalysisCode",
      "ClientAccountCode","CompanyID","PersonID",
      "TempTimesheetID","TempTimesheetLineID","TempDeskID","VacancyStaffID","PlacementStaffid","TimeSheetStaffid","PayrollNumber","PersonName","CompanyName","TimesheetSerial",
      "TimesheetLineNumber","DocumentNumber","DocumentID","DocumentDate","JournalLineNumber","SalesOrCost","Currency","PlacementID","VacancyID","TempShiftID","tempshiftdate","DocumentLineType",
      "JournalClass","Quantity","Unitdescription","TaxMethod","PaID","HolPay","HolLiab","AWRHolRate","Levy",
      "HolLiabNI","ActualNI","Pension","Statutory","Charged","TempdeskAnalysiscode","GoodsAmount","priceEach","VatAmount","VatCode","JournalNominalCode",
      "PayrollIdentifier","Period","TimesheetSupplierCode","ShiftAnalysisCode","ShiftReferenceCode","ShiftSerialNumber","TempShiftTypeID",
      "CustomString1","CustomString2","CustomString3","CustomString4","CustomString5","CustomDouble1","CustomDouble2","CustomDouble3",
      "CustomDouble4","CustomDouble5","AnalysisBatch","EmploymentPosition","EssentialSkillGradeID","PayBandPayrollFlag","IsExpenses","VacancyTheirRef","VacancyRefcode","ShiftConsultantAnalysisCode",
      "transferbatch" ) 
      SELECT "AccountsStatisticsID","AccountingDate","Amount","Description","Type",
        "NominalCodeSegment1","NominalCodeSegment2","NominalCodeSegment3","NominalCodeSegment4","NominalCodeSegment5","PayrollCompany",
        "DivisionAnalysisCode","DepartmentAnalysisCode","TimesheetAnalysisCode","TimesheetConsultantAnalysisCode","VacancyConsultantAnalysisCode","PlacementConsultantAnalysisCode","ConsultantAnalysisCode",
        "ClientAccountCode","CompanyID","PersonID",
        "TempTimesheetID","TempTimesheetLineID","TempDeskID","VacancyStaffID","PlacementStaffid","TimeSheetStaffid","PayrollNumber","PersonName","CompanyName","TimesheetSerial",
        "TimesheetLineNumber","DocumentNumber","DocumentID","DocumentDate","JournalLineNumber","SalesOrCost","Currency","PlacementID","VacancyID","TempShiftID","tempshiftdate","DocumentLineType",
        "JournalClass","Quantity","Unitdescription","TaxMethod","PaID","HolPay","HolLiab","AWRHolRate","Levy",
        "HolLiabNI","ActualNI","Pension","Statutory","Charged","TempdeskAnalysiscode","GoodsAmount","priceEach","VatAmount","VatCode","JournalNominalCode",
        "PayrollIdentifier","Period","TimesheetSupplierCode","ShiftAnalysisCode","ShiftReferenceCode","ShiftSerialNumber","TempShiftTypeID",
        "CustomString1","CustomString2","CustomString3","CustomString4","CustomString5","CustomDouble1","CustomDouble2","CustomDouble3",
        "CustomDouble4","CustomDouble5","AnalysisBatch","EmploymentPosition","EssentialSkillGradeID","PayBandPayrollFlag","IsExpenses","VacancyTheirRef","VacancyRefcode","ShiftConsultantAnalysisCode",
        "transferbatch"
        FROM "TEMPAccountsStatistics";
    --
    INSERT INTO "BatchTransfers"( "BatchType","BatchNumber","TransferTime","Note" ) VALUES
      ( 'IQXAnalysis',@AnalysisBatch,CURRENT TIMESTAMP,"string"('Accounts Statistics Export by ',(SELECT "userid" FROM "staff" WHERE "staffid" = "userstaffid")) ) ;
    -- drop the temporary table
    DROP TABLE "pears"."TEMPAccountsStatistics"
  -- return the transfer batch
  --  return(@AnalysisBatch)
  END // END OF atomic statement
END
GO
 
COMMENT TO PRESERVE FORMAT ON PROCEDURE "pears"."IQXPopulateAccountStatisticsIQAc" IS 
{CREATE PROCEDURE pears."IQXPopulateAccountStatisticsIQAc"(IN @FromDate DATE, IN @ToDate DATE, IN @TransferBatch INTEGER,IN @AccountFilter CHAR(30), IN @DivFilter CHAR(30), IN @DeptFilter CHAR(30) ) 
BEGIN
  --
  --
  --
  DECLARE @AnalysisBatch INTEGER;
  DECLARE @DoNothing SMALLINT;
  DECLARE @AccountFilterLike CHAR(40);
  DECLARE @DivFilterLike CHAR(40);
  DECLARE @DeptFilterLike CHAR(40);
  DECLARE @TimeSheetLines INTEGER;
  --
  --
  -- create temporary table (DO NOT ALTER THIS SECTION)
  --
  --
  --
  --
  -- work out the like clause if any 
  --
  --
  IF(@AccountFilter IS NULL OR "trim"(@AccountFilter) = '') THEN
    SET @AccountFilterLike = '%'
  ELSE
    SET @AccountFilterLike = "string"('[',"trim"(@AccountFilter),']%')
  END IF;
  IF(@DivFilter IS NULL OR "trim"(@DivFilter) = '') THEN
    SET @DivFilterLike = '%'
  ELSE
    SET @DivFilterLike = "string"('[',"trim"(@DivFilter),']%')
  END IF;
  IF(@DeptFilter IS NULL OR "trim"(@DeptFilter) = '') THEN
    SET @DeptFilterLike = '%'
  ELSE
    SET @DeptFilterLike = "string"('[',"trim"(@DeptFilter),']%')
  END IF;
  --
  --
  -- Are there any Timesheet lines that cover the search criocumentdateteria, if not abort
  --
  --
  IF "Isnull"(@TransferBatch,0) > 0 THEN
    SELECT "count"()
      INTO @TimeSheetLines
      FROM "temptimesheetline" KEY JOIN "temptimesheet" AS "t" LEFT OUTER JOIN("placement" KEY JOIN "employment" KEY JOIN "company")
      WHERE "isnull"("t"."TransferBatch",0) >0 AND "company"."clientcode" LIKE @AccountFilterLike
         AND "isnull"("t"."AnalysisBatch",0) = 0
      AND "isnull"("company"."divisionid",'') LIKE @DivFilterLike
      AND "isnull"("placement"."departmentid",'') LIKE @DeptFilterLike
  ELSE
    SELECT "count"()
      INTO @TimeSheetLines
      FROM "temptimesheetline" KEY JOIN "temptimesheet" AS "t" LEFT OUTER JOIN("placement" KEY JOIN "employment" KEY JOIN "company")
 
      WHERE "company"."clientcode" LIKE @AccountFilterLike AND "isnull"("t"."AnalysisBatch",0) = 0
      AND "date"("t"."WhenEntered") BETWEEN @FromDate AND @ToDate
      AND "isnull"("company"."divisionid",'') LIKE @DivFilterLike
      AND "isnull"("placement"."departmentid",'') LIKE @DeptFilterLike
  END IF;
  IF "isnull"(@TimeSheetLines,0) = 0 THEN RETURN END IF;
  --
  --
  -- Get the next analysis batch number
  --
  --
  BEGIN
    UPDATE "params" SET "LastAnalysisBatch" = "isnull"("LastAnalysisBatch",0)+1;
    SELECT "LastAnalysisBatch" INTO @AnalysisBatch FROM "params";
    commit WORK
  END;
  -- Should only be needed if debugging - table should not exist
  BEGIN
    DROP TABLE "pears"."TEMPAccountsStatistics"
  exception
    WHEN others THEN SET @DoNothing = 1
  END;
  --
  -- create temporary table (DO NOT ALTER THIS SECTION)
  --
  CREATE LOCAL TEMPORARY TABLE "pears"."TEMPAccountsStatistics"(
    "AccountsStatisticsID" CHAR(20) NOT NULL,
    "AccountingDate" DATE NULL,
    "Amount" NUMERIC(12,2) NULL,
    "Description" CHAR(100) NULL,
    "Type" CHAR(20) NULL,
    "NominalCodeSegment1" CHAR(12) NULL,
    "NominalCodeSegment2" CHAR(12) NULL,
    "NominalCodeSegment3" CHAR(12) NULL,
    "NominalCodeSegment4" CHAR(12) NULL,
    "NominalCodeSegment5" CHAR(12) NULL,
    "PayrollCompany" CHAR(10) NULL,
    "DivisionAnalysisCode" CHAR(50) NULL,
    "DepartmentAnalysisCode" CHAR(50) NULL,
    "TimesheetAnalysisCode" CHAR(50) NULL,
    "TimesheetConsultantAnalysisCode" CHAR(50) NULL,
    "PlacementConsultantAnalysisCode" CHAR(50) NULL,
    "vacancyConsultantAnalysisCode" CHAR(50) NULL,
    "ConsultantAnalysisCode" CHAR(50) NULL,
    "ShiftConsultantAnalysisCode" CHAR(50) NULL,
    "ClientAccountCode" CHAR(20) NULL,
    "CompanyID" CHAR(20) NULL,
    "PersonID" CHAR(20) NULL,
    "TempTimesheetID" CHAR(20) NULL,
    "TempTimesheetLineID" CHAR(20) NULL,
    "TempDeskID" CHAR(20) NULL,
    "TimeSheetStaffID" CHAR(20) NULL,
    "VacancyStaffID" CHAR(20) NULL,
    "PlacementStaffID" CHAR(20) NULL,
    "PayrollNumber" CHAR(20) NULL,
    "PersonName" CHAR(50) NULL,
    "CompanyName" CHAR(50) NULL,
    "TimesheetSerial" CHAR(20) NULL,
    "TimesheetLineNumber" SMALLINT NULL,
    "DocumentNumber" CHAR(20) NULL,
    "DocumentID" CHAR(20) NULL,
    "DocumentDate" DATE NULL,
    "JournalLineNumber" SMALLINT NULL,
    "SalesOrCost" CHAR(1) NULL,
    "Currency" CHAR(3) NULL,
    "PlacementID" CHAR(20) NULL,
    "VacancyID" CHAR(20) NULL,
    "TempShiftID" CHAR(20) NULL,
    "TempShiftDate" DATE NULL,
    "DocumentLineType" CHAR(1) NULL,
    "Quantity" DOUBLE NULL,
    "JournalClass" CHAR(20) NULL,
    "Unitdescription" CHAR(50) NULL,
    "PayBandPayrollFlag" CHAR(10) NULL, // payrollflag
	"IsExpenses" SMALLINT NULL,
    "TaxMethod" INTEGER NULL,
    "Paid" DOUBLE NULL,
    "HolPay" DOUBLE NULL,
    "HolLiab" DOUBLE NULL,
    "AWRHolRate" DOUBLE NULL,
    "Levy" DOUBLE NULL,
    "HolLiabNI" DOUBLE NULL,
    "ActualNI" DOUBLE NULL,
    "Pension" DOUBLE NULL,
    "Statutory" DOUBLE NULL,
    "Charged" DOUBLE NULL,
    "TempdeskAnalysiscode" CHAR(20) NULL,
    "GoodsAmount" NUMERIC(12,2) NULL,
    "PriceEach" DOUBLE NULL,
    "VatAmount" DOUBLE NULL,
    "VatCode" CHAR(3) NULL,
    "JournalNominalCode" CHAR(12) NULL,
    "PayrollIdentifier" CHAR(1) NULL,
    "Period" INTEGER NULL,
    "TimesheetSupplierCode" CHAR(12) NULL,
    "ShiftAnalysisCode" CHAR(20) NULL,
    "ShiftReferenceCode" CHAR(20) NULL,
    "ShiftSerialNumber" BIGINT NULL,
    "TempShiftTypeID" CHAR(20) NULL,
    "AnalysisBatch" INTEGER NULL,
    "TransferBatch" INTEGER NULL,
    "EmploymentPosition" CHAR(50) NULL,
    "EssentialSkillGradeID" CHAR(4) NULL,
    "vacancytheirref" CHAR(50) NULL,
    "vacancyrefcode" CHAR(20) NULL,
    "CustomString1" CHAR(40) NULL,
    "CustomString2" CHAR(40) NULL,
    "CustomString3" CHAR(40) NULL,
    "CustomString4" CHAR(40) NULL,
    "CustomString5" CHAR(40) NULL,
    "CustomDouble1" DOUBLE NULL,
    "CustomDouble2" DOUBLE NULL,
    "CustomDouble3" DOUBLE NULL,
    "CustomDouble4" DOUBLE NULL,
    "CustomDouble5" DOUBLE NULL,
    PRIMARY KEY("AccountsStatisticsID"),
    ) ON commit DELETE ROWS;
  CREATE INDEX "a" ON "pears"."TEMPAccountsStatistics"("TempTimesheetID");
  CREATE INDEX "b" ON "pears"."TEMPAccountsStatistics"("PersonID");
  CREATE INDEX "c" ON "pears"."TEMPAccountsStatistics"("PayrollNumber");
  CREATE INDEX "d" ON "pears"."TEMPAccountsStatistics"("TempTimesheetLineID");
  CREATE INDEX "e" ON "pears"."TEMPAccountsStatistics"("NominalCodeSegment1");
  CREATE INDEX "f" ON "pears"."TEMPAccountsStatistics"("NominalCodeSegment2");
  CREATE INDEX "g" ON "pears"."TEMPAccountsStatistics"("NominalCodeSegment3");
  CREATE INDEX "h" ON "pears"."TEMPAccountsStatistics"("NominalCodeSegment4");
  CREATE INDEX "i" ON "pears"."TEMPAccountsStatistics"("NominalCodeSegment5");
  CREATE INDEX "j" ON "pears"."TEMPAccountsStatistics"("PlacementID");
  CREATE INDEX "l" ON "pears"."TEMPAccountsStatistics"("TempTimesheetLineID");
  CREATE INDEX "k" ON "pears"."TEMPAccountsStatistics"("DocumentID");
  BEGIN atomic
    --
    --
    --  Update the Temptimesheet lines with the new Analysis batch
    --  if transfer batch > 0 then use this as a filter, ie records in transfer batch will mirror the transfer batch number
    --  if transferbatch = 0, then pick up journal records in the date range @PeriodFrom to @periodto
    --
    IF "Isnull"(@TransferBatch,0) > 0 THEN
      UPDATE "Temptimesheet" AS "t"
        SET "t"."AnalysisBatch" = @AnalysisBatch FROM
        "temptimesheet" AS "t" LEFT OUTER JOIN("placement" KEY JOIN "employment" KEY JOIN "company")
        WHERE "isnull"("t"."TransferBatch",0) = @transferbatch AND "company"."clientcode" LIKE @AccountFilterLike
        AND "isnull"("t"."AnalysisBatch",0) = 0
        AND "isnull"("company"."divisionid",'') LIKE @DivFilterLike
        AND "isnull"("placement"."departmentid",'') LIKE @DeptFilterLike
    ELSE
      UPDATE "Temptimesheet" AS "t"
        SET "t"."AnalysisBatch" = @AnalysisBatch FROM
        "temptimesheet" AS "t" LEFT OUTER JOIN("placement" KEY JOIN "employment" KEY JOIN "company")
        WHERE "company"."clientcode" LIKE @AccountFilterLike AND "isnull"("t"."AnalysisBatch",0) = 0
        AND "date"("t"."whenentered") BETWEEN @FromDate AND @ToDate
        AND "isnull"("company"."divisionid",'') LIKE @DivFilterLike
        AND "isnull"("placement"."departmentid",'') LIKE @DeptFilterLike
    END IF;
    --
    --
    --  Populate temporary table with Data, fixed data first. Should not needs to change this section
    --
    --  
    --
    --
    -- timesheet line related details, dont change this section
    --
    --
    INSERT INTO "TEMPAccountsStatistics"( "AccountsStatisticsID",
      "TemptimesheetID","TimesheetSerial","TimesheetLineNumber","Personid","PayrollNumber","Placementid","Tempdeskid",
      "TimesheetAnalysisCode","tempshiftid","paid","PayBandPayRollFlag","IsExpenses","charged","AnalysisBatch",
      "TaxMethod","TempTimesheetLineID","Period","Quantity",
      "Unitdescription","accountingdate","transferbatch" ) 
      SELECT "uniquekey"("number"()),
        "tl"."TempTimesheetID",
        "t"."SerialNumber",
        "tl"."LineNumber",
        "t"."personid",
        "t"."payrollnumber",
        "t"."PlacementID",
        "t"."TempDeskID",
        "t"."AnalysisCode",
        "tl"."TempShiftID",
        "isnull"("tl"."unitspaid"*"tl"."payrate",0) AS "paid",
        "PayrollFlag",
		ISNULL("IsExpenses",0),
        "isnull"("tl"."UnitsCharged"*"tl"."ChargeRate",0) AS "charged",
        "AnalysisBatch","TaxMethod","tl"."TempTimesheetLineID","Period",
        isnull ("unitspaid",0),
        "b"."unit","whenentered","t"."transferbatch"
        FROM "TempTimesheetLine" AS "tl"
          KEY JOIN("TempTimesheet" AS "t","temppayband" AS "b") WHERE "analysisbatch" = @AnalysisBatch;
    --
    -- 
 
 
 
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "journallinenumber" = "j"."linenumber","amount" = "j"."amount",
      "goodsamount" = "j"."goodsamount","JournalNominalCode" = "j"."NominalCode",
      "journalclass" = "j"."journalclass","priceeach" = "j"."priceeach","vatamount" = "j"."vatamount","vatcode" = "j"."vatcode",
      "description" = "j"."description", "documentid" = "j"."documentid" FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "iqacjournal" AS "j" ON "xref" = 'T' AND "xrefid" = "tas"."temptimesheetlineid" ;
 
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "documentnumber" = "ourref","DocumentDate" = d.Documentdate FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "iqacdocument" AS "d" ON "tas"."documentid" = "d"."documentid" AND "d"."ledgerid" = 'SALES';
    --
    -- Person ID when no timesheet line
    --
    -- 
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "vacancyid" = "v"."vacancyid","vacancytheirref" = "v"."theirref","vacancyrefcode" = "v"."refcode" FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "placement" AS "p" ON "tas"."placementID" = "p"."placementID" KEY JOIN("vacancy" AS "v","employment" AS "e");
    --
    --
    -- Employment Position, Placement Temp, Currency
    --
    -- 
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "EmploymentPosition" = "Employment"."Position",
      "currency" = "isnull"("tas"."currency","p"."currency") FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "placement" AS "p" ON "tas"."placementID" = "p"."placementID"
      ,"placement" AS "p" KEY JOIN "employment";
    --
    -- Employment Position, Placement Temp, Currency
    --
    -- 
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "Period" = "t"."Period","payrollidentifier" = "t"."payrollidentifier","TimesheetSupplierCode" = "t"."SupplierCode" FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "TempTimesheet" AS "t" ON "tas"."TempTimesheetID" = "t"."TempTimesheetID";
    --
    -- Shift Fields
    --
    -- 
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "ShiftReferenceCode" = "t"."referencecode","ShiftSerialNumber" = "p"."shiftserialnumber","tempshiftdate" = "t"."shiftdate",
      "Shiftanalysiscode" = "t"."AnalysisCode","EssentialSkillGradeID" = "t"."EssentialSkillGradeID",
      "TempShifttypeid" = "t"."TempShifttypeid","shiftconsultantAnalysisCode" = (SELECT "s"."analysiscode" FROM "staff" AS "s" WHERE "s"."staffid" = "t"."staffid") FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "TempShift" AS "t" ON "tas"."TempShiftID" = "t"."TempShiftID"
      ,"TempShift" AS "t" KEY JOIN "TempShiftplan" AS "p";
    --
    --
    -- Person names 
    --
    -- 
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "personname" = "p"."name" FROM "TEMPAccountsStatistics" AS "tas" JOIN "person" AS "p" ON "tas"."personid" = "p"."personid";
    --
    --
    -- Company Details for placement related invoices
    --
    --
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "CompanyID" = "c"."CompanyID",
      "CompanyName" = "c"."Name",
      "ClientAccountCode" = "c"."clientcode" FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "placement" AS "p" ON "tas"."placementID" = "p"."placementID"
      KEY JOIN "vacancy" KEY JOIN "employment" AS "e" KEY JOIN "company" AS "c";
    --
    --
    --
    -- Placement Nominal  Codes
    --
    --
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "NominalCodeSegment1" = (SELECT FIRST "nominalcode"
        FROM(SELECT top 1 "nominalcode" FROM "placementanalysis" AS "pl1"
              ,(SELECT "count"() AS "plc" FROM "placementanalysis" AS "pl" WHERE "pl"."placementid" = "tas"."placementid") AS "t2"
            WHERE "pl1"."placementid" = "tas"."placementid" AND "plc" > 0 ORDER BY "whenauthorised" ASC) AS "t1" ORDER BY "nominalcode" DESC) WHERE "placementid" IS NOT NULL;
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "NominalCodeSegment2"
       = (SELECT FIRST "nominalcode"
        FROM(SELECT top 2 "nominalcode" FROM "placementanalysis" AS "pl1"
              ,(SELECT "count"() AS "plc" FROM "placementanalysis" AS "pl" WHERE "pl"."placementid" = "tas"."placementid") AS "t2"
            WHERE "pl1"."placementid" = "tas"."placementid" AND "plc" > 1 ORDER BY "whenauthorised" ASC) AS "t1" ORDER BY "nominalcode" DESC) WHERE "placementid" IS NOT NULL AND "NominalCodeSegment1" IS NOT NULL;
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "NominalCodeSegment3" = (SELECT FIRST "nominalcode"
        FROM(SELECT top 3 "nominalcode" FROM "placementanalysis" AS "pl1"
              ,(SELECT "count"() AS "plc" FROM "placementanalysis" AS "pl" WHERE "pl"."placementid" = "tas"."placementid") AS "t2"
            WHERE "pl1"."placementid" = "tas"."placementid" AND "plc" > 2 ORDER BY "whenauthorised" ASC) AS "t1" ORDER BY "nominalcode" DESC) WHERE "placementid" IS NOT NULL AND "NominalCodeSegment2" IS NOT NULL;
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "NominalCodeSegment4" = (SELECT FIRST "nominalcode"
        FROM(SELECT top 4 "nominalcode" FROM "placementanalysis" AS "pl1"
              ,(SELECT "count"() AS "plc" FROM "placementanalysis" AS "pl" WHERE "pl"."placementid" = "tas"."placementid") AS "t2"
            WHERE "pl1"."placementid" = "tas"."placementid" AND "plc" > 3 ORDER BY "whenauthorised" ASC) AS "t1" ORDER BY "nominalcode" DESC) WHERE "placementid" IS NOT NULL AND "NominalCodeSegment3" IS NOT NULL;
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "NominalCodeSegment5" = (SELECT FIRST "nominalcode"
        FROM(SELECT top 5 "nominalcode" FROM "placementanalysis" AS "pl1"
              ,(SELECT "count"() AS "plc" FROM "placementanalysis" AS "pl" WHERE "pl"."placementid" = "tas"."placementid") AS "t2"
            WHERE "pl1"."placementid" = "tas"."placementid" AND "plc" > 4 ORDER BY "whenauthorised" ASC) AS "t1" ORDER BY "nominalcode" DESC) WHERE "placementid" IS NOT NULL AND "NominalCodeSegment4" IS NOT NULL;
    --
    --
    -- StaffID 
    --
    --
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "TimesheetStaffID" = (SELECT "staffid" FROM "temptimesheet" AS "t" WHERE "t"."temptimesheetid" = "tas"."temptimesheetid"),
      "PlacementStaffID" = (SELECT "staffid" FROM "placement" AS "p" WHERE "p"."placementid" = "tas"."placementid"),
      "vacancyStaffID" = (SELECT "staffid" FROM "vacancy" AS "v" WHERE "v"."vacancyid" = "tas"."vacancyid");
    --
    --
    -- Analysis Codes  
    --
    --
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "DivisionAnalysisCode" = "isnull"((SELECT "Analysis" FROM "Division" KEY JOIN "TempDesk" WHERE "TempDesk"."TempDeskID" = "tas"."TempDeskID"),
      (SELECT "Analysis" FROM "Division" KEY JOIN "Company" WHERE "tas"."CompanyID" = "Company"."CompanyID")),
      "DepartmentAnalysisCode" = (SELECT "Analysis" FROM "Department" KEY JOIN "Placement" WHERE "Placement"."PlacementID" = "tas"."PlacementID"),
      "TempdeskAnalysiscode" = "isnull"((SELECT "Defanalysiscode" FROM "TempDesk" WHERE "TempDesk"."TempDeskID" = "tas"."TempDeskID"),''),
      "VacancyConsultantAnalysisCode" = (SELECT "s"."analysiscode" FROM "staff" AS "s" WHERE "tas"."vacancystaffid" = "s"."staffid"),
      "PlacementConsultantAnalysisCode" = (SELECT "s"."analysiscode" FROM "staff" AS "s" WHERE "tas"."placementstaffid" = "s"."staffid"),
      "TimeSheetConsultantAnalysisCode" = (SELECT "s"."analysiscode" FROM "staff" AS "s" WHERE "tas"."timesheetstaffid" = "s"."staffid"),
      "ConsultantAnalysisCode" = (SELECT "s"."analysiscode" FROM "person" KEY JOIN "staff" AS "s" WHERE "tas"."personid" = "person"."personid");
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "personname" = "p"."name" FROM "TEMPAccountsStatistics" AS "tas" JOIN "person" AS "p" ON "tas"."personid" = "p"."personid";
    --
    --
    -- Now the extras which WILL different per site
    --
    --un
    --
    -- Pensions, Holiday, Levy 
    --
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "HolPay" = IF "IncludeInHolidayPay" = '1' THEN "paid" ELSE 0 endif FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "temptimesheetline" AS "l" ON("l"."temptimesheetlineid" = "tas"."temptimesheetlineid"),"temptimesheetline" AS "l" KEY JOIN "temppayband" WHERE "tas"."temptimesheetlineid"
       = "l"."temptimesheetlineid";
    UPDATE "TEMPAccountsStatistics" AS "tas"
      SET "AWRHolRate"
       = IF "isnull"("AWRWasInvolved",0) = 0 THEN
        "isnull"((SELECT FIRST("ExtraHols"/(52-"ExtraHols")) FROM "AWRJobMaster" AS "a" WHERE "a"."placementid" = "tas"."placementid"),0) ELSE 0 endif FROM
      "TEMPAccountsStatistics" AS "tas" JOIN "temptimesheet" AS "t" ON "tas"."temptimesheetid" = "t"."temptimesheetid";
    --  update "TEMPAccountsStatistics" as "tas" set "HolLiab" = "PayRate"*"UnitsPaid" from
    --  "temptimesheetline" key join "temppayband" as "b" where "b"."description" like '%HP';
    --  update "TEMPAccountsStatistics" as "tas" set "Levy" = "isnull"((select "sum"("amount") from "accord"."IQXJournalHistory" where "trim"("cosegmenta") = "timesheetserial" and("wtcode" = '603950')),0);
    --  update "TEMPAccountsStatistics" as "tas" set "HolLiabNI" = "iqmoneyround"("HolLiab"*.1);
    --  update "TEMPAccountsStatistics" as "tas" set "ActualNI" = "isnull"((select "sum"("amount") from "accord"."IQXJournalHistory" where "trim"("cosegmenta") = "timesheetserial" and(("wtcode" = '603000') or("wtcode" = '603500'))),0);
    --  update "TEMPAccountsStatistics" as "tas" set "Pension" = "isnull"((select "sum"("amount") from "accord"."iQXJournalHistory" where "trim"("cosegmenta") = "timesheetserial" and("wtcode" = '540620')),0);
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "Statutory" = 0;
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "Charged" = "Charged"+"Pension"
      WHERE EXISTS(SELECT * FROM "placement" AS "p" KEY JOIN "employment" KEY JOIN "companyaccount" WHERE "p"."placementid" = "tas"."placementid" AND "ERNIoninvoice" = 1)
      AND EXISTS(SELECT * FROM "temptimesheetline" AS "l" WHERE "l"."temptimesheetlineid" = "tas"."temptimesheetlineid" AND "l"."linenumber" = 1);
    --
    -- questions etc, WILL different per site
    --
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomDouble1" = (SELECT("unitscharged"*"chargerate")-("unitspaid"*"payrate") FROM "temptimesheetline" AS "t" WHERE "tas"."temptimesheetlineid" = "t"."temptimesheetlineid");
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomDouble2" = (("paid"/"charged")*100) WHERE "charged" <> 0;
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomDouble3" = "paid";
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomDouble4" = "charged";
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomDouble5" = 0;
    UPDATE "TEMPAccountsStatistics" SET "type" = '';
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomString1" = (SELECT "department"."name" FROM "placement" KEY JOIN "department" WHERE "placement"."placementid" = "tas"."placementid");
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomString2" = (SELECT "staff"."userid" FROM "staff" WHERE "staff"."staffid" = "tas"."vacancystaffid");
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomString3" = (SELECT "keyname" FROM "person" WHERE "person"."personid" = "tas"."personid");
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomString4" = (SELECT "surname" FROM "person" WHERE "person"."personid" = "tas"."personid");
    UPDATE "TEMPAccountsStatistics" AS "tas" SET "CustomString5" = (SELECT "forenames" FROM "person" WHERE "person"."personid" = "tas"."personid");
    --
    --
    -- Finally Insert the temp table into the Main Accounts Stats table - Do not modify
    --
    --
    --
    --	
    -- delete from "TEMPAccountsStatistics";
    --
    --
    -- Insert the Analysis Batch into the batch transfer table- Do not modify
    INSERT INTO "IQXAccountsStatistics"
      ( "IQXAccountsStatisticsID","AccountingDate","Amount","Description","Type",
      "NominalCodeSegment1","NominalCodeSegment2","NominalCodeSegment3","NominalCodeSegment4","NominalCodeSegment5","PayrollCompany",
      "DivisionAnalysisCode","DepartmentAnalysisCode","TimesheetAnalysisCode","TimesheetConsultantAnalysisCode","VacancyConsultantAnalysisCode","PlacementConsultantAnalysisCode","ConsultantAnalysisCode",
      "ClientAccountCode","CompanyID","PersonID",
      "TempTimesheetID","TempTimesheetLineID","TempDeskID","VacancyStaffID","PlacementStaffid","TimeSheetStaffid","PayrollNumber","PersonName","CompanyName","TimesheetSerial",
      "TimesheetLineNumber","DocumentNumber","DocumentID","DocumentDate","JournalLineNumber","SalesOrCost","Currency","PlacementID","VacancyID","TempShiftID","tempshiftdate","DocumentLineType",
      "JournalClass","Quantity","Unitdescription","TaxMethod","PaID","HolPay","HolLiab","AWRHolRate","Levy",
      "HolLiabNI","ActualNI","Pension","Statutory","Charged","TempdeskAnalysiscode","GoodsAmount","priceEach","VatAmount","VatCode","JournalNominalCode",
      "PayrollIdentifier","Period","TimesheetSupplierCode","ShiftAnalysisCode","ShiftReferenceCode","ShiftSerialNumber","TempShiftTypeID",
      "CustomString1","CustomString2","CustomString3","CustomString4","CustomString5","CustomDouble1","CustomDouble2","CustomDouble3",
      "CustomDouble4","CustomDouble5","AnalysisBatch","EmploymentPosition","EssentialSkillGradeID","PayBandPayrollFlag","IsExpenses","VacancyTheirRef","VacancyRefcode","ShiftConsultantAnalysisCode",
		transferbatch) 
      SELECT "AccountsStatisticsID","AccountingDate","Amount","Description","Type",
        "NominalCodeSegment1","NominalCodeSegment2","NominalCodeSegment3","NominalCodeSegment4","NominalCodeSegment5","PayrollCompany",
        "DivisionAnalysisCode","DepartmentAnalysisCode","TimesheetAnalysisCode","TimesheetConsultantAnalysisCode","VacancyConsultantAnalysisCode","PlacementConsultantAnalysisCode","ConsultantAnalysisCode",
        "ClientAccountCode","CompanyID","PersonID",
        "TempTimesheetID","TempTimesheetLineID","TempDeskID","VacancyStaffID","PlacementStaffid","TimeSheetStaffid","PayrollNumber","PersonName","CompanyName","TimesheetSerial",
        "TimesheetLineNumber","DocumentNumber","DocumentID","DocumentDate","JournalLineNumber","SalesOrCost","Currency","PlacementID","VacancyID","TempShiftID","tempshiftdate","DocumentLineType",
        "JournalClass","Quantity","Unitdescription","TaxMethod","PaID","HolPay","HolLiab","AWRHolRate","Levy",
        "HolLiabNI","ActualNI","Pension","Statutory","Charged","TempdeskAnalysiscode","GoodsAmount","priceEach","VatAmount","VatCode","JournalNominalCode",
        "PayrollIdentifier","Period","TimesheetSupplierCode","ShiftAnalysisCode","ShiftReferenceCode","ShiftSerialNumber","TempShiftTypeID",
        "CustomString1","CustomString2","CustomString3","CustomString4","CustomString5","CustomDouble1","CustomDouble2","CustomDouble3",
        "CustomDouble4","CustomDouble5","AnalysisBatch","EmploymentPosition","EssentialSkillGradeID","PayBandPayrollFlag","IsExpenses","VacancyTheirRef","VacancyRefcode","ShiftConsultantAnalysisCode",
		transferbatch
        FROM "TEMPAccountsStatistics";
    --
    INSERT INTO "BatchTransfers"( "BatchType","BatchNumber","TransferTime","Note" ) 
VALUES( 'IQXAnalysis',@AnalysisBatch,CURRENT TIMESTAMP,string('Accounts Statistics Export by ', (SELECT userid FROM staff WHERE staffid = userstaffid ))) ;
    -- drop the temporary table
    DROP TABLE "pears"."TEMPAccountsStatistics"
  -- return the transfer batch
  --  return(@AnalysisBatch)
  END // END OF atomic statement
END
}
  • database/procedures/pears_iqxpopulateaccountstatisticsiqac.txt
  • Last modified: 2026/08/07 19:24
  • by 127.0.0.1