864 lines
23 KiB
C#
864 lines
23 KiB
C#
///////////////////////////////////////////////////////////
|
|
// WorkorderItemLoan.cs
|
|
// Implementation of Class WorkorderItemLoan
|
|
// CSLA type: Editable Child
|
|
// Created on: 12-Nov-2005
|
|
// Object design: Joyce/John
|
|
// Coded: John 12-Nov-2005
|
|
///////////////////////////////////////////////////////////
|
|
|
|
using System;
|
|
using System.Data;
|
|
using CSLA.Data;
|
|
using GZTW.Data;
|
|
using CSLA;
|
|
using System.Threading;
|
|
using CSLA.Security;
|
|
|
|
namespace GZTW.AyaNova.BLL
|
|
{
|
|
/// <summary>
|
|
/// Loaned equipment object for <see cref="WorkorderItem"/> object's <see cref="WorkorderItemLabors"/> collection
|
|
/// </summary>
|
|
[Serializable]
|
|
public class WorkorderItemLoan : BusinessBase
|
|
{
|
|
|
|
#region Attributes
|
|
|
|
private Guid mWorkorderItemID;
|
|
private bool bReadOnly;
|
|
private Guid mID;
|
|
private SmartDate mCreated;
|
|
private SmartDate mModified;
|
|
private Guid mCreator;
|
|
private Guid mModifier;
|
|
private string mNotes="";
|
|
private SmartDate mOutDate;
|
|
private SmartDate mDueDate;
|
|
private SmartDate mReturnDate;
|
|
private decimal mCharges=0m;
|
|
private Guid mTaxCodeID;
|
|
private Guid mLoanItemID=Guid.NewGuid();//change:19-July-2006 for broken rule
|
|
|
|
//Case 420
|
|
private decimal mQuantity = 1;
|
|
private LoanItemRates mRate = 0;
|
|
|
|
|
|
#endregion
|
|
|
|
#region Constructor
|
|
|
|
/// <summary>
|
|
/// Private constructor to prevent direct instantiation
|
|
/// </summary>
|
|
private WorkorderItemLoan()
|
|
{
|
|
//Set to read / write initially so that properties
|
|
//can be set
|
|
bReadOnly=false;
|
|
|
|
//Child object
|
|
MarkAsChild();
|
|
|
|
//New ID
|
|
mID = Guid.NewGuid();
|
|
|
|
//Added:19-July-2006
|
|
//Pre break the loanitem can't be empty rule
|
|
LoanItemID = Guid.Empty;
|
|
|
|
//Set record history to defaults
|
|
mCreated = new SmartDate(DBUtil.CurrentWorkingDateTime);
|
|
mModified=new SmartDate();
|
|
mCreator=Guid.Empty;
|
|
mModifier=Guid.Empty;
|
|
|
|
mOutDate = new SmartDate(DBUtil.CurrentWorkingDateTime);
|
|
mDueDate=new SmartDate();
|
|
mReturnDate=new SmartDate();
|
|
mTaxCodeID=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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Notes
|
|
/// </summary>
|
|
public string Notes
|
|
{
|
|
get
|
|
{
|
|
return mNotes;
|
|
}
|
|
set
|
|
{
|
|
if(bReadOnly)
|
|
ThrowSetError();
|
|
else
|
|
{
|
|
if(mNotes!=value)
|
|
{
|
|
mNotes = value;
|
|
MarkDirty();
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// GUID of <see cref="TaxCode"/> used for charges
|
|
/// </summary>
|
|
public Guid TaxCodeID
|
|
{
|
|
get
|
|
{
|
|
return mTaxCodeID;
|
|
}
|
|
set
|
|
{
|
|
if(bReadOnly)
|
|
ThrowSetError();
|
|
else
|
|
{
|
|
if(mTaxCodeID!=value)
|
|
{
|
|
mTaxCodeID = value;
|
|
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>
|
|
/// Retail amount to charge client Can be 0
|
|
/// </summary>
|
|
public decimal Charges
|
|
{
|
|
get
|
|
{
|
|
return mCharges;
|
|
}
|
|
set
|
|
{
|
|
if(bReadOnly)
|
|
ThrowSetError();
|
|
else
|
|
{
|
|
if(mCharges!=value)
|
|
{
|
|
mCharges = value;
|
|
MarkDirty();
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// ReturnDate
|
|
/// </summary>
|
|
public object ReturnDate
|
|
{
|
|
get
|
|
{
|
|
return mReturnDate.DBValue;
|
|
}
|
|
set
|
|
{
|
|
if(bReadOnly)
|
|
ThrowSetError();
|
|
else
|
|
{
|
|
if (!AyaBizUtils.SmartDateEquals(mReturnDate, value)) //Case 298
|
|
{
|
|
mReturnDate.DBValue = value;
|
|
MarkDirty();
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Date expected to be returned
|
|
/// </summary>
|
|
public object DueDate
|
|
{
|
|
get
|
|
{
|
|
return mDueDate.DBValue;
|
|
}
|
|
set
|
|
{
|
|
if(bReadOnly)
|
|
ThrowSetError();
|
|
else
|
|
{
|
|
if (!AyaBizUtils.SmartDateEquals(mDueDate, value)) //Case 298
|
|
{
|
|
|
|
mDueDate.DBValue = value;
|
|
MarkDirty();
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Date loaned out
|
|
/// </summary>
|
|
public object OutDate
|
|
{
|
|
get
|
|
{
|
|
return mOutDate.DBValue;
|
|
}
|
|
set
|
|
{
|
|
if(bReadOnly)
|
|
ThrowSetError();
|
|
else
|
|
{
|
|
if (!AyaBizUtils.SmartDateEquals(mOutDate, value)) //Case 298
|
|
{
|
|
mOutDate.DBValue = value;
|
|
MarkDirty();
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// ID of <see cref="LoanItem"/> being loaned
|
|
/// </summary>
|
|
public Guid LoanItemID
|
|
{
|
|
get
|
|
{
|
|
return mLoanItemID;
|
|
}
|
|
set
|
|
{
|
|
if(bReadOnly)
|
|
ThrowSetError();
|
|
else
|
|
{
|
|
if(mLoanItemID!=value)
|
|
{
|
|
mLoanItemID = value;
|
|
|
|
//Added:19-July-2006
|
|
BrokenRules.Assert("LoanItemRequired",
|
|
"Error.Object.RequiredFieldEmpty,WorkorderItemLoan.Label.LoanItemID",
|
|
"LoanItemID", value == Guid.Empty);
|
|
|
|
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;
|
|
}
|
|
|
|
|
|
//Case 420
|
|
/// <summary>
|
|
/// Quantity amount, used in conjunction with set rates
|
|
/// if applicable. Used to set Charges field at time of user entry
|
|
/// not used in subsequent calculations
|
|
/// </summary>
|
|
public decimal Quantity
|
|
{
|
|
get
|
|
{
|
|
return mQuantity;
|
|
}
|
|
set
|
|
{
|
|
if (bReadOnly)
|
|
ThrowSetError();
|
|
else
|
|
{
|
|
if (mQuantity != value)
|
|
{
|
|
mQuantity = value;
|
|
MarkDirty();
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get /set time span rate corresponding to loanitem's
|
|
/// pre-set 6 rates for different time spans
|
|
/// Used for calculation on entry and review
|
|
///
|
|
/// Not a rate in the labor object sense of rates
|
|
/// a rate in the sense of a rental business's concept of rates which
|
|
/// are by time period of rental, in this case
|
|
/// Hours, half days, days, weeks, months, years
|
|
/// </summary>
|
|
public LoanItemRates Rate
|
|
{
|
|
get
|
|
{
|
|
return mRate;
|
|
}
|
|
set
|
|
{
|
|
if (bReadOnly)
|
|
ThrowSetError();
|
|
else
|
|
{
|
|
if (mRate != value)
|
|
{
|
|
mRate = value;
|
|
MarkDirty();
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/// <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.WorkorderItemLoan")
|
|
)
|
|
);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region System.object overrides
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public override string ToString()
|
|
{
|
|
return "WorkorderItemLoan" + mID.ToString();
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="obj"></param>
|
|
/// <returns></returns>
|
|
public override bool Equals(Object obj)
|
|
{
|
|
if ( obj == null || GetType ( ) != obj.GetType ( ) ) return false;
|
|
WorkorderItemLoan c=(WorkorderItemLoan)obj;
|
|
return mID==c.mID;
|
|
}
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public override int GetHashCode()
|
|
{
|
|
return ("WorkorderItemLoan"+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.WorkorderItemLoan, ID)) < SecurityLevelTypes.ReadOnly)
|
|
return new SearchResult();
|
|
|
|
|
|
SearchResult sr=new SearchResult();
|
|
|
|
|
|
System.Text.StringBuilder sb = new System.Text.StringBuilder();
|
|
SafeDataReader dr = null;
|
|
try
|
|
{
|
|
//Changed: 31-Aug-2006 there was a trailing , after the last column name
|
|
//in the select statement <doh!>
|
|
//Case 88
|
|
// "SELECT aCreated, aModified, aCreator, aModifier, aNotes " +
|
|
// "FROM aWorkorderItemLoan WHERE (aID = @ID)"
|
|
dr=DBUtil.GetReaderFromSQLString(
|
|
//Case 88 changed
|
|
"SELECT aWorkorderItemLoan.aID, aWorkorderItemLoan.aCreator, " +
|
|
" aWorkorderItemLoan.aModifier, aWorkorderItemLoan.aCreated, " +
|
|
" aWorkorderItemLoan.aModified, aWorkorderItemLoan.aNotes, " +
|
|
"AWORKORDERSERVICE.ASERVICENUMBER, " +
|
|
" AWORKORDERQUOTE.AQUOTENUMBER, AWORKORDERPREVENTIVEMAINTENANCE.APREVENTIVEMAINTENANCENUMBER, " +
|
|
" ACLIENT.ANAME AS ACLIENTNAME, aClient.aRegionID AS ACLIENTREGION, AWORKORDER.aWorkorderType " +
|
|
"FROM aWorkorderItemLoan INNER JOIN AWORKORDERITEM " +
|
|
"ON aWorkorderItemLoan.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 (aWorkorderItemLoan.aID = @ID)"
|
|
|
|
,ID);
|
|
|
|
if(!dr.Read())
|
|
return new SearchResult();//DBUtil.ThrowFetchError("SearchResult for WorkorderItemLoanID: " + 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("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.WorkorderItemLoan;
|
|
|
|
return sr;
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Static methods
|
|
|
|
|
|
/// <summary>
|
|
/// New item
|
|
/// </summary>
|
|
/// <param name="obj"></param>
|
|
/// <returns></returns>
|
|
internal static WorkorderItemLoan NewItem(WorkorderItem obj)
|
|
{
|
|
|
|
//case 1387
|
|
if (AyaBizUtils.IsGenerator || ((obj.mHeaderRights > SecurityLevelTypes.ReadOnly) &&
|
|
(AyaBizUtils.Right("Object.WorkorderItemLoan") > (int)SecurityLevelTypes.ReadOnly)))
|
|
{
|
|
|
|
WorkorderItemLoan child = new WorkorderItemLoan();
|
|
child.mWorkorderItemID=obj.ID;
|
|
return child;
|
|
}
|
|
else
|
|
throw new System.Security.SecurityException(
|
|
string.Format(
|
|
LocalizedTextTable.GetLocalizedTextDirect("Error.Security.NotAuthorizedToCreate"),
|
|
LocalizedTextTable.GetLocalizedTextDirect("O.WorkorderItemLoan")));
|
|
|
|
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get Item
|
|
/// </summary>
|
|
/// <param name="dr"></param>
|
|
/// <param name="obj"></param>
|
|
/// <returns></returns>
|
|
internal static WorkorderItemLoan GetItem(SafeDataReader dr, WorkorderItem obj)
|
|
{
|
|
//case 1387
|
|
if ((obj.mHeaderRights > SecurityLevelTypes.NoAccess) &&
|
|
(AyaBizUtils.Right("Object.WorkorderItemLoan") > (int)SecurityLevelTypes.NoAccess))
|
|
{
|
|
WorkorderItemLoan child = new WorkorderItemLoan();
|
|
child.Fetch(dr);
|
|
return child;
|
|
}
|
|
else
|
|
throw new System.Security.SecurityException(
|
|
string.Format(
|
|
LocalizedTextTable.GetLocalizedTextDirect("Error.Security.NotAuthorizedToRetrieve"),
|
|
LocalizedTextTable.GetLocalizedTextDirect("O.WorkorderItemLoan")));
|
|
}
|
|
|
|
|
|
|
|
#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");
|
|
|
|
//WorkorderItemLoan fields
|
|
mNotes=dr.GetString("aNotes");
|
|
mTaxCodeID=dr.GetGuid("aTaxCodeID");
|
|
mWorkorderItemID=dr.GetGuid("aWorkorderItemID");
|
|
mCharges=dr.GetDecimal("aCharges");
|
|
mOutDate=DBUtil.ToLocal(dr.GetSmartDate("aOutDate"));
|
|
mDueDate=DBUtil.ToLocal(dr.GetSmartDate("aDueDate"));
|
|
mReturnDate=DBUtil.ToLocal(dr.GetSmartDate("aReturnDate"));
|
|
|
|
//changed:19-July2006 (rule added)
|
|
//Unbreak the broken rule on load
|
|
LoanItemID=dr.GetGuid("aLoanItemID");
|
|
|
|
//Case 420
|
|
mQuantity = dr.GetDecimal("aQuantity");
|
|
mRate = (LoanItemRates)dr.GetInt16("aRate");
|
|
|
|
//Get access rights level
|
|
bReadOnly=AyaBizUtils.Right("Object.WorkorderItemLoan")<(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,"aWorkorderItemLoan",tr);//case 1960
|
|
|
|
#region Delete
|
|
if(IsDeleted)
|
|
{
|
|
if(!IsNew)
|
|
{
|
|
//Un-Flag any loan item with aCurrentWorkorderItemLoan = this id
|
|
//Note that to be safe, this sets any loanitem with this loan item ID to empty
|
|
//rather than the loan item this is set to because this might be being deleted
|
|
//after loan item was already set to another workorderItemLoan
|
|
DBCommandWrapper cmLoanItemDeflag = DBUtil.GetCommandFromSQL(
|
|
"UPDATE aLoanItem SET aCurrentWorkorderItemLoan=@GUIDEMPTY " +
|
|
"WHERE aCurrentWorkorderItemLoan=@CurrentWOILoanID"
|
|
);
|
|
cmLoanItemDeflag.AddInParameter("@CurrentWOILoanID",DbType.Guid, this.mID);
|
|
cmLoanItemDeflag.AddInParameter("@GUIDEMPTY",DbType.Guid, Guid.Empty);
|
|
DBUtil.DB.ExecuteNonQuery(cmLoanItemDeflag, tr);
|
|
|
|
//Now remove workorderitemloan record
|
|
DBCommandWrapper cmDelete = DBUtil.GetCommandFromSQL("DELETE FROM aWorkorderItemLoan WHERE aID=@ID;");
|
|
cmDelete.AddInParameter("@ID",DbType.Guid,this.mID);
|
|
DBUtil.DB.ExecuteNonQuery(cmDelete, tr);
|
|
DBUtil.RemoveKeywords(tr,RootObjectTypes.WorkorderItemLoan,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 aWorkorderItemLoan (aWorkorderItemID, " +
|
|
"aID, aCharges, aNotes,aOutDate,aDueDate,aReturnDate, " +
|
|
"aTaxCodeID, aLoanItemID, aCreated,aModified,aCreator,aModifier, " +
|
|
//case 420
|
|
"aQuantity, aRate " +
|
|
") " +
|
|
"VALUES (@WorkorderItemID,@ID,@Charges,@Notes, @OutDate, @DueDate, @ReturnDate, " +
|
|
"@TaxCodeID,@LoanItemID, @Created,@Modified,@CurrentUserID, " +
|
|
"@CurrentUserID, " +
|
|
//Case 420
|
|
"@Quantity, @Rate " +
|
|
")"
|
|
);
|
|
|
|
else
|
|
cm=DBUtil.GetCommandFromSQL(
|
|
"UPDATE aWorkorderItemLoan SET aWorkorderItemID=@WorkorderItemID, " +
|
|
"aID=@ID, aCharges=@Charges, aNotes=@Notes, aOutDate=@OutDate, " +
|
|
"aDueDate=@DueDate,aReturnDate=@ReturnDate, " +
|
|
"aTaxCodeID=@TaxCodeID, aLoanItemID=@LoanItemID, " +
|
|
"aModifier=@CurrentUserID, aModified=@Modified, " +
|
|
//Case 420
|
|
"aQuantity=@Quantity, aRate=@Rate " +
|
|
"WHERE aID=@ID"
|
|
);
|
|
|
|
//WorkorderItemLoan specific
|
|
cm.AddInParameter("@ID",DbType.Guid,mID);
|
|
cm.AddInParameter("@WorkorderItemID",DbType.Guid,mWorkorderItemID);
|
|
cm.AddLargeStringInParameter("@Notes",mNotes);
|
|
cm.AddInParameter("@TaxCodeID",DbType.Guid,mTaxCodeID);
|
|
cm.AddInParameter("@LoanItemID",DbType.Guid,mLoanItemID);
|
|
cm.AddInParameter("@Charges",DbType.Decimal,mCharges);
|
|
cm.AddInParameter("@OutDate",DbType.DateTime,DBUtil.ToUTC(this.mOutDate).DBValue);
|
|
cm.AddInParameter("@DueDate",DbType.DateTime,DBUtil.ToUTC(this.mDueDate).DBValue);
|
|
cm.AddInParameter("@ReturnDate",DbType.DateTime,DBUtil.ToUTC(this.mReturnDate).DBValue);
|
|
|
|
|
|
//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));
|
|
|
|
//Case 420
|
|
cm.AddInParameter("@Quantity", DbType.Decimal, mQuantity);
|
|
cm.AddInParameter("@Rate", DbType.Int16, (int)mRate);
|
|
|
|
|
|
DBUtil.DB.ExecuteNonQuery(cm, tr);
|
|
|
|
|
|
//***********************************************************************
|
|
//case 3148
|
|
//if a user changes the loan item then we need to unflag the old one.
|
|
//so I've copied the exact unflag code from delete above which is safe
|
|
//as it will get reflagged immediately after
|
|
|
|
//deflag any record that has this workorderitemloan id as currentwoiloanid
|
|
//this is safe because there's a 1:1 correspondence so this woitemloan ID should not appear
|
|
//anywhere in the loanitem table except for the single actual record (id) selected.
|
|
//so this will erase it and the next block will set it
|
|
DBCommandWrapper cmLoanItemDeflag2 = DBUtil.GetCommandFromSQL(
|
|
"UPDATE aLoanItem SET aCurrentWorkorderItemLoan=@GUIDEMPTY " +
|
|
"WHERE aCurrentWorkorderItemLoan=@CurrentWOILoanID"
|
|
);
|
|
cmLoanItemDeflag2.AddInParameter("@CurrentWOILoanID", DbType.Guid, this.mID);
|
|
cmLoanItemDeflag2.AddInParameter("@GUIDEMPTY", DbType.Guid, Guid.Empty);
|
|
DBUtil.DB.ExecuteNonQuery(cmLoanItemDeflag2, tr);
|
|
//***********************************************************************
|
|
|
|
|
|
//Flag loan item with this id or empty if returndate is non-empty
|
|
DBCommandWrapper cmLoanItemUpdate = DBUtil.GetCommandFromSQL(
|
|
"UPDATE aLoanItem SET aCurrentWorkorderItemLoan=@CurrentWOILoanID " +
|
|
"WHERE aID=@LoanItemID"
|
|
);
|
|
cmLoanItemUpdate.AddInParameter("@LoanItemID",DbType.Guid, mLoanItemID);
|
|
if(this.mReturnDate.IsEmpty)//It's still out on loan
|
|
cmLoanItemUpdate.AddInParameter("@CurrentWOILoanID",DbType.Guid, this.mID);
|
|
else//It's back
|
|
cmLoanItemUpdate.AddInParameter("@CurrentWOILoanID",DbType.Guid, Guid.Empty);
|
|
|
|
DBUtil.DB.ExecuteNonQuery(cmLoanItemUpdate, tr);
|
|
|
|
|
|
//Process keywords
|
|
DBUtil.ProcessKeywords(tr,this.mID,RootObjectTypes.WorkorderItemLoan,IsNew,AyaBizUtils.Break(false,mNotes));
|
|
|
|
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 WorkorderItemLoan
|
|
|
|
}//end namespace GZTW.AyaNova.BLL |