[...]
            if (PROCESSED_AMOUNT_INVOICES is null) then begin
               PROCESSED_AMOUNT_INVOICES = 0;
            end

            PROCESSED_AMOUNT_INVOICES = PROCESSED_AMOUNT_INVOICES + 
TempTargetAmount;
        end
        else begin
            PROCESSED_AMOUNT_INVOICES = TempTargetAmount;
        end
        
        suspend;
    end
end ^^
SET TERM ; ^^


SET TERM ^^ ;
CREATE OR ALTER PROCEDURE PROCESSABLE_INVOICE_POSITIONS returns (
  PROCESS_TYPE INTEGER,
  PROCESS_ID INTEGER,
  PROCESS_NO VARCHAR(   100),
  POSITION_PROCESS_CHAINID INTEGER,
  POSITION_ID INTEGER,
  POSITION_AMOUNT DOUBLE PRECISION,
  POSITION_PRODUCTID INTEGER,
  POSITION_PRODUCTNO VARCHAR(   100),
  POSITION_DESCRIPTION VARCHAR(    50),
  POSITION_PRODUCT_LABEL VARCHAR(   255),
  POSITION_PRICE DOUBLE PRECISION,
  POSITION_PRODUCT_CATEGORY SMALLINT,
  PROCESSED_AMOUNT_OFFERS DOUBLE PRECISION,
  PROCESSED_AMOUNT_ORDERS DOUBLE PRECISION,
  PROCESSED_AMOUNT_DELIVERIES DOUBLE PRECISION,
  PROCESSED_AMOUNT_INVOICES DOUBLE PRECISION,
  PROCESSABLE_AMOUNT_OFFERS DOUBLE PRECISION,
  PROCESSABLE_AMOUNT_ORDERS DOUBLE PRECISION,
  PROCESSABLE_AMOUNT_DELIVERIES DOUBLE PRECISION,
  PROCESSABLE_AMOUNT_INVOICES DOUBLE PRECISION,
  PROCESS_STATE_OFFERS SMALLINT,
  PROCESS_STATE_ORDERS SMALLINT,
  PROCESS_STATE_DELIVERIES SMALLINT,
  PROCESS_STATE_INVOICES SMALLINT)
AS
declare variable TempTargetAmount double precision;
declare variable TempReferenceAmount double precision;
begin
    for 
        select
            cast (3 as integer) as PROCESS_TYPE,
            INVOICES_POSITIONS.INVOICEID as PROCESS_ID,
            INVOICES_POSITIONS.INVOICENO as PROCESS_NO,
            INVOICES_POSITIONS.PROCESS_CHAINID as POSITION_PROCESS_CHAINID,
            INVOICES_POSITIONS.ID as POSITION_ID,
            INVOICES_POSITIONS.AMOUNT as POSITION_AMOUNT,
            INVOICES_POSITIONS.PRODUCTID as POSITION_PRODUCTID,
            INVOICES_POSITIONS.PRODUCTNO as POSITION_PRODUCTNO,
            INVOICES_POSITIONS.PRODUCT_DESCRIPTION as POSITION_DESCRIPTION,
            case when (INVOICES_POSITIONS.PRODUCTID > 0) then 
