public async Task <ActionResult> EditEditMakeReceipt(int?id, int makereceiptid)
        {
            if (Session["LoginUserID"] == null)
            {
                return(RedirectToAction("Login", "Account"));
            }

            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Project project = await db.Projects.FindAsync(id);

            if (project == null)
            {
                return(HttpNotFound());
            }
            MaterialBuy makeReceipt = await db.MaterialBuys.FindAsync(makereceiptid);

            if (makeReceipt == null)
            {
                return(HttpNotFound());
            }
            var projectMakeReceiptData = new ProjectMakeReceiptData();

            projectMakeReceiptData.Porject  = project;
            projectMakeReceiptData.Date     = makeReceipt.Date;
            projectMakeReceiptData.NoteVn   = makeReceipt.NoteVn;
            projectMakeReceiptData.NameVn   = makeReceipt.MaterialBuyUnits.FirstOrDefault().MaterialUnitPrice.MaterialName.NameVn;
            projectMakeReceiptData.Price    = makeReceipt.MaterialBuyUnits.FirstOrDefault().MaterialUnitPrice.Price;
            projectMakeReceiptData.Currency = makeReceipt.MaterialBuyUnits.FirstOrDefault().MaterialUnitPrice.Currency;
            projectMakeReceiptData.VATPer   = makeReceipt.VATPer;

            ViewBag.MakeReceiptID = makereceiptid;

            projectMakeReceiptData.Porject.MaterialBuys = projectMakeReceiptData.Porject.MaterialBuys.OrderByDescending(p => p.Date).ToList();

            return(View(projectMakeReceiptData));
        }
        public async Task <ActionResult> EditAddMakeReceipt(int?id)
        {
            if (Session["LoginUserID"] == null)
            {
                return(RedirectToAction("Login", "Account"));
            }

            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Project project = await db.Projects.FindAsync(id);

            if (project == null)
            {
                return(HttpNotFound());
            }
            var projectMakeReceiptData = new ProjectMakeReceiptData();

            projectMakeReceiptData.Porject = project;

            return(View(projectMakeReceiptData));
        }
        public async Task <ActionResult> EditEditMakeReceipt(int id, int makereceiptid, ProjectMakeReceiptData projectMakeReceiptData)
        {
            if (Session["LoginUserID"] == null)
            {
                return(RedirectToAction("Login", "Account"));
            }

            if (ModelState.IsValid)
            {
                //                db.Entry(materialBuyData).State = EntityState.Modified;
                Project     project     = db.Projects.FirstOrDefault(m => m.ID == projectMakeReceiptData.Porject.ID);
                MaterialBuy makeReceipt = await db.MaterialBuys.FindAsync(makereceiptid);


                if (makeReceipt.Date != projectMakeReceiptData.Date)
                {
                    makeReceipt.Date = projectMakeReceiptData.Date;
                    makeReceipt.MaterialBuyUnits.FirstOrDefault().MaterialUnitPrice.Date = projectMakeReceiptData.Date;
                }

                if (makeReceipt.VATPer != projectMakeReceiptData.VATPer)
                {
                    makeReceipt.VATPer = projectMakeReceiptData.VATPer;
                }

                if ((makeReceipt.NoteVn != null && !makeReceipt.NoteVn.Equals(projectMakeReceiptData.NoteVn)) ||
                    (makeReceipt.NoteVn == null && projectMakeReceiptData.NoteVn != null))
                {
                    makeReceipt.NoteVn    = projectMakeReceiptData.NoteVn;
                    makeReceipt.NoteKr    = projectMakeReceiptData.NoteVn;
                    makeReceipt.Translate = false;
                }

                if (makeReceipt.MaterialBuyUnits.FirstOrDefault().MaterialUnitPrice.Price != projectMakeReceiptData.Price ||
                    makeReceipt.MaterialBuyUnits.FirstOrDefault().MaterialUnitPrice.Currency != projectMakeReceiptData.Currency)
                {
                    makeReceipt.MaterialBuyUnits.FirstOrDefault().MaterialUnitPrice.Price = projectMakeReceiptData.Price;
                    makeReceipt.MaterialBuyUnits.FirstOrDefault().MaterialUnitPrice.Currency = projectMakeReceiptData.Currency;
                }

                if ((projectMakeReceiptData.NameVn != null && !projectMakeReceiptData.NameVn.Equals(makeReceipt.MaterialBuyUnits.FirstOrDefault().MaterialUnitPrice.MaterialName.NameVn)) ||
                    (projectMakeReceiptData.NameVn == null && makeReceipt.MaterialBuyUnits.FirstOrDefault().MaterialUnitPrice.MaterialName.NameVn != null))
                {
                    int          nameCount = db.MaterialUnitPrices.Where(m => m.MaterialName.NameVn.Equals(makeReceipt.MaterialBuyUnits.FirstOrDefault().MaterialUnitPrice.MaterialName.NameVn)).Count();
                    MaterialName oldName   = db.MaterialNames.FirstOrDefault(m => m.NameVn.Equals(makeReceipt.MaterialBuyUnits.FirstOrDefault().MaterialUnitPrice.MaterialName.NameVn) ||
                                                                             m.NameKr.Equals(makeReceipt.MaterialBuyUnits.FirstOrDefault().MaterialUnitPrice.MaterialName.NameVn));
                    MaterialName mName = db.MaterialNames.FirstOrDefault(m => m.NameVn.Equals(projectMakeReceiptData.NameVn) ||
                                                                         m.NameKr.Equals(projectMakeReceiptData.NameVn));
                    if (mName == null)
                    {
                        mName        = new MaterialName();
                        mName.NameKr = projectMakeReceiptData.NameVn;
                        mName.NameVn = projectMakeReceiptData.NameVn;
                        makeReceipt.MaterialBuyUnits.FirstOrDefault().MaterialUnitPrice.MaterialName = mName;
                        db.MaterialNames.Add(mName);
                    }
                    else
                    {
                        makeReceipt.MaterialBuyUnits.FirstOrDefault().MaterialUnitPrice.MaterialName = mName;
                    }

                    if (nameCount == 1)
                    {
                        db.MaterialNames.Remove(oldName);
                    }
                }

                await db.SaveChangesAsync();

                return(RedirectToAction("EditAddMakeReceipt", new { id = projectMakeReceiptData.Porject.ID }));
            }
            return(View(projectMakeReceiptData));
        }
        public async Task <ActionResult> EditAddMakeReceipt(ProjectMakeReceiptData projectMakeReceiptData)
        {
            if (Session["LoginUserID"] == null)
            {
                return(RedirectToAction("Login", "Account"));
            }

            if (ModelState.IsValid)
            {
                //                db.Entry(materialBuyData).State = EntityState.Modified;
                Project project = db.Projects.FirstOrDefault(m => m.ID == projectMakeReceiptData.Porject.ID);

                MaterialBuy receipt = new MaterialBuy();
                receipt.Company         = project.Company;
                receipt.CompanyID       = project.CompanyID;
                receipt.Date            = projectMakeReceiptData.Date;
                receipt.EmployeeID      = Convert.ToInt32(Session["LoginUserEmployeeID"]);
                receipt.Employee        = db.Employees.FirstOrDefault(e => e.ID == receipt.EmployeeID);
                receipt.MaterialBuyType = MaterialBuyType.MakeReceipt;
                receipt.NoteVn          = projectMakeReceiptData.NoteVn;
                receipt.NoteKr          = projectMakeReceiptData.NoteVn;
                receipt.Project         = project;
                receipt.ProjectID       = project.ID;
                receipt.VATPer          = projectMakeReceiptData.VATPer;

                MaterialBuyUnit unit = new MaterialBuyUnit();
                unit.MaterialBuy = receipt;
                unit.Quantity    = 1;


                MaterialName mName = db.MaterialNames.FirstOrDefault(m => m.NameVn.Equals(projectMakeReceiptData.NameVn) ||
                                                                     m.NameKr.Equals(projectMakeReceiptData.NameVn));
                if (mName == null)
                {
                    mName        = new MaterialName();
                    mName.NameKr = projectMakeReceiptData.NameVn;
                    mName.NameVn = projectMakeReceiptData.NameVn;
                    db.MaterialNames.Add(mName);
                }

                MaterialUnitPrice muPrice = db.MaterialUnitPrices.OrderBy(m => m.Date)
                                            .FirstOrDefault(mp => mp.MaterialName.NameVn.Equals(projectMakeReceiptData.NameVn) ||
                                                            mp.MaterialName.NameKr.Equals(projectMakeReceiptData.NameVn));

                if (muPrice == null || muPrice.Price != projectMakeReceiptData.Price)
                {
                    muPrice            = new MaterialUnitPrice();
                    muPrice.Company    = project.Company;
                    muPrice.CompanyID  = project.CompanyID;
                    muPrice.Date       = projectMakeReceiptData.Date;
                    muPrice.UnitString = "Set";
                    muPrice.Price      = projectMakeReceiptData.Price;
                    muPrice.Currency   = projectMakeReceiptData.Currency;

                    db.MaterialUnitPrices.Add(muPrice);
                }

                muPrice.MaterialName     = mName;
                unit.MaterialUnitPrice   = muPrice;
                receipt.MaterialBuyUnits = new List <MaterialBuyUnit>();
                receipt.MaterialBuyUnits.Add(unit);

                db.MaterialBuys.Add(receipt);
                db.MaterialBuyUnits.Add(unit);
                project.MaterialBuys.Add(receipt);

//                db.Payments.Add(projectDepositData.Deposit);
//                project.Deposits.Add(projectDepositData.Deposit);

                await db.SaveChangesAsync();

                return(RedirectToAction("EditAddMakeReceipt", new { id = projectMakeReceiptData.Porject.ID }));
            }
            return(View(projectMakeReceiptData));
        }