public void AttemptAddDetalle()
        {
            LoteModel lot = new LoteModel(new LoteDataMapper());

            lot.UnidLote = UNID.getNewUNID();
            lot.UnidPOM  = UNID.getNewUNID();
            lot.saveLote();
            this._facturaCompraModel.UnidLote    = lot.UnidLote;
            this._facturaCompraModel.UnidFactura = UNID.getNewUNID();
            this.FacturaCompraModel.saveFactura();
            this.FacturaCompraDetalleModel.UnidFacturaCompraDetalle = UNID.getNewUNID();
            FacturaCompraModel aux = new FacturaCompraModel(new FacturaDataMapper());

            aux.UnidFactura = this._facturaCompraModel.UnidFactura;
            this._facturaCompraDetalleModel.Factura = aux;
            this.FacturaCompraDetalleModel.saveFacturaDetalle();

            if (this.ModifyItemViewModel != null)
            {
                this.ModifyItemViewModel.Update();
            }
            else
            {
                this.AgregarItemViewModel.Update();
            }
        }
        private void SaveFactura()
        {
            LoteModel lot = null;
            FacturaCompraDataMapper        fcdmp = new FacturaCompraDataMapper();
            FacturaCompraDetalleDataMapper fcdDm = new FacturaCompraDetalleDataMapper();

            //Guardar
            foreach (FacturaCompraModel item in this.Facturas)
            {
                if (item.IsNew)
                {
                    //insertar la nueva factura
                    if (lot == null)
                    {
                        lot          = new LoteModel(new LoteDataMapper());
                        lot.UnidLote = UNID.getNewUNID();
                        lot.UnidPOM  = UNID.getNewUNID();
                        lot.saveLote();
                    }

                    item.UnidLote    = lot.UnidLote;
                    item.UnidFactura = UNID.getNewUNID();
                    item.saveFactura();
                    //factura detalle
                    foreach (FacturaCompraDetalleModel fac in item.FacturaDetalle)
                    {
                        fac.Factura = item;
                        fac.saveFacturaDetalle();
                    }
                }
                else
                {
                    //Actualizar Factura
                    fcdmp.udpateElement(new FACTURA()
                    {
                        UNID_FACTURA        = item.UnidFactura,
                        FACTURA_NUMERO      = item.NumeroFactura,
                        FECHA_FACTURA       = item.FechaFactura,
                        IS_ACTIVE           = item.IsActive,
                        IVA_POR             = item.PorIva,
                        UNID_MONEDA         = item.Moneda.UnidMoneda,
                        UNID_PROVEEDOR      = item.Proveedor.UnidProveedor,
                        NUMERO_PEDIMENTO    = item.NumeroPedimento,
                        UNID_TIPO_PEDIMENTO = item.TipoPedimento.UnidTipoPedimento,
                        TC = item.TC
                    }, this.ActualUser);

                    //Generar Array para insertar/actualizar/eliminar las factura detalle
                    List <FACTURA_DETALLE> fds = new List <FACTURA_DETALLE>();
                    foreach (FacturaCompraDetalleModel det in item.FacturaDetalle)
                    {
                        fds.Add(det.ConvertToPoco(det));
                        fds[fds.Count - 1].UNID_FACTURA = item.UnidFactura;
                    }

                    if (fds.Count > 0)
                    {
                        fcdDm.udpateElements(fds);
                    }
                }
                //Borrar facturas
                fcdmp.deleteFacturas(this._DelFacturas, this.ActualUser);
            } //end foreach
        }     //end func
        private void AttemptAddMovimientoCmd()
        {
            LoteModel lot = new LoteModel(new LoteDataMapper());

            lot.UnidLote = UNID.getNewUNID();
            lot.UnidPOM  = UNID.getNewUNID();
            lot.saveLote();
            //factura
            foreach (FacturaCompraModel item in this.Facturas)
            {
                item.UnidLote    = lot.UnidLote;
                item.UnidFactura = UNID.getNewUNID();
                item.saveFactura();
                //factura detalle
                foreach (FacturaCompraDetalleModel fac in item.FacturaDetalle)
                {
                    fac.Factura = item;
                    fac.saveFacturaDetalle();
                }
            }

            //Agregar recibo
            DAL.POCOS.RECIBO recibo = new DAL.POCOS.RECIBO()
            {
                UNID_RECIBO      = this.UnidRecibo,
                FECHA_CREACION   = this.FechaCreacion,
                TT               = this.TroubleTicket,
                PO               = this.PO,
                UNID_SOLICITANTE = (this.SelectedSolicitante.UnidSolicitante == 0) ? (long?)null : this.SelectedSolicitante.UnidSolicitante
            };
            ReciboDataMapper reciboDataMapper = new ReciboDataMapper();

            reciboDataMapper.insertElement(recibo, this.ActualUser);


            foreach (InventoryApp.Model.Recibo.MovimientoModel mov in this.Movimientos)
            {
                //Agregar movimiento
                DAL.POCOS.MOVIMENTO movimiento = new MOVIMENTO()
                {
                    UNID_MOVIMIENTO = mov.UnidMovimiento
                    ,
                    FECHA_MOVIMIENTO = mov.FechaCaptura
                    ,
                    UNID_ALMACEN_DESTINO = (mov.DestinoAlmacen != null) ? mov.DestinoAlmacen.UnidAlmacen : (long?)null
                    ,
                    UNID_ALMACEN_PROCEDENCIA = (mov.OrigenAlmacen != null) ? mov.OrigenAlmacen.UnidAlmacen : (long?)null
                    ,
                    UNID_CLIENTE_PROCEDENCIA = (mov.OrigenCliente != null) ? mov.OrigenCliente.UnidCliente : (long?)null
                    ,
                    UNID_PROVEEDOR_PROCEDENCIA = (mov.OrigenProveedor != null) ? mov.OrigenProveedor.UnidProveedor : (long?)null
                    ,
                    TT = this.TroubleTicket
                    ,
                    UNID_TIPO_MOVIMIENTO = MovimientoRecibo
                };
                MovimientoDataMapper movDataMapper = new MovimientoDataMapper();
                movDataMapper.insertElement(movimiento);

                foreach (InventoryApp.Model.Recibo.ReciboItemModel item in mov.Items)
                {
                    long?aux = null;
                    if (item.ItemStatus != null)
                    {
                        aux = item.ItemStatus.UnidItemStatus;
                    }

                    //Agregar el item
                    DAL.POCOS.ITEM pItem = new DAL.POCOS.ITEM()
                    {
                        UNID_ITEM = item.UnidItem
                        ,
                        SKU = item.Sku
                        ,
                        NUMERO_SERIE = item.NumeroSerie
                        ,
                        UNID_ITEM_STATUS = aux
                        ,
                        COSTO_UNITARIO = item.CostoUnitario
                        ,
                        UNID_FACTURA_DETALE = item.FacturaDetalle.UnidFacturaCompraDetalle
                        ,
                        UNID_ARTICULO = item.Articulo.UnidArticulo
                        ,
                        PEDIMENTO_EXPO = item.PedimentoExpo
                        ,
                        PEDIMENTO_IMPO = item.PedimentoImpo
                        ,
                        CANTIDAD = item.Cantidad
                        ,
                        IS_ACTIVE = true
                    };
                    ItemDataMapper itemDataMapper = new ItemDataMapper();
                    itemDataMapper.insertElement(pItem);

                    //Agregar detalle del movimiento
                    DAL.POCOS.MOVIMIENTO_DETALLE movDetalle = new DAL.POCOS.MOVIMIENTO_DETALLE()
                    {
                        UNID_MOVIMIENTO = mov.UnidMovimiento
                        ,
                        UNID_ITEM = item.UnidItem
                        ,
                        UNID_MOVIMIENTO_DETALLE = item.UnidMovimientoDetalle
                        ,
                        CANTIDAD = item.Cantidad
                        ,
                        UNID_ITEM_STATUS = item.ItemStatus.UnidItemStatus
                        ,
                        IS_ACTIVE = true
                    };
                    MovimientoDetalleDataMapper mdDataMapper = new MovimientoDetalleDataMapper();
                    mdDataMapper.insertElement(movDetalle);

                    //Actualizar el Ășltimo movimiento
                    DAL.POCOS.ULTIMO_MOVIMIENTO ulitmoMovto = new DAL.POCOS.ULTIMO_MOVIMIENTO()
                    {
                        UNID_ITEM               = item.UnidItem,
                        UNID_ALMACEN            = mov.DestinoAlmacen.UnidAlmacen,
                        UNID_MOVIMIENTO_DETALLE = item.UnidMovimientoDetalle,
                        CANTIDAD         = item.Cantidad,
                        UNID_ITEM_STATUS = item.ItemStatus.UnidItemStatus,
                        IS_ACTIVE        = false
                    };
                    UltimoMovimientoDataMapper umDataMapper = new UltimoMovimientoDataMapper();
                    umDataMapper.udpateElement(ulitmoMovto);
                }

                //Agregar recibodetalle
                DAL.POCOS.RECIBO_MOVIMIENTO rm = new DAL.POCOS.RECIBO_MOVIMIENTO()
                {
                    UNID_RECIBO            = this._UnidRecibo,
                    UNID_RECIBO_MOVIMIENTO = mov.UnidMovimiento,
                    UNID_MOVIMIENTO        = mov.UnidMovimiento,
                    UNID_FACTURA           = mov.Items.First().FacturaDetalle.Factura.UnidFactura
                };
                ReciboMovimientoDataMapper rmDataMaper = new ReciboMovimientoDataMapper();
                rmDataMaper.insertElement(rm);
            }

            if (this._CatalogReciboViewModel != null)
            {
                this._CatalogReciboViewModel.updateCollection();
            }
        }