cast('POSITION_PRODUCT_LABEL_WITH_NO ' || INVOICES_POSITIONS.PRODUCTNO || ' (' 
|| nullif(INVOICES_POSITIONS.PRODUCT_DESCRIPTION, '') || ')' as varchar(255)) 
else cast('POSITION_PRODUCT_LABEL ' || ' (' || 
nullif(INVOICES_POSITIONS.PRODUCT_DESCRIPTION, '') || ')' as varchar(255)) end 
as POSITION_PRODUCT_LABEL,
            INVOICES_POSITIONS.PRICE as POSITION_PRICE,
            PRODUCTS.CATEGORY as POSITION_PRODUCT_CATEGORY,
            PROCESS_INFO_INVOICE_POSITIONS.PROCESSED_AMOUNT_OFFERS,
            PROCESS_INFO_INVOICE_POSITIONS.PROCESSED_AMOUNT_ORDERS,
            PROCESS_INFO_INVOICE_POSITIONS.PROCESSED_AMOUNT_DELIVERIES,
            PROCESS_INFO_INVOICE_POSITIONS.PROCESSED_AMOUNT_INVOICES,
            cast (0 as double precision) as PROCESSABLE_AMOUNT_OFFERS,
            cast (0 as double precision) as PROCESSABLE_AMOUNT_ORDERS,
            cast (0 as double precision) as PROCESSABLE_AMOUNT_DELIVERIES,
            cast (0 as double precision) as PROCESSABLE_AMOUNT_INVOICES,
            cast (3 as smallint) as PROCESS_STATE_OFFERS,
            cast (3 as smallint) as PROCESS_STATE_ORDERS,
            cast (3 as smallint) as PROCESS_STATE_DELIVERIES,
            cast (3 as smallint) as PROCESS_STATE_INVOICES
        from
            INVOICES_POSITIONS
            left join PRODUCTS on INVOICES_POSITIONS.PRODUCTID = PRODUCTS.ID
            left join PROCESS_INFO_INVOICE_POSITIONS on 
INVOICES_POSITIONS.PROCESS_CHAINID = 
PROCESS_INFO_INVOICE_POSITIONS.PROCESS_CHAINID
        where
            (INVOICES_POSITIONS.ID > 0)
        
      into :PROCESS_TYPE, :PROCESS_ID, :PROCESS_NO, :POSITION_PROCESS_CHAINID, 
:POSITION_ID, :POSITION_AMOUNT, :POSITION_PRODUCTID, :POSITION_PRODUCTNO, 
:POSITION_DESCRIPTION, :POSITION_PRODUCT_LABEL, :POSITION_PRICE, 
:POSITION_PRODUCT_CATEGORY,
            :PROCESSED_AMOUNT_OFFERS, :PROCESSED_AMOUNT_ORDERS, 
:PROCESSED_AMOUNT_DELIVERIES, :PROCESSED_AMOUNT_INVOICES,
            :PROCESSABLE_AMOUNT_OFFERS, :PROCESSABLE_AMOUNT_ORDERS, 
:PROCESSABLE_AMOUNT_DELIVERIES, :PROCESSABLE_AMOUNT_INVOICES,
            :PROCESS_STATE_OFFERS, :PROCESS_STATE_ORDERS, 
:PROCESS_STATE_DELIVERIES, :PROCESS_STATE_INVOICES
    do begin
        TempTargetAmount = 0;
        
        TempReferenceAmount = :POSITION_AMOUNT;
        if (TempReferenceAmount is null) then begin
            TempReferenceAmount = 1;
        end
        
        // Processable amount for offers
        if (PROCESSED_AMOUNT_OFFERS > TempReferenceAmount) then begin
            PROCESSABLE_AMOUNT_OFFERS = 0;
        end
        else begin
            PROCESSABLE_AMOUNT_OFFERS = TempReferenceAmount - 
PROCESSED_AMOUNT_OFFERS;
        end
        // Process state for offers
        if (PROCESSABLE_AMOUNT_OFFERS = 0) then begin
            PROCESS_STATE_OFFERS = 2;
        end
        if ((PROCESSABLE_AMOUNT_OFFERS > 0) and (TempReferenceAmount > 
PROCESSABLE_AMOUNT_OFFERS)) then begin
            PROCESS_STATE_OFFERS = 4;
        end
        
        // Processable amount for orders
        if (PROCESSED_AMOUNT_ORDERS > TempReferenceAmount) then begin
            PROCESSABLE_AMOUNT_ORDERS = 0;
        end
        else begin
            PROCESSABLE_AMOUNT_ORDERS = TempReferenceAmount - 
