public ActionResult Put(Int32 Id, [FromQuery] Int32 IdDetalleCaja, [FromQuery] String CerrarArqueo, [FromBody] ArqueoCaja value)
        {
            using (var transaction = context.Database.BeginTransaction())
            {
                try
                {
                    ArqueoCaja arqEx = context.ArqueoCajas.Include(x => x.Detalles).ThenInclude(y => y.FormaPago)
                                       .Include(x => x.Estado).First(x => x.Id == Id);



                    arqEx.Estado = context.EstadosArqueo.FirstOrDefault(x => x.Id == value.Estado.Id);
                    if (CerrarArqueo == "si")
                    {
                        arqEx.Estado = context.EstadosArqueo.FirstOrDefault(x => x.Id == 2);
                        context.Entry(arqEx.Estado).State = EntityState.Modified;
                    }
                    DetalleCaja det = context.DetallesCaja.Include(x => x.Cobros).FirstOrDefault(x => x.Id == IdDetalleCaja);

                    for (int i = 0; i < value.Detalles.Count; i++)
                    {
                        DetalleArqueo d = value.Detalles[i];
                        if (d.Id == 0 || d.Id < 0)
                        {
                            arqEx.Detalles.Add(d);
                        }
                        else
                        {
                            DetalleArqueo deta = arqEx.Detalles.FirstOrDefault(x => x.Id == d.Id);
                            deta.FechaBaja            = d.FechaBaja;
                            deta.HoraBaja             = d.HoraBaja;
                            deta.Monto                = d.Monto;
                            deta.Observaciones        = d.Observaciones;
                            context.Entry(deta).State = EntityState.Modified;
                        }
                        context.Entry(d.FormaPago).State = EntityState.Detached;
                    }
                    context.Entry(value.Estado).State = EntityState.Detached;
                    context.SaveChanges();

                    Caja caja = new Caja();
                    if (CerrarArqueo == "si")
                    {
                        caja             = context.Cajas.FirstOrDefault(x => x.Id == det.CajaId);
                        det.HoraCierre   = DateTime.Now.TimeOfDay;
                        det.FechaCierre  = DateTime.Now.Date;
                        det.MontoCierre  = det.Cobros.Where(v => v.FechaBaja == null).Sum(x => x.Monto);
                        caja.EstaAbierta = false;

                        context.Entry(caja).State = EntityState.Modified;
                    }
                    context.Entry(det).State = EntityState.Modified;

                    context.SaveChanges();
                    transaction.Commit();
                    return(new CreatedAtRouteResult("ObtenerArqueoCajaById", new { id = value.Id }, value));
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    throw ex;
                }
                finally
                {
                    transaction.Dispose();
                }
            }
        }
        public ActionResult Post([FromQuery] Int32 IdDetalleCaja, [FromQuery] String CerrarCaja, [FromBody] ArqueoCaja value)
        {
            using (var transaction = context.Database.BeginTransaction())
            {
                try
                {
                    value.Estado = context.EstadosArqueo.FirstOrDefault(x => x.Id == value.Estado.Id);
                    context.ArqueoCajas.Add(value);
                    context.Entry(value.Estado).State = EntityState.Detached;
                    DetalleCaja det = context.DetallesCaja.FirstOrDefault(x => x.Id == IdDetalleCaja);
                    foreach (DetalleArqueo d in value.Detalles)
                    {
                        context.Entry(d.FormaPago).State = EntityState.Detached;
                    }

                    context.SaveChanges();

                    det.Arqueo = value;

                    Caja caja = new Caja();
                    if (CerrarCaja == "si")
                    {
                        caja                      = context.Cajas.FirstOrDefault(x => x.Id == det.CajaId);
                        det.HoraCierre            = DateTime.Now.TimeOfDay;
                        det.FechaCierre           = DateTime.Now.Date;
                        det.MontoCierre           = det.Cobros.Where(v => v.FechaBaja == null).Sum(x => x.Monto);
                        caja.EstaAbierta          = false;
                        context.Entry(caja).State = EntityState.Modified;
                    }
                    context.Entry(det).State = EntityState.Modified;

                    context.SaveChanges();
                    transaction.Commit();
                    return(new CreatedAtRouteResult("ObtenerArqueoCajaById", new { id = value.Id }, value));
                }catch (Exception ex)
                {
                    transaction.Rollback();
                    throw ex;
                }
                finally
                {
                    transaction.Dispose();
                }
            }
        }