示例#1
0
        public CommandStatus Handle(AsistenciaUpdateCommand command)
        {
            AsistenciaUpdateData           cmdData    = new AsistenciaUpdateData();
            AsistenciaUpdateCommandHandler cmdHandler = new AsistenciaUpdateCommandHandler(cmdData);

            return(cmdHandler.Handle(command));
        }
示例#2
0
        static void WriteDataJefeGrupo(IMessageHandling proxy)
        {
            // I Parte inicialmente no hay incidencias, se crean 4 nuevas en las asistencias guardadas

            //_asist01.IncidenciaCausaIncidencia = 2;
            //_asist01.IncidenciaObservacion = "Primera Incidencia adicionada.";

            //_asist02.IncidenciaCausaIncidencia = 4;
            //_asist02.IncidenciaObservacion = "Segunda Incidencia adicionada.";

            //_asist03.IncidenciaCausaIncidencia = 7;
            //_asist03.IncidenciaObservacion = "Tercera Incidencia adicionada.";

            //_asist04.IncidenciaCausaIncidencia = 9;
            //_asist04.IncidenciaObservacion = "Cuarta Incidencia adicionada.";



            // II Parte Ya existen incidencias, se modifican
            // SE borra la primera y se actualizan 2da y tercera
            //_asist01.IncidenciaCausaIncidencia = 0;

            //_asist02.IncidenciaCausaIncidencia = 2;
            //_asist02.IncidenciaObservacion = "Segunda Incidencia MODIFICADA 3.";

            ////_asist03.IncidenciaCausaIncidencia = 1;
            ////_asist03.IncidenciaObservacion = "Tercera Incidencia MODIFICADA.";

            //_asistencias = new Collection<Asistencia>();
            //_asistencias.Add(_asist01);
            //_asistencias.Add(_asist02);


            // III Parte Se crea de nuevo la primera
            _asist01.IncidenciaCausaId     = 2;
            _asist01.IncidenciaObservacion = "Primera Incidencia adicionada.";


            // Comando de actualizacion
            AsistenciaUpdateCommand asistCmd = new AsistenciaUpdateCommand(_asistencias, _incidencias);
            var status = proxy.Handle(asistCmd);

            bool Success = status.GetType() == typeof(Success);

            if (Success)
            {
                Console.WriteLine("Comando Ejecutado con éxito.");
            }
            else
            {
                Console.WriteLine("Comando fallido. Error: " + (status as Failure).Errormessage);
            }
        }
示例#3
0
        public void In_AsistenciaUpdateCommand(AsistenciaUpdateCommand command)
        {
            try
            {
                AsistenciaUpdateData           cmdData    = new AsistenciaUpdateData();
                AsistenciaUpdateCommandHandler cmdHandler = new AsistenciaUpdateCommandHandler(cmdData);

                Out_AsistenciaUpdateCommandResult(cmdHandler.Handle(command));
            }
            catch (Exception)
            {
                throw;
            }
        }