PROCESSED_AMOUNT_ORDERS;
        end
        // Process state for orders
        if (PROCESSABLE_AMOUNT_ORDERS = 0) then begin
            PROCESS_STATE_ORDERS = 2;
        end
        if ((PROCESSABLE_AMOUNT_ORDERS > 0) and (TempReferenceAmount > 
PROCESSABLE_AMOUNT_ORDERS)) then begin
            PROCESS_STATE_ORDERS = 4;
        end
        
        // Processable amount for deliveries
        if (PROCESSED_AMOUNT_DELIVERIES > TempReferenceAmount) then begin
            PROCESSABLE_AMOUNT_DELIVERIES = 0;
        end
        else begin
            PROCESSABLE_AMOUNT_DELIVERIES = TempReferenceAmount - 
PROCESSED_AMOUNT_DELIVERIES;
        end
        // Process state for deliveries
        if (PROCESSABLE_AMOUNT_DELIVERIES = 0) then begin
            PROCESS_STATE_DELIVERIES = 2;
        end
        if ((PROCESSABLE_AMOUNT_DELIVERIES > 0) and (TempReferenceAmount > 
PROCESSABLE_AMOUNT_DELIVERIES)) then begin
            PROCESS_STATE_DELIVERIES = 4;
        end
        
        // Processable amount for invoices
        if (PROCESSED_AMOUNT_INVOICES > TempReferenceAmount) then begin
            PROCESSABLE_AMOUNT_INVOICES = 0;
        end
        else begin
            PROCESSABLE_AMOUNT_INVOICES = TempReferenceAmount - 
PROCESSED_AMOUNT_INVOICES;
        end
        // Process state for invoices
        if (PROCESSABLE_AMOUNT_INVOICES = 0) then begin
            PROCESS_STATE_INVOICES = 2;
        end
        if ((PROCESSABLE_AMOUNT_INVOICES > 0) and (TempReferenceAmount > 
PROCESSABLE_AMOUNT_INVOICES)) then begin
            PROCESS_STATE_INVOICES = 4;
        end
        
        suspend;
    end
end ^^
SET TERM ; ^^


SET TERM ^^ ;
CREATE PROCEDURE PROCESS_SUMMARY_INVOICES returns (
  PROCESS_ID Integer, 
  POSITION_COUNT SmallInt, 
  TOTAL_PROCESSED_AMOUNT_OFFERS Double Precision, 
  TOTAL_PROCESSED_AMOUNT_ORDERS Double Precision, 
  TOTAL_PROCESSED_AMOUNT_DELIVER Double Precision, 
  TOTAL_PROCESSED_AMOUNT_INVOICES Double Precision, 
  SUM_PROCESS_STATE_OFFERS SmallInt, 
  SUM_PROCESS_STATE_ORDERS SmallInt, 
  SUM_PROCESS_STATE_DELIVERIES SmallInt, 
  SUM_PROCESS_STATE_INVOICES SmallInt, 
  DCOUNT_PROCESS_STATE_OFFERS SmallInt, 
  DCOUNT_PROCESS_STATE_ORDERS SmallInt, 
  DCOUNT_PROCESS_STATE_DELIVERIES SmallInt, 
  DCOUNT_PROCESS_STATE_INVOICES SmallInt)
