pears.NetClientInvoiceList

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

CREATE PROCEDURE "pears"."NetClientInvoiceList"( IN "pWebUserID" CHAR(20),IN "pSlice" INTEGER DEFAULT 0,IN "pSliceSize" INTEGER DEFAULT 10,IN "pStartDate" CHAR(10) DEFAULT NULL,IN "pEndDate" CHAR(10) DEFAULT NULL,IN "pFilterRef" CHAR(20) DEFAULT '%' ) 
RESULT( "DocID" CHAR(20),"DocPath" CHAR(128),"PaymentDate" CHAR(10),"DocName" CHAR(50),"DocDescription" CHAR(100),"Amount" CHAR(15),"TSNo" CHAR(10),"OurRef" CHAR(10),"CompanyName" CHAR(60),"PersName" CHAR(60) ) 
// IQXWeb
BEGIN
  DECLARE "DocPathRoot" CHAR(254);
  DECLARE "dStartDate" DATE;
  DECLARE "dEndDate" DATE;
  DECLARE "x" INTEGER;
  DECLARE "y" INTEGER;
  DECLARE "BackSlash" CHAR(2);
  DECLARE LOCAL TEMPORARY TABLE "IDs"(
    "ID" CHAR(20) NULL,
    ) NOT transactional;
  INSERT INTO "IDs"( "ID" ) 
    SELECT DISTINCT "e"."companyid" FROM "iqxnetuserlink" AS "l" KEY JOIN "employment" AS "e" WHERE "l"."iqxnetuserid" = "pWebUserID";
  SET "BackSlash" = '\\';
  SET "DocPathRoot" = (SELECT top 1 "WPKLocalSwitchValue"('PDFINDB','Global','L',0,1))+"BackSlash";
  SET "dStartDate" = "isnull"("IQXNetStringToDate"("pStartDate"),"dateadd"("mm",-1,"now"()));
  SET "dEndDate" = "isnull"("IQXNetStringToDate"("pEndDate"),"dateadd"("mm",1,"now"()));
  SET "x" = "isnull"("pSliceSize",10);
  SET "y" = ("x"*"isnull"("pSlice",0))+1;
  IF(SELECT top 1 "isnull"("value",0) FROM "iqxnetswitch" WHERE "iqxnetswitchid" = 'ESCAPEPATHWAY') = 1 THEN
    SET "BackSlash" = '\\\\'
  END IF;
  SELECT top "x" START at "y" "DocumentID","Pathway","InvoiceDate","DocName","DocType","Amount","TSNo","RefNo","CompanyName","PersName"
    FROM(SELECT "d"."DocumentID",
        "string"("DocPathRoot","d"."accountcode","BackSlash","dateformat"("d"."documentdate",'yyyymmdd'),"BackSlash","d"."ourref",'.pdf') AS "Pathway",
        "dateformat"("d"."documentdate",'dd/mm/yyyy') AS "InvoiceDate",
        "string"("d"."ourref",'.pdf') AS "DocName",
        (IF "d"."amount" < 0 THEN 'Credit Note' ELSE "d"."documenttype" endif) AS "DocType",
        "d"."amount" AS "Amount",
        "t"."serialnumber" AS "TSNo",
        "d"."OurRef" AS "RefNo",
        "c"."name" AS "CompanyName",
        "p"."name" AS "PersName",
        "d"."documentdate"
        FROM "iqacdocument" AS "d" JOIN "temptimesheet" AS "t" ON "t"."temptimesheetid" = "d"."xrefid" AND "d"."xref" = 'T'
          KEY JOIN "placement" KEY JOIN "employment" KEY JOIN("person" AS "p","company" AS "c")
        WHERE "c"."companyid" = any(SELECT "ID" FROM "IDs")
        AND "d"."documentdate" BETWEEN "dStartDate" AND "dEndDate"
        AND "d"."documenttype" IN( 'Invoice','Credit Note' ) 
        AND("pFilterRef" = '' OR "d"."OurRef" LIKE '%'+"pFilterRef"+'%') UNION ALL
      SELECT "d"."DocumentID",
        "string"("DocPathRoot","d"."accountcode","BackSlash","dateformat"("d"."documentdate",'yyyymmdd'),"BackSlash","d"."ourref",'.pdf') AS "Pathway",
        "dateformat"("d"."documentdate",'dd/mm/yyyy') AS "InvoiceDate",
        "string"("d"."ourref",'.pdf') AS "DocName",
        "d"."DocumentType",
        "d"."amount" AS "Amount",
        NULL AS "TSNo",
        "d"."OurRef" AS "RefNo",
        "c"."name" AS "CompanyName",
        "p"."name" AS "PersName",
        "d"."documentdate"
        FROM "iqacdocument" AS "d" JOIN "placement" AS "pl" ON "pl"."placementid" = "d"."xrefid" AND "d"."xref" = 'P'
          KEY JOIN "employment" KEY JOIN("person" AS "p","company" AS "c")
        WHERE "c"."companyid" = any(SELECT "ID" FROM "IDs")
        AND "d"."documentdate" BETWEEN "dStartDate" AND "dEndDate"
        AND "d"."documenttype" IN( 'Invoice','Credit Note' ) 
        AND("pFilterRef" = '' OR "d"."OurRef" LIKE '%'+"pFilterRef"+'%')
        ORDER BY "documentdate" DESC) AS "docs"
