public HttpResponseMessage DeleteInventorySerial(Entities.TrnInventorySerial objInventorySerial, String documentPrefix, String id)
        {
            try
            {
                var currentUser = from d in db.MstUsers
                                  where d.UserId == User.Identity.GetUserId()
                                  select d;

                if (currentUser.Any())
                {
                    var currentUserId = currentUser.FirstOrDefault().Id;

                    String  formName = "";
                    Boolean isLocked = false;

                    switch (documentPrefix)
                    {
                    case "RR":
                        if (objInventorySerial.RRId != null)
                        {
                            var receivingReceipt = from d in db.TrnReceivingReceipts where d.Id == objInventorySerial.RRId select d;
                            if (receivingReceipt.Any())
                            {
                                if (receivingReceipt.FirstOrDefault().IsLocked)
                                {
                                    isLocked = true;
                                }
                            }
                        }

                        formName = "ReceivingReceiptDetail";
                        break;

                    case "SI":
                        if (objInventorySerial.SIId != null)
                        {
                            var salesInvoice = from d in db.TrnSalesInvoices where d.Id == objInventorySerial.SIId select d;
                            if (salesInvoice.Any())
                            {
                                if (salesInvoice.FirstOrDefault().IsLocked)
                                {
                                    isLocked = true;
                                }
                            }
                        }

                        formName = "SalesInvoiceDetail";
                        break;

                    case "IN":
                        if (objInventorySerial.INId != null)
                        {
                            var stockIn = from d in db.TrnStockIns where d.Id == objInventorySerial.INId select d;
                            if (stockIn.Any())
                            {
                                if (stockIn.FirstOrDefault().IsLocked)
                                {
                                    isLocked = true;
                                }
                            }
                        }

                        formName = "StockInDetail";
                        break;

                    case "OT":
                        if (objInventorySerial.OTId != null)
                        {
                            var stockOut = from d in db.TrnStockOuts where d.Id == objInventorySerial.OTId select d;
                            if (stockOut.Any())
                            {
                                if (stockOut.FirstOrDefault().IsLocked)
                                {
                                    isLocked = true;
                                }
                            }
                        }

                        formName = "StockOutDetail";
                        break;

                    case "ST":
                        if (objInventorySerial.STId != null)
                        {
                            var stockTransfer = from d in db.TrnStockTransfers where d.Id == objInventorySerial.STId select d;
                            if (stockTransfer.Any())
                            {
                                if (stockTransfer.FirstOrDefault().IsLocked)
                                {
                                    isLocked = true;
                                }
                            }
                        }

                        formName = "StockTransferDetail";
                        break;

                    case "SW":
                        if (objInventorySerial.SWId != null)
                        {
                            var stockWithdrawal = from d in db.TrnStockWithdrawals where d.Id == objInventorySerial.SWId select d;
                            if (stockWithdrawal.Any())
                            {
                                if (stockWithdrawal.FirstOrDefault().IsLocked)
                                {
                                    isLocked = true;
                                }
                            }
                        }

                        formName = "StockWithdrawalDetail";
                        break;

                    default:
                        formName = "";
                        break;
                    }
                    ;

                    if (isLocked)
                    {
                        var userForms = from d in db.MstUserForms
                                        where d.UserId == currentUserId &&
                                        d.SysForm.FormName.Equals(formName)
                                        select d;

                        if (userForms.Any())
                        {
                            if (userForms.FirstOrDefault().CanDelete)
                            {
                                var inventorySerial = from d in db.TrnInventorySerials
                                                      where d.Id == Convert.ToInt32(id)
                                                      select d;

                                if (inventorySerial.Any())
                                {
                                    db.TrnInventorySerials.DeleteOnSubmit(inventorySerial.First());

                                    String oldObject = at.GetObjectString(inventorySerial.FirstOrDefault());
                                    at.InsertAuditTrail(currentUser.FirstOrDefault().Id, GetType().Name, MethodBase.GetCurrentMethod().Name, oldObject, "NA");

                                    db.SubmitChanges();

                                    UpdateItemInventorySerial(objInventorySerial.ArticleInventorySerialId);

                                    return(Request.CreateResponse(HttpStatusCode.OK));
                                }
                                else
                                {
                                    return(Request.CreateResponse(HttpStatusCode.NotFound, "This inventory serial detail is no longer available."));
                                }
                            }
                            else
                            {
                                return(Request.CreateResponse(HttpStatusCode.NotFound, "No rights."));
                            }
                        }
                        else
                        {
                            return(Request.CreateResponse(HttpStatusCode.NotFound, "No rights."));
                        }
                    }
                    else
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "Please lock the current document before proceeding."));
                    }
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, "Theres no current user logged in."));
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, "Something's went wrong from the server."));
            }
        }
        public HttpResponseMessage AddInventorySerial(Entities.TrnInventorySerial objInventorySerial, String documentPrefix)
        {
            try
            {
                var currentUser = from d in db.MstUsers
                                  where d.UserId == User.Identity.GetUserId()
                                  select d;

                if (currentUser.Any())
                {
                    var currentUserId = currentUser.FirstOrDefault().Id;

                    String  formName = "";
                    Boolean isLocked = false;

                    Decimal QuantityIn  = 0;
                    Decimal QuantityOut = 0;

                    switch (documentPrefix)
                    {
                    case "RR":
                        if (objInventorySerial.RRId != null)
                        {
                            var receivingReceipt = from d in db.TrnReceivingReceipts where d.Id == objInventorySerial.RRId select d;
                            if (receivingReceipt.Any())
                            {
                                if (receivingReceipt.FirstOrDefault().IsLocked)
                                {
                                    isLocked = true;
                                }
                            }

                            QuantityIn  = objInventorySerial.QuantityIn;
                            QuantityOut = 0;
                        }

                        formName = "ReceivingReceiptDetail";
                        break;

                    case "SI":
                        if (objInventorySerial.SIId != null)
                        {
                            var salesInvoice = from d in db.TrnSalesInvoices where d.Id == objInventorySerial.SIId select d;
                            if (salesInvoice.Any())
                            {
                                if (salesInvoice.FirstOrDefault().IsLocked)
                                {
                                    isLocked = true;
                                }
                            }

                            QuantityIn  = 0;
                            QuantityOut = objInventorySerial.QuantityOut;
                        }

                        formName = "SalesInvoiceDetail";
                        break;

                    case "IN":
                        if (objInventorySerial.INId != null)
                        {
                            var stockIn = from d in db.TrnStockIns where d.Id == objInventorySerial.INId select d;
                            if (stockIn.Any())
                            {
                                if (stockIn.FirstOrDefault().IsLocked)
                                {
                                    isLocked = true;
                                }
                            }

                            QuantityIn  = objInventorySerial.QuantityIn;
                            QuantityOut = 0;
                        }

                        formName = "StockInDetail";
                        break;

                    case "OT":
                        if (objInventorySerial.OTId != null)
                        {
                            var stockOut = from d in db.TrnStockOuts where d.Id == objInventorySerial.OTId select d;
                            if (stockOut.Any())
                            {
                                if (stockOut.FirstOrDefault().IsLocked)
                                {
                                    isLocked = true;
                                }
                            }

                            QuantityIn  = 0;
                            QuantityOut = objInventorySerial.QuantityOut;
                        }

                        formName = "StockOutDetail";
                        break;

                    case "ST":
                        if (objInventorySerial.STId != null)
                        {
                            var stockTransfer = from d in db.TrnStockTransfers where d.Id == objInventorySerial.STId select d;
                            if (stockTransfer.Any())
                            {
                                if (stockTransfer.FirstOrDefault().IsLocked)
                                {
                                    isLocked = true;
                                }
                            }

                            QuantityIn  = 0;
                            QuantityOut = objInventorySerial.QuantityOut;
                        }

                        formName = "StockTransferDetail";
                        break;

                    case "SW":
                        if (objInventorySerial.SWId != null)
                        {
                            var stockWithdrawal = from d in db.TrnStockWithdrawals where d.Id == objInventorySerial.SWId select d;
                            if (stockWithdrawal.Any())
                            {
                                if (stockWithdrawal.FirstOrDefault().IsLocked)
                                {
                                    isLocked = true;
                                }
                            }

                            QuantityIn  = 0;
                            QuantityOut = objInventorySerial.QuantityOut;
                        }

                        formName = "StockWithdrawalDetail";
                        break;

                    default:
                        formName = "";
                        break;
                    }
                    ;

                    if (isLocked)
                    {
                        var userForms = from d in db.MstUserForms
                                        where d.UserId == currentUserId &&
                                        d.SysForm.FormName.Equals(formName)
                                        select d;

                        if (userForms.Any())
                        {
                            if (userForms.FirstOrDefault().CanAdd)
                            {
                                var currentBranchId = currentUser.FirstOrDefault().BranchId;

                                Decimal Quantity = QuantityIn - QuantityOut;

                                Data.TrnInventorySerial newInventorySerial = new Data.TrnInventorySerial
                                {
                                    BranchId                 = currentBranchId,
                                    InventorySerialDate      = DateTime.Today,
                                    ArticleId                = objInventorySerial.ArticleId,
                                    ArticleInventorySerialId = objInventorySerial.ArticleInventorySerialId,
                                    RRId        = objInventorySerial.RRId,
                                    SIId        = objInventorySerial.SIId,
                                    INId        = objInventorySerial.INId,
                                    OTId        = objInventorySerial.OTId,
                                    STId        = objInventorySerial.STId,
                                    SWId        = objInventorySerial.SWId,
                                    QuantityIn  = QuantityIn,
                                    QuantityOut = QuantityOut,
                                    Quantity    = Quantity
                                };

                                db.TrnInventorySerials.InsertOnSubmit(newInventorySerial);
                                db.SubmitChanges();

                                UpdateItemInventorySerial(objInventorySerial.ArticleInventorySerialId);

                                String newObject = at.GetObjectString(newInventorySerial);
                                at.InsertAuditTrail(currentUser.FirstOrDefault().Id, GetType().Name, MethodBase.GetCurrentMethod().Name, "NA", newObject);

                                return(Request.CreateResponse(HttpStatusCode.OK));
                            }
                            else
                            {
                                return(Request.CreateResponse(HttpStatusCode.NotFound, "No rights."));
                            }
                        }
                        else
                        {
                            return(Request.CreateResponse(HttpStatusCode.NotFound, "No rights."));
                        }
                    }
                    else
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "Please lock the current document before proceeding."));
                    }
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, "Theres no current user logged in."));
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, "Something's went wrong from the server."));
            }
        }