AS
begin
    for
      select
        PROCESS_ID,
        count(POSITION_ID) as POSITION_COUNT,
        sum(PROCESSED_AMOUNT_OFFERS) as TOTAL_PROCESSED_AMOUNT_OFFERS,
        sum(PROCESSED_AMOUNT_ORDERS) as TOTAL_PROCESSED_AMOUNT_ORDERS,
        sum(PROCESSED_AMOUNT_DELIVERIES) as TOTAL_PROCESSED_AMOUNT_DELIVER,
        sum(PROCESSED_AMOUNT_INVOICES) as TOTAL_PROCESSED_AMOUNT_INVOICES,
        sum(PROCESS_STATE_OFFERS) as SUM_PROCESS_STATE_OFFERS,
        sum(PROCESS_STATE_ORDERS) as SUM_PROCESS_STATE_ORDERS,
        sum(PROCESS_STATE_DELIVERIES) as SUM_PROCESS_STATE_DELIVERIES,
        sum(PROCESS_STATE_INVOICES) as SUM_PROCESS_STATE_INVOICES,
        count(distinct PROCESS_STATE_OFFERS) as DCOUNT_PROCESS_STATE_OFFERS,
        count(distinct PROCESS_STATE_ORDERS) as DCOUNT_PROCESS_STATE_ORDERS,
        count(distinct PROCESS_STATE_DELIVERIES) as 
DCOUNT_PROCESS_STATE_DELIVERIES,
        count(distinct PROCESS_STATE_INVOICES) as DCOUNT_PROCESS_STATE_INVOICES
      from
        PROCESSABLE_INVOICE_POSITIONS
      group by
        PROCESS_ID
      order by
        PROCESS_ID
        
      into :PROCESS_ID, :POSITION_COUNT, :TOTAL_PROCESSED_AMOUNT_OFFERS, 
:TOTAL_PROCESSED_AMOUNT_ORDERS, :TOTAL_PROCESSED_AMOUNT_DELIVER, 
:TOTAL_PROCESSED_AMOUNT_INVOICES, :SUM_PROCESS_STATE_OFFERS, 
:SUM_PROCESS_STATE_ORDERS, :SUM_PROCESS_STATE_DELIVERIES, 
:SUM_PROCESS_STATE_INVOICES, :DCOUNT_PROCESS_STATE_OFFERS, 
:DCOUNT_PROCESS_STATE_ORDERS, :DCOUNT_PROCESS_STATE_DELIVERIES, 
:DCOUNT_PROCESS_STATE_INVOICES
    do begin
    
        suspend;
    end
end ^^
SET TERM ; ^^


SET TERM ^^ ;
CREATE PROCEDURE PROCESS_DETAILS_INVOICES returns (
  PROCESS_TYPE Integer, 
  PROCESS_ID Integer, 
  PROCESS_DATE Timestamp, 
  PROCESS_NO VarChar(100), 
  PROCESS_CONTACTID Integer, 
  PROCESS_CONTACT_NAME1 VarChar(150), 
  PROCESS_CONTACT_NAME2 VarChar(150), 
  PROCESS_LABEL VarChar(512), 
  CONTACT_CONTACTNO VarChar(100), 
  CONTACT_CATEGORY SmallInt, 
  CONTACT_LABEL VarChar(512), 
  POSITION_COUNT SmallInt, 
  SUM_PROCESS_STATE_OFFERS SmallInt, 
  SUM_PROCESS_STATE_ORDERS SmallInt, 
  SUM_PROCESS_STATE_DELIVERIES SmallInt, 
  SUM_PROCESS_STATE_INVOICES SmallInt, 
  DCOUNT_PROCESS_STATE_OFFERS SmallInt, 
  DCOUNT_PROCESS_STATE_ORDERS SmallInt, 
  DCOUNT_PROCESS_STATE_DELIVERIES SmallInt, 
  DCOUNT_PROCESS_STATE_INVOICES SmallInt, 
  PROCESSED_AMOUNT_OFFERS Double Precision, 
  PROCESSED_AMOUNT_ORDERS Double Precision, 
  PROCESSED_AMOUNT_DELIVERIES Double Precision, 
  PROCESSED_AMOUNT_INVOICES Double Precision, 
  PROCESS_STATE_OFFERS SmallInt, 
  PROCESS_STATE_ORDERS SmallInt, 
  PROCESS_STATE_DELIVERIES SmallInt, 
  PROCESS_STATE_INVOICES SmallInt)
