Ejemplo n.º 1
0
    private string Grabar(string strDatosCabecera, string strDatosPosiciones)
    {
        string sResul           = "";
        bool   bErrorControlado = false;

        #region abrir conexión y transacción
        try
        {
            oConn = Conexion.Abrir();
            tr    = Conexion.AbrirTransaccion(oConn);
        }
        catch (Exception ex)
        {
            if (oConn.State == ConnectionState.Open)
            {
                Conexion.Cerrar(oConn);
            }
            sResul = "Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex);
            return(sResul);
        }
        #endregion
        try
        {
            #region Datos Cabecera
            string[] aDatosCabecera = Regex.Split(strDatosCabecera, "##");
            ///aDatosCabecera[0] = ID Plantilla
            ///aDatosCabecera[1] = ID Cliente Respon.Pago
            ///aDatosCabecera[2] = ID Cliente Destinatario Fra
            ///aDatosCabecera[3] = Referencia del cliente
            ///aDatosCabecera[4] = Condición de pago
            ///aDatosCabecera[5] = Vía de pago
            ///aDatosCabecera[6] = Moneda
            ///aDatosCabecera[7] = Fecha prevista de emisión de fra
            ///aDatosCabecera[8] = // Observaciones Pool
            ///aDatosCabecera[9] = Clave de agrupación
            ///aDatosCabecera[10] = Denominación de la plantilla
            ///aDatosCabecera[11] = Comentarios
            ///aDatosCabecera[12] = Estado
            ///aDatosCabecera[13] = Responsable Comercial
            ///aDatosCabecera[14] = ID proyectosubnodo
            ///aDatosCabecera[15] = ID Organización de ventas
            ///aDatosCabecera[16] = Descuento %
            ///aDatosCabecera[17] = Descuento importe
            ///aDatosCabecera[18] = Fecha diferida
            ///aDatosCabecera[19] = ID Cliente Socilitante
            ///aDatosCabecera[20] = sIDDocuAux
            ///aDatosCabecera[21] = chkIVA

            int      nIdPlantilla      = int.Parse(aDatosCabecera[0]);
            int?     iIdCliSolicitante = (aDatosCabecera[19] == "") ? null : (int?)int.Parse(aDatosCabecera[19]);
            int?     iIdCliResPago     = (aDatosCabecera[1] == "") ? null : (int?)int.Parse(aDatosCabecera[1]);
            int?     iIdCliDesFra      = (aDatosCabecera[2] == "") ? null : (int?)int.Parse(aDatosCabecera[2]);
            string   sRefCli           = Utilidades.unescape(aDatosCabecera[3]);
            string   sCondPago         = aDatosCabecera[4];
            string   sViaPago          = aDatosCabecera[5];
            string   sMoneda           = aDatosCabecera[6];
            DateTime?dFechaPrevEmFra   = (aDatosCabecera[7] == "") ? null : (DateTime?)DateTime.Parse(aDatosCabecera[7]);
            string   sObservPool       = Utilidades.unescape(aDatosCabecera[8]);
            int?     iIDAgrupacion     = (aDatosCabecera[9] == "") ? null : (int?)int.Parse(aDatosCabecera[9]);
            string   sDenominacion     = Utilidades.unescape(aDatosCabecera[10]);
            string   sComentarios      = Utilidades.unescape(aDatosCabecera[11]);
            string   sEstado           = aDatosCabecera[12];
            //int iIdRespComercial = int.Parse(aDatosCabecera[13]);
            int?    nPSN             = (aDatosCabecera[14] == "") ? null : (int?)int.Parse(aDatosCabecera[14]);
            string  sOVSAP           = aDatosCabecera[15];
            float   nDtoPorc         = (aDatosCabecera[16] == "") ? 0 : float.Parse(aDatosCabecera[16]);
            decimal nDtoImporte      = (aDatosCabecera[17] == "") ? 0 : decimal.Parse(aDatosCabecera[17]);
            string  sObservPlantilla = Utilidades.unescape(aDatosCabecera[18]);
            bool    bIVAIncluido     = (aDatosCabecera[21] == "1") ? true : false;
            string  sTextoCabecera   = Utilidades.unescape(aDatosCabecera[22]);

            if (nIdPlantilla == 0)
            {
                nIdPlantilla = PLANTILLAORDENFAC.Insert(tr,
                                                        sDenominacion,
                                                        sEstado,
                                                        (int)Session["UsuarioActual"],
                                                        nPSN,
                                                        iIdCliSolicitante,
                                                        iIdCliResPago,
                                                        iIdCliDesFra,
                                                        sCondPago,
                                                        sViaPago,
                                                        sRefCli,
                                                        dFechaPrevEmFra,
                                                        sMoneda,
                                                        iIDAgrupacion,
                                                        sObservPool,
                                                        sComentarios,
                                                        sOVSAP,
                                                        nDtoPorc,
                                                        nDtoImporte,
                                                        bIVAIncluido,
                                                        sObservPlantilla,
                                                        aDatosCabecera[20],
                                                        sTextoCabecera);
            }
            else //update
            {
                if (sEstado == "T")
                {
                    ///Estas tres comprobaciones no se pueden realizar bajo la transacción
                    ///existente porque acceden a SAP y no podemos realizar transacciones distribuidas.
                    if (iIdCliSolicitante != null && CLIENTE.EstaBloqueadoSAP(null, (int)iIdCliSolicitante))
                    {
                        bErrorControlado = true;
                        throw (new Exception("El cliente solicitante está bloqueado en SAP."));
                    }
                    if (iIdCliResPago != null && CLIENTE.EstaBloqueadoSAP(null, (int)iIdCliResPago))
                    {
                        bErrorControlado = true;
                        throw (new Exception("El cliente responsable de pago está bloqueado en SAP."));
                    }
                    if (iIdCliDesFra != null && CLIENTE.EstaBloqueadoSAP(null, (int)iIdCliDesFra))
                    {
                        bErrorControlado = true;
                        throw (new Exception("El cliente destinatario de factura está bloqueado en SAP."));
                    }
                }

                PLANTILLAORDENFAC.Update(tr,
                                         nIdPlantilla,
                                         sDenominacion,
                                         sEstado,
                                         //(int)Session["UsuarioActual"],
                                         nPSN,
                                         iIdCliSolicitante,
                                         iIdCliResPago,
                                         iIdCliDesFra,
                                         sCondPago,
                                         sViaPago,
                                         sRefCli,
                                         dFechaPrevEmFra,
                                         sMoneda,
                                         iIDAgrupacion,
                                         sObservPool,
                                         sComentarios,
                                         sOVSAP,
                                         nDtoPorc,
                                         nDtoImporte,
                                         bIVAIncluido,
                                         sObservPlantilla, sTextoCabecera);
            }

            #endregion

            #region Datos Posiciones
            string[] aPosiciones = Regex.Split(strDatosPosiciones, "///");
            foreach (string oPosicion in aPosiciones)
            {
                if (oPosicion == "")
                {
                    continue;
                }
                string[] aDatosPosicion = Regex.Split(oPosicion, "##");
                ///aDatosPosicion[0] = opción BD
                ///aDatosPosicion[1] = ID Posición de la plantilla
                ///aDatosPosicion[2] = Concepto de la posición
                ///aDatosPosicion[3] = Descripción de la posición
                ///aDatosPosicion[4] = Unidades
                ///aDatosPosicion[5] = Precio
                ///aDatosPosicion[6] = Descuento %
                ///aDatosPosicion[7] = Descuento importe

                switch (aDatosPosicion[0])
                {
                case "I":
                    int nIDPosicion = PLANTILLAPOSICIONFAC.Insert(tr,
                                                                  nIdPlantilla,
                                                                  Utilidades.unescape(aDatosPosicion[2]),
                                                                  Utilidades.unescape(aDatosPosicion[3]),
                                                                  float.Parse(aDatosPosicion[4]),
                                                                  decimal.Parse(aDatosPosicion[5]),
                                                                  (aDatosPosicion[6] == "") ? 0 : float.Parse(aDatosPosicion[6]),
                                                                  (aDatosPosicion[7] == "") ? 0 : decimal.Parse(aDatosPosicion[7])
                                                                  );
                    break;

                case "U":
                    PLANTILLAPOSICIONFAC.Update(tr,
                                                nIdPlantilla,
                                                int.Parse(aDatosPosicion[1]),
                                                Utilidades.unescape(aDatosPosicion[2]),
                                                Utilidades.unescape(aDatosPosicion[3]),
                                                float.Parse(aDatosPosicion[4]),
                                                decimal.Parse(aDatosPosicion[5]),
                                                (aDatosPosicion[6] == "") ? 0 : float.Parse(aDatosPosicion[6]),
                                                (aDatosPosicion[7] == "") ? 0 : decimal.Parse(aDatosPosicion[7])
                                                );
                    break;

                case "D":
                    PLANTILLAPOSICIONFAC.Delete(tr,
                                                nIdPlantilla,
                                                int.Parse(aDatosPosicion[1])
                                                );
                    break;
                }
            }
            #endregion


            Conexion.CommitTransaccion(tr);
            sResul = "OK@#@" + nIdPlantilla.ToString("#,###");
        }
        catch (Exception ex)
        {
            Conexion.CerrarTransaccion(tr);

            if (!bErrorControlado)
            {
                sResul = "Error@#@" + Errores.mostrarError("Error al grabar los datos de la orden", ex);
            }
            else
            {
                sResul = "Error@#@Operación rechazada.\n\n" + ex.Message;
            }
        }
        finally
        {
            Conexion.Cerrar(oConn);
        }
        return(sResul);
    }