284 lines
11 KiB
C#
284 lines
11 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.Utils;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
|
|
{
|
|
//=======================================================================
|
|
// Stock manager - Locations.
|
|
//=======================================================================
|
|
partial class SbmStockMgr
|
|
{
|
|
//-------------------------------------------------------------------
|
|
// Utilities.
|
|
|
|
// Associated data.
|
|
public abstract bool LocationHasMovements(SysId locationId);
|
|
public abstract bool LocationHasStockLevels(SysId locationId);
|
|
|
|
//-------------------------------------------------------------------
|
|
// Default Stock Locations.
|
|
|
|
public SysId GetDefaultSalesStockLocation()
|
|
{
|
|
ClearErrorState();
|
|
SysId salesLocationId = SessionConsole.GetOwnerOption_StockLocation(Sbm.OrgOption_StockLocation.SalesOrderDefault);
|
|
if (SysId.IsValid(salesLocationId))
|
|
{
|
|
// Check that this location is valid for sales stock.
|
|
SbmLocation location = GetLocationById(salesLocationId);
|
|
if (location != null)
|
|
{
|
|
/*if (!location.SalesStock || location.Status != SaStatus.Active)
|
|
//salesLocationId.SetInvalid();*/
|
|
}
|
|
else SysId.IsValid(salesLocationId);
|
|
}
|
|
if (!SysId.IsValid(salesLocationId))
|
|
{
|
|
// Use another location manager to ensure that this one is not interferred with.
|
|
if (StockMgr != null)
|
|
{
|
|
// Identify the first created sales location:
|
|
SbmLocation.Params prmLocation = new SbmLocation.Params();
|
|
prmLocation.LocationCategory = Sbm.LocationCategory.Stock;
|
|
prmLocation.RestrictToSalesStock = true;
|
|
prmLocation.StatusCat = SbmLocation.StatusCat.ActiveOnly;
|
|
|
|
foreach (SbmLocation location in StockMgr.GetLocationList(prmLocation))
|
|
{
|
|
if (location == null) break;
|
|
if (location.SalesStock /*&& location.Status == SaStatus.Active*/)
|
|
{
|
|
if (!SysId.IsValid(salesLocationId) /*|| salesLocationId > location.Id*/)
|
|
salesLocationId = location.Id;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return salesLocationId;
|
|
}
|
|
|
|
public SysId GetDefaultPurchaseStockLocation()
|
|
{
|
|
ClearErrorState();
|
|
SysId purchaseLocationId = SessionConsole.GetOwnerOption_StockLocation(Sbm.OrgOption_StockLocation.PurchaseOrderDefault);
|
|
if (SysId.IsValid(purchaseLocationId))
|
|
{
|
|
purchaseLocationId = GetDefaultSalesStockLocation();
|
|
}
|
|
return purchaseLocationId;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Retrieve individual locations.
|
|
//-------------------------------------------------------------------
|
|
// Item exists.
|
|
public bool LocationExistsById(SysId locationId)
|
|
{
|
|
ClearErrorState();
|
|
if (!SysId.IsValid(locationId)) return false;
|
|
SbmLocation.Params prmLocation = new SbmLocation.Params();
|
|
prmLocation.IdsIncluded.Add(locationId);
|
|
prmLocation.StatusCat = SbmLocation.StatusCat.Any;
|
|
return GetLocationCount(prmLocation) == 1;
|
|
}
|
|
|
|
|
|
public bool LocationExistsByCode(Sbm.LocationCategory locationCategory, String code)
|
|
{
|
|
ClearErrorState();
|
|
if ((int)locationCategory > 1 && StringUtil.IsEmpty(code)) return false;
|
|
SbmLocation.Params prmLocation = new SbmLocation.Params();
|
|
prmLocation.LocationCategory = locationCategory;
|
|
prmLocation.Code = code;
|
|
prmLocation.StatusCat = SbmLocation.StatusCat.Any;
|
|
return GetLocationCount(prmLocation) == 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Get Item.
|
|
public abstract SbmLocation GetLocation(SbmLocation.Params prm);
|
|
public SbmLocation GetLocationById(SysId locationId)
|
|
{
|
|
ClearErrorState();
|
|
if (!SysId.IsValid(locationId)) return null;
|
|
SbmLocation.Params prmLocation = new SbmLocation.Params();
|
|
prmLocation.IdsIncluded.Add(locationId);
|
|
prmLocation.StatusCat = SbmLocation.StatusCat.Any;
|
|
return GetLocation(prmLocation);
|
|
}
|
|
|
|
public SbmLocation GetLocationByCode(Sbm.LocationCategory locationCategory, String code)
|
|
{
|
|
ClearErrorState();
|
|
if ((int)locationCategory > 1 && StringUtil.IsEmpty(code)) return null;
|
|
SbmLocation.Params prmLocation = new SbmLocation.Params();
|
|
prmLocation.LocationCategory = locationCategory;
|
|
prmLocation.Code = code;
|
|
prmLocation.StatusCat = SbmLocation.StatusCat.Any;
|
|
return GetLocation(prmLocation);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Create locations.
|
|
public abstract SbmLocation CreateLocation(Sbm.LocationCategory locationCategory);
|
|
|
|
//-------------------------------------------------------------------
|
|
// Validate Location data.
|
|
public bool IsValidLocation(SbmLocation location)
|
|
{
|
|
ClearErrorState();
|
|
if (location == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
|
|
return IsValidLocationData(location.GetData(), new SbmLocation.ErrField());
|
|
}
|
|
public virtual bool IsValidLocationData(SbmLocation.Data data, SbmLocation.ErrField errField)
|
|
{
|
|
ClearErrorState();
|
|
// Validate the identity.
|
|
if (errField.AffiliateIdOwner != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.AffiliateIdOwner))
|
|
{
|
|
errField.AffiliateIdOwner = SacsHierarchyItem.ValidValue.Invalid;
|
|
return SetErrorState("invalid owner");
|
|
}
|
|
if (errField.LocationCategory != SacsHierarchyItem.ValidValue.Ignore && (int)data.LocationCategory < 1)
|
|
{
|
|
errField.LocationCategory = SacsHierarchyItem.ValidValue.Invalid;
|
|
return SetErrorState("invalid category");
|
|
}
|
|
|
|
// Validate the text attributes.
|
|
if (errField.Code != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Code, "code", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Location_Code), true))
|
|
{
|
|
errField.Code = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.Name != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Name, "name", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Location_Name), true))
|
|
{
|
|
errField.Name = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
// Common properties.
|
|
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Location_Notes)))
|
|
{
|
|
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
|
|
{
|
|
if (!IsValidValue(data.StatusCode, "status", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Location_Status), true, true))
|
|
{
|
|
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (!SbmLocation.LocationStatuses.Contains(data.Status))
|
|
{
|
|
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
|
|
return SetErrorState(ErrorMessage.InvalidStatus);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Location database interface.
|
|
public abstract bool InsertLocation(SbmLocation location, DbUpdateInfo dbUpdateInfo);
|
|
public abstract bool UpdateLocation(SbmLocation location, DbUpdateInfo dbUpdateInfo);
|
|
public virtual bool LocationCanBeDeleted(SbmLocation location)
|
|
{
|
|
ClearErrorState();
|
|
return true;
|
|
}
|
|
public abstract bool DeleteLocation(SbmLocation location, DbUpdateInfo dbUpdateInfo);
|
|
|
|
//-------------------------------------------------------------------
|
|
// Location list.
|
|
public abstract ColumnDfn GetLocationColumnDfn(SbmLocation.Column columnId, String caption = "", int width = 0);
|
|
public abstract List<String> GetLocationQueryFilter(SbmLocation.Params prm);
|
|
public abstract long GetLocationCount(SbmLocation.Params prm);
|
|
public abstract List<SbmLocation> GetLocationList(SbmLocation.Params prm);
|
|
public abstract DbResultSet ExecuteLocationQuery(List<ColumnDfn> columns, SbmLocation.Params prm);
|
|
|
|
//-------------------------------------------------------------------
|
|
// D a t a V a l u e s
|
|
//-------------------------------------------------------------------
|
|
/// <summary>
|
|
/// Extract and format result set data value where specific handling is required.
|
|
/// <para>Where response is an invalid data value, format value using column.FormatValue(values).</para>
|
|
/// </summary>
|
|
public DataValue GetLocationDataValue(ColumnDfn column, NamedValue.Map values)
|
|
{
|
|
DataValue value = new DataValue();
|
|
switch ((SbmLocation.Column)column.Id)
|
|
{
|
|
//-----------------------------------------------------------
|
|
// Location CategoryDesc.
|
|
case SbmLocation.Column.Category_Desc:
|
|
{
|
|
Sbm.LocationCategory locationCategory = (Sbm.LocationCategory)values.GetValue(column.DataName).AsLong();
|
|
value = new DataValue(LocationCategories.GetDescForType(locationCategory, ((int)locationCategory).ToString()));
|
|
break;
|
|
}
|
|
|
|
//-----------------------------------------------------------
|
|
// Notes.
|
|
case SbmLocation.Column.Notes:
|
|
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
|
|
break;
|
|
|
|
// Status.
|
|
case SbmLocation.Column.Status_Desc:
|
|
case SbmLocation.Column.Status_Ind:
|
|
{
|
|
String statusCode = values.GetValue(column.DataName).ToString();
|
|
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
|
|
if (column.Id == (int)SbmLocation.Column.Status_Desc)
|
|
value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode));
|
|
else if (column.Id == (int)SbmLocation.Column.Status_Ind)
|
|
value = new DataValue(SbmLocation.GetStatusTriState(status));
|
|
break;
|
|
}
|
|
|
|
//-----------------------------------------------------------
|
|
// Flags.
|
|
case SbmLocation.Column.SalesStock_Y:
|
|
case SbmLocation.Column.SalesStock_Tick:
|
|
{
|
|
ushort flags = (ushort)StringUtil.ToInt(values.GetValue(column.DataName).ToString());
|
|
bool salesStock = SacsHierarchyItem.GetFlag(flags, SbmLocation.Flag_SalesStock);
|
|
if (column.Id == (int)SbmLocation.Column.SalesStock_Y)
|
|
value = new DataValue(salesStock ? "Y" : "");
|
|
else value = new DataValue(salesStock);
|
|
break;
|
|
}
|
|
case SbmLocation.Column.CalculateStock_Y:
|
|
case SbmLocation.Column.CalculateStock_Tick:
|
|
{
|
|
ushort flags = (ushort)StringUtil.ToInt(values.GetValue(column.DataName).ToString());
|
|
bool calculateStock = SacsHierarchyItem.GetFlag(flags, SbmLocation.Flag_CalculateStock);
|
|
if (column.Id == (int)SbmLocation.Column.CalculateStock_Y)
|
|
value = new DataValue(calculateStock ? "Y" : "");
|
|
else value = new DataValue(calculateStock);
|
|
break;
|
|
}
|
|
|
|
//-----------------------------------------------------------
|
|
default:
|
|
value = values.GetValue(column.DataName);
|
|
break;
|
|
|
|
}
|
|
return value;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|