AS
begin
    for 
      select
             cast (3 as integer) as PROCESS_TYPE,
             INVOICES.ID as PROCESS_ID,
             INVOICES.INVOICE_DATE as PROCESS_DATE,
             INVOICES.INVOICENO as PROCESS_NO,
             INVOICES.CONTACTID as PROCESS_CONTACTID,
             INVOICES.NAME1 as PROCESS_CONTACT_NAME1,
             INVOICES.NAME2 as PROCESS_CONTACT_NAME2,
             cast('PROCESS_3_LABEL_WITH_NO ' || INVOICES.INVOICENO || 
coalesce(' DATE_FROM ' || extract(day from 
INVOICES.INVOICE_DATE)||'.'||extract(month from 
INVOICES.INVOICE_DATE)||'.'||extract(year from INVOICES.INVOICE_DATE), '') || 
coalesce(' FOR_CONTACT ' || nullif(INVOICES.NAME1, ''), '') || coalesce('; ' || 
nullif(INVOICES.NAME2, ''), '') as varchar(512)) as PROCESS_LABEL,
             CONTACTS.CONTACTNO as CONTACT_CONTACTNO,
             CONTACTS.CATEGORY as CONTACT_CATEGORY,
             case when (INVOICES.CONTACTID > 0) then 
cast('CONTACT_LABEL_WITH_NO ' || CONTACTS.CONTACTNO || coalesce(' (' || 
nullif(CONTACTS.NAME1, ''), '') || coalesce('; ' || nullif(CONTACTS.NAME2, ''), 
'') || coalesce('; ' || nullif(CONTACTS.NAME3, ''), '') || ')' as varchar(512)) 
else cast('CONTACT_LABEL ' || coalesce(' (' || nullif(INVOICES.NAME1, ''), '') 
|| coalesce('; ' || nullif(INVOICES.NAME2, ''), '') || coalesce('; ' || 
nullif(INVOICES.NAME3, ''), '') || ')' as varchar(512)) end as CONTACT_LABEL,
             PROCESS_SUMMARY_INVOICES.POSITION_COUNT,
             PROCESS_SUMMARY_INVOICES.SUM_PROCESS_STATE_OFFERS,
             PROCESS_SUMMARY_INVOICES.SUM_PROCESS_STATE_ORDERS,
             PROCESS_SUMMARY_INVOICES.SUM_PROCESS_STATE_DELIVERIES,
             PROCESS_SUMMARY_INVOICES.SUM_PROCESS_STATE_INVOICES,
             PROCESS_SUMMARY_INVOICES.DCOUNT_PROCESS_STATE_OFFERS,
             PROCESS_SUMMARY_INVOICES.DCOUNT_PROCESS_STATE_ORDERS,
             PROCESS_SUMMARY_INVOICES.DCOUNT_PROCESS_STATE_DELIVERIES,
             PROCESS_SUMMARY_INVOICES.DCOUNT_PROCESS_STATE_INVOICES,
             PROCESS_SUMMARY_INVOICES.TOTAL_PROCESSED_AMOUNT_OFFERS as 
PROCESSED_AMOUNT_OFFERS,
             PROCESS_SUMMARY_INVOICES.TOTAL_PROCESSED_AMOUNT_ORDERS as 
PROCESSED_AMOUNT_ORDERS,
             PROCESS_SUMMARY_INVOICES.TOTAL_PROCESSED_AMOUNT_DELIVER as 
PROCESSED_AMOUNT_DELIVERIES,
             PROCESS_SUMMARY_INVOICES.TOTAL_PROCESSED_AMOUNT_INVOICES as 
PROCESSED_AMOUNT_INVOICES,
             cast (3 as smallint) as PROCESS_STATE_OFFERS,
             cast (3 as smallint) as PROCESS_STATE_ORDERS,
             cast (3 as smallint) as PROCESS_STATE_DELIVERIES,
             cast (3 as smallint) as PROCESS_STATE_INVOICES
        from
             INVOICES
             left join CONTACTS on INVOICES.CONTACTID = CONTACTS.ID
             inner join PROCESS_SUMMARY_INVOICES on INVOICES.ID = 
