329 lines
14 KiB
C#
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;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
} |