public Boolean GeneraContrato(ref String Mensaje) { Application wordApp = new Application(); Document wordDoc = new Document(); try { Object oMissing = System.Reflection.Missing.Value; _personal = _NegPer.BuscaPersonalPorRut(_per.Rut); _personal.FechaIngreso = _per.FechaIngreso; _personal.FechaVencimiento = _per.FechaVencimiento; _personal.Afp_Id = _per.Afp_Id; _personal.Isapre_Id = _per.Isapre_Id; _personal.EstructuraSueldo_Id = _per.EstructuraSueldo_Id; _personal.CentroCosto_Id = _per.CentroCosto_Id; _personal.TipoContrato = _per.TipoContrato; Boolean _bol = false; _NegPer.GuardaPersonal(_usuarioSesion, _personal, ref _bol); //Assembly thisAssembly; //thisAssembly = Assembly.GetExecutingAssembly(); //Stream someStream; //someStream = thisAssembly.GetManifestResourceStream("Negocio.WordTemplate.Contrato_Template.dotx"); //Assembly _assembly = Assembly.GetExecutingAssembly(); //// Object oTemplatePath = _assembly.GetManifestResourceStream("WordTemplate\\Contrato_Template.dotx"); //Object oTemplatePath = _assembly.GetManifestResourceStream("Negocio.WordTemplate.Contrato_Template.dotx"); //Object oTemplatePath2 = _assembly.GetManifestResourceStream("WordTemplate\\Contrato_Template.dotx"); Object oTemplatePath = String.Concat(RutaArchivosMss, "\\Contrato_Template.dotx"); wordDoc = wordApp.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing); foreach (Field myMergeField in wordDoc.Fields) { Range rngFieldCode = myMergeField.Code; String fieldText = rngFieldCode.Text; if (fieldText.StartsWith(" MERGEFIELD")) { Int32 endMerge = fieldText.IndexOf("\\"); Int32 fieldNameLength = fieldText.Length - endMerge; String fieldName = fieldText.Substring(11, endMerge - 11); switch (fieldName.Trim()) { case "FechaContrato": myMergeField.Select(); wordApp.Selection.TypeText(DateTime.Now.ToLongDateString()); break; case "Nombre": myMergeField.Select(); wordApp.Selection.TypeText(PrimeraMayuscula(String.Concat(_personal.Nombres, " ", _personal.ApellidoPaterno, " ", _personal.ApellidoMaterno))); break; case "Rut": myMergeField.Select(); wordApp.Selection.TypeText(String.Concat(FormatNumero(_personal.Rut.ToString()), "-", _personal.Dv)); break; case "EstadoCivil": myMergeField.Select(); if (String.Equals(_personal.EstadoCivil, String.Empty)) { wordApp.Selection.TypeText(" "); } else { wordApp.Selection.TypeText(_personal.EstadoCivil); } break; case "FechaNacimiento": myMergeField.Select(); wordApp.Selection.TypeText(_personal.FechaNacimiento.Value.ToLongDateString()); break; case "Dirección": myMergeField.Select(); wordApp.Selection.TypeText(_personal.Direccion); break; case "Comuna": myMergeField.Select(); try { if (_personal.Comunas.comuna_nombre == null) { Mensaje = "Personal no tiene Comuna asociada. Favor ingresarla y volver a intentar."; return(false); } wordApp.Selection.TypeText(_personal.Comunas.comuna_nombre); } catch (Exception) { Mensaje = "Personal no tiene Comuna asociada. Favor ingresarla y volver a intentar."; return(false); } break; case "Telefono": myMergeField.Select(); if (_personal.TelCelular != string.Empty && _personal.TelFijo != string.Empty) { wordApp.Selection.TypeText(String.Concat("Teléfono ", _personal.TelFijo, " y Teléfono Celular ", _personal.TelCelular)); } else { if (_personal.TelCelular != string.Empty) { wordApp.Selection.TypeText(String.Concat("Teléfono Celular ", _personal.TelCelular)); } else { wordApp.Selection.TypeText(String.Concat("Teléfono ", _personal.TelFijo)); } } break; case "SueldoBaseNumero": myMergeField.Select(); wordApp.Selection.TypeText(FormatNumero(_personal.EstructuraSueldos.SueldoBase.ToString())); break; case "SueldoBaseLetras": myMergeField.Select(); wordApp.Selection.TypeText(PrimeraMayuscula(enletras(_personal.EstructuraSueldos.SueldoBase.ToString()))); break; case "GratificacionNumero": myMergeField.Select(); wordApp.Selection.TypeText(FormatNumero(_personal.EstructuraSueldos.Gratificacion.ToString())); break; case "GratificacionLetras": myMergeField.Select(); wordApp.Selection.TypeText(PrimeraMayuscula(enletras(_personal.EstructuraSueldos.Gratificacion.ToString()))); break; case "AsistenciaNumero": myMergeField.Select(); wordApp.Selection.TypeText(FormatNumero(_personal.EstructuraSueldos.BonoAsistencia.ToString())); break; case "AsistenciaLetras": myMergeField.Select(); wordApp.Selection.TypeText(PrimeraMayuscula(enletras(_personal.EstructuraSueldos.BonoAsistencia.ToString()))); break; case "ColacionNumero": myMergeField.Select(); wordApp.Selection.TypeText(FormatNumero(_personal.EstructuraSueldos.Colacion.ToString())); break; case "ColacionLetras": myMergeField.Select(); wordApp.Selection.TypeText(PrimeraMayuscula(enletras(_personal.EstructuraSueldos.Colacion.ToString()))); break; case "MovilizacionNumero": myMergeField.Select(); wordApp.Selection.TypeText(FormatNumero(_personal.EstructuraSueldos.Movilizacion.ToString())); break; case "MovilizacionLetras": myMergeField.Select(); wordApp.Selection.TypeText(PrimeraMayuscula(enletras(_personal.EstructuraSueldos.Movilizacion.ToString()))); break; case "ProduccionNumero": myMergeField.Select(); if (_personal.EstructuraSueldos.BonoProduccion != 0) { wordApp.Selection.TypeText(String.Concat(", bono de producción de $", FormatNumero(_personal.EstructuraSueldos.BonoProduccion.ToString()))); } break; case "ProduccionLetras": myMergeField.Select(); if (_personal.EstructuraSueldos.BonoProduccion != 0) { wordApp.Selection.TypeText(String.Concat("(", PrimeraMayuscula(enletras(_personal.EstructuraSueldos.BonoProduccion.ToString())), "chilenos)")); } break; case "BonoTurno": myMergeField.Select(); if (_personal.EstructuraSueldos.BonoTurno != 0) { wordApp.Selection.TypeText(String.Concat("y un bono cargo mientras ejerza la labor de encargado de turno de $", FormatNumero(_personal.EstructuraSueldos.BonoTurno.ToString()))); } break; case "FechaVencimiento": myMergeField.Select(); if (_personal.TipoContrato.Equals("INDEFINIDO")) { wordApp.Selection.TypeText("Indefinida"); } else { wordApp.Selection.TypeText(String.Concat("hasta el ", _personal.FechaVencimiento.Value.ToLongDateString())); } break; case "FechaInicio": myMergeField.Select(); wordApp.Selection.TypeText(_personal.FechaIngreso.Value.ToLongDateString()); break; case "AFP": myMergeField.Select(); try { if (_personal.Afp.Afp_Nombre == null) { Mensaje = "Personal no tiene Afp asociada. Favor ingresarla y volver a intentar."; return(false); } wordApp.Selection.TypeText(_personal.Afp.Afp_Nombre); } catch (Exception) { Mensaje = "Personal no tiene Afp asociada. Favor ingresarla y volver a intentar."; return(false); } break; case "Isapre": myMergeField.Select(); try { if (_personal.Isapres.Isapre_Nombre == null) { Mensaje = "Personal no tiene Isapre asociada. Favor ingresarla y volver a intentar."; return(false); } wordApp.Selection.TypeText(_personal.Isapres.Isapre_Nombre); } catch (Exception) { Mensaje = "Personal no tiene Isapre asociada. Favor ingresarla y volver a intentar."; return(false); } break; case "Desempeño": myMergeField.Select(); try { if (_personal.Usuarios == null) { wordApp.Selection.TypeText("Guardia de Seguridad"); } else { if (_personal.Usuarios.Privilegio_Id == 5) { wordApp.Selection.TypeText("Guardia de Seguridad"); } else { wordApp.Selection.TypeText(_personal.Cargo); } } } catch (Exception) { throw; } break; case "SegundoParrafo": myMergeField.Select(); try { if (_personal.Usuarios == null) { wordApp.Selection.TypeText("Guardia de Seguridad, será el encargado de asistir en la organización y realización de tareas de seguridad del área, patrullar o supervisar las instalaciones para evitar el robo, la violencia, o infracciones contra la empresa contratante, autorizar la entrada y salida de los empleados, visitantes y otras personas con el fin de protegerse contra el Robo y/o Hurto. El guardia de Seguridad es responsable de mantener instalaciones seguras, debe ser capaz de escribir informes sobre las actividades diarias y las irregularidades, tales como daños en los equipos o la propiedad, robos, Hurtos, la presencia de personas no autorizadas o los acontecimientos inusuales, o cualquier otro acontecimiento que revista los caracteres de delito. Un guardia de seguridad debe llamar a la Carabineros o a la Policía, bomberos y/o Ambulancias en casos de emergencia. Cuando un guardia de seguridad se enfrenta a personas no autorizadas que se niegan a abandonar la zona custodiada, deben llamar a la policía para efectuar el procedimiento."); } else { if (_personal.Usuarios.Privilegio_Id == 5) { wordApp.Selection.TypeText("Guardia de Seguridad, será el encargado de asistir en la organización y realización de tareas de seguridad del área, patrullar o supervisar las instalaciones para evitar el robo, la violencia, o infracciones contra la empresa contratante, autorizar la entrada y salida de los empleados, visitantes y otras personas con el fin de protegerse contra el Robo y/o Hurto. El guardia de Seguridad es responsable de mantener instalaciones seguras, debe ser capaz de escribir informes sobre las actividades diarias y las irregularidades, tales como daños en los equipos o la propiedad, robos, Hurtos, la presencia de personas no autorizadas o los acontecimientos inusuales, o cualquier otro acontecimiento que revista los caracteres de delito. Un guardia de seguridad debe llamar a la Carabineros o a la Policía, bomberos y/o Ambulancias en casos de emergencia. Cuando un guardia de seguridad se enfrenta a personas no autorizadas que se niegan a abandonar la zona custodiada, deben llamar a la policía para efectuar el procedimiento."); } else { wordApp.Selection.TypeText(String.Concat(_personal.Cargo, ", ", _SegundoParrafo)); } } } catch (Exception) { throw; } break; case "DireccionInstalacion": myMergeField.Select(); try { wordApp.Selection.TypeText(_DireccionInstalacion); } catch (Exception) { throw; } break; case "AfectoBonoAsistencia": myMergeField.Select(); try { //if (_personal.Usuarios.Privilegio_Id == 5) if (_personal.Cargo.Contains("guardia") || _personal.Cargo.Contains("Guardia") || _personal.Cargo.Contains("GUARDIA")) { wordApp.Selection.TypeText("En el evento que el trabajador tenga un día de inasistencia o un atraso injustificado, se le descontará el 100% del bono de Asistencia y Responsabilidad. Lo anterior sin perjuicio de lo estipulado en el Art. 160, nro. 3 y 4, del Código del Trabajo. El trabajador no tendrá otros beneficios que los que se hagan contar por escrito en el presente contrato."); } } catch (Exception) { throw; } break; case "Anticipo": myMergeField.Select(); try { if (_personal.Cargo.Contains("guardia") || _personal.Cargo.Contains("Guardia") || _personal.Cargo.Contains("GUARDIA")) { wordApp.Selection.TypeText(FormatNumero("60000")); } else { wordApp.Selection.TypeText(FormatNumero(_Anticipo.ToString())); } } catch (Exception) { throw; } break; case "AnticipoLetras": myMergeField.Select(); try { if (_personal.Cargo.Contains("guardia") || _personal.Cargo.Contains("Guardia") || _personal.Cargo.Contains("GUARDIA")) { wordApp.Selection.TypeText(String.Concat("(", PrimeraMayuscula(enletras(FormatNumero("60000"))), " pesos chilenos)")); } else { wordApp.Selection.TypeText(String.Concat("(", PrimeraMayuscula(enletras(FormatNumero(_Anticipo.ToString()))), " pesos chilenos)")); } } catch (Exception) { throw; } break; case "DepositoBanco": myMergeField.Select(); try { //vista Nº 18162030, del Banco Estado. if (_personal.Id_Banco == 19 && _personal.TipoCuenta.ToString().Equals("Cuenta Vista")) { wordApp.Selection.TypeText(String.Concat("Cuenta Rut", " Nº", _personal.NumeroCuenta, ", del", _Bancos.BuscaNombreBanco((int)_personal.Id_Banco))); } else { wordApp.Selection.TypeText(String.Concat(_personal.TipoCuenta, " Nº", _personal.NumeroCuenta, ", del", _Bancos.BuscaNombreBanco((int)_personal.Id_Banco))); } } catch (Exception) { throw; } break; default: break; } } } if (File.Exists(String.Concat(_RutaFinal, "Contrato_", DateTime.Now.ToShortDateString(), "_", _per.Rut, "-", _per.Dv, ".pdf"))) { Mensaje = String.Concat("Contrato a crear '", _RutaFinal, "Contrato_", DateTime.Now.ToShortDateString(), "_", _per.Rut, "-", _per.Dv, ".pdf", "' ya existe en la carpeta destino, favor revisar"); return(false); } Object objSaveAsFile = String.Concat(_RutaFinal, "Contrato_", DateTime.Now.ToShortDateString(), "_", _per.Rut, "-", _per.Dv, ".pdf"); wordDoc.SaveAs2(objSaveAsFile, ref objFileFormat, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); //wordDoc.SaveAs2(String.Concat(_RutaFinal, "Contrato_", DateTime.Now.ToShortDateString(), "_", _per.Rut, "-", _per.Dv, ".doc")); _log.IngresaLog(_usuarioSesion, String.Concat(_usuarioSesion.Usuario_Nombre, " ha generado Contratos de ", _per.Rut, "-", _per.Dv)); return(true); } catch (Exception ex) { throw ex; } finally { try { if (wordDoc != null) { wordDoc.Close(ref objFalse, ref oMissing, ref oMissing); } if (wordApp != null) { wordApp.Quit(ref oMissing, ref oMissing, ref oMissing); } Marshal.ReleaseComObject(wordDoc); Marshal.ReleaseComObject(wordApp); Marshal.ReleaseThreadCache(); wordApp = (Microsoft.Office.Interop.Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application"); wordApp = null; } catch (Exception) { } } }