PROCESS_SUMMARY_INVOICES.PROCESS_ID
        where
          (INVOICES.ID > 0)
        order by
           INVOICES.ID

        into :PROCESS_TYPE, :PROCESS_ID, :PROCESS_DATE, :PROCESS_NO, 
:PROCESS_CONTACTID, :PROCESS_CONTACT_NAME1, :PROCESS_CONTACT_NAME2, 
:PROCESS_LABEL, :CONTACT_CONTACTNO, :CONTACT_CATEGORY, :CONTACT_LABEL, 
:POSITION_COUNT,
        :SUM_PROCESS_STATE_OFFERS, :SUM_PROCESS_STATE_ORDERS, 
:SUM_PROCESS_STATE_DELIVERIES, :SUM_PROCESS_STATE_INVOICES,
        :DCOUNT_PROCESS_STATE_OFFERS, :DCOUNT_PROCESS_STATE_ORDERS, 
:DCOUNT_PROCESS_STATE_DELIVERIES, :DCOUNT_PROCESS_STATE_INVOICES,
        :PROCESSED_AMOUNT_OFFERS, :PROCESSED_AMOUNT_ORDERS, 
:PROCESSED_AMOUNT_DELIVERIES, :PROCESSED_AMOUNT_INVOICES,
        :PROCESS_STATE_OFFERS, :PROCESS_STATE_ORDERS, 
:PROCESS_STATE_DELIVERIES, :PROCESS_STATE_INVOICES
    do begin
        if (:DCOUNT_PROCESS_STATE_OFFERS = 1) then begin
           PROCESS_STATE_OFFERS = trunc(:SUM_PROCESS_STATE_OFFERS / 
:POSITION_COUNT);
        end
        else begin
           PROCESS_STATE_OFFERS = 4;
        end

        if (:DCOUNT_PROCESS_STATE_ORDERS = 1) then begin
           PROCESS_STATE_ORDERS = trunc(:SUM_PROCESS_STATE_ORDERS / 
:POSITION_COUNT);
        end
        else begin
           PROCESS_STATE_ORDERS = 4;
        end

        if (:DCOUNT_PROCESS_STATE_DELIVERIES = 1) then begin
           PROCESS_STATE_DELIVERIES = trunc(:SUM_PROCESS_STATE_DELIVERIES / 
:POSITION_COUNT);
        end
        else begin
           PROCESS_STATE_DELIVERIES = 4;
        end

        if (:DCOUNT_PROCESS_STATE_INVOICES = 1) then begin
           PROCESS_STATE_INVOICES = trunc(:SUM_PROCESS_STATE_INVOICES / 
:POSITION_COUNT);
        end
        else begin
           PROCESS_STATE_INVOICES = 4;
        end
        
        suspend;
    end
end ^^
SET TERM ; ^^


/* 
**********************************************************************************************************************
   * Second requirement (see description)
   
**********************************************************************************************************************
 */