示例#4
0
        /*
         * internal static void AsignarIncidencia()
         * {
         *  // mostrar form modal
         *  _incidAsignForm.EditMode = UserRoleEnum.JefeDepartamento;
         *  var ret = _incidAsignForm.ShowDialog(_editForm);
         *
         *  // actualizar valores
         *  if (ret != DialogResult.OK)
         *      return;
         *
         *  string obs = _incidAsignForm.tbObserv.Text;
         *  string causaDesc = _incidAsignForm.cmbCausas.Text;
         *  int causaId = (int) _incidAsignForm.cmbCausas.SelectedValue;
         *
         *  // crear nueva incidencia
         *  Incidencia inc = new Incidencia();
         *  inc.CausaId = causaId;
         *  inc.Observacion = obs;
         *  inc.State = EntityState.Added;
         *
         *  //Asistencia data;
         *  DataGridViewRow row = _editForm.dgvAsistencia.SelectedRows[0];
         *  Asistencia asist = (Asistencia)row.DataBoundItem;
         *
         *  asist.IncidenciaRef = inc;
         *  asist.IncidenciaObservacion = obs;
         *  asist.IncidenciaCausaId = causaId;
         *  asist.IncidenciaCausaDesc = causaDesc;
         *  asist.State = EntityState.Modified;
         *
         *  // Existe alternativa de usar BindingList<T>
         *  bdsAsistencias.ResetBindings(false);
         *
         * }
         *
         * internal static void AsignarIncidenciaGrupo()
         * {
         *  // pasar datos a form   bdsTodosDepartamentos
         *  _incidAsignForm.chlbSelEmpleado.DataSource = bdsSelectEmpleados;
         *
         *  // mostrar form modal
         *  _incidAsignForm.EditMode = UserRoleEnum.Supervisor;
         *  var ret = _incidAsignForm.ShowDialog(_editForm);
         *
         *  // actualizar valores
         *  if (ret != DialogResult.OK)
         *      return;
         *
         *  string obs = _incidAsignForm.tbObserv.Text;
         *  string causaDesc = _incidAsignForm.cmbCausas.Text;
         *  int causaId = (int)_incidAsignForm.cmbCausas.SelectedValue;
         *
         *  // crear nueva incidencia
         *  Incidencia newInc = new Incidencia();
         *  newInc.CausaId = causaId;
         *  newInc.Observacion = obs;
         *  newInc.State = EntityState.Added;
         *
         *  DataGridViewRow row = _editForm.dgvAsistencia.SelectedRows[0];
         *  Asistencia data = (Asistencia)row.DataBoundItem;
         *
         *  // obtener clave fecha de Asistencia
         *  //data.FechaId      bdsAsistencias   bdsSelectEmpleados
         *
         *  // para cada empleado seleccoinado en lista
         *  // buscar asistencias por clave fecha
         *  // incorporar incidencia
         *
         *  foreach (var empl in _incidAsignForm.chlbSelEmpleado.CheckedItems)
         *  {
         *      var colAsist = (empl as Empleado).Asistencias.Where(asist => asist.FechaId == data.FechaId);
         *
         *      foreach (var asist in colAsist)
         *      {
         *          asist.IncidenciaRef = newInc;
         *          asist.IncidenciaObservacion = obs;
         *          asist.IncidenciaCausaId = causaId;
         *          asist.IncidenciaCausaDesc = causaDesc;
         *          asist.State = EntityState.Modified;
         *      }
         *  }
         *
         *  bdsAsistencias.ResetBindings(false);
         * }
         *
         * internal static void  EliminarIncidencia()
         * {
         *  Asistencia data;
         *  Incidencia inc;
         *
         *  foreach (DataGridViewRow row in _editForm.dgvAsistencia.SelectedRows)
         *  {
         *      data = (Asistencia)row.DataBoundItem;
         *
         *      if (data.IncidenciaRef != null)
         *      {
         *          inc = data.IncidenciaRef;
         *          // Marcar para eliminar objeto Incidencia.
         *          inc.State = EntityState.Deleted;
         *
         *          // Almacenar ref en coleccion de actualizacion
         *          colIncidencias.Add(inc);
         *
         *          // Marcar objeto Asistencia para actualizacion.
         *          // Hacer cero Id de referencia a Incidencia
         *          data.IncidenciaId = 0;
         *          data.State = EntityState.Modified;
         *          // Borrar campos.
         *          data.IncidenciaCausaId = 0;
         *          data.IncidenciaObservacion = string.Empty;
         *          // Refrescar datos en lista.
         *          bdsAsistencias.ResetBindings(false);
         *      }
         *  }
         * }
         */
        #endregion

        internal static void ActualizarAsistencias()
        {
            const string methodName = "ActualizarAsistencias";


            try
            {
                Log.WriteEntry(ClassName, methodName, TraceEventType.Information, "Ejecutando Actualizar Asistencias.");

                Collection <Asistencia> colAsist     = new Collection <Asistencia>();
                Collection <Empleado>   colEmpleados = bdsTodosEmpleados.DataSource as Collection <Empleado>;

                // implementacion sin LINQ
                foreach (var empl in colEmpleados)
                {
                    foreach (var asi in empl.Asistencias)
                    {
                        colAsist.Add(asi);
                    }
                }

                // Seleccionando solo las que se modificaron.
                var modAsist = colAsist.Where(asi => asi.State != EntityState.Unchanged);

                colAsist = new Collection <Asistencia>(modAsist.ToArray());

                // Comando de actualizacion
                AsistenciaUpdateCommand asistCmd = new AsistenciaUpdateCommand(colAsist, colIncidencias);
                var status = _proxy.Handle(asistCmd);

                bool Success = status.GetType() == typeof(Success);

                if (Success)
                {
                    colIncidencias = new Collection <Incidencia>();
                    Log.WriteEntry(ClassName, methodName, TraceEventType.Information, "Actualizar Asistencias terminado con éxito.");
                    MessageBox.Show("Actualizar Asistencias terminado con éxito.");
                }
                else
                {
                    Log.WriteEntry(ClassName, methodName, TraceEventType.Error, string.Format("Comando fallido. Error: {0}", (status as Failure).Errormessage));
                    MessageBox.Show("Actualizar Asistencias terminado con Error.");
                }
            }
            catch (Exception ex)
            {
                Log.WriteEntry(ClassName, methodName, TraceEventType.Error, string.Format("Error: {0}", ex.Message));
            }
        }
