Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public interface IDomainService<T, Y, X>
- where Y : Resources.IBaseRequest
- where T : Resources.IBaseResponse
- where X : Resources.IBaseRequirements
- {
- T Submit(Y request);
- X Requirements(Y request);
- }
- public interface IAdjustmentRequest : IBaseRequest
- {
- AdjustmentType AdjustmentType { get; set; }
- decimal AdjustmentQty { get; set; }
- string TrackingEntityBarcode { get; set; }
- }
- public interface IAdjustmentRequirements : IBaseRequirements
- {
- DomainEntities.TrackingEntity TrackingEntity { get; set; }
- }
- public interface IAdjustmentResponse : IBaseResponse
- {
- DomainEntities.TrackingEntity TrackingEntity { get; set; }
- }
- public class AdjustmentService : DomainBaseService<IAdjustmentResponse, IAdjustmentRequest, IAdjustmentRequirements>
- {
- protected internal override IAdjustmentRequirements TransactionRequirements(IAdjustmentRequest request)
- {
- Resources.AdjustmentRequirements response = new Resources.AdjustmentRequirements(request);
- try
- {
- //user
- base.RequestUser(request, ref response);
- //inventory
- response.TrackingEntity = this.ValidateTrackingEntity(request.TrackingEntityBarcode);
- //validate qty
- if (request.AdjustmentType == Interface.AdjustmentType.QtyDecrease)
- if (request.AdjustmentQty > response.TrackingEntity.Qty)
- throw new Exception(ExceptionInsufficientOnhand);
- response.Valid = true;
- return response;
- }
- catch (Exception ex)
- {
- response.ErrorMessages = ex.Message;
- response.Valid = false;
- return response;
- }
- }
- protected internal override IAdjustmentResponse CommitTransaction(IAdjustmentRequirements request)
- {
- try
- {
- Resources.AdjustmentResponse response = new Resources.AdjustmentResponse()
- {
- Transactions = new List<Transaction>(),
- User = request.User
- };
- switch (request.AdjustmentType)
- {
- case Granite.DomainModel.Interface.AdjustmentType.QtyIncrease:
- request.TrackingEntity.Qty += request.AdjustmentQty;
- break;
- case Granite.DomainModel.Interface.AdjustmentType.QtyDecrease:
- request.TrackingEntity.Qty -= request.AdjustmentQty;
- break;
- }
- Transaction transaction = this.BuildProcessTransaction(request, request.TrackingEntity);
- response.Transactions.Add(transaction);
- response.TrackingEntity = request.TrackingEntity;
- Repository.Session.SaveOrUpdate(transaction);
- Repository.Session.SaveOrUpdate(request.TrackingEntity);
- response.ResponseMessage = string.Format("Adjusted {0} by {1}", request.TrackingEntityBarcode, request.AdjustmentQty);
- return response;
- }
- catch (Exception ex)
- {
- throw new Exception(ex.Message);
- }
- }
- }
Add Comment
Please, Sign In to add comment