public ActionResult Edit([Bind(Include = "Id,KltId,InvoiceNumber,InvoiceDate,InvoiceSumma,Comment,InvoiceChecked,PaymentApproved,DocumentUrl, CurrencyId")]
                                 PaymentStatement paymentStatement, decimal[] Summa, bool[] PartialPaymentChecked, bool[] PartialPaymentApproved, bool[] PaymentPaymentDone, int?[] UploadDocumentId, HttpPostedFileBase[] UploadDocumentUrl, string LastUrl, int?[] MySQLBankId, int[] OrestPaymentId)
        {
            if (ModelState.IsValid)
            {
                PaymentStatement currentPaymentStatement = db.PaymentStatements.Find(paymentStatement.Id);
                currentPaymentStatement.Comment         = paymentStatement.Comment;
                currentPaymentStatement.KltId           = paymentStatement.KltId;
                currentPaymentStatement.InvoiceNumber   = paymentStatement.InvoiceNumber;
                currentPaymentStatement.InvoiceSumma    = paymentStatement.InvoiceSumma;
                currentPaymentStatement.InvoiceChecked  = paymentStatement.InvoiceChecked;
                currentPaymentStatement.InvoiceDate     = paymentStatement.InvoiceDate;
                currentPaymentStatement.PaymentApproved = paymentStatement.PaymentApproved;
                currentPaymentStatement.WhenEdited      = DateTime.Now;
                currentPaymentStatement.PaymentDone     = paymentStatement.PaymentDone;

                //1. Удаляем все ранее добавленные файлы
                if (currentPaymentStatement.PaymentsDocuments.Count != 0)
                {
                    for (int i = 0; i < currentPaymentStatement.PaymentsDocuments.Count; i++)
                    {
                        if (UploadDocumentId == null)  // если удалены все ранее добавленные файлы
                        {
                            string fullPath = Server.MapPath(currentPaymentStatement.PaymentsDocuments[i].DocumentUrl);
                            if (System.IO.File.Exists(fullPath))
                            {
                                System.IO.File.Delete(fullPath);
                            }
                            currentPaymentStatement.PaymentsDocuments.Remove(currentPaymentStatement.PaymentsDocuments[i]);
                        }
                        // если удалены некоторорые ранее добавленные файлы
                        else if (UploadDocumentId.Contains(currentPaymentStatement.PaymentsDocuments[i].Id) == false)
                        {
                            string fullPath = Server.MapPath(currentPaymentStatement.PaymentsDocuments[i].DocumentUrl);
                            if (System.IO.File.Exists(fullPath))
                            {
                                System.IO.File.Delete(fullPath);
                            }
                            currentPaymentStatement.PaymentsDocuments.Remove(currentPaymentStatement.PaymentsDocuments[i]);
                        }
                    }
                }
                //2.Сохраняем ново добавленные файлы из UploadDocumentUrl
                if (UploadDocumentUrl.Length > 0)
                {
                    foreach (var file in UploadDocumentUrl)
                    {
                        if (file != null)
                        {
                            // получаем имя файла
                            string fileName = Guid.NewGuid().ToString() + System.IO.Path.GetFileName(file.FileName);
                            // сохраняем файл в папку Files в проекте
                            file.SaveAs(Server.MapPath("~/Files/" + fileName));
                            PaymentsDocument paymentDocument = new PaymentsDocument();
                            paymentDocument.DocumentUrl = "/Files/" + fileName;
                            if (currentPaymentStatement.PaymentsDocuments == null)
                            {
                                currentPaymentStatement.PaymentsDocuments = new List <PaymentsDocument>();
                            }
                            currentPaymentStatement.PaymentsDocuments.Add(paymentDocument);
                        }
                    }
                }

                var currentUser = db.Users.Where(a => a.UserName == User.Identity.Name).First();

                /*paymentStatement.whoAddThis = currentUser;*/ //await UserManager.FindByNameAsync(User.Identity.Name);
                currentPaymentStatement.whoMadeLastChanges = currentUser;
                currentPaymentStatement.WhenEdited         = DateTime.Now;
                currentPaymentStatement.Currency           = db.Currencies.Find(paymentStatement.CurrencyId);

                currentPaymentStatement.Payments = db.Payments.Where(a => a.PaymentStatementId == paymentStatement.Id).ToList();

                db.Payments.RemoveRange(currentPaymentStatement.Payments);
                db.SaveChanges();

                if (currentPaymentStatement.Payments == null)
                {
                    currentPaymentStatement.Payments = new List <Payment>();
                }

                paymentStatement.Payments = new List <Payment>();

                if (Summa != null)
                {
                    int invoiceCheckedIndex  = 0;
                    int invoiceApprovedIndex = 0;
                    int paymentDoneIndex     = 0;

                    for (var i = 0; i < Summa.Length; i++)
                    {
                        Payment payment = new Payment();

                        payment.PaymentWhenEdited = DateTime.Now;
                        payment.PaymentWhoAddThis = currentUser;
                        payment.Summa             = Summa[i];
                        payment.OrestPaymentId    = OrestPaymentId[i];
                        try
                        {
                            var orestBank = OrestDb.bank.Find(MySQLBankId[i]);
                            if (orestBank != null)
                            {
                                payment.MySQLBankName = orestBank.name;
                                payment.MySQLBankId   = orestBank.id;
                            }
                        }
                        catch
                        {
                            return(View(paymentStatement));
                        }



                        payment.PartialPaymentChecked = PartialPaymentChecked[invoiceCheckedIndex];
                        if (PartialPaymentChecked[invoiceCheckedIndex] == true)
                        {
                            invoiceCheckedIndex = invoiceCheckedIndex + 2;
                        }
                        else
                        {
                            invoiceCheckedIndex++;
                        }

                        payment.PartialPaymentApproved = PartialPaymentApproved[invoiceApprovedIndex];
                        if (PartialPaymentApproved[invoiceApprovedIndex] == true)
                        {
                            invoiceApprovedIndex = invoiceApprovedIndex + 2;
                        }
                        else
                        {
                            invoiceApprovedIndex++;
                        }

                        payment.PaymentPaymentDone = PaymentPaymentDone[paymentDoneIndex];
                        if (PaymentPaymentDone[paymentDoneIndex] == true)
                        {
                            paymentDoneIndex = paymentDoneIndex + 2;
                        }
                        else
                        {
                            paymentDoneIndex++;
                        }

                        //payment.PaymentStatement = paymentStatement;

                        paymentStatement.Payments.Add(payment);
                    }
                    currentPaymentStatement.Payments = paymentStatement.Payments;

                    //decimal PaymentsSumm = 0; // расчитываем сумму оплат
                    //foreach (var i in currentPaymentStatement.Payments.ToList())
                    //{
                    //    if (i.PaymentPaymentDone == true)
                    //    {
                    //        PaymentsSumm += i.Summa;
                    //        currentPaymentStatement.PaymentDone = true;
                    //    }
                    //    else
                    //        currentPaymentStatement.PaymentDone = false;
                    //}

                    //if (PaymentsSumm == currentPaymentStatement.InvoiceSumma)
                    //{
                    //    currentPaymentStatement.PaymentDone = true; //оплачено 100%
                    //}
                    //else
                    //    currentPaymentStatement.PaymentDone = false;
                }

                //if (currentPaymentStatement.PaymentDone)
                //{
                //    currentPaymentStatement.InvoiceChecked = true;
                //    currentPaymentStatement.PaymentApproved = true;
                //}

                db.Entry(currentPaymentStatement).State = EntityState.Modified;

                db.SaveChanges();
                return(RedirectToAction("Index"));

                //return RedirectToAction(LastUrl != "" ? LastUrl : "Index");
            }
            return(View(paymentStatement));
        }
        public ActionResult Create([Bind(Include = "Id,KltId,InvoiceNumber,InvoiceDate,InvoiceSumma,Comment,DocumentUrl,CurrencyId")]
                                   PaymentStatement paymentStatement, decimal[] Summa, bool[] PartialPaymentChecked, bool[] PartialPaymentApproved, bool[] PaymentPaymentDone, HttpPostedFileBase[] UploadDocumentUrl, int?[] MySQLBankId)
        {
            if (paymentStatement.KltId == 0)
            {
                ModelState.AddModelError("Counterparty_Id", "Не выбран контрагент");
                if (UploadDocumentUrl != null)
                {
                    //ViewBag.FileName = System.IO.Path.GetFileName(UploadDocumentUrl.FileName);
                }
            }
            var currentUser = db.Users.Where(a => a.UserName == User.Identity.Name).First();

            paymentStatement.Payments = new List <Payment>();

            if (Summa != null)
            {
                int invoiceCheckedIndex  = 0;
                int invoiceApprovedIndex = 0;
                int paymentDoneIndex     = 0;

                for (var i = 0; i < Summa.Length; i++)
                {
                    Payment payment = new Payment();

                    payment.PaymentWhenEdited = DateTime.Now;
                    payment.PaymentWhoAddThis = currentUser;
                    payment.Summa             = Summa[i];
                    if (MySQLBankId != null)
                    {
                        var orestBank = OrestDb.bank.Find(MySQLBankId[i]);
                        if (orestBank != null)
                        {
                            payment.MySQLBankName = orestBank.name;
                            payment.MySQLBankId   = orestBank.id;
                        }
                    }


                    payment.PartialPaymentChecked = PartialPaymentChecked[invoiceCheckedIndex];
                    if (PartialPaymentChecked[invoiceCheckedIndex] == true)
                    {
                        invoiceCheckedIndex = invoiceCheckedIndex + 2;
                    }
                    else
                    {
                        invoiceCheckedIndex++;
                    }

                    payment.PartialPaymentApproved = PartialPaymentApproved[invoiceApprovedIndex];
                    if (PartialPaymentApproved[invoiceApprovedIndex] == true)
                    {
                        invoiceApprovedIndex = invoiceApprovedIndex + 2;
                    }
                    else
                    {
                        invoiceApprovedIndex++;
                    }

                    payment.PaymentPaymentDone = PaymentPaymentDone[paymentDoneIndex];
                    if (PaymentPaymentDone[paymentDoneIndex] == true)
                    {
                        paymentDoneIndex = paymentDoneIndex + 2;
                    }
                    else
                    {
                        paymentDoneIndex++;
                    }

                    //payment.PaymentStatement = paymentStatement;

                    paymentStatement.Payments.Add(payment);
                }
            }

            if (ModelState.IsValid)
            {
                if (UploadDocumentUrl != null)
                {
                    //// получаем имя файла
                    //string fileName = Guid.NewGuid().ToString() + System.IO.Path.GetFileName(UploadDocumentUrl.FileName);
                    //// сохраняем файл в папку Files в проекте
                    //UploadDocumentUrl.SaveAs(Server.MapPath("~/Files/" + fileName));
                    //paymentStatement.DocumentUrl = "/Files/" + fileName;
                    foreach (var file in UploadDocumentUrl)
                    {
                        if (file == null)
                        {
                            break;
                        }
                        // получаем имя файла
                        string fileName = Guid.NewGuid().ToString() + System.IO.Path.GetFileName(file.FileName);
                        // сохраняем файл в папку Files в проекте
                        file.SaveAs(Server.MapPath("~/Files/" + fileName));
                        PaymentsDocument paymentDocument = new PaymentsDocument();
                        paymentDocument.DocumentUrl = "/Files/" + fileName;
                        if (paymentStatement.PaymentsDocuments == null)
                        {
                            paymentStatement.PaymentsDocuments = new List <PaymentsDocument>();
                        }
                        paymentStatement.PaymentsDocuments.Add(paymentDocument);
                    }
                }

                if (paymentStatement.PaymentApproved == true && (User.IsInRole("Sign1") || User.IsInRole("Developer")))
                {
                    paymentStatement.PaymentApprovedUser = currentUser;
                }
                else
                {
                    paymentStatement.PaymentApproved = false;
                }

                paymentStatement.whoAddThis         = currentUser; //await UserManager.FindByNameAsync(User.Identity.Name);
                paymentStatement.whoMadeLastChanges = currentUser;
                paymentStatement.WhenEdited         = DateTime.Now;
                paymentStatement.WhenCreated        = DateTime.Now;
                paymentStatement.Currency           = db.Currencies.Find(paymentStatement.CurrencyId);

                if (paymentStatement.PaymentDone)
                {
                    paymentStatement.InvoiceChecked  = true;
                    paymentStatement.PaymentApproved = true;
                }

                db.PaymentStatements.Add(paymentStatement);
                db.SaveChanges();

                return(RedirectToAction("Index"));
            }

            return(View(paymentStatement));
        }