Files
BusinessMgr-2019/SaBusMgrStandardBase/Base/Mgr/SbmTransactionMgr_Constituent.cs
T
2021-05-05 21:00:33 +01:00

329 lines
14 KiB
C#

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.ReferenceData;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
{
//=======================================================================
partial class SbmTransactionMgr
{
//*******************************************************************
// C o n s t i t u e n t s
//*******************************************************************
//-------------------------------------------------------------------
// Utilities.
public abstract SaUomType GetTimeTypeForUom(SysId idUom);
public abstract bool RefreshAllTotalTimes();
public abstract bool RefreshTotalTimes(SbmConstituent constituent, SysId TransIdPrevious, SysId ReqntIdPrevious);
public abstract bool RefreshTransTotalTime(SysId Trans);
public abstract bool RefreshReqntTotalTime(SysId Reqnt);
//---------------------------------------------------------------
// Calculate hours for each subdivision within the specified period.
// Returned list items contain two fields:
// PeriodDate Date to define start of period.
// PeriodHours Double value to indicate hours booked.
public static String GetPeriodTimeColumnName_Date()
{
return "PeriodDate";
}
public static String GetPeriodTimeColumnName_Hours()
{
return "PeriodHours";
}
public abstract List<DataItem> GetPeriodTimeBooked(SysId idAffilEmployee, DateTime dPeriodStart, DateTime dPeriodEnd, SaUomType eUomPeriod);
//-------------------------------------------------------------------
// Retrieve individual constituents.
//-------------------------------------------------------------------
// Constituent exist.
public bool ConstituentExistsById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return false;
SbmConstituent.Params prmituent = new SbmConstituent.Params();
prmituent.IncludedIds.Add(id);
prmituent.StatusCat = SbmConstituent.StatusCat.Any;
return GetConstituentCount(prmituent) == 1;
}
//-------------------------------------------------------------------
// Get constituent.
public abstract SbmConstituent GetConstituent(SbmConstituent.Params prm);
public SbmConstituent GetConstituentById(SysId id)
{
ClearErrorState();
if (!SysId.IsValid(id)) return null;
SbmConstituent.Params prmituent = new SbmConstituent.Params();
prmituent.IncludedIds.Add(id);
prmituent.StatusCat = SbmConstituent.StatusCat.Any;
return GetConstituent(prmituent);
}
//-------------------------------------------------------------------
// Create constituent.
public abstract SbmConstituent CreateConstituent(SysId assocId, Sbm.ConstituentType constituentType);
//-------------------------------------------------------------------
// Validate constituent data.
public bool IsValidConstituent(SbmConstituent constituentCategory)
{
ClearErrorState();
if (constituentCategory == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidConstituentData(constituentCategory.GetData(), new SbmConstituent.ErrField());
}
public virtual bool IsValidConstituentData(SbmConstituent.Data data, SbmConstituent.ErrField errField)
{
ClearErrorState();
// Constituent properties.
if (errField.AffIdOwner != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.AffiliateIdOwner))
{
errField.AffIdOwner = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid owner");
}
// NB AffiliateTargetId is optional.
if (errField.AssocId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.AssociationId))
{
errField.AssocId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid association");
}
if (errField.TransId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.TransactionId) && SysId.IsValid(data.RequirementId))
{
errField.TransId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("transaction not specified for requirement");
}
if (errField.TransId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.RequirementId) && SysId.IsValid(data.ConstituentId))
{
errField.ReqntId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("transaction not specified for referenecd constituent");
}
// NB AssetId, ProcessId, AssocIdContractor is optional.
if (errField.ConstituentType != SacsHierarchyItem.ValidValue.Ignore && (short)data.ConstituentType < 1)
{
if ((int)data.ConstituentType < 1)
{
errField.ConstituentType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid type");
}
}
// NB Seq, Effective, Required, Started, Completed is optional.
if (errField.DescBrief != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescBrief, "description", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Constituent_DescBrief), true))
{
errField.DescBrief = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DescOutline != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescOutline, "outline description", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Constituent_DescOutline), true))
{
errField.DescOutline = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DescDetail != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescDetail, "detailed description", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Constituent_DescDetail), true))
{
errField.DescDetail = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// NB TaskNumber, Priority is optional.
if (errField.Category != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Category, "ategory", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Constituent_Category), true))
{
errField.Category = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Reference != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Reference, "reference", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Constituent_Reference), true))
{
errField.Reference = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// NB Quantity, UomId, UnitCost, AmountEst, AmountNet, TaxCodeId, TaxRate, AmountTax, AmountTot, TaxRateRebate, AmountTaxRebate is optional.
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Constituent_Notes), true))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Constituent_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmConstituent.ConstituentStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
return true;
}
//-------------------------------------------------------------------
// Constituent database interface.
public abstract bool InsertConstituent(SbmConstituent constituentCategory, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateConstituent(SbmConstituent constituentCategory, DbUpdateInfo dbUpdateInfo);
public virtual bool ConstituentCanBeDeleted(SbmConstituent constituentCategory)
{
ClearErrorState();
return true;
}
public abstract bool DeleteConstituent(SbmConstituent constituentCategory, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Constituent list.
public abstract ColumnDfn GetConstituentColumnDfn(SbmConstituent.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetConstituentQueryFilter(SbmConstituent.Params prm);
public abstract long GetConstituentCount(SbmConstituent.Params prm);
public abstract List<SbmConstituent> GetConstituentList(SbmConstituent.Params prm);
public abstract DbResultSet ExecuteConstituentQuery(List<ColumnDfn> columns, SbmConstituent.Params prm);
//-------------------------------------------------------------------
// D a t a V a l u e s
//-------------------------------------------------------------------
public DataValue GetConstituentDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SbmConstituent.Column)column.Id)
{
//-------------------------------------------------------------------
// Constituent TypeDesc.
case SbmConstituent.Column.Type_Desc:
{
Sbm.ConstituentType constituentType = (Sbm.ConstituentType)values.GetValue(column.DataName).AsLong();
value = new DataValue(ConstituentTypes.GetDescForType(constituentType, ((int)constituentType).ToString()));
break;
}
// Transaction DescBrief.
case SbmConstituent.Column.Trans_DescBrief:
{
String transRef = values.GetValue(GetConstituentColumnDfn(SbmConstituent.Column.Trans_Ref).DataName).ToString();
String transDescBrief = values.GetValue(column.DataName).ToString();
value = new DataValue((transRef + " " + transDescBrief).Trim());
break;
}
// Requirement DescBrief.
case SbmConstituent.Column.Reqnt_DescBrief:
{
String reqntDescBrief = values.GetValue(column.DataName).ToString();
String jobNumber = values.GetValue(GetConstituentColumnDfn(SbmConstituent.Column.Reqnt_JobNumber).DataName).ToString();
if (!StringUtil.IsEmpty(jobNumber))
value = new DataValue(jobNumber + " " + reqntDescBrief);
break;
}
//-------------------------------------------------------------------
// Started Date&Time.
case SbmConstituent.Column.Started_DateFmt:
{
DateTime started = values.GetValue(column.DataName).AsDate();
value = new DataValue(DateUtil.Format(started, column.DateFormat));
break;
}
case SbmConstituent.Column.Started_Day:
{
DateTime started = values.GetValue(column.DataName).AsDate();
value = new DataValue(started.DayOfWeek.ToString());
break;
}
// Required Date&Time.
case SbmConstituent.Column.Required_DateFmt:
{
DateTime required = values.GetValue(column.DataName).AsDate();
value = new DataValue(DateUtil.Format(required, column.DateFormat));
break;
}
case SbmConstituent.Column.Required_Time:
{
DateTime required = values.GetValue(column.DataName).AsDateTime();
value = new DataValue(required);
break;
}
// Required CssClass.
case SbmConstituent.Column.Required_CssClass:
{
DateTime today = DateTime.Today;
DateTime required = values.GetValue(column.DataName).AsDate();
if (required < today) value = new DataValue("overdue");
else if (required < today.AddDays(2)) value = new DataValue("due");
else value = new DataValue("notdue");
break;
}
// Required Time
case SbmConstituent.Column.Required_Today:
{
DateTime today = DateTime.Today;
DateTime required = values.GetValue(column.DataName).AsDate();
if (required == today) value = new DataValue("Today");
else if (required == today.AddDays(1)) value = new DataValue("Tomorrow");
else if (required >= today.StartOfWorkingWeek() && required < today.StartOfWorkingWeek().AddDays(7)) value = new DataValue("This week");
else if (required >= today.StartOfWorkingWeek().AddDays(-7) && required < today.StartOfWorkingWeek()) value = new DataValue("Last week");
else if (required >= today.StartOfWorkingWeek().AddDays(7) && required < today.StartOfWorkingWeek().AddDays(14)) value = new DataValue("Next week");
else if (required >= today.StartOfMonth() && required <= today.EndOfMonth()) value = new DataValue("This month");
else if (required >= today.StartOfMonth().AddDays(-1).StartOfMonth() && required < today.StartOfMonth()) value = new DataValue("Last month");
else if (required > today.EndOfMonth() && required <= (today.EndOfMonth().AddDays(1)).EndOfMonth()) value = new DataValue("Next month");
else value = new DataValue(DateUtil.Format(required, "d-MMM-yyyy"));
break;
}
// Completed Date&Time.
case SbmConstituent.Column.Completed_DateFmt:
{
DateTime completed = values.GetValue(column.DataName).AsDate();
value = new DataValue(DateUtil.Format(completed, "d-MMM-yyyy"));
break;
}
//-------------------------------------------------------------------
// Due Indicator.
case SbmConstituent.Column.DueInd:
{
DataValue.TriStateType dueTriState = DataValue.TriStateType.Unknown;
SaStatus status = SacsSystem.GetStatusForCode(values.GetValue(GetConstituentColumnDfn(SbmConstituent.Column.Status).DataName).ToString());
if (status == SaStatus.Completed)
dueTriState = DataValue.TriStateType.Green;
else if (status == SaStatus.Required || status == SaStatus.InProgress)
{
DateTime required = values.GetValue(GetConstituentColumnDfn(SbmConstituent.Column.Required_Date).DataName).AsDate();
if (required <= DateTime.MinValue)
dueTriState = DataValue.TriStateType.Red;
else
dueTriState = DataValue.TriStateType.Amber;
}
value = new DataValue(dueTriState);
break;
}
//-------------------------------------------------------------------
// Notes.
case SbmConstituent.Column.Notes:
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
// Status. incl-flags in status_ind
case SbmConstituent.Column.Status_Desc:
case SbmConstituent.Column.Status_Ind:
{
SaStatus status = SacsSystem.GetStatusForCode(values.GetValue(column.DataName).ToString());
if (column.Id == (int)SbmConstituent.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDesc(status));
else if (column.Id == (int)SbmConstituent.Column.Status_Ind)
value = new DataValue(SbmConstituent.GetStatusTriState(status));
break;
}
//-------------------------------------------------------------------
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}