Files
BusinessMgr-2019/SaBusMgrStandardDbas/Dbas/Bus/SbmVehicle_Dbas.cs
T
2021-07-08 20:50:46 +01:00

271 lines
9.8 KiB
C#

using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Interfaces;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Dbas.Bus
{
//=======================================================================
class SbmVehicle_Dbas : SbmVehicle
{
//-------------------------------------------------------------------
// Data members.
private readonly SbmInternals internals;
//-------------------------------------------------------------------
// Construction.
public SbmVehicle_Dbas(SbmInternals internals, SysId id, ushort flags) :
base(internals.UserContext, id)
{
this.internals = internals;
Flags = flags;
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
// NB Do not dispose the Internals - owned by manager.
}
base.Dispose(disposing);
}
//-------------------------------------------------------------------
// Properties.
//-------------------------------------------------------------------
// O d o m e t e r R e a d i n g
//-------------------------------------------------------------------
public override bool SetOdometerReading(decimal odometer)
{
if (SysId.IsValid(Id) || odometer < 1) return false;
DateTime todayDate = DateTime.MinValue;
// Check whether there is already a reading for today.
SbmVehicleEvent vehicleEventUpdated = null;
SbmVehicleEvent.Params prm = new SbmVehicleEvent.Params();
prm.VehicleId = Id;
prm.VehicleEventType = Sbm.VehicleEventType.Odometer;
foreach (SbmVehicleEvent vehicleEvent in internals.AssetMgr.GetVehicleEventList(prm))
{
// Check whether this event should be used in preference to any previously found.
if (vehicleEvent.StartOn.Date == todayDate)
{
// Always refresh any odometer reading recorded today.
vehicleEventUpdated = vehicleEvent;
break;
}
else if (vehicleEventUpdated == null && vehicleEvent.Odometer == odometer)
vehicleEventUpdated = vehicleEvent; // Events with the same reading can be updated (to refresh the date).
else if (vehicleEventUpdated == null && vehicleEvent.StartOn.Date > vehicleEventUpdated.StartOn.Date && vehicleEvent.Odometer == odometer)
vehicleEventUpdated = vehicleEvent; // Events with the same reading and more recent date can be refreshed.
}
if (vehicleEventUpdated != null)
{
vehicleEventUpdated.StartOn = todayDate;
vehicleEventUpdated.FinishOn = todayDate;
vehicleEventUpdated.Odometer = odometer;
if (internals.AssetMgr.UpdateVehicleEvent(vehicleEventUpdated, internals.DbUpdateInfo))
{
}
#if _DEBUG
else TRACE("SapVehicle::SetOdometerReading: Failed to update vehicle event - %s\n", assetMgr.ErrorState.Message.ToString());
#endif
}
else
{
// Create a new reading.
SbmVehicleEvent vehicleEvent = internals.AssetMgr.CreateVehicleEvent(Id, Sbm.VehicleEventType.Odometer);
if (vehicleEvent != null)
{
vehicleEventUpdated.StartOn = todayDate;
vehicleEventUpdated.FinishOn = todayDate;
vehicleEventUpdated.Odometer = odometer;
if (internals.AssetMgr.InsertVehicleEvent(vehicleEvent, internals.DbUpdateInfo))
{
}
#if _DEBUG
else TRACE("SapVehicle::SetOdometerReading: Failed to add vehicle event - %s\n", assetMgr.ErrorState.Message.ToString());
#endif
}
#if _DEBUG
else TRACE("SapVehicle::SetOdometerReading: Failed to create vehicle event - %s\n", assetMgr.ErrorState.Message.ToString());
#endif
}
// Update this vehicle itself.
LatestOdo = odometer;
LatestOdoOn = todayDate;
internals.AssetMgr.UpdateVehicle(this, internals.DbUpdateInfo);
return true;
}
//-------------------------------------------------------------------
// Associated data.
public override bool HasAssets()
{
if (!SysId.IsValid(Id)) return false;
ISacsDatabase db = internals.BusMgrDatabase;
if (db != null)
{
String tableAsset = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAsset);
if (db.TableExists(tableAsset))
{
List<String> filter = new List<String>();
filter.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaAsset_ItemType) + "=" + ((int)Sbm.ItemType.Vehicle).ToString());
filter.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaAsset_ItemId) + "=" + Id.ToString());
return db.GetRowCount(tableAsset, filter.Concat(" AND ", "(", ")")) > 0;
}
}
return false;
}
public override bool HasProcesses()
{
ClearErrorState();
if (!SysId.IsValid(Id)) return false;
ISacsDatabase db = internals.BusMgrDatabase;
if (db != null)
{
String tableAssetProcess = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAssetProcess);
if (db.TableExists(tableAssetProcess))
{
List<String> filter = new List<String>();
filter.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaAssetProcess_AssetId) + "=" + Id.ToString());
return db.GetRowCount(tableAssetProcess, filter.Concat(" AND ", "(", ")")) > 0;
}
}
return false;
}
public override bool HasEvents()
{
ClearErrorState();
if (!SysId.IsValid(Id)) return false;
ISacsDatabase db = internals.BusMgrDatabase;
if (db != null)
{
String tableVehicleEvent = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleEvent);
if (db.TableExists(tableVehicleEvent))
{
List<String> filter = new List<String>();
filter.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaVehicleEvent_VehicleId) + "=" + Id.ToString());
return db.GetRowCount(tableVehicleEvent, filter.Concat(" AND ", "(", ")")) > 0;
}
}
return false;
}
public override long GetFeatureCount()
{
ClearErrorState();
if (!SysId.IsValid(Id)) return 0;
ISacsDatabase db = internals.BusMgrDatabase;
if (db != null)
{
String tableVehicleFeature = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleFeature);
if (db.TableExists(tableVehicleFeature))
{
List<String> filter = new List<String>();
filter.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaVehicleFeature_VehicleId) + "=" + Id.ToString());
db.GetRowCount(tableVehicleFeature, filter.Concat(" AND ", "(", ")"));
}
}
return 0;
}
public override bool HasFeatures()
{
return GetFeatureCount() > 0;
}
public override bool HasInterfaceDataItems()
{
ClearErrorState();
if (!SysId.IsValid(Id)) return false;
SaInterfaceConsole interfaceConsole = internals.InterfaceConsole;
if (interfaceConsole == null) return false;
return interfaceConsole.ItemHasDataItems(new ItemId((short)Sbm.ItemType.Vehicle, Id));
}
public override bool HpiCheckCount()
{
ClearErrorState();
if (!SysId.IsValid(Id)) return false;
// ToDo ItemDataConsole & SbmItemData.Params for HpiCheckCount
/*SaItemDataConsole itemDataConsole = SbmGlobals.Application.GetItemDataConsole(userContext.SessionContext);
if (itemDataConsole == null)
{
SbmItemData.Params prmData = new SbmItemData.Params();
prmData.lItemId.Add(SaItemId.Id, Sbm.ItemType.Vehicle);
List<TypeCodeDesc> itemDataTypes = SbmSystem.GetCodesOfType(Sbm.SystemCode.ItemDataType);
prmData.lDataType.Add(itemDataTypes.GetCodeForType(Sbm.ItemData.Vehicle_HpiResponse));
prmData.lDataType.RemoveEmpty();
if (!StringUtil.IsEmpty(prmData.lDataType))
itemDataConsole.GetItemDataCount(prmData);
}*/
return false;
}
public override bool HasItemData()
{
ClearErrorState();
if (!SysId.IsValid(Id)) return false;
// ToDo ItemDataConsole & SbmItemData.Params for HasItemData
/*SaItemDataConsole itemDataConsole = SbmGlobals.Application.GetItemDataConsole(userContext.SessionContext);
SbmItemData.Params prmData = new SbmItemData.Params();
prmData.lItemId.Add(Id, Sbm.ItemType.Vehicle);
itemDataConsole != null && itemDataConsole.ItemDataExists(prmData);*/
return false;
}
public override bool ClearDependentData()
{
ClearErrorState();
if (this == null || !SysId.IsValid(Id)) return false;
ISacsDatabase db = internals.BusMgrDatabase;
if (db != null && !HasErrorState())
{
if (!HasErrorState())
{
/* ToDo SaItemDocConsole for Remove document references:
SaItemDocConsole itemDocConsole = SbmGlobals.Application.GetItemDocConsole(userContext.SessionContext);
if (itemDocConsole != null)
{
if (!itemDocConsole.ClearItemDocs(Sbm.ItemType.AssetCategory, Id))
SetErrorState(itemDocConsole.Exception());
}
else SetErrorState("Failed to retrieve item document console");
itemDocConsole = null;*/ // Do not delete this global object.
}
if (!HasErrorState())
{
/* ToDo SaItemDataConsole for Remove Item Data:
SaItemDataConsole itemDataConsole = SbmGlobals.Application.GetItemDataConsole(userContext.SessionContext);
if (itemDataConsole != null)
{
if (!itemDataConsole.ClearItemData(Sbm.ItemType.AssetCategory, Id, ""))
SetErrorState(itemDataConsole.Exception());
}
else SetErrorState("Failed to retrieve item Dataument console");
itemDataConsole = null;*/ // Do not delete this global object.
}
if (!HasErrorState())
{
// Remove interface data items.
SaInterfaceConsole interfaceConsole = internals.InterfaceConsole;
if (interfaceConsole != null)
{
if (!interfaceConsole.ClearInterfaceDataItems(new ItemId((short)Sbm.ItemType.AssetCategory, Id), internals.DbUpdateInfo))
SetErrorState(interfaceConsole.ErrorState.ToString());
}
else SetErrorState("Failed to retrieve interface console");
interfaceConsole = null; // Do not delete this global object.
}
}
else SetErrorState("database is unavailable");
return !HasErrorState();
}
}
//=======================================================================
}