private string IngresaLogFactura(vwIntegracionesVentas integraVentas, string transicion, string mensaje)
        {
            short  cumplePreCondiciones = 0;
            string mensajePreCondicion  = string.Empty;

            var precondiciones = getPreCondiciones(integraVentas.TIPODOCGP, integraVentas.NUMDOCGP, 0, string.Empty, transicion);

            int condicionesCumplidas = precondiciones.Where(x => x.cumplePreCondiciones == 1).Count();

            if (condicionesCumplidas == precondiciones.Count())
            {
                cumplePreCondiciones = 1;
                mensajePreCondicion  = precondiciones.First().msjPreCondiciones;
            }
            else
            {
                mensajePreCondicion = precondiciones.Where(x => x.cumplePreCondiciones == 0).First().msjPreCondiciones;     //sería bueno mostrar todas condiciones que no fueron cumplidas.
            }
            using (var db = this.getDbContextIntegra())
            {
                if (!this.probarConexionDBIntegra())
                {
                    throw new InvalidOperationException("No se pudo establecer la conexión con la bd de Integración. Documento Ariane: " + integraVentas.NUMDOCARN + " Documento GP:" + integraVentas.NUMDOCGP ?? string.Empty);
                }

                ObjectParameter ID = new ObjectParameter("ID", typeof(int));

                db.sp_LOGINTEGRACIONESInsert(ID, integraVentas.TIPODOCARN, integraVentas.NUMDOCARN, integraVentas.TIPODOCGP, integraVentas.NUMDOCGP, transicion, usuarioQueProcesa, Utiles.Izquierda(mensaje, 150), mensajePreCondicion, cumplePreCondiciones);

                return(ID.Value.ToString());
            }
        }
        private string IngresaLogFactura(vwIntegracionesVentas integraVentas, short?soptype, string sopnumbe, string transicion, string msj, string msjLargo)
        {
            using (var db = this.getDbContextIntegra())
            {
                // verificar la conexión con el servidor de bd
                if (!this.probarConexionDBIntegra())
                {
                    throw new InvalidOperationException("No se pudo establecer la conexión con el servidor al tratar de ingresar el Log de la transacción. Prefactura: " + integraVentas.NUMDOCARN + " Factura:" + integraVentas.NUMDOCGP);
                }
                ObjectParameter ID = new ObjectParameter("ID", typeof(int));

                db.sp_LOGINTEGRACIONESInsert(ID, integraVentas.TIPODOCARN, integraVentas.NUMDOCARN, soptype, sopnumbe, transicion, usuarioQueProcesa, msj, msjLargo, 1);

                return(ID.Value.ToString());
            }
        }
        /// <summary>
        /// Crea el xml de una factura sop a partir de una vista sql.
        /// </summary>
        private taSopHdrIvcInsert IntegraFacturaSOP(vwIntegracionesVentas preFacturasAIntegrar, string sTimeStamp)
        {
            string       eConnResult                = String.Empty;
            eConnectType docEConnectSOP             = new eConnectType();
            eConnectType entEconnect                = new eConnectType();
            FacturaDeVentaSOPBandejaDB documentoSOP = new FacturaDeVentaSOPBandejaDB(parametrosDB);
            eConnectMethods            eConnObject  = new eConnectMethods();

            var    dpf = getPrefacturasDetalle(preFacturasAIntegrar.NUMDOCARN, preFacturasAIntegrar.TIPODOCARN);
            string tipoContribuyente = LocArgentina_GetTipoContribuyente(preFacturasAIntegrar.IDCLIENTE);

            documentoSOP.preparaFacturaSOP(preFacturasAIntegrar, dpf, sTimeStamp, tipoContribuyente);
            docEConnectSOP.SOPTransactionType = new SOPTransactionType[] { documentoSOP.FacturaSop };
            serializa(docEConnectSOP);
            eConnResult = eConnObject.CreateTransactionEntity(parametrosDB.ConnStringTarget, this.SDocXml);
            return(documentoSOP.FacturaSop.taSopHdrIvcInsert);
        }
        public void armaFacturaCaEconn(vwIntegracionesVentas preFacturasIntegCab, IList <vwPreFacturas> preFacturasDet, string sTimeStamp, string tipoContribuyente)
        {
            try
            {
                short soptype = preFacturasIntegCab.SOPTYPE_GP ?? 3;

                //var docId = parametrosDB.IdsDocumento.Where(x=>x.Key.CompareTo(tipoContribuyente)==0)?.First() ;
                string docId = string.Empty;
                parametrosDB.IdsDocumento.TryGetValue(tipoContribuyente.Trim(), out docId);

                if (string.IsNullOrEmpty(docId))
                {
                    throw new InvalidOperationException(string.Concat("No existe configurado el tipo de contribuyente ", tipoContribuyente, " en el archivo de parámetros. [FacturaDeVentaSOPBandejaDB.armaFacturaCaEconn]"));
                }

                string sopnumbe = getNextSopNumbe(soptype, docId);

                facturaSopCa.CREATETAXES = 1;   //1: crear impuestos automáticamente
                facturaSopCa.DEFPRICING  = 1;   //1: calcular automáticamente; 0:se debe indicar el precio unitario

                facturaSopCa.BACHNUMB = sTimeStamp;
                facturaSopCa.SOPTYPE  = soptype;
                facturaSopCa.DOCID    = docId;
                facturaSopCa.SOPNUMBE = sopnumbe;
                facturaSopCa.DOCDATE  = preFacturasIntegCab.FECHADOC.ToString(parametrosDB.FormatoFechaDB);
                facturaSopCa.CUSTNMBR = preFacturasIntegCab.IDCLIENTE;
                facturaSopCa.CSTPONBR = preFacturasIntegCab.NUMDOCARN;

                facturaSopCa.REFRENCE = preFacturasIntegCab.OBSERVACIONES;

                //facturaSopCa.SUBTOTAL = Decimal.Round(unitprice, 2);
                //facturaSopCa.DOCAMNT = facturaSopCa.SUBTOTAL;

                facturaSop.taSopLineIvcInsert_Items = new taSopLineIvcInsert_ItemsTaSopLineIvcInsert[preFacturasDet.Count];
                int i = 0;
                foreach (var d in preFacturasDet)
                {
                    facturaSopDe            = new taSopLineIvcInsert_ItemsTaSopLineIvcInsert();
                    facturaSopDe.SOPTYPE    = facturaSopCa.SOPTYPE;
                    facturaSopDe.SOPNUMBE   = facturaSopCa.SOPNUMBE;
                    facturaSopDe.CUSTNMBR   = facturaSopCa.CUSTNMBR;
                    facturaSopDe.DOCDATE    = facturaSopCa.DOCDATE;
                    facturaSopDe.ITEMNMBR   = d.IDITEM;
                    facturaSopDe.ITEMDESC   = d.DESCRIPCION;
                    facturaSopDe.QUANTITY   = d.CANTIDAD;
                    facturaSopDe.DEFPRICING = 1;     //1: calcular el precio y precio extendido automáticamente
                    //facturaSopDe.DEFEXTPRICE = 1;   //1: calcular el precio extendido en base al precio unitario y la cantidad
                    facturaSop.taSopLineIvcInsert_Items[i] = facturaSopDe;
                    i++;
                    //Decimal unitprice = 0;
                    //if (Decimal.TryParse(hojaXl.Cells[fila, int.Parse(param.FacturaSopUNITPRCE)].Value.ToString(), out unitprice))
                    //{
                    //    facturaSopDe.UNITPRCE = Decimal.Round(unitprice, 2);
                    //}
                    //else
                    //    throw new FormatException("El monto es incorrecto en la fila " + fila.ToString() + ", columna " + param.FacturaSopUNITPRCE + " [armaFacturaCaEconn]");
                }
            }
            catch (FormatException fmt)
            {
                throw new FormatException("Formato incorrecto [armaFacturaCaEconn]", fmt);
            }
            catch (OverflowException ovr)
            {
                throw new OverflowException("Monto demasiado grande [armaFacturaCaEconn]", ovr);
            }
            //finally
            //{
            //    trace.Flush();
            //    trace.Close();

            //}
        }
        public void preparaFacturaSOP(vwIntegracionesVentas pfIntegraCab, IList <vwPreFacturas> preFacturasDet, string sTimeStamp, string tipoContribuyente)
        {
            armaFacturaCaEconn(pfIntegraCab, preFacturasDet, sTimeStamp, tipoContribuyente);

            facturaSop.taSopHdrIvcInsert = facturaSopCa;
        }