END /* DOC
2016-11-07 PC create a list of invoices for a client
2016-11-23 PC add date search criteria
2017-06-29 PC modify to refer to pdf directory in general settings
2017-08-03 PC IW-267 make double or single backslashes in pathway switchable on EscapeBackslash
2017-09-07 ET added filtering by OurRef
2017-10-30 PC OP-5 RC2 where an amount is less than zero, then display as 'Credit Note' otherwise display document type
 
IW-80
 
Test:
invalid pWebUserID
valid pWebUserID, pSlice, pSliceSize, pStartDate and invalid pEndDate
valid pWebUserID, pSlice, pSliceSize, pStartDate, pEndDate inside range
valid pWebUserID, pSlice, pSliceSize, pStartDate, pEndDate outside range
valid pWebUserID, pSlice=2, pSliceSize, pStartDate=null, pEndDate=null
*/
/* TEST
call NetTestSetup('');
update iqxnetuserlink set employmentid=null where IQXNetUserLinkID in ('test.client','test.agency','test.candidate','test.owner');
update iqxnetuserlink set employmentid='TEST' where IQXNetUserLinkID='test.client';
insert into iqacdocument (documentid,AccountCode,XrefID,Xref,accountingdate,documentdate,duedate,documentclass,documenttype) on existing update values ('TEST1','TESTAC','TEST','P',dateformat(now(*),'yyyy-mm-dd'),dateformat(now(*),'yyyy-mm-dd'),dateformat(now(*),'yyyy-mm-dd'),'Invoice','Invoice');
insert into iqacdocument (documentid,AccountCode,XrefID,Xref,accountingdate,documentdate,duedate,documentclass,documenttype) on existing update values ('TEST2','TESTAC','TEST','P',dateformat(now(*),'yyyy-mm-dd'),dateformat(now(*),'yyyy-mm-dd'),dateformat(now(*),'yyyy-mm-dd'),'Invoice','Credit Note');
select * from NetClientInvoiceList('test.client',0,10,'zz',null);
expect EOF;
select * from NetClientInvoiceList('test.client',0,10,dateformat(dateadd(mm,-3,now(*)),'dd/mm/yyyy'),dateformat(dateadd(mm,-2,now(*)),'dd/mm/yyyy'));
expect EOF;
select * from NetClientInvoiceList('test.client',1,10,null,null);
*/
GO
 
