コード例 #1
0
ファイル: ConversaoTXT.cs プロジェクト: akretion/uninfe
        private object LerCampo(TpcnTipoCampo Tipo, TpcnResources tag, ObOp optional, int minLength, int maxLength, bool trim)
        {
            int nDecimais = 0;
            string ConteudoTag = "";
            try
            {
                ConteudoTag = RetornarConteudoTag(tag.ToString());

                if (ConteudoTag != "")
                    if (ConteudoTag.StartsWith(prefix))
                        ConteudoTag = "";

                int len = ConteudoTag.Length;
                if (len == 0 && optional == ObOp.Opcional)
                {
                }
                else
                {
                    switch (Tipo)
                    {
                        case TpcnTipoCampo.tcHor:
                            maxLength = minLength = 8; //hh:mm:ss
                            break;
                        case TpcnTipoCampo.tcDatYYYY_MM_DD:
                            maxLength = minLength = 10; //yyyy-MM-dd
                            break;
                        case TpcnTipoCampo.tcDatYYYYMMDD:
                            maxLength = minLength = 8; //yyyyMMdd
                            break;
                        case TpcnTipoCampo.tcDatHor:
                            maxLength = minLength = 19; //aaaa-mm-dd hh:mm:ss
                            break;
                            /*
                        case TpcnTipoCampo.tcDec2:
                            nDecimais = 2;
                            break;
                        case TpcnTipoCampo.tcDec3:
                            nDecimais = 3;
                            break;
                        case TpcnTipoCampo.tcDec4:
                            nDecimais = 4;
                            break;
                        case TpcnTipoCampo.tcDec10:
                            nDecimais = 10;
                            break;*/
                        default:
                            if (Tipo >= TpcnTipoCampo.tcDec2 && Tipo <= TpcnTipoCampo.tcDec10)
                                nDecimais = (int)Tipo;
                            break;
                    }

                    if (len == 0 && minLength > 0)
                    {
                        this.cMensagemErro += "Layout: " + this.layout.Replace(prefix, "") + Environment.NewLine;
                        this.cMensagemErro += string.Format("Segmento [{0}]: tag <{1}> deve ser informada.\r\n" +
                                                            "\tLinha: {2}: Conteudo do segmento: {3}",
                                                            this.FSegmento, tag.ToString(), this.LinhaLida, this.Registro.Substring(1)) + Environment.NewLine;
                    }
                    else
                    {
                        switch (Tipo)
                        {
                            case TpcnTipoCampo.tcDec2:
                            case TpcnTipoCampo.tcDec3:
                            case TpcnTipoCampo.tcDec4:
                            case TpcnTipoCampo.tcDec5:
                            case TpcnTipoCampo.tcDec6:
                            case TpcnTipoCampo.tcDec7:
                            case TpcnTipoCampo.tcDec8:
                            case TpcnTipoCampo.tcDec9:
                            case TpcnTipoCampo.tcDec10:
                                //quando numerico do tipo double não consiste o tamanho minimo nem maximo
                                break;
                            default:
                                if ((len > maxLength || len < minLength) && (maxLength + minLength > 0))
                                {
                                    this.cMensagemErro += "Layout: " + this.layout.Replace(prefix, "") + Environment.NewLine;
                                    this.cMensagemErro += string.Format("Segmento [{0}]: tag <{1}> deve ter seu tamanho entre {2} e {3}. Conteudo: {4}" +
                                                            "\r\n\tLinha: {5}: Conteudo do segmento: {6}",
                                                            this.FSegmento, tag.ToString(), minLength, maxLength, ConteudoTag, this.LinhaLida, this.Registro.Substring(1)) + Environment.NewLine;
                                }
                                break;
                        }
                    }
                }

                if (optional == ObOp.Obrigatorio || (optional == ObOp.Opcional && len != 0))
                {
                    switch (Tipo)
                    {
                        case TpcnTipoCampo.tcDec2:
                        case TpcnTipoCampo.tcDec3:
                        case TpcnTipoCampo.tcDec4:
                        case TpcnTipoCampo.tcDec5:
                        case TpcnTipoCampo.tcDec6:
                        case TpcnTipoCampo.tcDec7:
                        case TpcnTipoCampo.tcDec8:
                        case TpcnTipoCampo.tcDec9:
                        case TpcnTipoCampo.tcDec10:
                            {
                                int pos = ConteudoTag.IndexOf(".") + 1;
                                int ndec = ConteudoTag.Substring(pos).Length;
                                string xdec = ConteudoTag.Substring(pos);
                                //
                                // ajusta o numero de casas decimais
                                while (ndec > nDecimais)
                                {
                                    if (xdec.Substring(ndec - 1, 1) == "0")
                                        --ndec;
                                    else
                                        break;
                                }

                                if (ndec > nDecimais)
                                {
                                    this.cMensagemErro += "Layout: " + this.layout.Replace(prefix, "") + Environment.NewLine;
                                    this.cMensagemErro += string.Format("Segmento [{0}]: tag <{1}> número de casas decimais deve ser de {2} e existe(m) {3}" +
                                                                        "\r\n\tLinha: {4}: Conteudo do segmento: {5}",
                                                                        this.FSegmento, tag.ToString(), nDecimais, ndec, this.LinhaLida, this.Registro.Substring(1)) + Environment.NewLine;
                                }

                                #region -- atribui o numero de casas decimais que serão gravadas

                                if (ndec < (int)TpcnTipoCampo.tcDec2 || ndec > (int)TpcnTipoCampo.tcDec10)
                                    ndec = (int)TpcnTipoCampo.tcDec2;

                                TpcnTipoCampo tipo = (TpcnTipoCampo)ndec;

                                if (tag == TpcnResources.vUnCom)
                                {
                                    NFe.det[NFe.det.Count - 1].Prod.vUnCom_Tipo = tipo;
/*
                                    switch (ndec)
                                    {
                                        case 2:
                                            NFe.det[NFe.det.Count - 1].Prod.vUnCom_Tipo = TpcnTipoCampo.tcDec2;
                                            break;
                                        case 3:
                                            NFe.det[NFe.det.Count - 1].Prod.vUnCom_Tipo = TpcnTipoCampo.tcDec3;
                                            break;
                                        case 4:
                                            NFe.det[NFe.det.Count - 1].Prod.vUnCom_Tipo = TpcnTipoCampo.tcDec4;
                                            break;
                                        case 5:
                                            NFe.det[NFe.det.Count - 1].Prod.vUnCom_Tipo = TpcnTipoCampo.tcDec5;
                                            break;
                                        case 6:
                                            NFe.det[NFe.det.Count - 1].Prod.vUnCom_Tipo = TpcnTipoCampo.tcDec6;
                                            break;
                                        case 10:
                                            NFe.det[NFe.det.Count - 1].Prod.vUnCom_Tipo = TpcnTipoCampo.tcDec10;
                                            break;
                                    }*/
                                    }

                                if (tag == TpcnResources.vUnTrib)
                                {
                                    NFe.det[NFe.det.Count - 1].Prod.vUnTrib_Tipo = tipo;
                                    /*
                                    switch (ndec)
                                    {
                                        case 2:
                                            NFe.det[NFe.det.Count - 1].Prod.vUnTrib_Tipo = TpcnTipoCampo.tcDec2;
                                            break;
                                        case 3:
                                            NFe.det[NFe.det.Count - 1].Prod.vUnTrib_Tipo = TpcnTipoCampo.tcDec3;
                                            break;
                                        case 4:
                                            NFe.det[NFe.det.Count - 1].Prod.vUnTrib_Tipo = TpcnTipoCampo.tcDec4;
                                            break;
                                        case 10:
                                            NFe.det[NFe.det.Count - 1].Prod.vUnTrib_Tipo = TpcnTipoCampo.tcDec10;
                                            break;
                                    }*/
                                    }

                                if (tag == TpcnResources.qTotMes)
                                {
                                    NFe.cana.qTotMes_Tipo = tipo;
                                    /*
                                    switch (ndec)
                                    {
                                        case 2:
                                            NFe.cana.qTotMes_Tipo = TpcnTipoCampo.tcDec2;
                                            break;
                                        case 3:
                                            NFe.cana.qTotMes_Tipo = TpcnTipoCampo.tcDec3;
                                            break;
                                        case 4:
                                            NFe.cana.qTotMes_Tipo = TpcnTipoCampo.tcDec4;
                                            break;
                                        case 10:
                                            NFe.cana.qTotMes_Tipo = TpcnTipoCampo.tcDec10;
                                            break;
                                    }*/
                                    }

                                if (tag == TpcnResources.qTotAnt)
                                {
                                    NFe.cana.qTotAnt_Tipo = tipo;
                                    /*
                                    switch (ndec)
                                    {
                                        case 2:
                                            NFe.cana.qTotAnt_Tipo = TpcnTipoCampo.tcDec2;
                                            break;
                                        case 3:
                                            NFe.cana.qTotAnt_Tipo = TpcnTipoCampo.tcDec3;
                                            break;
                                        case 4:
                                            NFe.cana.qTotAnt_Tipo = TpcnTipoCampo.tcDec4;
                                            break;
                                        case 10:
                                            NFe.cana.qTotAnt_Tipo = TpcnTipoCampo.tcDec10;
                                            break;
                                    }*/
                                    }

                                if (tag == TpcnResources.qTotGer)
                                {
                                    NFe.cana.qTotGer_Tipo = tipo;
                                    /*
                                    switch (ndec)
                                    {
                                        case 2:
                                            NFe.cana.qTotGer_Tipo = TpcnTipoCampo.tcDec2;
                                            break;
                                        case 3:
                                            NFe.cana.qTotGer_Tipo = TpcnTipoCampo.tcDec3;
                                            break;
                                        case 4:
                                            NFe.cana.qTotGer_Tipo = TpcnTipoCampo.tcDec4;
                                            break;
                                        case 10:
                                            NFe.cana.qTotGer_Tipo = TpcnTipoCampo.tcDec10;
                                            break;
                                    }*/
                                    }

                                if (tag == TpcnResources.qtde)
                                {
                                    NFe.cana.fordia[NFe.cana.fordia.Count - 1].qtde_Tipo = tipo;
                                    /*
                                        switch (ndec)
                                        {
                                            case 2:
                                                NFe.cana.fordia[NFe.cana.fordia.Count - 1].qtde_Tipo = TpcnTipoCampo.tcDec2;
                                                break;
                                            case 3:
                                                NFe.cana.fordia[NFe.cana.fordia.Count - 1].qtde_Tipo = TpcnTipoCampo.tcDec3;
                                                break;
                                            case 4:
                                                NFe.cana.fordia[NFe.cana.fordia.Count - 1].qtde_Tipo = TpcnTipoCampo.tcDec4;
                                                break;
                                            case 10:
                                                NFe.cana.fordia[NFe.cana.fordia.Count - 1].qtde_Tipo = TpcnTipoCampo.tcDec10;
                                                break;
                                    }*/
                                        }
                                

                                #endregion
                            }
                            break;
                    }
                }

                switch (Tipo)
                {
                    case TpcnTipoCampo.tcDatYYYYMMDD:
                        return this.getDate2(Tipo, ConteudoTag);

                    case TpcnTipoCampo.tcDatYYYY_MM_DD:
                    case TpcnTipoCampo.tcDatHor:
                        return this.getDateTime(Tipo, ConteudoTag);

                    case TpcnTipoCampo.tcHor:
                        return this.getTime(ConteudoTag);

                    case TpcnTipoCampo.tcDec2:
                    case TpcnTipoCampo.tcDec3:
                    case TpcnTipoCampo.tcDec4:
                    case TpcnTipoCampo.tcDec5:
                    case TpcnTipoCampo.tcDec6:
                    case TpcnTipoCampo.tcDec7:
                    case TpcnTipoCampo.tcDec8:
                    case TpcnTipoCampo.tcDec9:
                    case TpcnTipoCampo.tcDec10:
                        return Convert.ToDouble("0" + ConteudoTag.Replace(".", System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator));

                    case TpcnTipoCampo.tcInt:
                        return Convert.ToInt32("0" + SomenteNumeros(ConteudoTag));

                    default:
                        return (trim ? ConteudoTag.Trim() : ConteudoTag);
                }
            }
            catch (Exception ex)
            {
                this.cMensagemErro += "Layout: " + this.layout.Replace(prefix, "") + Environment.NewLine;
                this.cMensagemErro += string.Format("Segmento [{0}]: tag <{1}> Conteudo: {2}\r\n" +
                                                    "\tLinha: {3}: Conteudo do segmento: {4}\r\n\tMensagem de erro: {5}",
                                                    this.FSegmento, tag.ToString(), ConteudoTag, this.LinhaLida, this.Registro.Substring(1),
                                                    ex.Message) + Environment.NewLine;
                switch (Tipo)
                {
                    case TpcnTipoCampo.tcHor:
                    case TpcnTipoCampo.tcDatYYYY_MM_DD:
                    case TpcnTipoCampo.tcDatYYYYMMDD:
                    case TpcnTipoCampo.tcDatHor:
                        return DateTime.MinValue;

                    case TpcnTipoCampo.tcDec2:
                    case TpcnTipoCampo.tcDec3:
                    case TpcnTipoCampo.tcDec4:
                    case TpcnTipoCampo.tcDec5:
                    case TpcnTipoCampo.tcDec6:
                    case TpcnTipoCampo.tcDec7:
                    case TpcnTipoCampo.tcDec8:
                    case TpcnTipoCampo.tcDec9:
                    case TpcnTipoCampo.tcDec10:
                        return 0.0;

                    case TpcnTipoCampo.tcInt:
                        return 0;

                    default:
                        return "";
                }
            }
        }
