/// <summary> /// Parsea una iteracion del template /// </summary> /// <param name="tmplt">El texto del template a procesar</param> /// <param name="repeat">Numero de iteracion</param> private void ParseTemplate(string tmplt, int repeat) { var startIndex = tmplt.IndexOf("((("); var endIndex = tmplt.IndexOf(")))"); if (startIndex == -1 || endIndex == -1) { OnLiteral(tmplt); return; } var text = tmplt.Substring(0, startIndex); var tag = tmplt.Substring(startIndex, endIndex - startIndex + 3); tmplt = tmplt.Substring(endIndex + 3); OnLiteral(text); var style = styles.ContainsKey(tag) ? styles[tag] : null; switch (tag) { case CommonTags.EMPRESA: OnBase(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_PARENTI01, style)); break; case CommonTags.LINEA: OnPlanta(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_PARENTI02, style)); break; case CommonTags.COCHE: OnVehiculo(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_PARENTI03, style)); break; case CommonTags.TRANSPORTISTA: OnTransportista(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_PARENTI07, style)); break; case CommonTags.CHOFER: OnEmpleado(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_PARENTI09, style)); break; case CommonTags.EQUIPO: OnEquipo(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_PARENTI19, style)); break; case CommonTags.CODIGO: OnCodigo(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_CODIGO, style)); break; case CommonTags.DESCRIPCION: OnDescripcion(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_DESCRIPCION, style)); break; case CommonTags.DATE: OnFecha(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_FECHA, style)); break; case CommonTags.PRESENTACION: OnPresentacion(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_PRESENTACION, style)); break; case CommonTags.VENCIMIENTO: OnVencimiento(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_VENCIMIENTO, style)); break; case CommonTags.CIERRE: OnCierre(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_CIERRE, style)); break; case CommonTags.ESTADO: OnEstado(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_ESTADO, style)); break; case CommonTags.BEGIN_REPEAT: var endRepeaterIndex = tmplt.IndexOf(CommonTags.END_REPEAT); var repeated = tmplt.Substring(0, endRepeaterIndex); var subStartIndex = tmplt.IndexOf("((("); var subEndIndex = tmplt.IndexOf(")))"); var firstSubTag = tmplt.Substring(subStartIndex, subEndIndex - subStartIndex + 3); var parametro = TipoDocumentoHelper.GetByName(firstSubTag); if (parametro == null) { break; } int times = parametro.Repeticion; if (times == 0) { times = 1; } for (var i = 0; i < times; i++) { ParseTemplate(repeated, i); } tmplt = tmplt.Substring(endRepeaterIndex + CommonTags.END_REPEAT.Length); break; default: var parametroD = TipoDocumentoHelper.GetByName(tag); if (parametroD != null) { var id = TipoDocumentoHelper.GetControlName(parametroD); if (repeat > -1) { id += repeat; } OnParametro(new DocumentoParametroEventArgs(id, style, parametroD)); } break; } ParseTemplate(tmplt, repeat); }
/// <summary> /// Parsea el documento /// </summary> public override void Parse() { OnLiteral(string.Concat("<table style='padding: 10px; width:80%; border: solid 1px #DDDDDD;height: auto;' class='Grid_Header' align='center'><tr><td><div style='font-size: 20px; font-weight: bold; text-align: center;'>", TipoDocumentoHelper.TipoDocumento.Nombre)); OnLiteral(string.Concat("<div style='font-size: 12px; text-align: center;'>", TipoDocumentoHelper.TipoDocumento.Descripcion, "</div></div></td></tr></table>")); OnLiteral("<br/><table style='padding: 10px; width:80%; border: solid 1px #DDDDDD;background-color: #E7E7E7;' align='center'>"); OnLiteral("<tr><td>Distrito<td><td>"); OnBase(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_PARENTI01, string.Empty)); OnLiteral("</td><td>"); if (TipoDocumentoHelper.TipoDocumento.AplicarATransportista) { OnLiteral("Transportista"); } OnLiteral("</td><td>"); if (TipoDocumentoHelper.TipoDocumento.AplicarATransportista) { OnTransportista(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_PARENTI07, string.Empty)); } OnLiteral("</td></tr>"); OnLiteral("<tr><td>Base<td><td>"); OnPlanta(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_PARENTI02, string.Empty)); OnLiteral("</td><td>"); if (TipoDocumentoHelper.TipoDocumento.AplicarAVehiculo) { OnLiteral("Vehículo"); } OnLiteral("</td><td>"); if (TipoDocumentoHelper.TipoDocumento.AplicarAVehiculo) { OnVehiculo(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_PARENTI03, string.Empty)); } OnLiteral("</td></tr>"); OnLiteral("<tr><td>Código<td><td>"); OnCodigo(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_CODIGO, string.Empty)); OnLiteral("</td><td>"); if (TipoDocumentoHelper.TipoDocumento.AplicarAEmpleado) { OnLiteral("Empleado"); } OnLiteral("</td><td>"); if (TipoDocumentoHelper.TipoDocumento.AplicarAEmpleado) { OnEmpleado(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_PARENTI09, string.Empty)); } OnLiteral("</td></tr>"); OnLiteral("<tr><td>Descripción<td><td>"); OnDescripcion(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_DESCRIPCION, string.Empty)); OnLiteral("</td><td>"); if (TipoDocumentoHelper.TipoDocumento.AplicarAEquipo) { OnLiteral("Equipo"); } OnLiteral("</td><td>"); if (TipoDocumentoHelper.TipoDocumento.AplicarAEquipo) { OnEquipo(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_PARENTI19, string.Empty)); } OnLiteral("</td></tr>"); OnLiteral("<tr><td>Fecha<td><td>"); OnFecha(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_FECHA, string.Empty)); OnLiteral("</td><td></td><td></td></tr>"); OnLiteral("<tr><td>Presentación<td><td>"); OnPresentacion(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_PRESENTACION, string.Empty)); OnLiteral("</td><td></td><td></td></tr>"); OnLiteral("<tr><td>Vencimiento<td><td>"); OnVencimiento(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_VENCIMIENTO, string.Empty)); OnLiteral("</td><td></td><td></td></tr>"); OnLiteral("<tr><td>Cierre<td><td>"); OnCierre(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_CIERRE, string.Empty)); OnLiteral("</td><td></td><td></td></tr>"); OnLiteral("<tr><td>Estado<td><td>"); OnEstado(new DocumentoParametroEventArgs(TipoDocumentoHelper.CONTROL_NAME_ESTADO, string.Empty)); OnLiteral("</td><td></td><td></td></tr>"); OnLiteral("</table>"); OnLiteral("<br />"); var parametros = TipoDocumentoHelper.GetParametros(); OnLiteral("<table style='padding: 10px; width:80%;border: solid 1px #DDDDDD;background-color: #EEEEEE;' align='center'>"); var repetidos = new List <TipoDocumentoParametro>(); var lastOrder = -1; var repeating = false; foreach (var parametro in parametros) { var order = (int)Math.Floor(parametro.Orden); if (repeating && lastOrder != order) { OnLiteral("<tr><td colspan='2'><br/><table border='1' align='center' cellspacing='0' cellpadding='2' style='text-align: center;'>"); int repeatTimes = repetidos[0].Repeticion; for (short i = -1; i < repeatTimes; i++) { OnLiteral("<tr>"); foreach (var repetido in repetidos) { OnLiteral("<td>"); if (i == -1) { OnLiteral(repetido.Nombre); } else { var id = TipoDocumentoHelper.GetControlName(repetido, i); OnParametro(new DocumentoParametroEventArgs(id, "width: 100px", repetido)); } OnLiteral("</td>"); } OnLiteral("</tr>"); } OnLiteral("</table><br/></td></tr>"); repetidos.Clear(); } if (parametro.Repeticion == 0 || parametro.Repeticion == 1) { var id = TipoDocumentoHelper.GetControlName(parametro); OnLiteral(string.Concat("<tr><td>", parametro.Nombre, "</td><td>")); OnParametro(new DocumentoParametroEventArgs(id, string.Empty, parametro)); OnLiteral("</td></tr>"); } else { repetidos.Add(parametro); } lastOrder = order; repeating = parametro.Repeticion != 1; } if (repeating) { OnLiteral("<tr><td colspan='2'><table>"); int repeatTimes = repetidos[0].Repeticion; for (short i = -1; i < repeatTimes; i++) { OnLiteral("<tr>"); foreach (var repetido in repetidos) { OnLiteral("<td>"); if (i == -1) { OnLiteral(repetido.Nombre); } else { var id = TipoDocumentoHelper.GetControlName(repetido, i); OnParametro(new DocumentoParametroEventArgs(id, string.Empty, repetido)); } OnLiteral("</td>"); } OnLiteral("</tr>"); } OnLiteral("</table></td></tr>"); repetidos.Clear(); } OnLiteral("</table>"); }