create or alter view V_PROCESSABLE_POSITIONS
as
select
    OFFERS.OFFER_DATE as PROCESS_DATE,
    OFFERS.CONTACTID as PROCESS_CONTACTID,
    OFFERS.NAME1 as PROCESS_CONTACT_NAME1,
    OFFERS.NAME2 as PROCESS_CONTACT_NAME2,
    cast('PROCESS_0_LABEL_WITH_NO ' || OFFERS.OFFERNO || coalesce(' DATE_FROM ' 
|| extract(day from OFFERS.OFFER_DATE)||'.'||extract(month from 
OFFERS.OFFER_DATE)||'.'||extract(year from OFFERS.OFFER_DATE), '') || 
coalesce(' FOR_CONTACT ' || nullif(OFFERS.NAME1, ''), '') || coalesce('; ' || 
nullif(OFFERS.NAME2, ''), '') as varchar(512)) as PROCESS_LABEL,
    CONTACTS.CONTACTNO as CONTACT_CONTACTNO,
    CONTACTS.CONTACT_CATEGORY,
    case when (OFFERS.CONTACTID > 0) then cast('CONTACT_LABEL_WITH_NO ' || 
CONTACTS.CONTACTNO || coalesce(' (' || nullif(CONTACTS.NAME1, ''), '') || 
coalesce('; ' || nullif(CONTACTS.NAME2, ''), '') || coalesce('; ' || 
nullif(CONTACTS.NAME3, ''), '') || ')' as varchar(512)) else 
cast('CONTACT_LABEL ' || coalesce(' (' || nullif(OFFERS.NAME1, ''), '') || 
coalesce('; ' || nullif(OFFERS.NAME2, ''), '') || coalesce('; ' || 
nullif(OFFERS.NAME3, ''), '') || ')' as varchar(512)) end as CONTACT_LABEL,
    PROCESSABLE_OFFERS_POSITIONS.*
from
    OFFERS
    left join CONTACTS on OFFERS.CONTACTID = CONTACTS.ID
    inner join PROCESSABLE_OFFERS_POSITIONS on OFFERS.ID = 
PROCESSABLE_OFFERS_POSITIONS.PROCESS_ID

union all

select
    ORDERS.ORDER_DATE as PROCESS_DATE,
    ORDERS.CONTACTID as PROCESS_CONTACTID,
    ORDERS.NAME1 as PROCESS_CONTACT_NAME1,
    ORDERS.NAME2 as PROCESS_CONTACT_NAME2,
    cast('PROCESS_1_LABEL_WITH_NO ' || ORDERS.ORDERNO || coalesce(' DATE_FROM ' 
|| extract(day from ORDERS.ORDER_DATE)||'.'||extract(month from 
ORDERS.ORDER_DATE)||'.'||extract(year from ORDERS.ORDER_DATE), '') || 
coalesce(' FOR_CONTACT ' || nullif(ORDERS.NAME1, ''), '') || coalesce('; ' || 
nullif(ORDERS.NAME2, ''), '') as varchar(512)) as PROCESS_LABEL,
    CONTACTS.CONTACTNO as CONTACT_CONTACTNO,
    CONTACTS.CONTACT_CATEGORY,
    case when (ORDERS.CONTACTID > 0) then cast('CONTACT_LABEL_WITH_NO ' || 
CONTACTS.CONTACTNO || coalesce(' (' || nullif(CONTACTS.NAME1, ''), '') || 
coalesce('; ' || nullif(CONTACTS.NAME2, ''), '') || coalesce('; ' || 
nullif(CONTACTS.NAME3, ''), '') || ')' as varchar(512)) else 
cast('CONTACT_LABEL ' || coalesce(' (' || nullif(ORDERS.NAME1, ''), '') || 
coalesce('; ' || nullif(ORDERS.NAME2, ''), '') || coalesce('; ' || 
nullif(ORDERS.NAME3, ''), '') || ')' as varchar(512)) end as CONTACT_LABEL,
    PROCESSABLE_ORDERS_POSITIONS.*
from
    ORDERS
    left join CONTACTS on ORDERS.CONTACTID = CONTACTS.ID
    inner join PROCESSABLE_ORDERS_POSITIONS on ORDERS.ID = 
PROCESSABLE_ORDERS_POSITIONS.PROCESS_ID

union all

