public async Task <ActionResult> RemittanceAdvise(FormCollection form, HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                var clientname            = form["DoRemittance"];
                var invoicenum            = form["InvoiceNumber"];
                var serventry             = form["ServiceNumber"];
                var amountpaid            = form["AmountPaid"];
                var invoicetype           = form["InvoiceTypes"];
                var comment               = form["Comments"];
                var amountlcd             = Getlcd(clientname, invoicenum, serventry, invoicetype);
                var actual                = decimal.Parse(amountpaid);
                var lcd                   = amountlcd[0];
                var payable               = amountlcd[2];
                var outstanding           = payable - actual - lcd;
                var remittance            = file;
                var httpServerUtilityBase = this.Server;
                if (httpServerUtilityBase != null)
                {
                    var baspath          = AppDomain.CurrentDomain.BaseDirectory;
                    var folder           = Server.MapPath("../RemittanceUpload/");
                    var pathtoremittance = Path.Combine(folder, remittance.FileName);
                    using (pdInvoiceEntities db = new pdInvoiceEntities())
                    {
                        if (invoicetype == "Naira")
                        {
                            SaveRemittance(remittance, httpServerUtilityBase, folder, pathtoremittance);
                            var naira = db.Nairas.FirstOrDefault(c =>
                                                                 c.InvoiceNumber.Equals(invoicenum) && c.SENumber.Equals(serventry) &&
                                                                 c.ClientName.Equals(clientname));
                            naira.Outstanding      = outstanding;
                            naira.Comments         = comment;
                            naira.RemittanceAdvise = pathtoremittance;
                            await db.SaveChangesAsync().ConfigureAwait(true);

                            ViewBag.Success = "Naira table succesffuly updated";
                            return(RedirectToAction("RemittanceAdvise"));
                        }

                        if (invoicetype == "Dollar")
                        {
                            SaveRemittance(remittance, httpServerUtilityBase, folder, pathtoremittance);
                            var naira = db.Dollars.FirstOrDefault(c =>
                                                                  c.InvoiceNumber.Equals(invoicenum) && c.SENumber.Equals(serventry) &&
                                                                  c.ClientName.Equals(clientname));
                            naira.Outstanding      = outstanding;
                            naira.Comments         = comment;
                            naira.RemittanceAdvise = pathtoremittance;
                            await db.SaveChangesAsync().ConfigureAwait(true);

                            ViewBag.Success = "Dollar table succesffuly updated";
                            return(RedirectToAction("RemittanceAdvise"));
                        }
                    }
                }
            }

            ViewBag.Error = "An error occured, check your inputs";
            return(RedirectToAction("RemittanceAdvise"));
        }
        public async Task <ActionResult> CreateClient(FormCollection form)
        {
            if (ModelState.IsValid)
            {
                using (pdInvoiceEntities db = new pdInvoiceEntities())
                {
                    var clientname = form["ClientName"];
                    var clientcode = form["ClientCode"];
                    if (await db.Clients.AnyAsync(c => c.ClientName.Equals(clientname)))
                    {
                        ViewBag.Client = "Client name already exist in the database!";
                        return(View());
                    }

                    var client = new Client
                    {
                        ClientName = clientname,
                        ClientCode = clientcode
                    };
                    db.Clients.Add(client);
                    await db.SaveChangesAsync().ConfigureAwait(true);

                    ViewBag.Success = "Staff created successfully";
                    return(View());
                }
            }
            return(View());
        }
        public async Task <ActionResult> ChangePassword(FormCollection loginform)
        {
            if (ModelState.IsValid)
            {
                var adminname = loginform["email"];
                var password  = loginform["pass"];
                var password2 = loginform["repeatpass"];
                if (!string.IsNullOrEmpty(adminname))
                {
                    if (password != password2)
                    {
                        ViewBag.PassMismatch = "Your password do not match";
                        return(View());
                    }
                    var db       = new pdInvoiceEntities();
                    var username = db.Staffs.Single(a => a.Email == adminname);
                    if (username == null)
                    {
                        ViewBag.ErrorMessage = "User not found, verify you have entered a valid information";
                        return(View());
                    }
                    var pass = Encryption.Sha256(password);
                    username.Password = pass;
                    await db.SaveChangesAsync();

                    if (username.Role.Equals("MD") || username.Role.Equals("GM") ||
                        username.Role.Equals("Accountant"))
                    {
                        if (pass.Equals(username.Password))
                        {
                            Session["AdminId"]       = username.Email;
                            Session["AdminFullname"] = username.FullName;
                            return(RedirectToAction("Index", "Debtors"));
                        }
                    }
                    else
                    {
                        if (pass.Equals(username.Password))
                        {
                            Session["AdminId"]       = username.Email;
                            Session["AdminFullname"] = username.FullName;
                            return(RedirectToAction("Index", "Debtors"));
                        }
                    }
                }
            }
            return(View());
        }
        public async Task <ActionResult> AddInvoice(FormCollection form)
        {
            if (ModelState.IsValid)
            {
                using (pdInvoiceEntities db = new pdInvoiceEntities())
                {
                    if (form["invoicenumber"] != null)
                    {
                        var invoice = new Invoice
                        {
                            InvoiceNumber = form["invoicenumber"],
                            ClientName    = form["GetClients"]
                        };

                        var dated           = DateTime.UtcNow;
                        var span            = dated.TimeOfDay;
                        var activitybyStaff = $"added or Updated the Invoice Number {invoice.InvoiceNumber}  @ {dated} and timespan {span}";
                        var activityLog     = new ActivityLog
                        {
                            Staffinfo      = this.Session["AdminFullname"].ToString(),
                            TypeofActivity = activitybyStaff
                        };

                        try
                        {
                            db.Invoices.AddOrUpdate(invoice);
                            db.ActivityLogs.Add(activityLog);
                            await db.SaveChangesAsync().ConfigureAwait(true);

                            return(RedirectToAction("AddInvoice"));
                        }
                        catch (Exception)
                        {
                            ViewBag.ErrorMessage = "Invoice can not be added or already exist duplicate entry not allowed";
                            return(View());
                        }
                    }

                    ViewBag.Empty = "Invoice field is empty";
                    return(View());
                }
            }

            ViewBag.Error = "Invalid submission";
            return(View());
        }
        public async Task <ActionResult> ServiceEntry(FormCollection form)
        {
            if (this.ModelState.IsValid)
            {
                using (pdInvoiceEntities db = new pdInvoiceEntities())
                {
                    if (string.Equals(form["invoicenumber"], null, StringComparison.Ordinal) || form["servicenumber"] == null)
                    {
                        ViewBag.Empty = "Invoice field is empty";
                        return(RedirectToAction("ServiceEntry"));
                    }

                    var service = new ServiceEntery
                    {
                        InvoiceNumber = form["invoicenumber"],
                        SENumber      = form["servicenumber"],
                        ClientName    = form["GetClients"]
                    };
                    var dated           = DateTime.UtcNow;
                    var span            = dated.TimeOfDay;
                    var activitybyStaff = $"added or Updated the Invoice {service.InvoiceNumber} Service Entry Number {service.SENumber}  @ {dated} and timespan {span}";
                    var activityLog     = new ActivityLog
                    {
                        Staffinfo      = Session["AdminFullname"].ToString(),
                        TypeofActivity = activitybyStaff
                    };

                    try
                    {
                        db.ServiceEnteries.AddOrUpdate(service);
                        db.ActivityLogs.Add(activityLog);
                        await db.SaveChangesAsync().ConfigureAwait(true);

                        return(RedirectToAction("ServiceEntry"));
                    }
                    catch (Exception)
                    {
                        ViewBag.ErrorMessage = "Invoice can not be added or already exist duplicate entry not allowed";
                        return(RedirectToAction("ServiceEntry"));
                    }
                }
            }
            return(RedirectToAction("ServiceEntry"));
        }
        public async Task <ActionResult> EditNaira(FormCollection form)
        {
            if (ModelState.IsValid)
            {
                using (pdInvoiceEntities db = new pdInvoiceEntities())
                {
                    var clientname = form["ClientName"];
                    var invoicenum = form["InvoiceNumber"];
                    var senum      = form["SeNumber"];
                    if (await db.Nairas.AnyAsync(c =>
                                                 c.ClientName == clientname && c.InvoiceNumber == invoicenum && c.SENumber == senum))
                    {
                        var dataupdate = db.Nairas
                                         .FirstOrDefault(c => c.InvoiceNumber.Equals(invoicenum) && c.SENumber.Equals(senum));
                        if (dataupdate != null)
                        {
                            var dated           = DateTime.UtcNow;
                            var span            = dated.TimeOfDay;
                            var activitybyStaff = $"Updated the amount paid for Naira part of Invoice Number {dataupdate.InvoiceNumber} with Services Entry Number {dataupdate.SENumber}, The amount paid is {decimal.Parse(form["AmountPaid"])}  @ {dated} and timespan {span}";
                            var activityLog     = new ActivityLog
                            {
                                Staffinfo      = Session["AdminFullname"].ToString(),
                                TypeofActivity = activitybyStaff
                            };
                            db.ActivityLogs.AddOrUpdate(activityLog);
                            dataupdate.AmountPaid  = decimal.Parse(form["AmountPaid"]);
                            dataupdate.Outstanding = decimal.Parse(form["Outstanding"]);
                            await db.SaveChangesAsync();

                            ViewBag.Success = "Paid amount successfully updated for ";
                            return(RedirectToAction("EditInvoice", new { invoicenum, senum }));
                        }
                        ViewBag.Error = "The Invoice doesn't exist";
                        return(RedirectToAction("EditInvoice", new { invoicenum, senum }));
                    }
                    ViewBag.Error = "The submitted entry is invalid";
                    return(RedirectToAction("EditInvoice", new { invoicenum, senum }));
                }
            }
            return(RedirectToAction("EditInvoice"));
        }
        public async Task <ActionResult> PostNaira(FormCollection form, HttpPostedFileBase file)
        {
            if (this.ModelState.IsValid)
            {
                try
                {
                    var date                  = form["year"].Split('-');
                    var year                  = date[0];
                    var month                 = date[2];
                    var clientName            = form["GetClients"];
                    var invoicenum            = form["invoicenumber"];
                    var servicesEntry         = form["servicenumber"];
                    var fxRate                = form["FxRate"];
                    var amount                = form["Amount"];
                    var vat                   = form["Vat"];
                    var totalinvoice          = form["TotalInvoice"];
                    var payable               = form["Payable"];
                    var lcdcharge             = form["LcdCharge"];
                    var amountpaid            = form["AmountPaid"];
                    var outstanding           = form["Outstanding"];
                    var datesubmitted         = form["DateSubmitted"];
                    var duedate               = form["DueDate"];
                    var comments              = form["comments"];
                    var withold               = form["WithHoldingTax"];
                    var remittance            = file;
                    var httpServerUtilityBase = this.Server;
                    if (httpServerUtilityBase != null)
                    {
                        var folder           = httpServerUtilityBase.MapPath("~/RemittanceUpload/");
                        var pathtoremittance = Path.Combine(folder, remittance.FileName);
                        if (remittance.ContentLength != 0)
                        {
                            if (remittance.FileName != null)
                            {
                                if (!remittance.FileName.EndsWith(".pdf"))
                                {
                                    if (remittance.FileName.EndsWith(".png") || remittance.FileName.EndsWith(".jpg") ||
                                        remittance.FileName.EndsWith(".jpeg"))
                                    {
                                        remittance.SaveAs(pathtoremittance);
                                    }
                                }
                                else
                                {
                                    folder = httpServerUtilityBase.MapPath("~/RemittanceUpload/");
                                    remittance.SaveAs(Path.Combine(folder, remittance.FileName));
                                }
                            }
                        }
                        ////  System.IO.File.Move(pathtoremittance,$"{}");

                        using (pdInvoiceEntities db = new pdInvoiceEntities())
                        {
                            var invoice = new Naira
                            {
                                ClientName       = clientName,
                                Amount           = decimal.Parse(amount),
                                AmountPaid       = decimal.Parse(amountpaid),
                                Year             = int.Parse(year),
                                Month            = int.Parse(month),
                                InvoiceNumber    = invoicenum,
                                SENumber         = servicesEntry,
                                FxRate           = decimal.Parse(fxRate),
                                VAT              = decimal.Parse(vat),
                                TotalInvoice     = decimal.Parse(totalinvoice),
                                Payable          = decimal.Parse(payable),
                                LcdCharge        = decimal.Parse(lcdcharge),
                                Outstanding      = decimal.Parse(outstanding),
                                WithHoldingTax   = decimal.Parse(withold),
                                DateSubmitted    = DateTime.Parse(datesubmitted),
                                DueDate          = DateTime.Parse(duedate),
                                RemittanceAdvise = pathtoremittance,
                                Comments         = comments
                            }; var dated           = DateTime.UtcNow;
                            var    span            = dated.TimeOfDay;
                            var    activitybyStaff = $"Posted or Updated the Naira Invoice Number {invoice.InvoiceNumber} with Services Entry Number {invoice.SENumber}  @ {dated} and timespan {span}";
                            var    activityLog     = new ActivityLog
                            {
                                Staffinfo      = this.Session["AdminFullname"].ToString(),
                                TypeofActivity = activitybyStaff
                            };
                            db.Nairas.AddOrUpdate(invoice);
                            db.ActivityLogs.AddOrUpdate(activityLog);
                            await db.SaveChangesAsync().ConfigureAwait(true);

                            return(RedirectToAction("PostNairaInvoice"));
                        }
                    }
                }
                catch (Exception e)
                {
                    this.ViewBag.Error = $"An error occured, this message could help debug:  {e.Message}";
                    return(RedirectToAction("PostNairaInvoice"));
                }
            }

            return(RedirectToAction("PostNairaInvoice"));
        }