public JsonResult Edit(InvoiceViewModel invoice)
        {
            var addInvoice = new Invoice()
            {
                id          = invoice.Id,
                company_id  = invoice.CompanyId,
                number      = invoice.Number,
                date        = Convert.ToDateTime(invoice.Date),
                fields      = InvoiceSerializer.SerializeFields(invoice.Fields),
                totalSum    = invoice.TotalSum,
                totalTaxSum = invoice.TotalTaxSum
            };

            _db.Entry(addInvoice).State = EntityState.Modified;
            _db.SaveChanges();

            return(Json(new InvoiceViewModel()
            {
                Id = addInvoice.id,
                Number = addInvoice.number,
                Date = addInvoice.date.ToString(),
                Fields = InvoiceSerializer.DeserializeFields(addInvoice.fields),
                CompanyId = addInvoice.company_id,
                TotalSum = addInvoice.totalSum,
                TotalTaxSum = addInvoice.totalTaxSum
            }));
        }
        public JsonResult Detail(long?id)
        {
            if (id == null)
            {
                throw new Exception("Can not find id");
            }

            var invoice = _db.Invoices.Find(id);

            if (invoice == null)
            {
                throw new Exception("Can not find the Invoice");
            }

            return(Json(new InvoiceViewModel()
            {
                Id = invoice.id,
                Number = invoice.number,
                Fields = InvoiceSerializer.DeserializeFields(invoice.fields),
                CompanyId = invoice.company_id,
                CompanyName = invoice.Company.name,
                TotalSum = invoice.totalSum,
                TotalTaxSum = invoice.totalTaxSum,
                Date = invoice.date.ToString()
            }, JsonRequestBehavior.AllowGet));
        }
        public JsonResult Create(InvoiceViewModel invoice)
        {
            var addInvoice = new Invoice()
            {
                company_id  = invoice.CompanyId,
                number      = invoice.Number ?? Guid.NewGuid().ToString(),
                date        = Convert.ToDateTime(invoice.Date),
                fields      = InvoiceSerializer.SerializeFields(invoice.Fields),
                totalSum    = invoice.TotalSum,
                totalTaxSum = invoice.TotalTaxSum
            };

            _db.Invoices.Add(addInvoice);
            _db.SaveChanges();

            return(Json(new InvoiceViewModel()
            {
                Id = addInvoice.id,
                Number = addInvoice.number,
                Date = addInvoice.date.ToString(),
                Fields = InvoiceSerializer.DeserializeFields(addInvoice.fields),
                CompanyId = addInvoice.company_id,
                TotalSum = addInvoice.totalSum,
                TotalTaxSum = addInvoice.totalTaxSum,
            }));
        }
        public JsonResult Index()
        {
            var list = _db.Invoices.AsEnumerable().Select(invoice => new InvoiceViewModel()
            {
                Id          = invoice.id,
                Number      = invoice.number,
                Date        = invoice.date.ToString(),
                Fields      = InvoiceSerializer.DeserializeFields(invoice.fields),
                CompanyId   = invoice.company_id,
                CompanyName = invoice.Company.name,
                TotalSum    = invoice.totalSum,
                TotalTaxSum = invoice.totalTaxSum
            }).ToList();

            return(Json(list, JsonRequestBehavior.AllowGet));
        }