コード例 #2
0
ファイル: ConversaoTXT.cs プロジェクト: akretion/uninfe
 private string LerString(TpcnResources tag, ObOp optional, int minLength, int maxLength, bool trim)
 {
     return (string)this.LerCampo(TpcnTipoCampo.tcStr, tag, optional, minLength, maxLength, trim);
 }
コード例 #3
0
ファイル: ConversaoTXT.cs プロジェクト: akretion/uninfe
 private Int32 LerInt32(TpcnResources tag, ObOp optional, int minLength, int maxLength)
 {
     return (Int32)this.LerCampo(TpcnTipoCampo.tcInt, tag, optional, minLength, maxLength, true);
 }
コード例 #4
0
ファイル: ConversaoTXT.cs プロジェクト: akretion/uninfe
 private double LerDouble(TpcnTipoCampo Tipo, TpcnResources tag, ObOp optional, int minLength, int maxLength)
 {
     return (double)this.LerCampo(Tipo, tag, optional, minLength, maxLength, true);
 }
コード例 #5
0
ファイル: NFeW.cs プロジェクト: akretion/uninfe
        private void wCampo(object obj, TpcnTipoCampo Tipo, string TAG, ObOp Obrigatorio, int nAlign)
        {
            TAG = TAG.Trim();

            if (obj == null)
                return;

            if (Tipo == TpcnTipoCampo.tcDatYYYY_MM_DD || Tipo == TpcnTipoCampo.tcDatHor)
                if (((DateTime)obj).Year == 1)
                    if (Obrigatorio == ObOp.Opcional)
                        return;

            if (Obrigatorio == ObOp.Opcional)
            {
                if (Tipo == TpcnTipoCampo.tcInt)
                    if ((int)obj == 0)
                        return;

                if (Tipo >= TpcnTipoCampo.tcDec2 && Tipo <= TpcnTipoCampo.tcDec10)// || Tipo == TpcnTipoCampo.tcDec3 || Tipo == TpcnTipoCampo.tcDec4 || Tipo == TpcnTipoCampo.tcDec10)
                    if ((double)obj == 0)
                        return;

                if (Tipo == TpcnTipoCampo.tcHor)
                    if ((DateTime)obj == DateTime.MinValue)
                        return;

                if (obj.ToString().Trim() == "")
                    return;
            }
            XmlElement valueEl1 = doc.CreateElement(TAG);

            switch (Tipo)
            {
                case TpcnTipoCampo.tcDec2:

                case TpcnTipoCampo.tcDec3:

                case TpcnTipoCampo.tcDec4:
                case TpcnTipoCampo.tcDec5:
                case TpcnTipoCampo.tcDec6:
                case TpcnTipoCampo.tcDec7:
                case TpcnTipoCampo.tcDec8:
                case TpcnTipoCampo.tcDec9:

                case TpcnTipoCampo.tcDec10:
                    if (((double)obj) > 0 || Obrigatorio == ObOp.Obrigatorio)
                    {
                        valueEl1.InnerText = ((double)obj).ToString("0." + ("").PadLeft((int)Tipo, '0')).Replace(",", ".");
                    }
                    break;

                case TpcnTipoCampo.tcDatHor:
                    if (((DateTime)obj).Year > 1)
                        valueEl1.InnerText = ((DateTime)obj).ToString("yyyy-MM-ddTHH:mm:ss");
                    break;

                case TpcnTipoCampo.tcHor:
                    if (Obrigatorio == ObOp.Opcional && ((DateTime)obj) == DateTime.MinValue)
                        return;
                    valueEl1.InnerText = ((DateTime)obj).ToString("HH:mm:ss");
                    break;

                case TpcnTipoCampo.tcDatYYYY_MM_DD:
                    if (((DateTime)obj).Year > 1)
                        valueEl1.InnerText = ((DateTime)obj).ToString("yyyy-MM-dd");
                    break;

                case TpcnTipoCampo.tcDatYYYYMMDD:
                    if (((DateTime)obj).Year > 1)
                        valueEl1.InnerText = ((DateTime)obj).ToString("yyyyMMdd");
                    break;

                default:
                    if (nAlign > 0)
                    {
                        valueEl1.InnerText = obj.ToString().PadLeft(nAlign, '0');
                    }
                    else
                        if (Tipo == TpcnTipoCampo.tcInt)
                        {
                            if (((int)obj) != 0 || Obrigatorio == ObOp.Obrigatorio)
                                valueEl1.InnerText = ((int)obj).ToString();
                        }
                        else
                            if (obj.ToString().Trim() != "")
                            {
                                if (TAG == TpcnResources.xProd.ToString() && !this.convertToOem)
                                    valueEl1.InnerText = obj.ToString().TrimStart().TrimEnd();
                                else
                                    valueEl1.InnerText = ConvertToOEM(obj.ToString().TrimStart().TrimEnd());
                            }
                    break;
            }
            nodeCurrent.AppendChild(valueEl1);
        }
コード例 #6
0
ファイル: NFeW.cs プロジェクト: akretion/uninfe
 /// <summary>
 /// wCampo
 /// </summary>
 /// <param name="obj"></param>
 /// <param name="Tipo"></param>
 /// <param name="TAG"></param>
 /// <param name="Obrigatorio"></param>
 /// <param name="nAlign"></param>
 private void wCampo(object obj, TpcnTipoCampo Tipo, TpcnResources TAG, ObOp Obrigatorio, int nAlign)
 {
     wCampo(obj, Tipo, TAG.ToString(), Obrigatorio, nAlign);
 }