public async Task <IActionResult> Post([FromBody] CompraEquipo compraEquipo)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            using (var sn = factory.OpenSession())
            {
                using (var tx = sn.BeginTransaction())
                {
                    try
                    {
                        compraEquipo.FechaCreacion = DateTime.Now;
                        compraEquipo.Costo         = compraEquipo.Items.Sum(x => x.Costo);

                        sn.Save(compraEquipo);

                        foreach (var item in compraEquipo.Items)
                        {
                            InventarioEquipo inventario = await sn.Query <InventarioEquipo>()
                                                          .Where(x => x.IdAlmacen == compraEquipo.Almacen.Id &&
                                                                 x.IdEquipo == item.Equipo.Id)
                                                          .FirstOrDefaultAsync();

                            if (inventario == null)
                            {
                                sn.Save(new InventarioEquipo
                                {
                                    IdAlmacen = compraEquipo.Almacen.Id,
                                    IdEquipo  = item.Equipo.Id,
                                    Stock     = item.Cantidad
                                });
                            }
                            else
                            {
                                inventario.Stock += item.Cantidad;
                            }

                            item.IdCompraEquipo = compraEquipo.Id;

                            sn.Save(item);
                        }

                        await tx.CommitAsync();
                    }
                    catch (Exception ex)
                    {
                        await tx.RollbackAsync();

                        return(StatusCode(500, ex.Message));
                    }
                }
            }

            return(Ok(true));
        }
        public async Task <IActionResult> DeleteCompraEquipo([FromRoute] int id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            using (var sn = factory.OpenSession())
            {
                using (var tx = sn.BeginTransaction())
                {
                    try
                    {
                        CompraEquipo compraEquipo = sn.Get <CompraEquipo>(id);

                        List <CompraEquipoItem> items = await sn.Query <CompraEquipoItem>()
                                                        .Where(x => x.IdCompraEquipo == id)
                                                        .ToListAsync();

                        foreach (var item in items)
                        {
                            InventarioEquipo inventario = await sn.Query <InventarioEquipo>()
                                                          .Where(x => x.IdAlmacen == compraEquipo.Almacen.Id &&
                                                                 x.IdEquipo == item.Equipo.Id)
                                                          .FirstOrDefaultAsync();

                            if (inventario != null && inventario.Stock >= item.Cantidad)
                            {
                                inventario.Stock -= item.Cantidad;
                            }
                            else
                            {
                                throw new Exception("Sin stock para el equipo: " + item.Equipo.Nombre);
                            }
                        }

                        sn.Delete(string.Format("FROM CompraEquipoItem WHERE IdCompraEquipo = {0}", id));

                        sn.Delete(compraEquipo);

                        await tx.CommitAsync();
                    }
                    catch (Exception ex)
                    {
                        await tx.RollbackAsync();

                        return(StatusCode(500, ex.Message));
                    }
                }
            }

            return(Ok(true));
        }
        public async Task <IActionResult> Post([FromBody] AsignacionEquipo asignacionEquipo)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            using (var sn = factory.OpenSession())
            {
                using (var tx = sn.BeginTransaction())
                {
                    try
                    {
                        asignacionEquipo.FechaCreacion = DateTime.Now;

                        sn.Save(asignacionEquipo);

                        foreach (var item in asignacionEquipo.Items)
                        {
                            InventarioEquipo inventario = await sn.Query <InventarioEquipo>()
                                                          .Where(x => x.IdAlmacen == asignacionEquipo.Almacen.Id &&
                                                                 x.IdEquipo == item.Equipo.Id)
                                                          .FirstOrDefaultAsync();

                            if (inventario != null && inventario.Stock >= item.Cantidad)
                            {
                                inventario.Stock -= item.Cantidad;
                            }
                            else
                            {
                                throw new Exception("Sin stock para el equipo: " + item.Equipo.Nombre);
                            }

                            item.IdAsignacionEquipo = asignacionEquipo.Id;

                            sn.Save(item);
                        }

                        await tx.CommitAsync();
                    }
                    catch (Exception ex)
                    {
                        await tx.RollbackAsync();

                        return(StatusCode(500, ex.Message));
                    }
                }
            }

            return(Ok(true));
        }
        public async Task <IActionResult> DeleteAsignacionEquipo([FromRoute] int id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            using (var sn = factory.OpenSession())
            {
                using (var tx = sn.BeginTransaction())
                {
                    try
                    {
                        AsignacionEquipo asignacionEquipo = sn.Get <AsignacionEquipo>(id);

                        List <AsignacionEquipoItem> items = await sn.Query <AsignacionEquipoItem>()
                                                            .Where(x => x.IdAsignacionEquipo == id)
                                                            .ToListAsync();

                        foreach (var item in items)
                        {
                            InventarioEquipo inventario = await sn.Query <InventarioEquipo>()
                                                          .Where(x => x.IdAlmacen == asignacionEquipo.Almacen.Id &&
                                                                 x.IdEquipo == item.Equipo.Id)
                                                          .FirstOrDefaultAsync();

                            inventario.Stock += item.Cantidad;
                        }

                        sn.Delete(string.Format("FROM AsignacionEquipoItem WHERE IdAsignacionEquipo = {0}", id));

                        sn.Delete(asignacionEquipo);

                        await tx.CommitAsync();
                    }
                    catch (Exception ex)
                    {
                        await tx.RollbackAsync();

                        return(StatusCode(500, ex.Message));
                    }
                }
            }

            return(Ok(true));
        }