示例#5
0
        /// <summary>
        /// Realiza la salva de modificaciones de Asistencia al servidor de forma asíncrona.
        /// </summary>
        internal static bool ActualizarAsistencias()
        {
            const string methodName = "ActualizarAsistencias";

            try
            {
                Log.WriteEntry(ClassName, methodName, TraceEventType.Information, "Ejecutando Actualizar Asistencias.");

                EsperaPorTarea(TipoEspera.Actualizacion);

                List <Asistencia>     concat            = new List <Asistencia>();
                Collection <Empleado> colTodosEmpleados = bdsTodosEmpleados.DataSource as Collection <Empleado>;

                // Crear lista de asistencias modificadas de todos los empleados
                var colAsistencias = colTodosEmpleados.Select(e => e.Asistencias);

                foreach (var col in colAsistencias)
                {
                    concat = concat.Concat(col.Where(asi => asi.State != EntityState.Unchanged).ToList()).ToList();
                }

                var updCol = new Collection <Asistencia>(concat.ToArray());

                // Comando de actualizacion
                AsistenciaUpdateCommand asistCmd = new AsistenciaUpdateCommand(updCol, colIncidencias);
                // Realizar la consulta y termina la ejecucion secuencial
                // Se continua al recibir respuesta del server en In_AsistenciaUpdateCommandResult

                Out_AsistenciaUpdateCommand(asistCmd);
                return(true);
            }
            catch (Exception ex)
            {
                Log.WriteEntry(ClassName, methodName, TraceEventType.Error, string.Format("Error: {0}", ex.Message));
                return(false);
            }
        }
        // nueva implementacion en base a la original

        /*  Comprobar todos los casos     *************  IncidenciaId
         *
         * Para gestionar Incidencias y Asistencias
         *
         * La Entidad Asistencia tiene una Propiedad CausaIncidenciaId que indica el tipo de Incidencia, redundante.
         * y una propiedad IncidenciaId que es PK id de la Incidencia.
         *
         * La propiedad IncidenciaId se crea en el servidor (al INSERTar nueva Incidencia) y no se modifica en GUI
         * Las propiedades CausaIncidenciaId se puede  modificar en la GUI.
         *
         * Propiedad		    Prop Referencia		Accion
         * CausaIncidenciaId    IncidenciaId
         * 0				    0			Ignorar, no hay cambios
         * 0				    Not 0		Delete, se ha eliminado la Incidencia de la Asistencia. Actualizar Asistencia, Eliminar Incidencia (obtener ent por referencia y eliminar de la db por Id)
         * Not 0			    0			Insert, se ha añadido la Incidencia a la Asistencia.  Crear nueva ent Incidencia, insertar (se actualiza Id). Copiar id en propiedad de Asistencia y Actualizar Asistencia en db.
         * Not 0			    Not 0       Posible Update, se puede hacer update o comparar valores
         */

