Come limitare il periodo di tempo a un altro periodo?

0

Per una pianificazione del progetto ho un periodo iniziale, chiamiamolo PPStart-PPEnd .
La pianificazione è associata a un progetto. Questo ha anche un periodo PrjStart-PrjEnd . PrjStart e PrjEnd sono fissi e possono essere non associati, ovvero l'ora di inizio del progetto o l'ora di fine non sono definiti.

PPStart-PPEnd deve essere regolato in modo che le persone possano pianificare le attività solo nel periodo di validità del progetto. Se questo cambia la durata, va bene.
Come faccio a limitare in modo efficiente PPStart-PPEnd a PrjStart-PrjEnd senza dover esaminare tutte le possibili combinazioni?
Forse il primo rilevamento dei periodi di sovrapposizione è un buon inizio?

4 esempi su un asse del tempo ([- = bound, < - = non associato):

Project planning period:
                              [---PPStart-PPEnd---]
Project periods relative to ppp:                              
                                    [---PrjStart-PrjEnd---]   PPStart should be set to PrjStart, PPEnd unchanged
                     [---PrjStart-PrjEnd---]                  PPEnd should be set to PrjEnd, PPStart unchanged
                     [---PrjStart-PrjEnd------------------->  No adjustments
    [---PrjStart-PrjEnd---]                                   PPStart should be set to PrjStart and PPEnd to PrjEnd.

Casi come quello precedente lo rendono complesso.

    
posta Jan Doggen 30.01.2014 - 10:18
fonte

2 risposte

0

Rispondere alla mia domanda. Non c'era ancora una risposta "intelligente" definitiva.
Il meglio che riesco a formulare è ancora un insieme di affermazioni if, il che significa che non soddisfa la mia domanda, ma almeno è uno schema completo che copre tutti i casi.
Schematicamente, questi sono ciò che deve accadere (la prima riga è il periodo del piano di progetto proposto che deve essere regolato):

              ********************                 Suggested PPStart-PPEnd = 1 year
[--------]                          [--------]     PPStart := PrjStart   PPEnd := PrjEnd
          [--------]                               PPEnd   := PrjEnd
                               [--------]          PPStart := PrjStart   PPEnd unchanged, but let's take PPEnd := PPStart + 1 year
                    [--------]                     PPStart := PrjStart   PPEnd := PrjEnd                
          [-------------------------]              -nothing-
          <--------]                               PPEnd   := PrjEnd
                               [-------->          PPStart := PrjStart   PPEnd unchanged, but let's take PPEnd := PPStart + 1 year
          <------------------------->              -nothing-
          <-------------------------]              -nothing-
          [------------------------->              -nothing-

E poi ciò che rimane è mettere le istruzioni if in un ordine intelligente

    
risposta data 30.01.2014 - 21:14
fonte
0

Se comprendo correttamente la tua domanda, stai chiedendo come puoi regolare gli intervalli di tempo senza avere un groviglio di if elseifs che verifica ogni possibilità, ho ragione?

Puoi semplificare un po 'le cose guardando una data alla volta. In altre parole, non pensare in termini di controllo se l'inizio e la fine sono al di fuori dell'intervallo e, in tal caso, regolare sia l'inizio che la fine.

Pensaci piuttosto in termini di:

Is both PrjStart and PrjEnd less than PPStart or is both PrjStart and PrjEnd greater than PPEnd?  If yes, update both values.

Is PPStart not open-ended and less than PrjStart?  If yes, then update PPStart to the value of PrjStart.

Is PPEnd not open-ended and greater than PrjEnd?  If yes, then update PPEnd to the value of PrjEnd.

Scoprirai che questo soddisfa tutte le tue condizioni. Se provi a gestirlo in termini di PPStart e PPEnd, dovrai coprire ogni combinazione di queste due date con quelle di PrjStart e PrjEnd. Il motivo per cui dovresti controllare se entrambi sono sovra o sotto è perché solo in quell'istanza le ultime due regole differiscono. In altre parole, se si sovrappongono, sei disposto ad abbreviare il periodo di pianificazione mentre quando non c'è sovrapposizione, viene impostato l'intero periodo.

    
risposta data 30.01.2014 - 12:32
fonte

Leggi altre domande sui tag