/// <summary> /// Obtem as definiões de exportação para o recibo verde, que indicam para que conta cada valor deve ir, etc.. /// Porque para tipos de documento (fatura-recibo, etc.) e tipos de recibo (Pagamento, Adiantamento, etc.) são diferentes /// </summary> /// <param name="reciboVerde"></param> /// <returns></returns> private static DefinicoesExportTipoReciboVerde ObterDefinicoesExportacaoRecibo(ReciboVerde reciboVerde) { //Seleciona se usa as definicoes de Prestador ou Adquirente DefinicoesExportacao definicoesExportacaoTipo; if (reciboVerde.tipo == TipoReciboVerdePrestOUAdquir.Prestador) { definicoesExportacaoTipo = Definicoes.definicoesExportacaoPrestador; } else { definicoesExportacaoTipo = Definicoes.definicoesExportacaoAdquirente; } //Obtem para que conta cada valor deve ir, etc. //Seleciona consoante o tipo de documento (fatura-recibo, etc.) DefinicoesExportTipoDoc defExportFaturaRecibo; switch (reciboVerde.tipoDoc) { case "Fatura-Recibo": defExportFaturaRecibo = definicoesExportacaoTipo.defExportFaturaRecibo; break; case "Fatura": defExportFaturaRecibo = definicoesExportacaoTipo.defExportFatura; break; case "Recibo": defExportFaturaRecibo = definicoesExportacaoTipo.defExportRecibo; break; default: throw new Exception(String.Format("Não está previsto o tipo documento {0}", reciboVerde.tipoDoc)); } //Seleciona consoante o tipo de Recibo Verde (Pagamento, Adiantamento, etc.) DefinicoesExportTipoReciboVerde definicoesExportTipoReciboVerde = new DefinicoesExportTipoReciboVerde(); switch (reciboVerde.tipoReciboVerde) { case TipoReciboVerde.Pagamento: definicoesExportTipoReciboVerde = defExportFaturaRecibo.defExportTipoPagamento; break; case TipoReciboVerde.Adiantamento: definicoesExportTipoReciboVerde = defExportFaturaRecibo.defExportTipoAdiantamento; break; case TipoReciboVerde.AdiantamentoPagamento: definicoesExportTipoReciboVerde = defExportFaturaRecibo.defExportTipoAdiantamentoPagamento; break; } return(definicoesExportTipoReciboVerde); }
/// <summary> /// Exporta o recibo, escrevendo várias linhas no ficheiro /// </summary> /// <param name="fileStream"></param> /// <param name="reciboVerde"></param> /// <returns></returns> private static bool WintouchExportarRecibo(StreamWriter fileStream, ReciboVerde reciboVerde) { //As definiões de exportação indicam para que conta cada valor deve ir, etc.. Porque para tipos de documento (fatura-recibo, etc.) // e tipos de recibo (Pagamento, Adiantamento, etc.) são diferentes DefinicoesExportTipoReciboVerde definicoesExportTipoReciboVerde = ObterDefinicoesExportacaoRecibo(reciboVerde); int numLinha = 1; //Exporta uma linha para cada valor (valor base, iva, etc.) //A conta para qual o valor base vai depende se o valor de IVA é 0 ou não if (reciboVerde.valores.valorIvaContinente > 0) { WintouchExportarLinha(fileStream, reciboVerde, definicoesExportTipoReciboVerde, reciboVerde.valores.valorBase, definicoesExportTipoReciboVerde.contaValBase, 'C', ref numLinha); } else { WintouchExportarLinha(fileStream, reciboVerde, definicoesExportTipoReciboVerde, reciboVerde.valores.valorBase, definicoesExportTipoReciboVerde.contaValBaseIsento, 'C', ref numLinha); } WintouchExportarLinha(fileStream, reciboVerde, definicoesExportTipoReciboVerde, reciboVerde.valores.valorIvaContinente, definicoesExportTipoReciboVerde.contaIVA, 'C', ref numLinha); WintouchExportarLinha(fileStream, reciboVerde, definicoesExportTipoReciboVerde, reciboVerde.valores.impostoSelo, definicoesExportTipoReciboVerde.contaSelo, 'C', ref numLinha); WintouchExportarLinha(fileStream, reciboVerde, definicoesExportTipoReciboVerde, reciboVerde.valores.irsSemRetencao, definicoesExportTipoReciboVerde.contaIRS, 'D', ref numLinha); WintouchExportarLinha(fileStream, reciboVerde, definicoesExportTipoReciboVerde, reciboVerde.valores.importanciaRecebida, definicoesExportTipoReciboVerde.contaValRecebida, 'D', ref numLinha); return(true); }
public DefinicoesExportTipoDoc() { defExportTipoPagamento = new DefinicoesExportTipoReciboVerde(); defExportTipoAdiantamento = new DefinicoesExportTipoReciboVerde(); defExportTipoAdiantamentoPagamento = new DefinicoesExportTipoReciboVerde(); }
/// <summary> /// Escreve uma linha no ficheiro do wintouch, caso o valor não seja zero, na conta especificada /// Return: Devolve se escreveu alguma coisa ou não /// </summary> private static bool WintouchExportarLinha(StreamWriter fileStream, ReciboVerde reciboVerde, DefinicoesExportTipoReciboVerde definicoesExportTipoReciboVerde, decimal valor, string codigoConta, char natureza, ref int numLinha) { if (valor == 0) { return(false); //Se o valor for 0 não escreve a linha } string codigoDiario = definicoesExportTipoReciboVerde.diario; string codigoDocumento = definicoesExportTipoReciboVerde.tipoDoc; int serie = 1; string descricao = reciboVerde.descricao.Length > 50 ? reciboVerde.descricao.Substring(0, 50) : reciboVerde.descricao; int dia = reciboVerde.dataEmissao.Day; int mes = reciboVerde.dataEmissao.Month; string contibuinte; string nomeEntidade; if (reciboVerde.tipo == TipoReciboVerdePrestOUAdquir.Adquirente) { contibuinte = reciboVerde.nifTransmitente; nomeEntidade = reciboVerde.nomeTrasmitente; } else { contibuinte = reciboVerde.nifAdquirente; nomeEntidade = reciboVerde.nomeAdquirente; } nomeEntidade = nomeEntidade.Length > 50 ? nomeEntidade.Substring(0, 50) : nomeEntidade; int anulado = reciboVerde.anulado ? 1 : 0; string valorStr = String.Format("{0,18:F2}", valor).Replace(",", "."); // diario serie descric nat dia mes contrib numLinha nomeenti anulado string linha = String.Format("{0,10}{1,20}{2,20}{3,4}{4,10}{5,-20}{6,-50}{7,18}{8,1}{9,2:D2}{10,2:D2}{11,-20}F{12,20}{13,1}{14,5}{15,20}{16,-50}{17,1}", -1, codigoDiario, codigoDocumento, //2 serie, reciboVerde.numDoc, codigoConta, //5 descricao, valorStr, natureza, dia, mes, //10 contibuinte, "", "C", numLinha, "", //14 nomeEntidade, anulado); fileStream.WriteLine(linha); numLinha++; return(true); }