/*
 *      public CommandStatus HandleY(AsistenciaUpdateCommand command)
 *      {
 *          try
 *          {
 *              int causa;
 *              int incidenciaRef;
 *              bool esPropiedadCero, esReferenciaNull;
 *
 *              Collection<Asistencia> colAssist = new Collection<Asistencia>();
 *              Collection<Incidencia> colIncid = new Collection<Incidencia>();
 *
 *
 *              // recorrer las asistencias y comparar propiedad y referencia
 *
 *              foreach (var asistencia in command.Asistencias)
 *              {
 *                  causa = asistencia.IncidenciaCausaIncidencia;
 *                  incidenciaRef = asistencia.IncidenciaId;
 *
 *                  esPropiedadCero = (causa == 0);
 *                  esReferenciaNull = (incidenciaRef == 0);
 *
 *                  // Sin cambios, ignorar y continuar ciclo
 *                  if (esPropiedadCero && esReferenciaNull)
 *                      continue;
 *
 *                  // Eliminar Incidencia
 *                  if (esPropiedadCero && !esReferenciaNull)
 *                  {
 *                      asistencia.IncidenciaId = 0;
 *                      asistencia.State = EntityState.Modified;
 *                      colAssist.Add(asistencia);
 *                      // primero actualizar entidad asistencia para no violar foreign key constraint
 *                      // al hacer cero la prop, se escribe DbNull en record
 *
 *                      //incidenciaRef.State = EntityState.Deleted;
 *                      //colIncid.Add(incidenciaRef);
 *                  }
 *
 *                  // Insertar Nueva Incidencia
 *                  if (!esPropiedadCero && esReferenciaNull)
 *                  {
 *                      // Se crea la entidad y se inserta el registro en DB primero,
 *                      //para obtenr su Id y actualizar Asistencia relacionada
 *                      Incidencia newInc = _data.InsertarNuevaIncidencia(asistencia.IncidenciaCausaIncidencia, asistencia.IncidenciaObservacion);
 *
 *                      asistencia.IncidenciaId = newInc.Id;
 *                      asistencia.State = EntityState.Modified;
 *                      colAssist.Add(asistencia);
 *                  }
 *
 *                  // Posible actualizacion
 *                  if (!esPropiedadCero && !esReferenciaNull)
 *                  {
 *                      bool cambioCausa, cambioObs;
 *
 *                      //cambioCausa = (asistencia.IncidenciaCausaIncidencia != incidenciaRef.CausaId);
 *                      //cambioObs = (asistencia.IncidenciaObservacion != incidenciaRef.Observacion);
 *
 *                      if (cambioCausa || cambioObs)
 *                      {
 *                          Console.WriteLine("Coinciden Asist Incidencia Id y Referencia Id: " + (asistencia.IncidenciaId == incidenciaRef.Id));
 *                          // actualizando propiedades de incidencia con valores en Asistencia modificados en GUI
 *                          incidenciaRef.CausaId = asistencia.IncidenciaCausaIncidencia;
 *                          incidenciaRef.Observacion = asistencia.IncidenciaObservacion;
 *
 *                          incidenciaRef.State = EntityState.Modified;
 *                          colIncid.Add(incidenciaRef);
 *                      }
 *                  }
 *              }
 *
 *
 *              // fin ciclos, escribir colecciones
 *              bool ret = _data.ActualizarAsistencias(colAssist);
 *              if (!ret)
 *                  return new Failure("Error actualizando Asistencias");
 *
 *
 *              ret = _data.ActualizarIncidencias(colIncid);
 *              if (!ret)
 *                  return new Failure("Error actualizando Incidencias");
 *
 *
 *              return new Success();
 *          }
 *          catch (Exception ex)
 *          {
 *              // Log, Notify
 *              return new Failure(ex.Message);
 *          }
 *
 *
 *
 *      }
 */

        // nueva implementacion
        public CommandStatus Handle(AsistenciaUpdateCommand command)
        {
            bool ret;

            try
            {
                // Iniciar transaccion
                //_data.BeginTransaction();

                Collection <Incidencia> colIncid;
                Collection <Asistencia> colAsist;


                // Procesar Incidencias Insertadas Crear nuevas
                var IncidInserted      = command.Asistencias.Select(ast => ast.IncidenciaRef).Where(inci => inci != null && inci.State == EntityState.Added);
                var AsistIncidInserted = command.Asistencias.Select(ast => ast).Where(ast => ast.IncidenciaRef != null && ast.IncidenciaRef.State == EntityState.Added);

                colIncid = new Collection <Incidencia>(IncidInserted.ToArray());
                colAsist = new Collection <Asistencia>(AsistIncidInserted.ToArray());

                // Aqui las nuevas incidencias reciben Id
                ret = _data.ActualizarIncidencias(colIncid);
                if (!ret)
                {
                    return(new Failure("Error actualizando Incidencias Insert"));
                }

                foreach (var asi in colAsist)
                {
                    asi.IncidenciaId = asi.IncidenciaRef.Id;
                }

                // Actualizar Asistencias, se guarda la Inc Id recien creada
                ret = _data.ActualizarAsistencias(colAsist);
                if (!ret)
                {
                    return(new Failure("Error actualizando Asistencias Incidencias Insert"));
                }

                // No es necesario IMplementar Update para Incidencias


                // Procesar Asistencias con Incidencias Eliminadas


                // Obtener lista de Asistencias con referencia a Incidencia No NULL y Incidencia estado Deleted
                var AsistIncDeleted = command.Asistencias.Select(ast => ast).Where(ast => ast.IncidenciaRef != null && ast.IncidenciaRef.State == EntityState.Deleted);

                //colIncid = new Collection<Incidencia>(IncidDeleted.ToArray());
                colAsist = new Collection <Asistencia>(AsistIncDeleted.ToArray());


                // Actualizar Asistencias, se borra FK
                ret = _data.ActualizarAsistencias(colAsist);
                if (!ret)
                {
                    return(new Failure("Error actualizando Asistencias Inc Delete"));
                }

                // Actualizar Incidencias, se borra si no hay mas ref a PK
                //ret = _data.ActualizarIncidencias(command.Incidencias);
                //if (!ret)
                //    return new Failure("Error actualizando Incidencias Delete");

                // Ciclo para cada inc marcada borrada
                colIncid = new Collection <Incidencia>();
                //  comprobar asis.id inc.id
                foreach (var inc in command.Incidencias)
                {
                    if (_data.ComprobarAsistenciaFK_Incidencia(inc.Id))
                    {
                        colIncid.Add(inc);
                    }
                }


                ret = _data.ActualizarIncidencias(colIncid);
                if (!ret)
                {
                    return(new Failure("Error actualizando Incidencias Delete"));
                }

                // Terminar transaccion
                //_data.CommitTransaction();

                return(new Success());
            }
            catch (Exception ex)
            {
                // Cancelar transaccion
                //_data.RollbackTransaction();

                //Log, Notify...
                return(new Failure(ex.Message));
            }
        }