Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

139
Vistas
Verifique si el período de la fecha se superpone a cualquiera de los períodos dados en la matriz

Tengo un módulo para vendedores, donde pueden agregar sus propios gerentes. Estos se mostrarán en ag-grid en la interfaz de usuario. Para agregar administradores, debo seleccionar el administrador, la fecha de inicio del período y la fecha de finalización del período para un administrador determinado. Pero simultáneamente, también necesito verificar el período de cada gerente, que ninguna de las fechas del gerente se superponga entre sí, en función de eso, se decide el estado. Puede haber N cantidad de gerentes para un vendedor, pero solo debe haber un gerente activo para cada vendedor a la vez.

Actualmente estoy enfrentando un problema al comparar las fechas del administrador actual con cada uno de los administradores dados en la matriz.

Decido el estado basado en el siguiente código:

 decideStatus(): string { let status = ''; let currentDate = new Date(); let fromDate = this.salesPersonForm.value.StartDate; let tillDate = this.salesPersonForm.value.EndDate; if(fromDate <= currentDate && (tillDate > currentDate || tillDate == null)) { return status = 'Active' } else if(fromDate > currentDate) { return status = 'Onhold' } else if(tillDate < currentDate) { return status = 'Inactive' } }

Tengo el siguiente código para agregar el administrador a la cuadrícula.

 addManagers(){ if(this.salesPersonForm.value.SalesPerson) { if(this.salesPersonForm.value.StartDate) { if(this.salesPersonForm.value.EndDate == null || (this.salesPersonForm.value.EndDate > this.salesPersonForm.value.StartDate)) { let loggedInUser = userName; let manager = { Name: someName FromDate: this.salesPersonForm.value.StartDate TillDate: this.salesPersonForm.value.EndDate CreatedAt: new Date() CreatedBy: loggedInUser, Status: this.decideStatus() } this.managers.push(manager) } else { return; } } else { return; } } else { return } this.clear(); setTimeout(() => { this.agGridReference.assignData(this.managers) }, 200); }

Caso de uso inactivo: M1 - 01/01/2020 al 31/06/2020 - Inactivo M2 - 08/01/2020 al 31/12/2021 - Inactivo M3 - 01/01/2022 a algún valor futuro - Activo

Si las fechas están en el futuro que la fecha actual, se considerará como en espera.

Caso no válido: M1 - 01/01/2020 al 31/06/2020 - Inactivo M2 - 05/01/2020 al 28/02/2021 - Inactivo M3 - 01/01/2021 al 30/05/2021 - Inactivo

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

De acuerdo, va a insertar un nuevo administrador en la matriz de managers solo si el intervalo del nuevo administrador no se superpone con el intervalo de ningún administrador existente. Por lo tanto, la verificación debe realizarse antes de la this.managers.push(manager) , algo como esto:

  • reemplazando this.managers.push(manager) con: this.compareDates(manager);

  • añadiendo estos dos métodos:

 compareDates(newM) { let overlaps = 0; this.managers.forEach(m => { if ( // first case: // saved manager starts before FromDate // and finishes after FromDate // of new manager: (this.prepareDate(m.FromDate) <= this.prepareDate(newM.FromDate) && this.prepareDate(m.TillDate) >= this.prepareDate(newM.FromDate)) || // second case: // saved manager starts after FromDate // and before the TillDate // of new manager: (this.prepareDate(m.FromDate) >= this.prepareDate(newM.FromDate) && this.prepareDate(m.FromDate) <= this.prepareDate(newM.TillDate)) ) { overlaps++; } }); if (overlaps == 0) { // no overlaps, so push this new manager and do whatever else needs to be done this.managers.push(newM); console.log('Welcome, new manager!'); } else { // there is at least 1 overlap, so do something else // like: return with error message console.log("This manager's interval overlaps with interval(s) of " + overlaps +' other manager(s)!' ); } }

Y el método auxiliar para devolver la marca de tiempo de cada fecha en el método anterior:

 prepareDate(date) { let parts = date.split('/'); return Date.parse(parts[2] + '/' + parts[1] + '/' + parts[0]); }

Para verlo en acción: https://stackblitz.com/edit/angular-ivy-j9ldef

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda