Files
ayanova7/source/bizobjects/AyaLib/GZTW.AyaNova.BLL/WorkorderItemTravel.cs
2018-06-29 19:47:36 +00:00

997 lines
27 KiB
C#

///////////////////////////////////////////////////////////
// WorkorderItemTravel.cs
// Implementation of Class WorkorderItemTravel
// CSLA type: Editable Child
// Created on: 07-Jun-2004 8:41:51 AM
// Object design: Joyce
// Coded: John 26-July-2004
///////////////////////////////////////////////////////////
using System;
using System.Data;
using CSLA.Data;
using GZTW.Data;
using CSLA;
using System.Threading;
using CSLA.Security;
namespace GZTW.AyaNova.BLL
{
/// <summary>
/// Travel object for <see cref="WorkorderItem"/> object's <see cref="WorkorderItemTravels"/> collection
/// </summary>
[Serializable]
public class WorkorderItemTravel : BusinessBase {
#region Attributes
private bool bReadOnly;
private Guid mID;
private SmartDate mCreated;
private SmartDate mModified;
private Guid mCreator;
private Guid mModifier;
private string mNotes="";
private Guid mWorkorderItemID;
private Guid mUserID;
private SmartDate mTravelStartDate;
private SmartDate mTravelStopDate;
private Guid mTravelRateID;
private string mTravelDetails="";
private decimal mTravelRateQuantity;
private decimal mNoChargeQuantity;
//-------------------------
private decimal mDistance;
private Guid mTaxRateSaleID;
private Guid mServiceBankID;
#endregion
#region Constructor
/// <summary>
/// Private constructor to prevent direct instantiation
/// </summary>
private WorkorderItemTravel()
{
//Set to read / write initially so that properties
//can be set
bReadOnly=false;
//Child object
MarkAsChild();
//New ID
mID = Guid.NewGuid();
mTravelStartDate= new SmartDate();
mTravelStopDate=new SmartDate();
//Set record history to defaults
mCreated = new SmartDate(DBUtil.CurrentWorkingDateTime);
mModified=new SmartDate();
mCreator=Guid.Empty;
mModifier=Guid.Empty;
mServiceBankID=Guid.Empty;
mTaxRateSaleID=AyaBizUtils.GlobalSettings.TaxRateSaleID;
}
#endregion
#region Business properties
/// <summary>
/// Get internal id number Read only property because it's set internally, not
/// externally
/// </summary>
public Guid ID
{
get
{
return mID;
}
}
/// <summary>
/// Get created date
///
///
/// </summary>
public string Created
{
get
{
return mCreated.ToString();
}
}
/// <summary>
/// Get modified date
///
///
/// </summary>
public string Modified
{
get
{
return mModified.ToString();
}
}
/// <summary>
/// Get user record ID of person who created this record
///
///
/// </summary>
public Guid Creator
{
get
{
return mCreator;
}
}
/// <summary>
/// Get user ID of person who modified this record
///
///
/// </summary>
public Guid Modifier
{
get
{
return mModifier;
}
}
//case 2006
/// <summary>
/// DEPRECATED: API USERS - DO NOT USE THIS FIELD.
/// IT HAS NEVER BEEN EXPOSED IN THE USER INTERFACE
/// AND MAY BE DROPPED ENTIRELY IN A FUTURE RELEASE
/// </summary>
public string Notes
{
get
{
return mNotes;
}
set
{
if(bReadOnly)
ThrowSetError();
else
{
if(mNotes!=value)
{
mNotes = value;
MarkDirty();
}
}
}
}
/// <summary>
/// <see cref="User"/> ID
/// </summary>
public Guid UserID
{
get
{
return mUserID;
}
set
{
if(bReadOnly)
ThrowSetError();
else
{
if(mUserID!=value)
{
mUserID = value;
MarkDirty();
}
}
}
}
/// <summary>
/// Quantity of travel
/// </summary>
public decimal TravelRateQuantity
{
get
{
return mTravelRateQuantity;
}
set
{
if(bReadOnly)
ThrowSetError();
else
{
if(mTravelRateQuantity!=value)
{
mTravelRateQuantity = value;
MarkDirty();
}
}
}
}
/// <summary>
/// Quantity of travel provided at no charge
///
/// </summary>
public decimal NoChargeQuantity
{
get
{
return mNoChargeQuantity;
}
set
{
if(bReadOnly)
ThrowSetError();
else
{
if(mNoChargeQuantity!=value)
{
mNoChargeQuantity = value;
MarkDirty();
}
}
}
}
/// <summary>
/// Travel start date and time
/// </summary>
public object TravelStartDate
{
get
{
return mTravelStartDate.DBValue;
}
set
{
if(bReadOnly)
ThrowSetError();
else
{
if (!AyaBizUtils.SmartDateEquals(mTravelStartDate, value)) //Case 298
{
mTravelStartDate.DBValue = value;
//Added: 4-Nov- 2006 autocomplete time
if (!mTravelStartDate.IsEmpty && mTravelStopDate.IsEmpty && (AyaBizUtils.GlobalSettings.TravelDfltTimeSpan != 0))
mTravelStopDate.Date = mTravelStartDate.Date.AddMinutes(AyaBizUtils.GlobalSettings.TravelDfltTimeSpan);//case 816
MarkDirty();
}
}
}
}
/// <summary>
/// Travel stop date and time
/// </summary>
public object TravelStopDate
{
get
{
return mTravelStopDate.DBValue;
}
set
{
if(bReadOnly)
ThrowSetError();
else
{
if (!AyaBizUtils.SmartDateEquals(mTravelStopDate, value)) //Case 298
{
mTravelStopDate.DBValue = value;
//Added: 4-Nov- 2006 autocomplete time
if (!mTravelStopDate.IsEmpty && mTravelStartDate.IsEmpty && (AyaBizUtils.GlobalSettings.TravelDfltTimeSpan != 0))
mTravelStartDate.Date = mTravelStopDate.Date.AddMinutes(-AyaBizUtils.GlobalSettings.TravelDfltTimeSpan);//case 816
MarkDirty();
}
}
}
}
#region PM accessible start / stop dates
internal DateTime dtTravelStartDate
{
get
{
return mTravelStartDate.Date;
}
set
{
if(mTravelStartDate.Date!=value)
{
mTravelStartDate.Date = value;
MarkDirty();
}
}
}
internal DateTime dtTravelStopDate
{
get
{
return mTravelStopDate.Date;
}
set
{
if(mTravelStopDate.Date!=value)
{
mTravelStopDate.Date = value;
MarkDirty();
}
}
}
#endregion
/// <summary>
/// <see cref="Rate"/> used for travel charges
/// </summary>
public Guid TravelRateID
{
get
{
return mTravelRateID;
}
set
{
if(bReadOnly)
ThrowSetError();
else
{
if(mTravelRateID!=value)
{
mTravelRateID = value;
MarkDirty();
}
}
}
}
/// <summary>
/// Up to 255 characters of notes on travel charges
/// </summary>
public string TravelDetails
{
get
{
return mTravelDetails;
}
set
{
if(bReadOnly)
ThrowSetError();
else
{
if(mTravelDetails!=value)
{
mTravelDetails = value;
//case 2006 added this rule
BrokenRules.Assert("TravelDetailsLength",
"Error.Object.FieldLengthExceeded255,WorkorderItemTravel.Label.TravelDetails", "TravelDetails", value.Length > 255);
MarkDirty();
}
}
}
}
/// <summary>
/// Guid ID of parent <see cref="WorkorderItem"/> object
/// </summary>
public Guid WorkorderItemID
{
get
{
return mWorkorderItemID;
}
// set
// {
// if(bReadOnly)
// ThrowSetError();
// else
// {
// if(mWorkorderItemID!=value)
// {
// mWorkorderItemID = value;
// MarkDirty();
//
// }
// }
// }
}
/// <summary>
/// Sales <see cref="TaxCode"/> for travel
/// </summary>
public Guid TaxRateSaleID
{
get
{
return mTaxRateSaleID;
}
set
{
if(bReadOnly)
ThrowSetError();
else
{
if(mTaxRateSaleID!=value)
{
mTaxRateSaleID = value;
MarkDirty();
}
}
}
}
/// <summary>
/// Called by parent collection object
/// when called in turn by workorder object that is read only due to
/// security or closed or service completed
/// </summary>
/// <param name="RO">Either true or the rights allowed for the current user</param>
public void SetReadOnly(bool RO)
{
bReadOnly=RO;
}
/// <summary>
/// Distance travelled
/// </summary>
public decimal Distance
{
get
{
return mDistance;
}
set
{
if(bReadOnly)
ThrowSetError();
else
{
if(mDistance!=value)
{
mDistance = value;
MarkDirty();
}
}
}
}
/// <summary>
/// Applies this travel entry to service bank
/// and sets ServiceBankID
/// </summary>
/// <param name="tid">Populate TypeAndID object</param>
/// <param name="TravelRate">Rate currency per unit for banked currency calcs</param>
/// <param name="Description">Descriptive text to enter in service bank
/// (255 char - the localized text length of O.WorkorderItemTravel which is inserted automatically before description)</param>
public void ApplyToServiceBank(TypeAndID tid, decimal TravelRate, string Description)
{
if (mServiceBankID != Guid.Empty)
throw new System.ApplicationException
(LocalizedTextTable.GetLocalizedTextDirect("WorkorderItemLabor.Label.UI.ReBankWarning"));
ServiceBank s = ServiceBank.NewItem();
s.AppliesToRootObjectID = tid.ID;
s.AppliesToRootObjectType = tid.RootObjectType;
s.Currency = -(TravelRate * this.mTravelRateQuantity);
s.Incidents = -1;
s.Hours = -(this.mTravelRateQuantity);
s.Description = LocalizedTextTable.GetLocalizedTextDirect("O.WorkorderItemTravel") + " (" + Description + ")";
s.EffectiveDate = this.mTravelStopDate.DBValue;
s.SourceRootObjectID = this.ID;
s.SourceRootObjectType = RootObjectTypes.WorkorderItemTravel;
s.Save();
mServiceBankID = s.ID;
MarkDirty();
}
/// <summary>
/// UI convenience property (read only)
/// </summary>
public bool IsBanked
{
get
{
return mServiceBankID != Guid.Empty;
}
}
//case 1975
/// <summary>
/// Determines automaticaly the most correct service rate and
/// the most correct object's bank to apply this
/// travel entry to and does so.
///
/// NOTE: silently returns regardless if banking was done or
/// if nothing to bank or no bankable object is found or there is already a service bank ID set
/// (there is no exception thrown in these logical non-bankable conditions)
///
/// Callers who need to confirm can check ServiceBankID after this method call which
/// will be set if bank entry was made otherwise it will remain Guid.Empty
/// </summary>
/// <param name="w">Parent workorder (required for autodiscovery of bank and rate)</param>
public void ApplyToServiceBankAuto(Workorder w)
{
TypeAndID bankableObject = w.BankableResolved(mWorkorderItemID);
if (bankableObject == null || bankableObject.RootObjectType == RootObjectTypes.Nothing)
return;
if (mTravelRateID == Guid.Empty) return;
if (mTravelRateQuantity == 0) return;
if (mServiceBankID != Guid.Empty) return;
RatePickList.RatePickListInfo theRate = RatePickList.GetListOfOneSpecificRate(mTravelRateID)[0];
decimal dCharge = theRate.Charge;
//case 1190
//Check if already banked
Guid gPriorBank = ServiceBankCheckAlreadyBanked.GetBankID(mID, RootObjectTypes.WorkorderItemTravel);
if (gPriorBank != Guid.Empty)
{
//case 1189 flag the labor record
ApplyServiceBankID(gPriorBank);
}
else
ApplyToServiceBank(bankableObject, dCharge, LocalizedTextTable.GetLocalizedTextDirect("O.Workorder") + " " + w.WorkorderService.ServiceNumber.ToString());
}
//case 1189
/// <summary>
/// Used to resolve an issue that can arise when a user applys to service bank but then doesn't save workorder
/// Won't actually bank because it's already banked but will tag this record with the correct
/// service bank ID from the prior banking
///
/// ID is retrieve by using the methods in ServiceBankCheckAlreadyBanked class
/// </summary>
/// <param name="serviceBankID"></param>
public void ApplyServiceBankID(Guid serviceBankID)
{
if (mServiceBankID != serviceBankID)
{
mServiceBankID = serviceBankID;
MarkDirty();
}
}
/// <summary>
/// ID of <see cref="ServiceBank"/> record created from this travel record
/// Is set when apply service bank is called
/// </summary>
public Guid ServiceBankID
{
get
{
return mServiceBankID;
}
}
/// <summary>
/// Throw an error when a read only user
/// tries to set a property
/// (this should normally never be called unless someone is using the developer api since the UI
/// should prevent it from happening initially)
/// </summary>
private void ThrowSetError()
{
throw new System.Security.SecurityException
(
string.Format
(
LocalizedTextTable.GetLocalizedTextDirect("Error.Security.NotAuthorizedToChange"),
LocalizedTextTable.GetLocalizedTextDirect("O.WorkorderItemTravel")
)
);
}
#endregion
#region System.object overrides
/// <summary>
///
/// </summary>
/// <returns></returns>
public override string ToString()
{
return "WorkorderItemTravel" + mID.ToString();
}
/// <summary>
///
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public override bool Equals(Object obj)
{
if ( obj == null || GetType ( ) != obj.GetType ( ) ) return false;
WorkorderItemTravel c=(WorkorderItemTravel)obj;
return mID==c.mID;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return ("WorkorderItemTravel"+mID).GetHashCode();
}
#endregion
#region Searching
/// <summary>
/// Returns a search result object based on search terms
/// for the ID specified
/// </summary>
/// <param name="ID"></param>
/// <param name="searchTerms"></param>
/// <returns></returns>
public static SearchResult GetSearchResult(Guid ID, string[]searchTerms)
{
//case 1387
if (Workorder.RightsToWorkorder(WorkorderIDFetcher.GetWorkorderByRelative(RootObjectTypes.WorkorderItemTravel, ID)) < SecurityLevelTypes.ReadOnly)
return new SearchResult();
SearchResult sr=new SearchResult();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
SafeDataReader dr = null;
try
{
//Case 88 removed
//"SELECT aID, aCreator, aModifier, aCreated, aModified, aNotes, " +
//" aTravelDetails FROM aWorkorderItemTravel WHERE " +
//"(aID = @ID)"
dr=DBUtil.GetReaderFromSQLString(
"SELECT AWORKORDERITEMTRAVEL.aID, AWORKORDERITEMTRAVEL.aCreator, " +
" AWORKORDERITEMTRAVEL.aModifier, AWORKORDERITEMTRAVEL.aCreated, " +
" AWORKORDERITEMTRAVEL.aModified, AWORKORDERITEMTRAVEL.aNotes, AWORKORDERITEMTRAVEL.aTravelDetails, " +
"AWORKORDERSERVICE.ASERVICENUMBER, " +
" AWORKORDERQUOTE.AQUOTENUMBER, AWORKORDERPREVENTIVEMAINTENANCE.APREVENTIVEMAINTENANCENUMBER, " +
" ACLIENT.ANAME AS ACLIENTNAME, aClient.aRegionID AS ACLIENTREGION, AWORKORDER.aWorkorderType " +
"FROM AWORKORDERITEMTRAVEL INNER JOIN AWORKORDERITEM " +
"ON AWORKORDERITEMTRAVEL.AWORKORDERITEMID = AWORKORDERITEM.AID " +
"LEFT OUTER " +
"JOIN AWORKORDER ON AWORKORDERITEM.AWORKORDERID = " +
"AWORKORDER.AID LEFT OUTER JOIN ACLIENT ON AWORKORDER.ACLIENTID " +
"= ACLIENT.AID LEFT OUTER JOIN AWORKORDERPREVENTIVEMAINTENANCE " +
"ON AWORKORDER.AID = " +
"AWORKORDERPREVENTIVEMAINTENANCE.AWORKORDERID LEFT OUTER JOIN " +
"AWORKORDERQUOTE ON AWORKORDER.AID = AWORKORDERQUOTE.AWORKORDERID " +
"LEFT OUTER JOIN AWORKORDERSERVICE " +
"ON AWORKORDER.AID = AWORKORDERSERVICE.AWORKORDERID " +
"WHERE (AWORKORDERITEMTRAVEL.aID = @ID)"
,ID);
if(!dr.Read())
return new SearchResult();//DBUtil.ThrowFetchError("SearchResult for WorkorderItemTravelID: " + ID.ToString());
if (!AyaBizUtils.InYourRegion(dr.GetGuid("ACLIENTREGION"))) return new SearchResult();//case 58
//Case 88 parse out workorder type and prepare description field accordingly
WorkorderTypes workorderType = (WorkorderTypes)dr.GetInt16("aWorkorderType");
switch (workorderType)
{
case WorkorderTypes.Service:
sr.Description = LocalizedTextTable.GetLocalizedTextDirect("O.WorkorderService") + " " + dr.GetInt32("aServiceNumber").ToString() + " " + dr.GetString("ACLIENTNAME");
break;
case WorkorderTypes.Quote:
sr.Description = LocalizedTextTable.GetLocalizedTextDirect("O.WorkorderQuote") + " " + dr.GetInt32("AQUOTENUMBER").ToString() + " " + dr.GetString("ACLIENTNAME");
break;
case WorkorderTypes.PreventiveMaintenance:
sr.Description = LocalizedTextTable.GetLocalizedTextDirect("O.WorkorderPreventiveMaintenance") + " " + dr.GetInt32("APREVENTIVEMAINTENANCENUMBER").ToString() + " " + dr.GetString("ACLIENTNAME");
break;
}
//sr.Description="";
sb.Append(dr.GetString("aTravelDetails"));
sb.Append(" ");
sb.Append(dr.GetString("aNotes"));
sr.Created=DBUtil.ToLocal(dr.GetSmartDate("aCreated"));
sr.Modified=DBUtil.ToLocal(dr.GetSmartDate("aModified"));
sr.Creator=dr.GetGuid("aCreator");
sr.Modifier=dr.GetGuid("aModifier");
}
finally
{
if(dr!=null) dr.Close();
}
//Formulate results
ExtractAndRank er = new ExtractAndRank();
er.Process(sb.ToString().Trim(),searchTerms);
sr.Extract=er.Extract;
sr.Rank=er.Ranking;
sr.AncestorRootObjectID=ID;
sr.AncestorRootObjectType=RootObjectTypes.WorkorderItemTravel;
return sr;
}
#endregion
#region Static methods
/// <summary>
/// New item
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
internal static WorkorderItemTravel NewItem(WorkorderItem obj)
{
//case 1387
if (AyaBizUtils.IsGenerator || ((obj.mHeaderRights > SecurityLevelTypes.ReadOnly) &&
(AyaBizUtils.Right("Object.WorkorderItemTravel") > (int)SecurityLevelTypes.ReadOnly)))
{
WorkorderItemTravel child = new WorkorderItemTravel();
child.mWorkorderItemID=obj.ID;
return child;
}
else
throw new System.Security.SecurityException(
string.Format(
LocalizedTextTable.GetLocalizedTextDirect("Error.Security.NotAuthorizedToCreate"),
LocalizedTextTable.GetLocalizedTextDirect("O.WorkorderItemTravel")));
}
/// <summary>
/// Get Item
/// </summary>
/// <param name="dr"></param>
/// <param name="obj"></param>
/// <returns></returns>
internal static WorkorderItemTravel GetItem(SafeDataReader dr, WorkorderItem obj)
{
//case 1387
if ((obj.mHeaderRights > SecurityLevelTypes.NoAccess) &&
(AyaBizUtils.Right("Object.WorkorderItemTravel") > (int)SecurityLevelTypes.NoAccess))
{
WorkorderItemTravel child = new WorkorderItemTravel();
child.Fetch(dr);
return child;
}
else
throw new System.Security.SecurityException(
string.Format(
LocalizedTextTable.GetLocalizedTextDirect("Error.Security.NotAuthorizedToRetrieve"),
LocalizedTextTable.GetLocalizedTextDirect("O.WorkorderItemTravel")));
}
#endregion
#region DAL DATA ACCESS
#region Fetch
/// <summary>
///
/// </summary>
/// <param name="dr"></param>
protected void Fetch(SafeDataReader dr)
{
//Standard fields
mCreated=DBUtil.ToLocal(dr.GetSmartDate("aCreated"));
mModified=DBUtil.ToLocal(dr.GetSmartDate("aModified"));
mCreator=dr.GetGuid("aCreator");
mModifier=dr.GetGuid("aModifier");
mID=dr.GetGuid("aID");
//WorkorderItemTravel fields
mNotes=dr.GetString("aNotes");
mNoChargeQuantity=dr.GetDecimal("aNoChargeQuantity");
mTravelDetails=dr.GetString("aTravelDetails");
mTravelRateID=dr.GetGuid("aTravelRateID");
mTravelRateQuantity=dr.GetDecimal("aTravelRateQuantity");
mTravelStartDate=DBUtil.ToLocal(dr.GetSmartDate("aTravelStartDate"));
mTravelStopDate=DBUtil.ToLocal(dr.GetSmartDate("aTravelStopDate"));
mUserID=dr.GetGuid("aUserID");
mWorkorderItemID=dr.GetGuid("aWorkorderItemID");
mDistance=dr.GetDecimal("aDistance");
mTaxRateSaleID=dr.GetGuid("aTaxRateSaleID");
mServiceBankID = dr.GetGuid("aServiceBankID");
//Get access rights level
bReadOnly=AyaBizUtils.Right("Object.WorkorderItemTravel")<(int)SecurityLevelTypes.ReadWrite;
MarkOld();
}
#endregion fetch
#region Add / Update
/// <summary>
/// Update child
/// </summary>
/// <param name="obj"></param>
/// <param name="tr"></param>
internal void Update(WorkorderItem obj,IDbTransaction tr)
{
//No need to update if there is nothing changed
if(!this.IsDirty) return;
// If not a new record, check if record was modified
//by another user since original retrieval:
if(!IsNew)
DBUtil.CheckSafeToUpdateInsideTransaction(this.mModified.Date, this.mID, "aWorkorderItemTravel", tr);//case 1960
#region Delete
if(IsDeleted)
{
if(!IsNew)
{
//Make a reversing entry in the service bank
if (this.mServiceBankID != Guid.Empty)
ServiceBank.ReverseItem(mServiceBankID, tr);
DBCommandWrapper cmDelete = DBUtil.GetCommandFromSQL("DELETE FROM aWorkorderItemTravel WHERE aID=@ID;");
cmDelete.AddInParameter("@ID",DbType.Guid,this.mID);
DBUtil.DB.ExecuteNonQuery(cmDelete, tr);
DBUtil.RemoveKeywords(tr,RootObjectTypes.WorkorderItemTravel,this.mID);
}
MarkNew();
return;
}
#endregion
#region Add / Update
//get modification time temporarily, if update succeeds then
//set to this time
System.DateTime dtModified = DBUtil.CurrentWorkingDateTime;
DBCommandWrapper cm = null;
if(IsNew)//Add or update?
cm=DBUtil.GetCommandFromSQL(
"INSERT INTO aWorkorderItemTravel (aWorkorderItemID, " +
"aID, aNotes, aUserID, aTravelStartDate, aTravelStopDate, " +
"aTravelRateID, aTravelDetails, aTravelRateQuantity, " +
"aNoChargeQuantity, aDistance, aServiceBankID, aTaxRateSaleID, aCreated,aModified,aCreator, " +
"aModifier) VALUES (@WorkorderItemID,@ID,@Notes,@UserID, " +
"@TravelStartDate,@TravelStopDate, @TravelRateID, " +
"@TravelDetails,@TravelRateQuantity,@NoChargeQuantity, " +
"@Distance,@ServiceBankID,@TaxRateSaleID,@Created,@Modified,@CurrentUserID,@CurrentUserID)"
);
else
cm=DBUtil.GetCommandFromSQL(
"UPDATE aWorkorderItemTravel SET aWorkorderItemID=@WorkorderItemID, " +
"aID=@ID, aNotes=@Notes, aUserID=@UserID, " +
"aTravelStartDate=@TravelStartDate, aTravelStopDate=@TravelStopDate, " +
"aTravelRateID=@TravelRateID, " +
"aTravelDetails=@TravelDetails, aTravelRateQuantity=@TravelRateQuantity, " +
"aNoChargeQuantity=@NoChargeQuantity, " +
"aDistance=@Distance,aServiceBankID=@ServiceBankID, aTaxRateSaleID=@TaxRateSaleID, aModifier=@CurrentUserID, " +
"aModified=@Modified WHERE aID=@ID"
);
//WorkorderItemTravel specific
cm.AddInParameter("@ID",DbType.Guid,mID);
cm.AddInParameter("@WorkorderItemID",DbType.Guid,mWorkorderItemID);
cm.AddLargeStringInParameter("@Notes", mNotes);
cm.AddInParameter("@NoChargeQuantity",DbType.Decimal,mNoChargeQuantity);
cm.AddInParameter("@TravelDetails",DbType.String,mTravelDetails);
cm.AddInParameter("@TravelRateID",DbType.Guid,mTravelRateID);
cm.AddInParameter("@TravelRateQuantity",DbType.Decimal,mTravelRateQuantity);
cm.AddInParameter("@TravelStartDate",DbType.DateTime,DBUtil.ToUTC(mTravelStartDate).DBValue);
cm.AddInParameter("@TravelStopDate",DbType.DateTime,DBUtil.ToUTC(mTravelStopDate).DBValue);
cm.AddInParameter("@UserID",DbType.Guid,mUserID);
cm.AddInParameter("@Distance",DbType.Decimal,mDistance);
cm.AddInParameter("@ServiceBankID", DbType.Guid, mServiceBankID);
cm.AddInParameter("@TaxRateSaleID",DbType.Guid,mTaxRateSaleID);
//standard parameters
cm.AddInParameter("@CurrentUserID",DbType.Guid, CurrentUserID);
cm.AddInParameter("@Created",DbType.DateTime, DBUtil.ToUTC(mCreated.Date));
cm.AddInParameter("@Modified",DbType.DateTime, DBUtil.ToUTC(dtModified));
DBUtil.DB.ExecuteNonQuery(cm, tr);
//Process keywords
DBUtil.ProcessKeywords(tr,this.mID,RootObjectTypes.WorkorderItemTravel,IsNew,AyaBizUtils.Break(false,mNotes,mTravelDetails));
MarkOld();//db is now synched with object
//Successful update so
//change modification time to match
this.mModified.Date=dtModified;
#endregion
}
#endregion add/update
#endregion
}//end WorkorderItemTravel
}//end namespace GZTW.AyaNova.BLL