/// <summary> /// Delete request and respective related request messages, request products and request items entries. /// </summary> /// <param name="reqId">Requst Id</param> public static void DeleteRequest(int reqId) { var request = OimsDataContext.Requests.FirstOrDefault(o => o.O_Id.Equals(reqId)); OimsDataContext.Delete(request); OimsDataContext.SaveChanges(); }
/// <summary> /// Delete Item with specific Item id. /// </summary> public static void DeleteItem(int id) { var item = GetEditableItem(id); OimsDataContext.Delete(item); OimsDataContext.SaveChanges(); }
/// <summary> /// Delete vendor with specific name. /// </summary> public static void DeleteVendor(string vendorName) { var vendor = GetEditableVendor(vendorName); OimsDataContext.Delete(vendor); OimsDataContext.SaveChanges(); }
/// <summary> /// Delete Item log with specific id. /// </summary> public static void DeleteItemLog(int id) { var itemLog = GetEditableItemLog(id); // Get details for updating items stock var itemId = itemLog.ItemId; var newItemQtyFromLog = itemLog.ItemQuantity; var vendorName = itemLog.VendorName; OimsDataContext.Delete(itemLog); OimsDataContext.SaveChanges(); #region Delete item's stock var itemsModel = GetItemsModel(itemId); if (itemsModel == null) { return; } // Calculate item quantity to set var itemCurrentStock = itemsModel.ItemQuantity; var itemQtyToSet = itemCurrentStock - newItemQtyFromLog; itemsModel.ItemQuantity = itemQtyToSet; itemsModel.Vendor = vendorName; itemsModel.UpdatedOn = DateTime.Now; ItemRepository.UpdateItem(itemsModel); #endregion }
/// <summary> /// Delete cart item per user. /// </summary> /// <param name="userId">UserId of current logged in user.</param> /// <param name="cartId">CartId of item in cart.</param> public static void DeleteCartStuff(int userId, int cartId) { var ci = OimsDataContext.Cartstuffs.FirstOrDefault(i => i.U_Id.Equals(userId) && i.Id.Equals(cartId)); OimsDataContext.Delete(ci); OimsDataContext.SaveChanges(); }
/// <summary> /// Delete user with specific user id. /// </summary> public static void DeleteUser(int id) { var user = GetEditableUser(id); OimsDataContext.Delete(user); OimsDataContext.SaveChanges(); }
/// <summary> /// Delete product with specific product id. /// </summary> public static void DeleteShelter(int id) { var product = GetEditableShelter(id); DeleteItems(id); // Delete related items to product OimsDataContext.Delete(product); // Delete product OimsDataContext.SaveChanges(); }
/// <summary> /// Delete items related to single product. /// </summary> /// <param name="id"></param> public static void DeleteItems(int id) { var items = GetEditableShelterItems(id); foreach (var item in items) { OimsDataContext.Delete(item); } }
/// <summary> /// Create new shelter and return shelterid of saved shelter. /// </summary> public static int SaveShelter(Shelter shelter) { OimsDataContext.Add(shelter); OimsDataContext.SaveChanges(); // Get product id of saved product var prodId = from p in Shelters where p.ShelterName == shelter.P_Name select p.ShelterId; return(prodId.FirstOrDefault()); }
/// <summary> /// Delete product with specific product id. /// </summary> public static void DeleteShelterItem(SheltersDescInfo shelterItem) { var editProductItem = GetEditableShelterItem(shelterItem.ShelterId, shelterItem.ShelterDescKey, shelterItem.ItemId); if (editProductItem == null) { return; } OimsDataContext.Delete(editProductItem); OimsDataContext.SaveChanges(); }
/// <summary> /// Insert new shelter item for specific shelter. /// </summary> public static void NewShelterItem(SheltersDescInfo sheltertem) { var newShelterItem = new Shelterdescription { P_Id = sheltertem.ShelterId, I_Id = sheltertem.ItemId, I_Qty = sheltertem.ItemQuantity }; OimsDataContext.Add(newShelterItem); OimsDataContext.SaveChanges(); }
/// <summary> /// Update the stock of item as per the Allocated for the items that are re-recommended. /// </summary> /// <param name="alloc"></param> /// <param name="quantToReduce">Quantity to reduce.</param> private static void UpdateItemStock(OimsDataModel.Allocated alloc, float quantToReduce) { // Get item matching with item id in 'allocated' from 'items' var item = OimsDataContext.Items.FirstOrDefault(i => i.I_Id.Equals(alloc.ItemId)); if (item == null) { return; } item.I_Quantity = item.I_Quantity - quantToReduce; OimsDataContext.FlushChanges(); }
/// <summary> /// Update product. /// </summary> public static void UpdateShelter(SheltersModel shelter) { var editProduct = GetEditableShelter(shelter.ShelterId); if (editProduct == null) { return; } editProduct.P_Name = shelter.ShelterName; OimsDataContext.SaveChanges(); }
/// <summary> /// Create new vendor. /// </summary> public static void SaveNewVendor(VendorsModel vendor) { var newVendor = new Vendor { Name = vendor.Name, Address = vendor.Address, Phone = vendor.Phone, Email = vendor.Email }; OimsDataContext.Add(newVendor); OimsDataContext.SaveChanges(); }
/// <summary> /// Update shelter's item. /// </summary> public static void UpdateShelterItem(SheltersDescInfo shelterItem) { var editProductItem = GetEditableShelterItem(shelterItem.ShelterId, shelterItem.ShelterDescKey, 0); if (editProductItem == null) { return; } editProductItem.I_Id = shelterItem.ItemId; editProductItem.I_Qty = shelterItem.ItemQuantity; OimsDataContext.SaveChanges(); }
/// <summary> /// Recommend products as per stock and requested. /// </summary> /// <param name="updatedProducts">The list of products that been modified and need to update.</param> public static void RecommendShelters(MVCxGridViewBatchUpdateValues <OrderProduct, int> updatedProducts) { var orderShelters = OimsDataContext.Sheltersrequests; // Note: Key to understand terms // oProd.OP_Quantity - The quantity of shelters that were requested in total // oProd.OP_Pending - The quantity of shelters left pending to be delivered // oProd.OP_ProdAlloc - The quantity of shelters that have been allocated (after manager approval) // prod.ProdRecom - The quantity of shelter that had been marked as recommend by supervisor // Save items in separate other table for keeping track foreach (var prod in updatedProducts.Update) { if (!updatedProducts.IsValid(prod)) { continue; } var oProd = orderShelters.FirstOrDefault(i => i.OP_Id.Equals(prod.Id)); if (oProd == null) { continue; } var prodAlloc = oProd.OP_ProdAlloc ?? 0; var prodAllRec = prodAlloc + prod.ProdRecom; #region Throw custom exception for some conditions // If Recommended more than Requested if (prod.ProdRecom > oProd.OP_Quantity) { throw new CustomException(Resources.Supervisor.RGridErrorMsgForExtraRecommend); } // If sum of Allocated + Recommend exceed than Requested if (prodAllRec > oProd.OP_Quantity) { throw new CustomException(Resources.Supervisor.RGridErrorMsgForPartial); } #endregion oProd.OP_ProdRecom = prod.ProdRecom; oProd.OP_Pending = (int?)(oProd.OP_Quantity - prodAllRec); OimsDataContext.FlushChanges(); } OimsDataContext.SaveChanges(); }
/// <summary> /// Create new user. /// </summary> public static void SaveNewUser(UsersModel user) { var newUser = new User { R_Id = user.RoleId, // Will create user with role specified U_FirstName = user.FirstName, U_LastName = user.LastName, U_Email = user.Email, U_Password = user.Password }; OimsDataContext.Add(newUser); OimsDataContext.SaveChanges(); }
/// <summary> /// Save status for current request id. /// </summary> /// <param name="reqId">Request for which status would be saved.</param> /// <param name="statusId">Status selected by user.</param> /// <param name="userId">User who modified the request.</param> public static void SaveStatus(int reqId, int statusId, int userId) { var request = OimsDataContext.Requests.FirstOrDefault(o => o.O_Id.Equals(reqId)); if (request == null) { return; } request.O_Status = statusId; request.O_UpdatedBy = userId; request.O_UpdatedDate = DateTime.Now; OimsDataContext.SaveChanges(); }
/// <summary> /// Update vendor. /// </summary> public static void UpdateVendor(VendorsModel vendor) { var editVendor = GetEditableVendor(vendor.Name); if (editVendor == null) { return; } editVendor.Address = vendor.Address; editVendor.Email = vendor.Email; editVendor.Phone = vendor.Phone; OimsDataContext.SaveChanges(); }
/// <summary> /// Recommend items as per stock and requested. /// </summary> /// <param name="updatedItems">The list of items that been modified and need to update.</param> public static void RecommendItems(MVCxGridViewBatchUpdateValues <OrderItem, int> updatedItems) { var orderItems = OimsDataContext.Itemsrequests; // Save items in separate other table for keeping track foreach (var item in updatedItems.Update) { if (!updatedItems.IsValid(item)) { continue; } var oItem = orderItems.FirstOrDefault(i => i.OI_Id.Equals(item.Id)); if (oItem == null) { continue; } var itemAlloc = oItem.OI_ItemAlloc ?? 0; var itemAllRec = itemAlloc + item.ItemRecom; #region Throw custom exception for some conditions //if (Application.ReqStatus.Equals("Partial approved") && item.ItemRecom < oItem.OI_ItemRecom) // throw new CustomException(Resources.Supervisor.RGridErrorMsgForPartial); if (item.ItemRecom > oItem.OI_Quantity) { throw new CustomException(Resources.Supervisor.RGridErrorMsgForExtraRecommend); } // If sum of Allocated + Recommend exceed than Requested if (itemAllRec > oItem.OI_Quantity) { throw new CustomException(Resources.Supervisor.RGridErrorMsgForPartial); } #endregion oItem.OI_ItemRecom = item.ItemRecom; oItem.OI_Pending = oItem.OI_Quantity - itemAllRec; OimsDataContext.FlushChanges(); } OimsDataContext.SaveChanges(); }
/// <summary> /// Update user. /// </summary> public static void UpdateUser(UsersModel user) { var editUser = GetEditableUser(user.UserId); if (editUser == null) { return; } editUser.U_FirstName = user.FirstName; editUser.U_LastName = user.LastName; editUser.U_Email = user.Email; editUser.U_Password = user.Password; editUser.R_Id = user.RoleId; OimsDataContext.SaveChanges(); }
/// <summary> /// Update Item. /// </summary> public static void UpdateItem(ItemsModel item) { var editItem = GetEditableItem(item.ItemId); if (editItem == null) { return; } editItem.I_Name = item.ItemName; editItem.I_Quantity = item.ItemQuantity; editItem.Size = item.Size; editItem.Marking = item.Marking; editItem.Vendor = item.Vendor; editItem.UpdatedOn = item.UpdatedOn; OimsDataContext.SaveChanges(); }
/// <summary> /// Update Item log. /// </summary> public static void UpdateItemLog(ItemsLogModel itemLog) { var editItemLog = GetEditableItemLog(itemLog.Id); if (editItemLog == null) { return; } var oldItemQtyFromLog = editItemLog.ItemQuantity; editItemLog.ItemId = itemLog.ItemId; editItemLog.ItemQuantity = itemLog.ItemQuantity; editItemLog.VendorName = itemLog.VendorName; editItemLog.EntryDate = itemLog.EntryDate; OimsDataContext.SaveChanges(); #region Update item's stock var itemsModel = GetItemsModel(itemLog.ItemId); if (itemsModel == null) { return; } // Calculate item quantity to set var itemCurrentStock = itemsModel.ItemQuantity; var newItemQtyFromLog = itemLog.ItemQuantity; var itemQtyToSet = (itemCurrentStock - oldItemQtyFromLog) + newItemQtyFromLog; itemsModel.ItemQuantity = itemQtyToSet; itemsModel.Vendor = editItemLog.VendorName; itemsModel.UpdatedOn = DateTime.Now; ItemRepository.UpdateItem(itemsModel); #endregion }
/// <summary> /// Add product to cart per user. /// </summary> public static void AddProductToCart(int userId, int prodId, float quantity) { var product = OimsDataContext.Cartstuffs.FirstOrDefault(ci => ci.P_Id.Equals(prodId) && ci.U_Id.Equals(userId)); if (product != null) { product.Quantity = product.Quantity + quantity; OimsDataContext.SaveChanges(); } else { var ci = new Cartstuff { U_Id = userId, P_Id = prodId, Quantity = quantity, CreatedOnUtc = DateTime.Now }; OimsDataContext.Add(ci); OimsDataContext.SaveChanges(); } }
/// <summary> /// Create new items log. /// </summary> public static void SaveItemsLog(List <Itemslog> itemLogList) { itemLogList.ForEach(il => OimsDataContext.Add(il)); OimsDataContext.SaveChanges(); #region Add item's stock foreach (var il in itemLogList) { var itemsModel = GetItemsModel(il.ItemId); if (itemsModel == null) { continue; } // Add new quantity to existing quantity in stock itemsModel.ItemQuantity = itemsModel.ItemQuantity + il.ItemQuantity; itemsModel.Vendor = il.VendorName; itemsModel.UpdatedOn = DateTime.Now; ItemRepository.UpdateItem(itemsModel); } #endregion }
/// <summary> /// Add item to cart per user. /// </summary> public static void AddItemToCart(int userId, int itemId, float quantity) { // Check if item already exists var item = OimsDataContext.Cartstuffs.FirstOrDefault(ci => ci.I_Id.Equals(itemId) && ci.U_Id.Equals(userId)); if (item != null) // If exist, update it { item.Quantity = item.Quantity + quantity; OimsDataContext.SaveChanges(); } else { var ci = new Cartstuff { U_Id = userId, I_Id = itemId, Quantity = quantity, CreatedOnUtc = DateTime.Now }; OimsDataContext.Add(ci); OimsDataContext.SaveChanges(); } }
/// <summary> /// Save request by moving each request details into 'allocated'. Also subtract same item quantities from stock too. /// </summary> /// <param name="requestorId">Id of the requestor who created the request.</param> /// <param name="updatorId">Id of the updator who is updating the request.</param> /// <param name="statusId">Status id for the request.</param> /// <param name="requestId">Request id assigned to current request.</param> public static void SaveRequest(int requestorId, int updatorId, int statusId, int requestId) { #region 1. If item (oi) in request, save items in table 'allocated' using 'orderitem' var orderItems = OimsDataContext.Itemsrequests.Where(o => o.O_Id.Equals(requestId) && o.OI_CreatedBy.Equals(requestorId)); foreach (var oi in orderItems) { if (oi == null) { continue; } var iAlloc = OimsDataContext.Allocateds.FirstOrDefault(a => a.UserId.Equals(requestorId) && a.OrderId.Equals(requestId) && a.ItemId.Equals(oi.I_Id)); // If item already in allocated for same request if (iAlloc != null) { var itemRecom = oi.OI_ItemRecom ?? 0; // Set mark quantity in allocated var markQty = iAlloc.MarkQty; iAlloc.MarkQty = markQty + itemRecom; UpdateItemStock(iAlloc, itemRecom); } else { var alloc = new OimsDataModel.Allocated { OrderId = requestId, UserId = requestorId, ItemId = oi.I_Id, MarkQty = oi.OI_ItemRecom != null ? (float)oi.OI_ItemRecom : 0 }; OimsDataContext.Add(alloc); UpdateItemStock(alloc); } } #endregion #region 2. If shelter (op) in request, save products in table 'allocated' using 'orderproduct' var orderProducts = OimsDataContext.Sheltersrequests.Where(o => o.O_Id.Equals(requestId) && o.OP_CreatedBy.Equals(requestorId)); foreach (var op in orderProducts) { if (op == null) { continue; } // Get respective item's var pId = op.P_Id; var prodItems = ShelterRepository.ShelterItems.Where(p => p.P_Id.Equals(pId)); foreach (var pi in prodItems) { var pAlloc = OimsDataContext.Allocateds.FirstOrDefault(a => a.UserId.Equals(requestorId) && a.OrderId.Equals(requestId) && a.ItemId.Equals(pi.I_Id)); if (pAlloc == null) { if (op.OP_ProdRecom == null) { continue; } var newAlloc = new OimsDataModel.Allocated { OrderId = requestId, UserId = requestorId, ItemId = pi.I_Id, MarkQty = pi.I_Qty * (int)op.OP_ProdRecom }; OimsDataContext.Add(newAlloc); UpdateItemStock(newAlloc); } else { // If re-recommending, adjust the stock taking previous one // and later one in context var prodRecom = op.OP_ProdRecom ?? 0; // Set mark quantity in allocated var markQty = pAlloc.MarkQty; prodRecom = pi.I_Qty * prodRecom; pAlloc.MarkQty = markQty + prodRecom; UpdateItemStock(pAlloc, prodRecom); } } } #endregion #region 3. Save status for current request var order = OimsDataContext.Requests.FirstOrDefault(o => o.O_Id.Equals(requestId)); if (order == null) { return; } order.O_Status = statusId; order.O_UpdatedBy = updatorId; order.O_UpdatedDate = DateTime.Now; OimsDataContext.FlushChanges(); #endregion // 4. Finally save all changes OimsDataContext.SaveChanges(); }
/// <summary> /// Save cart items as single request (or order) /// </summary> /// <param name="userId">UserId of user.</param> public static void SaveRequest(int userId) { // 1. Create an order id and get id. Also save request status var request = new Request { O_CreatedBy = userId, O_CreatedDate = DateTime.Now, O_Job = Application.Job, O_Company = Application.Company, O_Status = Int32.Parse(ConfigurationManager.AppSettings["InProcess"]) // For in process (by default) }; OimsDataContext.Add(request); OimsDataContext.FlushChanges(); // Soft commit to database (marked state as dirty) var orderId = request.O_Id; // 2. Get list of cart items categorized into items and products for the current user var items = Cartstuffs.Where(ci => ci.UserId.Equals(userId) && ci.ItemId != null).ToList(); var products = Cartstuffs.Where(ci => ci.UserId.Equals(userId) && ci.ProductId != null).ToList(); // 3. Save items in 'itemsRequest' table if (items.Any()) { var oiList = items.Select(item => new Itemsrequest { O_Id = orderId, I_Id = item.ItemId != null ? (int)item.ItemId : 0, OI_Quantity = item.Quantity, OI_Pending = item.Quantity, OI_CreatedBy = userId, OI_CreatedDate = DateTime.Now }).ToList(); OimsDataContext.Add(oiList); OimsDataContext.FlushChanges(true); } // 4. Save shelters in 'sheltersRequest' table if (products.Any()) { var opList = products.Select(prod => new Sheltersrequest { O_Id = orderId, P_Id = prod.ProductId != null ? (int)prod.ProductId : 0, OP_Quantity = prod.Quantity, OP_Pending = (int?)prod.Quantity, OP_CreatedBy = userId, OP_CreatedDate = DateTime.Now }).ToList(); OimsDataContext.Add(opList); OimsDataContext.FlushChanges(true); } // 5. Delete all cart items for current user (as they are saved as request) var cartstuffs = OimsDataContext.Cartstuffs.Where(ci => ci.U_Id.Equals(userId)); foreach (var ci in cartstuffs) { OimsDataContext.Delete(ci); } // 6. Save all changes to database OimsDataContext.SaveChanges(); }
/// <summary> /// Save request status as approved or rejected. /// </summary> /// <param name="requestorId">Id of the requestor who created the request.</param> /// <param name="updatorId">Id of the updator who is updating the request.</param> /// <param name="statusId">Status id for the request.</param> /// <param name="requestId">Request id assigned to current request.</param> public static void SaveRequest(int requestorId, int updatorId, int statusId, int requestId) { var shelterStatusId = 0; var itemStatusId = 0; var approveStatusId = 0; #region 1. Set stock as per status // StatusId - 3 : Approved // StatusId - 4 : Rejected // StatusId - 5 : Partial approved switch (statusId) { case 3: var orderItems = OimsDataContext.Itemsrequests.Where(o => o.O_Id.Equals(requestId) && o.OI_CreatedBy.Equals(requestorId)); foreach (var oi in orderItems) { // Set allocate details in 'orderitem' var itemAlloc = oi.OI_ItemAlloc ?? 0; var itemRecom = oi.OI_ItemRecom ?? 0; oi.OI_ItemAlloc = itemRecom + itemAlloc; // Save status shelterStatusId = (itemRecom + itemAlloc).Equals(oi.OI_Quantity) ? 3 : 5; approveStatusId = shelterStatusId; // Reset recommend and save changes oi.OI_ItemRecom = null; OimsDataContext.FlushChanges(); } var orderProducts = OimsDataContext.Sheltersrequests.Where(o => o.O_Id.Equals(requestId) && o.OP_CreatedBy.Equals(requestorId)); foreach (var op in orderProducts) { // Set allocate details in 'orderproduct' var prodAlloc = op.OP_ProdAlloc != null ? (float)op.OP_ProdAlloc : 0; var prodRecom = op.OP_ProdRecom ?? 0; op.OP_ProdAlloc = (int?)(prodRecom + prodAlloc); // Save status itemStatusId = (prodRecom + prodAlloc).Equals(op.OP_Quantity) ? 3 : 5; approveStatusId = itemStatusId; // Reset recommend and save changes op.OP_ProdRecom = null; OimsDataContext.FlushChanges(); } break; case 4: var allocs = OimsDataContext.Allocateds.Where(a => a.UserId.Equals(requestorId) && a.OrderId.Equals(requestId)); foreach (var alloc in allocs) { var item = OimsDataContext.Items.FirstOrDefault(i => i.I_Id.Equals(alloc.ItemId)); if (item == null) { continue; } item.I_Quantity = item.I_Quantity + alloc.MarkQty; OimsDataContext.FlushChanges(); approveStatusId = 4; } break; } #endregion #region 2. Save status for current request var request = OimsDataContext.Requests.FirstOrDefault(o => o.O_Id.Equals(requestId)); if (request == null) { return; } //TODO: Test if the status fixed or not. if (shelterStatusId > 0 && itemStatusId > 0) { if (shelterStatusId.Equals(3) && itemStatusId.Equals(3)) { request.O_Status = 3; } else { request.O_Status = 5; } } else { if (approveStatusId > 0) { request.O_Status = approveStatusId; } } request.O_UpdatedBy = updatorId; request.O_UpdatedDate = DateTime.Now; OimsDataContext.FlushChanges(); #endregion // 3. Finally save all changes OimsDataContext.SaveChanges(); }
/// <summary> /// Save new items of shelter. /// </summary> public static void SaveShelterItems(List <Shelterdescription> sdList) { sdList.ForEach(pdItem => OimsDataContext.Add(pdItem)); OimsDataContext.SaveChanges(); }