select
    DELIVERIES.DELIVERY_DATE as PROCESS_DATE,
    DELIVERIES.CONTACTID as PROCESS_CONTACTID,
    DELIVERIES.NAME1 as PROCESS_CONTACT_NAME1,
    DELIVERIES.NAME2 as PROCESS_CONTACT_NAME2,
    cast('PROCESS_2_LABEL_WITH_NO ' || DELIVERIES.DELIVERYNO || coalesce(' 
DATE_FROM ' || extract(day from DELIVERIES.DELIVERY_DATE)||'.'||extract(month 
from DELIVERIES.DELIVERY_DATE)||'.'||extract(year from 
DELIVERIES.DELIVERY_DATE), '') || coalesce(' FOR_CONTACT ' || 
nullif(DELIVERIES.NAME1, ''), '') || coalesce('; ' || nullif(DELIVERIES.NAME2, 
''), '') as varchar(512)) as PROCESS_LABEL,
    CONTACTS.CONTACTNO as CONTACT_CONTACTNO,
    CONTACTS.CONTACT_CATEGORY,
    case when (DELIVERIES.CONTACTID > 0) then cast('CONTACT_LABEL_WITH_NO ' || 
CONTACTS.CONTACTNO || coalesce(' (' || nullif(CONTACTS.NAME1, ''), '') || 
coalesce('; ' || nullif(CONTACTS.NAME2, ''), '') || coalesce('; ' || 
nullif(CONTACTS.NAME3, ''), '') || ')' as varchar(512)) else 
cast('CONTACT_LABEL ' || coalesce(' (' || nullif(DELIVERIES.NAME1, ''), '') || 
coalesce('; ' || nullif(DELIVERIES.NAME2, ''), '') || coalesce('; ' || 
nullif(DELIVERIES.NAME3, ''), '') || ')' as varchar(512)) end as CONTACT_LABEL,
    PROCESSABLE_DELIVR_POSITIONS.*
from
    DELIVERIES
    left join CONTACTS on DELIVERIES.CONTACTID = CONTACTS.ID
    inner join PROCESSABLE_DELIVR_POSITIONS on DELIVERIES.ID = 
PROCESSABLE_DELIVR_POSITIONS.PROCESS_ID

union all

select
    INVOICES.INVOICE_DATE as PROCESS_DATE,
    INVOICES.CONTACTID as PROCESS_CONTACTID,
    INVOICES.NAME1 as PROCESS_CONTACT_NAME1,
    INVOICES.NAME2 as PROCESS_CONTACT_NAME2,
    cast('PROCESS_3_LABEL_WITH_NO ' || INVOICES.INVOICENO || coalesce(' 
DATE_FROM ' || extract(day from INVOICES.INVOICE_DATE)||'.'||extract(month from 
INVOICES.INVOICE_DATE)||'.'||extract(year from INVOICES.INVOICE_DATE), '') || 
coalesce(' FOR_CONTACT ' || nullif(INVOICES.NAME1, ''), '') || coalesce('; ' || 
nullif(INVOICES.NAME2, ''), '') as varchar(512)) as PROCESS_LABEL,
    CONTACTS.CONTACTNO as CONTACT_CONTACTNO,
    CONTACTS.CONTACT_CATEGORY,
    case when (INVOICES.CONTACTID > 0) then cast('CONTACT_LABEL_WITH_NO ' || 
CONTACTS.CONTACTNO || coalesce(' (' || nullif(CONTACTS.NAME1, ''), '') || 
coalesce('; ' || nullif(CONTACTS.NAME2, ''), '') || coalesce('; ' || 
nullif(CONTACTS.NAME3, ''), '') || ')' as varchar(512)) else 
cast('CONTACT_LABEL ' || coalesce(' (' || nullif(INVOICES.NAME1, ''), '') || 
coalesce('; ' || nullif(INVOICES.NAME2, ''), '') || coalesce('; ' || 
nullif(INVOICES.NAME3, ''), '') || ')' as varchar(512)) end as CONTACT_LABEL,
    PROCESSABLE_INVOICE_POSITIONS.*
from
    INVOICES
    left join CONTACTS on INVOICES.CONTACTID = CONTACTS.ID
    inner join PROCESSABLE_INVOICE_POSITIONS on INVOICES.ID = 
PROCESSABLE_INVOICE_POSITIONS.PROCESS_ID
;
 

Reply via email to