using Sarand.BusinessMgr.Net.Standard.Base.App; using Sarand.BusinessMgr.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Utils; using System; using System.Collections.Generic; namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr { //======================================================================= partial class SbmAccountMgr { //******************************************************************* // A s s o c i a t i o n s //******************************************************************* //------------------------------------------------------------------- // Association properties. //------------------------------------------------------------------- // Utilities. public static bool IsValidCode(String code) { if (StringUtil.IsEmpty(code)) return false; if (code != code.Trim()) return false; return true; } //------------------------------------------------------------------- // Association interface rules. public bool AllowColumnImport(SbmAssociation.Column column) { SbmDbDfn.ColumnIdx columnDb = GetDbCol(column); if (column.Equals(SbmDbDfn.ColumnIdx.Unknown) && ConfigConsole.DisplayAttribute(UserContext, columnDb)) { switch (column) { /*case SbmAssociation.Column.Id: case SbmAssociation.Column.Type: case SbmAssociation.Column.TypeDesc:*/ case SbmAssociation.Column.Code: case SbmAssociation.Column.ExtRef: case SbmAssociation.Column.Role: case SbmAssociation.Column.Location: case SbmAssociation.Column.PhoneMain: case SbmAssociation.Column.Email: case SbmAssociation.Column.Group: case SbmAssociation.Column.DescDetail: case SbmAssociation.Column.AnnualSalesTarget: case SbmAssociation.Column.PriceSetId: /*case SbmAssociation.Column.PriceSet_Ref: case SbmAssociation.Column.PriceSet_Type: case SbmAssociation.Column.PriceSet_Name: case SbmAssociation.Column.TaxCodeId:*/ return true; case SbmAssociation.Column.AccountManagerCode: //case SbmAssociation.Column.AccountManagerDesc: return CodeTypeHasCodes(Sbm.ApplCodeType.AccountManager); case SbmAssociation.Column.AccountHandlerCode: //case SbmAssociation.Column.AccountHandlerDesc: return CodeTypeHasCodes(Sbm.ApplCodeType.AccountHandler); case SbmAssociation.Column.AccountTypeCode: //case SbmAssociation.Column.AccountTypeDesc: return CodeTypeHasCodes(Sbm.ApplCodeType.AccountType); case SbmAssociation.Column.AccountRatingCode: //case SbmAssociation.Column.AccountRatingDesc: return CodeTypeHasCodes(Sbm.ApplCodeType.AccountRating); case SbmAssociation.Column.ContactAreaCode: //case SbmAssociation.Column.ContactAreaDesc: return CodeTypeHasCodes(Sbm.ApplCodeType.ContactArea); case SbmAssociation.Column.ContactHandlerCode: //case SbmAssociation.Column.ContactHandlerDesc: return CodeTypeHasCodes(Sbm.ApplCodeType.ContactHandler); case SbmAssociation.Column.ContactMethodCode: //case SbmAssociation.Column.ContactMethodDesc: return CodeTypeHasCodes(Sbm.ApplCodeType.ContactMethod); case SbmAssociation.Column.ContactCallCycleCode: //case SbmAssociation.Column.ContactCallCycleDesc: return CodeTypeHasCodes(Sbm.ApplCodeType.ContactCallCycle); case SbmAssociation.Column.CallsPerYear: case SbmAssociation.Column.LastCall: return true; case SbmAssociation.Column.SeasonalCategoryCodes: case SbmAssociation.Column.SeasonalCategoryCode1: //case SbmAssociation.Column.SeasonalCategoryDesc1: case SbmAssociation.Column.SeasonalCategoryCode2: //case SbmAssociation.Column.SeasonalCategoryDesc2: case SbmAssociation.Column.SeasonalCategoryCode3: //case SbmAssociation.Column.SeasonalCategoryDesc3: return CodeTypeHasCodes(Sbm.ApplCodeType.SeasonalCategory); case SbmAssociation.Column.OrderLeadTimeCode: //case SbmAssociation.Column.OrderLeadTimeDesc: return CodeTypeHasCodes(Sbm.ApplCodeType.OrderLeadTime); case SbmAssociation.Column.DeliveryTypeCode: //case SbmAssociation.Column.DeliveryTypeDesc: return CodeTypeHasCodes(Sbm.ApplCodeType.DeliveryType); case SbmAssociation.Column.DeliveryMethodCode: //case SbmAssociation.Column.DeliveryMethodDesc: return CodeTypeHasCodes(Sbm.ApplCodeType.DeliveryMethod); case SbmAssociation.Column.DeliveryBookInCode: //case SbmAssociation.Column.DeliveryBookInDesc: return CodeTypeHasCodes(Sbm.ApplCodeType.DeliveryBookIn); case SbmAssociation.Column.Terminated: case SbmAssociation.Column.Notes: case SbmAssociation.Column.Target_Name: case SbmAssociation.Column.Target_Nature: case SbmAssociation.Column.Target_PhoneMain: case SbmAssociation.Column.Target_PhoneAlt: case SbmAssociation.Column.Target_PhoneFax: case SbmAssociation.Column.Target_PhoneMobile: case SbmAssociation.Column.Target_Email: case SbmAssociation.Column.Target_Website: case SbmAssociation.Column.Target_Notes: case SbmAssociation.Column.Target_DeliveryAddress_Postcode: //case SbmAssociation.Column.Target_DeliveryAddress_AccountManagerCode: case SbmAssociation.Column.Target_DeliveryAddress_ContactAreaCode: case SbmAssociation.Column.Member_Code: case SbmAssociation.Column.Member_ExtRef: case SbmAssociation.Column.Member_Role: case SbmAssociation.Column.Member_Location: case SbmAssociation.Column.Member_PhoneMain: case SbmAssociation.Column.Member_Email: case SbmAssociation.Column.Member_Target_Name: case SbmAssociation.Column.Member_Target_PhoneMain: case SbmAssociation.Column.Member_Target_PhoneAlt: case SbmAssociation.Column.Member_Target_PhoneFax: case SbmAssociation.Column.Member_Target_PhoneMobile: case SbmAssociation.Column.Member_Target_Email: case SbmAssociation.Column.Member_Target_Website: case SbmAssociation.Column.Member_Target_Notes: return true; } } return false; } public String GetColumnCode(SbmAssociation.Column column) { switch (column) { //case SbmAssociation.Column.Unknown: return ""; case SbmAssociation.Column.Pos: return "Assoc_Pos"; case SbmAssociation.Column.Id: return "Assoc_Id"; case SbmAssociation.Column.Type: return "Assoc_Type"; case SbmAssociation.Column.Type_Desc: return "Assoc_TypeDesc"; case SbmAssociation.Column.Code: return "Assoc_Code"; case SbmAssociation.Column.ExtRef: return "Assoc_ExtRef"; case SbmAssociation.Column.Role: return "Assoc_Role"; case SbmAssociation.Column.Location: return "Assoc_Location"; case SbmAssociation.Column.PhoneMain: return "Assoc_PhoneMain"; case SbmAssociation.Column.Email: return "Assoc_Email"; case SbmAssociation.Column.Group: return "Assoc_Group"; case SbmAssociation.Column.DescDetail: return "Assoc_DescDetail"; case SbmAssociation.Column.DefaultNominalCode: return "Assoc_DefaultNominalCode"; case SbmAssociation.Column.AmountTransMax: return "Assoc_AmountTransMax"; case SbmAssociation.Column.AnnualSalesTarget: return "Assoc_AnnualSalesTarget"; case SbmAssociation.Column.CreditLimit: return "Assoc_CreditLimit"; case SbmAssociation.Column.AccountBalance: return "Assoc_AccountBalance"; case SbmAssociation.Column.DiscountType: return "Assoc_DiscountType"; case SbmAssociation.Column.DiscountType_Desc: return "Assoc_DiscountTypeDesc"; case SbmAssociation.Column.DiscountRate: return "Assoc_DiscountRate"; case SbmAssociation.Column.PriceSetId: return "Assoc_PriceSetId"; case SbmAssociation.Column.PriceSet_Ref: return "Assoc_PriceSet_Ref"; case SbmAssociation.Column.PriceSet_Type: return "Assoc_PriceSet_Type"; case SbmAssociation.Column.PriceSet_TypeDesc: return "Assoc_PriceSet_TypeDesc"; case SbmAssociation.Column.PriceSet_Name: return "Assoc_PriceSet_Name"; case SbmAssociation.Column.TaxCodeId: return "Assoc_TaxCodeId"; case SbmAssociation.Column.PaymentTerms: return "Assoc_PaymentTerms"; case SbmAssociation.Column.InvoiceDesc: return "Assoc_InvoiceDesc"; case SbmAssociation.Column.AccountManagerCode: return "Assoc_AccountManagerCode"; case SbmAssociation.Column.AccountManagerDesc: return "Assoc_AccountManagerDesc"; case SbmAssociation.Column.AccountHandlerCode: return "Assoc_AccountHandlerCode"; case SbmAssociation.Column.AccountHandlerDesc: return "Assoc_AccountHandlerDesc"; case SbmAssociation.Column.AccountTypeCode: return "Assoc_AccountTypeCode"; case SbmAssociation.Column.AccountTypeDesc: return "Assoc_AccountTypeDesc"; case SbmAssociation.Column.AccountRatingCode: return "Assoc_AccountRatingCode"; case SbmAssociation.Column.AccountRatingDesc: return "Assoc_AccountRatingDesc"; case SbmAssociation.Column.ContactAreaCode: return "Assoc_ContactAreaCode"; case SbmAssociation.Column.ContactAreaDesc: return "Assoc_ContactAreaDesc"; case SbmAssociation.Column.ContactHandlerCode: return "Assoc_ContactHandlerCode"; case SbmAssociation.Column.ContactHandlerDesc: return "Assoc_ContactHandlerDesc"; case SbmAssociation.Column.ContactMethodCode: return "Assoc_ContactMethodCode"; case SbmAssociation.Column.ContactMethodDesc: return "Assoc_ContactMethodDesc"; case SbmAssociation.Column.ContactCallCycleCode: return "Assoc_ContactCallCycleCode"; case SbmAssociation.Column.ContactCallCycleDesc: return "Assoc_ContactCallCycleDesc"; case SbmAssociation.Column.CallsPerYear: return "Assoc_CallsPerYear"; case SbmAssociation.Column.LastCall: return "Assoc_LastCall"; case SbmAssociation.Column.SeasonalCategoryCodes: return "Assoc_SeasonalCatCodes"; case SbmAssociation.Column.SeasonalCategoryCode1: return "Assoc_SeasonalCatCode1"; case SbmAssociation.Column.SeasonalCategoryDesc1: return "Assoc_SeasonalCatDesc1"; case SbmAssociation.Column.SeasonalCategoryCode2: return "Assoc_SeasonalCatCode2"; case SbmAssociation.Column.SeasonalCategoryDesc2: return "Assoc_SeasonalCatDesc2"; case SbmAssociation.Column.SeasonalCategoryCode3: return "Assoc_SeasonalCatCode3"; case SbmAssociation.Column.SeasonalCategoryDesc3: return "Assoc_SeasonalCatDesc3"; case SbmAssociation.Column.OrderLeadTimeCode: return "Assoc_OrderLeadTimeCode"; case SbmAssociation.Column.OrderLeadTimeDesc: return "Assoc_OrderLeadTimeDesc"; case SbmAssociation.Column.DeliveryTypeCode: return "Assoc_DeliveryTypeCode"; case SbmAssociation.Column.DeliveryTypeDesc: return "Assoc_DeliveryTypeDesc"; case SbmAssociation.Column.DeliveryMethodCode: return "Assoc_DeliveryMethodCode"; case SbmAssociation.Column.DeliveryMethodDesc: return "Assoc_DeliveryMethodDesc"; case SbmAssociation.Column.DeliveryBookInCode: return "Assoc_DeliveryBookInCode"; case SbmAssociation.Column.DeliveryBookInDesc: return "Assoc_DeliveryBookInDesc"; case SbmAssociation.Column.Terminated: return "Assoc_Terminated"; case SbmAssociation.Column.Primary: return "Assoc_Primary"; case SbmAssociation.Column.Technician: return "Assoc_Technician"; case SbmAssociation.Column.Notes: return "Assoc_Notes"; case SbmAssociation.Column.Status_Desc: return "Assoc_StatusDesc"; case SbmAssociation.Column.Status_Ind: return "Assoc_StatusInd"; case SbmAssociation.Column.AffIdOwner: return "Assoc_AffIdOwner"; case SbmAssociation.Column.Owner_Name: return "Assoc_Owner_Name"; case SbmAssociation.Column.AffIdTarget: return "Assoc_AffIdTarget"; case SbmAssociation.Column.Target_Type: return "Assoc_Target_Type"; case SbmAssociation.Column.Target_TypeDesc: return "Assoc_Target_TypeDesc"; case SbmAssociation.Column.Target_Name: return "Assoc_Target_Name"; case SbmAssociation.Column.Target_Nature: return "Assoc_Target_Nature"; case SbmAssociation.Column.Target_PhoneMain: return "Assoc_Target_PhoneMain"; case SbmAssociation.Column.Target_PhoneAlt: return "Assoc_Target_PhoneAlt"; case SbmAssociation.Column.Target_PhoneFax: return "Assoc_Target_PhoneFax"; case SbmAssociation.Column.Target_PhoneMobile: return "Assoc_Target_PhoneMobile"; case SbmAssociation.Column.Target_Email: return "Assoc_Target_Email"; case SbmAssociation.Column.Target_Website: return "Assoc_Target_Website"; case SbmAssociation.Column.Target_Notes: return "Assoc_Target_Notes"; case SbmAssociation.Column.Target_Address_Type: return "Assoc_Target_Address_Type"; case SbmAssociation.Column.Target_Address_TypeDesc: return "Assoc_Target_Address_TypeDesc"; case SbmAssociation.Column.Target_Address_RefExt: return "Assoc_Target_Address_RefExt"; case SbmAssociation.Column.Target_Address_Name: return "Assoc_Target_Address_Name"; case SbmAssociation.Column.Target_Address_DescBrief: return "Assoc_Target_Address_DescBrief"; case SbmAssociation.Column.Target_Address_Summary: return "Assoc_Target_Address_Summary"; case SbmAssociation.Column.Target_Address_Line1: return "Assoc_Target_Address_Line1"; case SbmAssociation.Column.Target_Address_Line2: return "Assoc_Target_Address_Line2"; case SbmAssociation.Column.Target_Address_City: return "Assoc_Target_Address_City"; case SbmAssociation.Column.Target_Address_Province: return "Assoc_Target_Address_Province"; case SbmAssociation.Column.Target_Address_Postcode: return "Assoc_Target_Address_Postcode"; case SbmAssociation.Column.Target_Address_Country: return "Assoc_Target_Address_Country"; case SbmAssociation.Column.Target_Address_Contact: return "Assoc_Target_Address_Contact"; case SbmAssociation.Column.Target_Address_Phone: return "Assoc_Target_Address_Phone"; case SbmAssociation.Column.Target_Address_Email: return "Assoc_Target_Address_Email"; case SbmAssociation.Column.Target_Address_AccountManagerCode: return "Assoc_Target_Address_AccountManagerCode"; case SbmAssociation.Column.Target_Address_AccountManagerDesc: return "Assoc_Target_Address_AccountManagerDesc"; case SbmAssociation.Column.Target_Address_AccountHandlerCode: return "Assoc_Target_Address_AccountHandlerCode"; case SbmAssociation.Column.Target_Address_AccountHandlerDesc: return "Assoc_Target_Address_AccountHandlerDesc"; case SbmAssociation.Column.Target_Address_ContactAreaCode: return "Assoc_Target_Address_ContactAreaCode"; case SbmAssociation.Column.Target_Address_ContactAreaDesc: return "Assoc_Target_Address_ContactAreaDesc"; case SbmAssociation.Column.Target_Address_ContactHandlerCode: return "Assoc_Target_Address_ContactHandlerCode"; case SbmAssociation.Column.Target_Address_ContactHandlerDesc: return "Assoc_Target_Address_ContactHandlerDesc"; case SbmAssociation.Column.Target_Address_LastVisitOn: return "Assoc_Target_Address_LastVisitOn"; case SbmAssociation.Column.Target_Address_NextVisitOn: return "Assoc_Target_Address_NextVisitOn"; case SbmAssociation.Column.Target_DeliveryAddress_Postcode: return "Assoc_Target_DelAddr_Postcode"; case SbmAssociation.Column.Target_DeliveryAddress_AccountManagerCode: return "Assoc_Target_DelAddr_AccountManagerCode"; case SbmAssociation.Column.Target_DeliveryAddress_ContactAreaCode: return "Assoc_Target_DelAddr_ContactAreaCode"; case SbmAssociation.Column.Member_Type: return "Assoc_Member_Type"; case SbmAssociation.Column.Member_TypeDesc: return "Assoc_Member_TypeDesc"; case SbmAssociation.Column.Member_Code: return "Assoc_Member_Code"; case SbmAssociation.Column.Member_ExtRef: return "Assoc_Member_ExtRef"; case SbmAssociation.Column.Member_Role: return "Assoc_Member_Role"; case SbmAssociation.Column.Member_Location: return "Assoc_Member_Location"; case SbmAssociation.Column.Member_PhoneMain: return "Assoc_Member_PhoneMain"; case SbmAssociation.Column.Member_Email: return "Assoc_Member_Email"; case SbmAssociation.Column.Member_Target_Name: return "Assoc_Member_Target_Name"; case SbmAssociation.Column.Member_Target_Nature: return "Assoc_Member_Target_Nature"; case SbmAssociation.Column.Member_Target_PhoneMain: return "Assoc_Member_Target_PhoneMain"; case SbmAssociation.Column.Member_Target_PhoneAlt: return "Assoc_Member_Target_PhoneAlt"; case SbmAssociation.Column.Member_Target_PhoneFax: return "Assoc_Member_Target_PhoneFax"; case SbmAssociation.Column.Member_Target_PhoneMobile: return "Assoc_Member_Target_PhoneMobile"; case SbmAssociation.Column.Member_Target_Email: return "Assoc_Member_Target_Email"; case SbmAssociation.Column.Member_Target_Website: return "Assoc_Member_Target_Website"; case SbmAssociation.Column.Member_Target_Notes: return "Assoc_Member_Target_Notes"; case SbmAssociation.Column.Member_Target_Address_Summary: return "Assoc_Member_Target_Address_Summary"; case SbmAssociation.Column.Member_Target_Address_Line1: return "Assoc_Member_Target_Address_Line1"; case SbmAssociation.Column.Member_Target_Address_Line2: return "Assoc_Member_Target_Address_Line2"; case SbmAssociation.Column.Member_Target_Address_City: return "Assoc_Member_Target_Address_City"; case SbmAssociation.Column.Member_Target_Address_Province: return "Assoc_Member_Target_Address_Province"; case SbmAssociation.Column.Member_Target_Address_Postcode: return "Assoc_Member_Target_Address_Postcode"; case SbmAssociation.Column.Member_Target_Address_Country: return "Assoc_Member_Target_Address_Country"; case SbmAssociation.Column.Trans_LastSaleRaised: return "Assoc_Trans_LastSaleRaised"; case SbmAssociation.Column.Trans_SalesValue_Open: return "Assoc_Trans_SalesValue_Open"; case SbmAssociation.Column.Trans_SalesValue_Cytd: return "Assoc_Trans_SalesValue_Cytd"; case SbmAssociation.Column.Trans_SalesValue_Lcy: return "Assoc_Trans_SalesValue_Lcy"; } return ""; } public String GetColumnCaption(SbmAssociation.Column column) { String caption = ""; switch (column) { //case SbmAssociation.Column.Unknown: caption = ""; break; case SbmAssociation.Column.Pos: caption = "Pos"; break; // Position in list (derived). case SbmAssociation.Column.Id: caption = "Id"; break; //-----------------------------------------------------------// Association details. case SbmAssociation.Column.Type: caption = "Type"; break; case SbmAssociation.Column.Type_Desc: caption = "Type desc"; break; case SbmAssociation.Column.Code: caption = "Code"; break; case SbmAssociation.Column.ExtRef: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ExtRef, "Ext ref"); break; case SbmAssociation.Column.Role: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_Role, "Role"); break; case SbmAssociation.Column.Location: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_Location, "Location"); break; case SbmAssociation.Column.PhoneMain: caption = "Phone main"; break; case SbmAssociation.Column.Email: caption = "Email"; break; case SbmAssociation.Column.Group: caption = "Group"; break; case SbmAssociation.Column.DescDetail: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_DescDetail, "Detail desc"); break; case SbmAssociation.Column.DefaultNominalCode: caption = "Default nominal code"; break; case SbmAssociation.Column.AmountTransMax: caption = "Trans max amount"; break; case SbmAssociation.Column.AnnualSalesTarget: caption = "Annual sales target"; break; case SbmAssociation.Column.CreditLimit: caption = "Credit Limit"; break; case SbmAssociation.Column.AccountBalance: caption = "Account balance"; break; case SbmAssociation.Column.DiscountType: caption = "Discount type"; break; case SbmAssociation.Column.DiscountType_Desc: caption = "Discount type"; break; case SbmAssociation.Column.DiscountRate: caption = "Discount rate"; break; //-----------------------------------------------------------// part of PriceSet details case SbmAssociation.Column.PriceSetId: caption = "Price set #"; break; case SbmAssociation.Column.PriceSet_Ref: caption = "Price set ref"; break; case SbmAssociation.Column.PriceSet_Type: caption = "Price set type"; break; case SbmAssociation.Column.PriceSet_TypeDesc: caption = "Price set type"; break; case SbmAssociation.Column.PriceSet_Name: caption = "Price set"; break; case SbmAssociation.Column.TaxCodeId: caption = "Tax code #"; break; case SbmAssociation.Column.PaymentTerms: caption = "Payment terms"; break; case SbmAssociation.Column.InvoiceDesc: caption = "Invoice desc"; break; case SbmAssociation.Column.AccountManagerCode: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountManagerCode, "Account manager") + " code"; break; case SbmAssociation.Column.AccountManagerDesc: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountManagerCode, "Account manager"); break; case SbmAssociation.Column.AccountHandlerCode: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountHandlerCode, "Account handler") + " code"; break; case SbmAssociation.Column.AccountHandlerDesc: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountHandlerCode, "Account handler"); break; case SbmAssociation.Column.AccountTypeCode: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountTypeCode, "Account type") + " code"; break; case SbmAssociation.Column.AccountTypeDesc: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountTypeCode, "Account type"); break; case SbmAssociation.Column.AccountRatingCode: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountRatingCode, "Account rating") + " code"; break; case SbmAssociation.Column.AccountRatingDesc: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountRatingCode, "Account rating"); break; case SbmAssociation.Column.ContactAreaCode: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactAreaCode, "Contact area") + " code"; break; case SbmAssociation.Column.ContactAreaDesc: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactAreaCode, "Contact area"); break; case SbmAssociation.Column.ContactHandlerCode: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactHandlerCode, "Contact handler)") + " code"; break; case SbmAssociation.Column.ContactHandlerDesc: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactHandlerCode, "Contact handler"); break; case SbmAssociation.Column.ContactMethodCode: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactMethodCode, "Conact method") + " code"; break; case SbmAssociation.Column.ContactMethodDesc: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactMethodCode, "Conact method"); break; case SbmAssociation.Column.ContactCallCycleCode: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactCallCycleCode, "Call cycle") + " code"; break; case SbmAssociation.Column.ContactCallCycleDesc: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactCallCycleCode, "Call cycle"); break; case SbmAssociation.Column.CallsPerYear: caption = "Calls per year"; break; case SbmAssociation.Column.LastCall: caption = "Last call"; break; case SbmAssociation.Column.SeasonalCategoryCodes: caption = "Seasonal category codes"; break; case SbmAssociation.Column.SeasonalCategoryCode1: caption = "Seasonal category code 1"; break; case SbmAssociation.Column.SeasonalCategoryDesc1: caption = "Seasonal category 1"; break; case SbmAssociation.Column.SeasonalCategoryCode2: caption = "Seasonal category code 2"; break; case SbmAssociation.Column.SeasonalCategoryDesc2: caption = "Seasonal category 2"; break; case SbmAssociation.Column.SeasonalCategoryCode3: caption = "Seasonal category code 3"; break; case SbmAssociation.Column.SeasonalCategoryDesc3: caption = "Seasonal category 3"; break; case SbmAssociation.Column.OrderLeadTimeCode: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_OrderLeadTimeCode, "Order lead time") + " code"; break; case SbmAssociation.Column.OrderLeadTimeDesc: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_OrderLeadTimeCode, "Order lead time"); break; case SbmAssociation.Column.DeliveryTypeCode: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_DeliveryTypeCode, "Delivery type") + " code"; break; case SbmAssociation.Column.DeliveryTypeDesc: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_DeliveryTypeCode, "Delivery type"); break; case SbmAssociation.Column.DeliveryMethodCode: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_DeliveryMethodCode, "Delivery method") + " code"; break; case SbmAssociation.Column.DeliveryMethodDesc: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_DeliveryMethodCode, "Delivery method"); break; case SbmAssociation.Column.DeliveryBookInCode: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_DeliveryBookInCode, "Delivery book-in") + " code"; break; case SbmAssociation.Column.DeliveryBookInDesc: caption = GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_DeliveryBookInCode, "Delivery book-in"); break; case SbmAssociation.Column.Terminated: caption = "Terminated"; break; case SbmAssociation.Column.Primary: caption = "Primary"; break; case SbmAssociation.Column.Technician: caption = "Technician"; break; case SbmAssociation.Column.Notes: caption = "Notes"; break; case SbmAssociation.Column.Status_Desc: caption = "Status"; break; case SbmAssociation.Column.Status_Ind: caption = "Status ind"; break; //-----------------------------------------------------------//Association's owner details case SbmAssociation.Column.AffIdOwner: caption = "Owner #"; break; case SbmAssociation.Column.Owner_Name: caption = "Owner name"; break; case SbmAssociation.Column.AffIdTarget: caption = "Target #"; break; //-----------------------------------------------------------// Association's target details case SbmAssociation.Column.Target_Type: caption = "Contact type"; break; case SbmAssociation.Column.Target_TypeDesc: caption = "Contact type"; break; case SbmAssociation.Column.Target_Name: caption = "Contact name"; break; case SbmAssociation.Column.Target_Nature: caption = "Contact nature"; break; case SbmAssociation.Column.Target_PhoneMain: caption = "Contact main phone"; break; case SbmAssociation.Column.Target_PhoneAlt: caption = "Contact alt phone"; break; case SbmAssociation.Column.Target_PhoneFax: caption = "Contact fax"; break; case SbmAssociation.Column.Target_PhoneMobile: caption = "Contact mobile phone"; break; case SbmAssociation.Column.Target_Email: caption = "Contact email"; break; case SbmAssociation.Column.Target_Website: caption = "Contact website"; break; case SbmAssociation.Column.Target_Notes: caption = "Contact notes"; break; case SbmAssociation.Column.Target_Address_Type: caption = "Contact addr. type"; break; case SbmAssociation.Column.Target_Address_TypeDesc: caption = "Contact address type"; break; case SbmAssociation.Column.Target_Address_RefExt: caption = "Contact address ref ext"; break; case SbmAssociation.Column.Target_Address_Name: caption = "Contact address name"; break; case SbmAssociation.Column.Target_Address_DescBrief: caption = "Contact address desc"; break; //-----------------------------------------------------------// Association's target address details case SbmAssociation.Column.Target_Address_Summary: caption = "Contact address"; break; case SbmAssociation.Column.Target_Address_Line1: caption = "Contact address line 1"; break; case SbmAssociation.Column.Target_Address_Line2: caption = "Contact address line 2"; break; case SbmAssociation.Column.Target_Address_City: caption = "Contact address city"; break; case SbmAssociation.Column.Target_Address_Province: caption = "Contact address province"; break; case SbmAssociation.Column.Target_Address_Postcode: caption = "Contact address postcode"; break; case SbmAssociation.Column.Target_Address_Country: caption = "Contact address country"; break; case SbmAssociation.Column.Target_Address_Contact: caption = "Contact address Contact"; break; case SbmAssociation.Column.Target_Address_Phone: caption = "Contact address Phone"; break; case SbmAssociation.Column.Target_Address_Email: caption = "Contact address Email"; break; case SbmAssociation.Column.Target_Address_AccountManagerCode: caption = "Contact address " + GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountManagerCode, "Account manager") + " code"; break; case SbmAssociation.Column.Target_Address_AccountManagerDesc: caption = "Contact address " + GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountManagerCode, "Account manager"); break; case SbmAssociation.Column.Target_Address_AccountHandlerCode: caption = "Contact address " + GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountHandlerCode, "Account handler") + " code"; break; case SbmAssociation.Column.Target_Address_AccountHandlerDesc: caption = "Contact address " + GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountHandlerCode, "Account handler"); break; case SbmAssociation.Column.Target_Address_ContactAreaCode: caption = "Contact address " + GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactAreaCode, "Contact area") + " code"; break; case SbmAssociation.Column.Target_Address_ContactAreaDesc: caption = "Contact address " + GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactAreaCode, "Contact area"); break; case SbmAssociation.Column.Target_Address_ContactHandlerCode: caption = "Contact address " + GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactHandlerCode, "Contact handler)") + " code"; break; case SbmAssociation.Column.Target_Address_ContactHandlerDesc: caption = "Contact address " + GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactHandlerCode, "Contact handler"); break; case SbmAssociation.Column.Target_Address_LastVisitOn: caption = "Contact address last visit"; break; case SbmAssociation.Column.Target_Address_NextVisitOn: caption = "Contact address next visit"; break; case SbmAssociation.Column.Target_DeliveryAddress_Postcode: caption = "Delivery address - Postcode"; break; case SbmAssociation.Column.Target_DeliveryAddress_AccountManagerCode: caption = "Delivery address - " + GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_AccountManagerCode, "Account manager"); break; case SbmAssociation.Column.Target_DeliveryAddress_ContactAreaCode: caption = "Delivery address - " + GetAttributeCaption(SbmDbDfn.ColumnIdx.Association_ContactAreaCode, "Contact area"); break; //-----------------------------------------------------------// part of ... Members details case SbmAssociation.Column.Member_Type: caption = "Member type"; break; case SbmAssociation.Column.Member_TypeDesc: caption = "Member type desc"; break; case SbmAssociation.Column.Member_Code: caption = "Member code"; break; case SbmAssociation.Column.Member_ExtRef: caption = "Member ext ref"; break; case SbmAssociation.Column.Member_Role: caption = "Member role"; break; case SbmAssociation.Column.Member_Location: caption = "Member location"; break; case SbmAssociation.Column.Member_PhoneMain: caption = "Member phone main"; break; case SbmAssociation.Column.Member_Email: caption = "Member email"; break; case SbmAssociation.Column.Member_Target_Name: caption = "Member contact name"; break; case SbmAssociation.Column.Member_Target_Nature: caption = "Member contact nature"; break; case SbmAssociation.Column.Member_Target_PhoneMain: caption = "Member contact phone main"; break; case SbmAssociation.Column.Member_Target_PhoneAlt: caption = "Member contact phone alt"; break; case SbmAssociation.Column.Member_Target_PhoneFax: caption = "Member contact phone fax"; break; case SbmAssociation.Column.Member_Target_PhoneMobile: caption = "Member contact phone mobile"; break; case SbmAssociation.Column.Member_Target_Email: caption = "Member contact email"; break; case SbmAssociation.Column.Member_Target_Website: caption = "Member contact website"; break; case SbmAssociation.Column.Member_Target_Notes: caption = "Member contact notes"; break; case SbmAssociation.Column.Member_Target_Address_Summary: caption = "Member contact address"; break; case SbmAssociation.Column.Member_Target_Address_Line1: caption = "Member contact address line 1"; break; case SbmAssociation.Column.Member_Target_Address_Line2: caption = "Member contact address line 2"; break; case SbmAssociation.Column.Member_Target_Address_City: caption = "Member contact city"; break; case SbmAssociation.Column.Member_Target_Address_Province: caption = "Member contact address province"; break; case SbmAssociation.Column.Member_Target_Address_Postcode: caption = "Member contact address postcode"; break; case SbmAssociation.Column.Member_Target_Address_Country: caption = "Member contact address country"; break; case SbmAssociation.Column.Trans_LastSaleRaised: caption = "Last sale"; break; case SbmAssociation.Column.Trans_SalesValue_Open: caption = "SO value - open"; break; // Net open sales order value. case SbmAssociation.Column.Trans_SalesValue_Cytd: caption = "SO value - YDT"; break; // Net sales order value closed this calendar year. case SbmAssociation.Column.Trans_SalesValue_Lcy: caption = "SO value - LCY"; break; // Net sales order value closed last calendar year. } if (StringUtil.IsEmpty(caption)) caption = GetAssociationColumnDfn(column).Caption; return caption; } // Association List Targets. public abstract List GetMemberTargetIds(SysId affiliateIdOwner); public abstract List GetCustomerTargetIds(List affiliateIdsInclude, List affiliateIdsExclude); public abstract List GetCustomerAssocIdsForTargets(List affiliateIdsTarget); public abstract List GetAssocIdsForTargets(SysId affiliateIdOwner, Sbm.AssociationType associationType, List affiliateIdsTarget); //------------------------------------------------------------------- // Retrieve individual associations //------------------------------------------------------------------- // Association exists. public bool AssociationExistsById(SysId id) { ClearErrorState(); if (!SysId.IsValid(id)) return false; SbmAssociation.Params prmAssociation = new SbmAssociation.Params(); prmAssociation.IncludedIds.Add(id); prmAssociation.StatusCat = SbmAssociation.StatusCat.Any; return GetAssociationCount(prmAssociation) == 1; } public bool AssociationExistsByOwnerTypeTarget(SysId affiliateIdOwner, Sbm.AssociationType associationType, SysId affiliateIdTarget) { ClearErrorState(); if (!SysId.IsValid(affiliateIdOwner) || (int)associationType < 1 || !SysId.IsValid(affiliateIdTarget)) return false; SbmAssociation.Params prmAssociation = new SbmAssociation.Params { AffiliateIdOwner = affiliateIdOwner, AssociationType = associationType, AffiliateIdTarget = affiliateIdTarget, StatusCat = SbmAssociation.StatusCat.Any }; return GetAssociationCount(prmAssociation) == 1; } public bool AssociationExistsByTypeCode(Sbm.AssociationType associationType, String code) { ClearErrorState(); if ((int)associationType < 1 || StringUtil.IsEmpty(code)) return false; SbmAssociation.Params prmAssociation = new SbmAssociation.Params { AssociationType = associationType, Code = code, StatusCat = SbmAssociation.StatusCat.Any }; return GetAssociationCount(prmAssociation) == 1; } //------------------------------------------------------------------- // Get association. public abstract SbmAssociation GetAssociation(SbmAssociation.Params prm); public SbmAssociation GetAssociationById(SysId associationId) { ClearErrorState(); if (!SysId.IsValid(associationId)) return null; SbmAssociation.Params prmAssociation = new SbmAssociation.Params(); prmAssociation.IncludedIds.Add(associationId); prmAssociation.StatusCat = SbmAssociation.StatusCat.Any; return GetAssociation(prmAssociation); } public SbmAssociation GetAssociationByOwnerTypeTarget(SysId affiliateIdOwner, Sbm.AssociationType associationType, SysId affiliateIdTarget) { ClearErrorState(); if (!SysId.IsValid(affiliateIdOwner) || (int)associationType < 1 || !SysId.IsValid(affiliateIdTarget)) return null; SbmAssociation.Params prmAssociation = new SbmAssociation.Params(); prmAssociation.IncludedIds.Add(affiliateIdOwner); prmAssociation.AssociationType = associationType; prmAssociation.IncludedIds.Add(affiliateIdTarget); prmAssociation.StatusCat = SbmAssociation.StatusCat.Any; return GetAssociation(prmAssociation); } public SbmAssociation GetAssociationByTypeCode(Sbm.AssociationType associationType, String associationCode) { ClearErrorState(); if ((int)associationType < 1 || !StringUtil.IsEmpty(associationCode)) return null; SbmAssociation.Params prmAssociation = new SbmAssociation.Params { AssociationType = associationType, Code = associationCode, StatusCat = SbmAssociation.StatusCat.Any }; return GetAssociation(prmAssociation); } //public abstract bool AssociationExistsByType(String type); //public abstract SbmAssociation GetAssociationByType(String type); public abstract SysId GetAssociationAffIdTarget(SysId idAssoc); public abstract String GetAssociationCode(SysId idAssoc); //------------------------------------------------------------------- // Create association. public abstract SbmAssociation CreateAssociation(SysId affiliateIdOwner, Sbm.AssociationType associationType, SysId affiliateIdTarget); //------------------------------------------------------------------- // Has associations. public abstract bool OwnerHasAssociations(SysId id, Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool activeOnly = true); public abstract long OwnerAssociationCount(SysId id, Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool activeOnly = true); public abstract bool OwnerHasAssociationsWith(SysId ownerId, SysId affiliateIdTarget, bool activeOnly = true); public abstract long OwnerTargetAssociationCount(SysId ownerId, SysId affiliateIdTarget, bool activeOnly = true); public abstract bool TargetHasAssociations(SysId id, Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool activeOnly = true); public abstract long TargetAssociationCount(SysId id, Sbm.AssociationType associationType = Sbm.AssociationType.Any, bool activeOnly = true); //------------------------------------------------------------------- // Generic association list: public abstract SbmDbDfn.ColumnIdx GetDbCol(SbmAssociation.Column column); //------------------------------------------------------------------- // Validate association data. public bool IsValidAssociation(SbmAssociation association) { ClearErrorState(); if (association == null) return SetErrorState(ErrorMessage.ItemNotSpecified); return IsValidAssociationData(association.GetData(), new SbmAssociation.ErrField()); } public virtual bool IsValidAssociationData(SbmAssociation.Data data, SbmAssociation.ErrField errField) { ClearErrorState(); // Association properties. if (errField.AssociationType != SacsHierarchyItem.ValidValue.Ignore && (short)data.AssociationType < 1) { if ((int)data.AssociationType < 1) { errField.AssociationType = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Association type must be supplied"); } } if (errField.Code != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Code, "code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_Code))) { errField.Code = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.RefExt != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.RefExt, "external ref", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_ExtRef))) { errField.RefExt = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Role != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Role, "role", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_Role))) { errField.Role = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Location != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Location, "location", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_Location))) { errField.Location = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.PhoneMain != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PhoneMain, "phone main", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_PhoneMain))) { errField.PhoneMain = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Email != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Email, "email", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_Email))) { errField.Email = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Group != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Group, "group", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_Group))) { errField.Group = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.DescDetail != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescDetail, "desc detail", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_DescDetail))) { errField.DescDetail = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.DefaultNominalCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DefaultNominalCode, "default nominal code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_DefaultNominalCode))) { errField.DefaultNominalCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.InvoiceDesc != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.InvoiceDesc, "invoice description", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_InvoiceDesc))) { errField.InvoiceDesc = SacsHierarchyItem.ValidValue.Invalid; return false; } // Association codes. if (errField.AccountManagerCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.AccountManagerCode, " account manager code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_AccountManagerCode))) { errField.AccountManagerCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.AccountHandlerCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.AccountHandlerCode, "account handler code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_AccountHandlerCode))) { errField.AccountHandlerCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.AccountTypeCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.AccountTypeCode, " account type code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_AccountTypeCode))) { errField.AccountTypeCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.AccountRatingCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.AccountRatingCode, "account rating code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_AccountRatingCode))) { errField.AccountRatingCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.ContactAreaCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ContactAreaCode, "contact area code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_ContactAreaCode))) { errField.ContactAreaCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.ContactHandlerCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ContactHandlerCode, "contact handler code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_ContactHandlerCode))) { errField.ContactHandlerCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.ContactMethodCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ContactMethodCode, "contact method code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_ContactMethodCode))) { errField.ContactMethodCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.ContactCallCycleCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ContactCallCycleCode, "contact call cycle code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_ContactCallCycleCode))) { errField.ContactCallCycleCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.CommodityIdSalesDefault != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.CommodityIdSalesDefault)) { if (data.AssociationType != Sbm.AssociationType.Customer) { errField.OrderLeadTimeCode = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Default sales Commodity can only be assigned to customers"); } } if (errField.OrderLeadTimeCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.OrderLeadTimeCode, "order lead time code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_OrderLeadTimeCode))) { errField.OrderLeadTimeCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.DeliveryTypeCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DeliveryTypeCode, "delivery type code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_DeliveryTypeCode))) { errField.DeliveryTypeCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.DeliveryMethodCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DeliveryMethodCode, "delivery method code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_DeliveryMethodCode))) { errField.DeliveryMethodCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.DeliveryCourierCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DeliveryCourierCode, "delivery courier code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_DeliveryCourierCode))) { errField.DeliveryCourierCode = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.DeliveryBookInCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DeliveryBookInCode, "delivery book in code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_DeliveryBookInCode))) { errField.DeliveryBookInCode = SacsHierarchyItem.ValidValue.Invalid; return false; } // Numeric values. if (errField.AmountTransMax != SacsHierarchyItem.ValidValue.Ignore && data.AmountTransMax < 0.0m) { errField.AmountTransMax = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Max transaction amount must not be negative"); } if (errField.AnnualSalesTarget != SacsHierarchyItem.ValidValue.Ignore && data.AnnualSalesTarget < 0.0m) { errField.AnnualSalesTarget = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Annual Sales Target must not be negative"); } if (errField.CreditLimit != SacsHierarchyItem.ValidValue.Ignore && data.CreditLimit < 0.0m) { errField.CreditLimit = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Credit Limit must not be negative"); } if (errField.DiscountRate != SacsHierarchyItem.ValidValue.Ignore) { if (data.DiscountRate < 0.0m) { errField.DiscountRate = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Discount Rate must not be negative"); } if (data.DiscountRate > 0.0m && (short)data.DiscountType < 1) { errField.DiscountRate = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Discount Type must be specified if a Rate is supplied"); } } if (errField.PaymentTerms != SacsHierarchyItem.ValidValue.Ignore && data.PaymentTerms < 0) { errField.PaymentTerms = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Payment terms must not be negative"); } // Common properties. if (!IsValidValue(data.Notes, "notes", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_Notes))) { errField.Notes = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Status != SacsHierarchyItem.ValidValue.Ignore) { if (!IsValidValue(data.StatusCode, "status", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Association_Status), true, true)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!SbmAssociation.ValidStatuses.Contains(data.Status)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState(ErrorMessage.InvalidStatus); } } // Validate associated data. if (errField.AffiliateIdOwner != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.AffiliateIdOwner)) { SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params(); prmAffiliate.IncludedIds.Add(data.AffiliateIdOwner); prmAffiliate.StatusCat = SbmAffiliate.StatusCat.Any; if (GetAffiliateCount(prmAffiliate) < 1) { errField.AffiliateIdOwner = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Owner Affiliate not found"); } } if (errField.AffiliateIdTarget != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.AffiliateIdTarget)) { SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params(); prmAffiliate.IncludedIds.Add(data.AffiliateIdTarget); prmAffiliate.StatusCat = SbmAffiliate.StatusCat.Any; if (GetAffiliateCount(prmAffiliate) < 1) { errField.AffiliateIdTarget = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Target Affiliate not found"); } } if (errField.PriceSetId != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.PriceSetId)) { /* ToDo Validate Association PriceSet SbmPriceSet.Params prmPriceSet = new SbmPriceSet.Params(); prmPriceSet.IncludedIds.Add(data.PriceSetId); prmPriceSet.StatusCat = SbmPriceSet.StatusCat.Any; if (GetPriceSetCount(prmPriceSet) < 1) { errField.PriceSetId = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Price Set not found"); } */ } if (errField.TaxCodeId != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.TaxCodeId)) { /* ToDo Validate Association TaxCode errField.TaxCodeId = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Tax Code's Id not found"); */ } return true; } //------------------------------------------------------------------- // Association database interface. public abstract bool InsertAssociation(SbmAssociation association, DbUpdateInfo dbUpdateInfo); public abstract bool UpdateAssociation(SbmAssociation association, DbUpdateInfo dbUpdateInfo); public virtual bool AssociationCanBeDeleted(SbmAssociation association) { ClearErrorState(); return true; } public abstract bool DeleteAssociation(SbmAssociation association, DbUpdateInfo dbUpdateInfo); public abstract List GetAssociationTypesInUse(); //------------------------------------------------------------------- // Association list. public abstract ColumnDfn GetAssociationColumnDfn(SbmAssociation.Column columnId, String caption = "", int width = 0); public abstract List GetAssociationQueryFilter(SbmAssociation.Params prm); public abstract long GetAssociationCount(SbmAssociation.Params prm); public abstract List GetAssociationList(SbmAssociation.Params prm); public abstract DbResultSet ExecuteAssociationQuery(List columns, SbmAssociation.Params prm); //------------------------------------------------------------------- // D a t a V a l u e s //------------------------------------------------------------------- /// /// Extract and format result set data value where specific handling is required. /// Where response is an invalid data value, format value using column.FormatValue(values). /// public DataValue GetAssociationDataValue(ColumnDfn column, NamedValue.Map values) { DataValue value = new DataValue(); switch ((SbmAssociation.Column)column.Id) { //--------------------------------------------------------------- // Association TypeDesc. case SbmAssociation.Column.Type_Desc: { Sbm.AssociationType associationType = (Sbm.AssociationType)values.GetValue(column.DataName).AsLong(); value = new DataValue(AssociationTypes.GetDescForType(associationType, ((int)associationType).ToString())); break; } //--------------------------------------------------------------- // Discount TypeDesc. case SbmAssociation.Column.DiscountType_Desc: { Sbm.DiscountType discountType = (Sbm.DiscountType)values.GetValue(column.DataName).AsLong(); value = new DataValue(DiscountTypes.GetDescForType(discountType, ((int)discountType).ToString())); break; } //--------------------------------------------------------------- // Association Coding. case SbmAssociation.Column.AccountManagerDesc: { String accountManager = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.AccountManager, accountManager)); break; } case SbmAssociation.Column.AccountHandlerDesc: { String accountHandler = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.AccountHandler, accountHandler)); break; } case SbmAssociation.Column.AccountTypeDesc: { String accountType = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.AccountType, accountType)); break; } case SbmAssociation.Column.AccountRatingDesc: { String accountRating = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.AccountRating, accountRating)); break; } case SbmAssociation.Column.ContactAreaDesc: { String contactArea = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.ContactArea, contactArea)); break; } case SbmAssociation.Column.ContactHandlerDesc: { String contactHandler = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.ContactHandler, contactHandler)); break; } case SbmAssociation.Column.ContactMethodDesc: { String contactMethod = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.ContactMethod, contactMethod)); break; } case SbmAssociation.Column.ContactCallCycleDesc: { String contactCallCycle = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.ContactCallCycle, contactCallCycle)); break; } // Association Seasonal Category. case SbmAssociation.Column.SeasonalCategoryCode1: case SbmAssociation.Column.SeasonalCategoryDesc1: case SbmAssociation.Column.SeasonalCategoryCode2: case SbmAssociation.Column.SeasonalCategoryDesc2: case SbmAssociation.Column.SeasonalCategoryCode3: case SbmAssociation.Column.SeasonalCategoryDesc3: { // Association Id. ColumnDfn colId = GetAssociationColumnDfn(SbmAssociation.Column.Id); SysId associationId = new SysId(StringUtil.ToInt(values.GetValue(colId.DataName).ToString())); if (SysId.IsValid(associationId)) { List seasonalCategoryCodes = new List(); // ToDo CodeTypeConsole.GetItemCodes(Sbm.ItemType.Association, assocId, Sbm.ApplCodeType.SeasonalCategory); int codePos = 0; bool descRequired = true; switch (column.Id) { case (int)SbmAssociation.Column.SeasonalCategoryCode1: descRequired = false; codePos = 1; break; case (int)SbmAssociation.Column.SeasonalCategoryDesc1: codePos = 1; break; case (int)SbmAssociation.Column.SeasonalCategoryCode2: descRequired = false; codePos = 2; break; case (int)SbmAssociation.Column.SeasonalCategoryDesc2: codePos = 2; break; case (int)SbmAssociation.Column.SeasonalCategoryCode3: descRequired = false; codePos = 3; break; case (int)SbmAssociation.Column.SeasonalCategoryDesc3: codePos = 3; break; } if (codePos > 0 && codePos <= seasonalCategoryCodes.Count) { String seasonalCategoryCode = seasonalCategoryCodes[codePos]; if (descRequired) value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.SeasonalCategory, seasonalCategoryCode)); else value = new DataValue(seasonalCategoryCode); } } break; } case SbmAssociation.Column.OrderLeadTimeDesc: { String orderLeadTime = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.OrderLeadTime, orderLeadTime)); break; } case SbmAssociation.Column.DeliveryTypeDesc: { String deliveryType = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.DeliveryType, deliveryType)); break; } case SbmAssociation.Column.DeliveryMethodDesc: { String deliveryMethod = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.DeliveryMethod, deliveryMethod)); break; } case SbmAssociation.Column.DeliveryBookInDesc: { String deliveryBookIn = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.DeliveryBookIn, deliveryBookIn)); break; } //--------------------------------------------------------------- // Notes. case SbmAssociation.Column.Notes: { value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); break; } // Status. case SbmAssociation.Column.Status_Desc: case SbmAssociation.Column.Status_Ind: { SaStatus status = SacsSystem.GetStatusForCode(values.GetValue(column.DataName).ToString()); if (column.Id == (int)SbmAssociation.Column.Status_Desc) value = new DataValue(SacsSystem.GetStatusDesc(status)); else if (column.Id == (int)SbmAssociation.Column.Status_Ind) value = new DataValue(SbmAssociation.GetStatusTriState(status)); break; } // Flags. case SbmAssociation.Column.Primary: { ushort flags = (ushort)StringUtil.ToInt(values.GetValue(column.DataName).ToString()); value = new DataValue(SacsHierarchyItem.GetFlag(flags, SbmAssociation.Flag_Primary)); break; } case SbmAssociation.Column.Technician: { ushort flags = (ushort)StringUtil.ToInt(values.GetValue(column.DataName).ToString()); value = new DataValue(SacsHierarchyItem.GetFlag(flags, SbmAssociation.Flag_Technician)); break; } //--------------------------------------------------------------- // Affiliate Type Desc. case SbmAssociation.Column.Target_TypeDesc: { Sbm.AffiliateType affiliateType = (Sbm.AffiliateType)values.GetValue(column.DataName).AsLong(); value = new DataValue(AffiliateTypes.GetDescForType(affiliateType, ((int)affiliateType).ToString())); break; } // Affiliate Notes. case SbmAssociation.Column.Target_Notes: { value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); break; } //--------------------------------------------------------------- // Address Type. case SbmAssociation.Column.Target_Address_TypeDesc: { Sbm.AddressType addressType = (Sbm.AddressType)values.GetValue(column.DataName).AsLong(); value = new DataValue(AddressTypes.GetDescForType(addressType, ((int)addressType).ToString())); break; } // Address Summary. case SbmAssociation.Column.Target_Address_Summary: { List addresses = new List() { values.GetValue(GetAssociationColumnDfn(SbmAssociation.Column.Target_Address_Line1).DataName).ToString(), values.GetValue(GetAssociationColumnDfn(SbmAssociation.Column.Target_Address_Line2).DataName).ToString(), values.GetValue(GetAssociationColumnDfn(SbmAssociation.Column.Target_Address_City).DataName).ToString(), values.GetValue(GetAssociationColumnDfn(SbmAssociation.Column.Target_Address_Province).DataName).ToString(), values.GetValue(GetAssociationColumnDfn(SbmAssociation.Column.Target_Address_Postcode).DataName).ToString(), values.GetValue(GetAssociationColumnDfn(SbmAssociation.Column.Target_Address_Country).DataName).ToString(), }; value = new DataValue(addresses.Concat(", ", null, null, true, true).Replace(" ,", ",").Trim(',').Trim()); break; } // Address Coding. case SbmAssociation.Column.Target_Address_AccountManagerDesc: { String accountManager = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.AccountManager, accountManager)); break; } case SbmAssociation.Column.Target_Address_AccountHandlerDesc: { String accountHandler = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.AccountHandler, accountHandler)); break; } case SbmAssociation.Column.Target_Address_ContactAreaDesc: { String contactArea = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.ContactArea, contactArea)); break; } case SbmAssociation.Column.Target_Address_ContactHandlerDesc: { String contactHandler = values.GetValue(column.DataName).ToString(); value = new DataValue(GetCodeTypeCodeDesc(Sbm.ApplCodeType.ContactHandler, contactHandler)); break; } //----------------------------------------------------------- } return value; } //------------------------------------------------------------------- } //======================================================================= }