271 lines
9.8 KiB
C#
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.ErrorStateMessage);
|
|
#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.ErrorStateMessage);
|
|
#endif
|
|
}
|
|
#if _DEBUG
|
|
else TRACE("SapVehicle::SetOdometerReading: Failed to create vehicle event - %s\n", assetMgr.ErrorStateMessage);
|
|
#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.ErrorStateMessage);
|
|
}
|
|
else SetErrorState("Failed to retrieve interface console");
|
|
interfaceConsole = null; // Do not delete this global object.
|
|
}
|
|
}
|
|
else SetErrorState("database is unavailable");
|
|
return !HasErrorState();
|
|
}
|
|
|
|
}
|
|
//=======================================================================
|
|
}
|