コード例 #1
0
        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)
                {
                }
            }
        }