MYOB Exo Business Views & Stored Procedures
List of views
View details
View: Analytics_Customer
NameAnalytics_Customer
Note
CodeCREATE VIEW [dbo].[Analytics_Customer]
AS
(SELECT

BRANCHNAME AS [BranchName],

ACCNAME_ENTERED AS [AccountNameKeyed],

ACCNAME_HEAD AS [AccountNameHeadOffice],

ACCGROUP1NAME AS [AccountPrimaryGroupName],

ACCGROUP2NAME AS [AccountSecondaryGroupName],

ACCGROUPPNAME AS [AccountPriceGroupName],

STAFFNAME AS [StaffName],

CURRENCYNAME AS [CurrencyName],

CURRENCYCODE AS [CurrencyCode],

TAXNAME AS [TaxName],

PAYNAME AS [PaymentTypeName],

TERMSNAME AS [TermsName],

CONTACTNAME AS [ContactName],

ACCNO AS [AccountNumberKeyed],

ACCNO_HEAD AS [AccountNumberHeadOffice],

ACCALPHA AS [AccountAlphaCode],

POSTCODE AS [PostCode],

SALESNO AS [Manager],

BRANCHNO AS [Branch],

CURRENCYNO AS [AccountCurrency],

TAXNO AS [TaxRateNo],

ACCISACTIVE AS [AccountActive],

ACCGROUP AS [AccountPrimaryGroup],

ACCGROUP2 AS [AccountSecondaryGroup],

ACCPRICEGROUP AS [AccountPriceGroup],

ACCTERMS AS [AccountTerms],

ACCSTOPCRED AS [AccountStopCredit],

ACCPRIVATE AS [AccountPrivate],

ACCSTARTDATE AS [AccountStartDate],

ACCLASTUPDATE AS [AccountLastUpdate],

CONTACTNO AS [Contact],

BALFC3 AS [ClosingBalance3MonthsForex],

BALFC2 AS [ClosingBalance2MonthsForex],

BALFC1 AS [ClosingBalance1MonthForex],

BALFC0 AS [ClosingBalanceCurrentForex],

BALFCTOT AS [ClosingBalanceTotalForex],

BALPRIORFC3 AS [PriorBalance3MonthsForex],

BALPRIORFC2 AS [PriorBalance2MonthsForex],

BALPRIORFC1 AS [PriorBalance1MonthForex],

BALPRIORFC0 AS [PriorBalanceCurrentForex],

BALPRIORFCTOT AS [PriorBalanceTotalForex],

CREDLIMITFC AS [CreditLimitForex],

BAL3 AS [ClosingBalance3Months],

BAL2 AS [ClosingBalance2Months],

BAL1 AS [ClosingBalance1Month],

BAL0 AS [ClosingBalanceCurrent],

BALTOT AS [ClosingBalanceTotal],

BALPRIOR3 AS [PriorBalance3Months],

BALPRIOR2 AS [PriorBalance2Months],

BALPRIOR1 AS [PriorBalance1Month],

BALPRIOR0 AS [PriorBalanceCurrent],

BALPRIORTOT AS [PriorBalanceTotal],

CREDLIMIT AS [CreditLimit],

VALUELASTMONTH AS [ValueLastMonth],

VALUELASTYEAR AS [ValueLastYear],

VALUETHISMONTH AS [ValueThisMonth],

VALUETHISYEAR AS [ValueThisYear],

OVALPENDING AS [OrderValuePending],

LASTDATEINVOICED AS [LastDateInvoiced],

LASTDATEPAID AS [LastDatePaid],

AVEDAYS AS [AccountAverageDays]
FROM VW_FACT_DEBTOR)


View: Analytics_GL
NameAnalytics_GL
Note
CodeCREATE VIEW [dbo].[Analytics_GL]
AS
(SELECT

GLCODE AS [GeneralLedgerCode],

GLACCNAME AS [GeneralLedgerAccountName],

GLSUBACCNAME AS [GeneralLedgerSubAccountName],

BRANCHNAME AS [BranchName],

GLACCGROUPNAME AS [GeneralLedgerGroupName],

GLREPCODENAME AS [GeneralLedgerReportCodeName],

CURRENCYNAME AS [CurrencyName],

CURRENCYCODE AS [CurrencyCode],

TAXNAME AS [TaxName],

GLSIGN AS [GeneralLedgerAccountSign],

GLSECTIONNAME AS [GeneralLedgerSectionName],

AGE AS [AgePeriod],

YEARAGE AS [AgeYear],

PERIODNAME AS [PeriodName],

GLACCNO AS [GeneralLedgerAccount],

GLSUBACC AS [GeneralLedgerSubAccount],

BRANCHNO AS [Branch],

COMPANYNO AS [SourceCompanyNo],

PERIODID AS [PeriodID],

TAXNO AS [TaxRateNo],

CURRENCYNO AS [GeneralLedgerAccountCurrency],

GLISACTIVE AS [GeneralLedgerAccountActive],

GLACCGROUP AS [GeneralLedgerGroup],

GLREPCODE AS [GeneralLedgerReportCode],

GLRECONCILABLE AS [GeneralLedgerGroupReconcilable],

GLSECTION AS [GeneralLedgerSection],

GLISBANK AS [GeneralLedgerAccountIsBank],

AVAL AS [ValueLocal],

AVALFC AS [ValueForex],

AEXCHRATE AS [ExchangeRate],

FREQUENCY AS [Frequency]
FROM VW_FACT_GL)


View: Analytics_Job
NameAnalytics_Job
Note
CodeCREATE VIEW [dbo].[Analytics_Job]
AS
(SELECT

BRANCHNAME AS [BranchName],

ACCNAME_ENTERED AS [AccountNameKeyed],

ACCNAME_SALES AS [AccountNameAnalysis],

ACCNAME_BRANCH AS [AccountNameBranch],

ACCGROUP1NAME AS [AccountPrimaryGroupName],

ACCGROUP2NAME AS [AccountSecondaryGroupName],

ACCGROUPPNAME AS [AccountPriceGroupName],

STAFFNAME AS [StaffName],

STAFFNAMEPHYS AS [StaffNamePhysical],

GLACCNAME AS [GeneralLedgerAccountName],

GLSUBACCNAME AS [GeneralLedgerSubAccountName],

LOCATIONNAME AS [LocationName],

CURRENCYNAME AS [CurrencyName],

CURRENCYCODE AS [CurrencyCode],

PROJECTNAME AS [ProjectName],

CATEGORYNAME AS [CategoryName],

JOBTYPENAME AS [JobTypeName],

BILLINGMODENAME AS [BillingModeName],

BRANCHNO AS [Branch],

LOCATION AS [Location],

JOBNO AS [JobNumber],

JOBCODE AS [JobCostingJobCode],

MASTER_JOBNO AS [JobNumberMaster],

CUSTORDNO AS [JobCustomer OrderNo],

TITLE AS [JobTitle],

DESCRIPTION AS [JobDescription],

GLACCNO AS [GeneralLedgerAccount],

GLSUBACC AS [GeneralLedgerSubAccount],

ACCNO AS [AccountNumberKeyed],

ACCNO_SALES AS [AccountNumberAnalysis],

ACCNO_BRANCH AS [AccountNumberBranch],

ORDSTATUS AS [JobStatus],

ISCONFIRMED AS [Confirmed],

CREATE_DATE AS [CreatedDate],

ORDERDATE AS [JobDate],

ACTIVATION_DATE AS [ActivationDate],

DUEDATE AS [DueDate],

FINALISATION_DATE AS [FinalisationDate],

CALLBACK_DATE AS [FollowUpDate],

SALESNO AS [SalesStaff],

CONTACTNO AS [Contact],

CURRENCYNO AS [AccountCurrency],

CATEGORY AS [Category],

JOBTYPE AS [JobType],

BILLINGMODE AS [BillingMode],

PROJECTNO AS [ProjectID],

PHYS_STAFF AS [KeyedByStaff],

ACCISACTIVE AS [AccountActive],

ACCGROUP AS [AccountPrimaryGroup],

ACCGROUP2 AS [AccountSecondaryGroup],

ACCPRICEGROUP AS [AccountPriceGroup],

AVEDAYS AS [AccountAverageDays],

OVALESTIMATE AS [JobValueEstimate],

OVALTIME AS [JobValueTime],

OVALMATERIALS AS [JobValueMaterials],

OVALOVERHEAD AS [JobValueOverhead],

OVALINVOICED AS [JobValueInvoiced],

OVALASSET AS [JobValueAsset],

OVAL AS [JobValue],

OVALESTIMATEFC AS [JobValueForexEstimate],

OVALTIMEFC AS [JobValueForexTime],

OVALMATERIALSFC AS [JobValueForexMaterials],

OVALOVERHEADFC AS [JobValueForexOverhead],

OVALINVOICEDFC AS [JobValueForexInvoiced],

OVALASSETFC AS [JobValueForexAsset],

OVALFC AS [JobValueForex],

OCOSTESTIMATE AS [JobCostEstimate],

OCOSTTIME AS [JobCostTime],

OCOSTMATERIALS AS [JobCostMaterials],

OCOSTINVOICED AS [JobCostInvoiced],

OCOSTWRITEOFF AS [JobCostWrittenOff],

OCOSTASSET AS [JobCostAsset],

OCOST AS [JobCost],

OHOURSESTIMATE AS [JobHoursEstimate],

OHOURS AS [JobHours],

OHOURSALLOWANCE AS [JobHoursAllowance],

OPROFITESTIMATE AS [JobProfitEstimate],

OPROFITTIME AS [JobProfitTime],

OPROFITMATERIALS AS [JobProfitMaterials],

OPROFITINVOICED AS [JobProfitInvoiced],

OPROFITASSET AS [JobProfitAsset],

OPROFIT AS [JobProfit],

OMARKUPPCESTIMATE AS [JobMarkupPercentEstimate],

OMARKUPPCTIME AS [JobMarkupPercentTime],

OMARKUPPCMATERIALS AS [JobMarkupPercentMaterials],

OMARKUPPCINVOICED AS [JobMarkupPercentInvoiced],

OMARKUPPCASSET AS [JobMarkupPercentAsset],

OMARKUPPC AS [JobMarkupPercent],

OMARGINPCESTIMATE AS [JobMarginPercentEstimate],

OMARGINPCTIME AS [JobMarginPercentTime],

OMARGINPCMATERIALS AS [JobMarginPercentMaterials],

OMARGINPCINVOICED AS [JobMarginPercentInvoiced],

OMARGINPCASSET AS [JobMarginPercentAsset],

OMARGINPC AS [JobMarginPercent],

WORKDAYS AS [WorkingDays],

FREQUENCY AS [Frequency]
FROM VW_FACT_JOBS)


View: Analytics_JobProduct
NameAnalytics_JobProduct
Note
CodeCREATE VIEW [dbo].[Analytics_JobProduct]
AS
(SELECT

BRANCHNAME AS [BranchName],

ACCNAME_ENTERED AS [AccountNameKeyed],

ACCNAME_SALES AS [AccountNameAnalysis],

ACCNAME_BRANCH AS [AccountNameBranch],

ACCNAME_SUPPLIER AS [SKU_SupplierAccountName],

ACCGROUP1NAME AS [AccountPrimaryGroupName],

ACCGROUP2NAME AS [AccountSecondaryGroupName],

ACCGROUPPNAME AS [AccountPriceGroupName],

STAFFNAME AS [StaffName],

STAFFNAMEPHYS AS [StaffNamePhysical],

GLACCNAME AS [GeneralLedgerAccountName],

GLSUBACCNAME AS [GeneralLedgerSubAccountName],

LOCATIONNAME AS [LocationName],

CURRENCYNAME AS [CurrencyName],

CURRENCYCODE AS [CurrencyCode],

TAXNAME AS [TaxName],

STOCKGROUP1NAME AS [PLU_PrimaryStockGroupName],

STOCKGROUP2NAME AS [PLU_SecondaryStockGroupName],

STOCKGROUPPNAME AS [PLU_PriceGroupName],

BOMNAME AS [BillofMaterialsDescription],

PLU_NAME AS [PLU_Name],

SKU_NAME AS [SKU_Name],

STATUSNAME AS [JobStatusName],

COSTGROUPNAME AS [CostGroupName],

COSTTYPENAME AS [CostTypeName],

PROJECTNAME AS [ProjectName],

CATEGORYNAME AS [CategoryName],

JOBTYPENAME AS [JobTypeName],

BILLINGMODENAME AS [BillingModeName],

SKU AS [SKU_StockKeepingItem],

SKU_DESCRIPTION AS [SKU_Description],

PLU AS [PLU_PriceLookupItem],

BOMCODE AS [BillofMaterials],

BRANCHNO AS [Branch],

LOCATION AS [Location],

TAXNO AS [TaxRateNo],

BATCHCODE AS [StockBatchCode],

JOBNO AS [JobNumber],

JOBCODE AS [JobCostingJobCode],

MASTER_JOBNO AS [JobNumberMaster],

CUSTORDNO AS [JobCustomer OrderNo],

TITLE AS [JobTitle],

DESCRIPTION AS [JobDescription],

GLACCNO AS [GeneralLedgerAccount],

GLSUBACC AS [GeneralLedgerSubAccount],

BOMTYPE AS [BillofMaterialsType],

PRICEOVERRIDDEN AS [SellPriceOverridden],

ORDLINEID AS [JobLineID],

ACCNO AS [AccountNumberKeyed],

ACCNO_SALES AS [AccountNumberAnalysis],

ACCNO_BRANCH AS [AccountNumberBranch],

ORDSTATUS AS [JobStatus],

ISCONFIRMED AS [Confirmed],

CREATE_DATE AS [CreatedDate],

ORDERDATE AS [JobDate],

ACTIVATION_DATE AS [ActivationDate],

DUEDATE AS [DueDate],

FINALISATION_DATE AS [FinalisationDate],

CALLBACK_DATE AS [FollowUpDate],

SALESNO AS [SalesStaff],

CONTACTNO AS [Contact],

CURRENCYNO AS [AccountCurrency],

LINETYPE AS [LineType],

LINESTATUS AS [LineStatus],

LINKEDITEM AS [LinkedItem],

COSTGROUP AS [CostGroup],

COSTTYPE AS [CostType],

PROGRESSINVOICE AS [ProgressInvoice],

SCHEDULENO AS [BillingScheduleID],

BILLINGID AS [BillingID],

BILLINGREF AS [BillingReference],

CATEGORY AS [Category],

JOBTYPE AS [JobType],

BILLINGMODE AS [BillingMode],

PROJECTNO AS [ProjectID],

PHYS_STAFF AS [KeyedByStaff],

PLU_DESCRIPTION AS [PriceLookupItemDescription],

STOCKGROUP AS [PLU_PrimaryStockGroup],

STOCKGROUP2 AS [PLU_SecondaryStockGroup],

STOCKPRICEGROUP AS [PLU_PriceGroup],

SIZEID AS [PLU_Size],

COLOURID AS [PLU_Colour],

SKU_ISACTIVE AS [SKU_Active],

SKU_STATUS AS [SKU_Type],

SKU_BN AS [SKU_HasBatchcodes],

SKU_SN AS [HasSerialNumbers],

SKU_SUPPLIERNO AS [SKU_Supplier],

ACCISACTIVE AS [AccountActive],

ACCGROUP AS [AccountPrimaryGroup],

ACCGROUP2 AS [AccountSecondaryGroup],

ACCPRICEGROUP AS [AccountPriceGroup],

AVEDAYS AS [AccountAverageDays],

OQUANTITY AS [JobQuantity],

OCOST AS [JobCostValue],

OVALDISC AS [JobDiscountValue],

OVAL AS [JobValueTaxExclusive],

OVALLIST AS [JobValueAtListPrice],

OVALTAX AS [JobTaxValue],

OVALTAXINC AS [JobValueTaxInclusive],

OVALFC AS [JobValueForex],

OPROFIT AS [JobProfit],

OMARKUPPC AS [JobMarkupPercent],

OMARGINPC AS [JobMarginPercent],

OEXCHRATE AS [JobExchangeRate],

OUNITCOST AS [JobUnitCost],

OUNITPRICE AS [JobUnitPrice],

OUNITPRICETAXINC AS [JobUnitPriceTaxInclusive],

OUNITPRICEFC AS [JobUnitPriceForex],

OUNINVOICED AS [UninvoicedQuantity],

OVALPENDING AS [JobValuePending],

OVALRETENTION AS [JobValueRetention],

WORKDAYS AS [WorkingDays],

FREQUENCY AS [Frequency]
FROM VW_FACT_JOBTRANS)


View: Analytics_Product
NameAnalytics_Product
Note
CodeCREATE VIEW [dbo].[Analytics_Product]
AS
(SELECT

GLSALESCODE AS [GeneralLedgerSalesCode],

GLSALESNAME AS [GeneralLedgerSalesAccountName],

GLSALESSUBNAME AS [GeneralLedgerSalesSubAccountName],

GLPURCHCODE AS [GeneralLedgerPurchasesCode],

GLPURCHNAME AS [GeneralLedgerPurchasesAccountName],

GLPURCHSUBNAME AS [GeneralLedgerPurchasesSubAccountName],

GLCOSCODE AS [GeneralLedgerCostOfSalesCode],

GLCOSNAME AS [GeneralLedgerCostOfSalesAccountName],

GLCOSSUBNAME AS [GeneralLedgerCostOfSalesSubAccountName],

ACCNAME_SUPPLIER AS [SKU_SupplierAccountName],

STOCKGROUP1NAME AS [PLU_PrimaryStockGroupName],

STOCKGROUP2NAME AS [PLU_SecondaryStockGroupName],

STOCKGROUPPNAME AS [PLU_PriceGroupName],

PLU_NAME AS [PLU_Name],

SKU_NAME AS [SKU_Name],

PLU AS [PLU_PriceLookupItem],

PLU_DESCRIPTION AS [PriceLookupItemDescription],

PLU_DISCOUNTABLE AS [PLU_Discountable],

PLU_VARIABLECOST AS [PLU_VariableCost],

SIZEID AS [PLU_Size],

COLOURID AS [PLU_Colour],

DIMENSIONS AS [PLU_Dimensions],

STOCKGROUP AS [PLU_PrimaryStockGroup],

STOCKGROUP2 AS [PLU_SecondaryStockGroup],

STOCKPRICEGROUP AS [PLU_PriceGroup],

STOCKCLASS AS [PLU_Class],

BARCODE1 AS [PLU_Barcode1],

BARCODE2 AS [PLU_Barcode2],

BARCODE3 AS [PLU_Barcode3],

GLSALESACCNO AS [GeneralLedgerSalesAccount],

GLSALESSUBACC AS [GeneralLedgerSalesSubAccount],

GLPURCHACCNO AS [GeneralLedgerPurchasesAccount],

GLPURCHSUBACC AS [GeneralLedgerPurchasesSubAccount],

GLCOSACCNO AS [GeneralLedgerCostOfSalesAccount],

GLCOSSUBACC AS [GeneralLedgerCostOfSalesSubAccount],

SKU AS [SKU_StockKeepingItem],

SKU_DESCRIPTION AS [SKU_Description],

SKU_ISACTIVE AS [SKU_Active],

SKU_STATUS AS [SKU_Type],

SKU_SN AS [HasSerialNumbers],

SKU_BN AS [SKU_HasBatchcodes],

SKU_RESTRICTED AS [SKU_Restricted],

SKU_SUPPLIERNO AS [SKU_Supplier],

QUANTITYTHISMONTH AS [QuantityThisMonth],

VALUETHISMONTH AS [ValueThisMonth],

QUANTITYLASTMONTH AS [QuantityLastMonth],

VALUELASTMONTH AS [ValueLastMonth],

QUANTITYTHISYEAR AS [QuantityThisYear],

VALUETHISYEAR AS [ValueThisYear],

QUANTITYLASTYEAR AS [QuantityLastYear],

VALUELASTYEAR AS [ValueLastYear],

QUANTITYONHAND AS [QuantityOnHand],

VALUEONHAND AS [ValueOnHand],

WEIGHT AS [Weight],

CUBIC AS [Cubic]
FROM VW_FACT_STOCK)


View: Analytics_PurchaseInvoice
NameAnalytics_PurchaseInvoice
Note
CodeCREATE VIEW [dbo].[Analytics_PurchaseInvoice]
AS
(SELECT

BRANCHNAME AS [BranchName],

ACCNAME_ENTERED AS [AccountNameKeyed],

ACCNAME_SALES AS [AccountNameAnalysis],

ACCNAME_BRANCH AS [AccountNameBranch],

ACCGROUP1NAME AS [AccountPrimaryGroupName],

ACCGROUP2NAME AS [AccountSecondaryGroupName],

STAFFNAME AS [StaffName],

GLCODE AS [GeneralLedgerCode],

GLACCNAME AS [GeneralLedgerAccountName],

GLSUBACCNAME AS [GeneralLedgerSubAccountName],

CURRENCYNAME AS [CurrencyName],

CURRENCYCODE AS [CurrencyCode],

TAXNAME AS [TaxName],

AGE AS [AgePeriod],

YEARAGE AS [AgeYear],

PERIODNAME AS [PeriodName],

TRANSEQNO AS [TransactionSeqno],

TRANSTYPE AS [TransactionType],

INVNO AS [InvoiceNumber],

REF1 AS [Reference1],

REF2 AS [Reference2],

REF3 AS [Reference3],

PORDER AS [OrderNumber],

BRANCHNO AS [Branch],

SESSIONID AS [SessionID],

ACCNO AS [AccountNumberKeyed],

ACCNO_SALES AS [AccountNumberAnalysis],

ACCNO_BRANCH AS [AccountNumberBranch],

DUEDATE AS [DueDate],

TRANSDATE AS [TransactionDate],

POSTTIME AS [DateTimeKeyed],

SALESNO AS [OrderedBy],

CONTACTNO AS [Contact],

CURRENCYNO AS [AccountCurrency],

PERIODID AS [PeriodID],

PTNO AS [PaymentType],

TAXNO AS [TaxRateNo],

GLACCNO AS [GeneralLedgerAccount],

GLSUBACC AS [GeneralLedgerSubAccount],

ACCISACTIVE AS [AccountActive],

ACCGROUP AS [AccountPrimaryGroup],

ACCGROUP2 AS [AccountSecondaryGroup],

AVEDAYS AS [AccountAverageDays],

IQUANTITY AS [SalesQuantity],

IVALDISC AS [SalesDiscountValue],

IVAL AS [SalesValueTaxExclusive],

IVALTAX AS [SalesTaxValue],

IVALTAXINC AS [SalesValueTaxInclusive],

IVALUNALLOC AS [SalesValueUnallocated],

IVALFC AS [SalesValueForex],

IVALUNALLOCFC AS [SalesValueUnallocatedForex],

INUMLINES AS [InvoiceLinesCount],

IEXCHRATE AS [SalesExchangeRate],

IUNITPRICE AS [SalesUnitPrice],

IUNITPRICETAXINC AS [SalesUnitPriceTaxInclusive],

IUNITPRICEFC AS [SalesUnitPriceForex],

FREQUENCY AS [Frequency]
FROM VW_FACT_PURCHTRANS
WHERE TRANSTYPE = 1)


View: Analytics_PurchaseOrder
NameAnalytics_PurchaseOrder
Note
CodeCREATE VIEW [dbo].[Analytics_PurchaseOrder]
AS
(SELECT

BRANCHNAME AS [BranchName],

BRANCHNAMEPHYS AS [BranchNamePhysical],

ACCNAME_ENTERED AS [AccountNameKeyed],

ACCNAME_SALES AS [AccountNameAnalysis],

ACCNAME_BRANCH AS [AccountNameBranch],

ACCNAME_SUPPLIER AS [SKU_SupplierAccountName],

ACCGROUP1NAME AS [AccountPrimaryGroupName],

ACCGROUP2NAME AS [AccountSecondaryGroupName],

STAFFNAME AS [StaffName],

STAFFNAMEPHYS AS [StaffNamePhysical],

GLCODE AS [GeneralLedgerCode],

GLACCNAME AS [GeneralLedgerAccountName],

GLSUBACCNAME AS [GeneralLedgerSubAccountName],

LOCATIONNAME AS [LocationName],

CURRENCYNAME AS [CurrencyName],

CURRENCYCODE AS [CurrencyCode],

STOCKGROUP1NAME AS [PLU_PrimaryStockGroupName],

STOCKGROUP2NAME AS [PLU_SecondaryStockGroupName],

STOCKGROUPPNAME AS [PLU_PriceGroupName],

BOMNAME AS [BillofMaterialsDescription],

PLU_NAME AS [PLU_Name],

SKU_NAME AS [SKU_Name],

SKU AS [SKU_StockKeepingItem],

SKU_DESCRIPTION AS [SKU_Description],

PLU AS [PLU_PriceLookupItem],

BOMCODE AS [BillofMaterials],

BRANCHNO AS [Branch],

LOCATION AS [Location],

TAXNO AS [TaxRateNo],

BATCHCODE AS [StockBatchCode],

JOBCODE AS [JobCostingJobCode],

GLACCNO AS [GeneralLedgerAccount],

GLSUBACC AS [GeneralLedgerSubAccount],

BOMTYPE AS [BillofMaterialsType],

PRICEOVERRIDDEN AS [SellPriceOverridden],

ORDLINEID AS [OrderLineID],

PORDER AS [OrderNumber],

LINETYPE AS [LineType],

LINKEDITEM AS [LinkedItem],

ACCNO AS [AccountNumberKeyed],

ACCNO_SALES AS [AccountNumberAnalysis],

ACCNO_BRANCH AS [AccountNumberBranch],

ORDSTATUS AS [OrderStatus],

ISCONFIRMED AS [Confirmed],

DUEDATE AS [DueDate],

ORDERDATE AS [OrderDate],

SALESNO AS [OrderedBy],

CONTACTNO AS [Contact],

CURRENCYNO AS [AccountCurrency],

REFERENCE AS [Our Reference],

PHYS_BRANCH AS [KeyedByBranch],

PHYS_STAFF AS [KeyedByStaff],

PLU_DESCRIPTION AS [PriceLookupItemDescription],

STOCKGROUP AS [PLU_PrimaryStockGroup],

STOCKGROUP2 AS [PLU_SecondaryStockGroup],

STOCKPRICEGROUP AS [PLU_PriceGroup],

SIZEID AS [PLU_Size],

COLOURID AS [PLU_Colour],

SKU_ISACTIVE AS [SKU_Active],

SKU_STATUS AS [SKU_Type],

SKU_BN AS [SKU_HasBatchcodes],

SKU_SN AS [HasSerialNumbers],

SKU_SUPPLIERNO AS [SKU_Supplier],

ACCISACTIVE AS [AccountActive],

ACCGROUP AS [AccountPrimaryGroup],

ACCGROUP2 AS [AccountSecondaryGroup],

AVEDAYS AS [AccountAverageDays],

OQUANTITY AS [OrderQuantity],

OCOST AS [OrderCostValue],

OVALDISC AS [OrderDiscountValue],

OVAL AS [OrderValueTaxExclusive],

OVALTAX AS [OrderTaxValue],

OVALTAXINC AS [OrderValueTaxInclusive],

OVALFC AS [OrderValueForex],

OPROFIT AS [OrderProfit],

OMARKUPPC AS [OrderMarkupPercent],

OMARGINPC AS [OrderMarginPercent],

OEXCHRATE AS [OrderExchangeRate],

OUNITCOST AS [OrderUnitCost],

OUNITPRICE AS [OrderUnitPrice],

OUNITPRICETAXINC AS [OrderUnitPriceTaxInclusive],

OUNITPRICEFC AS [OrderUnitPriceForex],

OUNSUPPLIED AS [UnsuppliedQuantity],

OUNINVOICED AS [UninvoicedQuantity],

OCOSTPENDING AS [OrderCostPending],

OVALPENDING AS [OrderValuePending],

WORKDAYS AS [WorkingDays],

FREQUENCY AS [Frequency]
FROM VW_FACT_PURCHORD)


View: Analytics_PurchaseProduct
NameAnalytics_PurchaseProduct
Note
CodeCREATE VIEW [dbo].[Analytics_PurchaseProduct]
AS
(SELECT

BRANCHNAME AS [BranchName],

ACCNAME_ENTERED AS [AccountNameKeyed],

ACCNAME_SALES AS [AccountNameAnalysis],

ACCNAME_BRANCH AS [AccountNameBranch],

ACCNAME_SUPPLIER AS [SKU_SupplierAccountName],

ACCGROUP1NAME AS [AccountPrimaryGroupName],

ACCGROUP2NAME AS [AccountSecondaryGroupName],

STAFFNAME AS [StaffName],

GLCODE AS [GeneralLedgerCode],

GLACCNAME AS [GeneralLedgerAccountName],

GLSUBACCNAME AS [GeneralLedgerSubAccountName],

LOCATIONNAME AS [LocationName],

CURRENCYNAME AS [CurrencyName],

CURRENCYCODE AS [CurrencyCode],

TAXNAME AS [TaxName],

AGE AS [AgePeriod],

YEARAGE AS [AgeYear],

PERIODNAME AS [PeriodName],

STOCKGROUP1NAME AS [PLU_PrimaryStockGroupName],

STOCKGROUP2NAME AS [PLU_SecondaryStockGroupName],

STOCKGROUPPNAME AS [PLU_PriceGroupName],

BOMNAME AS [BillofMaterialsDescription],

PLU_NAME AS [PLU_Name],

SKU_NAME AS [SKU_Name],

SKU AS [SKU_StockKeepingItem],

SKU_DESCRIPTION AS [SKU_Description],

PLU AS [PLU_PriceLookupItem],

BOMCODE AS [BillofMaterials],

BRANCHNO AS [Branch],

LOCATION AS [Location],

TAXNO AS [TaxRateNo],

BATCHCODE AS [StockBatchCode],

JOBCODE AS [JobCostingJobCode],

GLACCNO AS [GeneralLedgerAccount],

GLSUBACC AS [GeneralLedgerSubAccount],

BOMTYPE AS [BillofMaterialsType],

PRICEOVERRIDDEN AS [SellPriceOverridden],

INVLINEID AS [InvoiceLineID],

LINETYPE AS [LineType],

LINKEDITEM AS [LinkedItem],

TRANSEQNO AS [TransactionSeqno],

INVNO AS [InvoiceNumber],

REF1 AS [Reference1],

REF2 AS [Reference2],

REF3 AS [Reference3],

SESSIONID AS [SessionID],

ACCNO AS [AccountNumberKeyed],

ACCNO_SALES AS [AccountNumberAnalysis],

ACCNO_BRANCH AS [AccountNumberBranch],

DUEDATE AS [DueDate],

TRANSDATE AS [TransactionDate],

POSTTIME AS [DateTimeKeyed],

SALESNO AS [OrderedBy],

CONTACTNO AS [Contact],

CURRENCYNO AS [AccountCurrency],

PERIODID AS [PeriodID],

PLU_DESCRIPTION AS [PriceLookupItemDescription],

STOCKGROUP AS [PLU_PrimaryStockGroup],

STOCKGROUP2 AS [PLU_SecondaryStockGroup],

STOCKPRICEGROUP AS [PLU_PriceGroup],

SIZEID AS [PLU_Size],

COLOURID AS [PLU_Colour],

SKU_ISACTIVE AS [SKU_Active],

SKU_STATUS AS [SKU_Type],

SKU_BN AS [SKU_HasBatchcodes],

SKU_SN AS [HasSerialNumbers],

SKU_SUPPLIERNO AS [SKU_Supplier],

ACCISACTIVE AS [AccountActive],

ACCGROUP AS [AccountPrimaryGroup],

ACCGROUP2 AS [AccountSecondaryGroup],

AVEDAYS AS [AccountAverageDays],

IQUANTITY AS [InvoiceQuantity],

IVALDISC AS [InvoiceDiscountValue],

IVAL AS [InvoiceValueTaxExclusive],

IVALTAX AS [InvoiceTaxValue],

IVALTAXINC AS [InvoiceValueTaxInclusive],

IVALFC AS [InvoiceValueForex],

IEXCHRATE AS [InvoiceExchangeRate],

IUNITPRICE AS [InvoiceUnitPrice],

IUNITPRICETAXINC AS [InvoiceUnitPriceTaxInclusive],

IUNITPRICEFC AS [InvoiceUnitPriceForex],

FREQUENCY AS [Frequency]
FROM VW_FACT_PURCHASES)


View: Analytics_PurchaseTransaction
NameAnalytics_PurchaseTransaction
Note
CodeCREATE VIEW [dbo].[Analytics_PurchaseTransaction]
AS
(SELECT

BRANCHNAME AS [BranchName],

ACCNAME_ENTERED AS [AccountNameKeyed],

ACCNAME_SALES AS [AccountNameAnalysis],

ACCNAME_BRANCH AS [AccountNameBranch],

ACCGROUP1NAME AS [AccountPrimaryGroupName],

ACCGROUP2NAME AS [AccountSecondaryGroupName],

STAFFNAME AS [StaffName],

GLCODE AS [GeneralLedgerCode],

GLACCNAME AS [GeneralLedgerAccountName],

GLSUBACCNAME AS [GeneralLedgerSubAccountName],

CURRENCYNAME AS [CurrencyName],

CURRENCYCODE AS [CurrencyCode],

TAXNAME AS [TaxName],

AGE AS [AgePeriod],

YEARAGE AS [AgeYear],

PERIODNAME AS [PeriodName],

TRANSEQNO AS [TransactionSeqno],

TRANSTYPE AS [TransactionType],

INVNO AS [InvoiceNumber],

REF1 AS [Reference1],

REF2 AS [Reference2],

REF3 AS [Reference3],

PORDER AS [OrderNumber],

BRANCHNO AS [Branch],

SESSIONID AS [SessionID],

ACCNO AS [AccountNumberKeyed],

ACCNO_SALES AS [AccountNumberAnalysis],

ACCNO_BRANCH AS [AccountNumberBranch],

DUEDATE AS [DueDate],

TRANSDATE AS [TransactionDate],

POSTTIME AS [DateTimeKeyed],

SALESNO AS [OrderedBy],

CONTACTNO AS [Contact],

CURRENCYNO AS [AccountCurrency],

PERIODID AS [PeriodID],

PTNO AS [PaymentType],

TAXNO AS [TaxRateNo],

GLACCNO AS [GeneralLedgerAccount],

GLSUBACC AS [GeneralLedgerSubAccount],

ACCISACTIVE AS [AccountActive],

ACCGROUP AS [AccountPrimaryGroup],

ACCGROUP2 AS [AccountSecondaryGroup],

AVEDAYS AS [AccountAverageDays],

IQUANTITY AS [SalesQuantity],

IVALDISC AS [SalesDiscountValue],

IVAL AS [SalesValueTaxExclusive],

IVALTAX AS [SalesTaxValue],

IVALTAXINC AS [SalesValueTaxInclusive],

IVALUNALLOC AS [SalesValueUnallocated],

IVALFC AS [SalesValueForex],

IVALUNALLOCFC AS [SalesValueUnallocatedForex],

INUMLINES AS [InvoiceLinesCount],

IEXCHRATE AS [SalesExchangeRate],

IUNITPRICE AS [SalesUnitPrice],

IUNITPRICETAXINC AS [SalesUnitPriceTaxInclusive],

IUNITPRICEFC AS [SalesUnitPriceForex],

FREQUENCY AS [Frequency]
FROM VW_FACT_PURCHTRANS)


View: Analytics_SaleInvoice
NameAnalytics_SaleInvoice
Note
CodeCREATE VIEW [dbo].[Analytics_SaleInvoice]
AS
(SELECT

BRANCHNAME AS [BranchName],

BRANCHNAMEPHYS AS [BranchNamePhysical],

ACCNAME_ENTERED AS [AccountNameKeyed],

ACCNAME_SALES AS [AccountNameAnalysis],

ACCNAME_BRANCH AS [AccountNameBranch],

ACCGROUP1NAME AS [AccountPrimaryGroupName],

ACCGROUP2NAME AS [AccountSecondaryGroupName],

ACCGROUPPNAME AS [AccountPriceGroupName],

STAFFNAME AS [StaffName],

STAFFNAMEPHYS AS [StaffNamePhysical],

GLCODE AS [GeneralLedgerCode],

GLACCNAME AS [GeneralLedgerAccountName],

GLSUBACCNAME AS [GeneralLedgerSubAccountName],

CURRENCYNAME AS [CurrencyName],

CURRENCYCODE AS [CurrencyCode],

TAXNAME AS [TaxName],

AGE AS [AgePeriod],

YEARAGE AS [AgeYear],

PERIODNAME AS [PeriodName],

TRANSEQNO AS [TransactionSeqno],

TRANSTYPE AS [TransactionType],

INVNO AS [InvoiceNumber],

REF1 AS [Reference1],

REF2 AS [Reference2],

REF3 AS [Reference3],

SORDER AS [OrderNumber],

BRANCHNO AS [Branch],

SESSIONID AS [SessionID],

SHIFTNO AS [ShiftNumber],

TERMINALID AS [TerminalID],

ACCNO AS [AccountNumberKeyed],

ACCNO_SALES AS [AccountNumberAnalysis],

ACCNO_BRANCH AS [AccountNumberBranch],

DUEDATE AS [DueDate],

TRANSDATE AS [TransactionDate],

POSTTIME AS [DateTimeKeyed],

SALESNO AS [SalesStaff],

CONTACTNO AS [Contact],

CURRENCYNO AS [AccountCurrency],

CUSTORDNO AS [Customer OrderNo],

REFERENCE AS [Our Reference],

PHYS_BRANCH AS [KeyedByBranch],

PHYS_STAFF AS [KeyedByStaff],

PERIODID AS [PeriodID],

PTNO AS [PaymentType],

TAXNO AS [TaxRateNo],

GLACCNO AS [GeneralLedgerAccount],

GLSUBACC AS [GeneralLedgerSubAccount],

ACCISACTIVE AS [AccountActive],

ACCGROUP AS [AccountPrimaryGroup],

ACCGROUP2 AS [AccountSecondaryGroup],

ACCPRICEGROUP AS [AccountPriceGroup],

AVEDAYS AS [AccountAverageDays],

IQUANTITY AS [SalesQuantity],

ICOST AS [SalesCostValue],

IVALDISC AS [SalesDiscountValue],

IVAL AS [SalesValueTaxExclusive],

IVALTAX AS [SalesTaxValue],

IVALTAXINC AS [SalesValueTaxInclusive],

IVALUNALLOC AS [SalesValueUnallocated],

IVALFC AS [SalesValueForex],

IVALUNALLOCFC AS [SalesValueUnallocatedForex],

INUMLINES AS [InvoiceLinesCount],

IPROFIT AS [SalesProfit],

IMARKUPPC AS [SalesMarkupPercent],

IMARGINPC AS [SalesMarginPercent],

IEXCHRATE AS [SalesExchangeRate],

IUNITCOST AS [SalesUnitCost],

IUNITPRICE AS [SalesUnitPrice],

IUNITPRICETAXINC AS [SalesUnitPriceTaxInclusive],

IUNITPRICEFC AS [SalesUnitPriceForex],

FREQUENCY AS [Frequency]
FROM VW_FACT_SALESTRANS
WHERE TRANSTYPE = 1)


View: Analytics_SaleOrder
NameAnalytics_SaleOrder
Note
CodeCREATE VIEW [dbo].[Analytics_SaleOrder]
AS
(SELECT

BRANCHNAME AS [BranchName],

BRANCHNAMEPHYS AS [BranchNamePhysical],

ACCNAME_ENTERED AS [AccountNameKeyed],

ACCNAME_SALES AS [AccountNameAnalysis],

ACCNAME_BRANCH AS [AccountNameBranch],

ACCNAME_SUPPLIER AS [SKU_SupplierAccountName],

ACCGROUP1NAME AS [AccountPrimaryGroupName],

ACCGROUP2NAME AS [AccountSecondaryGroupName],

ACCGROUPPNAME AS [AccountPriceGroupName],

POLICYNAME AS [PolicyName],

STAFFNAME AS [StaffName],

STAFFNAMEPHYS AS [StaffNamePhysical],

GLCODE AS [GeneralLedgerCode],

GLACCNAME AS [GeneralLedgerAccountName],

GLSUBACCNAME AS [GeneralLedgerSubAccountName],

LOCATIONNAME AS [LocationName],

CURRENCYNAME AS [CurrencyName],

CURRENCYCODE AS [CurrencyCode],

TAXNAME AS [TaxName],

STOCKGROUP1NAME AS [PLU_PrimaryStockGroupName],

STOCKGROUP2NAME AS [PLU_SecondaryStockGroupName],

STOCKGROUPPNAME AS [PLU_PriceGroupName],

BOMNAME AS [BillofMaterialsDescription],

PLU_NAME AS [PLU_Name],

SKU_NAME AS [SKU_Name],

SKU AS [SKU_StockKeepingItem],

SKU_DESCRIPTION AS [SKU_Description],

PLU AS [PLU_PriceLookupItem],

BOMCODE AS [BillofMaterials],

BRANCHNO AS [Branch],

LOCATION AS [Location],

TAXNO AS [TaxRateNo],

POLICYNO AS [AccountPricingPolicy],

BATCHCODE AS [StockBatchCode],

JOBCODE AS [JobCostingJobCode],

GLACCNO AS [GeneralLedgerAccount],

GLSUBACC AS [GeneralLedgerSubAccount],

BOMTYPE AS [BillofMaterialsType],

PRICEOVERRIDDEN AS [SellPriceOverridden],

ORDLINEID AS [OrderLineID],

SORDER AS [OrderNumber],

LINETYPE AS [LineType],

LINKEDITEM AS [LinkedItem],

ACCNO AS [AccountNumberKeyed],

ACCNO_SALES AS [AccountNumberAnalysis],

ACCNO_BRANCH AS [AccountNumberBranch],

ORDSTATUS AS [OrderStatus],

SHIPCOMPLETE AS [ShipComplete],

ISCONFIRMED AS [Confirmed],

WAS_BACKORDERED AS [WasBackordered],

DUEDATE AS [DueDate],

ORDERDATE AS [OrderDate],

SALESNO AS [SalesStaff],

CONTACTNO AS [Contact],

CURRENCYNO AS [AccountCurrency],

CUSTORDNO AS [Customer OrderNo],

REFERENCE AS [Our Reference],

PHYS_BRANCH AS [KeyedByBranch],

PHYS_STAFF AS [KeyedByStaff],

PLU_DESCRIPTION AS [PriceLookupItemDescription],

STOCKGROUP AS [PLU_PrimaryStockGroup],

STOCKGROUP2 AS [PLU_SecondaryStockGroup],

STOCKPRICEGROUP AS [PLU_PriceGroup],

SIZEID AS [PLU_Size],

COLOURID AS [PLU_Colour],

SKU_ISACTIVE AS [SKU_Active],

SKU_STATUS AS [SKU_Type],

SKU_BN AS [SKU_HasBatchcodes],

SKU_SN AS [HasSerialNumbers],

SKU_SUPPLIERNO AS [SKU_Supplier],

ACCISACTIVE AS [AccountActive],

ACCGROUP AS [AccountPrimaryGroup],

ACCGROUP2 AS [AccountSecondaryGroup],

ACCPRICEGROUP AS [AccountPriceGroup],

AVEDAYS AS [AccountAverageDays],

OQUANTITY AS [OrderQuantity],

OCOST AS [OrderCostValue],

OVALDISC AS [OrderDiscountValue],

OVAL AS [OrderValueTaxExclusive],

OVALLIST AS [OrderValueAtListPrice],

OVALTAX AS [OrderTaxValue],

OVALTAXINC AS [OrderValueTaxInclusive],

OVALFC AS [OrderValueForex],

OPROFIT AS [OrderProfit],

OMARKUPPC AS [OrderMarkupPercent],

OMARGINPC AS [OrderMarginPercent],

OEXCHRATE AS [OrderExchangeRate],

OUNITCOST AS [OrderUnitCost],

OUNITPRICE AS [OrderUnitPrice],

OUNITPRICETAXINC AS [OrderUnitPriceTaxInclusive],

OUNITPRICEFC AS [OrderUnitPriceForex],

OUNSUPPLIED AS [UnsuppliedQuantity],

OUNINVOICED AS [UninvoicedQuantity],

OBACKORDERED AS [BackorderQuantity],

OCOSTPENDING AS [OrderCostPending],

OVALPENDING AS [OrderValuePending],

DELIVERYCOUNT AS [CountDelivery],

INVOICECOUNT AS [CountInvoice],

WORKDAYS AS [WorkingDays],

FREQUENCY AS [Frequency]
FROM VW_FACT_SALESORD)


View: Analytics_SaleProduct
NameAnalytics_SaleProduct
Note
CodeCREATE VIEW [dbo].[Analytics_SaleProduct]
AS
(SELECT

BRANCHNAME AS [BranchName],

BRANCHNAMEPHYS AS [BranchNamePhysical],

ACCNAME_ENTERED AS [AccountNameKeyed],

ACCNAME_SALES AS [AccountNameAnalysis],

ACCNAME_BRANCH AS [AccountNameBranch],

ACCNAME_SUPPLIER AS [SKU_SupplierAccountName],

ACCGROUP1NAME AS [AccountPrimaryGroupName],

ACCGROUP2NAME AS [AccountSecondaryGroupName],

ACCGROUPPNAME AS [AccountPriceGroupName],

POLICYNAME AS [PolicyName],

STAFFNAME AS [StaffName],

STAFFNAMEPHYS AS [StaffNamePhysical],

GLCODE AS [GeneralLedgerCode],

GLACCNAME AS [GeneralLedgerAccountName],

GLSUBACCNAME AS [GeneralLedgerSubAccountName],

LOCATIONNAME AS [LocationName],

CURRENCYNAME AS [CurrencyName],

CURRENCYCODE AS [CurrencyCode],

TAXNAME AS [TaxName],

AGE AS [AgePeriod],

YEARAGE AS [AgeYear],

PERIODNAME AS [PeriodName],

STOCKGROUP1NAME AS [PLU_PrimaryStockGroupName],

STOCKGROUP2NAME AS [PLU_SecondaryStockGroupName],

STOCKGROUPPNAME AS [PLU_PriceGroupName],

BOMNAME AS [BillofMaterialsDescription],

PLU_NAME AS [PLU_Name],

SKU_NAME AS [SKU_Name],

SKU AS [SKU_StockKeepingItem],

SKU_DESCRIPTION AS [SKUDescription],

PLU AS [PLU_PriceLookupItem],

BOMCODE AS [BillofMaterials],

BRANCHNO AS [Branch],

LOCATION AS [Location],

TAXNO AS [TaxRateNo],

POLICYNO AS [AccountPricingPolicy],

BATCHCODE AS [StockBatchCode],

JOBCODE AS [JobCostingJobCode],

GLACCNO AS [GeneralLedgerAccount],

GLSUBACC AS [GeneralLedgerSubAccount],

BOMTYPE AS [BillofMaterialsType],

PRICEOVERRIDDEN AS [SellPriceOverridden],

INVLINEID AS [InvoiceLineID],

LINETYPE AS [LineType],

LINKEDITEM AS [LinkedItem],

TRANSEQNO AS [TransactionSeqno],

INVNO AS [InvoiceNumber],

REF1 AS [Reference1],

REF2 AS [Reference2],

REF3 AS [Reference3],

SESSIONID AS [SessionID],

SHIFTNO AS [ShiftNumber],

TERMINALID AS [TerminalID],

ACCNO AS [AccountNumberKeyed],

ACCNO_SALES AS [AccountNumberAnalysis],

ACCNO_BRANCH AS [AccountNumberBranch],

DUEDATE AS [DueDate],

TRANSDATE AS [TransactionDate],

POSTTIME AS [DateTimeKeyed],

SALESNO AS [SalesStaff],

CONTACTNO AS [Contact],

CURRENCYNO AS [AccountCurrency],

CUSTORDNO AS [Customer OrderNo],

REFERENCE AS [Our Reference],

PHYS_BRANCH AS [KeyedByBranch],

PHYS_STAFF AS [KeyedByStaff],

PERIODID AS [PeriodID],

PTNO AS [PaymentType],

PAYNAME AS [PaymentTypeName],

PLU_DESCRIPTION AS [PriceLookupItemDescription],

STOCKGROUP AS [PLU_PrimaryStockGroup],

STOCKGROUP2 AS [PLU_SecondaryStockGroup],

STOCKPRICEGROUP AS [PLU_PriceGroup],

SIZEID AS [PLU_Size],

COLOURID AS [PLU_Colour],

SKU_ISACTIVE AS [SKU_Active],

SKU_STATUS AS [SKU_Type],

SKU_BN AS [SKU_HasBatchcodes],

SKU_SN AS [HasSerialNumbers],

SKU_SUPPLIERNO AS [SKU_Supplier],

ACCISACTIVE AS [AccountActive],

ACCGROUP AS [AccountPrimaryGroup],

ACCGROUP2 AS [AccountSecondaryGroup],

ACCPRICEGROUP AS [AccountPriceGroup],

AVEDAYS AS [AccountAverageDays],

IQUANTITY AS [InvoiceQuantity],

ICOST AS [InvoiceCostValue],

IVALDISC AS [InvoiceDiscountValue],

IVAL AS [InvoiceValueTaxExclusive],

IVALLIST AS [InvoiceValueAtListPrice],

IVALTAX AS [InvoiceTaxValue],

IVALTAXINC AS [InvoiceValueTaxInclusive],

IVALFC AS [InvoiceValueForex],

IPROFIT AS [InvoiceProfit],

IMARKUPPC AS [InvoiceMarkupPercent],

IMARGINPC AS [InvoiceMarginPercent],

IEXCHRATE AS [InvoiceExchangeRate],

IUNITCOST AS [InvoiceUnitCost],

IUNITPRICE AS [InvoiceUnitPrice],

IUNITPRICETAXINC AS [InvoiceUnitPriceTaxInclusive],

IUNITPRICEFC AS [InvoiceUnitPriceForex],

FREQUENCY AS [Frequency]
FROM VW_FACT_SALES)


View: Analytics_SaleTransaction
NameAnalytics_SaleTransaction
Note
CodeCREATE VIEW [dbo].[Analytics_SaleTransaction]
AS
(SELECT

BRANCHNAME AS [BranchName],

BRANCHNAMEPHYS AS [BranchNamePhysical],

ACCNAME_ENTERED AS [AccountNameKeyed],

ACCNAME_SALES AS [AccountNameAnalysis],

ACCNAME_BRANCH AS [AccountNameBranch],

ACCGROUP1NAME AS [AccountPrimaryGroupName],

ACCGROUP2NAME AS [AccountSecondaryGroupName],

ACCGROUPPNAME AS [AccountPriceGroupName],

STAFFNAME AS [StaffName],

STAFFNAMEPHYS AS [StaffNamePhysical],

GLCODE AS [GeneralLedgerCode],

GLACCNAME AS [GeneralLedgerAccountName],

GLSUBACCNAME AS [GeneralLedgerSubAccountName],

CURRENCYNAME AS [CurrencyName],

CURRENCYCODE AS [CurrencyCode],

TAXNAME AS [TaxName],

AGE AS [AgePeriod],

YEARAGE AS [AgeYear],

PERIODNAME AS [PeriodName],

TRANSEQNO AS [TransactionSeqno],

TRANSTYPE AS [TransactionType],

INVNO AS [InvoiceNumber],

REF1 AS [Reference1],

REF2 AS [Reference2],

REF3 AS [Reference3],

SORDER AS [OrderNumber],

BRANCHNO AS [Branch],

SESSIONID AS [SessionID],

SHIFTNO AS [ShiftNumber],

TERMINALID AS [TerminalID],

ACCNO AS [AccountNumberKeyed],

ACCNO_SALES AS [AccountNumberAnalysis],

ACCNO_BRANCH AS [AccountNumberBranch],

DUEDATE AS [DueDate],

TRANSDATE AS [TransactionDate],

POSTTIME AS [DateTimeKeyed],

SALESNO AS [SalesStaff],

CONTACTNO AS [Contact],

CURRENCYNO AS [AccountCurrency],

CUSTORDNO AS [Customer OrderNo],

REFERENCE AS [Our Reference],

PHYS_BRANCH AS [KeyedByBranch],

PHYS_STAFF AS [KeyedByStaff],

PERIODID AS [PeriodID],

PTNO AS [PaymentType],

TAXNO AS [TaxRateNo],

GLACCNO AS [GeneralLedgerAccount],

GLSUBACC AS [GeneralLedgerSubAccount],

ACCISACTIVE AS [AccountActive],

ACCGROUP AS [AccountPrimaryGroup],

ACCGROUP2 AS [AccountSecondaryGroup],

ACCPRICEGROUP AS [AccountPriceGroup],

AVEDAYS AS [AccountAverageDays],

IQUANTITY AS [SalesQuantity],

ICOST AS [SalesCostValue],

IVALDISC AS [SalesDiscountValue],

IVAL AS [SalesValueTaxExclusive],

IVALTAX AS [SalesTaxValue],

IVALTAXINC AS [SalesValueTaxInclusive],

IVALUNALLOC AS [SalesValueUnallocated],

IVALFC AS [SalesValueForex],

IVALUNALLOCFC AS [SalesValueUnallocatedForex],

INUMLINES AS [InvoiceLinesCount],

IPROFIT AS [SalesProfit],

IMARKUPPC AS [SalesMarkupPercent],

IMARGINPC AS [SalesMarginPercent],

IEXCHRATE AS [SalesExchangeRate],

IUNITCOST AS [SalesUnitCost],

IUNITPRICE AS [SalesUnitPrice],

IUNITPRICETAXINC AS [SalesUnitPriceTaxInclusive],

IUNITPRICEFC AS [SalesUnitPriceForex],

FREQUENCY AS [Frequency]
FROM VW_FACT_SALESTRANS)


View: Analytics_Supplier
NameAnalytics_Supplier
Note
CodeCREATE VIEW [dbo].[Analytics_Supplier]
AS
(SELECT

BRANCHNAME AS [BranchName],

ACCNAME_ENTERED AS [AccountNameKeyed],

ACCNAME_HEAD AS [AccountNameHeadOffice],

ACCGROUP1NAME AS [AccountPrimaryGroupName],

ACCGROUP2NAME AS [AccountSecondaryGroupName],

STAFFNAME AS [StaffName],

CURRENCYNAME AS [CurrencyName],

CURRENCYCODE AS [CurrencyCode],

TAXNAME AS [TaxName],

PAYNAME AS [PaymentTypeName],

TERMSNAME AS [TermsName],

CONTACTNAME AS [ContactName],

ACCNO AS [AccountNumberKeyed],

ACCNO_HEAD AS [AccountNumberHeadOffice],

ACCALPHA AS [AccountAlphaCode],

POSTCODE AS [PostCode],

SALESNO AS [Manager],

BRANCHNO AS [Branch],

CURRENCYNO AS [AccountCurrency],

TAXNO AS [TaxRateNo],

ACCISACTIVE AS [AccountActive],

ACCGROUP AS [AccountPrimaryGroup],

ACCGROUP2 AS [AccountSecondaryGroup],

ACCTERMS AS [AccountTerms],

ACCSTOPCRED AS [AccountStopCredit],

ACCPRIVATE AS [AccountPrivate],

ACCLASTUPDATE AS [AccountLastUpdate],

CONTACTNO AS [Contact],

BALFC3 AS [ClosingBalance3MonthsForex],

BALFC2 AS [ClosingBalance2MonthsForex],

BALFC1 AS [ClosingBalance1MonthForex],

BALFC0 AS [ClosingBalanceCurrentForex],

BALFCTOT AS [ClosingBalanceTotalForex],

BALPRIORFC3 AS [PriorBalance3MonthsForex],

BALPRIORFC2 AS [PriorBalance2MonthsForex],

BALPRIORFC1 AS [PriorBalance1MonthForex],

BALPRIORFC0 AS [PriorBalanceCurrentForex],

BALPRIORFCTOT AS [PriorBalanceTotalForex],

CREDLIMITFC AS [CreditLimitForex],

BAL3 AS [ClosingBalance3Months],

BAL2 AS [ClosingBalance2Months],

BAL1 AS [ClosingBalance1Month],

BAL0 AS [ClosingBalanceCurrent],

BALTOT AS [ClosingBalanceTotal],

BALPRIOR3 AS [PriorBalance3Months],

BALPRIOR2 AS [PriorBalance2Months],

BALPRIOR1 AS [PriorBalance1Month],

BALPRIOR0 AS [PriorBalanceCurrent],

BALPRIORTOT AS [PriorBalanceTotal],

CREDLIMIT AS [CreditLimit],

VALUELASTMONTH AS [ValueLastMonth],

VALUELASTYEAR AS [ValueLastYear],

VALUETHISMONTH AS [ValueThisMonth],

VALUETHISYEAR AS [ValueThisYear],

OVALPENDING AS [OrderValuePending],

LASTDATEINVOICED AS [LastDateInvoiced],

LASTDATEPAID AS [LastDatePaid],

AVEDAYS AS [AccountAverageDays]
FROM VW_FACT_CREDITOR)


View: API_COMPANIES_VIEW
NameAPI_COMPANIES_VIEW
Note
Code-- =============================================
-- Description: Companies view used by EXO API
-- =============================================
CREATE VIEW [dbo].[API_COMPANIES_VIEW]
  (ACCNO, COMPANYNAME, PHONE, FAX, EMAIL, CONTACTNAME, SALESNO,
  CONTACT_SEQNO, ACCTYPE, COMPANYID, ADDRESS1, ADDRESS2, ADDRESS3, ADDRESS4, ADDRESS5, POST_CODE, DELADDR1,
  DELADDR2, DELADDR3, DELADDR4, DELADDR5, DELADDR6, NOTES, COMPANY_TYPE, WEBSITE, ISACTIVE, LATITUDE, LONGITUDE, GEOCODE_STATUS,
  ALPHACODE, ISPRIVATE, BALANCE, LAST_UPDATED)
AS
SELECT D.ACCNO, D.NAME, ISNULL(D.PHONE, '') AS PHONE, ISNULL(D.FAX, '') AS FAX, D.EMAIL, C.FULLNAME, D.SALESNO,
  DC.CONTACT_SEQNO, 1 ACCTYPE, 'D' + CONVERT(VARCHAR, D.ACCNO),
  D.ADDRESS1, D.ADDRESS2, D.ADDRESS3, D.ADDRESS4, ISNULL(D.ADDRESS5, '') AS ADDRESS5, D.POST_CODE, D.DELADDR1,
  D.DELADDR2, D.DELADDR3, D.DELADDR4, D.DELADDR5, ISNULL(D.DELADDR6, '') AS DELADDR6, CONVERT(VARCHAR(8000), D.NOTES),
  'Debtor' [DESCRIPTION], ISNULL(D.WEBSITE, '') AS WEBSITE, D.ISACTIVE, D.LATITUDE, D.LONGITUDE, D.GEOCODE_STATUS,
  D.ALPHACODE, D.PRIVATE_ACC as ISPRIVATE, D.BALANCE, D.LAST_UPDATED
FROM DR_ACCS D
LEFT JOIN DR_CONTACTS DC ON D.ACCNO = DC.ACCNO AND DC.DEFCONTACT = 'Y'
LEFT JOIN CONTACTS C ON DC.CONTACT_SEQNO = C.SEQNO
UNION
SELECT CR.ACCNO, CR.NAME, ISNULL(CR.PHONE, '') AS PHONE, ISNULL(CR.FAX, '') AS FAX, CR.EMAIL, C.FULLNAME, CR.SALESNO,
  CC.CONTACT_SEQNO, 2 ACCTYPE, 'C' + CONVERT(VARCHAR, CR.ACCNO),
  CR.ADDRESS1, CR.ADDRESS2, CR.ADDRESS3, CR.ADDRESS4, ISNULL(CR.ADDRESS5, '') AS ADDRESS5, CR.POST_CODE, CR.DELADDR1,
  CR.DELADDR2, CR.DELADDR3, CR.DELADDR4, CR.DELADDR5, ISNULL(CR.DELADDR6, '') AS DELADDR6, CONVERT(VARCHAR(8000), CR.NOTES),
  'Creditor' [DESCRIPTION], ISNULL(CR.WEBSITE, '') AS WEBSITE, CR.ISACTIVE, CR.LATITUDE, CR.LONGITUDE, CR.GEOCODE_STATUS,
  CR.ALPHACODE, 'N' AS ISPRIVATE, CR.BALANCE, CR.LAST_UPDATED
FROM CR_ACCS CR
LEFT JOIN CR_CONTACTS CC ON CR.ACCNO = CC.ACCNO AND CC.DEFCONTACT = 'Y'
LEFT JOIN CONTACTS C ON CC.CONTACT_SEQNO = C.SEQNO
UNION
SELECT P.SEQNO, P.NAME, ISNULL(P.PHONE, '') AS PHONE, ISNULL(P.FAX, '') AS FAX, P.EMAIL, C.FULLNAME, P.SALESNO,
  PC.CONTACT_SEQNO, 3 ACCTYPE, 'P' + CONVERT(VARCHAR, P.SEQNO) COMPANYID,
  P.ADDRESS1, P.ADDRESS2, P.ADDRESS3, P.ADDRESS4, ISNULL(P.ADDRESS5, '') AS ADDRESS5, P.POST_CODE, P.DELADDR1,
  P.DELADDR2, P.DELADDR3, P.DELADDR4, P.DELADDR5, ISNULL(P.DELADDR6, '') AS DELADDR6, CONVERT(VARCHAR(8000), P.NOTES),
  ISNULL(CT.DESCRIPTION, '-NOT DEFINED-'), ISNULL(P.WEBSITE, '') AS WEBSITE, P.ISACTIVE, P.LATITUDE, P.LONGITUDE, P.GEOCODE_STATUS,
  P.ALPHACODE, 'N' AS ISPRIVATE, 0.0, P.LAST_UPDATED
FROM PROSPECTS P
LEFT JOIN PROSPECT_CONTACTS PC ON P.SEQNO = PC.PROSPECT_SEQNO AND PC.DEFCONTACT = 'Y'
LEFT JOIN CONTACTS C ON PC.CONTACT_SEQNO = C.SEQNO
LEFT JOIN COMPANY_TYPES CT ON CT.SEQNO = P.PROSPECT_TYPE
WHERE (P.DRACCNO < 0) AND (P.CRACCNO < 0)


View: API_TASKS_VIEW
NameAPI_TASKS_VIEW
Note
Code-- =============================================
-- Description: Tasks view used by EXO API
-- =============================================
CREATE VIEW [dbo].[API_TASKS_VIEW] AS
SELECT TASKS.*,
CASE
WHEN (TASKS.EVENTTYPE=0 AND (TASKS.OPTIONS & 1)=1) THEN TASKS.END_DATETIME-1
WHEN (TASKS.EVENTTYPE=1 AND (TASKS.OPTIONS & 1)=1) THEN TASKS.ACTUALFINISH-1
WHEN (TASKS.EVENTTYPE=1 AND (TASKS.OPTIONS & 1)<>1) THEN TASKS.END_DATETIME
ELSE TASKS.END_DATETIME
END END_DATETIME_FOR_DISPLAY,
COMPANIES.COMPANYNAME,
COMPANIES.ALPHACODE,
COMPANIES.PHONE COMPANY_PHONE,
COMPANIES.LATITUDE COMPANY_LATITUDE,
COMPANIES.LONGITUDE COMPANY_LONGITUDE,
COMPANIES.EMAIL COMPANY_EMAIL,
C.FULLNAME CONTACTNAME,
C.MOBILE CONTACT_MOBILE,
C.DIRECTPHONE CONTACT_DIRECTPHONE,
C.DIRECTFAX CONTACT_DIRECTFAX,
C.HOMEPHONE CONTACT_HOMEPHONE,
C.EMAIL CONTACT_EMAIL,
C.LATITUDE CONTACT_LATITUDE,
C.LONGITUDE CONTACT_LONGITUDE,
TASK_TYPES.DESCRIPTION TASK_TYPE,
TASK_STATUSES.DESCRIPTION TASK_STATUS,
STAFF_1.NAME CREATED_BY_STAFF,
STAFF_2.NAME ASSIGNED_TO_STAFF,
STAFF_3.NAME ASSIGNED_BY_STAFF,
STAFF_4.NAME MODIFIED_BY_STAFF,
SO.CUSTORDERNO,
PO.REFERENCE PO_REFERENCE,
AR.ASSETCODE,
AR.ASSETNAME,
AR.DESCRIPTION ASSET_DESCRIPTION
FROM TASKS
LEFT JOIN API_COMPANIES_VIEW COMPANIES ON TASKS.COMPANYID=COMPANIES.COMPANYID
LEFT JOIN CONTACTS C ON TASKS.CONTACTSEQNO = C.SEQNO
LEFT JOIN TASK_TYPES ON TASKS.TYPE=TASK_TYPES.SEQNO
LEFT JOIN TASK_STATUSES ON TASKS.STATUS=TASK_STATUSES.SEQNO
LEFT JOIN STAFF STAFF_1 ON TASKS.CREATEDBY=STAFF_1.STAFFNO
LEFT JOIN STAFF STAFF_2 ON TASKS.ASSIGNED_TO=STAFF_2.STAFFNO
LEFT JOIN STAFF STAFF_3 ON TASKS.ASSIGNED_BY=STAFF_3.STAFFNO
LEFT JOIN STAFF STAFF_4 ON TASKS.MODIFIEDBY=STAFF_4.STAFFNO
LEFT JOIN SALESORD_HDR SO ON TASKS.SO_SEQNO = SO.SEQNO
LEFT JOIN PURCHORD_HDR PO ON TASKS.PO_SEQNO = PO.SEQNO
LEFT JOIN ASSET_REG AR ON TASKS.ASSET_SEQNO = AR.ASSETNO


View: BANKFEEDS_MATCHED_TRANSACTIONS
NameBANKFEEDS_MATCHED_TRANSACTIONS
Note
CodeCREATE VIEW [dbo].[BANKFEEDS_MATCHED_TRANSACTIONS]
AS
SELECT T.BANKFEED_BANKACCOUNT_SEQNO, X.* FROM BANKFEEDS_TRANSACTIONS T
INNER JOIN

(
SELECT BL.TRANSACTION_SEQNO, DR.SEQNO, DR.TRANSDATE, DR.REF1 AS REFERENCE, DR.INVNO, 'DR' AS SOURCE, DR.AMOUNT, DR.NAME, ACCNO, 0 SUBACCNO, 0 BRANCHNO
FROM DR_TRANS DR
INNER JOIN BANKFEEDS_TRANSACTION_LINK BL ON (BL.SOURCE = 'DR' AND BL.SOURCE_SEQNO = DR.SEQNO AND BL.STATUS = 'A')
UNION

SELECT BL.TRANSACTION_SEQNO, CR.SEQNO, CR.TRANSDATE, CR.REF1 AS REFERENCE, CR.INVNO, 'CR' AS SOURCE, CR.AMOUNT, NAME, ACCNO, 0 SUBACCNO, 0 BRANCHNO
FROM CR_TRANS CR
INNER JOIN BANKFEEDS_TRANSACTION_LINK BL ON (BL.SOURCE = 'CR' AND BL.SOURCE_SEQNO = CR.SEQNO AND BL.STATUS = 'A')

UNION

SELECT BL.TRANSACTION_SEQNO, GL.SEQNO, GL.TRANSDATE, GL.CHQNO AS REFERENCE, GL.INVNO, 'GL' AS SOURCE, GL.AMOUNT, GL.DETAILS AS NAME, ACCNO, SUBACCNO, BRANCHNO
FROM GLTRANS GL
INNER JOIN BANKFEEDS_TRANSACTION_LINK BL ON (BL.SOURCE = 'GL' AND BL.SOURCE_SEQNO = GL.SEQNO AND BL.STATUS = 'A')

) X ON T.SEQNO = X.TRANSACTION_SEQNO


View: COMPANIES
NameCOMPANIES
Note
CodeCREATE VIEW [dbo].[COMPANIES](ACCNO, COMPANYNAME, PHONE, FAX, EMAIL, CONTACTNAME, SALESNO, CONTACT_SEQNO, ACCTYPE,
 COMPANYID, ADDRESS1, ADDRESS2, ADDRESS3, ADDRESS4, ADDRESS5, POST_CODE, DELADDR1, DELADDR2, DELADDR3,
 DELADDR4, DELADDR5, DELADDR6, NOTES, COMPANY_TYPE, WEBSITE, ISACTIVE
, ALPHACODE
) AS
SELECT D.ACCNO, D.NAME, ISNULL(D.PHONE, '') AS PHONE, ISNULL(D.FAX, '') AS FAX, D.EMAIL, C.FULLNAME, D.SALESNO,
 DC.CONTACT_SEQNO, 1 ACCTYPE, 'D' + CONVERT(VARCHAR, D.ACCNO),
 D.ADDRESS1, D.ADDRESS2, D.ADDRESS3, D.ADDRESS4, ISNULL(D.ADDRESS5, '') AS ADDRESS5, D.POST_CODE, D.DELADDR1,
 D.DELADDR2, D.DELADDR3, D.DELADDR4, D.DELADDR5, ISNULL(D.DELADDR6, '') AS DELADDR6, CONVERT(VARCHAR(8000), D.NOTES),
 'Debtor' [DESCRIPTION], ISNULL(D.WEBSITE, '') AS WEBSITE, D.ISACTIVE
, D.ALPHACODE
FROM DR_ACCS D
LEFT JOIN DR_CONTACTS DC ON D.ACCNO = DC.ACCNO AND DC.DEFCONTACT = 'Y'
LEFT JOIN CONTACTS C ON DC.CONTACT_SEQNO = C.SEQNO
UNION
SELECT CR.ACCNO, CR.NAME, ISNULL(CR.PHONE, '') AS PHONE, ISNULL(CR.FAX, '') AS FAX, CR.EMAIL, C.FULLNAME, CR.SALESNO,
 CC.CONTACT_SEQNO, 2 ACCTYPE, 'C' + CONVERT(VARCHAR, CR.ACCNO),
 CR.ADDRESS1, CR.ADDRESS2, CR.ADDRESS3, CR.ADDRESS4, ISNULL(CR.ADDRESS5, '') AS ADDRESS5, CR.POST_CODE, CR.DELADDR1,
 CR.DELADDR2, CR.DELADDR3, CR.DELADDR4, CR.DELADDR5, ISNULL(CR.DELADDR6, '') AS DELADDR6, CONVERT(VARCHAR(8000), CR.NOTES),
 'Creditor' [DESCRIPTION], ISNULL(CR.WEBSITE, '') AS WEBSITE, CR.ISACTIVE
, CR.ALPHACODE
FROM CR_ACCS CR
LEFT JOIN CR_CONTACTS CC ON CR.ACCNO = CC.ACCNO AND CC.DEFCONTACT = 'Y'
LEFT JOIN CONTACTS C ON CC.CONTACT_SEQNO = C.SEQNO
UNION
SELECT P.SEQNO, P.NAME, ISNULL(P.PHONE, '') AS PHONE, ISNULL(P.FAX, '') AS FAX, P.EMAIL, C.FULLNAME, P.SALESNO,
 PC.CONTACT_SEQNO, 3 ACCTYPE, 'P' + CONVERT(VARCHAR, P.SEQNO) COMPANYID,
 P.ADDRESS1, P.ADDRESS2, P.ADDRESS3, P.ADDRESS4, ISNULL(P.ADDRESS5, '') AS ADDRESS5, P.POST_CODE, P.DELADDR1,
 P.DELADDR2, P.DELADDR3, P.DELADDR4, P.DELADDR5, ISNULL(P.DELADDR6, '') AS DELADDR6, CONVERT(VARCHAR(8000), P.NOTES),
ISNULL(CT.DESCRIPTION, '-NOT DEFINED-'), ISNULL(P.WEBSITE, '') AS WEBSITE, P.ISACTIVE
, P.ALPHACODE
FROM PROSPECTS P
LEFT JOIN PROSPECT_CONTACTS PC ON P.SEQNO = PC.PROSPECT_SEQNO AND PC.DEFCONTACT = 'Y'
LEFT JOIN CONTACTS C ON PC.CONTACT_SEQNO = C.SEQNO
LEFT JOIN COMPANY_TYPES CT ON CT.SEQNO = P.PROSPECT_TYPE
WHERE (P.DRACCNO < 0) AND (P.CRACCNO < 0)


View: CONTACTS_VIEW
NameCONTACTS_VIEW
Note
CodeCREATE VIEW [dbo].[CONTACTS_VIEW] AS
(SELECT C.*, S.NAME AS SALESNAME, AT.DESCRIPTION AS ADVERT_NAME, 1 MARKETING_CLASSES
FROM CONTACTS C
LEFT JOIN STAFF S ON C.SALESNO = S.STAFFNO
LEFT JOIN ADVERT_TYPES AT ON C.ADVERTSOURCE = AT.SEQNO)


View: CR_BESTSELLERS_VW
NameCR_BESTSELLERS_VW
Note
CodeCREATE VIEW [dbo].[CR_BESTSELLERS_VW]
AS
SELECT [NAME], C.ACCNO, ST.STOCKCODE, S.[DESCRIPTION], QUANTITY, AVEPRICE, TOTALSALE
FROM CR_ACCS C
LEFT JOIN
(SELECT STOCKCODE, ABS(SUM(QUANTITY)) AS QUANTITY, AVG(UNITPRICE) AS AVEPRICE, (ABS(SUM(QUANTITY)) * AVG(ISNULL(UNITPRICE, 0))) AS TOTALSALE, ACCNO
FROM STOCK_TRANS GROUP BY ACCNO, STOCKCODE) ST ON C.ACCNO = ST.ACCNO
JOIN STOCK_ITEMS S ON ST.STOCKCODE = S.STOCKCODE
WHERE ST.QUANTITY > 0


View: CR_REF_SEARCH_VW
NameCR_REF_SEARCH_VW
Note
CodeCREATE VIEW [dbo].[CR_REF_SEARCH_VW]
AS

SELECT * FROM
(
(SELECT 'CR_TRANS' AS TABLENAME, 'INVNO' AS FIELD_NAME,
CONVERT(VARCHAR, INVNO) AS VALUE, SEQNO, INVNO, TRANSDATE, TRANSTYPE, SUBTOTAL, TAXTOTAL, BRANCHNO, POSTTIME, ALLOCATEDBAL , ACCNO FROM CR_TRANS)
UNION
(SELECT 'CR_TRANS' AS TABLENAME, 'REF1' AS FIELD_NAME,
CONVERT(VARCHAR, REF1) AS VALUE, SEQNO, INVNO, TRANSDATE, TRANSTYPE, SUBTOTAL, TAXTOTAL, BRANCHNO, POSTTIME, ALLOCATEDBAL , ACCNO FROM CR_TRANS)
UNION
(SELECT 'CR_TRANS' AS TABLENAME, 'REF2' AS FIELD_NAME,
CONVERT(VARCHAR, REF2) AS VALUE, SEQNO, INVNO, TRANSDATE, TRANSTYPE, SUBTOTAL, TAXTOTAL, BRANCHNO, POSTTIME, ALLOCATEDBAL , ACCNO FROM CR_TRANS)
UNION
(SELECT 'CR_TRANS' AS TABLENAME, 'REF3' AS FIELD_NAME,
CONVERT(VARCHAR, REF3) AS VALUE, SEQNO, INVNO, TRANSDATE, TRANSTYPE, SUBTOTAL, TAXTOTAL, BRANCHNO, POSTTIME, ALLOCATEDBAL , ACCNO FROM CR_TRANS)
UNION
(SELECT 'CR_TRANS' AS TABLENAME, 'NAME' AS FIELD_NAME,
CONVERT(VARCHAR, [NAME]) AS VALUE, SEQNO, INVNO, TRANSDATE, TRANSTYPE, SUBTOTAL, TAXTOTAL, BRANCHNO, POSTTIME, ALLOCATEDBAL , ACCNO FROM CR_TRANS)
UNION
(SELECT 'CR_TRANS' AS TABLENAME, 'AMOUNT' AS FIELD_NAME,
CONVERT(VARCHAR, AMOUNT) AS VALUE, SEQNO, INVNO, TRANSDATE, TRANSTYPE, SUBTOTAL, TAXTOTAL, BRANCHNO, POSTTIME, ALLOCATEDBAL , ACCNO FROM CR_TRANS)
UNION
(SELECT 'CR_TRANS' AS TABLENAME, 'NARRATIVE' AS FIELD_NAME,
CONVERT(VARCHAR, NARRATIVE) AS VALUE, D.SEQNO, INVNO, TRANSDATE, TRANSTYPE, SUBTOTAL, TAXTOTAL, BRANCHNO, POSTTIME, ALLOCATEDBAL , ACCNO FROM CR_TRANS D
 JOIN NARRATIVES N ON D.NARRATIVE_SEQNO = N.SEQNO)
UNION
(SELECT 'CR_INVLINE' AS TABLENAME, 'STOCKCODE' AS FIELD_NAME,
CONVERT(VARCHAR, STOCKCODE) AS VALUE, D.SEQNO, D.INVNO, TRANSDATE, TRANSTYPE, SUBTOTAL, TAXTOTAL, D.BRANCHNO, POSTTIME, ALLOCATEDBAL , D.ACCNO FROM CR_INVLINES DI
 JOIN CR_TRANS D ON DI.HDR_SEQNO = D.SEQNO)
UNION
(SELECT 'CR_INVLINE' AS TABLENAME, 'DESCRIPTION' AS FIELD_NAME,
CONVERT(VARCHAR, [DESCRIPTION]) AS VALUE, D.SEQNO, D.INVNO, TRANSDATE, TRANSTYPE, SUBTOTAL, TAXTOTAL, D.BRANCHNO, POSTTIME, ALLOCATEDBAL , D.ACCNO FROM CR_INVLINES DI
 JOIN CR_TRANS D ON DI.HDR_SEQNO = D.SEQNO)
UNION
(SELECT 'CR_INVLINE' AS TABLENAME, 'LINKED_STOCKCODE' AS FIELD_NAME,
CONVERT(VARCHAR, LINKED_STOCKCODE) AS VALUE, D.SEQNO, D.INVNO, TRANSDATE, TRANSTYPE, SUBTOTAL, TAXTOTAL, D.BRANCHNO, POSTTIME, D.ALLOCATEDBAL , D.ACCNO FROM CR_INVLINES DI
 JOIN CR_TRANS D ON DI.HDR_SEQNO = D.SEQNO)
UNION
(SELECT 'CR_INVLINES' AS TABLENAME, 'NARRATIVE' AS FIELD_NAME,
CONVERT(VARCHAR, NARRATIVE) AS VALUE, D.SEQNO, D.INVNO, TRANSDATE, TRANSTYPE, SUBTOTAL, TAXTOTAL, D.BRANCHNO, POSTTIME, D.ALLOCATEDBAL , D.ACCNO FROM CR_INVLINES DI
 JOIN CR_TRANS D ON DI.HDR_SEQNO = D.SEQNO
 JOIN NARRATIVES N ON DI.NARRATIVE_SEQNO = N.SEQNO)
UNION
(SELECT 'PURCHORD_LINE' AS TABLENAME, 'PO_NUMBER' AS FIELD_NAME,
CONVERT(VARCHAR, IGL.PO_NUMBER) AS VALUE, C.SEQNO, C.INVNO, TRANSDATE, TRANSTYPE, SUBTOTAL, TAXTOTAL, C.BRANCHNO, POSTTIME, C.ALLOCATEDBAL , C.ACCNO FROM CR_INVLINES CI
JOIN INWARDS_GOODS_LINES IGL ON CI.IGRLINESEQNO = IGL.SEQNO
JOIN CR_TRANS C ON CI.HDR_SEQNO = C.SEQNO)
) DATASET
JOIN
(SELECT ACCNO AS CACCNO, NAME, ALPHACODE FROM CR_ACCS) C ON DATASET.ACCNO = C.CACCNO
WHERE LEN(ISNULL(VALUE, '')) > 0


View: CR_TRANS_PERIOD_SUMMARY_VW
NameCR_TRANS_PERIOD_SUMMARY_VW
Note
CodeCREATE VIEW [dbo].[CR_TRANS_PERIOD_SUMMARY_VW]
AS
SELECT TOP 100 PERCENT CR_TRANS.ACCNO, CR_ACCS.NAME, PERIOD_STATUS.PERIOD_SHORTNAME, PERIOD_STATUS.AGE, PERIOD_STATUS.PERIODNAME,
CASE WHEN (SUM(CR_TRANS.SUBTOTAL) > 0) AND (TRANSTYPE = 1) THEN SUM(CR_TRANS.SUBTOTAL / CR_TRANS.EXCHRATE) ELSE 0 END AS INVOICES,
CASE WHEN (SUM(CR_TRANS.SUBTOTAL) > 0) AND (TRANSTYPE = 1) THEN SUM(CR_TRANS.TAXTOTAL / CR_TRANS.EXCHRATE) ELSE 0 END AS INVOICEGST,
CASE WHEN (SUM(CR_TRANS.SUBTOTAL) < 0) AND (TRANSTYPE = 1) THEN SUM(CR_TRANS.SUBTOTAL / CR_TRANS.EXCHRATE) ELSE 0 END AS CREDITS,
CASE WHEN (SUM(CR_TRANS.SUBTOTAL) < 0) AND (TRANSTYPE = 1) THEN SUM(CR_TRANS.TAXTOTAL / CR_TRANS.EXCHRATE) ELSE 0 END AS CREDITGST,
CASE WHEN (SUM(AMOUNT) < 0) AND (TRANSTYPE = 4) THEN SUM(CR_TRANS.AMOUNT / CR_TRANS.EXCHRATE) ELSE 0 END AS RECEIPTS,
CASE WHEN (SUM(AMOUNT) > 0) AND (TRANSTYPE = 4) THEN SUM(CR_TRANS.AMOUNT / CR_TRANS.EXCHRATE) ELSE 0 END AS REFUNDS,
CASE WHEN (SUM(AMOUNT) < 0) AND (TRANSTYPE = 5) THEN SUM(CR_TRANS.AMOUNT / CR_TRANS.EXCHRATE) ELSE 0 END AS CRADJUST,
CASE WHEN (SUM(AMOUNT) > 0) AND (TRANSTYPE = 5) THEN SUM(CR_TRANS.AMOUNT / CR_TRANS.EXCHRATE) ELSE 0 END AS DRADJUST, SUM(amount) AS amount
FROM dbo.CR_TRANS CR_TRANS LEFT OUTER JOIN
                      dbo.PERIOD_STATUS PERIOD_STATUS ON (PERIOD_STATUS.SEQNO = CR_TRANS.PERIOD_SEQNO) INNER JOIN
                      dbo.CR_ACCS CR_ACCS ON (CR_ACCS.ACCNO = CR_TRANS.ACCNO)
WHERE (PERIOD_STATUS.LEDGER = 'C')
GROUP BY CR_TRANS.ACCNO, PERIOD_STATUS.AGE, PERIOD_STATUS.PERIOD_SHORTNAME, PERIOD_STATUS.PERIODNAME, CR_TRANS.EXCHRATE,
                      CR_ACCS.NAME, transtype
ORDER BY CR_TRANS.ACCNO, PERIOD_STATUS.AGE, PERIOD_STATUS.PERIODNAME, PERIOD_STATUS.PERIOD_SHORTNAME, CR_ACCS.NAME


View: DR_BESTSELLERS_VW
NameDR_BESTSELLERS_VW
Note
CodeCREATE VIEW [dbo].[DR_BESTSELLERS_VW]
AS
SELECT [NAME], D.ACCNO, ST.STOCKCODE, S.[DESCRIPTION], QUANTITY, AVEPRICE, TOTALSALE
FROM DR_ACCS D
LEFT JOIN
(SELECT STOCKCODE, ABS(SUM(QUANTITY)) AS QUANTITY, AVG(UNITPRICE) AS AVEPRICE, (ABS(SUM(QUANTITY)) * AVG(ISNULL(UNITPRICE, 0))) AS TOTALSALE, ACCNO
FROM STOCK_TRANS GROUP BY ACCNO, STOCKCODE) ST ON D.ACCNO = ST.ACCNO
JOIN STOCK_ITEMS S ON ST.STOCKCODE = S.STOCKCODE
WHERE ST.QUANTITY > 0


View: DR_REF_SEARCH_VW
NameDR_REF_SEARCH_VW
Note
CodeCREATE VIEW [dbo].[DR_REF_SEARCH_VW]
AS
SELECT DATASET.*, DA.ACCNO AS DACCNO, DA.NAME, DA.ALPHACODE
FROM (
SELECT 'DR_TRANS' AS TABLENAME, 'INVNO' AS FIELD_NAME, CONVERT(VARCHAR, INVNO) AS VALUE,
SEQNO, CONVERT(VARCHAR, INVNO) AS INVNO, ACCNO, TRANSDATE, TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, ALLOCATEDBAL
FROM DR_TRANS

UNION

SELECT 'DR_TRANS' AS TABLENAME, 'REF1' AS FIELD_NAME, CONVERT(VARCHAR, REF1) AS VALUE,
SEQNO, CONVERT(VARCHAR, INVNO) AS INVNO, ACCNO, TRANSDATE, TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, ALLOCATEDBAL
FROM DR_TRANS

UNION

SELECT 'DR_TRANS' AS TABLENAME, 'REF2' AS FIELD_NAME, CONVERT(VARCHAR, REF2) AS VALUE,
SEQNO, CONVERT(VARCHAR, INVNO) AS INVNO, ACCNO, TRANSDATE, TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, ALLOCATEDBAL
FROM DR_TRANS
WHERE REF2 <> ''
UNION

SELECT 'DR_TRANS' AS TABLENAME, 'REF3' AS FIELD_NAME, CONVERT(VARCHAR, REF3) AS VALUE,
SEQNO, CONVERT(VARCHAR, INVNO) AS INVNO, ACCNO, TRANSDATE, TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, ALLOCATEDBAL
FROM DR_TRANS

UNION

SELECT 'DR_TRANS' AS TABLENAME, 'NAME' AS FIELD_NAME, CONVERT(VARCHAR, [NAME]) AS VALUE,
SEQNO, CONVERT(VARCHAR, INVNO) AS INVNO, ACCNO, TRANSDATE, TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, ALLOCATEDBAL
FROM DR_TRANS

UNION

SELECT 'DR_TRANS' AS TABLENAME, 'DELIVADDR1' AS FIELD_NAME, CONVERT(VARCHAR, DELIVADDR1) AS VALUE,
SEQNO, CONVERT(VARCHAR, INVNO) AS INVNO, ACCNO, TRANSDATE, TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, ALLOCATEDBAL
FROM DR_TRANS

UNION

SELECT 'DR_TRANS' AS TABLENAME, 'DELIVADDR2' AS FIELD_NAME, CONVERT(VARCHAR, DELIVADDR2) AS VALUE,
SEQNO, CONVERT(VARCHAR, INVNO) AS INVNO, ACCNO, TRANSDATE, TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, ALLOCATEDBAL
FROM DR_TRANS

UNION

SELECT 'DR_TRANS' AS TABLENAME, 'DELIVADDR3' AS FIELD_NAME, CONVERT(VARCHAR, DELIVADDR3) AS VALUE,
SEQNO, CONVERT(VARCHAR, INVNO) AS INVNO, ACCNO, TRANSDATE, TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, ALLOCATEDBAL
FROM DR_TRANS

UNION

SELECT 'DR_TRANS' AS TABLENAME, 'DELIVADDR4' AS FIELD_NAME, CONVERT(VARCHAR, DELIVADDR4) AS VALUE,
SEQNO, CONVERT(VARCHAR, INVNO) AS INVNO, ACCNO, TRANSDATE, TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, ALLOCATEDBAL
FROM DR_TRANS

UNION

SELECT 'DR_TRANS' AS TABLENAME, 'AMOUNT' AS FIELD_NAME, CONVERT(VARCHAR, AMOUNT) AS VALUE,
SEQNO, CONVERT(VARCHAR, INVNO) AS INVNO, ACCNO, TRANSDATE, TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, ALLOCATEDBAL
FROM DR_TRANS

UNION

SELECT 'DR_TRANS' AS TABLENAME, 'NARRATIVE' AS FIELD_NAME, CONVERT(VARCHAR, NARRATIVE) AS VALUE,
D.SEQNO, CONVERT(VARCHAR, INVNO) AS INVNO, ACCNO, TRANSDATE, TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, ALLOCATEDBAL
FROM DR_TRANS D
INNER JOIN NARRATIVES N ON D.NARRATIVE_SEQNO = N.SEQNO

UNION

SELECT 'DR_INVLINES' AS TABLENAME, 'STOCKCODE' AS FIELD_NAME, CONVERT(VARCHAR, STOCKCODE) AS VALUE,
D.SEQNO, CONVERT(VARCHAR, D.INVNO) AS INVNO, D.ACCNO, D.TRANSDATE, D.TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, D.BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, D.ALLOCATEDBAL
FROM DR_INVLINES DI
INNER JOIN DR_TRANS D ON DI.HDR_SEQNO = D.SEQNO

UNION

SELECT 'DR_INVLINES' AS TABLENAME, 'DESCRIPTION' AS FIELD_NAME, CONVERT(VARCHAR, [DESCRIPTION]) AS VALUE,
D.SEQNO, CONVERT(VARCHAR, D.INVNO) AS INVNO, D.ACCNO, D.TRANSDATE, D.TRANSTYPE, EFTCAID, EFTAUTH,
EFTSTAN, SUBTOTAL, TAXTOTAL, D.BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, D.ALLOCATEDBAL
FROM DR_INVLINES DI
INNER JOIN DR_TRANS D ON DI.HDR_SEQNO = D.SEQNO

UNION

SELECT 'DR_INVLINES' AS TABLENAME, 'LINKED_STOCKCODE' AS FIELD_NAME, CONVERT(VARCHAR, LINKED_STOCKCODE) AS VALUE,
D.SEQNO, CONVERT(VARCHAR, D.INVNO) AS INVNO, D.ACCNO, D.TRANSDATE, D.TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, D.BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, D.ALLOCATEDBAL
FROM DR_INVLINES DI
INNER JOIN DR_TRANS D ON DI.HDR_SEQNO = D.SEQNO

UNION

SELECT 'DR_INVLINES' AS TABLENAME, 'NARRATIVE' AS FIELD_NAME, CONVERT(VARCHAR, NARRATIVE) AS VALUE,
D.SEQNO, CONVERT(VARCHAR, D.INVNO) AS INVNO, D.ACCNO, D.TRANSDATE, D.TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, D.BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, D.ALLOCATEDBAL
FROM DR_INVLINES DI
INNER JOIN DR_TRANS D ON DI.HDR_SEQNO = D.SEQNO
INNER JOIN NARRATIVES N ON DI.NARRATIVE_SEQNO = N.SEQNO

UNION

SELECT 'DR_ACCS' AS TABLENAME, 'BANK_ACCOUNT' AS FIELD_NAME,
CONVERT(VARCHAR, REPLACE(REPLACE(BANK_ACCOUNT, '-', ''), ' ', '')) AS VALUE,
SEQNO, CONVERT(VARCHAR, INVNO) AS INVNO, DT.ACCNO, TRANSDATE, TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, DT.BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, ALLOCATEDBAL
FROM DR_ACCS DA
LEFT JOIN DR_TRANS DT ON DA.ACCNO = DT.ACCNO

UNION

SELECT 'DR_ACCS' AS TABLENAME, 'ACCNAME' AS FIELD_NAME,
CONVERT(VARCHAR, DA.NAME) AS VALUE,
SEQNO, CONVERT(VARCHAR, INVNO) AS INVNO, DT.ACCNO, TRANSDATE, TRANSTYPE, EFTCAID, EFTAUTH, EFTSTAN,
SUBTOTAL, TAXTOTAL, DT.BRANCHNO, SESSION_ID, GATEWAYNO, POSTTIME, ALLOCATEDBAL
FROM DR_ACCS DA
LEFT JOIN DR_TRANS DT ON DA.ACCNO = DT.ACCNO

) DATASET
INNER JOIN DR_ACCS DA ON DATASET.ACCNO = DA.ACCNO
WHERE VALUE <> ''


View: DR_TRANS_PERIOD_SUMMARY_VW
NameDR_TRANS_PERIOD_SUMMARY_VW
Note
CodeCREATE VIEW [dbo].[DR_TRANS_PERIOD_SUMMARY_VW]
AS
SELECT TOP 100 PERCENT DR_TRANS.ACCNO, DR_ACCS.NAME, PERIOD_STATUS.PERIOD_SHORTNAME, PERIOD_STATUS.AGE, PERIOD_STATUS.PERIODNAME,
                      CASE WHEN (sum(DR_TRANS.SUBTOTAL) > 0) AND (TRANSTYPE = 1) THEN sum(DR_TRANS.SUBTOTAL / DR_TRANS.EXCHRATE) ELSE 0 END AS INVOICES,
                      CASE WHEN (sum(DR_TRANS.SUBTOTAL) > 0) AND (TRANSTYPE = 1) THEN sum(DR_TRANS.TAXTOTAL / DR_TRANS.EXCHRATE) ELSE 0 END AS INVOICEGST,
                      CASE WHEN (sum(DR_TRANS.SUBTOTAL) < 0) AND (TRANSTYPE = 1) THEN sum(DR_TRANS.SUBTOTAL / DR_TRANS.EXCHRATE) ELSE 0 END AS CREDITS,
                      CASE WHEN (sum(DR_TRANS.SUBTOTAL) < 0) AND (TRANSTYPE = 1) THEN sum(DR_TRANS.TAXTOTAL / DR_TRANS.EXCHRATE) ELSE 0 END AS CREDITGST,
                      CASE WHEN (sum(AMOUNT) < 0) AND (TRANSTYPE = 4) THEN sum(DR_TRANS.AMOUNT / DR_TRANS.EXCHRATE) ELSE 0 END AS RECEIPTS,
                      CASE WHEN (sum(AMOUNT) > 0) AND (TRANSTYPE = 4) THEN sum(DR_TRANS.AMOUNT / DR_TRANS.EXCHRATE) ELSE 0 END AS REFUNDS,
                      CASE WHEN (sum(AMOUNT) < 0) AND (TRANSTYPE = 5) THEN sum(DR_TRANS.AMOUNT / DR_TRANS.EXCHRATE) ELSE 0 END AS CRADJUST,
                      CASE WHEN (sum(AMOUNT) > 0) AND (TRANSTYPE = 5) THEN sum(DR_TRANS.AMOUNT / DR_TRANS.EXCHRATE) ELSE 0 END AS DRADJUST, sum(amount) as amount

FROM dbo.DR_TRANS DR_TRANS LEFT OUTER JOIN
                      dbo.PERIOD_STATUS PERIOD_STATUS ON (PERIOD_STATUS.SEQNO = DR_TRANS.PERIOD_SEQNO) INNER JOIN
                      dbo.DR_ACCS DR_ACCS ON (DR_ACCS.ACCNO = DR_TRANS.ACCNO)

WHERE (PERIOD_STATUS.LEDGER = 'D')

GROUP BY DR_TRANS.ACCNO, PERIOD_STATUS.AGE, PERIOD_STATUS.PERIOD_SHORTNAME,
                      PERIOD_STATUS.PERIODNAME, DR_TRANS.EXCHRATE, DR_ACCS.NAME, transtype

ORDER BY DR_TRANS.ACCNO, PERIOD_STATUS.AGE, PERIOD_STATUS.PERIODNAME,
                      PERIOD_STATUS.PERIOD_SHORTNAME, DR_ACCS.NAME


View: GL_BRANCH_VW
NameGL_BRANCH_VW
Note
CodeCREATE VIEW [dbo].[GL_BRANCH_VW] AS SELECT BRANCHES.BRANCHNO, BRANCHES.BRANCHNAME, BRANCHES.BCODE,
GLSUBACCS.ACCNO, GLSUBACCS.SUBACCNO, GLSUBACCS.NAME, GLSUBACCS.REPORTCODE
FROM BRANCHES CROSS JOIN GLSUBACCS


View: JC_QuoteActuals_VW
NameJC_QuoteActuals_VW
Note
CodeCREATE VIEW [dbo].[JC_QuoteActuals_VW]
AS
SELECT TOP 100 PERCENT ISNULL(JOB_COSTGROUPS.COSTDESC, 'Unassigned Cost Group') AS costgroup, ISNULL(JOB_COSTGROUPS.SHORTCODE, '-')
                AS groupshort, ISNULL(JOB_COSTTYPES.COSTDESC, 'Unassigned Cost Type') AS costtype, ISNULL(JOB_COSTTYPES.SHORTCODE, '-') AS typeshort,
                JOBCOST_LINES.JOBNO, CASE jobcost_lines.BOMTYPE WHEN 'K' THEN SUM(jobcost_lines.total_quantity * jobcost_lines.Hidden_cost)
                ELSE SUM(jobcost_lines.total_quantity * jobcost_lines.actual_unitcost) END AS budget,
                CASE jobcost_lines.BOMTYPE WHEN 'K' THEN SUM((jobcost_lines.Hidden_sell / jobcost_lines.exchrate) * jobcost_lines.total_quantity)
                ELSE SUM((jobcost_lines.quote_unitpr / jobcost_lines.exchrate) * jobcost_lines.total_quantity) END AS quote,
                CASE job_transactions.BOMTYPE WHEN 'K' THEN SUM(job_transactions.quantity * job_transactions.Hidden_cost)
                ELSE SUM(job_transactions.quantity * job_transactions.unitcost) END AS costprice,
                CASE job_transactions.BOMTYPE WHEN 'K' THEN SUM((job_transactions.Hidden_sell / job_transactions.exchrate) * job_transactions.quantity)
                ELSE SUM((job_transactions.unitprice / job_transactions.exchrate) * job_transactions.quantity) END AS Sellingprice
FROM dbo.JOB_TRANSACTIONS AS JOB_TRANSACTIONS INNER JOIN
                dbo.JOBCOST_LINES AS JOBCOST_LINES ON JOBCOST_LINES.SEQNO = JOB_TRANSACTIONS.SOURCE_SEQNO LEFT OUTER JOIN
                dbo.JOB_COSTGROUPS AS JOB_COSTGROUPS ON JOB_COSTGROUPS.SEQNO = JOB_TRANSACTIONS.COST_GROUP LEFT OUTER JOIN
                dbo.JOB_COSTTYPES AS JOB_COSTTYPES ON JOB_COSTTYPES.SEQNO = JOB_TRANSACTIONS.COST_TYPE
WHERE (JOB_TRANSACTIONS.SOURCE_SEQNO <> - 1) AND (JOB_TRANSACTIONS.PROGRESSINVOICE <> 'Y') AND (JOB_TRANSACTIONS.LINE_SOURCE = 'Q')
                AND (JOB_TRANSACTIONS.LINETYPE <> 2)
GROUP BY JOBCOST_LINES.JOBNO, JOB_COSTGROUPS.COSTDESC, JOB_COSTGROUPS.SHORTCODE, JOB_COSTTYPES.COSTDESC,
                JOB_COSTTYPES.SHORTCODE, JOBCOST_LINES.BOMTYPE, JOB_TRANSACTIONS.BOMTYPE
ORDER BY JOBCOST_LINES.JOBNO, JOB_COSTGROUPS.COSTDESC, JOB_COSTGROUPS.SHORTCODE, JOB_COSTTYPES.COSTDESC,
                JOB_COSTTYPES.SHORTCODE


View: JC_QuoteCost_Stockcode_VW
NameJC_QuoteCost_Stockcode_VW
Note
CodeCREATE VIEW [dbo].[JC_QuoteCost_Stockcode_VW]
AS
SELECT TOP 100 PERCENT JL.STOCKCODE, ISNULL(JL.COST_CENTRE2, 0) AS COSTGROUPNO, ISNULL(JL.COST_CENTRE, 0) AS COSTTYPENO,
                ISNULL(CG.COSTDESC, 'Unassigned Cost Group') AS costgroup, ISNULL(CG.SHORTCODE, '-') AS groupshort, ISNULL(CT.COSTDESC,
                'Unassigned Cost Type') AS costtype, ISNULL(CT.SHORTCODE, '-') AS typeshort, JL.JOBNO,
                CASE JL.BOMTYPE WHEN 'K' THEN JL.HIDDEN_COST * JL.TOTAL_QUANTITY ELSE JL.ACTUAL_UNITCOST * JL.TOTAL_QUANTITY END AS QuoteCost,
                CASE JL.BOMTYPE WHEN 'K' THEN (JL.HIDDEN_SELL / JL.EXCHRATE) * JL.TOTAL_QUANTITY ELSE (JL.QUOTE_UNITPR / JL.EXCHRATE)
                * JL.TOTAL_QUANTITY END AS QuoteSell, 0 AS ActualCost, 0 AS ActualSell
FROM dbo.JOBCOST_LINES AS JL LEFT OUTER JOIN
                dbo.JOB_COSTGROUPS AS CG ON CG.SEQNO = JL.COST_CENTRE2 LEFT OUTER JOIN
                dbo.JOB_COSTTYPES AS CT ON CT.SEQNO = JL.COST_CENTRE LEFT OUTER JOIN
                dbo.JOB_QUOTE_OPTIONS AS JQ ON JQ.JOBNO = JL.JOBNO AND JQ.OPTION_NO = JL.OPTION_NO
WHERE (JL.LINETYPE <> 2) AND (JQ.OPTION_SELECTED = 'Y' OR JL.OPTION_NO=0)
UNION ALL
SELECT TOP 100 PERCENT JT.STOCKCODE, ISNULL(JT.COST_GROUP, 0) AS COSTGROUPNO, ISNULL(JT.COST_TYPE, 0) AS COSTTYPENO,
                ISNULL(CG.COSTDESC, 'Unassigned Cost Group') AS costgroup, ISNULL(CG.SHORTCODE, '-') AS groupshort, ISNULL(CT.COSTDESC,
                'Unassigned Cost Type') AS costtype, ISNULL(CT.SHORTCODE, '-') AS typeshort, JT.JOBNO, 0 AS QuoteCost, 0 AS QuoteSell,
                CASE JT.BOMTYPE WHEN 'K' THEN JT.HIDDEN_COST * JT.QUANTITY ELSE JT.UNITCOST * JT.QUANTITY END AS ActualCost,
                CASE JT.BOMTYPE WHEN 'K' THEN (JT.HIDDEN_SELL / JT.EXCHRATE) * JT.QUANTITY ELSE (JT.UNITPRICE / JT.EXCHRATE)
                * JT.QUANTITY END AS ActualSell
FROM dbo.JOB_TRANSACTIONS AS JT LEFT OUTER JOIN
                dbo.JOB_COSTGROUPS AS CG ON CG.SEQNO = JT.COST_GROUP LEFT OUTER JOIN
                dbo.JOB_COSTTYPES AS CT ON CT.SEQNO = JT.COST_TYPE
WHERE (JT.LINETYPE <> 2) AND (JT.PROGRESSINVOICE <> 'Y')


View: OPPORTUNITIES_VIEW
NameOPPORTUNITIES_VIEW
Note
CodeCREATE VIEW [dbo].[OPPORTUNITIES_VIEW] AS
SELECT
OPPORTUNITY_TYPE.DESCRIPTION OPP_TYPE,
OPPORTUNITY_LEAD.DESCRIPTION OPP_LEAD,
OPPORTUNITY_STAGE.DESCRIPTION OPP_STAGE,
COMPANIES.COMPANYNAME,
COMPANIES.ALPHACODE,
CONTACTS.FULLNAME CONTACTNAME,
STAFF_A.NAME ASSIGNED_TO_STAFF,
STAFF_B.NAME ASSIGNED_BY_STAFF,
CASE WHEN OPPORTUNITY.AMOUNT <> 0 THEN OPPORTUNITY.AMOUNT ELSE OPPORTUNITY.ESTIMATE END AS PIPELINE_VALUE,
CASE WHEN OPPORTUNITY.AMOUNT <> 0 THEN OPPORTUNITY.WEIGHTED_VALUE ELSE OPPORTUNITY.WEIGHTED_ESTIMATE END AS WEIGTHED_PIPELINE_VALUE,
OPPORTUNITY_STAGE.ISCOMPLETE AS COMPLETED,
OPPORTUNITY_STAGE.ISARCHIVED AS ARCHIVED,
OPPORTUNITY_STAGE.ISACTIVE AS ISACTIVE,
OPPORTUNITY.*
FROM OPPORTUNITY
LEFT JOIN OPPORTUNITY_TYPE ON OPPORTUNITY_TYPE.SEQNO=OPPORTUNITY.OPPORTUNITY_TYPE
LEFT JOIN OPPORTUNITY_LEAD ON OPPORTUNITY_LEAD.SEQNO=OPPORTUNITY.OPPORTUNITY_LEAD
LEFT JOIN OPPORTUNITY_STAGE ON OPPORTUNITY_STAGE.SEQNO=OPPORTUNITY.OPPORTUNITY_STAGE
LEFT JOIN COMPANIES ON OPPORTUNITY.COMPANYID=COMPANIES.COMPANYID
LEFT JOIN CONTACTS ON CONTACTS.SEQNO=OPPORTUNITY.CONTACTSEQNO
LEFT JOIN STAFF STAFF_A ON OPPORTUNITY.ASSIGNED_TO=STAFF_A.STAFFNO
LEFT JOIN STAFF STAFF_B ON OPPORTUNITY.ASSIGNED_BY=STAFF_B.STAFFNO


View: PREVIOUS_ITEMS_VIEW
NamePREVIOUS_ITEMS_VIEW
Note
CodeCREATE VIEW [dbo].[PREVIOUS_ITEMS_VIEW] AS
SELECT
*,
    CASE ENTITYTYPE
WHEN 0 THEN (SELECT FULLNAME FROM CONTACTS C WHERE C.SEQNO = PI.ENTITYID)
WHEN 1 THEN (SELECT NAME FROM DR_ACCS A WHERE A.ACCNO = PI.ENTITYID)
WHEN 2 THEN (SELECT NAME FROM CR_ACCS C WHERE C.ACCNO = PI.ENTITYID)
WHEN 3 THEN (SELECT NAME FROM PROSPECTS P WHERE P.SEQNO = PI.ENTITYID)
WHEN 4 THEN (SELECT DESCRIPTION FROM OPPORTUNITY O WHERE O.SEQNO = PI.ENTITYID)
WHEN 5 THEN (SELECT SUBJECT FROM TASKS T WHERE T.SEQNO = PI.ENTITYID)
WHEN 6 THEN (SELECT NAME FROM STAFF S WHERE S.STAFFNO = PI.ENTITYID)
WHEN 7 THEN (SELECT ASSETNAME FROM ASSET_REG R WHERE R.ASSETNO = PI.ENTITYID)
    END AS CAPTION
FROM PREVIOUS_ITEMS PI


View: STAFF_SALES_MONTHYEAR_VIEW
NameSTAFF_SALES_MONTHYEAR_VIEW
Note
CodeCREATE VIEW [dbo].[STAFF_SALES_MONTHYEAR_VIEW] AS
SELECT ASSIGNED_TO STAFFNO , ASSIGNED_TO_STAFF STAFFNAME,
YEAR(DUE_DATE) THE_YEAR, MONTH(DUE_DATE) THE_MONTH,
SUM(AMOUNT) SALES_AMOUNT FROM OPPORTUNITIES_VIEW
GROUP BY ASSIGNED_TO, ASSIGNED_TO_STAFF, YEAR(DUE_DATE), MONTH(DUE_DATE)


View: STOCK_TRANS_SERIALS_VIEW
NameSTOCK_TRANS_SERIALS_VIEW
Note
CodeCREATE VIEW [dbo].[STOCK_TRANS_SERIALS_VIEW] AS
SELECT STS.SERIALNO, ST.* FROM STOCK_TRANS_SERIALS STS
LEFT JOIN STOCK_TRANS ST ON STS.STOCKTRANSSEQNO=ST.SEQNO


View: TASKS_VIEW
NameTASKS_VIEW
Note
CodeCREATE VIEW [dbo].[TASKS_VIEW] AS
SELECT TASKS.*,
CASE
WHEN (TASKS.EVENTTYPE=0 AND (TASKS.OPTIONS & 1)=1) THEN TASKS.END_DATETIME-1
WHEN (TASKS.EVENTTYPE=1 AND (TASKS.OPTIONS & 1)=1) THEN TASKS.ACTUALFINISH-1
WHEN (TASKS.EVENTTYPE=1 AND (TASKS.OPTIONS & 1)<>1) THEN TASKS.END_DATETIME
ELSE TASKS.END_DATETIME
END END_DATETIME_FOR_DISPLAY,
COMPANIES.COMPANYNAME,
COMPANIES.ALPHACODE,
CONTACTS.FULLNAME CONTACTNAME,
TASK_TYPES.DESCRIPTION TASK_TYPE,
TASK_STATUSES.DESCRIPTION TASK_STATUS,
STAFF_A.NAME ASSIGNED_TO_STAFF,
STAFF_B.NAME ASSIGNED_BY_STAFF,
SO.CUSTORDERNO,
PO.REFERENCE PO_REFERENCE,
AR.ASSETCODE,
AR.ASSETNAME,
AR.DESCRIPTION ASSET_DESCRIPTION
FROM TASKS
LEFT JOIN COMPANIES ON TASKS.COMPANYID=COMPANIES.COMPANYID
LEFT JOIN CONTACTS ON TASKS.CONTACTSEQNO=CONTACTS.SEQNO
LEFT JOIN TASK_TYPES ON TASKS.TYPE=TASK_TYPES.SEQNO
LEFT JOIN TASK_STATUSES ON TASKS.STATUS=TASK_STATUSES.SEQNO
LEFT JOIN STAFF STAFF_A ON TASKS.ASSIGNED_TO=STAFF_A.STAFFNO
LEFT JOIN STAFF STAFF_B ON TASKS.ASSIGNED_BY=STAFF_B.STAFFNO
LEFT JOIN SALESORD_HDR SO ON TASKS.SO_SEQNO = SO.SEQNO
LEFT JOIN PURCHORD_HDR PO ON TASKS.PO_SEQNO = PO.SEQNO
LEFT JOIN ASSET_REG AR ON TASKS.ASSET_SEQNO = AR.ASSETNO


View: vwPRICE_SELECT
NamevwPRICE_SELECT
Note
CodeCREATE VIEW [dbo].[vwPRICE_SELECT]
AS
(SELECT STOCKCODE, 1 AS PRICENO, SELLPRICE1 AS SELLPRICE FROM STOCK_ITEMS)
UNION ALL
(SELECT STOCKCODE, 2 AS PRICENO, SELLPRICE2 AS SELLPRICE FROM STOCK_ITEMS)
UNION ALL
(SELECT STOCKCODE, 3 AS PRICENO, SELLPRICE3 AS SELLPRICE FROM STOCK_ITEMS)
UNION ALL
(SELECT STOCKCODE, 4 AS PRICENO, SELLPRICE4 AS SELLPRICE FROM STOCK_ITEMS)
UNION ALL
(SELECT STOCKCODE, 5 AS PRICENO, SELLPRICE5 AS SELLPRICE FROM STOCK_ITEMS)
UNION ALL
(SELECT STOCKCODE, 6 AS PRICENO, SELLPRICE6 AS SELLPRICE FROM STOCK_ITEMS)
UNION ALL
(SELECT STOCKCODE, 7 AS PRICENO, SELLPRICE7 AS SELLPRICE FROM STOCK_ITEMS)
UNION ALL
(SELECT STOCKCODE, 8 AS PRICENO, SELLPRICE8 AS SELLPRICE FROM STOCK_ITEMS)
UNION ALL
(SELECT STOCKCODE, 9 AS PRICENO, SELLPRICE9 AS SELLPRICE FROM STOCK_ITEMS)
UNION ALL
(SELECT STOCKCODE, 10 AS PRICENO, SELLPRICE10 AS SELLPRICE FROM STOCK_ITEMS)


View: VW_ACTIVITYTYPEFORCUST
NameVW_ACTIVITYTYPEFORCUST
Note
CodeCREATE VIEW [dbo].[VW_ACTIVITYTYPEFORCUST]
AS
SELECT TASKS_VIEW.ACTIVITY_TYPE,
   TASKS_VIEW.COMPANYNAME,
   TASKS_VIEW.COMPANYID,
   TASKS_VIEW.START_DATETIME,
  isnull(case when ACTIVITY_TYPE= 0 then COUNT(*) end, 0) AS TotalAppointment,
   isnull(case when ACTIVITY_TYPE= 1 then COUNT(*) end, 0) AS TotalTask
FROM TASKS_VIEW TASKS_VIEW
WHERE SUBSTRING(COMPANYID, 1, 1)='D'
GROUP BY TASKS_VIEW.ACTIVITY_TYPE,
     TASKS_VIEW.COMPANYNAME,
     TASKS_VIEW.START_DATETIME,
     TASKS_VIEW.COMPANYID


View: VW_ACTIVITY_PIPELINE
NameVW_ACTIVITY_PIPELINE
Note
CodeCREATE VIEW [dbo].[VW_ACTIVITY_PIPELINE]
AS
select SUBSTRING(COMPANYID, 2, (LEN(COMPANYID))) As ActivityAccNo,
SUBSTRING(COMPANYID, 1, 1) As ActivityCompanyType,
TASKS.*
from TASKS


View: VW_CAMPAIGN_SUMMARY
NameVW_CAMPAIGN_SUMMARY
Note
CodeCREATE VIEW [dbo].[VW_CAMPAIGN_SUMMARY]
AS
WITH
-- Campaign Details
CTE_CAMP (CAMPAIGN_SEQNO, CAMPAIGN_TITLE, CAMPAIGN_REFERENCE
, CAMPAIGN_DESCRIPTION, CAMPAIGN_STARTDATE, CAMPAIGN_ENDDATE
, ESTIMATED_COST, ESTIMATED_REVENUE, CAMPAIGN_STAGE
, STAGE_DESCRIPTION, CAMPAIGN_OWNER, OWNER_NAME)
AS (SELECT CA.SEQNO, CA.TITLE , CA.REFERENCE
, CA.DESCRIPT, CA.STARTDATE, CA.ENDDATE
, CA.EST_COST, CA.EST_REVENUE, CA.CAMPAIGN_STAGE
, ST.DESCRIPT, CA.OWNER, STF.NAME
     FROM CAMPAIGN CA WITH (NOLOCK)
     LEFT JOIN CAMPAIGN_STAGE ST ON ST.SEQNO=CA.CAMPAIGN_STAGE
     LEFT JOIN STAFF STF ON STF.STAFFNO=CA.OWNER)
,
-- Campaign Relevant Summary
CTE_SUMM (CAMPAIGN_SEQNO
    , TOTAL_TARGETS, TOTAL_ACTIVITIES, TOTAL_EMAILED
, TOTAL_PRINTED, TOTAL_EXPORTLIST, TOTAL_EXECSQL_CONCURRENT
, TOTAL_EXECSQL_CONSECUTIVE, TOTAL_EXTPROGRM_CONCURRENT, TOTAL_EXTPROGRM_CONSECUTIVE
, TOTAL_SOCIAL_MEDIA_POSTING, TOTAL_OPPORTUNITIES, TOTAL_QUOTES
, TOTAL_SALESORDER, TOTAL_INVOICES
, TOTAL_JOBS
, OPPORTUNITIES_AMOUNT, QUOTES_AMOUNT, SALESORDER_AMOUNT
, INVOICES_AMOUNT, GROSS_PROFIT_AMOUNT
 , DIRECT_COST_AMOUNT
)
AS (SELECT CA.SEQNO
-- # OF TARGETS
, ISNULL((SELECT COUNT(*)
FROM CONTACT_LIST CL, CAMPAIGN_CONTACT_LISTS ID, CONTACT_LIST_ITEM TG, CONTACTS CT
WHERE ID.CAMPAIGN_SEQNO=CA.SEQNO
AND CL.SEQNO=ID.CONTACT_LIST_SEQNO
AND TG.HDR_SEQNO=CL.SEQNO
AND TG.ITEM_SEQNO=CT.SEQNO), 0) TOTAL_TARGETS
-- # OF Instant/Bulk activities created
, ISNULL((SELECT COUNT(*) FROM TASKS TA
WHERE TA.CAMPAIGN_SEQNO=CA.SEQNO
AND TA.DELETED_FLAG='N'), 0) TOTAL_ACTIVITIES
-- # OF MailShot(1) Emailed
, ISNULL((SELECT COUNT(*) FROM CAMPAIGN_WAVE_AUDIT WA, CAMPAIGN_WAVE CW
WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO
AND WA.CAMPAIGN_WAVE_SEQNO=CW.SEQNO
AND WA.COMMUNICATION_METHOD=1
AND WA.EXECUTE_TYPE='EMAILED'), 0) TOTAL_EMAILED
-- # OF MailShot(1) Printed
, ISNULL((SELECT COUNT(*) FROM CAMPAIGN_WAVE_AUDIT WA, CAMPAIGN_WAVE CW
WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO
AND WA.CAMPAIGN_WAVE_SEQNO=CW.SEQNO
AND WA.COMMUNICATION_METHOD=1
AND WA.EXECUTE_TYPE='PRINTED'), 0) TOTAL_PRINTED
-- # OF Export List(5)
, ISNULL((SELECT COUNT(*) FROM CAMPAIGN_WAVE_AUDIT WA, CAMPAIGN_WAVE CW
WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO
AND WA.CAMPAIGN_WAVE_SEQNO=CW.SEQNO
AND WA.COMMUNICATION_METHOD=5), 0) TOTAL_EXPORTLIST
-- # OF ExecSQL(3) Concurrently
, ISNULL((SELECT COUNT(*) FROM CAMPAIGN_WAVE_AUDIT WA, CAMPAIGN_WAVE CW
WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO
AND WA.CAMPAIGN_WAVE_SEQNO=CW.SEQNO
AND WA.COMMUNICATION_METHOD=3
AND WA.EXECUTE_TYPE='CONCURRENT'), 0) TOTAL_EXECSQL_CONCURRENT
-- # OF ExecSQL(3) Consecutive
, ISNULL((SELECT COUNT(*) FROM CAMPAIGN_WAVE_AUDIT WA, CAMPAIGN_WAVE CW
WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO
AND WA.CAMPAIGN_WAVE_SEQNO=CW.SEQNO
AND WA.COMMUNICATION_METHOD=3
AND WA.EXECUTE_TYPE='CONSECUTIVE'), 0) TOTAL_EXECSQL_CONSECUTIVE
-- # OF External Program(6) Concurrently
, ISNULL((SELECT COUNT(*) FROM CAMPAIGN_WAVE_AUDIT WA, CAMPAIGN_WAVE CW
WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO
AND WA.CAMPAIGN_WAVE_SEQNO=CW.SEQNO
AND WA.COMMUNICATION_METHOD=6
AND WA.EXECUTE_TYPE='CONCURRENT'), 0) TOTAL_EXTPROGRM_CONCURRENT
-- # OF External Program(6) Consecutive
, ISNULL((SELECT COUNT(*) FROM CAMPAIGN_WAVE_AUDIT WA, CAMPAIGN_WAVE CW
WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO
AND WA.CAMPAIGN_WAVE_SEQNO=CW.SEQNO
AND WA.COMMUNICATION_METHOD=6
AND WA.EXECUTE_TYPE='CONSECUTIVE'), 0) TOTAL_EXTPROGRM_CONSECUTIVE
-- # OF Social Media Posting
, ISNULL((SELECT SUM(CASE WHEN CW.FACEBOOK_POST_ID IS NULL THEN 0 ELSE 1 END +
                     CASE WHEN CW.TWITTER_POST_ID IS NULL THEN 0 ELSE 1 END +
                     CASE WHEN CW.LINKEDIN_POST_DATE IS NULL THEN 0 ELSE 1 END)
        FROM CAMPAIGN_WAVE CW
       WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO
         AND CW.COMMUNICATION_METHOD=4), 0) TOTAL_SOCIAL_MEDIA_POSTING
-- # OF OPPORTUNITIES
, ISNULL((SELECT COUNT(*) FROM OPPORTUNITY OP, CAMPAIGN_WAVE CW
        WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO
AND OP.CAMPAIGN_WAVE_SEQNO=CW.SEQNO), 0) TOTAL_OPPORTUNITIES
-- # OF QUOTES
, ISNULL((SELECT COUNT(*) FROM SALESORD_HDR QO, CAMPAIGN_WAVE CW
WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO AND QO.STATUS=3 AND QO.PROCESSFINALISATION=0
AND QO.CAMPAIGN_WAVE_SEQNO=CW.SEQNO), 0) TOTAL_QUOTES
-- # OF SALES ORDERS (NOT PROCESSED ORDER, PARTLY PROCESSED/BACK ORDER, FULLY PROCESSED ORDER)
, ISNULL((SELECT COUNT(*) FROM SALESORD_HDR SO, CAMPAIGN_WAVE CW
WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO AND SO.STATUS IN (0, 1, 2) AND SO.PROCESSFINALISATION=0
AND SO.CAMPAIGN_WAVE_SEQNO=CW.SEQNO), 0) TOTAL_SALESORDER
-- # OF INVOICES
, ISNULL((SELECT COUNT(*) FROM VW_FACT_SALESTRANS IV, CAMPAIGN_WAVE CW
        WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO AND IV.TRANSTYPE=1 AND IV.IVAL > 0
AND IV.CAMPAIGN_WAVE_SEQNO=CW.SEQNO), 0) TOTAL_INVOICES
--# OF JOBS
    , ISNULL((SELECT COUNT(*) FROM JOBCOST_HDR JH, CAMPAIGN_WAVE CW
        WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO
          AND JH.CAMPAIGN_WAVE_SEQNO=CW.SEQNO), 0) TOTAL_JOBS
--$ OF OPPORTUNITIES
, ISNULL((SELECT SUM(ROUND(ISNULL(OP.AMOUNT, 0)/(CASE WHEN ISNULL(OP.EXCHRATE, 0)=0 THEN 1 ELSE OP.EXCHRATE END), 4)) FROM OPPORTUNITY OP, CAMPAIGN_WAVE CW
        WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO
AND OP.CAMPAIGN_WAVE_SEQNO=CW.SEQNO), 0) OPPORTUNITIES_AMOUNT
--$ OF QUOTES
, ISNULL((SELECT SUM(ISNULL(QO.LOCALVALUE, 0)) FROM SALESORD_HDR QO, CAMPAIGN_WAVE CW
WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO AND QO.STATUS=3 AND QO.PROCESSFINALISATION=0
AND QO.CAMPAIGN_WAVE_SEQNO=CW.SEQNO), 0) QUOTES_AMOUNT
--$ OF SALES ORDERS (NOT PROCESSED ORDER, PARTLY PROCESSED/BACK ORDER, FULLY PROCESSED ORDER)
, ISNULL((SELECT SUM(ISNULL(SO.LOCALVALUE, 0)) FROM SALESORD_HDR SO, CAMPAIGN_WAVE CW
WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO AND SO.STATUS IN (0, 1, 2) AND SO.PROCESSFINALISATION=0
AND SO.CAMPAIGN_WAVE_SEQNO=CW.SEQNO), 0) SALESORDER_AMOUNT
--$ OF INVOICES
, ISNULL((SELECT SUM(ROUND(ISNULL(IV.IVAL, 0), 4)) FROM VW_FACT_SALESTRANS IV, CAMPAIGN_WAVE CW
        WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO AND IV.TRANSTYPE=1
AND IV.CAMPAIGN_WAVE_SEQNO=CW.SEQNO), 0) INVOICES_AMOUNT
--$ OF GROSS PROFIT
, ISNULL((SELECT SUM(ISNULL(IV.IPROFIT, 0)) FROM VW_FACT_SALESTRANS IV, CAMPAIGN_WAVE CW
WHERE CW.CAMPAIGN_SEQNO=CA.SEQNO AND IV.TRANSTYPE=1
AND IV.CAMPAIGN_WAVE_SEQNO=CW.SEQNO), 0) GROSS_PROFIT_AMOUNT
--$ OF ACTUAL/DIRECT COST
, ISNULL((SELECT SUM(ISNULL(JH.TOTALCOST, 0)) FROM JOBCOST_HDR JH
        WHERE JH.JOBNO=CA.JOB_LINK), 0) DIRECT_COST_AMOUNT
     FROM CAMPAIGN CA WITH (NOLOCK)
 )
-- The Actual Campaign Summary with formula
SELECT CAMP.CAMPAIGN_SEQNO, CAMP.CAMPAIGN_TITLE, CAMP.CAMPAIGN_REFERENCE
  , CAMP.CAMPAIGN_DESCRIPTION, CAMP.CAMPAIGN_STARTDATE, CAMP.CAMPAIGN_ENDDATE
     , CAMP.ESTIMATED_COST, CAMP.ESTIMATED_REVENUE, CAMP.CAMPAIGN_STAGE
     , CAMP.STAGE_DESCRIPTION, CAMP.CAMPAIGN_OWNER, CAMP.OWNER_NAME
     , SUMM.TOTAL_TARGETS, SUMM.TOTAL_ACTIVITIES, SUMM.TOTAL_EMAILED
     , SUMM.TOTAL_PRINTED, SUMM.TOTAL_EXPORTLIST, SUMM.TOTAL_EXECSQL_CONCURRENT
, SUMM.TOTAL_EXECSQL_CONSECUTIVE, SUMM.TOTAL_EXTPROGRM_CONCURRENT, SUMM.TOTAL_EXTPROGRM_CONSECUTIVE
, SUMM.TOTAL_SOCIAL_MEDIA_POSTING, SUMM.TOTAL_OPPORTUNITIES, SUMM.TOTAL_QUOTES
, SUMM.TOTAL_SALESORDER, SUMM.TOTAL_INVOICES
, SUMM.TOTAL_JOBS
, SUMM.OPPORTUNITIES_AMOUNT, SUMM.QUOTES_AMOUNT, SUMM.SALESORDER_AMOUNT
, SUMM.INVOICES_AMOUNT, SUMM.GROSS_PROFIT_AMOUNT
, SUMM.DIRECT_COST_AMOUNT
, CASE
         WHEN ((ISNULL(SUMM.DIRECT_COST_AMOUNT, 0)=0) AND (ISNULL(SUMM.GROSS_PROFIT_AMOUNT, 0)=0)) THEN 0
         WHEN ((ISNULL(SUMM.DIRECT_COST_AMOUNT, 0)=0) AND (ISNULL(SUMM.GROSS_PROFIT_AMOUNT, 0)<>0)) THEN 100
         ELSE ROUND(ISNULL(SUMM.GROSS_PROFIT_AMOUNT, 0) / ISNULL(SUMM.DIRECT_COST_AMOUNT, 0) * 100, 2)
       END AS ACTUAL_ROI
     , ISNULL(SUMM.TOTAL_ACTIVITIES, 0)
     + ISNULL(SUMM.TOTAL_EMAILED, 0)
     + ISNULL(SUMM.TOTAL_PRINTED, 0)
     + ISNULL(SUMM.TOTAL_EXPORTLIST, 0)
     + ISNULL(SUMM.TOTAL_EXECSQL_CONCURRENT, 0)
     + ISNULL(SUMM.TOTAL_EXECSQL_CONSECUTIVE, 0)
     + ISNULL(SUMM.TOTAL_EXTPROGRM_CONCURRENT, 0)
     + ISNULL(SUMM.TOTAL_EXTPROGRM_CONSECUTIVE, 0)
     + ISNULL(SUMM.TOTAL_SOCIAL_MEDIA_POSTING, 0) AS TOTAL_OUTBOUND
  FROM CTE_CAMP CAMP
  LEFT JOIN CTE_SUMM SUMM ON SUMM.CAMPAIGN_SEQNO=CAMP.CAMPAIGN_SEQNO


View: VW_COMPANY_PIPELINE
NameVW_COMPANY_PIPELINE
Note
CodeCREATE VIEW [dbo].[VW_COMPANY_PIPELINE]
AS
select SUBSTRING(COMPANYID, 2, (LEN(COMPANYID))) As ActivityAccNo,
SUBSTRING(COMPANYID, 1, 1) As ActivityCompanyType,
COMPANIES.COMPANYID
from COMPANIES


View: VW_CRM_ACTUAL_SALES
NameVW_CRM_ACTUAL_SALES
Note
CodeCREATE VIEW [dbo].[VW_CRM_ACTUAL_SALES]
AS
select
     ACCNO, ACCGROUP, ACCGROUP2, SKU as STOCKCODE, IVAL as LINETOTAL, PERIODID as PERIOD_SEQNO, STOCKGROUP, STOCKGROUP2, SALESNO, TRANSDATE,
                      BRANCHNO
from VW_FACT_SALES


View: VW_CRM_LYACTUAL_SALES
NameVW_CRM_LYACTUAL_SALES
Note
CodeCREATE VIEW [dbo].[VW_CRM_LYACTUAL_SALES]
AS
select
     ACCNO, ACCGROUP, ACCGROUP2, SKU as STOCKCODE, IVAL as LINETOTAL, PERIODID as PERIOD_SEQNO, STOCKGROUP, STOCKGROUP2, SALESNO, TRANSDATE,
                      BRANCHNO
from VW_FACT_SALES


View: VW_CR_ATB_BY_DUEDATE
NameVW_CR_ATB_BY_DUEDATE
Note
CodeCREATE VIEW [dbo].[VW_CR_ATB_BY_DUEDATE]
AS

SELECT C.ACCNO,
                AGEDBALM90D = CONVERT(MONEY, ISNULL(AGEM3.SUMAGEBAL, 0)),
                AGEDBALM60D = CONVERT(MONEY, ISNULL(AGEM2.SUMAGEBAL, 0)),
                AGEDBALM30D = CONVERT(MONEY, ISNULL(AGEM1.SUMAGEBAL, 0)),
                AGEDBALCURRENT = CONVERT(MONEY, ISNULL(AGE0.SUMAGEBAL, 0)),
                AGEDBAL30D = CONVERT(MONEY, ISNULL(AGE1.SUMAGEBAL, 0)),
                AGEDBAL60D = CONVERT(MONEY, ISNULL(AGE2.SUMAGEBAL, 0)),
                AGEDBAL90D = CONVERT(MONEY, ISNULL(AGE3.SUMAGEBAL, 0)),
                TOTAL = CONVERT(MONEY, ISNULL(AGEM3.SUMAGEBAL, 0) + ISNULL(AGEM2.SUMAGEBAL, 0) + ISNULL(AGEM1.SUMAGEBAL, 0) + ISNULL(AGE0.SUMAGEBAL, 0) + ISNULL(AGE1.SUMAGEBAL, 0) + ISNULL(AGE2.SUMAGEBAL, 0) + ISNULL(AGE3.SUMAGEBAL, 0)),
                CU.CURRCODE AS CURRENCY,
                CU.BUYRATE
FROM CR_ACCS C
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) AS SUMAGEBAL
  FROM CR_ACCS A
  LEFT JOIN CR_TRANS T ON A.ACCNO=T.ACCNO AND T.ALLOCATED < 2
  WHERE DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) < 30 AND DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) > -30
  GROUP BY A.ACCNO) AGE0 ON C.ACCNO = AGE0.ACCNO
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) AS SUMAGEBAL
  FROM CR_ACCS A
  LEFT JOIN CR_TRANS T ON A.ACCNO=T.ACCNO AND T.ALLOCATED='0'
  WHERE DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) <= -30 AND DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) > -60
  GROUP BY A.ACCNO) AGE1 ON C.ACCNO = AGE1.ACCNO
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) AS SUMAGEBAL
  FROM CR_ACCS A
  LEFT JOIN CR_TRANS T ON A.ACCNO=T.ACCNO AND T.ALLOCATED='0'
  WHERE DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) <= -60 AND DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) > -90
  GROUP BY A.ACCNO, T.AGE) AGE2 ON C.ACCNO = AGE2.ACCNO
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) SUMAGEBAL
  FROM CR_ACCS A
  LEFT JOIN CR_TRANS T ON A.ACCNO=T.ACCNO AND T.ALLOCATED='0'
  WHERE DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) <= -90
  GROUP BY A.ACCNO) AGE3 ON C.ACCNO = AGE3.ACCNO
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) AS SUMAGEBAL
  FROM CR_ACCS A
  LEFT JOIN CR_TRANS T ON A.ACCNO=T.ACCNO AND T.ALLOCATED='0'
  WHERE DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) >= 30 AND DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) < 60
  GROUP BY A.ACCNO) AGEM1 ON C.ACCNO = AGEM1.ACCNO
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) AS SUMAGEBAL
  FROM CR_ACCS A
  LEFT JOIN CR_TRANS T ON A.ACCNO=T.ACCNO AND T.ALLOCATED='0'
  WHERE DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) >= 60 AND DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) < 90
  GROUP BY A.ACCNO, T.AGE) AGEM2 ON C.ACCNO = AGEM2.ACCNO
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) AS SUMAGEBAL
  FROM CR_ACCS A
  LEFT JOIN CR_TRANS T ON A.ACCNO=T.ACCNO AND T.ALLOCATED='0'
  WHERE DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) >= 90
  GROUP BY A.ACCNO) AGEM3 ON C.ACCNO = AGEM3.ACCNO
LEFT JOIN CURRENCIES CU ON C.CURRENCYNO = CU.CURRENCYNO
GROUP BY C.ACCNO, AGEM1.SUMAGEBAL, AGEM2.SUMAGEBAL, AGEM3.SUMAGEBAL, AGE0.SUMAGEBAL, AGE1.SUMAGEBAL, AGE2.SUMAGEBAL, AGE3.SUMAGEBAL, CU.CURRCODE, CU.BUYRATE


View: VW_DR_ATB_BY_DUEDATE
NameVW_DR_ATB_BY_DUEDATE
Note
CodeCREATE VIEW [dbo].[VW_DR_ATB_BY_DUEDATE]
AS

SELECT D.ACCNO,
                AGEDBALM90D = CONVERT(MONEY, ISNULL(AGEM3.SUMAGEBAL, 0)),
                AGEDBALM60D = CONVERT(MONEY, ISNULL(AGEM2.SUMAGEBAL, 0)),
                AGEDBALM30D = CONVERT(MONEY, ISNULL(AGEM1.SUMAGEBAL, 0)),
                AGEDBALCURRENT = CONVERT(MONEY, ISNULL(AGE0.SUMAGEBAL, 0)),
                AGEDBAL30D = CONVERT(MONEY, ISNULL(AGE1.SUMAGEBAL, 0)),
                AGEDBAL60D = CONVERT(MONEY, ISNULL(AGE2.SUMAGEBAL, 0)),
                AGEDBAL90D = CONVERT(MONEY, ISNULL(AGE3.SUMAGEBAL, 0)),
                UNALLOC_DEPOSIT = CONVERT(MONEY, ISNULL(DEP.UNALLOC_DEPOSIT, 0)),
                UNALLOC_RET = CONVERT(MONEY, ISNULL(RET.UNALLOC_RETENSION, 0)),
                TOTAL = CONVERT(MONEY, ISNULL(AGEM3.SUMAGEBAL, 0) + ISNULL(AGEM2.SUMAGEBAL, 0) + ISNULL(AGEM1.SUMAGEBAL, 0) + ISNULL(AGE0.SUMAGEBAL, 0) + ISNULL(AGE1.SUMAGEBAL, 0) + ISNULL(AGE2.SUMAGEBAL, 0) + ISNULL(AGE3.SUMAGEBAL, 0)),
                CU.CURRCODE AS CURRENCY,
                CU.BUYRATE
FROM DR_ACCS D
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) AS SUMAGEBAL
  FROM DR_ACCS A
  LEFT JOIN DR_TRANS T ON A.ACCNO=T.ACCNO AND T.ALLOCATED < 2
  WHERE DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) < 30 AND DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) > -30 AND DEPOSIT_STATUS = 0 AND (ANALYSIS IS NULL OR ANALYSIS <> 'RETENT')
  GROUP BY A.ACCNO) AGE0 ON D.ACCNO = AGE0.ACCNO
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) AS SUMAGEBAL
  FROM DR_ACCS A
  LEFT JOIN DR_TRANS T ON A.ACCNO=T.ACCNO AND T.ALLOCATED='0'
  WHERE DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) <= -30 AND DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) > -60 AND DEPOSIT_STATUS = 0 AND (ANALYSIS IS NULL OR ANALYSIS <> 'RETENT')
  GROUP BY A.ACCNO) AGE1 ON D.ACCNO = AGE1.ACCNO
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) AS SUMAGEBAL
  FROM DR_ACCS A
  LEFT JOIN DR_TRANS T ON A.ACCNO=T.ACCNO AND T.ALLOCATED='0'
  WHERE DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) <= -60 AND DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) > -90 AND DEPOSIT_STATUS = 0 AND (ANALYSIS IS NULL OR ANALYSIS <> 'RETENT')
  GROUP BY A.ACCNO, T.AGE) AGE2 ON D.ACCNO = AGE2.ACCNO
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) SUMAGEBAL
  FROM DR_ACCS A
  LEFT JOIN DR_TRANS T ON A.ACCNO=T.ACCNO AND T.ALLOCATED='0'
  WHERE DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) <= -90 AND DEPOSIT_STATUS = 0 AND (ANALYSIS IS NULL OR ANALYSIS <> 'RETENT')
  GROUP BY A.ACCNO) AGE3 ON D.ACCNO = AGE3.ACCNO
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) AS SUMAGEBAL
  FROM DR_ACCS A
  LEFT JOIN DR_TRANS T ON A.ACCNO=T.ACCNO AND T.ALLOCATED='0'
  WHERE DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) >= 30 AND DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) < 60 AND DEPOSIT_STATUS = 0 AND (ANALYSIS IS NULL OR ANALYSIS <> 'RETENT')
  GROUP BY A.ACCNO) AGEM1 ON D.ACCNO = AGEM1.ACCNO
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) AS SUMAGEBAL
  FROM DR_ACCS A
  LEFT JOIN DR_TRANS T ON A.ACCNO=T.ACCNO AND T.ALLOCATED='0'
  WHERE DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) >= 60 AND DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) < 90 AND DEPOSIT_STATUS = 0 AND (ANALYSIS IS NULL OR ANALYSIS <> 'RETENT')
  GROUP BY A.ACCNO, T.AGE) AGEM2 ON D.ACCNO = AGEM2.ACCNO
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) AS SUMAGEBAL
  FROM DR_ACCS A
  LEFT JOIN DR_TRANS T ON A.ACCNO=T.ACCNO AND T.ALLOCATED='0'
  WHERE DATEDIFF(d, GETDATE(), ISNULL(DUEDATE, TRANSDATE)) >= 90 AND DEPOSIT_STATUS = 0 AND (ANALYSIS IS NULL OR ANALYSIS <> 'RETENT')
  GROUP BY A.ACCNO) AGEM3 ON D.ACCNO = AGEM3.ACCNO
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) AS UNALLOC_DEPOSIT
 FROM DR_ACCS A
 LEFT JOIN DR_TRANS T ON A.ACCNO=T.ACCNO AND DEPOSIT_STATUS <> 0
 GROUP BY A.ACCNO) DEP ON D.ACCNO = DEP.ACCNO
LEFT JOIN
(SELECT A.ACCNO, SUM(T.AMOUNT-T.ALLOCATEDBAL) AS UNALLOC_RETENSION
 FROM DR_ACCS A
 LEFT JOIN DR_TRANS T ON A.ACCNO=T.ACCNO AND TRANSTYPE = 5 AND (ANALYSIS IS NULL OR ANALYSIS <> 'RETENT')
 GROUP BY A.ACCNO) RET ON D.ACCNO = RET.ACCNO
LEFT JOIN CURRENCIES CU ON D.CURRENCYNO = CU.CURRENCYNO
GROUP BY D.ACCNO, AGEM1.SUMAGEBAL, AGEM2.SUMAGEBAL, AGEM3.SUMAGEBAL, AGE0.SUMAGEBAL, AGE1.SUMAGEBAL, AGE2.SUMAGEBAL
, AGE3.SUMAGEBAL, DEP.UNALLOC_DEPOSIT, RET.UNALLOC_RETENSION, CU.CURRCODE, CU.BUYRATE


View: VW_FACT_CREDITOR
NameVW_FACT_CREDITOR
Note
Code-- Fact view for creditors
CREATE VIEW [dbo].[VW_FACT_CREDITOR]
-- Indexed view
WITH SCHEMABINDING
AS
/** Creditors fact view for creditors CR_ACCS driven **/

/**
setup CTEs in such a way AS they can be extended e.g with custom or extra fields.
 Hopefully the Dimensions and MeASures tabs could be programatically recognised.
 Columns above Dimensions are only used internally for joins using the DTEs
   but are still converted to common aliASes AS part of the DTE definition.
**/
WITH
-- CR_ACCS ------------------------------------------------------------------------
CTE_CAC
  (
  -- Internal (aliAS)
  -- Dimensions (aliAS)
  ACCNO, ACCNO_HEAD, NAME,
  ACCALPHA, POSTCODE,
  SALESNO, BRANCHNO, CURRENCYNO, TAXNO, PAYNO,
  ACCISACTIVE, ACCGROUP, ACCGROUP2,
  ACCTERMS, ACCSTOPCRED, ACCPRIVATE,
  ACCLASTUPDATE,
  -- Measures (aliAS)
  BAL3, BAL2, BAL1, BAL0, BALTOT,
  BALPRIOR3, BALPRIOR2, BALPRIOR1, BALPRIOR0, BALPRIORTOT,
  CREDLIMIT,
  LASTMONTH, LASTYEAR, MONTHVAL, YEARVAL,
  AVEDAYS,
  -- Custom (alias)
  CTE)
AS (SELECT -- Internal (database)
  -- Dimensions (databASe)
  ACCNO, CASE WHEN ISNULL(HEAD_ACCNO, -1) <0 THEN ACCNO ELSE HEAD_ACCNO END, NAME,
  ISNULL(ALPHACODE, ''), ISNULL(POST_CODE, ''),
  ISNULL(SALESNO, -1), ISNULL(BRANCHNO, -1), ISNULL(CURRENCYNO, -1), ISNULL(TAXSTATUS, -1), ISNULL(PAY_TYPE, -1),
  ISNULL(ISACTIVE, 'Y'), ISNULL(ACCGROUP, -1), ISNULL(ACCGROUP2, -1),
  ISNULL(CREDITSTATUS, 0), ISNULL(STOPCREDIT, 'N'), ISNULL(PRIVATE_ACC, 'N'),
  ISNULL(LAST_UPDATED, ''),
  -- Measures (database)
  ISNULL(AGEDBAL3, 0), ISNULL(AGEDBAL2, 0), ISNULL(AGEDBAL1, 0), ISNULL(AGEDBAL0, 0), ISNULL(BALANCE, 0),
  ISNULL(PRIOR_AGEDBAL3, 0), ISNULL(PRIOR_AGEDBAL2, 0), ISNULL(PRIOR_AGEDBAL1, 0), ISNULL(PRIOR_AGEDBAL0, 0), ISNULL(PRIOR_BALANCE, 0),
  ISNULL(CREDLIMIT, 0),
  ISNULL(LASTMONTH, 0), ISNULL(LASTYEAR, 0), ISNULL(MONTHVAL, 0), ISNULL(YEARVAL, 0),
  AVE_DAYS_TO_PAY,
  -- Custom (databASe)
  'CAC'
  FROM dbo.CR_ACCS CAC WITH (NOLOCK)
  )
,
-- CONTACTS ------------------------------------------------------------------------
CTE_CON (ACCNO,
  -- Dimensions (aliAS)
  CONTACTNO, CONT_ISACTIVE,
  -- Measures (aliAS)
  CONT_NAME,
  -- Custom (aliAS)
  CTE) AS (SELECT ISNULL(CCN.ACCNO, -1), ISNULL(CON.SEQNO, -1),
  -- Dimensions (database)
  CON.ISACTIVE,
  -- Measures (database)
  FULLNAME,
  -- Custom (database)
  'CON'
  FROM dbo.CR_CONTACTS CCN WITH (NOLOCK)
  INNER JOIN dbo.CONTACTS CON WITH (NOLOCK)ON CCN.CONTACT_SEQNO = CON.SEQNO AND CCN.DEFCONTACT = 'Y'
)

/** Define the Fact view **/
SELECT
 --Normalised (lookup)
  (CAST(CAC.BRANCHNO AS VARCHAR) + '.' + ISNULL(RTRIM(BRH.BRANCHNAME), 'No Branch')) AS BRANCHNAME,
  (CAST(CAC.ACCNO AS VARCHAR) + '.' + ISNULL(RTRIM(CAC.NAME), 'No Entered Creditor')) AS ACCNAME_ENTERED,
  (CAST(CAC.ACCNO_HEAD AS VARCHAR) + '.' + ISNULL(RTRIM(CAH.NAME), 'No Head Debtor')) AS ACCNAME_HEAD,
  (CAST(CAC.ACCGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(CG1.GROUPNAME), 'No Creditor Account Group')) AS ACCGROUP1NAME,
  (CAST(CAC.ACCGROUP2 AS VARCHAR) + '.' + ISNULL(RTRIM(CG2.GROUPNAME), 'No Creditor Account Group 2')) AS ACCGROUP2NAME,
  (CAST(CAC.SALESNO AS VARCHAR) + '.' + ISNULL(RTRIM(SFS.NAME), 'No Manager')) AS STAFFNAME,
  (CAST(CAC.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRNAME), 'No Currency')) AS CURRENCYNAME,
  (CAST(CAC.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRCODE), 'No Currency')) AS CURRENCYCODE,
  (CAST(CAC.TAXNO AS VARCHAR) + '.' + ISNULL(RTRIM(TAX.NAME), 'Default Tax')) AS TAXNAME,
  (CAST(CAC.PAYNO AS VARCHAR) + '.' + ISNULL(RTRIM(PAY.PTDESC), 'No Payment')) AS PAYNAME,
  (CAST(CAC.ACCTERMS AS VARCHAR) + '.' + ISNULL(RTRIM(CST.STATUSDESC), 'No Terms')) AS TERMSNAME,
  (CAST(CON.CONTACTNO AS VARCHAR) + '.' + ISNULL(RTRIM(CON.CONT_NAME), 'No Default Contact')) AS CONTACTNAME,
  --CAC (debtors account)
  CAC.ACCNO, CAC.ACCNO_HEAD,
  CAC.ACCALPHA, CAC.POSTCODE,
  CAC.SALESNO, CAC.BRANCHNO, CAC.CURRENCYNO, CAC.TAXNO,
  CAC.ACCISACTIVE, CAC.ACCGROUP, CAC.ACCGROUP2,
  CAC.ACCTERMS, CAC.ACCSTOPCRED, CAC.ACCPRIVATE,
  CAC.ACCLASTUPDATE,
  CON.CONTACTNO,
--MeASures
  --CAC
  ROUND(BAL3, 2) AS BALFC3,
  ROUND(BAL2, 2) AS BALFC2,
  ROUND(BAL1, 2) AS BALFC1,
  ROUND(BAL0, 2) AS BALFC0,
  ROUND(BALTOT, 2) AS BALFCTOT,
  ROUND(BALPRIOR3, 2) AS BALPRIORFC3,
  ROUND(BALPRIOR2, 2) AS BALPRIORFC2,
  ROUND(BALPRIOR1, 2) AS BALPRIORFC1,
  ROUND(BALPRIOR0, 2) AS BALPRIORFC0,
  ROUND(BALPRIORTOT, 2) AS BALPRIORFCTOT,
  ROUND(CAC.CREDLIMIT, 2) AS CREDLIMITFC,
  ROUND(BAL3/CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END, 2) AS BAL3,
  ROUND(BAL2/CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END, 2) AS BAL2,
  ROUND(BAL1/CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END, 2) AS BAL1,
  ROUND(BAL0/CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END, 2) AS BAL0,
  ROUND(BALTOT/CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END, 2) AS BALTOT,
  ROUND(BALPRIOR3/CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END, 2) AS BALPRIOR3,
  ROUND(BALPRIOR2/CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END, 2) AS BALPRIOR2,
  ROUND(BALPRIOR1/CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END, 2) AS BALPRIOR1,
  ROUND(BALPRIOR0/CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END, 2) AS BALPRIOR0,
  ROUND(BALPRIORTOT/CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END, 2) AS BALPRIORTOT,
  ROUND(CAC.CREDLIMIT/CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END, 2) AS CREDLIMIT,
  ROUND(CAC.LASTMONTH/CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END, 2) AS VALUELASTMONTH,
  ROUND(CAC.LASTYEAR/CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END, 2) AS VALUELASTYEAR,
  ROUND(CAC.MONTHVAL/CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END, 2) AS VALUETHISMONTH,
  ROUND(CAC.YEARVAL/CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END, 2) AS VALUETHISYEAR,

 (SELECT ROUND(ISNULL(SUM((SUP_QUANT-INV_QUANT)*UNITPRICE*DISCOUNT/100), 0)/
                      CASE WHEN ISNULL(BUYRATE, 0) = 0 THEN 1 ELSE BUYRATE END
               , 2)
  FROM dbo.PURCHORD_LINES POL
  WHERE POL.ACCNO = CAC.ACCNO AND abs(SUP_QUANT-INV_QUANT) > 0.00009) AS OVALPENDING,

 (SELECT ISNULL(MAX(TRANSDATE), '')
  FROM dbo.CR_TRANS CTI
  WHERE CTI.ACCNO = CAC.ACCNO and TRANSTYPE =1 and AMOUNT > 0) AS LASTDATEINVOICED,

 (SELECT ISNULL(MAX(TRANSDATE), '')
  FROM dbo.CR_TRANS CTP
  WHERE CTP.ACCNO = CAC.ACCNO and TRANSTYPE =4 and AMOUNT < 0) AS LASTDATEPAID,

  AVEDAYS
--Custom
-- Join structure
FROM CTE_CAC CAC
  LEFT OUTER JOIN dbo.CR_ACCS CAH WITH (NOLOCK) ON CAC.ACCNO_HEAD = CAH.ACCNO
  LEFT OUTER JOIN dbo.BRANCHES BRH WITH (NOLOCK) ON CAC.BRANCHNO = BRH.BRANCHNO
  LEFT OUTER JOIN dbo.CR_ACCGROUPS CG1 WITH (NOLOCK) ON CAC.ACCGROUP = CG1.ACCGROUP
  LEFT OUTER JOIN dbo.CR_ACCGROUP2S CG2 WITH (NOLOCK) ON CAC.ACCGROUP2 = CG2.ACCGROUP
  LEFT OUTER JOIN dbo.STAFF SFS WITH (NOLOCK) ON CAC.SALESNO = SFS.STAFFNO
  LEFT OUTER JOIN dbo.CURRENCIES CUY WITH (NOLOCK) ON CAC.CURRENCYNO = CUY.CURRENCYNO
  LEFT OUTER JOIN dbo.TAX_RATES TAX WITH (NOLOCK) ON CAC.TAXNO = TAX.SEQNO
  LEFT OUTER JOIN dbo.PAYMENT_TYPES PAY WITH (NOLOCK) ON CAC.PAYNO = PAY.PTNO
  LEFT OUTER JOIN dbo.CREDIT_STATUSES CST WITH (NOLOCK) ON CAC.ACCTERMS = CST.STATUSNO
  LEFT OUTER JOIN CTE_CON CON ON CAC.ACCNO = CON.ACCNO


View: VW_FACT_DEBTOR
NameVW_FACT_DEBTOR
Note
Code-- Sales fact view for debtors invoices
CREATE VIEW [dbo].[VW_FACT_DEBTOR]
-- Indexed view
WITH SCHEMABINDING
AS
/** Debtors fact view for debtors DR_ACCS driven **/

/**
setup CTEs in such a way AS they can be extENDed e.g with custom or extra fields.
 Hopefully the Dimensions and MeASures tabs could be programatically recognised.
 Columns above Dimensions are only used internally for joins using the DTEs
   but are still converted to common aliASes AS part of the DTE definition.
**/
WITH
-- DR_ACCS ------------------------------------------------------------------------
CTE_DAC
  (
  -- Internal (aliAS)
  -- Dimensions (aliAS)
  ACCNO, ACCNO_HEAD, NAME,
  ACCALPHA, POSTCODE,
  SALESNO, BRANCHNO, CURRENCYNO, TAXNO, PAYNO,
  ACCISACTIVE, ACCGROUP, ACCGROUP2, ACCPRICEGROUP,
  ACCTERMS, ACCSTOPCRED, ACCPRIVATE,
  ACCSTARTDATE, ACCLASTUPDATE,
  -- Measures (aliAS)
  BAL3, BAL2, BAL1, BAL0, BALTOT,
  BALPRIOR3, BALPRIOR2, BALPRIOR1, BALPRIOR0, BALPRIORTOT,
  CREDLIMIT,
  LASTMONTH, LASTYEAR, MONTHVAL, YEARVAL,
  AVEDAYS,
  -- Custom (alias)
  CTE)
AS (SELECT -- Internal (database)
  -- Dimensions (databASe)
  ACCNO, CASE WHEN ISNULL(HEAD_ACCNO, -1) <0 THEN ACCNO ELSE HEAD_ACCNO END, NAME,
  ISNULL(ALPHACODE, ''), ISNULL(POST_CODE, ''),
  ISNULL(SALESNO, -1), ISNULL(BRANCHNO, -1), ISNULL(CURRENCYNO, -1), ISNULL(TAXSTATUS, -1), ISNULL(PAY_TYPE, -1),
  ISNULL(ISACTIVE, 'Y'), ISNULL(ACCGROUP, -1), ISNULL(ACCGROUP2, -1), ISNULL(PRICEGROUP, -1),
  ISNULL(CREDITSTATUS, 0), ISNULL(STOPCREDIT, 'N'), ISNULL(PRIVATE_ACC, 'N'),
  ISNULL(STARTDATE, ''), ISNULL(LAST_UPDATED, ''),
  -- Measures (database)
  ISNULL(AGEDBAL3, 0), ISNULL(AGEDBAL2, 0), ISNULL(AGEDBAL1, 0), ISNULL(AGEDBAL0, 0), ISNULL(BALANCE, 0),
  ISNULL(PRIOR_AGEDBAL3, 0), ISNULL(PRIOR_AGEDBAL2, 0), ISNULL(PRIOR_AGEDBAL1, 0), ISNULL(PRIOR_AGEDBAL0, 0), ISNULL(PRIOR_BALANCE, 0),
  ISNULL(CREDLIMIT, 0),
  ISNULL(LASTMONTH, 0), ISNULL(LASTYEAR, 0), ISNULL(MONTHVAL, 0), ISNULL(YEARVAL, 0),
  AVE_DAYS_TO_PAY,
  -- Custom (databASe)
  'DAC'
  FROM dbo.DR_ACCS DAC WITH (NOLOCK)
  )
,
-- CONTACTS ------------------------------------------------------------------------
CTE_CON (ACCNO,
  -- Dimensions (aliAS)
  CONTACTNO, CONT_ISACTIVE,
  -- Measures (aliAS)
  CONT_NAME,
  -- Custom (aliAS)
  CTE) AS (SELECT ISNULL(DCN.ACCNO, -1), ISNULL(CON.SEQNO, -1),
  -- Dimensions (database)
  CON.ISACTIVE,
  -- Measures (database)
  FULLNAME,
  -- Custom (database)
  'CON'
  FROM dbo.DR_CONTACTS DCN WITH (NOLOCK)
  INNER JOIN dbo.CONTACTS CON WITH (NOLOCK)ON DCN.CONTACT_SEQNO = CON.SEQNO AND DCN.DEFCONTACT = 'Y'
)

/** Define the Fact view **/
SELECT
 --Normalised (lookup)
  (CAST(DAC.BRANCHNO AS VARCHAR) + '.' + ISNULL(RTRIM(BRH.BRANCHNAME), 'No Branch')) AS BRANCHNAME,
  (CAST(DAC.ACCNO AS VARCHAR) + '.' + ISNULL(RTRIM(DAC.NAME), 'No Entered Debtor')) AS ACCNAME_ENTERED,
  (CAST(DAC.ACCNO_HEAD AS VARCHAR) + '.' + ISNULL(RTRIM(DAH.NAME), 'No Head Debtor')) AS ACCNAME_HEAD,
  (CAST(DAC.ACCGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(DG1.GROUPNAME), 'No Debtor Account Group')) AS ACCGROUP1NAME,
  (CAST(DAC.ACCGROUP2 AS VARCHAR) + '.' + ISNULL(RTRIM(DG2.GROUPNAME), 'No Debtor Account Group 2')) AS ACCGROUP2NAME,
  (CAST(DAC.ACCPRICEGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(DGP.GROUPNAME), 'No Debtor Price Group')) AS ACCGROUPPNAME,
  (CAST(DAC.SALESNO AS VARCHAR) + '.' + ISNULL(RTRIM(SFS.NAME), 'No Manager')) AS STAFFNAME,
  (CAST(DAC.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRNAME), 'No Currency')) AS CURRENCYNAME,
  (CAST(DAC.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRCODE), 'No Currency')) AS CURRENCYCODE,
  (CAST(DAC.TAXNO AS VARCHAR) + '.' + ISNULL(RTRIM(TAX.NAME), 'Default Tax')) AS TAXNAME,
  (CAST(DAC.PAYNO AS VARCHAR) + '.' + ISNULL(RTRIM(PAY.PTDESC), 'No Payment')) AS PAYNAME,
  (CAST(DAC.ACCTERMS AS VARCHAR) + '.' + ISNULL(RTRIM(CST.STATUSDESC), 'No Terms')) AS TERMSNAME,
  (CAST(CON.CONTACTNO AS VARCHAR) + '.' + ISNULL(RTRIM(CON.CONT_NAME), 'No Default Contact')) AS CONTACTNAME,
  --DAC (debtors account)
  DAC.ACCNO, DAC.ACCNO_HEAD,
  DAC.ACCALPHA, DAC.POSTCODE,
  DAC.SALESNO, DAC.BRANCHNO, DAC.CURRENCYNO, DAC.TAXNO,
  DAC.ACCISACTIVE, DAC.ACCGROUP, DAC.ACCGROUP2, DAC.ACCPRICEGROUP,
  DAC.ACCTERMS, DAC.ACCSTOPCRED, DAC.ACCPRIVATE,
  DAC.ACCSTARTDATE, DAC.ACCLASTUPDATE,
  CON.CONTACTNO,
--Measures
  --DAC
  ROUND(DAC.BAL3, 2) AS BALFC3,
  ROUND(DAC.BAL2, 2) AS BALFC2,
  ROUND(DAC.BAL1, 2) AS BALFC1,
  ROUND(DAC.BAL0, 2) AS BALFC0,
  ROUND(DAC.BALTOT, 2) AS BALFCTOT,
  ROUND(DAC.BALPRIOR3, 2) AS BALPRIORFC3,
  ROUND(DAC.BALPRIOR2, 2) AS BALPRIORFC2,
  ROUND(DAC.BALPRIOR1, 2) AS BALPRIORFC1,
  ROUND(DAC.BALPRIOR0, 2) AS BALPRIORFC0,
  ROUND(DAC.BALPRIORTOT, 2) AS BALPRIORFCTOT,
  ROUND(DAC.CREDLIMIT, 2) AS CREDLIMITFC,
  ROUND(BAL3/CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END, 2) AS BAL3,
  ROUND(BAL2/CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END, 2) AS BAL2,
  ROUND(BAL1/CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END, 2) AS BAL1,
  ROUND(BAL0/CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END, 2) AS BAL0,
  ROUND(BALTOT/CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END, 2) AS BALTOT,
  ROUND(BALPRIOR3/CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END, 2) AS BALPRIOR3,
  ROUND(BALPRIOR2/CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END, 2) AS BALPRIOR2,
  ROUND(BALPRIOR1/CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END, 2) AS BALPRIOR1,
  ROUND(BALPRIOR0/CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END, 2) AS BALPRIOR0,
  ROUND(BALPRIORTOT/CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END, 2) AS BALPRIORTOT,
  ROUND(DAC.CREDLIMIT/CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END, 2) AS CREDLIMIT,
  ROUND(DAC.LASTMONTH/CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END, 2) AS VALUELASTMONTH,
  ROUND(DAC.LASTYEAR/CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END, 2) AS VALUELASTYEAR,
  ROUND(DAC.MONTHVAL/CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END, 2) AS VALUETHISMONTH,
  ROUND(DAC.YEARVAL/CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END, 2) AS VALUETHISYEAR,

 (SELECT ROUND(ISNULL(SUM(UNINV_QUANT*UNITPRICE*DISCOUNT/100), 0)/
                      CASE WHEN ISNULL(SELLRATE, 0) = 0 THEN 1 ELSE SELLRATE END
               , 2)
  FROM dbo.SALESORD_LINES SOL
  WHERE SOL.ACCNO = DAC.ACCNO AND abs(UNINV_QUANT) > 0.00009) AS OVALPENDING,

 (SELECT ISNULL(MAX(TRANSDATE), '')
  FROM dbo.DR_TRANS DTI
  WHERE DTI.ACCNO = DAC.ACCNO and TRANSTYPE =1 and AMOUNT > 0) AS LASTDATEINVOICED,

 (SELECT ISNULL(MAX(TRANSDATE), '')
  FROM dbo.DR_TRANS DTP
  WHERE DTP.ACCNO = DAC.ACCNO and TRANSTYPE =4 and AMOUNT < 0) AS LASTDATEPAID,

  AVEDAYS
--Custom
-- Join structure
FROM CTE_DAC DAC
  LEFT OUTER JOIN dbo.DR_ACCS DAH WITH (NOLOCK) ON DAC.ACCNO_HEAD = DAH.ACCNO
  LEFT OUTER JOIN dbo.BRANCHES BRH WITH (NOLOCK) ON DAC.BRANCHNO = BRH.BRANCHNO
  LEFT OUTER JOIN dbo.DR_ACCGROUPS DG1 WITH (NOLOCK) ON DAC.ACCGROUP = DG1.ACCGROUP
  LEFT OUTER JOIN dbo.DR_ACCGROUP2S DG2 WITH (NOLOCK) ON DAC.ACCGROUP2 = DG2.ACCGROUP
  LEFT OUTER JOIN dbo.DR_PRICEGROUPS DGP WITH (NOLOCK) ON DAC.ACCPRICEGROUP = DGP.GROUPNO
  LEFT OUTER JOIN dbo.STAFF SFS WITH (NOLOCK) ON DAC.SALESNO = SFS.STAFFNO
  LEFT OUTER JOIN dbo.CURRENCIES CUY WITH (NOLOCK) ON DAC.CURRENCYNO = CUY.CURRENCYNO
  LEFT OUTER JOIN dbo.TAX_RATES TAX WITH (NOLOCK) ON DAC.TAXNO = TAX.SEQNO
  LEFT OUTER JOIN dbo.PAYMENT_TYPES PAY WITH (NOLOCK) ON DAC.PAYNO = PAY.PTNO
  LEFT OUTER JOIN dbo.CREDIT_STATUSES CST WITH (NOLOCK) ON DAC.ACCTERMS = CST.STATUSNO
  LEFT OUTER JOIN CTE_CON CON ON DAC.ACCNO = CON.ACCNO


View: VW_FACT_GL
NameVW_FACT_GL
Note
Code-- GL fact view for GL movements
CREATE VIEW [dbo].[VW_FACT_GL]
-- Indexed view
--WITH SCHEMABINDING
AS
/** Sales fact view for debtors invoices DR_INVLINE driven **/

/**
setup CTEs in such a way as they can be extended e.g with custom or extra fields.
 Hopefully the Dimensions and Measures tabs could be programatically recognised.
 Columns above Dimensions are only used internally for joins using the DTEs
   but are still converted to common aliases as part of the DTE definition.
**/
WITH
-- GLACCS - General Ledger Account --------------------------------------------------------------------
CTE_GLA (
  -- Internal
  ACCNO,
  -- Dimensions (alias)
  NAME, DRCR, SECTION,
  TAXNO, CURRENCYNO, ACCISACTIVE, ACCGROUP,
  ALLOWJOURNAL, BSHEETTYPE, ISPRIVATE,
  -- Measures (alias)
  -- Custom (alias)
  CTE)
AS
  (SELECT ACCNO,
  -- Internal (database)
  -- Dimensions (database)
  NAME, DRCR, SECTION,
  TAXSTATUS, CURRENCYNO, ISACTIVE, ACCGROUP,
  ALLOWJOURNAL, BALANCE_SHEET_TYPE, PRIVATE_ACC,
  -- Measures (database)
  -- Custom (database)
  'GLA'
  FROM dbo.GLACCS GLA WITH (NOLOCK)
  )
,
-- GLSUBACCS - General Ledger SubAccount --------------------------------------------------------------------
CTE_GLS (
  -- Internal
  ACCNO, SUBACCNO,
  -- Dimensions (alias)
  SUBNAME,
  -- Measures (alias)
  -- Custom (alias)
  CTE)
AS
  (SELECT
  -- Internal (database)
  ACCNO, SUBACCNO,
  -- Dimensions (database)
  NAME,
  -- Measures (database)
  -- Custom (database)
  'GLA'
  FROM dbo.GLSUBACCS GLS WITH (NOLOCK)
  )
,
-- GL_ACCGROUPS - General Ledger Account Groups --------------------------------------------------------------------
CTE_GRP (
  -- Internal
  ACCGROUP,
  -- Dimensions (alias)
  GROUPNAME, REPCODE, ISRECONCILABLE, REPDESC,
  -- Measures (alias)
  -- Custom (alias)
  CTE)
AS
  (SELECT
  -- Internal (database)
  ACCGROUP,
  -- Dimensions (database)
  GROUPNAME, ISNULL(GRP.REPCODE, 0), IS_RECONCILABLE, REP.DESCRIPTION,
  -- Measures (database)
  -- Custom (database)
  'GRP'
  FROM dbo.GL_ACCGROUPS GRP WITH (NOLOCK)
  LEFT OUTER JOIN GL_ACCGRP_REPCODE REP ON REP.REPCODE = ISNULL(GRP.REPCODE, 0)
  )
,
-- GLMOVEMENTS - General Ledger Movements --------------------------------------------------------------------
CTE_GLM
  (
  -- Internal
  SEQNO,
  -- Dimensions (alias)
  ACCNO, SUBACCNO, BRANCHNO, COMPANYNO, PERIODID,
  -- Measures (alias)
  AVAL, AVALFC,
  -- Custom (alias)
  CTE)
AS
  (SELECT SEQNO,
  -- Internal (database)
  -- Dimensions (database)
  ACCNO, SUBACCNO, BRANCHNO, COMPANYNO, PERIOD_SEQNO,
  -- Measures (database)
  AMOUNT, AMOUNT_FC,
  -- Custom (database)
  'GLM'
  FROM dbo.GLMOVEMENTS GLT WITH (NOLOCK)
  WHERE PERIOD_SEQNO >= ISNULL((SELECT SEQNO FROM dbo.PERIOD_STATUS PS
                                WHERE LEDGER ='G'
                                AND PS.AGE = (SELECT ANALYSIS_AGE_LIMIT FROM dbo.LEDGER_PERIODS LP WHERE LP.SEQNO=4))
                        , 0)
  )
,
-- Essentials Precisions --------------------------------------------------------------------
CTE_PROFILES AS (
    SELECT PF.FIELDNAME,
           CASE WHEN(PV.FIELDVALUE IS NULL OR PV.FIELDVALUE = '')
                THEN isnull(PF.DEFAULTVALUE, 0) ELSE PV.FIELDVALUE
           END AS FIELDVALUE
    FROM dbo.PROFILE_FIELDS PF
    LEFT OUTER JOIN dbo.PROFILE_VALUES PV ON (PF.FIELDNAME = PV.FIELDNAME)
    WHERE PF.FIELDLEVEL=1
),
CTE_PRECISIONS AS (
    SELECT SEQNO,
           CAST(BILLCOSTDECIMALS AS INT) AS BILLCOSTDECIMALS,
           CAST(BILLQTYDECIMALS AS INT) AS BILLQTYDECIMALS,
           CAST(COSTPRDECIMALS AS INT) AS COSTPRDECIMALS,
           CAST(DISCOUNTDECIMALS AS INT) AS DISCOUNTDECIMALS,
           CAST(QTYDECIMALS AS INT) AS QTYDECIMALS,
           CAST(SELLPRDECIMALS AS INT) AS SELLPRDECIMALS,
           CAST(GLBRANCHSIZE AS INT) AS GLBRANCHSIZE,
           CAST(GLACCNOSIZE AS INT) AS GLACCNOSIZE,
           CAST(GLSUBACCSIZE AS INT) AS GLSUBACCSIZE,
           CAST(CRDEFAULTTAXRATENO AS INT) AS CRDEFAULTTAXRATENO

    FROM (SELECT 'SEQNO' AS FIELDNAME, '1' AS FIELDVALUE
          UNION
          SELECT FIELDNAME, FIELDVALUE FROM CTE_PROFILES
         ) AS PivotData
         PIVOT (MAX(FIELDVALUE)
                FOR FIELDNAME
                 IN ([SEQNO],
                     [BILLCOSTDECIMALS],
                     [BILLQTYDECIMALS],
                     [COSTPRDECIMALS],
                     [DISCOUNTDECIMALS],
                     [QTYDECIMALS],
                     [SELLPRDECIMALS],
                     [GLBRANCHSIZE],
                     [GLACCNOSIZE],
                     [GLSUBACCSIZE],
                     [CRDEFAULTTAXRATENO])
               ) AS PivotTable
)
,
-- Permutations --------------------------------------------------------------------
CTE_GPU (
 --Dimensions (alias)
  ACCNO, SUBACCNO,
  BRANCHNO, COMPANYNO, PERIODID,
  NAME, SUBNAME,
  DRCR, SECTION,
  TAXNO, CURRENCYNO, ACCISACTIVE, ACCGROUP,
  ALLOWJOURNAL, BSHEETTYPE, ISPRIVATE,
  GROUPNAME, REPCODE, ISRECONCILABLE, REPDESC,
 --Measures (alias)
  AVAL, AVALFC,
  -- Custom (alias)
  CTE, FREQUENCY) AS (SELECT
 -- Dimensions (database)
  CTE_GLM.ACCNO, CTE_GLM.SUBACCNO,
  BRANCHNO, COMPANYNO, PERIODID,
  CTE_GLA.NAME, SUBNAME,
  ISNULL(DRCR, 'D'), ISNULL(SECTION, 0),
  ISNULL(TAXNO, -1), ISNULL(CURRENCYNO, 0), ISNULL(ACCISACTIVE, 'Y'), CTE_GLA.ACCGROUP,
  ISNULL(ALLOWJOURNAL, 'Y'), BSHEETTYPE, ISNULL(ISPRIVATE, 'Y'),
  GROUPNAME, CTE_GRP.REPCODE, ISNULL(ISRECONCILABLE, 'Y'), REPDESC,
 --Measures
  SUM(ISNULL(AVAL, 0)) AS AVAL,
  SUM(ISNULL(AVALFC, 0)) AS AVALFC,
 --Custom
 --Number of rows (and code marker)
  'GPU', COUNT(*) AS FREQUENCY
-- Join structure
FROM CTE_GLM
  LEFT OUTER JOIN CTE_GLA ON CTE_GLA.ACCNO = CTE_GLM.ACCNO
  LEFT OUTER JOIN CTE_GLS ON CTE_GLS.ACCNO = CTE_GLM.ACCNO
                         AND CTE_GLS.SUBACCNO = CTE_GLM.SUBACCNO
  LEFT OUTER JOIN CTE_GRP ON CTE_GRP.ACCGROUP = CTE_GLA.ACCGROUP
GROUP BY
  CTE_GLM.ACCNO, CTE_GLM.SUBACCNO,
  BRANCHNO, COMPANYNO, PERIODID,
  CTE_GLA.NAME, SUBNAME,
  DRCR, SECTION,
  TAXNO, CURRENCYNO, ACCISACTIVE, CTE_GLA.ACCGROUP,
  ALLOWJOURNAL, BSHEETTYPE, ISPRIVATE,
  GROUPNAME, CTE_GRP.REPCODE, ISRECONCILABLE, REPDESC
)

/** Define the Fact view **/
SELECT
 --Normalised (lookup)
  (RIGHT('000000000' + CAST(GPU.ACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(GPU.SUBACCNO AS VARCHAR), GLSUBACCSIZE)) AS GLCODE,
  (RIGHT('000000000' + CAST(ACCNO AS VARCHAR), GLACCNOSIZE) + '.' +
   ISNULL(RTRIM(GPU.NAME), 'No GL Account')) AS GLACCNAME,
  (RIGHT('000000000' + CAST(ACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(SUBACCNO AS VARCHAR), GLSUBACCSIZE) + '.' +
   ISNULL(ISNULL(RTRIM(SUBNAME), RTRIM(GPU.NAME)), 'No GL SubAccount')) AS GLSUBACCNAME,
  (CAST(GPU.BRANCHNO AS VARCHAR) + '.' + ISNULL(RTRIM(BRH.BRANCHNAME), 'No Branch')) AS BRANCHNAME,
  (CAST( ACCGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(GROUPNAME), 'No Account Group')) AS GLACCGROUPNAME,
  (CAST( REPCODE AS VARCHAR) + '.' + ISNULL(RTRIM(REPDESC), 'No Perport Code') ) AS GLREPCODENAME,
  (CAST(GPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRNAME), 'No Currency')) AS CURRENCYNAME,
  (CAST(GPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRCODE), 'No Currency')) AS CURRENCYCODE,
  (CAST(GPU.TAXNO AS VARCHAR) + '.' + ISNULL(RTRIM(TAX.NAME), 'No Tax')) AS TAXNAME,
  ISNULL(DRCR, 'D') AS GLSIGN,
  CASE WHEN ISNULL(SECTION, 0) = 1 THEN '1.Balance Sheet' ELSE '0.Profit & Loss' END AS GLSECTIONNAME,
  PES.AGE AS AGE,
  PES.YEARAGE AS YEARAGE,
  (CAST(GPU.PERIODID AS VARCHAR) + '.' + PES.PERIODNAME) AS PERIODNAME,
--From Permutations
  ACCNO AS GLACCNO, SUBACCNO AS GLSUBACC,
  GPU.BRANCHNO, COMPANYNO, PERIODID,
  CASE WHEN ISNULL(TAXNO, 0) <0 THEN CRDEFAULTTAXRATENO ELSE TAXNO END AS TAXNO,
  GPU.CURRENCYNO, ACCISACTIVE AS GLISACTIVE, GPU.ACCGROUP AS GLACCGROUP,
  REPCODE AS GLREPCODE, ISRECONCILABLE AS GLRECONCILABLE, SECTION AS GLSECTION,
  CASE WHEN 0 < (SELECT COUNT(*) FROM BANK_REC_SETUP BRS WHERE BRS.ACCNO = GPU.ACCNO AND BRS.SUBACCNO = GPU.SUBACCNO)
       THEN 'Y' ELSE 'N' END AS GLISBANK,
--Measures
  ROUND(AVAL, 2) AS AVAL,
  ROUND(AVALFC, 2) AS AVALFC,
  ROUND(CASE WHEN ISNULL(AVALFC, 0) =0 THEN 1 ELSE AVAL/AVALFC END, 4) AS AEXCHRATE,
--Custom
--Number of rows
  FREQUENCY
--Join structure
FROM CTE_GPU GPU
  LEFT OUTER JOIN CTE_PRECISIONS VDP WITH (NOLOCK) ON VDP.SEQNO=1
  LEFT OUTER JOIN dbo.BRANCHES BRH WITH (NOLOCK) ON GPU.BRANCHNO = BRH.BRANCHNO
  LEFT OUTER JOIN dbo.CURRENCIES CUY WITH (NOLOCK) ON GPU.CURRENCYNO = CUY.CURRENCYNO
  LEFT OUTER JOIN dbo.TAX_RATES TAX WITH (NOLOCK) ON CASE WHEN TAXNO <0
                                                                   THEN CRDEFAULTTAXRATENO ELSE TAXNO
                                                              END = TAX.SEQNO
  LEFT OUTER JOIN dbo.PERIOD_STATUS PES WITH (NOLOCK) ON GPU.PERIODID = PES.SEQNO


View: VW_FACT_JOBS
NameVW_FACT_JOBS
Note
Code-- Job fact view for job cost headers
CREATE VIEW [dbo].[VW_FACT_JOBS]
-- Indexed view
WITH SCHEMABINDING
AS

/**
setup DTEs in such a way as they can be extended e.g with custom or extra fields.
 Hopefully the Dimensions and Measures tabs could be programatically recognised.
 Columns above Dimensions are only used internally for joins using the DTEs
   but are still converted to common aliases as part of the DTE definition.
**/
WITH
-- DR_ACCS ------------------------------------------------------------------------
CTE_DAC (DAC_ACCNO,
  -- Internal (alias)
  DAC_HEAD_ACCNO,
  -- Dimensions (alias)
  ACCISACTIVE, ACCGROUP, ACCGROUP2, ACCPRICEGROUP,
  CURRENCYNO,
  -- Measures (alias)
  AVEDAYS,
  -- Custom (alias)
  CTE) AS (SELECT ACCNO,
  -- Internal (database)
  HEAD_ACCNO,
  -- Dimensions (database)
  ISACTIVE, ACCGROUP, ACCGROUP2, PRICEGROUP,
  CURRENCYNO,
  -- Measures (database)
  AVE_DAYS_TO_PAY,
  -- Custom (database)
  'DAC'
  FROM dbo.DR_ACCS DAC WITH (NOLOCK)
),
-- CONTACTS ------------------------------------------------------------------------
CTE_CON (CON_SEQNO,
  -- Dimensions (alias)
  CONT_ISACTIVE,
  -- Measures (alias)
  CONT_NAME,
  -- Custom (alias)
  CTE) AS (SELECT SEQNO,
  -- Dimensions (database)
  ISACTIVE,
  -- Measures (database)
  FULLNAME,
  -- Custom (database)
  'CON'
  FROM dbo.CONTACTS CON WITH (NOLOCK)
),
-- JOBCOST_HDR ------------------------------------------------------------------------
CTE_JHD (
  -- Dimensions (alias)
  JOBNO,
  ACCNO, STATUS, JOBCODE, MASTER_JOBNO, CUSTORDNO, TITLE, DESCRIPTION,
  ISCONFIRMED,
  CREATE_DATE, ORDERDATE, ACTIVATION_DATE, DUEDATE, FINALISATION_DATE, CALLBACK_DATE,
  PHYS_STAFF,
  SALESNO, CONTACTNO, CATEGORY, JOBTYPE,
  BILLINGMODE, PROJECTNO,
  GLACCNO, GLSUBACC, BRANCHNO, LOCATION,
---- PERIODID,
  -- Measures (alias)
  OVALESTIMATE, OVALTIME, OVALMATERIALS, OVALOVERHEAD, OVALINVOICED, OVALASSET, OVAL,
  OVALESTIMATEFC, OVALTIMEFC, OVALMATERIALSFC, OVALOVERHEADFC, OVALINVOICEDFC, OVALASSETFC, OVALFC,
  OCOSTESTIMATE, OCOSTTIME, OCOSTMATERIALS, OCOSTINVOICED, OCOSTWRITEOFF, OCOSTASSET, OCOST,
  OHOURSESTIMATE, OHOURS, OHOURSALLOWANCE,
  EXCHRATE,
  WORKDAYS,
  -- Custom (alias)
  CTE) AS (SELECT
  -- Dimensions (database)
  JHD.JOBNO,
  ACCNO, STATUS, ISNULL(JOBCODE, ' '), MASTER_JOBNO, CUSTORDNO, TITLE, DESCRIPTION,
  ISCONFIRMED = (SELECT ISACTIVE FROM dbo.JOB_STATUS WHERE STATUSKEY = STATUS),
  ENTRYDATE, QUOTEDATE, STARTDATE, DUEDATE, COMPLETED, CALLBACKDATE,
  ISNULL(ISNULL(JHD.ACTIONBY, JHD.STAFFNO), -1) AS PHYS_STAFF,
  ISNULL(JHD.STAFFNO, -1), ISNULL(CONTACTNO, -1), ISNULL(CATEGORY, -1), ISNULL(JOBTYPE, -1),
  ISNULL(BILLINGMODE, -1), ISNULL(PROJ_SEQNO, -1),
  SALESGL, SALESSUBGL, BRANCHNO, WIPLOC,

---- ISNULL(dbo.FN_GET_PERIOD_SEQNO(ORDERDATE), -1) AS PERIODID,
  -- Measures (database)
  ESTIMATE /(CASE WHEN ISNULL(EXCHRATE, 0) = 0 THEN 1 ELSE EXCHRATE END) AS OVALESTIMATE,
  THETIME /(CASE WHEN ISNULL(EXCHRATE, 0) = 0 THEN 1 ELSE EXCHRATE END) AS OVALTIME,
  MATERIALS /(CASE WHEN ISNULL(EXCHRATE, 0) = 0 THEN 1 ELSE EXCHRATE END) AS OVALMATERIALS,
  DEF_OVERHEAD /(CASE WHEN ISNULL(EXCHRATE, 0) = 0 THEN 1 ELSE EXCHRATE END) AS OVALOVERHEAD,
  INVOICED /(CASE WHEN ISNULL(EXCHRATE, 0) = 0 THEN 1 ELSE EXCHRATE END) AS OVALINVOICED,
  ASSET_VALUE /(CASE WHEN ISNULL(EXCHRATE, 0) = 0 THEN 1 ELSE EXCHRATE END) AS OVALASSET,
  TOTALVALUE /(CASE WHEN ISNULL(EXCHRATE, 0) = 0 THEN 1 ELSE EXCHRATE END) AS OVAL,
  ESTIMATE, THETIME, MATERIALS, DEF_OVERHEAD, INVOICED, ASSET_VALUE, TOTALVALUE,
  ESTIMATECOST, THETIMECOST, MATERIALSCOST, INVOICEDCOST, WRITE_OFF_COST, ASSET_COST, TOTALCOST,
  EST_HOURS, TOTAL_HOURS, ALLOWANCE,
  EXCHRATE,
  ISNULL(dbo.FN_GET_MANREP_DAYS(STARTDATE, COMPLETED), 0) AS WORKDAYS,
  -- Custom (database)
  'JHD'
  FROM dbo.JOBCOST_HDR JHD WITH (NOLOCK)
),
-- Essentials Precisions --------------------------------------------------------------------
CTE_PROFILES AS (
    SELECT PF.FIELDNAME,
           CASE WHEN(PV.FIELDVALUE IS NULL OR PV.FIELDVALUE = '')
                THEN isnull(PF.DEFAULTVALUE, 0) ELSE PV.FIELDVALUE
           END AS FIELDVALUE
    FROM dbo.PROFILE_FIELDS PF
    LEFT OUTER JOIN dbo.PROFILE_VALUES PV ON (PF.FIELDNAME = PV.FIELDNAME)
    WHERE PF.FIELDLEVEL=1
),
CTE_PRECISIONS AS (
    SELECT SEQNO,
           CAST(BILLCOSTDECIMALS AS INT) AS BILLCOSTDECIMALS,
           CAST(BILLQTYDECIMALS AS INT) AS BILLQTYDECIMALS,
           CAST(COSTPRDECIMALS AS INT) AS COSTPRDECIMALS,
           CAST(DISCOUNTDECIMALS AS INT) AS DISCOUNTDECIMALS,
           CAST(QTYDECIMALS AS INT) AS QTYDECIMALS,
           CAST(SELLPRDECIMALS AS INT) AS SELLPRDECIMALS,
           CAST(GLBRANCHSIZE AS INT) AS GLBRANCHSIZE,
           CAST(GLACCNOSIZE AS INT) AS GLACCNOSIZE,
           CAST(GLSUBACCSIZE AS INT) AS GLSUBACCSIZE
    FROM (SELECT 'SEQNO' AS FIELDNAME, '1' AS FIELDVALUE
          UNION
          SELECT FIELDNAME, FIELDVALUE FROM CTE_PROFILES
         ) AS PivotData
         PIVOT (MAX(FIELDVALUE)
                FOR FIELDNAME
                 IN ([SEQNO],
                     [BILLCOSTDECIMALS],
                     [BILLQTYDECIMALS],
                     [COSTPRDECIMALS],
                     [DISCOUNTDECIMALS],
                     [QTYDECIMALS],
                     [SELLPRDECIMALS],
                     [GLBRANCHSIZE],
                     [GLACCNOSIZE],
                     [GLSUBACCSIZE])
               ) AS PivotTable
),
-- Sales Permutations --------------------------------------------------------------------
CTE_JPU (
 --Dimensions (alias)
  BRANCHNO, LOCATION,
  JOBNO, JOBCODE, MASTER_JOBNO, CUSTORDNO, TITLE, DESCRIPTION,
  GLACCNO,
  GLSUBACC,
  ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  ORDSTATUS, ISCONFIRMED,
  CREATE_DATE, ORDERDATE, ACTIVATION_DATE,
  DUEDATE, FINALISATION_DATE, CALLBACK_DATE,
  PHYS_STAFF, SALESNO, CONTACTNO,
  CURRENCYNO,
  CATEGORY, JOBTYPE, BILLINGMODE, PROJECTNO,
  ACCISACTIVE, ACCGROUP, ACCGROUP2, ACCPRICEGROUP,
 --Measures (alias)
  AVEDAYS,
  OVALESTIMATE, OVALTIME, OVALMATERIALS, OVALOVERHEAD, OVALINVOICED, OVALASSET, OVAL,
  OVALESTIMATEFC, OVALTIMEFC, OVALMATERIALSFC, OVALOVERHEADFC, OVALINVOICEDFC, OVALASSETFC, OVALFC,
  OCOSTESTIMATE, OCOSTTIME, OCOSTMATERIALS, OCOSTINVOICED, OCOSTWRITEOFF, OCOSTASSET, OCOST,
  OHOURSESTIMATE, OHOURS, OHOURSALLOWANCE,
  WORKDAYS,
 -- Custom (alias)
  CTE, FREQUENCY) AS (SELECT
 -- Dimensions (database)
  --JHD (job header)
  BRANCHNO, LOCATION,
  JOBNO, JOBCODE, MASTER_JOBNO, CUSTORDNO, TITLE, DESCRIPTION,
  CASE WHEN ISNULL(GLACCNO, 0) > 0
       THEN GLACCNO
       ELSE (SELECT DEF_SALES FROM dbo.GL_CONTROL)
  END AS GLACCNO,
  ISNULL(GLSUBACC, 0),
  ISNULL((CASE WHEN CTE_DAC.DAC_HEAD_ACCNO >0 THEN CTE_DAC.DAC_HEAD_ACCNO ELSE ACCNO END), ACCNO) AS ACCNO,
  ACCNO AS ACCNO_SALES,
  ISNULL((CASE WHEN CTE_DAC.DAC_HEAD_ACCNO >0 THEN ACCNO ELSE -1 END), ACCNO) AS ACCNO_BRANCH,
  CTE_JHD.STATUS, ISCONFIRMED,
  ISNULL(CREATE_DATE, '1899-01-01'), ISNULL(ORDERDATE, '1899-01-01'), ISNULL(ACTIVATION_DATE, '1899-01-01'),
  ISNULL(DUEDATE, '1899-01-01'), ISNULL(FINALISATION_DATE, '1899-01-01'), ISNULL(CALLBACK_DATE, '1899-01-01'),
  PHYS_STAFF, SALESNO, CONTACTNO,
  CURRENCYNO,
  CATEGORY, JOBTYPE, BILLINGMODE, PROJECTNO,
  ACCISACTIVE, ACCGROUP, ACCGROUP2, ACCPRICEGROUP,
---- PERIODID,
--Measures
  --DAC
  MIN(ISNULL(AVEDAYS, 0)) AS AVEDAYS,
  --JHD
  SUM(ISNULL(OVALESTIMATE, 0)) AS OVALESTIMATE,
  SUM(ISNULL(OVALTIME, 0)) AS OVALTIME,
  SUM(ISNULL(OVALMATERIALS, 0)) AS OVALMATERIALS,
  SUM(ISNULL(OVALOVERHEAD, 0)) AS OVALOVERHEAD,
  SUM(ISNULL(OVALINVOICED, 0)) AS OVALINVOICED,
  SUM(ISNULL(OVALASSET, 0)) AS OVALASSET,
  SUM(ISNULL(OVAL, 0)) AS OVAL,
  SUM(ISNULL(OVALESTIMATEFC, 0)) AS OVALESTIMATEFC,
  SUM(ISNULL(OVALTIMEFC, 0)) AS OVALTIMEFC,
  SUM(ISNULL(OVALMATERIALSFC, 0)) AS OVALMATERIALSFC,
  SUM(ISNULL(OVALOVERHEADFC, 0)) AS OVALOVERHEADFC,
  SUM(ISNULL(OVALINVOICEDFC, 0)) AS OVALINVOICEDFC,
  SUM(ISNULL(OVALASSETFC, 0)) AS OVALASSETFC,
  SUM(ISNULL(OVALFC, 0)) AS OVALFC,
  SUM(ISNULL(OCOSTESTIMATE, 0)) AS OCOSTESTIMATE,
  SUM(ISNULL(OCOSTTIME, 0)) AS OCOSTTIME,
  SUM(ISNULL(OCOSTMATERIALS, 0)) AS OCOSTMATERIALS,
  SUM(ISNULL(OCOSTINVOICED, 0)) AS OCOSTINVOICED,
  SUM(ISNULL(OCOSTWRITEOFF, 0)) AS OCOSTWRITEOFF,
  SUM(ISNULL(OCOSTASSET, 0)) AS OCOSTASSET,
  SUM(ISNULL(OCOST, 0)) AS OCOST,
  SUM(ISNULL(OHOURSESTIMATE, 0)) AS OHOURSESTIMATE,
  SUM(ISNULL(OHOURS, 0)) AS OHOURS,
  SUM(ISNULL(OHOURSALLOWANCE, 0)) AS OHOURSALLOWANCE,
  SUM(ISNULL(WORKDAYS, 0)) AS WORKDAYS,
--Custom
--Number of rows (and code marker)
  'JPU', COUNT(*) AS FREQUENCY
-- Join structure
FROM CTE_JHD
LEFT OUTER JOIN CTE_DAC ON CTE_DAC.DAC_ACCNO = CTE_JHD.ACCNO
LEFT OUTER JOIN CTE_CON ON CTE_CON.CON_SEQNO = CTE_JHD.CONTACTNO
GROUP BY
  --JTR (job transdactions)
  BRANCHNO, LOCATION,
  JOBNO, JOBCODE, MASTER_JOBNO, CUSTORDNO, TITLE, DESCRIPTION,
  GLACCNO, GLSUBACC,
  --JHD (job header)
  CASE WHEN CTE_DAC.DAC_HEAD_ACCNO >0 THEN CTE_DAC.DAC_HEAD_ACCNO ELSE ACCNO END,
  ACCNO,
  CASE WHEN CTE_DAC.DAC_HEAD_ACCNO >0 THEN ACCNO ELSE -1 END,
  CTE_JHD.STATUS, ISCONFIRMED,
  CREATE_DATE, ORDERDATE, ACTIVATION_DATE, DUEDATE, FINALISATION_DATE, CALLBACK_DATE,
  PHYS_STAFF, SALESNO, CONTACTNO,
  CURRENCYNO,
  CATEGORY, JOBTYPE, BILLINGMODE, PROJECTNO,
---- PERIODID,
  --DAC (debtors account)
  ACCISACTIVE, ACCGROUP, ACCGROUP2, ACCPRICEGROUP
)

/** Define the Fact view **/
SELECT
 --Normalised (lookup)
  (CAST(JPU.BRANCHNO AS VARCHAR) + '.' + ISNULL(BRH.BRANCHNAME, 'No Branch')) AS BRANCHNAME,
  (CAST(JPU.ACCNO AS VARCHAR) + '.' + ISNULL(DAA.NAME, 'No Entered Debtor')) AS ACCNAME_ENTERED,
  (CAST(JPU.ACCNO_SALES AS VARCHAR) + '.' + ISNULL(DAS.NAME, 'No Sales Debtor')) AS ACCNAME_SALES,
  (CAST(JPU.ACCNO_BRANCH AS VARCHAR) + '.' + ISNULL(DAB.NAME, 'No Branch Debtor')) AS ACCNAME_BRANCH,
  (CAST(JPU.ACCGROUP AS VARCHAR) + '.' + ISNULL(DG1.GROUPNAME, 'No Debtor Account Group')) AS ACCGROUP1NAME,
  (CAST(JPU.ACCGROUP2 AS VARCHAR) + '.' + ISNULL(DG2.GROUPNAME, 'No Debtor Account Group 2')) AS ACCGROUP2NAME,
  (CAST(JPU.ACCPRICEGROUP AS VARCHAR) + '.' + ISNULL(DGP.GROUPNAME, 'No Debtor Price Group')) AS ACCGROUPPNAME,
  (CAST(JPU.SALESNO AS VARCHAR) + '.' + ISNULL(SFS.NAME, 'No Manager')) AS STAFFNAME,
  (CAST(JPU.PHYS_STAFF AS VARCHAR) + '.' + ISNULL(SFP.NAME, 'No Staff')) AS STAFFNAMEPHYS,
  (CAST(JPU.GLACCNO AS VARCHAR) + '.' + ISNULL(GLA.NAME, 'No GL Account')) AS GLACCNAME,
  (CAST(JPU.GLSUBACC AS VARCHAR) + '.' + ISNULL(GLS.NAME, 'No GL SubAccount')) AS GLSUBACCNAME,
  (CAST(JPU.LOCATION AS VARCHAR) + '.' + ISNULL(LOC.LNAME, 'No Location')) AS LOCATIONNAME,
  (CAST(JPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(CUY.CURRNAME, 'No Currency')) AS CURRENCYNAME,
  (CAST(JPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(CUY.CURRCODE, 'No Currency')) AS CURRENCYCODE,
---- PES.AGE AS AGE,
---- PES.YEARAGE AS YEARAGE,
---- (JPU.PERIODID + '.' + PES.PERIODNAME) AS PERIODNAME,
  (CAST(JPU.PROJECTNO AS VARCHAR) + '.' + ISNULL(JPR.PROJ_TITLE, 'No Project')) AS PROJECTNAME,
  (CAST(JPU.CATEGORY AS VARCHAR) + '.' + ISNULL(JCY.CATDESC, 'No Category')) AS CATEGORYNAME,
  (CAST(JPU.JOBTYPE AS VARCHAR) + '.' + ISNULL(JTP.TYPEDESC, 'No Job Type')) AS JOBTYPENAME,
  (CAST(JPU.BILLINGMODE AS VARCHAR) + '.' +
                                        (CASE BILLINGMODE
                                        WHEN 0 THEN 'Charge-Up'
                                        WHEN 1 THEN 'Invoice Ex-Quote'
                                        WHEN 2 THEN 'Manufacture - Output Items'
                                        WHEN 3 THEN 'Progress Invoices'
                                        ELSE 'No Job Type'
                                        END)) AS BILLINGMODENAME,

--From Sales Permutations
  JPU.BRANCHNO, LOCATION,
  JOBNO, JOBCODE, MASTER_JOBNO, CUSTORDNO, TITLE, JPU.DESCRIPTION,
  GLACCNO,
  JPU.GLSUBACC,
  JPU.ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  ORDSTATUS, ISCONFIRMED,
  CREATE_DATE, ORDERDATE, ACTIVATION_DATE, DUEDATE, FINALISATION_DATE, CALLBACK_DATE,
  JPU.SALESNO, CONTACTNO,
  JPU.CURRENCYNO,
  CATEGORY, JOBTYPE, BILLINGMODE, PROJECTNO,
  PHYS_STAFF,
---- CTE_SPU.PERIODID,
  ACCISACTIVE, JPU.ACCGROUP, JPU.ACCGROUP2, ACCPRICEGROUP,
--Measures
  AVEDAYS,
  -- values local currency
  ROUND(OVALESTIMATE, 2) AS OVALESTIMATE,
  ROUND(OVALTIME, 2) AS OVALTIME,
  ROUND(OVALMATERIALS, 2) AS OVALMATERIALS,
  ROUND(OVALOVERHEAD, 2) AS OVALOVERHEAD,
  ROUND(OVALINVOICED, 2) AS OVALINVOICED,
  ROUND(OVALASSET, 2) AS OVALASSET,
  ROUND(OVAL, 2) AS OVAL,
  -- values foreign currency
  ROUND(OVALESTIMATEFC, 2) AS OVALESTIMATEFC,
  ROUND(OVALTIMEFC, 2) AS OVALTIMEFC,
  ROUND(OVALMATERIALSFC, 2) AS OVALMATERIALSFC,
  ROUND(OVALOVERHEADFC, 2) AS OVALOVERHEADFC,
  ROUND(OVALINVOICEDFC, 2) AS OVALINVOICEDFC,
  ROUND(OVALASSETFC, 2) AS OVALASSETFC,
  ROUND(OVALFC, 2) AS OVALFC,
  -- costs
  ROUND(OCOSTESTIMATE, 2) AS OCOSTESTIMATE,
  ROUND(OCOSTTIME, 2) AS OCOSTTIME,
  ROUND(OCOSTMATERIALS, 2) AS OCOSTMATERIALS,
  ROUND(OCOSTINVOICED, 2) AS OCOSTINVOICED,
  ROUND(OCOSTWRITEOFF, 2) AS OCOSTWRITEOFF,
  ROUND(OCOSTASSET, 2) AS OCOSTASSET,
  ROUND(OCOST, 2) AS OCOST,
  -- time (quantity)
  ROUND(OHOURSESTIMATE, VDP.QTYDECIMALS) AS OHOURSESTIMATE,
  ROUND(OHOURS, VDP.QTYDECIMALS) AS OHOURS,
  ROUND(OHOURSALLOWANCE, VDP.QTYDECIMALS) AS OHOURSALLOWANCE,
  -- profits
  ROUND((OVALESTIMATE-OCOSTESTIMATE), 2) AS OPROFITESTIMATE,
  ROUND((OVALTIME-OCOSTTIME), 2) AS OPROFITTIME,
  ROUND((OVALMATERIALS-OCOSTMATERIALS), 2) AS OPROFITMATERIALS,
  ROUND((OVALINVOICED-OCOSTINVOICED), 2) AS OPROFITINVOICED,
  ROUND((OVALASSET-OCOSTASSET), 2) AS OPROFITASSET,
  ROUND((OVAL-OCOST), 2) AS OPROFIT,
  -- markup percentages
  ROUND(CASE WHEN OCOSTESTIMATE <> 0 THEN (((OVALESTIMATE-OCOSTESTIMATE)/OCOSTESTIMATE)*100) ELSE 100 END, 2) AS OMARKUPPCESTIMATE,
  ROUND(CASE WHEN OCOSTTIME <> 0 THEN (((OVALTIME-OCOSTTIME)/OCOSTTIME)*100) ELSE 100 END, 2) AS OMARKUPPCTIME,
  ROUND(CASE WHEN OCOSTMATERIALS <> 0 THEN (((OVALMATERIALS-OCOSTMATERIALS)/OCOSTMATERIALS)*100) ELSE 100 END, 2) AS OMARKUPPCMATERIALS,
  ROUND(CASE WHEN OCOSTINVOICED <> 0 THEN (((OVALINVOICED-OCOSTINVOICED)/OCOSTINVOICED)*100) ELSE 100 END, 2) AS OMARKUPPCINVOICED,
  ROUND(CASE WHEN OCOSTASSET <> 0 THEN (((OVALASSET-OCOSTASSET)/OCOSTASSET)*100) ELSE 100 END, 2) AS OMARKUPPCASSET,
  ROUND(CASE WHEN OCOST <> 0 THEN (((OVAL-OCOST)/OCOST)*100) ELSE 100 END, 2) AS OMARKUPPC,
  -- margin percentages
  ROUND(CASE WHEN OVALESTIMATE <> 0 THEN (((OVALESTIMATE-OCOSTESTIMATE)/OVALESTIMATE)*100) ELSE 100 END, 2) AS OMARGINPCESTIMATE,
  ROUND(CASE WHEN OVALTIME <> 0 THEN (((OVALTIME-OCOSTTIME)/OVALTIME)*100) ELSE 100 END, 2) AS OMARGINPCTIME,
  ROUND(CASE WHEN OVALMATERIALS <> 0 THEN (((OVALMATERIALS-OCOSTMATERIALS)/OVALMATERIALS)*100) ELSE 100 END, 2) AS OMARGINPCMATERIALS,
  ROUND(CASE WHEN OVALINVOICED <> 0 THEN (((OVALINVOICED-OCOST)/OVALINVOICED)*100) ELSE 100 END, 2) AS OMARGINPCINVOICED,
  ROUND(CASE WHEN OVALASSET <> 0 THEN (((OVALASSET-OCOSTASSET)/OVALASSET)*100) ELSE 100 END, 2) AS OMARGINPCASSET,
  ROUND(CASE WHEN OVAL <> 0 THEN (((OVAL-OCOST)/OVAL)*100) ELSE 100 END, 2) AS OMARGINPC,
  -- performance
  WORKDAYS,
--Custom
--Number of rows
  FREQUENCY
--Join structure
FROM CTE_JPU JPU
  LEFT OUTER JOIN dbo.BRANCHES BRH WITH (NOLOCK) ON JPU.BRANCHNO = BRH.BRANCHNO
  LEFT OUTER JOIN dbo.DR_ACCS DAA WITH (NOLOCK) ON JPU.ACCNO = DAA.ACCNO
  LEFT OUTER JOIN dbo.DR_ACCS DAS WITH (NOLOCK) ON JPU.ACCNO_SALES = DAS.ACCNO
  LEFT OUTER JOIN dbo.DR_ACCS DAB WITH (NOLOCK) ON JPU.ACCNO_BRANCH = DAB.ACCNO
  LEFT OUTER JOIN dbo.DR_ACCGROUPS DG1 WITH (NOLOCK) ON JPU.ACCGROUP = DG1.ACCGROUP
  LEFT OUTER JOIN dbo.DR_ACCGROUP2S DG2 WITH (NOLOCK) ON JPU.ACCGROUP2 = DG2.ACCGROUP
  LEFT OUTER JOIN dbo.DR_PRICEGROUPS DGP WITH (NOLOCK) ON JPU.ACCPRICEGROUP = DGP.GROUPNO
  LEFT OUTER JOIN dbo.STAFF SFS WITH (NOLOCK) ON JPU.SALESNO = SFS.STAFFNO
  LEFT OUTER JOIN dbo.STAFF SFP WITH (NOLOCK) ON JPU.PHYS_STAFF = SFP.STAFFNO
  LEFT OUTER JOIN dbo.GLACCS GLA WITH (NOLOCK) ON JPU.GLACCNO = GLA.ACCNO
  LEFT OUTER JOIN dbo.GLSUBACCS GLS WITH (NOLOCK) ON JPU.GLACCNO = GLS.ACCNO
                                                          AND JPU.GLSUBACC = GLS.SUBACCNO
  LEFT OUTER JOIN dbo.STOCK_LOCATIONS LOC WITH (NOLOCK) ON JPU.LOCATION = LOC.LOCNO
  LEFT OUTER JOIN dbo.CURRENCIES CUY WITH (NOLOCK) ON JPU.CURRENCYNO = CUY.CURRENCYNO
---- LEFT OUTER JOIN dbo.PERIOD_STATUS PES WITH (NOLOCK) ON CTE_JPU.PERIODID = PES.SEQNO
  LEFT OUTER JOIN dbo.JOB_STATUS JST WITH (NOLOCK) ON JPU.ORDSTATUS = JST.STATUSKEY
  LEFT OUTER JOIN dbo.JOBCOST_PROJ JPR WITH (NOLOCK) ON JPU.PROJECTNO = JPR.SEQNO
  LEFT OUTER JOIN dbo.JOB_CATEGORIES JCY WITH (NOLOCK) ON JPU.CATEGORY = JCY.CATNO
  LEFT OUTER JOIN dbo.JOB_TYPES JTP WITH (NOLOCK) ON JPU.JOBTYPE = JTP.TYPENO
  LEFT OUTER JOIN CTE_PRECISIONS VDP WITH (NOLOCK) ON VDP.SEQNO=1


View: VW_FACT_JOBTRANS
NameVW_FACT_JOBTRANS
Note
Code-- Job fact view for job cost headers
CREATE VIEW [dbo].[VW_FACT_JOBTRANS]
-- Indexed view
WITH SCHEMABINDING
AS

/**
setup DTEs in such a way as they can be extended e.g with custom or extra fields.
 Hopefully the Dimensions and Measures tabs could be programatically recognised.
 Columns above Dimensions are only used internally for joins using the DTEs
   but are still converted to common aliases as part of the DTE definition.
**/
WITH
-- STOCK_ITEMS - Price Lookup Item --------------------------------------------------------------------
CTE_PLU
  (PLU_STOCKCODE,
  -- Internal
  SALES_GL_CODE, SALES_GLSUBCODE, PURCH_GL_CODE, PURCH_GLSUBCODE, COSCOST,
  -- Dimensions (alias)
  STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, SIZEID, COLOURID,
  -- Measures (alias)
  -- Custom (alias)
  CTE)
AS
  (SELECT STOCKCODE,
  -- Internal (database)
  SALES_GL_CODE, SALES_GLSUBCODE, PURCH_GL_CODE, PURCH_GLSUBCODE,
  CASE (SELECT CAST(FIELDVALUE AS INTEGER)
        FROM dbo.PROFILE_VALUES
        WHERE FIELDNAME = 'STOCKCOSTMETHOD' AND PROFILEID = -1)
       WHEN 2 THEN ISNULL(STDCOST, 0)
       WHEN 1 THEN ISNULL(LATESTCOST, 0)
       ELSE ISNULL(AVECOST, 0)
  END AS COSCOST,
  -- Dimensions (database)
  STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, X_SIZEID, X_COLOURID,
  -- Measures (database)
  -- Custom (database)
  'PLU'
  FROM dbo.STOCK_ITEMS PLU WITH (NOLOCK)
  )
,
-- STOCK_ITEMS - Stock Keeping Item --------------------------------------------------------------------
CTE_SKU
  (SKU_STOCKCODE,
  -- Internal
  -- Dimensions (alias)
  SKU_DESCRIPTION, SKU_ISACTIVE, SKU_STATUS, SKU_BN, SKU_SN, SKU_SUPPLIERNO,
  -- Measures (alias)
  -- Custom (alias)
  CTE)
AS
  (SELECT STOCKCODE,
  -- Internal (database)
  -- Dimensions (database)
  DESCRIPTION, ISACTIVE, STATUS, HAS_BN, HAS_SN, SUPPLIERNO,
  -- Measures (database)
  -- Custom (database)
  'SKU'
  FROM dbo.STOCK_ITEMS SKU WITH (NOLOCK)
  )
,
-- DR_ACCS ------------------------------------------------------------------------
CTE_DAC (DAC_ACCNO,
  -- Internal (alias)
  DAC_HEAD_ACCNO,
  -- Dimensions (alias)
  ACCISACTIVE, ACCGROUP, ACCGROUP2, ACCPRICEGROUP,
  -- Measures (alias)
  AVEDAYS,
  -- Custom (alias)
  CTE) AS (SELECT ACCNO,
  -- Internal (database)
  HEAD_ACCNO,
  -- Dimensions (database)
  ISACTIVE, ACCGROUP, ACCGROUP2, PRICEGROUP,
  -- Measures (database)
  AVE_DAYS_TO_PAY,
  -- Custom (database)
  'DAC'
  FROM dbo.DR_ACCS DAC WITH (NOLOCK)
),
-- CONTACTS ------------------------------------------------------------------------
CTE_CON (CON_SEQNO,
  -- Dimensions (alias)
  CONT_ISACTIVE,
  -- Measures (alias)
  CONT_NAME,
  -- Custom (alias)
  CTE) AS (SELECT SEQNO,
  -- Dimensions (database)
  ISACTIVE,
  -- Measures (database)
  FULLNAME,
  -- Custom (database)
  'CON'
  FROM dbo.CONTACTS CON WITH (NOLOCK)
),
-- JOBCOST_HDR ------------------------------------------------------------------------
CTE_JHD (JOBNO, SALESGL, SALESSUBGL,
  -- Dimensions (alias)
  ACCNO, STATUS, JOBCODE, MASTER_JOBNO, CUSTORDNO, TITLE, DESCRIPTION,
  ISCONFIRMED,
  CREATE_DATE, ORDERDATE, ACTIVATION_DATE, DUEDATE, FINALISATION_DATE, CALLBACK_DATE,
  PHYS_STAFF,
  SALESNO, CONTACTNO, CATEGORY, JOBTYPE,
  BILLINGMODE, PROJECTNO,
---- PERIODID,
  -- Measures (alias)
  WORKDAYS,
  -- Custom (alias)
  CTE) AS (SELECT JHD.JOBNO, SALESGL, SALESSUBGL,
  -- Dimensions (database)
  ACCNO, STATUS, ISNULL(JOBCODE, ' '), MASTER_JOBNO, CUSTORDNO, TITLE, DESCRIPTION,
  ISCONFIRMED = (SELECT ISACTIVE FROM dbo.JOB_STATUS WHERE STATUSKEY = STATUS),
  ENTRYDATE, QUOTEDATE, STARTDATE, DUEDATE, COMPLETED, CALLBACKDATE,
  ISNULL(ISNULL(JHD.ACTIONBY, JHD.STAFFNO), -1) AS PHYS_STAFF,
  ISNULL(JHD.STAFFNO, -1), ISNULL(CONTACTNO, -1), ISNULL(CATEGORY, -1), ISNULL(JOBTYPE, -1),
  ISNULL(BILLINGMODE, -1), ISNULL(PROJ_SEQNO, -1),

---- ISNULL(dbo.FN_GET_PERIOD_SEQNO(ORDERDATE), -1) AS PERIODID,
  -- Measures (database)
  ISNULL(dbo.FN_GET_MANREP_DAYS(STARTDATE, COMPLETED), 0) AS WORKDAYS,
  -- Custom (database)
  'JHD'
  FROM dbo.JOBCOST_HDR JHD WITH (NOLOCK)
),
-- JOB_TRANSACTIONS ----------------------------------------------------------------------
CTE_JTR (JOBNO,
  -- Dimensions (alias)
  PLU, PLU_DESCRIPTION, SKU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO,
  BATCHCODE,
  GLACCNO, GLSUBACC,
  BOMTYPE, PRICEOVERRIDDEN, ORDLINEID,
  CURRENCYNO,
  LINETYPE, LINESTATUS, LINKEDITEM, COSTGROUP, COSTTYPE,
  PROGRESSINVOICE, SCHEDULENO, BILLINGID, BILLINGREF,
  -- Measures (alias)
  OQUANTITY, OCOST, OVALDISC, OVALLIST, OVAL, OVALTAX, OVALTAXINC, OVALFC,
  OUNINVOICED,
  OVALPENDING, OVALRETENTION,
  -- Custom (alias)
  CTE) AS (SELECT JOBNO,
  -- Dimensions (database)
  STOCKCODE, JTR.DESCRIPTION,
  (CASE WHEN(LINKED_STOCKCODE IS NULL OR LINKED_STOCKCODE = '')
        THEN STOCKCODE
        ELSE LINKED_STOCKCODE
   END) AS LINKED_STOCKCODE,
  ISNULL(KITCODE, ' '),
  ISNULL(BRANCHNO, 0), ISNULL(LOCATION, 1), TAXNO,
  ISNULL(BATCHCODE, ' '),
  GLCODE, SUBCODE,
  BOMTYPE, PRICE_OVERRIDDEN, JOBLINEID,
  CURRENCYNO,
  LINETYPE, LINE_STATUS, LINKEDSTATUS, ISNULL(COST_GROUP, -1), ISNULL(COST_TYPE, -1),
  ISNULL(PROGRESSINVOICE, 'N'), ISNULL(SCHEDULE_SEQNO, -1), ISNULL(BILLING_ID, -1), ISNULL(BILLING_REF, ' '),
  -- Measures (database)
  ISNULL(TOTAL_QUANTITY, 0) AS OQUANTITY,
  ISNULL(TOTAL_QUANTITY, 0)*ISNULL(UNITCOST, 0) AS OCOST,
  (ISNULL(TOTAL_QUANTITY, 0)*ISNULL(UNITPRICE, 0)*ISNULL(DISCOUNT, 0)/100)
     /(CASE WHEN ISNULL(EXCHRATE, 0) = 0 THEN 1 ELSE EXCHRATE END) AS OVALDISC,
  (ISNULL(TOTAL_QUANTITY, 0)*ISNULL(LISTPRICE, 0))
     /(CASE WHEN ISNULL(EXCHRATE, 0) = 0 THEN 1 ELSE EXCHRATE END) AS OVALLIST,
  ISNULL(LINECHARGE, 0)
     /(CASE WHEN ISNULL(EXCHRATE, 0) = 0 THEN 1 ELSE EXCHRATE END) AS OVAL,
  ISNULL(LINETOTAL_TAX, 0)
     /(CASE WHEN ISNULL(EXCHRATE, 0) = 0 THEN 1 ELSE EXCHRATE END) AS OVALTAX,
  ISNULL(LINETOTAL, 0)
     /(CASE WHEN ISNULL(EXCHRATE, 0) = 0 THEN 1 ELSE EXCHRATE END) AS OVALTAXINC,
  ISNULL(LINETOTAL, 0) AS OVALFC,
  CASE WHEN LINE_STATUS NOT IN ('X', 'I', 'W')
       THEN ISNULL((TOTAL_QUANTITY-INVOICEDQTY), 0)
       ELSE 0
  END AS OUNINVOICED,
  CASE WHEN LINE_STATUS NOT IN ('X', 'I', 'W')
       THEN ISNULL((LINETOTAL-INVOICED), 0)
             /(CASE WHEN ISNULL(EXCHRATE, 0) = 0 THEN 1 ELSE EXCHRATE END)
       ELSE 0
  END AS OVALPENDING,
  ISNULL(RETENTION_AMOUNT, 0)
     /(CASE WHEN ISNULL(EXCHRATE, 0) = 0 THEN 1 ELSE EXCHRATE END) AS OVALRETENTION,
  -- Custom (database)
  'SOL'
 FROM dbo.JOB_TRANSACTIONS JTR WITH (NOLOCK)
 WHERE LINETYPE <> 4 AND NOT (LINETYPE = -1 AND STOCKCODE = ' ')
),
-- Essentials Precisions --------------------------------------------------------------------
CTE_PROFILES AS (
    SELECT PF.FIELDNAME,
           CASE WHEN(PV.FIELDVALUE IS NULL OR PV.FIELDVALUE = '')
                THEN isnull(PF.DEFAULTVALUE, 0) ELSE PV.FIELDVALUE
           END AS FIELDVALUE
    FROM dbo.PROFILE_FIELDS PF
    LEFT OUTER JOIN dbo.PROFILE_VALUES PV ON (PF.FIELDNAME = PV.FIELDNAME)
    WHERE PF.FIELDLEVEL=1
),
CTE_PRECISIONS AS (
    SELECT SEQNO,
           CAST(BILLCOSTDECIMALS AS INT) AS BILLCOSTDECIMALS,
           CAST(BILLQTYDECIMALS AS INT) AS BILLQTYDECIMALS,
           CAST(COSTPRDECIMALS AS INT) AS COSTPRDECIMALS,
           CAST(DISCOUNTDECIMALS AS INT) AS DISCOUNTDECIMALS,
           CAST(QTYDECIMALS AS INT) AS QTYDECIMALS,
           CAST(SELLPRDECIMALS AS INT) AS SELLPRDECIMALS,
           CAST(GLBRANCHSIZE AS INT) AS GLBRANCHSIZE,
           CAST(GLACCNOSIZE AS INT) AS GLACCNOSIZE,
           CAST(GLSUBACCSIZE AS INT) AS GLSUBACCSIZE
    FROM (SELECT 'SEQNO' AS FIELDNAME, '1' AS FIELDVALUE
          UNION
          SELECT FIELDNAME, FIELDVALUE FROM CTE_PROFILES
         ) AS PivotData
         PIVOT (MAX(FIELDVALUE)
                FOR FIELDNAME
                 IN ([SEQNO],
                     [BILLCOSTDECIMALS],
                     [BILLQTYDECIMALS],
                     [COSTPRDECIMALS],
                     [DISCOUNTDECIMALS],
                     [QTYDECIMALS],
                     [SELLPRDECIMALS],
                     [GLBRANCHSIZE],
                     [GLACCNOSIZE],
                     [GLSUBACCSIZE])
               ) AS PivotTable
),
-- Sales Permutations --------------------------------------------------------------------
CTE_JPU (
 --Dimensions (alias)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO,
  BATCHCODE,
  JOBNO, JOBCODE, MASTER_JOBNO, CUSTORDNO, TITLE, DESCRIPTION,
  GLACCNO,
  GLSUBACC,
  BOMTYPE, PRICEOVERRIDDEN, ORDLINEID,
  ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  ORDSTATUS, ISCONFIRMED,
  CREATE_DATE, ORDERDATE, ACTIVATION_DATE,
  DUEDATE, FINALISATION_DATE, CALLBACK_DATE,
  PHYS_STAFF, SALESNO, CONTACTNO,
  CURRENCYNO,
  LINETYPE, LINESTATUS, LINKEDITEM, COSTGROUP, COSTTYPE,
  PROGRESSINVOICE, SCHEDULENO, BILLINGID, BILLINGREF,
  CATEGORY, JOBTYPE, BILLINGMODE, PROJECTNO,
  SKU_ISACTIVE, SKU_STATUS, SKU_BN, SKU_SN, SKU_SUPPLIERNO,
  PLU_DESCRIPTION, STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, SIZEID, COLOURID,
  ACCISACTIVE, ACCGROUP, ACCGROUP2, ACCPRICEGROUP,
 --Measures (alias)
  AVEDAYS,
  OQUANTITY, OCOST, OVALDISC, OVALLIST, OVAL, OVALTAX, OVALTAXINC, OVALFC,
  OUNINVOICED,
  OVALPENDING, OVALRETENTION,
  WORKDAYS,
 -- Custom (alias)
  CTE, FREQUENCY) AS (SELECT
 -- Dimensions (database)
  --JTR (job transactions)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO,
  BATCHCODE,
  CTE_JTR.JOBNO, JOBCODE, MASTER_JOBNO, CUSTORDNO, TITLE, DESCRIPTION,
  CASE WHEN ISNULL(GLACCNO, 0) > 0
       THEN GLACCNO
       ELSE CASE WHEN ISNULL(CTE_JHD.SALESGL, 0) > 0
                 THEN CTE_JHD.SALESGL
                 ELSE ISNULL(CTE_PLU.SALES_GL_CODE, (SELECT DEF_SALES FROM dbo.GL_CONTROL))
            END
  END AS GLACCNO,
  ISNULL(GLSUBACC, SALESSUBGL),
  BOMTYPE, PRICEOVERRIDDEN, ORDLINEID,
  --JHD (job header)
  ISNULL((CASE WHEN CTE_DAC.DAC_HEAD_ACCNO >0 THEN CTE_DAC.DAC_HEAD_ACCNO ELSE ACCNO END), ACCNO) AS ACCNO,
  ACCNO AS ACCNO_SALES,
  ISNULL((CASE WHEN CTE_DAC.DAC_HEAD_ACCNO >0 THEN ACCNO ELSE -1 END), ACCNO) AS ACCNO_BRANCH,
  CTE_JHD.STATUS, ISCONFIRMED,
  ISNULL(CREATE_DATE, '1899-01-01'), ISNULL(ORDERDATE, '1899-01-01'), ISNULL(ACTIVATION_DATE, '1899-01-01'),
  ISNULL(DUEDATE, '1899-01-01'), ISNULL(FINALISATION_DATE, '1899-01-01'), ISNULL(CALLBACK_DATE, '1899-01-01'),
  PHYS_STAFF, SALESNO, CONTACTNO,
  CURRENCYNO,
  LINETYPE, LINESTATUS, LINKEDITEM, COSTGROUP, COSTTYPE,
  PROGRESSINVOICE, SCHEDULENO, BILLINGID, BILLINGREF,
  CATEGORY, JOBTYPE, BILLINGMODE, PROJECTNO,
---- PERIODID,
  --SKU (stock items)
  ISNULL(SKU_ISACTIVE, 'N') AS SKU_ISACTIVE,
  ISNULL(SKU_STATUS, 'L') AS SKU_STATUS,
  ISNULL(SKU_BN, 'N') AS SKU_BN,
  ISNULL(SKU_SN, 'N') AS SKU_SN,
  ISNULL(SKU_SUPPLIERNO, -1) AS SKU_SUPPLIERNO,
  --PLU (stock items)
  PLU_DESCRIPTION,
  ISNULL(STOCKGROUP, -1) AS STOCKGROUP,
  ISNULL(STOCKGROUP2, -1) AS STOCKGROUP2,
  ISNULL(STOCKPRICEGROUP, -1) AS STOCKPRICEGROUP,
  ISNULL(SIZEID, -1) AS SIZEID,
  ISNULL(COLOURID, -1) AS COLOURID,
  --DAC (debtors account)
  ISNULL(ACCISACTIVE, 'N') AS ACCISACTIVE,
  ISNULL(ACCGROUP, -1) AS ACCGROUP, ISNULL(ACCGROUP2, -1) AS ACCGROUP2,
  ISNULL(ACCPRICEGROUP, -1) AS ACCPRICEGROUP,
--Measures
  --DAC
  MIN(ISNULL(AVEDAYS, 0)) AS AVEDAYS,
  --SOL (invoice line)
  SUM(ISNULL(OQUANTITY, 0)) AS OQUANTITY,
  SUM(ISNULL(OCOST, 0)) AS OCOST,
  SUM(ISNULL(OVALDISC, 0)) AS OVALDISC,
  SUM(ISNULL(OVALLIST, 0)) AS OVALLIST,
  SUM(ISNULL(OVAL, 0)) AS OVAL,
  SUM(ISNULL(OVALTAX, 0)) AS OVALTAX,
  SUM(ISNULL(OVALTAXINC, 0)) AS OVALTAXINC,
  SUM(ISNULL(OVALFC, 0)) AS OVALFC,
  SUM(ISNULL(OUNINVOICED, 0)) AS OUNINVOICED,
  SUM(ISNULL(OVALPENDING, 0)) AS OVALPENDING,
  SUM(ISNULL(OVALRETENTION, 0)) AS OVALRETENTION,
  SUM(ISNULL(WORKDAYS, 0)) AS WORKDAYS,
--Custom
--Number of rows (and code marker)
  'JPU', COUNT(*) AS FREQUENCY
-- Join structure
FROM CTE_JTR
LEFT OUTER JOIN CTE_JHD ON CTE_JHD.JOBNO = CTE_JTR.JOBNO
LEFT OUTER JOIN CTE_DAC ON CTE_DAC.DAC_ACCNO = CTE_JHD.ACCNO
LEFT OUTER JOIN CTE_CON ON CTE_CON.CON_SEQNO = CTE_JHD.CONTACTNO
LEFT OUTER JOIN CTE_PLU ON CTE_PLU.PLU_STOCKCODE = CTE_JTR.PLU
LEFT OUTER JOIN CTE_SKU ON CTE_SKU.SKU_STOCKCODE = CTE_JTR.SKU
GROUP BY
  --JTR (job transdactions)
  PLU, PLU_DESCRIPTION, SKU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO,
  BATCHCODE,
  CTE_JTR.JOBNO, JOBCODE, MASTER_JOBNO, CUSTORDNO, TITLE, DESCRIPTION,
  GLACCNO, GLSUBACC,
  BOMTYPE, PRICEOVERRIDDEN, ORDLINEID,
  --JHD (job header)
  CASE WHEN CTE_DAC.DAC_HEAD_ACCNO >0 THEN CTE_DAC.DAC_HEAD_ACCNO ELSE ACCNO END,
  ACCNO,
  CASE WHEN CTE_DAC.DAC_HEAD_ACCNO >0 THEN ACCNO ELSE -1 END,
  CTE_JHD.STATUS, ISCONFIRMED,
  CREATE_DATE, ORDERDATE, ACTIVATION_DATE, DUEDATE, FINALISATION_DATE, CALLBACK_DATE,
  PHYS_STAFF, SALESNO, CONTACTNO,
  CURRENCYNO,
  LINETYPE, LINESTATUS, LINKEDITEM, COSTGROUP, COSTTYPE,
  PROGRESSINVOICE, SCHEDULENO, BILLINGID, BILLINGREF,
  CATEGORY, JOBTYPE, BILLINGMODE, PROJECTNO,
  SALESGL, SALESSUBGL,
---- PERIODID,
  --SKU (stock items)
  SKU_DESCRIPTION, SKU_ISACTIVE, SKU_STATUS, SKU_BN, SKU_SN, STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP,
  SKU_SUPPLIERNO, SIZEID, COLOURID, SALES_GL_CODE, SALES_GLSUBCODE,
  --DAC (debtors account)
  ACCISACTIVE, ACCGROUP, ACCGROUP2, ACCPRICEGROUP
)

/** Define the Fact view **/
SELECT
 --Normalised (lookup)
  (CAST(JPU.BRANCHNO AS VARCHAR) + '.' + ISNULL(BRH.BRANCHNAME, 'No Branch')) AS BRANCHNAME,
  (CAST(JPU.ACCNO AS VARCHAR) + '.' + ISNULL(DAA.NAME, 'No Entered Debtor')) AS ACCNAME_ENTERED,
  (CAST(JPU.ACCNO_SALES AS VARCHAR) + '.' + ISNULL(DAS.NAME, 'No Sales Debtor')) AS ACCNAME_SALES,
  (CAST(JPU.ACCNO_BRANCH AS VARCHAR) + '.' + ISNULL(DAB.NAME, 'No Branch Debtor')) AS ACCNAME_BRANCH,
  (CAST(JPU.SKU_SUPPLIERNO AS VARCHAR) + '.' + ISNULL(CAS.NAME, 'No Supplier')) AS ACCNAME_SUPPLIER,
  (CAST(JPU.ACCGROUP AS VARCHAR) + '.' + ISNULL(DG1.GROUPNAME, 'No Debtor Account Group')) AS ACCGROUP1NAME,
  (CAST(JPU.ACCGROUP2 AS VARCHAR) + '.' + ISNULL(DG2.GROUPNAME, 'No Debtor Account Group 2')) AS ACCGROUP2NAME,
  (CAST(JPU.ACCPRICEGROUP AS VARCHAR) + '.' + ISNULL(DGP.GROUPNAME, 'No Debtor Price Group')) AS ACCGROUPPNAME,
  (CAST(JPU.SALESNO AS VARCHAR) + '.' + ISNULL(SFS.NAME, 'No Manager')) AS STAFFNAME,
  (CAST(JPU.PHYS_STAFF AS VARCHAR) + '.' + ISNULL(SFP.NAME, 'No Staff')) AS STAFFNAMEPHYS,
  (CAST(JPU.GLACCNO AS VARCHAR) + '.' + ISNULL(GLA.NAME, 'No GL Account')) AS GLACCNAME,
  (CAST(JPU.GLSUBACC AS VARCHAR) + '.' + ISNULL(GLS.NAME, 'No GL SubAccount')) AS GLSUBACCNAME,
  (CAST(JPU.LOCATION AS VARCHAR) + '.' + ISNULL(LOC.LNAME, 'No Location')) AS LOCATIONNAME,
  (CAST(JPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(CUY.CURRNAME, 'No Currency')) AS CURRENCYNAME,
  (CAST(JPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(CUY.CURRCODE, 'No Currency')) AS CURRENCYCODE,
  (CAST(JPU.TAXNO AS VARCHAR) + '.' + ISNULL(TAX.NAME, 'No Tax')) AS TAXNAME,
---- PES.AGE AS AGE,
---- PES.YEARAGE AS YEARAGE,
---- (PES.PERIODID + '.' + PES.PERIODNAME) AS PERIODNAME,
  (CAST(JPU.STOCKGROUP AS VARCHAR) + '.' + ISNULL(SG1.GROUPNAME, 'No Stock Group')) AS STOCKGROUP1NAME,
  (CAST(JPU.STOCKGROUP2 AS VARCHAR) + '.' + ISNULL(SG2.GROUPNAME, 'No Stock Group 2')) AS STOCKGROUP2NAME,
  (CAST(JPU.STOCKPRICEGROUP AS VARCHAR) + '.' + ISNULL(SGP.GROUPNAME, 'No Stock Price Group')) AS STOCKGROUPPNAME,
  (JPU.BOMCODE + '.' + ISNULL(BOM.DESCRIPTION, 'No BOM')) AS BOMNAME,
  (RTRIM(PLU) + '.' + ISNULL(RTRIM(PLU_DESCRIPTION), 'No PLU')) AS PLU_NAME,
  (RTRIM(SKU) + '.' + ISNULL(RTRIM(SKU_DESCRIPTION), 'No SKU')) AS SKU_NAME,
  (JPU.ORDSTATUS + '.' + ISNULL(JST.STATUSDESC, 'No Status')) AS STATUSNAME,
  (CAST(JPU.COSTGROUP AS VARCHAR) + '.' + ISNULL(JCG.COSTDESC, 'No Cost Group')) AS COSTGROUPNAME,
  (CAST(JPU.COSTTYPE AS VARCHAR) + '.' + ISNULL(JCT.COSTDESC, 'No Cost Type')) AS COSTTYPENAME,
  (CAST(JPU.PROJECTNO AS VARCHAR) + '.' + ISNULL(JPR.PROJ_TITLE, 'No Project')) AS PROJECTNAME,
  (CAST(JPU.CATEGORY AS VARCHAR) + '.' + ISNULL(JCY.CATDESC, 'No Category')) AS CATEGORYNAME,
  (CAST(JPU.JOBTYPE AS VARCHAR) + '.' + ISNULL(JTP.TYPEDESC, 'No Job Type')) AS JOBTYPENAME,
  (CAST(JPU.BILLINGMODE AS VARCHAR) + '.' +
                                        (CASE BILLINGMODE
                                        WHEN 0 THEN 'Charge-Up'
                                        WHEN 1 THEN 'Invoice Ex-Quote'
                                        WHEN 2 THEN 'Manufacture - Output Items'
                                        WHEN 3 THEN 'Progress Invoices'
                                        ELSE 'No Job Type'
                                        END)) AS BILLINGMODENAME,

--From Sales Permutations
  --DIL (invoice line)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  JPU.BRANCHNO, LOCATION, TAXNO,
  BATCHCODE,
  JOBNO, JOBCODE, MASTER_JOBNO, CUSTORDNO, TITLE, JPU.DESCRIPTION,
  GLACCNO,
  JPU.GLSUBACC,
  JPU.BOMTYPE, PRICEOVERRIDDEN, ORDLINEID,
  JPU.ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  ORDSTATUS, ISCONFIRMED,
  CREATE_DATE, ORDERDATE, ACTIVATION_DATE, DUEDATE, FINALISATION_DATE, CALLBACK_DATE,
  JPU.SALESNO, CONTACTNO,
  JPU.CURRENCYNO,
  LINETYPE, LINESTATUS, LINKEDITEM, COSTGROUP, COSTTYPE,
  PROGRESSINVOICE, SCHEDULENO, BILLINGID, BILLINGREF,
  CATEGORY, JOBTYPE, BILLINGMODE, PROJECTNO,
  PHYS_STAFF,
---- CTE_SPU.PERIODID,
  --PLU (stock items)
  JPU.PLU_DESCRIPTION, JPU.STOCKGROUP, JPU.STOCKGROUP2, JPU.STOCKPRICEGROUP, SIZEID, COLOURID,
  --SKU (stock items)
  SKU_ISACTIVE, SKU_STATUS,
  JPU.SKU_BN, JPU.SKU_SN,
  SKU_SUPPLIERNO,
  --DAC (debtors account)
  ACCISACTIVE, JPU.ACCGROUP, JPU.ACCGROUP2, ACCPRICEGROUP,
--Measures
  --DAC
  AVEDAYS,
  --DIL (invoice line)
  ROUND(OQUANTITY, VDP.QTYDECIMALS) AS OQUANTITY,
  ROUND(OCOST, 2) AS OCOST,
  ROUND(OVALDISC, 2) AS OVALDISC,
  ROUND(OVAL, 2) AS OVAL,
  ROUND(OVALLIST, 2) AS OVALLIST,
  ROUND(OVALTAX, 2) AS OVALTAX,
  ROUND(OVALTAXINC, 2) AS OVALTAXINC,
  ROUND(OVALFC, 2) AS OVALFC,
  ROUND((OVAL-OCOST), 2) AS OPROFIT,
  ROUND(CASE WHEN OCOST <> 0 THEN (((OVAL-OCOST)/OCOST)*100) ELSE 100 END, 2) AS OMARKUPPC,
  ROUND(CASE WHEN OVAL <> 0 THEN (((OVAL-OCOST)/OVAL)*100) ELSE 100 END, 2) AS OMARGINPC,
  ROUND(CASE WHEN BUYRATE =0 THEN 1 ELSE BUYRATE END, 4) AS OEXCHRATE,
  ROUND(CASE WHEN OQUANTITY =0 THEN OCOST ELSE OCOST/ABS(OQUANTITY) END, COSTPRDECIMALS) AS OUNITCOST,
  ROUND(CASE WHEN OQUANTITY =0
             THEN OVAL/(case when isnull(BUYRATE, 0)=0 then 1 else BUYRATE end)
             ELSE (OVAL/(case when isnull(BUYRATE, 0)=0 then 1 else BUYRATE end))/ABS(OQUANTITY)
        END, VDP.SELLPRDECIMALS) AS OUNITPRICE,
  ROUND(CASE WHEN OQUANTITY =0
             THEN OVALTAXINC/(case when isnull(BUYRATE, 0)=0 then 1 else BUYRATE end)
             ELSE (OVALTAXINC/(case when isnull(BUYRATE, 0)=0 then 1 else BUYRATE end))/ABS(OQUANTITY)
        END, VDP.SELLPRDECIMALS) AS OUNITPRICETAXINC,
  ROUND(CASE WHEN OQUANTITY =0 THEN OVALFC ELSE OVALFC/ABS(OQUANTITY) END, VDP.SELLPRDECIMALS) AS OUNITPRICEFC,
  ROUND(OUNINVOICED, VDP.QTYDECIMALS) AS OUNINVOICED,
  ROUND(OVALPENDING, 2) AS OVALPENDING,
  ROUND(OVALRETENTION, 2) AS OVALRETENTION,
  WORKDAYS,
--Custom
--Number of rows
  FREQUENCY
--Join structure
FROM CTE_JPU JPU
  LEFT OUTER JOIN dbo.BRANCHES BRH WITH (NOLOCK) ON JPU.BRANCHNO = BRH.BRANCHNO
  LEFT OUTER JOIN dbo.DR_ACCS DAA WITH (NOLOCK) ON JPU.ACCNO = DAA.ACCNO
  LEFT OUTER JOIN dbo.DR_ACCS DAS WITH (NOLOCK) ON JPU.ACCNO_SALES = DAS.ACCNO
  LEFT OUTER JOIN dbo.DR_ACCS DAB WITH (NOLOCK) ON JPU.ACCNO_BRANCH = DAB.ACCNO
  LEFT OUTER JOIN dbo.CR_ACCS CAS WITH (NOLOCK) ON JPU.SKU_SUPPLIERNO = CAS.ACCNO
  LEFT OUTER JOIN dbo.DR_ACCGROUPS DG1 WITH (NOLOCK) ON JPU.ACCGROUP = DG1.ACCGROUP
  LEFT OUTER JOIN dbo.DR_ACCGROUP2S DG2 WITH (NOLOCK) ON JPU.ACCGROUP2 = DG2.ACCGROUP
  LEFT OUTER JOIN dbo.DR_PRICEGROUPS DGP WITH (NOLOCK) ON JPU.ACCPRICEGROUP = DGP.GROUPNO
  LEFT OUTER JOIN dbo.STAFF SFS WITH (NOLOCK) ON JPU.SALESNO = SFS.STAFFNO
  LEFT OUTER JOIN dbo.STAFF SFP WITH (NOLOCK) ON JPU.PHYS_STAFF = SFP.STAFFNO
  LEFT OUTER JOIN dbo.GLACCS GLA WITH (NOLOCK) ON JPU.GLACCNO = GLA.ACCNO
  LEFT OUTER JOIN dbo.GLSUBACCS GLS WITH (NOLOCK) ON JPU.GLACCNO = GLS.ACCNO
                                                          AND JPU.GLSUBACC = GLS.SUBACCNO
  LEFT OUTER JOIN dbo.STOCK_LOCATIONS LOC WITH (NOLOCK) ON JPU.LOCATION = LOC.LOCNO
  LEFT OUTER JOIN dbo.CURRENCIES CUY WITH (NOLOCK) ON JPU.CURRENCYNO = CUY.CURRENCYNO
  LEFT OUTER JOIN dbo.TAX_RATES TAX WITH (NOLOCK) ON JPU.TAXNO = TAX.SEQNO
---- LEFT OUTER JOIN dbo.PERIOD_STATUS PES WITH (NOLOCK) ON CTE_JPU.PERIODID = PES.SEQNO
  LEFT OUTER JOIN dbo.STOCK_GROUPS SG1 WITH (NOLOCK) ON JPU.STOCKGROUP = SG1.GROUPNO
  LEFT OUTER JOIN dbo.STOCK_GROUP2S SG2 WITH (NOLOCK) ON JPU.STOCKGROUP2 = SG2.GROUPNO
  LEFT OUTER JOIN dbo.STOCK_PRICEGROUPS SGP WITH (NOLOCK) ON JPU.STOCKPRICEGROUP = SGP.GROUPNO
  LEFT OUTER JOIN dbo.BILLOMAT_HDR BOM WITH (NOLOCK) ON JPU.BOMCODE = BOM.BILLCODE
  LEFT OUTER JOIN dbo.JOB_STATUS JST WITH (NOLOCK) ON JPU.ORDSTATUS = JST.STATUSKEY
  LEFT OUTER JOIN dbo.JOB_COSTGROUPS JCG WITH (NOLOCK) ON JPU.COSTGROUP = JCG.SEQNO
  LEFT OUTER JOIN dbo.JOB_COSTTYPES JCT WITH (NOLOCK) ON JPU.COSTTYPE = JCT.SEQNO
  LEFT OUTER JOIN dbo.JOBCOST_PROJ JPR WITH (NOLOCK) ON JPU.PROJECTNO = JPR.SEQNO
  LEFT OUTER JOIN dbo.JOB_CATEGORIES JCY WITH (NOLOCK) ON JPU.CATEGORY = JCY.CATNO
  LEFT OUTER JOIN dbo.JOB_TYPES JTP WITH (NOLOCK) ON JPU.JOBTYPE = JTP.TYPENO
  LEFT OUTER JOIN CTE_PRECISIONS VDP WITH (NOLOCK) ON VDP.SEQNO=1


View: VW_FACT_PROPERTIES
NameVW_FACT_PROPERTIES
Note
Code/** FIELDLEVEL settings (Same as for PROFILE_FIELDS)
 1 N/A flEssential {Business Essentials (Reserved - see notes)}
 2 Frequently used flBasic {Basics to check in every setup}
 3 Occasionally used flCommon {Detail settings used on some sites} Occasionally used
 4 Rarely used flOccasional {Less frequently used features/ detail}
 5 Custom lCustom {Custom options - special low use features}
 6 N/A flWIP {Feature in development. Special Ctrl-Alt-F12 reveal in ExoCfg}
*
* Create base view **/
CREATE VIEW [dbo].[VW_FACT_PROPERTIES]
AS
WITH CTE_OBJ AS (SELECT so.xtype AS TYPE,
                                                                  UPPER(CASE so.xtype WHEN 'TR' THEN 'Trigger' WHEN 'U' THEN 'Table' WHEN 'P' THEN 'Procedure' WHEN 'V' THEN 'View' WHEN 'FN' THEN 'Function'
                                                                   WHEN 'TF' THEN 'Table Function' ELSE 'Unknown' END) AS TYPENAME, so.name AS ONAME, CASE WHEN (sc.text IS NOT NULL AND
                                                                  (sc.text LIKE '%**CUSTOM%' OR
                                                                  sc.text LIKE '%** CUSTOM%')) THEN 'Y' ELSE 'N' END AS FLAGGED_CUSTOM, NULL AS CTYPE, NULL AS CTYPENAME, NULL AS CNAME,
                                                                  0 AS CSIZE, 0 AS CORDER, NULL AS COLLATION
                                           FROM sys.sysobjects AS so LEFT OUTER JOIN
                                                                  sys.syscomments AS sc ON sc.id = so.id
                                           WHERE (so.name LIKE '%FACT%')
                                           UNION
                                           SELECT so.xtype AS TYPE,
                                                                 UPPER(CASE so.xtype WHEN 'TR' THEN 'Trigger' WHEN 'U' THEN 'Table' WHEN 'P' THEN 'Procedure' WHEN 'V' THEN 'View' WHEN 'FN' THEN 'Function'
                                                                  ELSE 'Unknown' END) AS TYPENAME, so.name, 'N' AS FLAGGED_CUSTOM, sf.xusertype AS CTYPE,
                                                                 UPPER(CASE sf.xusertype WHEN 34 THEN 'Image' WHEN 36 THEN 'Unique Identifier' WHEN 35 THEN 'Text' WHEN 48 THEN 'Tiny Int' WHEN 52 THEN
                                                                  'SmallInt' WHEN 56 THEN 'Integer' WHEN 58 THEN 'SamllDateTime' WHEN 59 THEN 'Real' WHEN 60 THEN 'Money' WHEN 61 THEN 'DateTime' WHEN
                                                                  62 THEN 'Float' WHEN 98 THEN 'SQL Variant' WHEN 99 THEN 'NText' WHEN 104 THEN 'Bit' WHEN 106 THEN 'Decimal' WHEN 108 THEN 'Numeric'
                                                                  WHEN 122 THEN 'SmallMoney' WHEN 127 THEN 'BigInt' WHEN 167 THEN 'Varchar' WHEN 189 THEN 'TimeStamp' WHEN 173 THEN 'Binary' WHEN
                                                                  175 THEN 'Char' WHEN 231 THEN 'NVarchar' WHEN 241 THEN 'XML' ELSE 'Unknown' END) AS CTYPENAME, sf.name AS CNAME,
                                                                 sf.length AS CSIZE, 0 AS CORDER, sf.collation
                                           FROM sys.syscolumns AS sf LEFT OUTER JOIN
                                                                 sys.sysobjects AS so ON so.id = sf.id
                                           WHERE (so.xtype <> 'S')), CTE_OBJ_DESC AS
    (SELECT t.name AS ObjName, c.name AS ColumnName, ep.value AS MS_Description
      FROM sys.extended_properties AS ep INNER JOIN
                             sys.views AS t ON ep.major_id = t.object_id INNER JOIN
                             sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
      WHERE (ep.class = 1) AND (ep.name = 'MS_Description')), CTE_OBJ_CLASS AS
    (SELECT t.name AS ObjName, c.name AS ColumnName, ep.value AS EXO_Class
      FROM sys.extended_properties AS ep INNER JOIN
                             sys.views AS t ON ep.major_id = t.object_id INNER JOIN
                             sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
      WHERE (ep.class = 1) AND (ep.name = 'EXO_Class')), CTE_OBJ_HIVE AS
    (SELECT t.name AS ObjName, c.name AS ColumnName, ep.value AS EXO_Hive
      FROM sys.extended_properties AS ep INNER JOIN
                             sys.views AS t ON ep.major_id = t.object_id INNER JOIN
                             sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
      WHERE (ep.class = 1) AND (ep.name = 'EXO_Hive')), CTE_OBJ_LUOBJ AS
    (SELECT t.name AS ObjName, c.name AS ColumnName, ep.value AS EXO_LUobj
      FROM sys.extended_properties AS ep INNER JOIN
                             sys.views AS t ON ep.major_id = t.object_id INNER JOIN
                             sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
      WHERE (ep.class = 1) AND (ep.name = 'EXO_LUobj')), CTE_OBJ_LUCOL AS
    (SELECT t.name AS ObjName, c.name AS ColumnName, ep.value AS EXO_LUcol
      FROM sys.extended_properties AS ep INNER JOIN
                             sys.views AS t ON ep.major_id = t.object_id INNER JOIN
                             sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
      WHERE (ep.class = 1) AND (ep.name = 'EXO_LUcol')), CTE_OBJ_LUKEY AS
    (SELECT t.name AS ObjName, c.name AS ColumnName, ep.value AS EXO_LUkey
      FROM sys.extended_properties AS ep INNER JOIN
                             sys.views AS t ON ep.major_id = t.object_id INNER JOIN
                             sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
      WHERE (ep.class = 1) AND (ep.name = 'EXO_LUkey')), CTE_OBJ_LUFACT AS
    (SELECT t.name AS ObjName, c.name AS ColumnName, ep.value AS EXO_LUfact
      FROM sys.extended_properties AS ep INNER JOIN
                             sys.views AS t ON ep.major_id = t.object_id INNER JOIN
                             sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
      WHERE (ep.class = 1) AND (ep.name = 'EXO_LUfact')), CTE_DISP_NAME AS
    (SELECT NAMEID, DISPLAYNAME, DISPLAYHINT,
                             CASE WHEN NAMEID LIKE 'CR%' THEN 'VW_FACT_PURCH%' WHEN NAMEID LIKE 'DR%' THEN 'VW_FACT_SALES%' WHEN NAMEID LIKE 'JOB%' THEN 'VW_FACT_JOB%'
                              ELSE 'VW_FACT%' END AS FACT_PREFIX, CASE WHEN NAMEID LIKE 'CR%' THEN REPLACE(REPLACE(REPLACE(NAMEID, 'CR', ''), '_PRIMARY', ''),
                             '_SECONDARY', '2') WHEN NAMEID LIKE 'DR%' THEN REPLACE(REPLACE(REPLACE(NAMEID, 'DR', ''), '_PRIMARY', ''), '_SECONDARY', '2')
                             ELSE REPLACE(REPLACE(NAMEID, '_PRIMARY', ''), '_SECONDARY', '2') END AS FACT_NAME
      FROM dbo.DISPLAY_NAMES
      WHERE (NAMEID <> DISPLAYNAME) AND (NAMEID NOT LIKE '%ADDR%')), CTE_FACT AS
    (SELECT OB.TYPE, OB.TYPENAME, OB.ONAME, OB.FLAGGED_CUSTOM, OB.CTYPE, OB.CTYPENAME, OB.CNAME, OB.CSIZE, OB.CORDER, OB.COLLATION,
                             ISNULL(RTRIM(CAST(OD.MS_Description AS nvarchar(255))), OB.CNAME) AS EDESCRIPTION, ISNULL(RTRIM(CAST(OC.EXO_Class AS nvarchar(255))), 'Dimension')
                             AS ECLASS, ISNULL(RTRIM(CAST(OH.EXO_Hive AS nvarchar(255))), '*') AS EHIVE, RTRIM(CAST(LO.EXO_LUobj AS nvarchar(255))) AS ELUOBJ,
                             RTRIM(CAST(LC.EXO_LUcol AS nvarchar(255))) AS ELUCOL, RTRIM(CAST(LK.EXO_LUkey AS nvarchar(255))) AS ELUKEY,
                             ISNULL(RTRIM(CAST(LF.EXO_LUfact AS nvarchar(255))), OB.CNAME) AS ELUFACT, ISNULL(RTRIM(DN.DISPLAYNAME),
                             ISNULL(RTRIM(CAST(OD.MS_Description AS nvarchar(255))), OB.CNAME)) AS EDPYDESC, ISNULL(FG.NOTES, ' ') AS ENOTES, (CASE isnull(FG.FIELDLEVEL, 0)
                             WHEN 0 THEN 'Commonly used' WHEN 1 THEN 'Essential' WHEN 2 THEN 'Frequently used' WHEN 3 THEN 'Occasionally used' WHEN 4 THEN 'Rarely used' ELSE
                              'Unknown' END) AS ELEVEL
      FROM CTE_OBJ AS OB LEFT OUTER JOIN
                             CTE_OBJ_DESC AS OD ON OD.ObjName = OB.ONAME AND OD.ColumnName = OB.CNAME LEFT OUTER JOIN
                             CTE_OBJ_CLASS AS OC ON OC.ObjName = OB.ONAME AND OC.ColumnName = OB.CNAME LEFT OUTER JOIN
                             CTE_OBJ_HIVE AS OH ON OH.ObjName = OB.ONAME AND OH.ColumnName = OB.CNAME LEFT OUTER JOIN
                             CTE_OBJ_LUOBJ AS LO ON LO.ObjName = OB.ONAME AND LO.ColumnName = OB.CNAME LEFT OUTER JOIN
                             CTE_OBJ_LUCOL AS LC ON LC.ObjName = OB.ONAME AND LC.ColumnName = OB.CNAME LEFT OUTER JOIN
                             CTE_OBJ_LUKEY AS LK ON LK.ObjName = OB.ONAME AND LK.ColumnName = OB.CNAME LEFT OUTER JOIN
                             CTE_OBJ_LUFACT AS LF ON LF.ObjName = OB.ONAME AND LF.ColumnName = OB.CNAME LEFT OUTER JOIN
                             CTE_DISP_NAME AS DN ON OB.ONAME LIKE DN.FACT_PREFIX AND DN.FACT_NAME = OB.CNAME LEFT OUTER JOIN
                             dbo.FACT_GLOSSARY AS FG ON FG.FIELDNAME = OB.CNAME
      WHERE (OB.ONAME LIKE '%FACT%'))
    SELECT TYPE, TYPENAME, ONAME, FLAGGED_CUSTOM, CTYPE, CTYPENAME, CNAME, CSIZE, CORDER, COLLATION, EDESCRIPTION, ECLASS, EHIVE, ELUOBJ, ELUCOL,
                            ELUKEY, ELUFACT, EDPYDESC, ENOTES, ELEVEL, (CASE WHEN ELUOBJ IS NULL
                            THEN CASE WHEN CTYPEname LIKE '%CHAR%' THEN (CNAME + ' LIKE ''''') ELSE (CNAME + ' = ')
                            END ELSE (ELUFACT + ' IN (SELECT ' + ELUKEY + ' FROM ' + ELUOBJ + ' WHERE ' + ELUCOL + ' LIKE '''')') END) AS ELUSQL
     FROM CTE_FACT AS FT


View: VW_FACT_PURCHASES
NameVW_FACT_PURCHASES
Note
Code-- Sales fact view for debtors invoices
CREATE VIEW [dbo].[VW_FACT_PURCHASES]
-- Indexed view
--WITH SCHEMABINDING
AS
/** Purchases fact view for debtors invoices DR_INVLINE driven **/

/**
setup CTEs in such a way as they can be extended e.g with custom or extra fields.
 Hopefully the Dimensions and Measures tabs could be programatically recognised.
 Columns above Dimensions are only used internally for joins using the DTEs
   but are still converted to common aliases as part of the DTE definition.
**/
WITH
-- STOCK_ITEMS - Price Lookup Item --------------------------------------------------------------------
CTE_PLU
  (PLU_STOCKCODE,
  -- Internal
  SALES_GL_CODE, SALES_GLSUBCODE, PURCH_GL_CODE, PURCH_GLSUBCODE, COSCOST,
  -- Dimensions (alias)
  STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, SIZEID, COLOURID,
  -- Measures (alias)
  -- Custom (alias)
  CTE)
AS
  (SELECT STOCKCODE,
  -- Internal (database)
  SALES_GL_CODE, SALES_GLSUBCODE, PURCH_GL_CODE, PURCH_GLSUBCODE,
  CASE (SELECT CAST(FIELDVALUE AS INTEGER)
        FROM dbo.PROFILE_VALUES
        WHERE FIELDNAME = 'STOCKCOSTMETHOD' AND PROFILEID = -1)
       WHEN 2 THEN ISNULL(STDCOST, 0)
       WHEN 1 THEN ISNULL(LATESTCOST, 0)
       ELSE ISNULL(AVECOST, 0)
  END AS COSCOST,
  -- Dimensions (database)
  STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, X_SIZEID, X_COLOURID,
  -- Measures (database)
  -- Custom (database)
  'PLU'
  FROM dbo.STOCK_ITEMS PLU WITH (NOLOCK)
  )
,
-- STOCK_ITEMS - Stock Keeping Item --------------------------------------------------------------------
CTE_SKU
  (SKU_STOCKCODE,
  -- Internal
  -- Dimensions (alias)
  SKU_DESCRIPTION, SKU_ISACTIVE, SKU_STATUS, SKU_BN, SKU_SN, SKU_SUPPLIERNO,
  -- Measures (alias)
  -- Custom (alias)
  CTE)
AS
  (SELECT STOCKCODE,
  -- Internal (database)
  -- Dimensions (database)
  DESCRIPTION, ISACTIVE, STATUS, HAS_BN, HAS_SN, SUPPLIERNO,
  -- Measures (database)
  -- Custom (database)
  'SKU'
  FROM dbo.STOCK_ITEMS SKU WITH (NOLOCK)
  )
,
-- CR_ACCS ------------------------------------------------------------------------
CTE_CAC
  (CAC_ACCNO,
  -- Internal (alias)
  CAC_HEAD_ACCNO,
  -- Dimensions (alias)
  ACCISACTIVE, ACCGROUP, ACCGROUP2,
  -- Measures (alias)
  AVEDAYS,
  -- Custom (alias)
  CTE)
AS
  (SELECT ACCNO,
  -- Internal (database)
  HEAD_ACCNO,
  -- Dimensions (database)
  ISACTIVE, ACCGROUP, ACCGROUP2,
  -- Measures (database)
  AVE_DAYS_TO_PAY,
  -- Custom (database)
  'CAC'
  FROM dbo.DR_ACCS CAC WITH (NOLOCK)
  )
,
-- CONTACTS ------------------------------------------------------------------------
CTE_CON (CON_SEQNO,
  -- Dimensions (alias)
  CONT_ISACTIVE,
  -- Measures (alias)
  CONT_NAME,
  -- Custom (alias)
  CTE) AS (SELECT SEQNO,
  -- Dimensions (database)
  ISACTIVE,
  -- Measures (database)
  FULLNAME,
  -- Custom (database)
  'CON'
  FROM dbo.CONTACTS CON WITH (NOLOCK)
),
-- CR_TRANS (invoices) ------------------------------------------------------------------------
CTE_CT1 (PO_SEQNO, SESSION_ID,
  -- Dimensions (alias)
  TRANSEQNO, INVNO,
  REF1, REF2, REF3,
  SESSIONID,
  ACCNO, ACCNO_PURCH, ACCNO_BRANCH,
  DUEDATE, TRANSDATE,
  POSTTIME,
  SALESNO, CONTACTNO, CURRENCYNO,
  PERIODID,
  -- Measures (alias)
  -- Custom (alias)
  CTE) AS (SELECT PO_SEQNO, SESSION_ID,
  -- Dimensions (database)
  SEQNO, ISNULL(INVNO, '') AS INVNO,
  ISNULL(REF1, '') AS REF1, ISNULL(REF2, '') AS REF2, ISNULL(REF3, '') AS REF3,
  ISNULL(SESSION_ID, -1) AS SESSIONID,
  ACCNO, PURCH_ACCNO, BRANCH_ACCNO,
  ISNULL(DUEDATE, ISNULL(TRANSDATE, GETDATE())) AS DUEDATE, ISNULL(TRANSDATE, GETDATE()) AS TRANSDATE,
  ISNULL(POSTTIME, GETDATE()) AS POSTTIME,
  ISNULL(SALESNO, -1) AS SALESNO, ISNULL(CONTACT_SEQNO, -1) AS CONTACT_SEQNO, ISNULL(CURRENCYNO, -1) AS CURRENCYNO,
  ISNULL(PERIOD_SEQNO, -1) AS PERIOD_SEQNO,
  -- Measures (database)
  -- Custom (database)
  'CT1'
  FROM dbo.CR_TRANS CT1 WITH (NOLOCK)
  WHERE TRANSTYPE=1
),
-- CR_INVLINES (invoices) ----------------------------------------------------------------------
CTE_CIL (CIL_HDR_SEQNO, JOBNO, LINE_SOURCE,
  -- Dimensions (alias)
  PLU, PLU_DESCRIPTION,
  SKU,
  BOMCODE,
  BRANCHNO, LOCATION, TAXNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO, GLSUBACC,
  BOMTYPE, PRICEOVERRIDDEN, INVLINEID,
  LINETYPE, LINKEDITEM,
  -- Measures (alias)
  IQUANTITY, IVALDISC, IVAL, IVALTAX, IVALTAXINC, IVALFC,
  -- Custom (alias)
  CTE) AS (SELECT HDR_SEQNO, JOBNO, LINE_SOURCE,
  -- Dimensions (database)
  ISNULL(STOCKCODE, '') AS STOCKCODE,
  ISNULL(CIL.DESCRIPTION, '') AS DESCRIPTION,
  (CASE WHEN(LINKED_STOCKCODE IS NULL OR LINKED_STOCKCODE = '')
        THEN STOCKCODE
        ELSE LINKED_STOCKCODE
   END) AS LINKED_STOCKCODE,
  ISNULL(KITCODE, '') AS KITCODE,
  ISNULL(BRANCHNO, -1) AS BRANCHNO, ISNULL(LOCATION, -1) AS LOCATION,
  ISNULL(TAXRATE_NO, -1) AS TAXRATE_NO,
  ISNULL(BATCHCODE, '') AS BATCHCODE,
  ISNULL(JOBCODE, '') AS JOBCODE,
  ISNULL(ANALYSIS, -1) AS ANALYSIS, ISNULL(SUBCODE, -1) AS SUBCODE,
  ISNULL(BOMTYPE, 'N') AS BOMTYPE, ISNULL(PRICE_OVERRIDDEN, 'N') AS PRICE_OVERRIDDEN,
  ISNULL(LINETYPE, -1), ISNULL(LINKEDSTATUS, 'N'),
  ISNULL(DRINVLINEID, CIL.SEQNO) AS DRINVLINEID,
  -- Measures (database)
  QUANTITY,
  ((QUANTITY*UNITPRICE*DISCOUNT/100)/(case when isnull(EXCHRATE, 0)=0 then 1 else EXCHRATE end)) AS DISCVAL,
  LINETOTAL/(case when isnull(EXCHRATE, 0)=0 then 1 else EXCHRATE end) AS SELLVAL,
  LINETOTAL_TAX/(case when isnull(EXCHRATE, 0)=0 then 1 else EXCHRATE end) AS TAXVAL,
  LINETOTAL_INCTAX/(case when isnull(EXCHRATE, 0)=0 then 1 else EXCHRATE end) AS TAXINCVAL,
  LINETOTAL AS FCVAL,
  -- Custom (database)
  'CIL'
 FROM dbo.DR_INVLINES CIL WITH (NOLOCK)
 WHERE LINETYPE <> 4 AND NOT (LINETYPE = -1 AND STOCKCODE = ' ')
 AND HDR_SEQNO >= ISNULL((
                   SELECT MINTRANSEQNO FROM dbo.PERIOD_STATUS PS
                   WHERE LEDGER ='C'
                   AND PS.AGE = (SELECT ANALYSIS_AGE_LIMIT FROM dbo.LEDGER_PERIODS LP WHERE LP.SEQNO=1))
                  , 0)
),
-- Essentials Precisions --------------------------------------------------------------------
CTE_PROFILES AS (
    SELECT PF.FIELDNAME,
           CASE WHEN(PV.FIELDVALUE IS NULL OR PV.FIELDVALUE = '')
                THEN isnull(PF.DEFAULTVALUE, 0) ELSE PV.FIELDVALUE
           END AS FIELDVALUE
    FROM dbo.PROFILE_FIELDS PF
    LEFT OUTER JOIN dbo.PROFILE_VALUES PV ON (PF.FIELDNAME = PV.FIELDNAME)
    WHERE PF.FIELDLEVEL=1
),
CTE_PRECISIONS AS (
    SELECT SEQNO,
           CAST(BILLCOSTDECIMALS AS INT) AS BILLCOSTDECIMALS,
           CAST(BILLQTYDECIMALS AS INT) AS BILLQTYDECIMALS,
           CAST(COSTPRDECIMALS AS INT) AS COSTPRDECIMALS,
           CAST(DISCOUNTDECIMALS AS INT) AS DISCOUNTDECIMALS,
           CAST(QTYDECIMALS AS INT) AS QTYDECIMALS,
           CAST(SELLPRDECIMALS AS INT) AS SELLPRDECIMALS,
           CAST(GLBRANCHSIZE AS INT) AS GLBRANCHSIZE,
           CAST(GLACCNOSIZE AS INT) AS GLACCNOSIZE,
           CAST(GLSUBACCSIZE AS INT) AS GLSUBACCSIZE
    FROM (SELECT 'SEQNO' AS FIELDNAME, '1' AS FIELDVALUE
          UNION
          SELECT FIELDNAME, FIELDVALUE FROM CTE_PROFILES
         ) AS PivotData
         PIVOT (MAX(FIELDVALUE)
                FOR FIELDNAME
                 IN ([SEQNO],
                     [BILLCOSTDECIMALS],
                     [BILLQTYDECIMALS],
                     [COSTPRDECIMALS],
                     [DISCOUNTDECIMALS],
                     [QTYDECIMALS],
                     [SELLPRDECIMALS],
                     [GLBRANCHSIZE],
                     [GLACCNOSIZE],
                     [GLSUBACCSIZE])
               ) AS PivotTable
),
-- Sales Permutations --------------------------------------------------------------------
CTE_PPU (
 --Dimensions (alias)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO,
  GLSUBACC,
  BOMTYPE, PRICEOVERRIDDEN, INVLINEID,
  LINETYPE, LINKEDITEM,
  TRANSEQNO, INVNO, REF1, REF2, REF3,
  SESSIONID,
  ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  DUEDATE, TRANSDATE, POSTTIME, SALESNO, CONTACTNO, CURRENCYNO,
  PERIODID,
  SKU_ISACTIVE, SKU_STATUS, SKU_BN, SKU_SN, SKU_SUPPLIERNO,
  PLU_DESCRIPTION, STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, SIZEID, COLOURID,
  ACCISACTIVE,
  ACCGROUP, ACCGROUP2,
 --Measures (alias)
  AVEDAYS,
  IQUANTITY, IVALDISC, IVAL, IVALTAX, IVALTAXINC, IVALFC,
  -- Custom (alias)
  CTE, FREQUENCY) AS (SELECT
 -- Dimensions (database)
  --CIL (invoice line)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO,
  BATCHCODE,
  JOBCODE,
  CASE WHEN ISNULL(GLACCNO, 0) > 0
       THEN GLACCNO
       ELSE ISNULL((SELECT PURCH_GL_CODE FROM CTE_PLU WHERE CTE_PLU.PLU_STOCKCODE = CTE_CIL.PLU)
                   , (SELECT DEF_PURCH FROM dbo.GL_CONTROL))
  END AS GLACCNO,
  GLSUBACC,
  CTE_CIL.BOMTYPE, PRICEOVERRIDDEN, INVLINEID,
  LINETYPE, LINKEDITEM,
  --CT1 (invoice)
  TRANSEQNO, INVNO, REF1, REF2, REF3,
  SESSIONID,
  ACCNO,
  ISNULL(ACCNO_PURCH, ACCNO) AS ACCNO_SALES,
  ISNULL(ACCNO_BRANCH, -1) AS ACCNO_BRANCH,
  DUEDATE, TRANSDATE, POSTTIME, SALESNO, CONTACTNO, CURRENCYNO,
  PERIODID,
  --SKU (stock items)
  ISNULL(SKU_ISACTIVE, 'N') AS SKU_ISACTIVE,
  ISNULL(SKU_STATUS, 'L') AS SKU_STATUS,
  ISNULL(SKU_BN, 'N') AS SKU_BN,
  ISNULL(SKU_SN, 'N') AS SKU_SN,
  ISNULL(SKU_SUPPLIERNO, -1) AS SKU_SUPPLIERNO,
  --PLU (stock items)
  PLU_DESCRIPTION,
  ISNULL(STOCKGROUP, -1) AS STOCKGROUP,
  ISNULL(STOCKGROUP2, -1) AS STOCKGROUP2,
  ISNULL(STOCKPRICEGROUP, -1) AS STOCKPRICEGROUP,
  ISNULL(SIZEID, -1) AS SIZEID,
  ISNULL(COLOURID, -1) AS COLOURID,
  --CAC (debtors account)
  ISNULL(ACCISACTIVE, 'N') AS ACCISACTIVE,
  ISNULL(ACCGROUP, -1) AS ACCGROUP,
  ISNULL(ACCGROUP2, -1) AS ACCGROUP2,
 --Measures
  --CAC
  MIN(ISNULL(AVEDAYS, 0)) AS AVEDAYS,
  --CIL (invoice line)
  SUM(ISNULL(IQUANTITY, 0)) AS IQUANTITY,
  SUM(ISNULL(IVALDISC, 0)) AS IVALDISC,
  SUM(ISNULL(IVAL, 0)) AS IVAL,
  SUM(ISNULL(IVALTAX, 0)) AS IVALTAX,
  SUM(ISNULL(IVALTAXINC, 0)) AS IVALTAXINC,
  SUM(ISNULL(IVALFC, 0)) AS IVALFC,
 --Custom
 --Number of rows (and code marker)
  'PPU', COUNT(*) AS FREQUENCY
-- Join structure
FROM CTE_CIL
  LEFT OUTER JOIN CTE_CT1 ON CTE_CT1.TRANSEQNO = CTE_CIL.CIL_HDR_SEQNO
  LEFT OUTER JOIN CTE_CAC ON CTE_CAC.CAC_ACCNO = CTE_CT1.ACCNO
  LEFT OUTER JOIN CTE_CON ON CTE_CON.CON_SEQNO = CTE_CT1.CONTACTNO
  LEFT OUTER JOIN CTE_SKU ON CTE_SKU.SKU_STOCKCODE = CTE_CIL.SKU
  LEFT OUTER JOIN CTE_PLU ON CTE_PLU.PLU_STOCKCODE = CTE_CIL.PLU
GROUP BY
  --CIL (invoice line)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO, GLSUBACC,
  CTE_CIL.BOMTYPE, PRICEOVERRIDDEN, INVLINEID,
  LINETYPE, LINKEDITEM,
  --DT1 (invoice)
  TRANSEQNO, INVNO, REF1, REF2, REF3,
  SESSIONID,
  ACCNO, ISNULL(ACCNO_PURCH, ACCNO), ISNULL(ACCNO_BRANCH, -1),
  DUEDATE, TRANSDATE, POSTTIME, SALESNO, CONTACTNO, CURRENCYNO,
  PERIODID,
  --SKU (stock items)
  ISNULL(SKU_ISACTIVE, 'N'),
  ISNULL(SKU_STATUS, 'L'),
  ISNULL(SKU_BN, 'N'),
  ISNULL(SKU_SN, 'N'),
  ISNULL(SKU_SUPPLIERNO, -1),
  --PLU (stock items)
  PLU_DESCRIPTION,
  ISNULL(STOCKGROUP, -1),
  ISNULL(STOCKGROUP2, -1),
  ISNULL(STOCKPRICEGROUP, -1),
  ISNULL(SIZEID, -1),
  ISNULL(COLOURID, -1),
  --CAC (debtors account)
  ISNULL(ACCISACTIVE, 'N'),
  ISNULL(ACCGROUP, -1),
  ISNULL(ACCGROUP2, -1)
)
/** Define the Fact view **/
SELECT
 --Normalised (lookup)
  (CAST(PPU.BRANCHNO AS VARCHAR) + '.' + ISNULL(RTRIM(BRH.BRANCHNAME), 'No Branch')) AS BRANCHNAME,
  (CAST(PPU.ACCNO AS VARCHAR) + '.' + ISNULL(RTRIM(CAA.NAME), 'No Entered Creditor')) AS ACCNAME_ENTERED,
  (CAST(PPU.ACCNO_SALES AS VARCHAR) + '.' + ISNULL(RTRIM(CAP.NAME), 'No Sales Creditor')) AS ACCNAME_SALES,
  (CAST(PPU.ACCNO_BRANCH AS VARCHAR) + '.' + ISNULL(RTRIM(CAB.NAME), 'No Branch Creditor')) AS ACCNAME_BRANCH,
  (CAST(PPU.SKU_SUPPLIERNO AS VARCHAR) + '.' + ISNULL(RTRIM(CAS.NAME), 'No Supplier')) AS ACCNAME_SUPPLIER,
  (CAST(PPU.ACCGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(CG1.GROUPNAME), 'No Creditor Account Group')) AS ACCGROUP1NAME,
  (CAST(PPU.ACCGROUP2 AS VARCHAR) + '.' + ISNULL(RTRIM(CG2.GROUPNAME), 'No Creditor Account Group 2')) AS ACCGROUP2NAME,
  (CAST(PPU.SALESNO AS VARCHAR) + '.' + ISNULL(RTRIM(SFS.NAME), 'No Ordered By')) AS STAFFNAME,
-- (CAST(PPU.PHYS_STAFF AS VARCHAR) + '.' + ISNULL(RTRIM(SFP.NAME), 'No Staff')) AS STAFFNAMEPHYS,
  (RIGHT('000000000' + CAST(PPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(PPU.GLSUBACC AS VARCHAR), GLSUBACCSIZE)) AS GLCODE,
  (RIGHT('000000000' + CAST(PPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   ISNULL(RTRIM(GLA.NAME), 'No GL Account')) AS GLACCNAME,
  (RIGHT('000000000' + CAST(PPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(PPU.GLSUBACC AS VARCHAR), GLSUBACCSIZE) + '.' +
   ISNULL(ISNULL(RTRIM(GLS.NAME), RTRIM(GLA.NAME)), 'No GL SubAccount')) AS GLSUBACCNAME,
  (CAST(PPU.LOCATION AS VARCHAR) + '.' + ISNULL(RTRIM(LOC.LNAME), 'No Location')) AS LOCATIONNAME,
  (CAST(PPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRNAME), 'No Currency')) AS CURRENCYNAME,
  (CAST(PPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRCODE), 'No Currency')) AS CURRENCYCODE,
  (CAST(PPU.TAXNO AS VARCHAR) + '.' + ISNULL(RTRIM(TAX.NAME), 'No Tax')) AS TAXNAME,
  ISNULL(PES.AGE, -1) AS AGE,
  ISNULL(PES.YEARAGE, -1) AS YEARAGE,
  (CAST(ISNULL(PPU.PERIODID, -1) AS VARCHAR) + '.' + ISNULL(RTRIM(PES.PERIODNAME), 'No Period')) AS PERIODNAME,
  (CAST(PPU.STOCKGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(SG1.GROUPNAME), 'No Stock Group')) AS STOCKGROUP1NAME,
  (CAST(PPU.STOCKGROUP2 AS VARCHAR) + '.' + ISNULL(RTRIM(SG2.GROUPNAME), 'No Stock Group 2')) AS STOCKGROUP2NAME,
  (CAST(PPU.STOCKPRICEGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(SGP.GROUPNAME), 'No Stock Price Group')) AS STOCKGROUPPNAME,
  (RTRIM(PPU.BOMCODE) + '.' + ISNULL(RTRIM(BOM.DESCRIPTION), 'No BOM')) AS BOMNAME,
  (RTRIM(PLU) + '.' + ISNULL(RTRIM(PLU_DESCRIPTION), 'No PLU')) AS PLU_NAME,
  (RTRIM(SKU) + '.' + ISNULL(RTRIM(SKU_DESCRIPTION), 'No SKU')) AS SKU_NAME,
--From Sales Permutations
  --CIL (invoice line)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  PPU.BRANCHNO, LOCATION, TAXNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO,
  PPU.GLSUBACC,
  PPU.BOMTYPE, PRICEOVERRIDDEN, INVLINEID,
  LINETYPE, LINKEDITEM,
  --DT1 (invoice)
  TRANSEQNO, INVNO, REF1, REF2, REF3,
  SESSIONID,
  PPU.ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  DUEDATE, TRANSDATE, POSTTIME, PPU.SALESNO, CONTACTNO, PPU.CURRENCYNO,
  PPU.PERIODID,
  --PLU (stock items)
  PPU.PLU_DESCRIPTION, PPU.STOCKGROUP, PPU.STOCKGROUP2, PPU.STOCKPRICEGROUP, SIZEID, COLOURID,
  --SKU (stock items)
  SKU_ISACTIVE, SKU_STATUS,
  PPU.SKU_BN, PPU.SKU_SN,
  SKU_SUPPLIERNO,
  --CAC (debtors account)
  ACCISACTIVE, PPU.ACCGROUP, PPU.ACCGROUP2,
--Measures
  --CAC
  AVEDAYS,
  --CIL (invoice line)
  ROUND(IQUANTITY, VDP.QTYDECIMALS) AS IQUANTITY,
  ROUND(IVALDISC, 2) AS IVALDISC,
  ROUND(IVAL, 2) AS IVAL,
  ROUND(IVALTAX, 2) AS IVALTAX,
  ROUND(IVALTAXINC, 2) AS IVALTAXINC,
  ROUND(IVALFC, 2) AS IVALFC,
  ROUND(CASE WHEN IVALFC =0 THEN 1 ELSE IVAL/IVALFC END, 4) AS IEXCHRATE,
  ROUND(CASE WHEN IQUANTITY =0 THEN IVAL ELSE IVAL/ABS(IQUANTITY) END, VDP.SELLPRDECIMALS) AS IUNITPRICE,
  ROUND(CASE WHEN IQUANTITY =0 THEN IVAL ELSE IVALTAXINC/ABS(IQUANTITY) END, VDP.SELLPRDECIMALS) AS IUNITPRICETAXINC,
  ROUND(CASE WHEN IQUANTITY =0 THEN IVALFC ELSE IVALFC/ABS(IQUANTITY) END, VDP.SELLPRDECIMALS) AS IUNITPRICEFC,
--Custom
--Number of rows
  FREQUENCY
--Join structure
FROM CTE_PPU PPU
  LEFT OUTER JOIN dbo.BRANCHES BRH WITH (NOLOCK) ON PPU.BRANCHNO = BRH.BRANCHNO
  LEFT OUTER JOIN dbo.CR_ACCS CAA WITH (NOLOCK) ON PPU.ACCNO = CAA.ACCNO
  LEFT OUTER JOIN dbo.CR_ACCS CAP WITH (NOLOCK) ON PPU.ACCNO_SALES = CAP.ACCNO
  LEFT OUTER JOIN dbo.CR_ACCS CAB WITH (NOLOCK) ON PPU.ACCNO_BRANCH = CAB.ACCNO
  LEFT OUTER JOIN dbo.CR_ACCS CAS WITH (NOLOCK) ON PPU.SKU_SUPPLIERNO = CAS.ACCNO
  LEFT OUTER JOIN dbo.CR_ACCGROUPS CG1 WITH (NOLOCK) ON PPU.ACCGROUP = CG1.ACCGROUP
  LEFT OUTER JOIN dbo.CR_ACCGROUP2S CG2 WITH (NOLOCK) ON PPU.ACCGROUP2 = CG2.ACCGROUP
  LEFT OUTER JOIN dbo.STAFF SFS WITH (NOLOCK) ON PPU.SALESNO = SFS.STAFFNO
  LEFT OUTER JOIN dbo.GLACCS GLA WITH (NOLOCK) ON PPU.GLACCNO = GLA.ACCNO
  LEFT OUTER JOIN dbo.GLSUBACCS GLS WITH (NOLOCK) ON PPU.GLACCNO = GLS.ACCNO
                                                          AND PPU.GLSUBACC = GLS.SUBACCNO
  LEFT OUTER JOIN dbo.STOCK_LOCATIONS LOC WITH (NOLOCK) ON PPU.LOCATION = LOC.LOCNO
  LEFT OUTER JOIN dbo.CURRENCIES CUY WITH (NOLOCK) ON PPU.CURRENCYNO = CUY.CURRENCYNO
  LEFT OUTER JOIN dbo.TAX_RATES TAX WITH (NOLOCK) ON PPU.TAXNO = TAX.SEQNO
  LEFT OUTER JOIN dbo.PERIOD_STATUS PES WITH (NOLOCK) ON PPU.PERIODID = PES.SEQNO
  LEFT OUTER JOIN dbo.STOCK_GROUPS SG1 WITH (NOLOCK) ON PPU.STOCKGROUP = SG1.GROUPNO
  LEFT OUTER JOIN dbo.STOCK_GROUP2S SG2 WITH (NOLOCK) ON PPU.STOCKGROUP2 = SG2.GROUPNO
  LEFT OUTER JOIN dbo.STOCK_PRICEGROUPS SGP WITH (NOLOCK) ON PPU.STOCKPRICEGROUP = SGP.GROUPNO
  LEFT OUTER JOIN dbo.BILLOMAT_HDR BOM WITH (NOLOCK) ON PPU.BOMCODE = BOM.BILLCODE
  LEFT OUTER JOIN CTE_PRECISIONS VDP WITH (NOLOCK) ON VDP.SEQNO=1


View: VW_FACT_PURCHORD
NameVW_FACT_PURCHORD
Note
Code-- Purchase fact view for creditors purchase orders
CREATE VIEW [dbo].[VW_FACT_PURCHORD]
-- Indexed view
WITH SCHEMABINDING
AS

/**
setup DTEs in such a way as they can be extended e.g with custom or extra fields.
 Hopefully the Dimensions and Measures tabs could be programatically recognised.
 Columns above Dimensions are only used internally for joins using the DTEs
   but are still converted to common aliases as part of the DTE definition.
**/
WITH
-- STOCK_ITEMS - Price Lookup Item --------------------------------------------------------------------
CTE_PLU
  (PLU_STOCKCODE,
  -- Internal
  SALES_GL_CODE, SALES_GLSUBCODE, PURCH_GL_CODE, PURCH_GLSUBCODE, COSCOST,
  -- Dimensions (alias)
  STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, SIZEID, COLOURID,
  -- Measures (alias)
  -- Custom (alias)
  CTE)
AS
  (SELECT STOCKCODE,
  -- Internal (database)
  SALES_GL_CODE, SALES_GLSUBCODE, PURCH_GL_CODE, PURCH_GLSUBCODE,
  CASE (SELECT CAST(FIELDVALUE AS INTEGER)
        FROM dbo.PROFILE_VALUES
        WHERE FIELDNAME = 'STOCKCOSTMETHOD' AND PROFILEID = -1)
       WHEN 2 THEN ISNULL(STDCOST, 0)
       WHEN 1 THEN ISNULL(LATESTCOST, 0)
       ELSE ISNULL(AVECOST, 0)
  END AS COSCOST,
  -- Dimensions (database)
  STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, X_SIZEID, X_COLOURID,
  -- Measures (database)
  -- Custom (database)
  'PLU'
  FROM dbo.STOCK_ITEMS PLU WITH (NOLOCK)
  )
,
-- STOCK_ITEMS - Stock Keeping Item --------------------------------------------------------------------
CTE_SKU
  (SKU_STOCKCODE,
  -- Internal
  -- Dimensions (alias)
  SKU_DESCRIPTION, SKU_ISACTIVE, SKU_STATUS, SKU_BN, SKU_SN, SKU_SUPPLIERNO,
  -- Measures (alias)
  -- Custom (alias)
  CTE)
AS
  (SELECT STOCKCODE,
  -- Internal (database)
  -- Dimensions (database)
  DESCRIPTION, ISACTIVE, STATUS, HAS_BN, HAS_SN, SUPPLIERNO,
  -- Measures (database)
  -- Custom (database)
  'SKU'
  FROM dbo.STOCK_ITEMS SKU WITH (NOLOCK)
  )
,
-- CR_ACCS ------------------------------------------------------------------------
CTE_CAC (CAC_ACCNO,
  -- Internal (alias)
  CAC_HEAD_ACCNO,
  -- Dimensions (alias)
  ACCISACTIVE, ACCGROUP, ACCGROUP2,
  -- Measures (alias)
  AVEDAYS,
  -- Custom (alias)
  CTE) AS (SELECT ACCNO,
  -- Internal (database)
  HEAD_ACCNO,
  -- Dimensions (database)
  ISACTIVE, ACCGROUP, ACCGROUP2,
  -- Measures (database)
  AVE_DAYS_TO_PAY,
  -- Custom (database)
  'CAC'
  FROM dbo.CR_ACCS DAC WITH (NOLOCK)
),
-- CONTACTS ------------------------------------------------------------------------
CTE_CON (CON_SEQNO,
  -- Dimensions (alias)
  CONT_ISACTIVE,
  -- Measures (alias)
  CONT_NAME,
  -- Custom (alias)
  CTE) AS (SELECT SEQNO,
  -- Dimensions (database)
  ISACTIVE,
  -- Measures (database)
  FULLNAME,
  -- Custom (database)
  'CON'
  FROM dbo.CONTACTS CON WITH (NOLOCK)
),
-- PURCHORD_HDR ------------------------------------------------------------------------
CTE_PHD (PO,
  -- Dimensions (alias)
  ACCNO, STATUS,
  ISCONFIRMED,
  DUEDATE, ORDERDATE, CREATE_DATE, ACTIVATION_DATE, FINALISATION_DATE,
  SALESNO, CONTACTNO, CURRENCYNO,
  REFERENCE,
  PHYS_BRANCH, PHYS_STAFF,
---- PERIODID,
  -- Measures (alias)
  WORKDAYS,
  -- Custom (alias)
  CTE) AS (SELECT PHD.SEQNO,
  -- Dimensions (database)
  ACCNO, STATUS,
  CASE WHEN STATUS =3 THEN 'N' ELSE 'Y' END AS ISCONFIRMED,
  DUEDATE, ORDERDATE, CREATE_DATE, ACTIVATION_DATE, FINALISATION_DATE,
  PHD.SALESNO, CONTACT_SEQNO, CURRENCYNO,
  ISNULL(REFERENCE, ''),
  ISNULL(PHT.PHYS_BRANCH, 0) AS PHYS_BRANCH, ISNULL(PHT.PHYS_STAFF, PHD.SALESNO) AS PHYS_STAFF,
---- ISNULL(dbo.FN_GET_PERIOD_SEQNO(ORDERDATE), -1) AS PERIODID,
  -- Measures (database)
  ISNULL(dbo.FN_GET_MANREP_DAYS(ACTIVATION_DATE, FINALISATION_DATE), 0) AS WORKDAYS,
  -- Custom (database)
  'SHD'
  FROM dbo.PURCHORD_HDR PHD WITH (NOLOCK)
  LEFT OUTER JOIN
  ( select top 1 PO_HDR_SEQ, PHYS_BRANCH, PHYS_STAFF from dbo.PURCHORD_HIST PHT WITH (NOLOCK)
    where PHT.EVENT_TYPE = 'N' AND PHT.HISTORYNO =0) PHT ON PHT.PO_HDR_SEQ = PHD.SEQNO
),
-- PURCHORD_LINES ----------------------------------------------------------------------
CTE_POL (
  -- Dimensions (alias)
  PLU, PLU_DESCRIPTION, SKU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO, GLSUBACC,
  BOMTYPE, PRICEOVERRIDDEN, ORDLINEID, PORDER,
  LINETYPE, LINKEDITEM,
  -- Measures (alias)
  OQUANTITY, OVALDISC, OVAL, OVALTAX, OVALTAXINC, OVALFC,
  OUNSUPPLIED, OUNINVOICED,
  OVALPENDING,
  -- Custom (alias)
  CTE) AS (SELECT
  -- Dimensions (database)
  STOCKCODE, POL.DESCRIPTION,
  (CASE WHEN(LINKED_STOCKCODE IS NULL OR LINKED_STOCKCODE = '')
        THEN STOCKCODE
        ELSE LINKED_STOCKCODE
   END) AS LINKED_STOCKCODE,
  ISNULL(KITCODE, ' '),
  ISNULL(BRANCHNO, 0), ISNULL(LOCATION, 1), TAXRATE_NO,
  ISNULL(BATCHCODE, ' '),
  ISNULL(JOBCODE, ' '),
  ANALYSIS,
  SUBCODE,
  BOMTYPE, PRICE_OVERRIDDEN, POLINEID, HDR_SEQNO,
  ISNULL(LINETYPE, -1), ISNULL(LINKEDSTATUS, 'N'),
  -- Measures (database)
  CORRECTED_QUANT AS OQUANTITY,
  (CORRECTED_QUANT*UNITPRICE*DISCOUNT/100) AS OVALDISC,
  LINETOTAL AS OVAL,
  LINETAX_OVERRIDE AS OVALTAX,
  (LINETOTAL+LINETAX_OVERRIDE) AS OVALTAXINC,
  LINETOTAL AS OVALFC,
  BKORD_QUANT AS OUNSUPPLIED,
 (SUP_QUANT-INV_QUANT) AS OUNINVOICED,
  ((SUP_QUANT-INV_QUANT)*UNITPRICE*DISCOUNT/100) AS OVALPENDING,
  -- Custom (database)
  'POL'
 FROM dbo.PURCHORD_LINES POL WITH (NOLOCK)
 WHERE LINETYPE <> 4 AND NOT (LINETYPE = -1 AND STOCKCODE = ' ')
),
-- Essentials Precisions --------------------------------------------------------------------
CTE_PROFILES AS (
    SELECT PF.FIELDNAME,
           CASE WHEN(PV.FIELDVALUE IS NULL OR PV.FIELDVALUE = '')
                THEN isnull(PF.DEFAULTVALUE, 0) ELSE PV.FIELDVALUE
           END AS FIELDVALUE
    FROM dbo.PROFILE_FIELDS PF
    LEFT OUTER JOIN dbo.PROFILE_VALUES PV ON (PF.FIELDNAME = PV.FIELDNAME)
    WHERE PF.FIELDLEVEL=1
),
CTE_PRECISIONS AS (
    SELECT SEQNO,
           CAST(BILLCOSTDECIMALS AS INT) AS BILLCOSTDECIMALS,
           CAST(BILLQTYDECIMALS AS INT) AS BILLQTYDECIMALS,
           CAST(COSTPRDECIMALS AS INT) AS COSTPRDECIMALS,
           CAST(DISCOUNTDECIMALS AS INT) AS DISCOUNTDECIMALS,
           CAST(QTYDECIMALS AS INT) AS QTYDECIMALS,
           CAST(SELLPRDECIMALS AS INT) AS SELLPRDECIMALS,
           CAST(GLBRANCHSIZE AS INT) AS GLBRANCHSIZE,
           CAST(GLACCNOSIZE AS INT) AS GLACCNOSIZE,
           CAST(GLSUBACCSIZE AS INT) AS GLSUBACCSIZE
    FROM (SELECT 'SEQNO' AS FIELDNAME, '1' AS FIELDVALUE
          UNION
          SELECT FIELDNAME, FIELDVALUE FROM CTE_PROFILES
         ) AS PivotData
         PIVOT (MAX(FIELDVALUE)
                FOR FIELDNAME
                 IN ([SEQNO],
                     [BILLCOSTDECIMALS],
                     [BILLQTYDECIMALS],
                     [COSTPRDECIMALS],
                     [DISCOUNTDECIMALS],
                     [QTYDECIMALS],
                     [SELLPRDECIMALS],
                     [GLBRANCHSIZE],
                     [GLACCNOSIZE],
                     [GLSUBACCSIZE])
               ) AS PivotTable
),
-- Permutations --------------------------------------------------------------------
CTE_PPU (
 --Dimensions (alias)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO,
  GLSUBACC,
  BOMTYPE, PRICEOVERRIDDEN, ORDLINEID, PORDER,
  LINETYPE, LINKEDITEM,
  ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  ORDSTATUS, ISCONFIRMED,
  DUEDATE, ORDERDATE, CREATE_DATE, ACTIVATION_DATE, FINALISATION_DATE,
  SALESNO, CONTACTNO, CURRENCYNO,
  REFERENCE,
  PHYS_BRANCH, PHYS_STAFF,
  SKU_ISACTIVE, SKU_STATUS, SKU_BN, SKU_SN, SKU_SUPPLIERNO,
  PLU_DESCRIPTION, STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, SIZEID, COLOURID,
  ACCISACTIVE, ACCGROUP, ACCGROUP2,
 --Measures (alias)
  AVEDAYS,
  OQUANTITY, OCOST, OVALDISC, OVAL, OVALTAX, OVALTAXINC, OVALFC,
  OUNSUPPLIED, OUNINVOICED,
  OCOSTPENDING, OVALPENDING,
  WORKDAYS,
 -- Custom (alias)
  CTE, FREQUENCY) AS (SELECT
 -- Dimensions (database)
  --POL (purchase order lines)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO,
  BATCHCODE,
  JOBCODE,
  CASE WHEN ISNULL(GLACCNO, 0) > 0
       THEN GLACCNO
       ELSE ISNULL(CTE_PLU.PURCH_GL_CODE, (SELECT DEF_PURCH FROM dbo.GL_CONTROL))
  END AS GLACCNO,
  GLSUBACC,
  BOMTYPE, PRICEOVERRIDDEN, ORDLINEID, PORDER,
  LINETYPE, LINKEDITEM,
  --PHD (purchase order header)
  ISNULL((CASE WHEN CTE_CAC.CAC_HEAD_ACCNO >0 THEN CTE_CAC.CAC_HEAD_ACCNO ELSE ACCNO END), ACCNO) AS ACCNO,
  ACCNO AS ACCNO_SALES,
  ISNULL((CASE WHEN CTE_CAC.CAC_HEAD_ACCNO >0 THEN ACCNO ELSE -1 END), -1) AS ACCNO_BRANCH,
  CTE_PHD.STATUS, ISCONFIRMED,
  DUEDATE, ORDERDATE, CREATE_DATE, ACTIVATION_DATE, FINALISATION_DATE,
  SALESNO, CONTACTNO, CURRENCYNO,
  REFERENCE,
  PHYS_BRANCH, PHYS_STAFF,
---- PERIODID,
  --SKU (stock items)
  ISNULL(SKU_ISACTIVE, 'N') AS SKU_ISACTIVE,
  ISNULL(SKU_STATUS, 'L') AS SKU_STATUS,
  ISNULL(SKU_BN, 'N') AS SKU_BN,
  ISNULL(SKU_SN, 'N') AS SKU_SN,
  ISNULL(SKU_SUPPLIERNO, -1) AS SKU_SUPPLIERNO,
  --PLU (stock items)
  PLU_DESCRIPTION,
  ISNULL(STOCKGROUP, -1) AS STOCKGROUP,
  ISNULL(STOCKGROUP2, -1) AS STOCKGROUP2,
  ISNULL(STOCKPRICEGROUP, -1) AS STOCKPRICEGROUP,
  ISNULL(SIZEID, -1) AS SIZEID,
  ISNULL(COLOURID, -1) AS COLOURID,
  --DAC (debtors account)
  ISNULL(ACCISACTIVE, 'N') AS ACCISACTIVE,
  ISNULL(ACCGROUP, -1) AS ACCGROUP, ISNULL(ACCGROUP2, -1) AS ACCGROUP2,
--Measures
  --DAC
  MIN(ISNULL(AVEDAYS, 0)) AS AVEDAYS,
  --SOL (invoice line)
  SUM(ISNULL(OQUANTITY, 0)) AS OQUANTITY,
  SUM(ISNULL(OQUANTITY, 0)*ISNULL(CTE_PLU.COSCOST, 0)) AS OCOST,
  SUM(ISNULL(OVALDISC, 0)) AS OVALDISC,
  SUM(ISNULL(OVAL, 0)) AS OVAL,
  SUM(ISNULL(OVALTAX, 0)) AS OVALTAX,
  SUM(ISNULL(OVALTAXINC, 0)) AS OVALTAXINC,
  SUM(ISNULL(OVALFC, 0)) AS OVALFC,
  SUM(ISNULL(OUNSUPPLIED, 0)) AS OUNSUPPLIED,
  SUM(ISNULL(OUNINVOICED, 0)) AS OUNINVOICED,
  SUM(ISNULL(OUNSUPPLIED, 0)*ISNULL(CTE_PLU.COSCOST, 0)) AS OCOSTPENDING,
  SUM(ISNULL(OVALPENDING, 0)) AS OVALPENDING,
  SUM(ISNULL(WORKDAYS, 0)) AS WORKDAYS,
--Custom
--Number of rows (and code marker)
  'PPU', COUNT(*) AS FREQUENCY
-- Join structure
FROM CTE_POL
LEFT OUTER JOIN CTE_PHD ON CTE_PHD.PO = CTE_POL.PORDER
LEFT OUTER JOIN CTE_CAC ON CTE_CAC.CAC_ACCNO = CTE_PHD.ACCNO
LEFT OUTER JOIN CTE_CON ON CTE_CON.CON_SEQNO = CTE_PHD.CONTACTNO
LEFT OUTER JOIN CTE_PLU ON CTE_PLU.PLU_STOCKCODE = CTE_POL.PLU
LEFT OUTER JOIN CTE_SKU ON CTE_SKU.SKU_STOCKCODE = CTE_POL.SKU
GROUP BY
  --SOL (sales order line)
  PLU, PLU_DESCRIPTION, SKU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO, GLSUBACC,
  BOMTYPE, PRICEOVERRIDDEN, ORDLINEID, PORDER,
  LINETYPE, LINKEDITEM,
  --SHD (sales order header)
  CASE WHEN CTE_CAC.CAC_HEAD_ACCNO >0 THEN CTE_CAC.CAC_HEAD_ACCNO ELSE ACCNO END,
  ACCNO,
  CASE WHEN CTE_CAC.CAC_HEAD_ACCNO >0 THEN ACCNO ELSE -1 END,
  CTE_PHD.STATUS, ISCONFIRMED,
  DUEDATE, ORDERDATE, CREATE_DATE, ACTIVATION_DATE, FINALISATION_DATE,
  SALESNO, CONTACTNO, CURRENCYNO,
  REFERENCE,
  PHYS_BRANCH, PHYS_STAFF,
---- PERIODID,
  --SKU (stock items)
  SKU_DESCRIPTION, SKU_ISACTIVE, SKU_STATUS, SKU_BN, SKU_SN, STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP,
  SKU_SUPPLIERNO, SIZEID, COLOURID, PURCH_GL_CODE, PURCH_GLSUBCODE,
  --DAC (debtors account)
  ACCISACTIVE, ACCGROUP, ACCGROUP2
)
/** Define the Fact view **/
SELECT
 --Normalised (lookup)
  (CAST(PPU.BRANCHNO AS VARCHAR) + '.' + ISNULL(RTRIM(BRH.BRANCHNAME), 'No Branch')) AS BRANCHNAME,
  (CAST(PPU.PHYS_BRANCH AS VARCHAR) + '.' + ISNULL(RTRIM(BRP.BRANCHNAME), 'No Branch')) AS BRANCHNAMEPHYS,
  (CAST(PPU.ACCNO AS VARCHAR) + '.' + ISNULL(RTRIM(CAA.NAME), 'No Entered Creditor')) AS ACCNAME_ENTERED,
  (CAST(PPU.ACCNO_SALES AS VARCHAR) + '.' + ISNULL(RTRIM(CAP.NAME), 'No Sales Creditor')) AS ACCNAME_SALES,
  (CAST(PPU.ACCNO_BRANCH AS VARCHAR) + '.' + ISNULL(RTRIM(CAB.NAME), 'No Branch Creditor')) AS ACCNAME_BRANCH,
  (CAST(PPU.SKU_SUPPLIERNO AS VARCHAR) + '.' + ISNULL(RTRIM(CAS.NAME), 'No Supplier')) AS ACCNAME_SUPPLIER,
  (CAST(PPU.ACCGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(CG1.GROUPNAME), 'No Creditor Account Group')) AS ACCGROUP1NAME,
  (CAST(PPU.ACCGROUP2 AS VARCHAR) + '.' + ISNULL(RTRIM(CG2.GROUPNAME), 'No Creditor Account Group 2')) AS ACCGROUP2NAME,
  (CAST(PPU.SALESNO AS VARCHAR) + '.' + ISNULL(RTRIM(SFS.NAME), 'No Ordered By')) AS STAFFNAME,
  (CAST(PPU.PHYS_STAFF AS VARCHAR) + '.' + ISNULL(RTRIM(SFP.NAME), 'No Staff')) AS STAFFNAMEPHYS,
  (RIGHT('000000000' + CAST(PPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(PPU.GLSUBACC AS VARCHAR), GLSUBACCSIZE)) AS GLCODE,
  (RIGHT('000000000' + CAST(PPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   ISNULL(RTRIM(GLA.NAME), 'No GL Account')) AS GLACCNAME,
  (RIGHT('000000000' + CAST(PPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(PPU.GLSUBACC AS VARCHAR), GLSUBACCSIZE) + '.' +
   ISNULL(ISNULL(RTRIM(GLS.NAME), RTRIM(GLA.NAME)), 'No GL SubAccount')) AS GLSUBACCNAME,
  (CAST(PPU.LOCATION AS VARCHAR) + '.' + ISNULL(RTRIM(LOC.LNAME), 'No Location')) AS LOCATIONNAME,
  (CAST(PPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRNAME), 'No Currency')) AS CURRENCYNAME,
  (CAST(PPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRCODE), 'No Currency')) AS CURRENCYCODE,
---- (CAST(PPU.TAXNO AS VARCHAR) + '.' + ISNULL(RTRIM(TAX.NAME), 'No Tax')) AS TAXNAME,
---- PES.AGE AS AGE,
---- PES.YEARAGE AS YEARAGE,
---- (PPU.PERIODID + '.' + ISNULL(RTRIM(PES.PERIODNAME), 'No Period')) AS PERIODNAME,
  (CAST(PPU.STOCKGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(SG1.GROUPNAME), 'No Stock Group')) AS STOCKGROUP1NAME,
  (CAST(PPU.STOCKGROUP2 AS VARCHAR) + '.' + ISNULL(RTRIM(SG2.GROUPNAME), 'No Stock Group 2')) AS STOCKGROUP2NAME,
  (CAST(PPU.STOCKPRICEGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(SGP.GROUPNAME), 'No Stock Price Group')) AS STOCKGROUPPNAME,
  (RTRIM(PPU.BOMCODE) + '.' + ISNULL(RTRIM(BOM.DESCRIPTION), 'No BOM')) AS BOMNAME,
  (RTRIM(PLU) + '.' + ISNULL(RTRIM(PLU_DESCRIPTION), 'No PLU')) AS PLU_NAME,
  (RTRIM(SKU) + '.' + ISNULL(RTRIM(SKU_DESCRIPTION), 'No SKU')) AS SKU_NAME,



--From Sales Permutations
  --DIL (invoice line)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  PPU.BRANCHNO, LOCATION, TAXNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO,
  PPU.GLSUBACC,
  PPU.BOMTYPE, PRICEOVERRIDDEN, ORDLINEID, PORDER,
  LINETYPE, LINKEDITEM,
  PPU.ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  ORDSTATUS, ISCONFIRMED,
  DUEDATE, ORDERDATE,
--!!! OMIT FOR NOW !!! CREATE_DATE, ACTIVATION_DATE, FINALISATION_DATE,
  PPU.SALESNO, CONTACTNO, PPU.CURRENCYNO,
  PPU.REFERENCE,
  PHYS_BRANCH, PHYS_STAFF,
---- CTE_SPU.PERIODID,
  --PLU (stock items)
  PPU.PLU_DESCRIPTION, PPU.STOCKGROUP, PPU.STOCKGROUP2, PPU.STOCKPRICEGROUP, SIZEID, COLOURID,
  --SKU (stock items)
  SKU_ISACTIVE, SKU_STATUS,
  PPU.SKU_BN, PPU.SKU_SN,
  SKU_SUPPLIERNO,
  --DAC (debtors account)
  ACCISACTIVE, PPU.ACCGROUP, PPU.ACCGROUP2,
--Measures
  --DAC
  AVEDAYS,
  --DIL (invoice line)
  ROUND(OQUANTITY, VDP.QTYDECIMALS) AS OQUANTITY,
  ROUND(OCOST, 2) AS OCOST,
  ROUND(OVALDISC, 2) AS OVALDISC,
  ROUND(OVAL, 2) AS OVAL,
  ROUND(OVALTAX, 2) AS OVALTAX,
  ROUND(OVALTAXINC, 2) AS OVALTAXINC,
  ROUND(OVALFC, 2) AS OVALFC,
  ROUND((OVAL-OCOST), 2) AS OPROFIT,
  ROUND(CASE WHEN OCOST <> 0 THEN (((OVAL-OCOST)/OCOST)*100) ELSE 100 END, 2) AS OMARKUPPC,
  ROUND(CASE WHEN OVAL <> 0 THEN (((OVAL-OCOST)/OVAL)*100) ELSE 100 END, 2) AS OMARGINPC,
  ROUND(CASE WHEN BUYRATE =0 THEN 1 ELSE BUYRATE END, 4) AS OEXCHRATE,
  ROUND(CASE WHEN OQUANTITY =0 THEN OCOST ELSE OCOST/ABS(OQUANTITY) END, COSTPRDECIMALS) AS OUNITCOST,
  ROUND(CASE WHEN OQUANTITY =0
             THEN OVAL/(case when isnull(BUYRATE, 0)=0 then 1 else BUYRATE end)
             ELSE (OVAL/(case when isnull(BUYRATE, 0)=0 then 1 else BUYRATE end))/ABS(OQUANTITY)
        END, VDP.SELLPRDECIMALS) AS OUNITPRICE,
  ROUND(CASE WHEN OQUANTITY =0
             THEN OVALTAXINC/(case when isnull(BUYRATE, 0)=0 then 1 else BUYRATE end)
             ELSE (OVALTAXINC/(case when isnull(BUYRATE, 0)=0 then 1 else BUYRATE end))/ABS(OQUANTITY)
        END, VDP.SELLPRDECIMALS) AS OUNITPRICETAXINC,
  ROUND(CASE WHEN OQUANTITY =0 THEN OVALFC ELSE OVALFC/ABS(OQUANTITY) END, VDP.SELLPRDECIMALS) AS OUNITPRICEFC,
  ROUND(OUNSUPPLIED, VDP.QTYDECIMALS) AS OUNSUPPLIED,
  ROUND(OUNINVOICED, VDP.QTYDECIMALS) AS OUNINVOICED,
  ROUND(OCOSTPENDING, 2) AS OCOSTPENDING,
  ROUND(OVALPENDING, 2) AS OVALPENDING,
  WORKDAYS,
--Custom
--Number of rows
  FREQUENCY
--Join structure
FROM CTE_PPU PPU
  LEFT OUTER JOIN dbo.BRANCHES BRH WITH (NOLOCK) ON PPU.BRANCHNO = BRH.BRANCHNO
  LEFT OUTER JOIN dbo.BRANCHES BRP WITH (NOLOCK) ON PPU.PHYS_BRANCH = BRP.BRANCHNO
  LEFT OUTER JOIN dbo.CR_ACCS CAA WITH (NOLOCK) ON PPU.ACCNO = CAA.ACCNO
  LEFT OUTER JOIN dbo.CR_ACCS CAP WITH (NOLOCK) ON PPU.ACCNO_SALES = CAP.ACCNO
  LEFT OUTER JOIN dbo.CR_ACCS CAB WITH (NOLOCK) ON PPU.ACCNO_BRANCH = CAB.ACCNO
  LEFT OUTER JOIN dbo.CR_ACCS CAS WITH (NOLOCK) ON PPU.SKU_SUPPLIERNO = CAS.ACCNO
  LEFT OUTER JOIN dbo.CR_ACCGROUPS CG1 WITH (NOLOCK) ON PPU.ACCGROUP = CG1.ACCGROUP
  LEFT OUTER JOIN dbo.CR_ACCGROUP2S CG2 WITH (NOLOCK) ON PPU.ACCGROUP2 = CG2.ACCGROUP
  LEFT OUTER JOIN dbo.STAFF SFS WITH (NOLOCK) ON PPU.SALESNO = SFS.STAFFNO
  LEFT OUTER JOIN dbo.STAFF SFP WITH (NOLOCK) ON PPU.PHYS_STAFF = SFP.STAFFNO
  LEFT OUTER JOIN dbo.GLACCS GLA WITH (NOLOCK) ON PPU.GLACCNO = GLA.ACCNO
  LEFT OUTER JOIN dbo.GLSUBACCS GLS WITH (NOLOCK) ON PPU.GLACCNO = GLS.ACCNO
                                                          AND PPU.GLSUBACC = GLS.SUBACCNO
  LEFT OUTER JOIN dbo.STOCK_LOCATIONS LOC WITH (NOLOCK) ON PPU.LOCATION = LOC.LOCNO
  LEFT OUTER JOIN dbo.CURRENCIES CUY WITH (NOLOCK) ON PPU.CURRENCYNO = CUY.CURRENCYNO
  LEFT OUTER JOIN dbo.TAX_RATES TAX WITH (NOLOCK) ON PPU.TAXNO = TAX.SEQNO
---- LEFT OUTER JOIN dbo.PERIOD_STATUS PES WITH (NOLOCK) ON SPU.PERIODID = PES.SEQNO
  LEFT OUTER JOIN dbo.STOCK_GROUPS SG1 WITH (NOLOCK) ON PPU.STOCKGROUP = SG1.GROUPNO
  LEFT OUTER JOIN dbo.STOCK_GROUP2S SG2 WITH (NOLOCK) ON PPU.STOCKGROUP2 = SG2.GROUPNO
  LEFT OUTER JOIN dbo.STOCK_PRICEGROUPS SGP WITH (NOLOCK) ON PPU.STOCKPRICEGROUP = SGP.GROUPNO
  LEFT OUTER JOIN dbo.BILLOMAT_HDR BOM WITH (NOLOCK) ON PPU.BOMCODE = BOM.BILLCODE
  LEFT OUTER JOIN CTE_PRECISIONS VDP WITH (NOLOCK) ON VDP.SEQNO=1


View: VW_FACT_PURCHTRANS
NameVW_FACT_PURCHTRANS
Note
Code-- Sales fact view for debtors invoices
CREATE VIEW [dbo].[VW_FACT_PURCHTRANS]
-- Indexed view
WITH SCHEMABINDING
AS
/** Purchases fact view for creditors CR_TRANS driven **/

/**
setup CTEs in such a way as they can be extended e.g with custom or extra fields.
 Hopefully the Dimensions and Measures tabs could be programatically recognised.
 Columns above Dimensions are only used internally for joins using the DTEs
   but are still converted to common aliases as part of the DTE definition.
**/
WITH
-- CR_ACCS ------------------------------------------------------------------------
CTE_CAC
  (CAC_ACCNO,
  -- Internal (alias)
  CAC_HEAD_ACCNO,
  -- Dimensions (alias)
  ACCISACTIVE, ACCGROUP, ACCGROUP2,
  -- Measures (alias)
  AVEDAYS,
  -- Custom (alias)
  CTE)
AS
  (SELECT ACCNO,
  -- Internal (database)
  HEAD_ACCNO,
  -- Dimensions (database)
  ISACTIVE, ACCGROUP, ACCGROUP2,
  -- Measures (database)
  AVE_DAYS_TO_PAY,
  -- Custom (database)
  'CAC'
  FROM dbo.CR_ACCS CAC WITH (NOLOCK)
  )
,
-- CONTACTS ------------------------------------------------------------------------
CTE_CON (CON_SEQNO,
  -- Dimensions (alias)
  CONT_ISACTIVE,
  -- Measures (alias)
  CONT_NAME,
  -- Custom (alias)
  CTE) AS (SELECT SEQNO,
  -- Dimensions (database)
  ISACTIVE,
  -- Measures (database)
  FULLNAME,
  -- Custom (database)
  'CON'
  FROM dbo.CONTACTS CON WITH (NOLOCK)
),
-- CR_TRANS (invoices) ------------------------------------------------------------------------
CTE_CTR (
  -- Dimensions (alias)
  TRANSEQNO, TRANSTYPE, INVNO,
  REF1, REF2, REF3, PORDER,
  BRANCHNO,
  SESSIONID,
  ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  DUEDATE, TRANSDATE,
  POSTTIME,
  SALESNO, CONTACTNO, CURRENCYNO,
  PERIODID,
  PTNO,
  TAXNO,
  GLACCNO, GLSUBACC,
  -- Measures (alias)
  IQUANTITY,
  IVALDISC,
  IVAL,
  IVALTAX,
  IVALTAXINC,
  IVALUNALLOC,
  IVALFC,
  IVALUNALLOCFC,
  INUMLINES,
  -- Custom (alias)
  CTE) AS (SELECT
  -- Dimensions (database)
  SEQNO, TRANSTYPE, ISNULL(INVNO, '') AS INVNO,
  ISNULL(REF1, '') AS REF1, ISNULL(REF2, '') AS REF2, ISNULL(REF3, '') AS REF3, ISNULL(PO_SEQNO, -1) AS PORDER,
  ISNULL(BRANCHNO, -1) AS BRANCHNO,
  ISNULL(SESSION_ID, -1) AS SESSIONID,
  ACCNO,
  ISNULL(PURCH_ACCNO, ACCNO) AS ACCNO_SALES,
  ISNULL(BRANCH_ACCNO, -1) AS ACCNO_BRANCH,
  ISNULL(DUEDATE, ISNULL(TRANSDATE, GETDATE())) AS DUEDATE, ISNULL(TRANSDATE, GETDATE()) AS TRANSDATE,
  ISNULL(POSTTIME, GETDATE()) AS POSTTIME,
  ISNULL(SALESNO, -1) AS SALESNO, ISNULL(CONTACT_SEQNO, -1) AS CONTACT_SEQNO, ISNULL(CURRENCYNO, -1) AS CURRENCYNO,
  ISNULL(PERIOD_SEQNO, -1) AS PERIOD_SEQNO,
  ISNULL(PTNO, CASE WHEN TRANSTYPE <> 4
                   THEN -1
                   ELSE ISNULL((SELECT PTNO FROM dbo.PAYMENT_TYPES WHERE SHORTNAME LIKE REF1), -1)
              END) AS PTNO,
  ISNULL(TAXRATE_NO, -1) AS TAXNO,
  CASE WHEN ISNULL(GLCODE, 0) > 0
       THEN GLCODE
       ELSE ISNULL((SELECT DEBTORS FROM dbo.GL_CONTROL), 0)
  END AS GLACCNO,
  CASE WHEN ISNULL(GLSUBCODE, -1) > 0
       THEN GLSUBCODE
       ELSE ISNULL((SELECT SUB_DEBTORS FROM dbo.GL_CONTROL), 0)
  END AS GLSUBACC,
  -- Measures (database)
  IQUANTITY,
  IVALDISC,
  (SUBTOTAL/EXCHRATE) AS IVAL,
  (TAXTOTAL/EXCHRATE) AS IVALTAX,
  (AMOUNT/EXCHRATE) AS IVALTAXINC,
  ((AMOUNT-ALLOCATEDBAL)/EXCHRATE) AS IVALUNALLOC,
  SUBTOTAL AS IVALFC,
  (AMOUNT-ALLOCATEDBAL) AS IVALUNALLOCFC,
  INUMLINES,
  -- Custom (database)
  'CTR'
  FROM dbo.CR_TRANS CTR WITH (NOLOCK)
  LEFT OUTER JOIN (SELECT HDR_SEQNO, SUM(QUANTITY) AS IQUANTITY,
  SUM((QUANTITY*UNITPRICE*DISCOUNT/100)/(case when isnull(EXCHRATE, 0)=0 then 1 else EXCHRATE end)) AS IVALDISC,
  COUNT(HDR_SEQNO) AS INUMLINES
  FROM dbo.CR_INVLINES GROUP BY HDR_SEQNO) CIL ON CIL.HDR_SEQNO = CTR.SEQNO
  WHERE SEQNO >= ISNULL((
                 SELECT MINTRANSEQNO FROM dbo.PERIOD_STATUS PS
                 WHERE LEDGER ='C'
                 AND PS.AGE = (SELECT ANALYSIS_AGE_LIMIT FROM dbo.LEDGER_PERIODS LP WHERE LP.SEQNO=1))
                 , 0)
),
-- Essentials Precisions --------------------------------------------------------------------
CTE_PROFILES AS (
    SELECT PF.FIELDNAME,
           CASE WHEN(PV.FIELDVALUE IS NULL OR PV.FIELDVALUE = '')
                THEN isnull(PF.DEFAULTVALUE, 0) ELSE PV.FIELDVALUE
           END AS FIELDVALUE
    FROM dbo.PROFILE_FIELDS PF
    LEFT OUTER JOIN dbo.PROFILE_VALUES PV ON (PF.FIELDNAME = PV.FIELDNAME)
    WHERE PF.FIELDLEVEL=1
),
CTE_PRECISIONS AS (
    SELECT SEQNO,
           CAST(BILLCOSTDECIMALS AS INT) AS BILLCOSTDECIMALS,
           CAST(BILLQTYDECIMALS AS INT) AS BILLQTYDECIMALS,
           CAST(COSTPRDECIMALS AS INT) AS COSTPRDECIMALS,
           CAST(DISCOUNTDECIMALS AS INT) AS DISCOUNTDECIMALS,
           CAST(QTYDECIMALS AS INT) AS QTYDECIMALS,
           CAST(SELLPRDECIMALS AS INT) AS SELLPRDECIMALS,
           CAST(GLBRANCHSIZE AS INT) AS GLBRANCHSIZE,
           CAST(GLACCNOSIZE AS INT) AS GLACCNOSIZE,
           CAST(GLSUBACCSIZE AS INT) AS GLSUBACCSIZE
    FROM (SELECT 'SEQNO' AS FIELDNAME, '1' AS FIELDVALUE
          UNION
          SELECT FIELDNAME, FIELDVALUE FROM CTE_PROFILES
         ) AS PivotData
         PIVOT (MAX(FIELDVALUE)
                FOR FIELDNAME
                 IN ([SEQNO],
                     [BILLCOSTDECIMALS],
                     [BILLQTYDECIMALS],
                     [COSTPRDECIMALS],
                     [DISCOUNTDECIMALS],
                     [QTYDECIMALS],
                     [SELLPRDECIMALS],
                     [GLBRANCHSIZE],
                     [GLACCNOSIZE],
                     [GLSUBACCSIZE])
               ) AS PivotTable
),
-- Trans Permutations --------------------------------------------------------------------
CTE_PPU (
 --Dimensions (alias)
  TRANSEQNO, TRANSTYPE, INVNO,
  REF1, REF2, REF3, PORDER,
  BRANCHNO, SESSIONID,
  ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  DUEDATE, TRANSDATE, POSTTIME,
  SALESNO, CONTACTNO, CURRENCYNO,
  PERIODID, PTNO, TAXNO,
  GLACCNO, GLSUBACC,
  ACCISACTIVE,
  ACCGROUP, ACCGROUP2,
 --Measures (alias)
  AVEDAYS,
  IQUANTITY, IVALDISC, IVAL, IVALTAX, IVALTAXINC, IVALUNALLOC, IVALFC, IVALUNALLOCFC, INUMLINES,
  -- Custom (alias)
  CTE, FREQUENCY) AS (SELECT
 -- Dimensions (database)
  --CTR (drtrans)
  TRANSEQNO, TRANSTYPE, INVNO,
  REF1, REF2, REF3, PORDER,
  BRANCHNO, SESSIONID,
  ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  DUEDATE, TRANSDATE, POSTTIME,
  SALESNO, CONTACTNO, CURRENCYNO,
  PERIODID, PTNO, TAXNO,
  GLACCNO, GLSUBACC,
  --CAC (debtors account)
  ISNULL(ACCISACTIVE, 'N') AS ACCISACTIVE,
  ISNULL(ACCGROUP, -1) AS ACCGROUP,
  ISNULL(ACCGROUP2, -1) AS ACCGROUP2,
 --Measures
  --CAC
  MIN(ISNULL(AVEDAYS, 0)) AS AVEDAYS,
  --CTR (drtrans)
  SUM(ISNULL(IQUANTITY, 0)) AS IQUANTITY,
  SUM(ISNULL(IVALDISC, 0)) AS IVALDISC,
  SUM(ISNULL(IVAL, 0)) AS IVAL,
  SUM(ISNULL(IVALTAX, 0)) AS IVALTAX,
  SUM(ISNULL(IVALTAXINC, 0)) AS IVALTAXINC,
  SUM(ISNULL(IVALUNALLOC, 0)) AS IVALUNALLOC,
  SUM(ISNULL(IVALFC, 0)) AS IVALFC,
  SUM(ISNULL(IVALUNALLOCFC, 0)) AS IVALUNALLOCFC,
  SUM(ISNULL(INUMLINES, 0)) AS INUMLINES,
 --Custom
 --Number of rows (and code marker)
  'SPU', COUNT(*) AS FREQUENCY
-- Join structure
FROM CTE_CTR
  LEFT OUTER JOIN CTE_CAC ON CTE_CAC.CAC_ACCNO = CTE_CTR.ACCNO
  LEFT OUTER JOIN CTE_CON ON CTE_CON.CON_SEQNO = CTE_CTR.CONTACTNO
GROUP BY
  --CTR (drtrans)
  TRANSEQNO, TRANSTYPE, INVNO,
  REF1, REF2, REF3, PORDER,
  BRANCHNO, SESSIONID,
  ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  DUEDATE, TRANSDATE, POSTTIME,
  SALESNO, CONTACTNO, CURRENCYNO,
  PERIODID, PTNO, TAXNO,
  GLACCNO, GLSUBACC,
  --CAC (debtors account)
  ISNULL(ACCISACTIVE, 'N'),
  ISNULL(ACCGROUP, -1),
  ISNULL(ACCGROUP2, -1)
)

/** Define the Fact view **/
SELECT
 --Normalised (lookup)
  (CAST(PPU.BRANCHNO AS VARCHAR) + '.' + ISNULL(RTRIM(BRH.BRANCHNAME), 'No Branch')) AS BRANCHNAME,
  (CAST(PPU.ACCNO AS VARCHAR) + '.' + ISNULL(RTRIM(CAA.NAME), 'No Entered Creditor')) AS ACCNAME_ENTERED,
  (CAST(PPU.ACCNO_SALES AS VARCHAR) + '.' + ISNULL(RTRIM(CAP.NAME), 'No Sales Creditor')) AS ACCNAME_SALES,
  (CAST(PPU.ACCNO_BRANCH AS VARCHAR) + '.' + ISNULL(RTRIM(CAB.NAME), 'No Branch Creditor')) AS ACCNAME_BRANCH,
  (CAST(PPU.ACCGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(CG1.GROUPNAME), 'No Creditor Account Group')) AS ACCGROUP1NAME,
  (CAST(PPU.ACCGROUP2 AS VARCHAR) + '.' + ISNULL(RTRIM(CG2.GROUPNAME), 'No Creditor Account Group 2')) AS ACCGROUP2NAME,
  (CAST(PPU.SALESNO AS VARCHAR) + '.' + ISNULL(RTRIM(SFS.NAME), 'No Ordered By')) AS STAFFNAME,
  (RIGHT('000000000' + CAST(PPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(PPU.GLSUBACC AS VARCHAR), GLSUBACCSIZE)) AS GLCODE,
  (RIGHT('000000000' + CAST(PPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   ISNULL(RTRIM(GLA.NAME), 'No GL Account')) AS GLACCNAME,
  (RIGHT('000000000' + CAST(PPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(PPU.GLSUBACC AS VARCHAR), GLSUBACCSIZE) + '.' +
   ISNULL(ISNULL(RTRIM(GLS.NAME), RTRIM(GLA.NAME)), 'No GL SubAccount')) AS GLSUBACCNAME,
  (CAST(PPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRNAME), 'No Currency')) AS CURRENCYNAME,
  (CAST(PPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRCODE), 'No Currency')) AS CURRENCYCODE,
  (CAST(PPU.TAXNO AS VARCHAR) + '.' + ISNULL(RTRIM(TAX.NAME), 'No Tax')) AS TAXNAME,
  ISNULL(PES.AGE, -1) AS AGE,
  ISNULL(PES.YEARAGE, -1) AS YEARAGE,
  (CAST(ISNULL(PPU.PERIODID, -1) AS VARCHAR) + '.' + ISNULL(RTRIM(PES.PERIODNAME), 'No Period')) AS PERIODNAME,
--From Sales Permutations
  --CTR (drtrans)
  TRANSEQNO, TRANSTYPE, INVNO,
  REF1, REF2, REF3, PORDER,
  PPU.BRANCHNO, SESSIONID,
  PPU.ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  DUEDATE, TRANSDATE, POSTTIME,
  PPU.SALESNO, CONTACTNO, PPU.CURRENCYNO,
  PERIODID, PTNO, TAXNO,
  GLACCNO, PPU.GLSUBACC,
  --CAC (creditors account)
  ACCISACTIVE, PPU.ACCGROUP, PPU.ACCGROUP2,
--Measures
  --CAC
  AVEDAYS,
  --CIL (invoice line)
  ROUND(IQUANTITY, VDP.QTYDECIMALS) AS IQUANTITY,
  ROUND(IVALDISC, 2) AS IVALDISC,
  ROUND(IVAL, 2) AS IVAL,
  ROUND(IVALTAX, 2) AS IVALTAX,
  ROUND(IVALTAXINC, 2) AS IVALTAXINC,
  ROUND(IVALUNALLOC, 2) AS IVALUNALLOC,
  ROUND(IVALFC, 2) AS IVALFC,
  ROUND(IVALUNALLOCFC, 2) AS IVALUNALLOCFC,
  INUMLINES,
  ROUND(CASE WHEN IVALFC =0 THEN 1 ELSE IVAL/IVALFC END, 4) AS IEXCHRATE,
  ROUND(CASE WHEN IQUANTITY =0 THEN IVAL ELSE IVAL/ABS(IQUANTITY) END, VDP.SELLPRDECIMALS) AS IUNITPRICE,
  ROUND(CASE WHEN IQUANTITY =0 THEN IVAL ELSE IVALTAXINC/ABS(IQUANTITY) END, VDP.SELLPRDECIMALS) AS IUNITPRICETAXINC,
  ROUND(CASE WHEN IQUANTITY =0 THEN IVALFC ELSE IVALFC/ABS(IQUANTITY) END, VDP.SELLPRDECIMALS) AS IUNITPRICEFC,

--Custom
--Number of rows
  FREQUENCY
-- Join structure
FROM CTE_PPU PPU
  LEFT OUTER JOIN dbo.BRANCHES BRH WITH (NOLOCK) ON PPU.BRANCHNO = BRH.BRANCHNO
  LEFT OUTER JOIN dbo.CR_ACCS CAA WITH (NOLOCK) ON PPU.ACCNO = CAA.ACCNO
  LEFT OUTER JOIN dbo.CR_ACCS CAP WITH (NOLOCK) ON PPU.ACCNO_SALES = CAP.ACCNO
  LEFT OUTER JOIN dbo.CR_ACCS CAB WITH (NOLOCK) ON PPU.ACCNO_BRANCH = CAB.ACCNO
  LEFT OUTER JOIN dbo.CR_ACCGROUPS CG1 WITH (NOLOCK) ON PPU.ACCGROUP = CG1.ACCGROUP
  LEFT OUTER JOIN dbo.CR_ACCGROUP2S CG2 WITH (NOLOCK) ON PPU.ACCGROUP2 = CG2.ACCGROUP
  LEFT OUTER JOIN dbo.STAFF SFS WITH (NOLOCK) ON PPU.SALESNO = SFS.STAFFNO
  LEFT OUTER JOIN dbo.GLACCS GLA WITH (NOLOCK) ON PPU.GLACCNO = GLA.ACCNO
  LEFT OUTER JOIN dbo.GLSUBACCS GLS WITH (NOLOCK) ON PPU.GLACCNO = GLS.ACCNO
                                                          AND PPU.GLSUBACC = GLS.SUBACCNO
  LEFT OUTER JOIN dbo.CURRENCIES CUY WITH (NOLOCK) ON PPU.CURRENCYNO = CUY.CURRENCYNO
  LEFT OUTER JOIN dbo.TAX_RATES TAX WITH (NOLOCK) ON PPU.TAXNO = TAX.SEQNO
  LEFT OUTER JOIN dbo.PERIOD_STATUS PES WITH (NOLOCK) ON PPU.PERIODID = PES.SEQNO
  LEFT OUTER JOIN CTE_PRECISIONS VDP WITH (NOLOCK) ON VDP.SEQNO=1


View: VW_FACT_SALES
NameVW_FACT_SALES
Note
Code-- Sales fact view for debtors invoices
CREATE VIEW [dbo].[VW_FACT_SALES]
-- Indexed view
WITH SCHEMABINDING
AS
/** Sales fact view for debtors invoices DR_INVLINE driven **/

/**
setup CTEs in such a way as they can be extended e.g with custom or extra fields.
 Hopefully the Dimensions and Measures tabs could be programatically recognised.
 Columns above Dimensions are only used internally for joins using the DTEs
   but are still converted to common aliases as part of the DTE definition.
**/
WITH
-- STOCK_ITEMS - Price Lookup Item --------------------------------------------------------------------
CTE_PLU
  (PLU_STOCKCODE,
  -- Internal
  SALES_GL_CODE, SALES_GLSUBCODE, PURCH_GL_CODE, PURCH_GLSUBCODE, COSCOST,
  -- Dimensions (alias)
  STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, SIZEID, COLOURID,
  -- Measures (alias)
  -- Custom (alias)
  CTE)
AS
  (SELECT STOCKCODE,
  -- Internal (database)
  SALES_GL_CODE, SALES_GLSUBCODE, PURCH_GL_CODE, PURCH_GLSUBCODE,
  CASE (SELECT CAST(FIELDVALUE AS INTEGER)
        FROM dbo.PROFILE_VALUES
        WHERE FIELDNAME = 'STOCKCOSTMETHOD' AND PROFILEID = -1)
       WHEN 2 THEN ISNULL(STDCOST, 0)
       WHEN 1 THEN ISNULL(LATESTCOST, 0)
       ELSE ISNULL(AVECOST, 0)
  END AS COSCOST,
  -- Dimensions (database)
  STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, X_SIZEID, X_COLOURID,
  -- Measures (database)
  -- Custom (database)
  'PLU'
  FROM dbo.STOCK_ITEMS PLU WITH (NOLOCK)
  )
,
-- STOCK_ITEMS - Stock Keeping Item --------------------------------------------------------------------
CTE_SKU
  (SKU_STOCKCODE,
  -- Internal
  -- Dimensions (alias)
  SKU_DESCRIPTION, SKU_ISACTIVE, SKU_STATUS, SKU_BN, SKU_SN, SKU_SUPPLIERNO,
  -- Measures (alias)
  -- Custom (alias)
  CTE)
AS
  (SELECT STOCKCODE,
  -- Internal (database)
  -- Dimensions (database)
  DESCRIPTION, ISACTIVE, STATUS, HAS_BN, HAS_SN, SUPPLIERNO,
  -- Measures (database)
  -- Custom (database)
  'SKU'
  FROM dbo.STOCK_ITEMS SKU WITH (NOLOCK)
  )
,
-- DR_ACCS ------------------------------------------------------------------------
CTE_DAC
  (DAC_ACCNO,
  -- Internal (alias)
  DAC_HEAD_ACCNO,
  -- Dimensions (alias)
  ACCISACTIVE, ACCGROUP, ACCGROUP2, ACCPRICEGROUP,
  -- Measures (alias)
  AVEDAYS,
  -- Custom (alias)
  CTE)
AS
  (SELECT ACCNO,
  -- Internal (database)
  HEAD_ACCNO,
  -- Dimensions (database)
  ISACTIVE, ACCGROUP, ACCGROUP2, PRICEGROUP,
  -- Measures (database)
  AVE_DAYS_TO_PAY,
  -- Custom (database)
  'DAC'
  FROM dbo.DR_ACCS DAC WITH (NOLOCK)
  )
,
-- CONTACTS ------------------------------------------------------------------------
CTE_CON (CON_SEQNO,
  -- Dimensions (alias)
  CONT_ISACTIVE,
  -- Measures (alias)
  CONT_NAME,
  -- Custom (alias)
  CTE) AS (SELECT SEQNO,
  -- Dimensions (database)
  ISACTIVE,
  -- Measures (database)
  FULLNAME,
  -- Custom (database)
  'CON'
  FROM dbo.CONTACTS CON WITH (NOLOCK)
),
-- DR_TRANS (invoices) ------------------------------------------------------------------------
CTE_DT1 (SO_SEQNO, SESSION_ID,
  -- Dimensions (alias)
  TRANSEQNO, INVNO,
  REF1, REF2, REF3,
  SESSIONID, SHIFTNO, TERMINALID,
  ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  DUEDATE, TRANSDATE,
  POSTTIME,
  SALESNO, CONTACTNO, CURRENCYNO,
  CUSTORDNO, REFERENCE,
  PHYS_BRANCH, PHYS_STAFF, PERIODID,
  -- Measures (alias)
  -- Custom (alias)
  CTE) AS (SELECT SO_SEQNO, SESSION_ID,
  -- Dimensions (database)
  SEQNO, ISNULL(INVNO, '') AS INVNO,
  ISNULL(REF1, '') AS REF1, ISNULL(REF2, '') AS REF2, ISNULL(REF3, '') AS REF3,
  ISNULL(SESSION_ID, -1) AS SESSIONID, ISNULL(SHIFTNO, -1) AS SHIFTNO, ISNULL(TERMINAL_ID, '') AS TERMINALID,
  ACCNO, SALES_ACCNO, BRANCH_ACCNO,
  ISNULL(DUEDATE, ISNULL(TRANSDATE, GETDATE())) AS DUEDATE, ISNULL(TRANSDATE, GETDATE()) AS TRANSDATE,
  ISNULL(POSTTIME, GETDATE()) AS POSTTIME,
  ISNULL(SALESNO, -1) AS SALESNO, ISNULL(CONTACT_SEQNO, -1) AS CONTACT_SEQNO, ISNULL(CURRENCYNO, -1) AS CURRENCYNO,
  ISNULL(CUSTORDERNO, ''), ISNULL(ORD_REF, ''),
  ISNULL(PHYS_BRANCH, -1) AS PHYS_BRANCH, ISNULL(PHYS_STAFF, -1) AS PHYS_STAFF, ISNULL(PERIOD_SEQNO, -1) AS PERIOD_SEQNO,
  -- Measures (database)
  -- Custom (database)
  'DT1'
  FROM dbo.DR_TRANS DT1 WITH (NOLOCK)
  WHERE TRANSTYPE=1
),
-- DR_TRANS (receipts) ------------------------------------------------------------------------
CTE_DT4 (SESSION_ID,
  -- Dimensions (alias)
  PTNO, PAYNAME,
  -- Measures (alias)
  -- Custom (alias)
  CTE) AS (SELECT SESSION_ID,
  -- Dimensions (database)
  MIN(PTNO), MIN(REF1),
  -- Measures (database)
  -- Custom (database)
  'DT4'
  FROM dbo.DR_TRANS DT4 WITH (NOLOCK)
  WHERE DT4.TRANSTYPE=4 AND SESSION_ID > -1
  GROUP BY SESSION_ID
),
-- DR_INVLINES (invoices) ----------------------------------------------------------------------
CTE_DIL (DIL_HDR_SEQNO, JOBNO, LINE_SOURCE,
  -- Dimensions (alias)
  PLU, PLU_DESCRIPTION,
  SKU,
  BOMCODE,
  BRANCHNO, LOCATION, TAXNO, POLICYNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO, GLSUBACC,
  BOMTYPE, PRICEOVERRIDDEN, INVLINEID,
  LINETYPE, LINKEDITEM,
  -- Measures (alias)
  IQUANTITY, ICOST, IVALDISC, IVALLIST, IVAL, IVALTAX, IVALTAXINC, IVALFC,
  -- Custom (alias)
  CTE) AS (SELECT HDR_SEQNO, JOBNO, LINE_SOURCE,
  -- Dimensions (database)
  ISNULL(STOCKCODE, '') AS STOCKCODE,
  ISNULL(DIL.DESCRIPTION, '') AS DESCRIPTION,
  (CASE WHEN(LINKED_STOCKCODE IS NULL OR LINKED_STOCKCODE = '')
        THEN STOCKCODE
        ELSE LINKED_STOCKCODE
   END) AS LINKED_STOCKCODE,
  ISNULL(KITCODE, '') AS KITCODE,
  ISNULL(BRANCHNO, -1) AS BRANCHNO, ISNULL(LOCATION, -1) AS LOCATION,
  ISNULL(TAXRATE_NO, -1) AS TAXRATE_NO, ISNULL(CONTRACT_HDR, -1),
  ISNULL(BATCHCODE, '') AS BATCHCODE,
  ISNULL(JOBCODE, '') AS JOBCODE,
  ISNULL(ANALYSIS, -1) AS ANALYSIS, ISNULL(SUBCODE, -1) AS SUBCODE,
  ISNULL(BOMTYPE, 'N') AS BOMTYPE, ISNULL(PRICE_OVERRIDDEN, 'N') AS PRICE_OVERRIDDEN,
  ISNULL(DRINVLINEID, DIL.SEQNO) AS DRINVLINEID,
  ISNULL(LINETYPE, -1), ISNULL(LINKEDSTATUS, 'N'),
  -- Measures (database)
  QUANTITY,
  (QUANTITY*UNITCOST) AS COSTVAL,
  ((QUANTITY*UNITPRICE*DISCOUNT/100)/(case when isnull(EXCHRATE, 0)=0 then 1 else EXCHRATE end)) AS DISCVAL,
  (QUANTITY*LISTPRICE/(case when isnull(EXCHRATE, 0)=0 then 1 else EXCHRATE end)) AS LISTVAL,
  LINETOTAL/(case when isnull(EXCHRATE, 0)=0 then 1 else EXCHRATE end) AS SELLVAL,
  LINETOTAL_TAX/(case when isnull(EXCHRATE, 0)=0 then 1 else EXCHRATE end) AS TAXVAL,
  LINETOTAL_INCTAX/(case when isnull(EXCHRATE, 0)=0 then 1 else EXCHRATE end) AS TAXINCVAL,
  LINETOTAL AS FCVAL,
  -- Custom (database)
  'DIL'
 FROM dbo.DR_INVLINES DIL WITH (NOLOCK)
 WHERE LINETYPE <> 4 AND NOT (LINETYPE = -1 AND STOCKCODE = ' ')
 AND HDR_SEQNO >= ISNULL((
                   SELECT MINTRANSEQNO FROM dbo.PERIOD_STATUS PS
                   WHERE LEDGER ='D'
                   AND PS.AGE = (SELECT ANALYSIS_AGE_LIMIT FROM dbo.LEDGER_PERIODS LP WHERE LP.SEQNO=1))
                  , 0)
),
-- Essentials Precisions --------------------------------------------------------------------
CTE_PROFILES AS (
    SELECT PF.FIELDNAME,
           CASE WHEN(PV.FIELDVALUE IS NULL OR PV.FIELDVALUE = '')
                THEN isnull(PF.DEFAULTVALUE, 0) ELSE PV.FIELDVALUE
           END AS FIELDVALUE
    FROM dbo.PROFILE_FIELDS PF
    LEFT OUTER JOIN dbo.PROFILE_VALUES PV ON (PF.FIELDNAME = PV.FIELDNAME)
    WHERE PF.FIELDLEVEL=1
),
CTE_PRECISIONS AS (
    SELECT SEQNO,
           CAST(BILLCOSTDECIMALS AS INT) AS BILLCOSTDECIMALS,
           CAST(BILLQTYDECIMALS AS INT) AS BILLQTYDECIMALS,
           CAST(COSTPRDECIMALS AS INT) AS COSTPRDECIMALS,
           CAST(DISCOUNTDECIMALS AS INT) AS DISCOUNTDECIMALS,
           CAST(QTYDECIMALS AS INT) AS QTYDECIMALS,
           CAST(SELLPRDECIMALS AS INT) AS SELLPRDECIMALS,
           CAST(GLBRANCHSIZE AS INT) AS GLBRANCHSIZE,
           CAST(GLACCNOSIZE AS INT) AS GLACCNOSIZE,
           CAST(GLSUBACCSIZE AS INT) AS GLSUBACCSIZE
    FROM (SELECT 'SEQNO' AS FIELDNAME, '1' AS FIELDVALUE
          UNION
          SELECT FIELDNAME, FIELDVALUE FROM CTE_PROFILES
         ) AS PivotData
         PIVOT (MAX(FIELDVALUE)
                FOR FIELDNAME
                 IN ([SEQNO],
                     [BILLCOSTDECIMALS],
                     [BILLQTYDECIMALS],
                     [COSTPRDECIMALS],
                     [DISCOUNTDECIMALS],
                     [QTYDECIMALS],
                     [SELLPRDECIMALS],
                     [GLBRANCHSIZE],
                     [GLACCNOSIZE],
                     [GLSUBACCSIZE])
               ) AS PivotTable
),
-- Sales Permutations --------------------------------------------------------------------
CTE_SPU (
 --Dimensions (alias)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO, POLICYNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO,
  GLSUBACC,
  BOMTYPE, PRICEOVERRIDDEN, INVLINEID,
  LINETYPE, LINKEDITEM,
  TRANSEQNO, INVNO, REF1, REF2, REF3,
  SESSIONID, SHIFTNO, TERMINALID,
  ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  DUEDATE, TRANSDATE, POSTTIME, SALESNO, CONTACTNO, CURRENCYNO,
  CUSTORDNO, REFERENCE,
  PHYS_BRANCH, PHYS_STAFF, PERIODID,
  PTNO, PAYNAME,
  SKU_ISACTIVE, SKU_STATUS, SKU_BN, SKU_SN, SKU_SUPPLIERNO,
  PLU_DESCRIPTION, STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, SIZEID, COLOURID,
  ACCISACTIVE,
  ACCGROUP, ACCGROUP2,
  ACCPRICEGROUP,
 --Measures (alias)
  AVEDAYS,
  IQUANTITY, ICOST, IVALDISC, IVAL, IVALLIST, IVALTAX, IVALTAXINC, IVALFC,
  -- Custom (alias)
  CTE, FREQUENCY) AS (SELECT
 -- Dimensions (database)
  --DIL (invoice line)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO, POLICYNO,
  BATCHCODE,
  JOBCODE,
  CASE WHEN ISNULL(GLACCNO, 0) > 0
       THEN GLACCNO
       ELSE ISNULL((SELECT SALES_GL_CODE FROM CTE_PLU WHERE CTE_PLU.PLU_STOCKCODE = CTE_DIL.PLU)
                   , (SELECT DEF_SALES FROM dbo.GL_CONTROL))
  END AS GLACCNO,
  GLSUBACC,
  CTE_DIL.BOMTYPE, PRICEOVERRIDDEN, INVLINEID,
  LINETYPE, LINKEDITEM,
  --DT1 (invoice)
  TRANSEQNO, INVNO, REF1, REF2, REF3,
  SESSIONID, SHIFTNO, TERMINALID,
  ACCNO,
  ISNULL(ACCNO_SALES, ACCNO) AS ACCNO_SALES,
  ISNULL(ACCNO_BRANCH, -1) AS ACCNO_BRANCH,
  DUEDATE, TRANSDATE, POSTTIME, SALESNO, CONTACTNO, CURRENCYNO,
  CTE_DT1.CUSTORDNO, CTE_DT1.REFERENCE,
  PHYS_BRANCH, PHYS_STAFF, PERIODID,
  --DT4 (receipt)
  ISNULL(PTNO, -1), ISNULL(PAYNAME, 'No Payment'),
  --SKU (stock items)
  ISNULL(SKU_ISACTIVE, 'N') AS SKU_ISACTIVE,
  ISNULL(SKU_STATUS, 'L') AS SKU_STATUS,
  ISNULL(SKU_BN, 'N') AS SKU_BN,
  ISNULL(SKU_SN, 'N') AS SKU_SN,
  ISNULL(SKU_SUPPLIERNO, -1) AS SKU_SUPPLIERNO,
  --PLU (stock items)
  PLU_DESCRIPTION,
  ISNULL(STOCKGROUP, -1) AS STOCKGROUP,
  ISNULL(STOCKGROUP2, -1) AS STOCKGROUP2,
  ISNULL(STOCKPRICEGROUP, -1) AS STOCKPRICEGROUP,
  ISNULL(SIZEID, -1) AS SIZEID,
  ISNULL(COLOURID, -1) AS COLOURID,
  --DAC (debtors account)
  ISNULL(ACCISACTIVE, 'N') AS ACCISACTIVE,
  ISNULL(ACCGROUP, -1) AS ACCGROUP,
  ISNULL(ACCGROUP2, -1) AS ACCGROUP2,
  ISNULL(ACCPRICEGROUP, -1) AS ACCPRICEGROUP,
 --Measures
  --DAC
  MIN(ISNULL(AVEDAYS, 0)) AS AVEDAYS,
  --DTR (drtrans)
  SUM(ISNULL(IQUANTITY, 0)) AS IQUANTITY,
  SUM(ISNULL(ICOST, 0)) AS ICOST,
  SUM(ISNULL(IVALDISC, 0)) AS IVALDISC,
  SUM(ISNULL(IVAL, 0)) AS IVAL,
  SUM(ISNULL(IVALLIST, 0)) AS IVALLIST,
  SUM(ISNULL(IVALTAX, 0)) AS IVALTAX,
  SUM(ISNULL(IVALTAXINC, 0)) AS IVALTAXINC,
  SUM(ISNULL(IVALFC, 0)) AS IVALFC,
 --Custom
 --Number of rows (and code marker)
  'SPU', COUNT(*) AS FREQUENCY
-- Join structure
FROM CTE_DIL
  LEFT OUTER JOIN CTE_DT1 ON CTE_DT1.TRANSEQNO = CTE_DIL.DIL_HDR_SEQNO
  LEFT OUTER JOIN CTE_DT4 ON CTE_DT4.SESSION_ID = CTE_DT1.SESSION_ID
  LEFT OUTER JOIN CTE_DAC ON CTE_DAC.DAC_ACCNO = CTE_DT1.ACCNO_SALES
  LEFT OUTER JOIN CTE_CON ON CTE_CON.CON_SEQNO = CTE_DT1.CONTACTNO
  LEFT OUTER JOIN CTE_SKU ON CTE_SKU.SKU_STOCKCODE = CTE_DIL.SKU
  LEFT OUTER JOIN CTE_PLU ON CTE_PLU.PLU_STOCKCODE = CTE_DIL.PLU
GROUP BY
  --DIL (invoice line)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO, POLICYNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO, GLSUBACC,
  CTE_DIL.BOMTYPE, PRICEOVERRIDDEN, INVLINEID,
  LINETYPE, LINKEDITEM,
  --DT1 (invoice)
  TRANSEQNO, INVNO, REF1, REF2, REF3,
  SESSIONID, SHIFTNO, TERMINALID,
  ACCNO, ISNULL(ACCNO_SALES, ACCNO), ISNULL(ACCNO_BRANCH, -1),
  DUEDATE, TRANSDATE, POSTTIME, SALESNO, CONTACTNO, CURRENCYNO,
  CTE_DT1.CUSTORDNO, CTE_DT1.REFERENCE,
  PHYS_BRANCH, PHYS_STAFF, PERIODID,
  --DT4 (receipt)
  PTNO, PAYNAME,
  --SKU (stock items)
  ISNULL(SKU_ISACTIVE, 'N'),
  ISNULL(SKU_STATUS, 'L'),
  ISNULL(SKU_BN, 'N'),
  ISNULL(SKU_SN, 'N'),
  ISNULL(SKU_SUPPLIERNO, -1),
  --PLU (stock items)
  PLU_DESCRIPTION,
  ISNULL(STOCKGROUP, -1),
  ISNULL(STOCKGROUP2, -1),
  ISNULL(STOCKPRICEGROUP, -1),
  ISNULL(SIZEID, -1),
  ISNULL(COLOURID, -1),
  --DAC (debtors account)
  ISNULL(ACCISACTIVE, 'N'),
  ISNULL(ACCGROUP, -1),
  ISNULL(ACCGROUP2, -1),
  ISNULL(ACCPRICEGROUP, -1)
)
/** Define the Fact view **/
SELECT
 --Normalised (lookup)
  (CAST(SPU.BRANCHNO AS VARCHAR) + '.' + ISNULL(RTRIM(BRH.BRANCHNAME), 'No Branch')) AS BRANCHNAME,
  (CAST(SPU.PHYS_BRANCH AS VARCHAR) + '.' + ISNULL(RTRIM(BRP.BRANCHNAME), 'No Branch')) AS BRANCHNAMEPHYS,
  (CAST(SPU.ACCNO AS VARCHAR) + '.' + ISNULL(RTRIM(DAA.NAME), 'No Entered Debtor')) AS ACCNAME_ENTERED,
  (CAST(SPU.ACCNO_SALES AS VARCHAR) + '.' + ISNULL(RTRIM(DAS.NAME), 'No Sales Debtor')) AS ACCNAME_SALES,
  (CAST(SPU.ACCNO_BRANCH AS VARCHAR) + '.' + ISNULL(RTRIM(DAB.NAME), 'No Branch Debtor')) AS ACCNAME_BRANCH,
  (CAST(SPU.SKU_SUPPLIERNO AS VARCHAR) + '.' + ISNULL(RTRIM(CAS.NAME), 'No Supplier')) AS ACCNAME_SUPPLIER,
  (CAST(SPU.ACCGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(DG1.GROUPNAME), 'No Debtor Account Group')) AS ACCGROUP1NAME,
  (CAST(SPU.ACCGROUP2 AS VARCHAR) + '.' + ISNULL(RTRIM(DG2.GROUPNAME), 'No Debtor Account Group 2')) AS ACCGROUP2NAME,
  (CAST(SPU.ACCPRICEGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(DGP.GROUPNAME), 'No Debtor Price Group')) AS ACCGROUPPNAME,
  (CAST(SPU.POLICYNO AS VARCHAR) + '.' + ISNULL(RTRIM(DPP.POLICY_REF), 'No PricingPolicy')) AS POLICYNAME,
  (CAST(SPU.SALESNO AS VARCHAR) + '.' + ISNULL(RTRIM(SFS.NAME), 'No Manager')) AS STAFFNAME,
  (CAST(SPU.PHYS_STAFF AS VARCHAR) + '.' + ISNULL(RTRIM(SFP.NAME), 'No Staff')) AS STAFFNAMEPHYS,
  (RIGHT('000000000' + CAST(SPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(SPU.GLSUBACC AS VARCHAR), GLSUBACCSIZE)) AS GLCODE,
  (RIGHT('000000000' + CAST(SPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   ISNULL(RTRIM(GLA.NAME), 'No GL Account')) AS GLACCNAME,
  (RIGHT('000000000' + CAST(SPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(SPU.GLSUBACC AS VARCHAR), GLSUBACCSIZE) + '.' +
   ISNULL(ISNULL(RTRIM(GLS.NAME), RTRIM(GLA.NAME)), 'No GL SubAccount')) AS GLSUBACCNAME,
  (CAST(SPU.LOCATION AS VARCHAR) + '.' + ISNULL(RTRIM(LOC.LNAME), 'No Location')) AS LOCATIONNAME,
  (CAST(SPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRNAME), 'No Currency')) AS CURRENCYNAME,
  (CAST(SPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRCODE), 'No Currency')) AS CURRENCYCODE,
  (CAST(SPU.TAXNO AS VARCHAR) + '.' + ISNULL(RTRIM(TAX.NAME), 'No Tax')) AS TAXNAME,
  ISNULL(PES.AGE, -1) AS AGE,
  ISNULL(PES.YEARAGE, -1) AS YEARAGE,
  (CAST(ISNULL(SPU.PERIODID, -1) AS VARCHAR) + '.' + ISNULL(RTRIM(PES.PERIODNAME), 'No Period')) AS PERIODNAME,
  (CAST(SPU.STOCKGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(SG1.GROUPNAME), 'No Stock Group')) AS STOCKGROUP1NAME,
  (CAST(SPU.STOCKGROUP2 AS VARCHAR) + '.' + ISNULL(RTRIM(SG2.GROUPNAME), 'No Stock Group 2')) AS STOCKGROUP2NAME,
  (CAST(SPU.STOCKPRICEGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(SGP.GROUPNAME), 'No Stock Price Group')) AS STOCKGROUPPNAME,
  (RTRIM(SPU.BOMCODE) + '.' + ISNULL(RTRIM(BOM.DESCRIPTION), 'No BOM')) AS BOMNAME,
  (RTRIM(PLU) + '.' + ISNULL(RTRIM(PLU_DESCRIPTION), 'No PLU')) AS PLU_NAME,
  (RTRIM(SKU) + '.' + ISNULL(RTRIM(SKU_DESCRIPTION), 'No SKU')) AS SKU_NAME,
--From Sales Permutations
  --DIL (invoice line)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  SPU.BRANCHNO, LOCATION, TAXNO, POLICYNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO,
  SPU.GLSUBACC,
  SPU.BOMTYPE, PRICEOVERRIDDEN, INVLINEID,
  LINETYPE, LINKEDITEM,
  --DT1 (invoice)
  TRANSEQNO, INVNO, REF1, REF2, REF3,
  SESSIONID, SHIFTNO, TERMINALID,
  SPU.ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  DUEDATE, TRANSDATE, POSTTIME, SPU.SALESNO, CONTACTNO, SPU.CURRENCYNO,
  CUSTORDNO, REFERENCE,
  PHYS_BRANCH, PHYS_STAFF, SPU.PERIODID,
  --DT4 (receipt)
  PTNO, PAYNAME,
  --PLU (stock items)
  SPU.PLU_DESCRIPTION, SPU.STOCKGROUP, SPU.STOCKGROUP2, SPU.STOCKPRICEGROUP, SIZEID, COLOURID,
  --SKU (stock items)
  SKU_ISACTIVE, SKU_STATUS,
  SPU.SKU_BN, SPU.SKU_SN,
  SKU_SUPPLIERNO,
  --DAC (debtors account)
  ACCISACTIVE, SPU.ACCGROUP, SPU.ACCGROUP2, ACCPRICEGROUP,
--Measures
  --DAC
  AVEDAYS,
  --DIL (invoice line)
  ROUND(IQUANTITY, VDP.QTYDECIMALS) AS IQUANTITY,
  ROUND(ICOST, 2) AS ICOST,
  ROUND(IVALDISC, 2) AS IVALDISC,
  ROUND(IVAL, 2) AS IVAL,
  ROUND(IVALLIST, 2) AS IVALLIST,
  ROUND(IVALTAX, 2) AS IVALTAX,
  ROUND(IVALTAXINC, 2) AS IVALTAXINC,
  ROUND(IVALFC, 2) AS IVALFC,
  ROUND((IVAL-ICOST), 2) AS IPROFIT,
  ROUND(CASE WHEN ICOST <> 0 THEN (((IVAL-ICOST)/ICOST)*100) ELSE 100 END, 2) AS IMARKUPPC,
  ROUND(CASE WHEN IVAL <> 0 THEN (((IVAL-ICOST)/IVAL)*100) ELSE 100 END, 2) AS IMARGINPC,
  ROUND(CASE WHEN IVALFC =0 THEN 1 ELSE IVAL/IVALFC END, 4) AS IEXCHRATE,
  ROUND(CASE WHEN IQUANTITY =0 THEN ICOST ELSE ICOST/ABS(IQUANTITY) END, COSTPRDECIMALS) AS IUNITCOST,
  ROUND(CASE WHEN IQUANTITY =0 THEN IVAL ELSE IVAL/ABS(IQUANTITY) END, VDP.SELLPRDECIMALS) AS IUNITPRICE,
  ROUND(CASE WHEN IQUANTITY =0 THEN IVAL ELSE IVALTAXINC/ABS(IQUANTITY) END, VDP.SELLPRDECIMALS) AS IUNITPRICETAXINC,
  ROUND(CASE WHEN IQUANTITY =0 THEN IVALFC ELSE IVALFC/ABS(IQUANTITY) END, VDP.SELLPRDECIMALS) AS IUNITPRICEFC,
--Custom
--Number of rows
  FREQUENCY
--Join structure
FROM CTE_SPU SPU
  LEFT OUTER JOIN dbo.BRANCHES BRH WITH (NOLOCK) ON SPU.BRANCHNO = BRH.BRANCHNO
  LEFT OUTER JOIN dbo.BRANCHES BRP WITH (NOLOCK) ON SPU.PHYS_BRANCH = BRP.BRANCHNO
  LEFT OUTER JOIN dbo.DR_ACCS DAA WITH (NOLOCK) ON SPU.ACCNO = DAA.ACCNO
  LEFT OUTER JOIN dbo.DR_ACCS DAS WITH (NOLOCK) ON SPU.ACCNO_SALES = DAS.ACCNO
  LEFT OUTER JOIN dbo.DR_ACCS DAB WITH (NOLOCK) ON SPU.ACCNO_BRANCH = DAB.ACCNO
  LEFT OUTER JOIN dbo.CR_ACCS CAS WITH (NOLOCK) ON SPU.SKU_SUPPLIERNO = CAS.ACCNO
  LEFT OUTER JOIN dbo.DR_ACCGROUPS DG1 WITH (NOLOCK) ON SPU.ACCGROUP = DG1.ACCGROUP
  LEFT OUTER JOIN dbo.DR_ACCGROUP2S DG2 WITH (NOLOCK) ON SPU.ACCGROUP2 = DG2.ACCGROUP
  LEFT OUTER JOIN dbo.DR_PRICEGROUPS DGP WITH (NOLOCK) ON SPU.ACCPRICEGROUP = DGP.GROUPNO
  LEFT OUTER JOIN dbo.DR_PRICE_POLICY DPP WITH (NOLOCK) ON SPU.POLICYNO = DPP.POLICY_HDR
  LEFT OUTER JOIN dbo.STAFF SFS WITH (NOLOCK) ON SPU.SALESNO = SFS.STAFFNO
  LEFT OUTER JOIN dbo.STAFF SFP WITH (NOLOCK) ON SPU.PHYS_STAFF = SFP.STAFFNO
  LEFT OUTER JOIN dbo.GLACCS GLA WITH (NOLOCK) ON SPU.GLACCNO = GLA.ACCNO
  LEFT OUTER JOIN dbo.GLSUBACCS GLS WITH (NOLOCK) ON SPU.GLACCNO = GLS.ACCNO
                                                          AND SPU.GLSUBACC = GLS.SUBACCNO
  LEFT OUTER JOIN dbo.STOCK_LOCATIONS LOC WITH (NOLOCK) ON SPU.LOCATION = LOC.LOCNO
  LEFT OUTER JOIN dbo.CURRENCIES CUY WITH (NOLOCK) ON SPU.CURRENCYNO = CUY.CURRENCYNO
  LEFT OUTER JOIN dbo.TAX_RATES TAX WITH (NOLOCK) ON SPU.TAXNO = TAX.SEQNO
  LEFT OUTER JOIN dbo.PERIOD_STATUS PES WITH (NOLOCK) ON SPU.PERIODID = PES.SEQNO
  LEFT OUTER JOIN dbo.STOCK_GROUPS SG1 WITH (NOLOCK) ON SPU.STOCKGROUP = SG1.GROUPNO
  LEFT OUTER JOIN dbo.STOCK_GROUP2S SG2 WITH (NOLOCK) ON SPU.STOCKGROUP2 = SG2.GROUPNO
  LEFT OUTER JOIN dbo.STOCK_PRICEGROUPS SGP WITH (NOLOCK) ON SPU.STOCKPRICEGROUP = SGP.GROUPNO
  LEFT OUTER JOIN dbo.BILLOMAT_HDR BOM WITH (NOLOCK) ON SPU.BOMCODE = BOM.BILLCODE
  LEFT OUTER JOIN CTE_PRECISIONS VDP WITH (NOLOCK) ON VDP.SEQNO=1


View: VW_FACT_SALESORD
NameVW_FACT_SALESORD
Note
Code-- Sales fact view for debtors sales orders
CREATE VIEW [dbo].[VW_FACT_SALESORD]
-- Indexed view
WITH SCHEMABINDING
AS

/**
setup DTEs in such a way as they can be extended e.g with custom or extra fields.
 Hopefully the Dimensions and Measures tabs could be programatically recognised.
 Columns above Dimensions are only used internally for joins using the DTEs
   but are still converted to common aliases as part of the DTE definition.
**/
WITH
-- STOCK_ITEMS - Price Lookup Item --------------------------------------------------------------------
CTE_PLU
  (PLU_STOCKCODE,
  -- Internal
  SALES_GL_CODE, SALES_GLSUBCODE, PURCH_GL_CODE, PURCH_GLSUBCODE, COSCOST,
  -- Dimensions (alias)
  STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, SIZEID, COLOURID,
  -- Measures (alias)
  -- Custom (alias)
  CTE)
AS
  (SELECT STOCKCODE,
  -- Internal (database)
  SALES_GL_CODE, SALES_GLSUBCODE, PURCH_GL_CODE, PURCH_GLSUBCODE,
  CASE (SELECT CAST(FIELDVALUE AS INTEGER)
        FROM dbo.PROFILE_VALUES
        WHERE FIELDNAME = 'STOCKCOSTMETHOD' AND PROFILEID = -1)
       WHEN 2 THEN ISNULL(STDCOST, 0)
       WHEN 1 THEN ISNULL(LATESTCOST, 0)
       ELSE ISNULL(AVECOST, 0)
  END AS COSCOST,
  -- Dimensions (database)
  STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, X_SIZEID, X_COLOURID,
  -- Measures (database)
  -- Custom (database)
  'PLU'
  FROM dbo.STOCK_ITEMS PLU WITH (NOLOCK)
  )
,
-- STOCK_ITEMS - Stock Keeping Item --------------------------------------------------------------------
CTE_SKU
  (SKU_STOCKCODE,
  -- Internal
  -- Dimensions (alias)
  SKU_DESCRIPTION, SKU_ISACTIVE, SKU_STATUS, SKU_BN, SKU_SN, SKU_SUPPLIERNO,
  -- Measures (alias)
  -- Custom (alias)
  CTE)
AS
  (SELECT STOCKCODE,
  -- Internal (database)
  -- Dimensions (database)
  DESCRIPTION, ISACTIVE, STATUS, HAS_BN, HAS_SN, SUPPLIERNO,
  -- Measures (database)
  -- Custom (database)
  'SKU'
  FROM dbo.STOCK_ITEMS SKU WITH (NOLOCK)
  )
,
-- DR_ACCS ------------------------------------------------------------------------
CTE_DAC (DAC_ACCNO,
  -- Internal (alias)
  DAC_HEAD_ACCNO,
  -- Dimensions (alias)
  ACCISACTIVE, ACCGROUP, ACCGROUP2, ACCPRICEGROUP,
  -- Measures (alias)
  AVEDAYS,
  -- Custom (alias)
  CTE) AS (SELECT ACCNO,
  -- Internal (database)
  HEAD_ACCNO,
  -- Dimensions (database)
  ISACTIVE, ACCGROUP, ACCGROUP2, PRICEGROUP,
  -- Measures (database)
  AVE_DAYS_TO_PAY,
  -- Custom (database)
  'DAC'
  FROM dbo.DR_ACCS DAC WITH (NOLOCK)
),
-- CONTACTS ------------------------------------------------------------------------
CTE_CON (CON_SEQNO,
  -- Dimensions (alias)
  CONT_ISACTIVE,
  -- Measures (alias)
  CONT_NAME,
  -- Custom (alias)
  CTE) AS (SELECT SEQNO,
  -- Dimensions (database)
  ISACTIVE,
  -- Measures (database)
  FULLNAME,
  -- Custom (database)
  'CON'
  FROM dbo.CONTACTS CON WITH (NOLOCK)
),
-- SALESORD_HDR ------------------------------------------------------------------------
CTE_SHD (SO,
  -- Dimensions (alias)
  ACCNO, STATUS, SHIPCOMPLETE,
  ISCONFIRMED, WAS_BACKORDERED,
  DELIVERYCOUNT, INVOICECOUNT,
  DUEDATE, ORDERDATE, CREATE_DATE, ACTIVATION_DATE, FINALISATION_DATE,
  SALESNO, CONTACTNO, CURRENCYNO,
  CUSTORDNO, REFERENCE,
  PHYS_BRANCH, PHYS_STAFF,
---- PERIODID,
  -- Measures (alias)
  WORKDAYS,
  -- Custom (alias)
  CTE) AS (SELECT SHD.SEQNO,
  -- Dimensions (database)
  ACCNO, STATUS, ISNULL(SHIP_COMPLETE, 'N'),
  CASE WHEN STATUS =3 THEN 'N' ELSE 'Y' END AS ISCONFIRMED, ISNULL(WAS_BACKORDERED, HAS_BACKORDERS),
  DELIVERYCOUNT, INVOICECOUNT,
  DUEDATE, ORDERDATE, CREATE_DATE, ACTIVATION_DATE, FINALISATION_DATE,
  SHD.SALESNO, CONTACT_SEQNO, CURRENCYNO,
  ISNULL(CUSTORDERNO, ''), ISNULL(REFERENCE, ''),
  ISNULL(SHT.PHYS_BRANCH, 0) AS PHYS_BRANCH, ISNULL(SHT.PHYS_STAFF, SHD.SALESNO) AS PHYS_STAFF,
---- ISNULL(dbo.FN_GET_PERIOD_SEQNO(ORDERDATE), -1) AS PERIODID,
  -- Measures (database)
  ISNULL(dbo.FN_GET_MANREP_DAYS(ACTIVATION_DATE, FINALISATION_DATE), 0) AS WORKDAYS,
  -- Custom (database)
  'SHD'
  FROM dbo.SALESORD_HDR SHD WITH (NOLOCK)
  LEFT OUTER JOIN
  ( select top 1 HEADER_SOURCE_SEQ, PHYS_BRANCH, PHYS_STAFF from dbo.SALESORDHIST SHT WITH (NOLOCK)
    where SHT.EVENT_TYPE ='N' AND SHT.HISTORYNO =0) SHT ON SHT.HEADER_SOURCE_SEQ = SHD.SEQNO
  WHERE STATUS <> 4 /** exclude standing orders **/
),
-- SALESORD_LINES ----------------------------------------------------------------------
CTE_SOL (
  -- Dimensions (alias)
  PLU, PLU_DESCRIPTION, SKU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO, POLICYNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO, GLSUBACC,
  BOMTYPE, PRICEOVERRIDDEN, ORDLINEID, SORDER,
  LINETYPE, LINKEDITEM,
  -- Measures (alias)
  OQUANTITY, OVALDISC, OVALLIST, OVAL, OVALTAX, OVALTAXINC, OVALFC,
  OUNSUPPLIED, OUNINVOICED, OBACKORDERED,
  OVALPENDING,
  -- Custom (alias)
  CTE) AS (SELECT
  -- Dimensions (database)
  STOCKCODE, SOL.DESCRIPTION,
  (CASE WHEN(LINKED_STOCKCODE IS NULL OR LINKED_STOCKCODE = '')
        THEN STOCKCODE
        ELSE LINKED_STOCKCODE
   END) AS LINKED_STOCKCODE,
  ISNULL(KITCODE, ' '),
  ISNULL(BRANCHNO, 0), ISNULL(LOCATION, 1), TAXRATE_NO, ISNULL(CONTRACT_HDR, 0),
  ISNULL(BATCHCODE, ' '),
  ISNULL(JOBCODE, ' '),
  ANALYSIS,
  SUBCODE,
  BOMTYPE, PRICE_OVERRIDDEN, SOLINEID, HDR_SEQNO,

  ISNULL(LINETYPE, -1), ISNULL(LINKEDSTATUS, 'N'),
  -- Measures (database)
  CORRECTED_QUANT AS OQUANTITY,
  (CORRECTED_QUANT*UNITPRICE*DISCOUNT/100) AS OVALDISC,
  (CORRECTED_QUANT*LISTPRICE) AS OVALLIST,
  LINETOTAL AS OVAL,
  LINETAX_OVERRIDE AS OVALTAX,
  (LINETOTAL+LINETAX_OVERRIDE) AS OVALTAXINC,
  LINETOTAL AS OVALFC,
  UNSUP_QUANT AS OUNSUPPLIED,
  UNINV_QUANT AS OUNINVOICED,
  BKORD_QUANT AS OBACKORDERED,
  (UNINV_QUANT*UNITPRICE*DISCOUNT/100) AS OVALPENDING,
  -- Custom (database)
  'SOL'
 FROM dbo.SALESORD_LINES SOL WITH (NOLOCK)
 WHERE LINETYPE <> 4 AND NOT (LINETYPE = -1 AND STOCKCODE = ' ')
),
-- Essentials Precisions --------------------------------------------------------------------
CTE_PROFILES AS (
    SELECT PF.FIELDNAME,
           CASE WHEN(PV.FIELDVALUE IS NULL OR PV.FIELDVALUE = '')
                THEN isnull(PF.DEFAULTVALUE, 0) ELSE PV.FIELDVALUE
           END AS FIELDVALUE
    FROM dbo.PROFILE_FIELDS PF
    LEFT OUTER JOIN dbo.PROFILE_VALUES PV ON (PF.FIELDNAME = PV.FIELDNAME)
    WHERE PF.FIELDLEVEL=1
),
CTE_PRECISIONS AS (
    SELECT SEQNO,
           CAST(BILLCOSTDECIMALS AS INT) AS BILLCOSTDECIMALS,
           CAST(BILLQTYDECIMALS AS INT) AS BILLQTYDECIMALS,
           CAST(COSTPRDECIMALS AS INT) AS COSTPRDECIMALS,
           CAST(DISCOUNTDECIMALS AS INT) AS DISCOUNTDECIMALS,
           CAST(QTYDECIMALS AS INT) AS QTYDECIMALS,
           CAST(SELLPRDECIMALS AS INT) AS SELLPRDECIMALS,
           CAST(GLBRANCHSIZE AS INT) AS GLBRANCHSIZE,
           CAST(GLACCNOSIZE AS INT) AS GLACCNOSIZE,
           CAST(GLSUBACCSIZE AS INT) AS GLSUBACCSIZE
    FROM (SELECT 'SEQNO' AS FIELDNAME, '1' AS FIELDVALUE
          UNION
          SELECT FIELDNAME, FIELDVALUE FROM CTE_PROFILES
         ) AS PivotData
         PIVOT (MAX(FIELDVALUE)
                FOR FIELDNAME
                 IN ([SEQNO],
                     [BILLCOSTDECIMALS],
                     [BILLQTYDECIMALS],
                     [COSTPRDECIMALS],
                     [DISCOUNTDECIMALS],
                     [QTYDECIMALS],
                     [SELLPRDECIMALS],
                     [GLBRANCHSIZE],
                     [GLACCNOSIZE],
                     [GLSUBACCSIZE])
               ) AS PivotTable
),
-- Sales Permutations --------------------------------------------------------------------
CTE_SPU (
 --Dimensions (alias)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO, POLICYNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO,
  GLSUBACC,
  BOMTYPE, PRICEOVERRIDDEN, ORDLINEID, SORDER,
  LINETYPE, LINKEDITEM,
  ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  ORDSTATUS, SHIPCOMPLETE, ISCONFIRMED, WAS_BACKORDERED,
  DUEDATE, ORDERDATE, CREATE_DATE, ACTIVATION_DATE, FINALISATION_DATE,
  SALESNO, CONTACTNO, CURRENCYNO,
  CUSTORDNO, REFERENCE,
  PHYS_BRANCH, PHYS_STAFF,
  SKU_ISACTIVE, SKU_STATUS, SKU_BN, SKU_SN, SKU_SUPPLIERNO,
  PLU_DESCRIPTION, STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, SIZEID, COLOURID,
  ACCISACTIVE, ACCGROUP, ACCGROUP2, ACCPRICEGROUP,
 --Measures (alias)
  AVEDAYS,
  OQUANTITY, OCOST, OVALDISC, OVALLIST, OVAL, OVALTAX, OVALTAXINC, OVALFC,
  OUNSUPPLIED, OUNINVOICED, OBACKORDERED,
  OCOSTPENDING, OVALPENDING,
  DELIVERYCOUNT, INVOICECOUNT,
  WORKDAYS,
 -- Custom (alias)
  CTE, FREQUENCY) AS (SELECT
 -- Dimensions (database)
  --DIL (invoice line)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO, POLICYNO,
  BATCHCODE,
  JOBCODE,
  CASE WHEN ISNULL(GLACCNO, 0) > 0
       THEN GLACCNO
       ELSE ISNULL(CTE_PLU.SALES_GL_CODE, (SELECT DEF_SALES FROM dbo.GL_CONTROL))
  END AS GLACCNO,
  GLSUBACC,
  BOMTYPE, PRICEOVERRIDDEN, ORDLINEID, SORDER,
  LINETYPE, LINKEDITEM,
  --SHD (sales order header)
  ISNULL((CASE WHEN CTE_DAC.DAC_HEAD_ACCNO >0 THEN CTE_DAC.DAC_HEAD_ACCNO ELSE ACCNO END), ACCNO) AS ACCNO,
  ACCNO AS ACCNO_SALES,
  ISNULL((CASE WHEN CTE_DAC.DAC_HEAD_ACCNO >0 THEN ACCNO ELSE -1 END), -1) AS ACCNO_BRANCH,
  CTE_SHD.STATUS, SHIPCOMPLETE, ISCONFIRMED, WAS_BACKORDERED,
  DUEDATE, ORDERDATE, CREATE_DATE, ACTIVATION_DATE, FINALISATION_DATE,
  SALESNO, CONTACTNO, CURRENCYNO,
  CUSTORDNO, REFERENCE,
  PHYS_BRANCH, PHYS_STAFF,
---- PERIODID,
  --SKU (stock items)
  ISNULL(SKU_ISACTIVE, 'N') AS SKU_ISACTIVE,
  ISNULL(SKU_STATUS, 'L') AS SKU_STATUS,
  ISNULL(SKU_BN, 'N') AS SKU_BN,
  ISNULL(SKU_SN, 'N') AS SKU_SN,
  ISNULL(SKU_SUPPLIERNO, -1) AS SKU_SUPPLIERNO,
  --PLU (stock items)
  PLU_DESCRIPTION,
  ISNULL(STOCKGROUP, -1) AS STOCKGROUP,
  ISNULL(STOCKGROUP2, -1) AS STOCKGROUP2,
  ISNULL(STOCKPRICEGROUP, -1) AS STOCKPRICEGROUP,
  ISNULL(SIZEID, -1) AS SIZEID,
  ISNULL(COLOURID, -1) AS COLOURID,
  --DAC (debtors account)
  ISNULL(ACCISACTIVE, 'N') AS ACCISACTIVE,
  ISNULL(ACCGROUP, -1) AS ACCGROUP, ISNULL(ACCGROUP2, -1) AS ACCGROUP2,
  ISNULL(ACCPRICEGROUP, -1) AS ACCPRICEGROUP,
--Measures
  --DAC
  MIN(ISNULL(AVEDAYS, 0)) AS AVEDAYS,
  --SOL (invoice line)
  SUM(ISNULL(OQUANTITY, 0)) AS OQUANTITY,
  SUM(ISNULL(OQUANTITY, 0)*ISNULL(CTE_PLU.COSCOST, 0)) AS OCOST,
  SUM(ISNULL(OVALDISC, 0)) AS OVALDISC,
  SUM(ISNULL(OVALLIST, 0)) AS OVALLIST,
  SUM(ISNULL(OVAL, 0)) AS OVAL,
  SUM(ISNULL(OVALTAX, 0)) AS OVALTAX,
  SUM(ISNULL(OVALTAXINC, 0)) AS OVALTAXINC,
  SUM(ISNULL(OVALFC, 0)) AS OVALFC,
  SUM(ISNULL(OUNSUPPLIED, 0)) AS OUNSUPPLIED,
  SUM(ISNULL(OUNINVOICED, 0)) AS OUNINVOICED,
  SUM(ISNULL(OBACKORDERED, 0)) AS OBACKORDERED,
  SUM(ISNULL(OUNSUPPLIED, 0)*ISNULL(CTE_PLU.COSCOST, 0)) AS OCOSTPENDING,
  SUM(ISNULL(OVALPENDING, 0)) AS OVALPENDING,
  SUM(ISNULL(DELIVERYCOUNT, 0)) AS DELIVERYCOUNT,
  SUM(ISNULL(INVOICECOUNT, 0)) AS INVOICECOUNT,
  SUM(ISNULL(WORKDAYS, 0)) AS WORKDAYS,
--Custom
--Number of rows (and code marker)
  'SPU', COUNT(*) AS FREQUENCY
-- Join structure
FROM CTE_SOL
LEFT OUTER JOIN CTE_SHD ON CTE_SHD.SO = CTE_SOL.SORDER
LEFT OUTER JOIN CTE_DAC ON CTE_DAC.DAC_ACCNO = CTE_SHD.ACCNO
LEFT OUTER JOIN CTE_CON ON CTE_CON.CON_SEQNO = CTE_SHD.CONTACTNO
LEFT OUTER JOIN CTE_PLU ON CTE_PLU.PLU_STOCKCODE = CTE_SOL.PLU
LEFT OUTER JOIN CTE_SKU ON CTE_SKU.SKU_STOCKCODE = CTE_SOL.SKU
GROUP BY
  --SOL (sales order line)
  PLU, PLU_DESCRIPTION, SKU, BOMCODE,
  BRANCHNO, LOCATION, TAXNO, POLICYNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO, GLSUBACC,
  BOMTYPE, PRICEOVERRIDDEN, ORDLINEID, SORDER,
  LINETYPE, LINKEDITEM,
  --SHD (sales order header)
  CASE WHEN CTE_DAC.DAC_HEAD_ACCNO >0 THEN CTE_DAC.DAC_HEAD_ACCNO ELSE ACCNO END,
  ACCNO,
  CASE WHEN CTE_DAC.DAC_HEAD_ACCNO >0 THEN ACCNO ELSE -1 END,
  CTE_SHD.STATUS, SHIPCOMPLETE, ISCONFIRMED, WAS_BACKORDERED,
  DUEDATE, ORDERDATE, CREATE_DATE, ACTIVATION_DATE, FINALISATION_DATE,
  SALESNO, CONTACTNO, CURRENCYNO,
  CUSTORDNO, REFERENCE,
  PHYS_BRANCH, PHYS_STAFF,
---- PERIODID,
  --SKU (stock items)
  SKU_DESCRIPTION, SKU_ISACTIVE, SKU_STATUS, SKU_BN, SKU_SN, STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP,
  SKU_SUPPLIERNO, SIZEID, COLOURID, SALES_GL_CODE, SALES_GLSUBCODE,
  --DAC (debtors account)
  ACCISACTIVE, ACCGROUP, ACCGROUP2, ACCPRICEGROUP
)
/** Define the Fact view **/
SELECT
 --Normalised (lookup)
  (CAST(SPU.BRANCHNO AS VARCHAR) + '.' + ISNULL(RTRIM(BRH.BRANCHNAME), 'No Branch')) AS BRANCHNAME,
  (CAST(SPU.PHYS_BRANCH AS VARCHAR) + '.' + ISNULL(RTRIM(BRP.BRANCHNAME), 'No Branch')) AS BRANCHNAMEPHYS,
  (CAST(SPU.ACCNO AS VARCHAR) + '.' + ISNULL(RTRIM(DAA.NAME), 'No Entered Debtor')) AS ACCNAME_ENTERED,
  (CAST(SPU.ACCNO_SALES AS VARCHAR) + '.' + ISNULL(RTRIM(DAS.NAME), 'No Sales Debtor')) AS ACCNAME_SALES,
  (CAST(SPU.ACCNO_BRANCH AS VARCHAR) + '.' + ISNULL(RTRIM(DAB.NAME), 'No Branch Debtor')) AS ACCNAME_BRANCH,
  (CAST(SPU.SKU_SUPPLIERNO AS VARCHAR) + '.' + ISNULL(RTRIM(CAS.NAME), 'No Supplier')) AS ACCNAME_SUPPLIER,
  (CAST(SPU.ACCGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(DG1.GROUPNAME), 'No Debtor Account Group')) AS ACCGROUP1NAME,
  (CAST(SPU.ACCGROUP2 AS VARCHAR) + '.' + ISNULL(RTRIM(DG2.GROUPNAME), 'No Debtor Account Group 2')) AS ACCGROUP2NAME,
  (CAST(SPU.ACCPRICEGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(DGP.GROUPNAME), 'No Debtor Price Group')) AS ACCGROUPPNAME,
  (CAST(SPU.POLICYNO AS VARCHAR) + '.' + ISNULL(RTRIM(DPP.POLICY_REF), 'No PricingPolicy')) AS POLICYNAME,
  (CAST(SPU.SALESNO AS VARCHAR) + '.' + ISNULL(RTRIM(SFS.NAME), 'No Manager')) AS STAFFNAME,
  (CAST(SPU.PHYS_STAFF AS VARCHAR) + '.' + ISNULL(RTRIM(SFP.NAME), 'No Staff')) AS STAFFNAMEPHYS,
  (RIGHT('000000000' + CAST(SPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(SPU.GLSUBACC AS VARCHAR), GLSUBACCSIZE)) AS GLCODE,
  (RIGHT('000000000' + CAST(SPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   ISNULL(RTRIM(GLA.NAME), 'No GL Account')) AS GLACCNAME,
  (RIGHT('000000000' + CAST(SPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(SPU.GLSUBACC AS VARCHAR), GLSUBACCSIZE) + '.' +
   ISNULL(ISNULL(RTRIM(GLS.NAME), RTRIM(GLA.NAME)), 'No GL SubAccount')) AS GLSUBACCNAME,
  (CAST(SPU.LOCATION AS VARCHAR) + '.' + ISNULL(RTRIM(LOC.LNAME), 'No Location')) AS LOCATIONNAME,
  (CAST(SPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRNAME), 'No Currency')) AS CURRENCYNAME,
  (CAST(SPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRCODE), 'No Currency')) AS CURRENCYCODE,
  (CAST(SPU.TAXNO AS VARCHAR) + '.' + ISNULL(RTRIM(TAX.NAME), 'No Tax')) AS TAXNAME,
---- SPU.AGE AS AGE,
---- SPU.YEARAGE AS YEARAGE,
---- (SPU.PERIODID + '.' + ISNULL(RTRIM(PES.PERIODNAME), 'No Period') AS PERIODNAME,
  (CAST(SPU.STOCKGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(SG1.GROUPNAME), 'No Stock Group')) AS STOCKGROUP1NAME,
  (CAST(SPU.STOCKGROUP2 AS VARCHAR) + '.' + ISNULL(RTRIM(SG2.GROUPNAME), 'No Stock Group 2')) AS STOCKGROUP2NAME,
  (CAST(SPU.STOCKPRICEGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(SGP.GROUPNAME), 'No Stock Price Group')) AS STOCKGROUPPNAME,
  (RTRIM(SPU.BOMCODE) + '.' + ISNULL(RTRIM(BOM.DESCRIPTION), 'No BOM')) AS BOMNAME,
  (RTRIM(PLU) + '.' + ISNULL(RTRIM(PLU_DESCRIPTION), 'No PLU')) AS PLU_NAME,
  (RTRIM(SKU) + '.' + ISNULL(RTRIM(SKU_DESCRIPTION), 'No SKU')) AS SKU_NAME,
--From Sales Permutations
  --DIL (invoice line)
  SKU, SKU_DESCRIPTION, PLU, BOMCODE,
  SPU.BRANCHNO, LOCATION, TAXNO, POLICYNO,
  BATCHCODE,
  JOBCODE,
  GLACCNO,
  SPU.GLSUBACC,
  SPU.BOMTYPE, PRICEOVERRIDDEN, ORDLINEID, SORDER,
  LINETYPE, LINKEDITEM,
  SPU.ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  ORDSTATUS, SHIPCOMPLETE, ISCONFIRMED, WAS_BACKORDERED,
  DUEDATE, ORDERDATE,
--!!! OMIT FOR NOW !!! CREATE_DATE, ACTIVATION_DATE, FINALISATION_DATE,
  SPU.SALESNO, CONTACTNO, SPU.CURRENCYNO,
  SPU.CUSTORDNO, SPU.REFERENCE,
  PHYS_BRANCH, PHYS_STAFF,
---- SPU.PERIODID,
  --PLU (stock items)
  SPU.PLU_DESCRIPTION, SPU.STOCKGROUP, SPU.STOCKGROUP2, SPU.STOCKPRICEGROUP, SIZEID, COLOURID,
  --SKU (stock items)
  SKU_ISACTIVE, SKU_STATUS,
  SPU.SKU_BN, SPU.SKU_SN,
  SKU_SUPPLIERNO,
  --DAC (debtors account)
  ACCISACTIVE, SPU.ACCGROUP, SPU.ACCGROUP2, ACCPRICEGROUP,
--Measures
  --DAC
  AVEDAYS,
  --DIL (invoice line)
  ROUND(OQUANTITY, VDP.QTYDECIMALS) AS OQUANTITY,
  ROUND(OCOST, 2) AS OCOST,
  ROUND(OVALDISC, 2) AS OVALDISC,
  ROUND(OVAL, 2) AS OVAL,
  ROUND(OVALLIST, 2) AS OVALLIST,
  ROUND(OVALTAX, 2) AS OVALTAX,
  ROUND(OVALTAXINC, 2) AS OVALTAXINC,
  ROUND(OVALFC, 2) AS OVALFC,
  ROUND((OVAL-OCOST), 2) AS OPROFIT,
  ROUND(CASE WHEN OCOST <> 0 THEN (((OVAL-OCOST)/OCOST)*100) ELSE 100 END, 2) AS OMARKUPPC,
  ROUND(CASE WHEN OVAL <> 0 THEN (((OVAL-OCOST)/OVAL)*100) ELSE 100 END, 2) AS OMARGINPC,
  ROUND(CASE WHEN BUYRATE =0 THEN 1 ELSE BUYRATE END, 4) AS OEXCHRATE,
  ROUND(CASE WHEN OQUANTITY =0 THEN OCOST ELSE OCOST/ABS(OQUANTITY) END, COSTPRDECIMALS) AS OUNITCOST,
  ROUND(CASE WHEN OQUANTITY =0
             THEN OVAL/(case when isnull(BUYRATE, 0)=0 then 1 else BUYRATE end)
             ELSE (OVAL/(case when isnull(BUYRATE, 0)=0 then 1 else BUYRATE end))/ABS(OQUANTITY)
        END, VDP.SELLPRDECIMALS) AS OUNITPRICE,
  ROUND(CASE WHEN OQUANTITY =0
             THEN OVALTAXINC/(case when isnull(BUYRATE, 0)=0 then 1 else BUYRATE end)
             ELSE (OVALTAXINC/(case when isnull(BUYRATE, 0)=0 then 1 else BUYRATE end))/ABS(OQUANTITY)
        END, VDP.SELLPRDECIMALS) AS OUNITPRICETAXINC,
  ROUND(CASE WHEN OQUANTITY =0 THEN OVALFC ELSE OVALFC/ABS(OQUANTITY) END, VDP.SELLPRDECIMALS) AS OUNITPRICEFC,
  ROUND(OUNSUPPLIED, VDP.QTYDECIMALS) AS OUNSUPPLIED,
  ROUND(OUNINVOICED, VDP.QTYDECIMALS) AS OUNINVOICED,
  ROUND(OBACKORDERED, VDP.QTYDECIMALS) AS OBACKORDERED,
  ROUND(OCOSTPENDING, 2) AS OCOSTPENDING,
  ROUND(OVALPENDING, 2) AS OVALPENDING,
  DELIVERYCOUNT, INVOICECOUNT,
  WORKDAYS,
--Custom
--Number of rows
  FREQUENCY
--Join structure
FROM CTE_SPU SPU
  LEFT OUTER JOIN dbo.BRANCHES BRH WITH (NOLOCK) ON SPU.BRANCHNO = BRH.BRANCHNO
  LEFT OUTER JOIN dbo.BRANCHES BRP WITH (NOLOCK) ON SPU.PHYS_BRANCH = BRP.BRANCHNO
  LEFT OUTER JOIN dbo.DR_ACCS DAA WITH (NOLOCK) ON SPU.ACCNO = DAA.ACCNO
  LEFT OUTER JOIN dbo.DR_ACCS DAS WITH (NOLOCK) ON SPU.ACCNO_SALES = DAS.ACCNO
  LEFT OUTER JOIN dbo.DR_ACCS DAB WITH (NOLOCK) ON SPU.ACCNO_BRANCH = DAB.ACCNO
  LEFT OUTER JOIN dbo.CR_ACCS CAS WITH (NOLOCK) ON SPU.SKU_SUPPLIERNO = CAS.ACCNO
  LEFT OUTER JOIN dbo.DR_ACCGROUPS DG1 WITH (NOLOCK) ON SPU.ACCGROUP = DG1.ACCGROUP
  LEFT OUTER JOIN dbo.DR_ACCGROUP2S DG2 WITH (NOLOCK) ON SPU.ACCGROUP2 = DG2.ACCGROUP
  LEFT OUTER JOIN dbo.DR_PRICEGROUPS DGP WITH (NOLOCK) ON SPU.ACCPRICEGROUP = DGP.GROUPNO
  LEFT OUTER JOIN dbo.DR_PRICE_POLICY DPP WITH (NOLOCK) ON SPU.POLICYNO = DPP.POLICY_HDR
  LEFT OUTER JOIN dbo.STAFF SFS WITH (NOLOCK) ON SPU.SALESNO = SFS.STAFFNO
  LEFT OUTER JOIN dbo.STAFF SFP WITH (NOLOCK) ON SPU.PHYS_STAFF = SFP.STAFFNO
  LEFT OUTER JOIN dbo.GLACCS GLA WITH (NOLOCK) ON SPU.GLACCNO = GLA.ACCNO
  LEFT OUTER JOIN dbo.GLSUBACCS GLS WITH (NOLOCK) ON SPU.GLACCNO = GLS.ACCNO
                                                          AND SPU.GLSUBACC = GLS.SUBACCNO
  LEFT OUTER JOIN dbo.STOCK_LOCATIONS LOC WITH (NOLOCK) ON SPU.LOCATION = LOC.LOCNO
  LEFT OUTER JOIN dbo.CURRENCIES CUY WITH (NOLOCK) ON SPU.CURRENCYNO = CUY.CURRENCYNO
  LEFT OUTER JOIN dbo.TAX_RATES TAX WITH (NOLOCK) ON SPU.TAXNO = TAX.SEQNO
---- LEFT OUTER JOIN dbo.PERIOD_STATUS PES WITH (NOLOCK) ON SPU.PERIODID = PES.SEQNO
  LEFT OUTER JOIN dbo.STOCK_GROUPS SG1 WITH (NOLOCK) ON SPU.STOCKGROUP = SG1.GROUPNO
  LEFT OUTER JOIN dbo.STOCK_GROUP2S SG2 WITH (NOLOCK) ON SPU.STOCKGROUP2 = SG2.GROUPNO
  LEFT OUTER JOIN dbo.STOCK_PRICEGROUPS SGP WITH (NOLOCK) ON SPU.STOCKPRICEGROUP = SGP.GROUPNO
  LEFT OUTER JOIN dbo.BILLOMAT_HDR BOM WITH (NOLOCK) ON SPU.BOMCODE = BOM.BILLCODE
  LEFT OUTER JOIN CTE_PRECISIONS VDP WITH (NOLOCK) ON VDP.SEQNO=1


View: VW_FACT_SALESTRANS
NameVW_FACT_SALESTRANS
Note
Code-- Sales fact view for debtors invoices
CREATE VIEW [dbo].[VW_FACT_SALESTRANS]
-- Indexed view
WITH SCHEMABINDING
AS
/** Sales fact view for debtors DR_TRANS driven **/

/**
setup CTEs in such a way as they can be extended e.g with custom or extra fields.
 Hopefully the Dimensions and Measures tabs could be programatically recognised.
 Columns above Dimensions are only used internally for joins using the DTEs
   but are still converted to common aliases as part of the DTE definition.
**/
WITH
-- DR_ACCS ------------------------------------------------------------------------
CTE_DAC
  (DAC_ACCNO,
  -- Internal (alias)
  DAC_HEAD_ACCNO,
  -- Dimensions (alias)
  ACCISACTIVE, ACCGROUP, ACCGROUP2, ACCPRICEGROUP,
  -- Measures (alias)
  AVEDAYS,
  -- Custom (alias)
  CTE)
AS
  (SELECT ACCNO,
  -- Internal (database)
  HEAD_ACCNO,
  -- Dimensions (database)
  ISACTIVE, ACCGROUP, ACCGROUP2, PRICEGROUP,
  -- Measures (database)
  AVE_DAYS_TO_PAY,
  -- Custom (database)
  'DAC'
  FROM dbo.DR_ACCS DAC WITH (NOLOCK)
  )
,
-- CONTACTS ------------------------------------------------------------------------
CTE_CON (CON_SEQNO,
  -- Dimensions (alias)
  CONT_ISACTIVE,
  -- Measures (alias)
  CONT_NAME,
  -- Custom (alias)
  CTE) AS (SELECT SEQNO,
  -- Dimensions (database)
  ISACTIVE,
  -- Measures (database)
  FULLNAME,
  -- Custom (database)
  'CON'
  FROM dbo.CONTACTS CON WITH (NOLOCK)
),
-- DR_TRANS (invoices) ------------------------------------------------------------------------
CTE_DTR (
  -- Dimensions (alias)
  TRANSEQNO, TRANSTYPE, INVNO,
  REF1, REF2, REF3, SORDER,
  BRANCHNO,
  SESSIONID, SHIFTNO, TERMINALID,
  ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  DUEDATE, TRANSDATE,
  POSTTIME,
  SALESNO, CONTACTNO, CURRENCYNO,
  CUSTORDNO, REFERENCE,
  PHYS_BRANCH, PHYS_STAFF, PERIODID,
  PTNO,
  TAXNO,
  GLACCNO, GLSUBACC,
  CAMPAIGN_WAVE_SEQNO,
  -- Measures (alias)
  IQUANTITY,
  ICOST,
  IVALDISC,
  IVAL,
  IVALTAX,
  IVALTAXINC,
  IVALUNALLOC,
  IVALFC,
  IVALUNALLOCFC,
  INUMLINES,
  -- Custom (alias)
  CTE) AS (SELECT
  -- Dimensions (database)
  SEQNO, TRANSTYPE, ISNULL(INVNO, '') AS INVNO,
  ISNULL(REF1, '') AS REF1, ISNULL(REF2, '') AS REF2, ISNULL(REF3, '') AS REF3, ISNULL(SO_SEQNO, -1) AS SORDER,
  ISNULL(BRANCHNO, -1) AS BRANCHNO,
  ISNULL(SESSION_ID, -1) AS SESSIONID, ISNULL(SHIFTNO, -1) AS SHIFTNO, ISNULL(TERMINAL_ID, '') AS TERMINALID,
  ACCNO,
  ISNULL(SALES_ACCNO, ACCNO) AS ACCNO_SALES,
  ISNULL(BRANCH_ACCNO, -1) AS ACCNO_BRANCH,
  ISNULL(DUEDATE, ISNULL(TRANSDATE, GETDATE())) AS DUEDATE, ISNULL(TRANSDATE, GETDATE()) AS TRANSDATE,
  ISNULL(POSTTIME, GETDATE()) AS POSTTIME,
  ISNULL(SALESNO, -1) AS SALESNO, ISNULL(CONTACT_SEQNO, -1) AS CONTACT_SEQNO, ISNULL(CURRENCYNO, -1) AS CURRENCYNO,
  ISNULL(CUSTORDERNO, ''), ISNULL(ORD_REF, ''),
  ISNULL(PHYS_BRANCH, -1) AS PHYS_BRANCH, ISNULL(PHYS_STAFF, -1) AS PHYS_STAFF, ISNULL(PERIOD_SEQNO, -1) AS PERIOD_SEQNO,
  ISNULL(PTNO, CASE WHEN TRANSTYPE <> 4
                   THEN -1
                   ELSE ISNULL((SELECT PTNO FROM dbo.PAYMENT_TYPES WHERE SHORTNAME LIKE REF1), -1)
              END) AS PTNO,
  ISNULL(TAXRATE_NO, -1) AS TAXNO,
  CASE WHEN ISNULL(GLCODE, 0) > 0
       THEN GLCODE
       ELSE ISNULL((SELECT DEBTORS FROM dbo.GL_CONTROL), 0)
  END AS GLACCNO,
  CASE WHEN ISNULL(GLSUBCODE, -1) > 0
       THEN GLSUBCODE
       ELSE ISNULL((SELECT SUB_DEBTORS FROM dbo.GL_CONTROL), 0)
  END AS GLSUBACC,
  CAMPAIGN_WAVE_SEQNO,
  -- Measures (database)
  IQUANTITY,
  ICOST,
  IVALDISC,
  (SUBTOTAL/EXCHRATE) AS IVAL,
  (TAXTOTAL/EXCHRATE) AS IVALTAX,
  (AMOUNT/EXCHRATE) AS IVALTAXINC,
  ((AMOUNT-ALLOCATEDBAL)/EXCHRATE) AS IVALUNALLOC,
  SUBTOTAL AS IVALFC,
  (AMOUNT-ALLOCATEDBAL) AS IVALUNALLOCFC,
  INUMLINES,
  -- Custom (database)
  'DTR'
  FROM dbo.DR_TRANS DTR WITH (NOLOCK)
  LEFT OUTER JOIN (SELECT HDR_SEQNO, SUM(QUANTITY) AS IQUANTITY, SUM(QUANTITY*UNITCOST) AS ICOST,
  SUM((QUANTITY*UNITPRICE*DISCOUNT/100)/(case when isnull(EXCHRATE, 0)=0 then 1 else EXCHRATE end)) AS IVALDISC,
  COUNT(HDR_SEQNO) AS INUMLINES
  FROM dbo.DR_INVLINES GROUP BY HDR_SEQNO) DIL ON DIL.HDR_SEQNO = DTR.SEQNO
  WHERE SEQNO >= ISNULL((
                 SELECT MINTRANSEQNO FROM dbo.PERIOD_STATUS PS
                 WHERE LEDGER ='D'
                 AND PS.AGE = (SELECT ANALYSIS_AGE_LIMIT FROM dbo.LEDGER_PERIODS LP WHERE LP.SEQNO=1))
                 , 0)
),
-- Essentials Precisions --------------------------------------------------------------------
CTE_PROFILES AS (
    SELECT PF.FIELDNAME,
           CASE WHEN(PV.FIELDVALUE IS NULL OR PV.FIELDVALUE = '')
                THEN isnull(PF.DEFAULTVALUE, 0) ELSE PV.FIELDVALUE
           END AS FIELDVALUE
    FROM dbo.PROFILE_FIELDS PF
    LEFT OUTER JOIN dbo.PROFILE_VALUES PV ON (PF.FIELDNAME = PV.FIELDNAME)
    WHERE PF.FIELDLEVEL=1
),
CTE_PRECISIONS AS (
    SELECT SEQNO,
           CAST(BILLCOSTDECIMALS AS INT) AS BILLCOSTDECIMALS,
           CAST(BILLQTYDECIMALS AS INT) AS BILLQTYDECIMALS,
           CAST(COSTPRDECIMALS AS INT) AS COSTPRDECIMALS,
           CAST(DISCOUNTDECIMALS AS INT) AS DISCOUNTDECIMALS,
           CAST(QTYDECIMALS AS INT) AS QTYDECIMALS,
           CAST(SELLPRDECIMALS AS INT) AS SELLPRDECIMALS,
           CAST(GLBRANCHSIZE AS INT) AS GLBRANCHSIZE,
           CAST(GLACCNOSIZE AS INT) AS GLACCNOSIZE,
           CAST(GLSUBACCSIZE AS INT) AS GLSUBACCSIZE
    FROM (SELECT 'SEQNO' AS FIELDNAME, '1' AS FIELDVALUE
          UNION
          SELECT FIELDNAME, FIELDVALUE FROM CTE_PROFILES
         ) AS PivotData
         PIVOT (MAX(FIELDVALUE)
                FOR FIELDNAME
                 IN ([SEQNO],
                     [BILLCOSTDECIMALS],
                     [BILLQTYDECIMALS],
                     [COSTPRDECIMALS],
                     [DISCOUNTDECIMALS],
                     [QTYDECIMALS],
                     [SELLPRDECIMALS],
                     [GLBRANCHSIZE],
                     [GLACCNOSIZE],
                     [GLSUBACCSIZE])
               ) AS PivotTable
),
-- Trans Permutations --------------------------------------------------------------------
CTE_SPU (
 --Dimensions (alias)
  TRANSEQNO, TRANSTYPE, INVNO,
  REF1, REF2, REF3, SORDER,
  BRANCHNO, SESSIONID,
  SHIFTNO, TERMINALID,
  ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  DUEDATE, TRANSDATE, POSTTIME,
  SALESNO, CONTACTNO, CURRENCYNO,
  CUSTORDNO, REFERENCE,
  PHYS_BRANCH, PHYS_STAFF, PERIODID, PTNO, TAXNO,
  GLACCNO, GLSUBACC,
  CAMPAIGN_WAVE_SEQNO,
  ACCISACTIVE,
  ACCGROUP, ACCGROUP2,
  ACCPRICEGROUP,
 --Measures (alias)
  AVEDAYS,
  IQUANTITY, ICOST, IVALDISC, IVAL, IVALTAX, IVALTAXINC, IVALUNALLOC, IVALFC, IVALUNALLOCFC, INUMLINES,
  -- Custom (alias)
  CTE, FREQUENCY) AS (SELECT
 -- Dimensions (database)
  --DTR (drtrans)
  TRANSEQNO, TRANSTYPE, INVNO,
  REF1, REF2, REF3, SORDER,
  BRANCHNO, SESSIONID,
  SHIFTNO, TERMINALID,
  ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  DUEDATE, TRANSDATE, POSTTIME,
  SALESNO, CONTACTNO, CURRENCYNO,
  CTE_DTR.CUSTORDNO, CTE_DTR.REFERENCE,
  PHYS_BRANCH, PHYS_STAFF, PERIODID, PTNO, TAXNO,
  GLACCNO, GLSUBACC,
  CAMPAIGN_WAVE_SEQNO,
  --DAC (debtors account)
  ISNULL(ACCISACTIVE, 'N') AS ACCISACTIVE,
  ISNULL(ACCGROUP, -1) AS ACCGROUP,
  ISNULL(ACCGROUP2, -1) AS ACCGROUP2,
  ISNULL(ACCPRICEGROUP, -1) AS ACCPRICEGROUP,
 --Measures
  --DAC
  MIN(ISNULL(AVEDAYS, 0)) AS AVEDAYS,
  --DTR (drtrans)
  SUM(ISNULL(IQUANTITY, 0)) AS IQUANTITY,
  SUM(ISNULL(ICOST, 0)) AS ICOST,
  SUM(ISNULL(IVALDISC, 0)) AS IVALDISC,
  SUM(ISNULL(IVAL, 0)) AS IVAL,
  SUM(ISNULL(IVALTAX, 0)) AS IVALTAX,
  SUM(ISNULL(IVALTAXINC, 0)) AS IVALTAXINC,
  SUM(ISNULL(IVALUNALLOC, 0)) AS IVALUNALLOC,
  SUM(ISNULL(IVALFC, 0)) AS IVALFC,
  SUM(ISNULL(IVALUNALLOCFC, 0)) AS IVALUNALLOCFC,
  SUM(ISNULL(INUMLINES, 0)) AS INUMLINES,
 --Custom
 --Number of rows (and code marker)
  'SPU', COUNT(*) AS FREQUENCY
-- Join structure
FROM CTE_DTR
  LEFT OUTER JOIN CTE_DAC ON CTE_DAC.DAC_ACCNO = CTE_DTR.ACCNO
  LEFT OUTER JOIN CTE_CON ON CTE_CON.CON_SEQNO = CTE_DTR.CONTACTNO
GROUP BY
  --DTR (drtrans)
  TRANSEQNO, TRANSTYPE, INVNO,
  REF1, REF2, REF3, SORDER,
  BRANCHNO, SESSIONID,
  SHIFTNO, TERMINALID,
  ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  DUEDATE, TRANSDATE, POSTTIME,
  SALESNO, CONTACTNO, CURRENCYNO,
  CTE_DTR.CUSTORDNO, CTE_DTR.REFERENCE,
  PHYS_BRANCH, PHYS_STAFF, PERIODID, PTNO, TAXNO,
  GLACCNO, GLSUBACC,
  CTE_DTR.CAMPAIGN_WAVE_SEQNO,
  --DAC (debtors account)
  ISNULL(ACCISACTIVE, 'N'),
  ISNULL(ACCGROUP, -1),
  ISNULL(ACCGROUP2, -1),
  ISNULL(ACCPRICEGROUP, -1)
)

/** Define the Fact view **/
SELECT
 --Normalised (lookup)
 --Normalised (lookup)
  (CAST(SPU.BRANCHNO AS VARCHAR) + '.' + ISNULL(RTRIM(BRH.BRANCHNAME), 'No Branch')) AS BRANCHNAME,
  (CAST(SPU.PHYS_BRANCH AS VARCHAR) + '.' + ISNULL(RTRIM(BRP.BRANCHNAME), 'No Branch')) AS BRANCHNAMEPHYS,
  (CAST(SPU.ACCNO AS VARCHAR) + '.' + ISNULL(RTRIM(DAA.NAME), 'No Entered Debtor')) AS ACCNAME_ENTERED,
  (CAST(SPU.ACCNO_SALES AS VARCHAR) + '.' + ISNULL(RTRIM(DAS.NAME), 'No Sales Debtor')) AS ACCNAME_SALES,
  (CAST(SPU.ACCNO_BRANCH AS VARCHAR) + '.' + ISNULL(RTRIM(DAB.NAME), 'No Branch Debtor')) AS ACCNAME_BRANCH,
  (CAST(SPU.ACCGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(DG1.GROUPNAME), 'No Debtor Account Group')) AS ACCGROUP1NAME,
  (CAST(SPU.ACCGROUP2 AS VARCHAR) + '.' + ISNULL(RTRIM(DG2.GROUPNAME), 'No Debtor Account Group 2')) AS ACCGROUP2NAME,
  (CAST(SPU.ACCPRICEGROUP AS VARCHAR) + '.' + ISNULL(RTRIM(DGP.GROUPNAME), 'No Debtor Price Group')) AS ACCGROUPPNAME,
  (CAST(SPU.SALESNO AS VARCHAR) + '.' + ISNULL(RTRIM(SFS.NAME), 'No Manager')) AS STAFFNAME,
  (CAST(SPU.PHYS_STAFF AS VARCHAR) + '.' + ISNULL(RTRIM(SFP.NAME), 'No Staff')) AS STAFFNAMEPHYS,
  (RIGHT('000000000' + CAST(SPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(SPU.GLSUBACC AS VARCHAR), GLSUBACCSIZE)) AS GLCODE,
  (RIGHT('000000000' + CAST(SPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   ISNULL(RTRIM(GLA.NAME), 'No GL Account')) AS GLACCNAME,
  (RIGHT('000000000' + CAST(SPU.GLACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(SPU.GLSUBACC AS VARCHAR), GLSUBACCSIZE) + '.' +
   ISNULL(ISNULL(RTRIM(GLS.NAME), RTRIM(GLA.NAME)), 'No GL SubAccount')) AS GLSUBACCNAME,
  (CAST(SPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRNAME), 'No Currency')) AS CURRENCYNAME,
  (CAST(SPU.CURRENCYNO AS VARCHAR) + '.' + ISNULL(RTRIM(CUY.CURRCODE), 'No Currency')) AS CURRENCYCODE,
  (CAST(SPU.TAXNO AS VARCHAR) + '.' + ISNULL(RTRIM(TAX.NAME), 'No Tax')) AS TAXNAME,
  ISNULL(PES.AGE, -1) AS AGE,
  ISNULL(PES.YEARAGE, -1) AS YEARAGE,
  (CAST(ISNULL(SPU.PERIODID, -1) AS VARCHAR) + '.' + ISNULL(RTRIM(PES.PERIODNAME), 'No Period')) AS PERIODNAME,
  SPU.CAMPAIGN_WAVE_SEQNO,
--From Sales Permutations
  --DTR (drtrans)
  TRANSEQNO, TRANSTYPE, INVNO,
  REF1, REF2, REF3, SORDER,
  SPU.BRANCHNO, SESSIONID,
  SHIFTNO, TERMINALID,
  SPU.ACCNO, ACCNO_SALES, ACCNO_BRANCH,
  DUEDATE, TRANSDATE, POSTTIME,
  SPU.SALESNO, CONTACTNO, SPU.CURRENCYNO,
  CUSTORDNO, REFERENCE,
  PHYS_BRANCH, PHYS_STAFF, PERIODID, PTNO, TAXNO,
  GLACCNO, SPU.GLSUBACC,
  --DAC (debtors account)
  ACCISACTIVE, SPU.ACCGROUP, SPU.ACCGROUP2, ACCPRICEGROUP,
--Measures
  --DAC
  AVEDAYS,
  --DIL (invoice line)
  ROUND(IQUANTITY, VDP.QTYDECIMALS) AS IQUANTITY,
  ROUND(ICOST, 2) AS ICOST,
  ROUND(IVALDISC, 2) AS IVALDISC,
  ROUND(IVAL, 2) AS IVAL,
  ROUND(IVALTAX, 2) AS IVALTAX,
  ROUND(IVALTAXINC, 2) AS IVALTAXINC,
  ROUND(IVALUNALLOC, 2) AS IVALUNALLOC,
  ROUND(IVALFC, 2) AS IVALFC,
  ROUND(IVALUNALLOCFC, 2) AS IVALUNALLOCFC,
  INUMLINES,
  ROUND((IVAL-ICOST), 2) AS IPROFIT,
  ROUND(CASE WHEN ICOST <> 0 THEN (((IVAL-ICOST)/ICOST)*100) ELSE 100 END, 2) AS IMARKUPPC,
  ROUND(CASE WHEN IVAL <> 0 THEN (((IVAL-ICOST)/IVAL)*100) ELSE 100 END, 2) AS IMARGINPC,
  ROUND(CASE WHEN IVALFC =0 THEN 1 ELSE IVAL/IVALFC END, 4) AS IEXCHRATE,
  ROUND(CASE WHEN IQUANTITY =0 THEN ICOST ELSE ICOST/ABS(IQUANTITY) END, VDP.COSTPRDECIMALS) AS IUNITCOST,
  ROUND(CASE WHEN IQUANTITY =0 THEN IVAL ELSE IVAL/ABS(IQUANTITY) END, VDP.SELLPRDECIMALS) AS IUNITPRICE,
  ROUND(CASE WHEN IQUANTITY =0 THEN IVAL ELSE IVALTAXINC/ABS(IQUANTITY) END, VDP.SELLPRDECIMALS) AS IUNITPRICETAXINC,
  ROUND(CASE WHEN IQUANTITY =0 THEN IVALFC ELSE IVALFC/ABS(IQUANTITY) END, VDP.SELLPRDECIMALS) AS IUNITPRICEFC,

--Custom
--Number of rows
  FREQUENCY
-- Join structure
FROM CTE_SPU SPU
  LEFT OUTER JOIN dbo.BRANCHES BRH WITH (NOLOCK) ON SPU.BRANCHNO = BRH.BRANCHNO
  LEFT OUTER JOIN dbo.BRANCHES BRP WITH (NOLOCK) ON SPU.PHYS_BRANCH = BRP.BRANCHNO
  LEFT OUTER JOIN dbo.DR_ACCS DAA WITH (NOLOCK) ON SPU.ACCNO = DAA.ACCNO
  LEFT OUTER JOIN dbo.DR_ACCS DAS WITH (NOLOCK) ON SPU.ACCNO_SALES = DAS.ACCNO
  LEFT OUTER JOIN dbo.DR_ACCS DAB WITH (NOLOCK) ON SPU.ACCNO_BRANCH = DAB.ACCNO
  LEFT OUTER JOIN dbo.DR_ACCGROUPS DG1 WITH (NOLOCK) ON SPU.ACCGROUP = DG1.ACCGROUP
  LEFT OUTER JOIN dbo.DR_ACCGROUP2S DG2 WITH (NOLOCK) ON SPU.ACCGROUP2 = DG2.ACCGROUP
  LEFT OUTER JOIN dbo.DR_PRICEGROUPS DGP WITH (NOLOCK) ON SPU.ACCPRICEGROUP = DGP.GROUPNO
  LEFT OUTER JOIN dbo.STAFF SFS WITH (NOLOCK) ON SPU.SALESNO = SFS.STAFFNO
  LEFT OUTER JOIN dbo.STAFF SFP WITH (NOLOCK) ON SPU.PHYS_STAFF = SFP.STAFFNO
  LEFT OUTER JOIN dbo.GLACCS GLA WITH (NOLOCK) ON SPU.GLACCNO = GLA.ACCNO
  LEFT OUTER JOIN dbo.GLSUBACCS GLS WITH (NOLOCK) ON SPU.GLACCNO = GLS.ACCNO
                                                          AND SPU.GLSUBACC = GLS.SUBACCNO
  LEFT OUTER JOIN dbo.CURRENCIES CUY WITH (NOLOCK) ON SPU.CURRENCYNO = CUY.CURRENCYNO
  LEFT OUTER JOIN dbo.TAX_RATES TAX WITH (NOLOCK) ON SPU.TAXNO = TAX.SEQNO
  LEFT OUTER JOIN dbo.PERIOD_STATUS PES WITH (NOLOCK) ON SPU.PERIODID = PES.SEQNO
  LEFT OUTER JOIN CTE_PRECISIONS VDP WITH (NOLOCK) ON VDP.SEQNO=1


View: VW_FACT_STOCK
NameVW_FACT_STOCK
Note
Code-- GL fact view for Stock Items
CREATE VIEW [dbo].[VW_FACT_STOCK]
-- Indexed view
WITH SCHEMABINDING
AS
/** Stock fact view **/

/**
setup CTEs in such a way as they can be extended e.g with custom or extra fields.
 Hopefully the Dimensions and Measures tabs could be programatically recognised.
 Columns above Dimensions are only used internally for joins using the DTEs
   but are still converted to common aliases as part of the DTE definition.
**/
WITH
CTE_PLU
  (
  -- Dimensions (alias)
  PLU, PLU_DESCRIPTION,
  PLU_DISCOUNTABLE, PLU_VARIABLECOST, SIZEID, COLOURID, DIMENSIONS,
  STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, STOCKCLASS,
  BARCODE1, BARCODE2, BARCODE3,
  GLSALESACCNO, GLSALESSUBACC,
  GLPURCHACCNO, GLPURCHSUBACC,
  GLCOSACCNO, GLCOSSUBACC,
  SKU,
  -- Measures (alias)
  QUANTITYTHISMONTH, VALUETHISMONTH,
  QUANTITYLASTMONTH, VALUELASTMONTH,
  QUANTITTHISYYEAR, VALUETHISYEAR,
  QUANTITYLASTYEAR, VALUELASTYEAR,
  -- Custom (alias)
  CTE)
AS
  (SELECT
  -- Dimensions (database)
  STOCKCODE, DESCRIPTION,
  IS_DISCOUNTABLE, VARIABLECOST,
  X_SIZEID, X_COLOURID, DIMENSIONS,
  STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, STOCK_CLASSIFICATION,
  BARCODE1, BARCODE2, BARCODE3,
  SALES_GL_CODE, SALES_GLSUBCODE,
  PURCH_GL_CODE, PURCH_GLSUBCODE,
  COS_GL_CODE, COS_GLSUBCODE,
  CASE WHEN ISNULL(UPDATEITEM_CODE, ' ') = ' '
       THEN STOCKCODE
       ELSE UPDATEITEM_CODE
  END AS SKU,
  -- Measures (database)
  MONTHUNITS, MONTHVALUE,
  LASTMONTHUNITS, LASTMONTHVALUE,
  YEARUNITS, YEARVALUE,
  LASTYEARUNITS, LASTYEARVALUE,
  -- Custom (database)
  'PLU' AS CTE
  FROM dbo.STOCK_ITEMS PLU WITH (NOLOCK)
),
CTE_SKU
  (
  -- Dimensions (alias)
  SKU, SKU_DESCRIPTION,
  SKU_ISACTIVE, SKU_STATUS, SKU_SN, SKU_BN, SKU_RESTRICTED,
  SKU_SUPPLIERNO,
  -- Measures (alias)
  QUANTITYONHAND, VALUEONHAND, WEIGHT, CUBIC,
  -- Custom (alias)
  CTE)
AS
(SELECT
  -- Dimensions (database)
  STOCKCODE, DESCRIPTION,
  ISACTIVE, STATUS, HAS_SN, HAS_BN, RESTRICTED_ITEM,
  SUPPLIERNO,
  -- Measures (database)
  TOTALSTOCK AS QUANTITYONHAND,
  CASE (SELECT CAST(FIELDVALUE AS INTEGER)
          FROM dbo.PROFILE_VALUES
          WHERE FIELDNAME = 'STOCKCOSTMETHOD' AND PROFILEID = -1)
        WHEN 2 THEN ISNULL(STDCOST, 0)
        WHEN 1 THEN ISNULL(LATESTCOST, 0)
        ELSE ISNULL(AVECOST, 0)
  END * TOTALSTOCK AS VALUEONHAND,
  WEIGHT, CUBIC,
  'SKU'
  -- Custom (database)
   FROM dbo.STOCK_ITEMS SKU WITH (NOLOCK)
),
-- Essentials Precisions --------------------------------------------------------------------
CTE_PROFILES AS (
    SELECT PF.FIELDNAME,
           CASE WHEN(PV.FIELDVALUE IS NULL OR PV.FIELDVALUE = '')
                THEN isnull(PF.DEFAULTVALUE, 0) ELSE PV.FIELDVALUE
           END AS FIELDVALUE
    FROM dbo.PROFILE_FIELDS PF
    LEFT OUTER JOIN dbo.PROFILE_VALUES PV ON (PF.FIELDNAME = PV.FIELDNAME)
    WHERE PF.FIELDLEVEL=1
),
CTE_PRECISIONS AS (
    SELECT SEQNO,
           CAST(BILLCOSTDECIMALS AS INT) AS BILLCOSTDECIMALS,
           CAST(BILLQTYDECIMALS AS INT) AS BILLQTYDECIMALS,
           CAST(COSTPRDECIMALS AS INT) AS COSTPRDECIMALS,
           CAST(DISCOUNTDECIMALS AS INT) AS DISCOUNTDECIMALS,
           CAST(QTYDECIMALS AS INT) AS QTYDECIMALS,
           CAST(SELLPRDECIMALS AS INT) AS SELLPRDECIMALS,
           CAST(GLBRANCHSIZE AS INT) AS GLBRANCHSIZE,
           CAST(GLACCNOSIZE AS INT) AS GLACCNOSIZE,
           CAST(GLSUBACCSIZE AS INT) AS GLSUBACCSIZE
    FROM (SELECT 'SEQNO' AS FIELDNAME, '1' AS FIELDVALUE
          UNION
          SELECT FIELDNAME, FIELDVALUE FROM CTE_PROFILES
         ) AS PivotData
         PIVOT (MAX(FIELDVALUE)
                FOR FIELDNAME
                 IN ([SEQNO],
                     [BILLCOSTDECIMALS],
                     [BILLQTYDECIMALS],
                     [COSTPRDECIMALS],
                     [DISCOUNTDECIMALS],
                     [QTYDECIMALS],
                     [SELLPRDECIMALS],
                     [GLBRANCHSIZE],
                     [GLACCNOSIZE],
                     [GLSUBACCSIZE])
               ) AS PivotTable
)

SELECT
-- Dimensions
  --Normalised

  (RIGHT('000000000' + CAST(GLSALESACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(GLSALESSUBACC AS VARCHAR), GLSUBACCSIZE)) AS GLSALESCODE,
  (RIGHT('000000000' + CAST(GLSALESACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   ISNULL(RTRIM(GSA.NAME), 'No GL Account')) AS GLSALESNAME,
  (RIGHT('000000000' + CAST(GLSALESACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(GLSALESSUBACC AS VARCHAR), GLSUBACCSIZE) + '.' +
   ISNULL(ISNULL(RTRIM(GSS.NAME), RTRIM(GSA.NAME)), 'No GL SubAccount')) AS GLSALESSUBNAME,


  (RIGHT('000000000' + CAST(GLPURCHACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(GLPURCHSUBACC AS VARCHAR), GLSUBACCSIZE)) AS GLPURCHCODE,
  (RIGHT('000000000' + CAST(GLPURCHACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   ISNULL(RTRIM(GPA.NAME), 'No GL Account')) AS GLPURCHNAME,
  (RIGHT('000000000' + CAST(GLPURCHACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(GLPURCHSUBACC AS VARCHAR), GLSUBACCSIZE) + '.' +
   ISNULL(ISNULL(RTRIM(GPS.NAME), RTRIM(GPA.NAME)), 'No GL SubAccount')) AS GLPURCHSUBNAME,


  (RIGHT('000000000' + CAST(GLCOSACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(GLCOSSUBACC AS VARCHAR), GLSUBACCSIZE)) AS GLCOSCODE,
  (RIGHT('000000000' + CAST(GLCOSACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   ISNULL(RTRIM(GCA.NAME), 'No GL Account')) AS GLCOSNAME,
  (RIGHT('000000000' + CAST(GLCOSACCNO AS VARCHAR), GLACCNOSIZE) + '-' +
   RIGHT('000000000' + CAST(GLCOSSUBACC AS VARCHAR), GLSUBACCSIZE) + '.' +
   ISNULL(ISNULL(RTRIM(GCS.NAME), RTRIM(GCA.NAME)), 'No GL SubAccount')) AS GLCOSSUBNAME,

  (CAST(CAS.ACCNO AS VARCHAR) + '.' + ISNULL(CAS.NAME, 'No Supplier')) AS ACCNAME_SUPPLIER,
  (CAST(SG1.GROUPNO AS VARCHAR) + '.' + ISNULL(SG1.GROUPNAME, 'No Stock Group1')) AS STOCKGROUP1NAME,
  (CAST(SG2.GROUPNO AS VARCHAR) + '.' + ISNULL(SG2.GROUPNAME, 'No Stock Group2')) AS STOCKGROUP2NAME,
  (CAST(SGP.GROUPNO AS VARCHAR) + '.' + ISNULL(SGP.GROUPNAME, 'No Stock Price Group')) AS STOCKGROUPPNAME,
  (RTRIM(PLU) + '.' + RTRIM(PLU_DESCRIPTION)) AS PLU_NAME,
  (RTRIM(PLU.SKU) + '.' + RTRIM(SKU_DESCRIPTION)) AS SKU_NAME,
  --PLU
  PLU, PLU_DESCRIPTION,
  PLU_DISCOUNTABLE, PLU_VARIABLECOST, SIZEID, COLOURID, DIMENSIONS,
  STOCKGROUP, STOCKGROUP2, STOCKPRICEGROUP, STOCKCLASS,
  BARCODE1, BARCODE2, BARCODE3,
  ISNULL(GLSALESACCNO, 0) AS GLSALESACCNO,
  ISNULL(GLSALESSUBACC, 0) AS GLSALESSUBACC,
  ISNULL(GLPURCHACCNO, 0) AS GLPURCHACCNO,
  ISNULL(GLPURCHSUBACC, 0) AS GLPURCHSUBACC,
  ISNULL(GLCOSACCNO, 0) AS GLCOSACCNO,
  ISNULL(GLCOSSUBACC, 0) AS GLCOSSUBACC,
  PLU.SKU,
  --SKU
  SKU_DESCRIPTION,
  SKU_ISACTIVE, SKU_STATUS, SKU_SN, SKU_BN, SKU_RESTRICTED,
  SKU_SUPPLIERNO,
 -- Measures
  --PLU
  ROUND(ISNULL(QUANTITYTHISMONTH, 0), QTYDECIMALS) AS QUANTITYTHISMONTH,
  ROUND(ISNULL(VALUETHISMONTH, 0), 2) AS VALUETHISMONTH,
  ROUND(ISNULL(QUANTITYLASTMONTH, 0), QTYDECIMALS) AS QUANTITYLASTMONTH,
  ROUND(ISNULL(VALUELASTMONTH, 0), 2) AS VALUELASTMONTH,
  ROUND(ISNULL(QUANTITTHISYYEAR, 0), QTYDECIMALS) AS QUANTITYTHISYEAR,
  ROUND(ISNULL(VALUETHISYEAR, 0), 2) AS VALUETHISYEAR,
  ROUND(ISNULL(QUANTITYLASTYEAR, 0), QTYDECIMALS) AS QUANTITYLASTYEAR,
  ROUND(ISNULL(VALUELASTYEAR, 0), 2) AS VALUELASTYEAR,
  --SKU
  ROUND(ISNULL(QUANTITYONHAND, 0), QTYDECIMALS) AS QUANTITYONHAND,
  ROUND(ISNULL(VALUEONHAND, 0), 2) AS VALUEONHAND,
  ISNULL(WEIGHT, 0) AS WEIGHT,
  ISNULL(CUBIC, 0) AS CUBIC
-- Custom
-- Join structure
  FROM CTE_PLU PLU
  LEFT OUTER JOIN CTE_SKU SKU WITH (NOLOCK) ON PLU.SKU = SKU.SKU
  LEFT OUTER JOIN dbo.CR_ACCS CAS WITH (NOLOCK) ON SKU.SKU_SUPPLIERNO = CAS.ACCNO
  LEFT OUTER JOIN dbo.GLACCS GSA WITH (NOLOCK) ON PLU.GLSALESACCNO = GSA.ACCNO
  LEFT OUTER JOIN dbo.GLSUBACCS GSS WITH (NOLOCK) ON PLU.GLSALESACCNO = GSS.ACCNO
                                                             AND PLU.GLSALESSUBACC = GSS.SUBACCNO
  LEFT OUTER JOIN dbo.GLACCS GPA WITH (NOLOCK) ON PLU.GLPURCHACCNO = GPA.ACCNO
  LEFT OUTER JOIN dbo.GLSUBACCS GPS WITH (NOLOCK) ON PLU.GLPURCHACCNO = GPS.ACCNO
                                                             AND PLU.GLPURCHSUBACC = GPS.SUBACCNO
  LEFT OUTER JOIN dbo.GLACCS GCA WITH (NOLOCK) ON PLU.GLCOSACCNO = GCA.ACCNO
  LEFT OUTER JOIN dbo.GLSUBACCS GCS WITH (NOLOCK) ON PLU.GLCOSACCNO = GCS.ACCNO
                                                             AND PLU.GLCOSSUBACC = GCS.SUBACCNO
  LEFT OUTER JOIN dbo.STOCK_GROUPS SG1 WITH (NOLOCK) ON PLU.STOCKGROUP = SG1.GROUPNO
  LEFT OUTER JOIN dbo.STOCK_GROUP2S SG2 WITH (NOLOCK) ON PLU.STOCKGROUP2 = SG2.GROUPNO
  LEFT OUTER JOIN dbo.STOCK_PRICEGROUPS SGP WITH (NOLOCK) ON PLU.STOCKPRICEGROUP = SGP.GROUPNO
  LEFT OUTER JOIN dbo.STOCK_CLASSIFICATIONS SGA WITH (NOLOCK) ON PLU.STOCKCLASS =SGA.CLASSNO
  LEFT OUTER JOIN CTE_PRECISIONS VDP WITH (NOLOCK) ON VDP.SEQNO=1


View: VW_NOACTIVITYCUSTWITHIN30DAYS
NameVW_NOACTIVITYCUSTWITHIN30DAYS
Note
CodeCREATE VIEW [dbo].[VW_NOACTIVITYCUSTWITHIN30DAYS]
AS
SELECT DR_ACCS.ACCNO, DR_ACCS.NAME,
   DR_ACCS.ADDRESS1, DR_ACCS.ADDRESS2,
   DR_ACCS.ADDRESS3, DR_ACCS.ADDRESS4,
   DR_ACCS.ADDRESS5, DR_ACCS.PHONE,
   DR_ACCS.FAX, DR_ACCS.EMAIL, DR_ACCS.WEBSITE,
   DR_ACCS.ISACTIVE
FROM DR_ACCS DR_ACCS
WHERE DR_ACCS.ACCNO NOT IN (
  SELECT SUBSTRING(COMPANYID, 2, (LEN(COMPANYID)))
  FROM tasks
  WHERE SUBSTRING(COMPANYID, 1, 1)='D'
  and DateDiff(day, START_DATETIME, GETDATE())<=30)


View: VW_OPPORTUNITIES_TRANSACTIONS
NameVW_OPPORTUNITIES_TRANSACTIONS
Note
CodeCREATE VIEW [dbo].[VW_OPPORTUNITIES_TRANSACTIONS]
AS
Select opportunity_seqno as Opportunity_seqno, seqno as TransID_int, 'SO' as screentype,
'Sales Order' as Transtype, cast(SEQNO as varchar(20)) as TransID,
case STATUS
when 0 then 'Not processed'
when 1 then 'Partly processed'
when 2 then 'Fully processed'
when 3 then 'Quotation'
when 6 then 'Lost Quote' -- standing oredrs and laybys not possible through CRM
else ''
end as Status,
Subtotal as Total from salesord_hdr where opportunity_seqno> 0
union
Select opportunity_seqno as Opportunity_seqno, Jobno as TransID_int, 'JC' as screentype,
'Job Quote' as Transtype, Jobcode as TransID, 'Quote' as Status, Estimate as Total
from JOBCOST_HDR where opportunity_seqno> 0 and MATERIALS = 0
union
Select opportunity_seqno as Opportunity_seqno, Jobno as TransID_int, 'JC' as screentype,
'Job Cost' as Transtype, Jobcode as TransID, 'Cost' as Status, Materials as Total
from JOBCOST_HDR where opportunity_seqno> 0 and MATERIALS <> 0
union
select S.opportunity_seqno as Opportunity_seqno, T.seqno as TransID_int, 'DI' as screentype,
'Dr Invoice' as Transtype, T.Invno as Transid, '' as Status, T.Subtotal as total
from DR_TRANS T inner join salesord_hdr S on T.SO_SEQNO = S.seqno
where S.opportunity_seqno> 0 and T.TRANSTYPE = 1
union
select J.opportunity_seqno as Opportunity_seqno, T.seqno as TransID_int, 'DI' as screentype,
'Dr Invoice' as Transtype, T.Invno as Transid, '' as Status, T.Subtotal as total
from DR_TRANS T inner join Jobcost_hdr J on T.jobno = J.jobno
where J.opportunity_seqno> 0 and T.TRANSTYPE = 1
union
select J.opportunity_seqno as Opportunity_seqno, P.seqno as TransID_int, 'PO' as screentype,
'Purchase Order' as Transtype, cast(P.seqno as varchar(20)) as Transid,
case p.STATUS
when 0 then 'Not processed'
when 1 then 'Partly processed'
when 2 then 'Fully processed'
when 3 then 'Quotation'
else ''
end as Status,
P.Subtotal as total
from Purchord_hdr P inner join Jobcost_hdr J on P.REFERENCE = J.JOBCODE where J.opportunity_seqno> 0
union
SELECT
I.opportunity_seqno AS Opportunity_seqno, T.seqno AS TransID_int, 'DP' AS screentype, 'Payment' AS Transtype,
I.INVNO AS Transid, '' AS Status, T.Subtotal AS total
FROM DR_TRANS T INNER JOIN DR_ALLOCATIONS A ON T.SEQNO = A.TRANS_SEQNO AND T.TRANSTYPE = 4
INNER JOIN
(select A.ALLOCNO, S.SEQNO, S.OPPORTUNITY_SEQNO, T.INVNO from DR_ALLOCATIONS A
inner join DR_TRANS T on A.TRANS_SEQNO= T.SEQNO AND T.TRANSTYPE =1
inner join SALESORD_HDR S on S.SEQNO = T.SO_SEQNO AND S.OPPORTUNITY_SEQNO > 0) I ON I.ALLOCNO = A.ALLOCNO
UNION
SELECT
I.opportunity_seqno AS Opportunity_seqno, T.seqno AS TransID_int, 'DP' AS screentype, 'Payment' AS Transtype,
I.INVNO AS Transid, '' AS Status, T.Subtotal AS total
FROM DR_TRANS T INNER JOIN DR_ALLOCATIONS A ON T.SEQNO = A.TRANS_SEQNO AND T.TRANSTYPE = 4
INNER JOIN
(select A.ALLOCNO, J.JOBCODE, J.OPPORTUNITY_SEQNO, T.invno from DR_ALLOCATIONS A
inner join DR_TRANS T on A.TRANS_SEQNO= T.SEQNO AND T.TRANSTYPE =1
inner join JOBCOST_HDR J on J.JOBNO = T.JOBNO AND J.OPPORTUNITY_SEQNO > 0) I ON I.ALLOCNO = A.ALLOCNO


View: VW_OPP_PIPELINE
NameVW_OPP_PIPELINE
Note
CodeCREATE VIEW [dbo].[VW_OPP_PIPELINE]
AS
SELECT MTRX.MNT,
       DATENAME(month, DATEADD(month, MTRX.MNT, GETDATE())) AS MNT_NAME,
       MTRX.SEQNO,
       MTRX.DESCRIPTION,
       MTRX.DEF_PROBABILITY,
       ISNULL(OPS.AMNT, 0) AS SUM_AMNT,
       OPS.ASSGN
FROM (SELECT MNTS.MNT,
               S.SEQNO,
               S.DESCRIPTION,
               S.DEF_PROBABILITY
        FROM (SELECT 0 AS MNT
                UNION SELECT 1 AS MNT
                UNION SELECT 2 AS MNT
                UNION SELECT 3 AS MNT
                UNION SELECT 4 AS MNT
                UNION SELECT 5 AS MNT
                UNION SELECT 6 AS MNT
                UNION SELECT 7 AS MNT
                UNION SELECT 8 AS MNT
                UNION SELECT 9 AS MNT
                UNION SELECT 10 AS MNT
                UNION SELECT 11 AS MNT
                ) AS MNTS
        CROSS JOIN dbo.OPPORTUNITY_STAGE AS S
        ) AS MTRX
        LEFT OUTER JOIN
        (SELECT S.DESCRIPTION,
                S.SEQNO,
                SUM(ISNULL(O.AMOUNT, 0)) AS AMNT,
                ISNULL(DATEDIFF(month, GETDATE(), O.DUE_DATE), 0) AS MNT_DIFF,
                O.ASSIGNED_TO AS ASSGN
         FROM dbo.OPPORTUNITY_STAGE AS S
         LEFT OUTER JOIN dbo.OPPORTUNITY AS O ON S.SEQNO = O.OPPORTUNITY_STAGE
         GROUP BY S.DESCRIPTION,
                  S.SEQNO,
                  DATEDIFF(month, GETDATE(), O.DUE_DATE), O.ASSIGNED_TO) AS OPS
         ON MTRX.MNT = OPS.MNT_DIFF AND
            MTRX.SEQNO = OPS.SEQNO


View: VW_SALES_TEAM
NameVW_SALES_TEAM
Note
CodeCREATE VIEW [dbo].[VW_SALES_TEAM]
AS
WITH ST_CTE(STAFFNO, STAFFNAME, REPORTS_TO, REPORTS_TO_NAME, STAFFLEVEL)
AS
(
SELECT C.STAFFNO, C.NAME, C.REPORTS_TO_STAFFNO, (SELECT P.NAME FROM STAFF P WHERE P.STAFFNO=C.REPORTS_TO_STAFFNO) REPORTS_TO_STAFFNAME, 0 AS STAFFLEVEL
  FROM STAFF C
 WHERE C.REPORTS_TO_STAFFNO=C.STAFFNO
 UNION ALL
SELECT C.STAFFNO, C.NAME, C.REPORTS_TO_STAFFNO, (SELECT P.NAME FROM STAFF P WHERE P.STAFFNO=C.REPORTS_TO_STAFFNO) REPORTS_TO_STAFFNAME, STAFFLEVEL+1
  FROM STAFF C
 INNER JOIN ST_CTE M ON M.STAFFNO=C.REPORTS_TO_STAFFNO
   AND C.REPORTS_TO_STAFFNO<>C.STAFFNO
)
SELECT * FROM ST_CTE


View: X_DR_TOVER
NameX_DR_TOVER
Note
CodeCREATE VIEW [dbo].[X_DR_TOVER] AS SELECT TOP 100 PERCENT PERIOD_STATUS.AGE,
ISNULL(DR_TRANS.SALES_ACCNO, 0) AS SALES_ACCOUNT, ISNULL(DR_TRANS.SEQNO, 0) AS SEQNO,
ISNULL(DR_TRANS.SUBTOTAL * DR_TRANS.EXCHRATE, 0) AS LOCALSUBTOTAL,
ISNULL(PERIOD_STATUS.YEARAGE, 0) AS YEARAGE
FROM PERIOD_STATUS
LEFT OUTER JOIN DR_TRANS ON PERIOD_STATUS.SEQNO = DR_TRANS.PERIOD_SEQNO AND PERIOD_STATUS.LEDGER = 'd' AND DR_TRANS.TRANSTYPE = 1
ORDER BY DR_TRANS.SALES_ACCNO, PERIOD_STATUS.AGE DESC