COMMENT TO PRESERVE FORMAT ON PROCEDURE "pears"."NetClientInvoiceList" IS 
{CREATE PROCEDURE pears."NetClientInvoiceList"(IN pWebUserID CHAR(20),IN pSlice INTEGER DEFAULT 0,IN pSliceSize INTEGER DEFAULT 10,IN pStartDate CHAR(10) DEFAULT NULL,IN pEndDate CHAR(10) DEFAULT NULL,IN pFilterRef CHAR(20) DEFAULT '%')
RESULT(DocID CHAR(20),DocPath CHAR(128),PaymentDate CHAR(10),DocName CHAR(50),DocDescription CHAR(100),Amount CHAR(15),TSNo CHAR(10),OurRef CHAR(10),CompanyName CHAR(60),PersName CHAR(60))
// IQXWeb
BEGIN
  DECLARE DocPathRoot CHAR(254);
  DECLARE dStartDate DATE;
  DECLARE dEndDate DATE;
  DECLARE x INTEGER;
  DECLARE y INTEGER;
  DECLARE BackSlash CHAR(2);
  DECLARE LOCAL TEMPORARY TABLE IDs(
    ID CHAR(20) NULL,
    ) NOT transactional;
  INSERT INTO IDs( ID) 
    SELECT DISTINCT e.companyid FROM iqxnetuserlink AS l KEY JOIN employment AS e WHERE l.iqxnetuserid = pWebUserID;
  SET BackSlash='\\';
  SET DocPathRoot = (SELECT top 1 WPKLocalSwitchValue('PDFINDB','Global','L',0,1)) + BackSlash;
  SET dStartDate=isnull(IQXNetStringToDate(pStartDate),dateadd(mm,-1,now(*)));
  SET dEndDate=isnull(IQXNetStringToDate(pEndDate),dateadd(mm,1,now(*)));
  SET x=isnull(pSliceSize,10);
  SET y=(x*isnull(pSlice,0))+1;
  IF (SELECT top 1 isnull(VALUE,0) FROM iqxnetswitch WHERE iqxnetswitchid='ESCAPEPATHWAY') = 1 THEN 
    SET BackSlash='\\\\' 
  END IF;
  SELECT top x START at y DocumentID,Pathway,InvoiceDate,DocName,DocType,Amount,TSNo,RefNo,CompanyName,PersName FROM
  (SELECT   
    d.DocumentID,
    string(DocPathRoot,d.accountcode,BackSlash,dateformat(d.documentdate,'yyyymmdd'),BackSlash,d.ourref,'.pdf') AS Pathway,
    dateformat(d.documentdate,'dd/mm/yyyy') AS InvoiceDate,
    string(d.ourref,'.pdf') AS DocName,
    (IF d.amount < 0 THEN 'Credit Note' ELSE d.documenttype endif) AS DocType,
    d.amount AS Amount,
    t.serialnumber AS TSNo,
    d.OurRef AS RefNo,
    c.name AS CompanyName,
    p.name AS PersName,
    d.documentdate
    FROM iqacdocument d JOIN temptimesheet t ON t.temptimesheetid=d.xrefid AND d.xref='T'
        KEY JOIN placement KEY JOIN employment KEY JOIN (person p, company c) 
    WHERE c.companyid IN (SELECT ID FROM IDs)
        AND d.documentdate BETWEEN dStartDate AND dEndDate 
        AND d.documenttype IN ('Invoice','Credit Note')
        AND (pFilterRef = '' OR d.OurRef LIKE '%' + pFilterRef + '%')
   UNION ALL
   SELECT
    d.DocumentID,
    string(DocPathRoot,d.accountcode,BackSlash,dateformat(d.documentdate,'yyyymmdd'),BackSlash,d.ourref,'.pdf') AS Pathway,
    dateformat(d.documentdate,'dd/mm/yyyy') AS InvoiceDate,
    string(d.ourref,'.pdf') AS DocName,
    d.DocumentType,
    d.amount AS Amount,
    NULL AS TSNo,
    d.OurRef AS RefNo,
    c.name AS CompanyName,
    p.name AS PersName,
    d.documentdate
    FROM iqacdocument d JOIN placement pl ON pl.placementid=d.xrefid AND d.xref='P'
        KEY JOIN employment KEY JOIN (person p, company c)  
    WHERE c.companyid IN (SELECT ID FROM IDs)
        AND d.documentdate BETWEEN dStartDate AND dEndDate 
        AND d.documenttype IN ('Invoice','Credit Note')
        AND (pFilterRef = '' OR d.OurRef LIKE '%' + pFilterRef + '%')
    ORDER BY
        documentdate DESC) AS docs
END
 
/* DOC
2016-11-07 PC create a list of invoices for a client
2016-11-23 PC add date search criteria
2017-06-29 PC modify to refer to pdf directory in general settings
2017-08-03 PC IW-267 make double or single backslashes in pathway switchable on EscapeBackslash
2017-09-07 ET added filtering by OurRef
2017-10-30 PC OP-5 RC2 where an amount is less than zero, then display as 'Credit Note' otherwise display document type
 
IW-80
 
Test:
    invalid pWebUserID
    valid pWebUserID, pSlice, pSliceSize, pStartDate and invalid pEndDate
    valid pWebUserID, pSlice, pSliceSize, pStartDate, pEndDate inside range
    valid pWebUserID, pSlice, pSliceSize, pStartDate, pEndDate outside range
    valid pWebUserID, pSlice=2, pSliceSize, pStartDate=null, pEndDate=null
*/
 
/* TEST
call NetTestSetup('');
update iqxnetuserlink set employmentid=null where IQXNetUserLinkID in ('test.client','test.agency','test.candidate','test.owner');
update iqxnetuserlink set employmentid='TEST' where IQXNetUserLinkID='test.client';
insert into iqacdocument (documentid,AccountCode,XrefID,Xref,accountingdate,documentdate,duedate,documentclass,documenttype) on existing update values ('TEST1','TESTAC','TEST','P',dateformat(now(*),'yyyy-mm-dd'),dateformat(now(*),'yyyy-mm-dd'),dateformat(now(*),'yyyy-mm-dd'),'Invoice','Invoice');
insert into iqacdocument (documentid,AccountCode,XrefID,Xref,accountingdate,documentdate,duedate,documentclass,documenttype) on existing update values ('TEST2','TESTAC','TEST','P',dateformat(now(*),'yyyy-mm-dd'),dateformat(now(*),'yyyy-mm-dd'),dateformat(now(*),'yyyy-mm-dd'),'Invoice','Credit Note');
select * from NetClientInvoiceList('test.client',0,10,'zz',null);
expect EOF;
select * from NetClientInvoiceList('test.client',0,10,dateformat(dateadd(mm,-3,now(*)),'dd/mm/yyyy'),dateformat(dateadd(mm,-2,now(*)),'dd/mm/yyyy'));
expect EOF;
select * from NetClientInvoiceList('test.client',1,10,null,null);
*/
}
  • database/procedures/pears_netclientinvoicelist.txt
  • Last modified: 2026/08/07 19:24
  • by 127.0.0.1