Vai al contenuto
PLC Forum


Cambio tariffazione


Eolox

Messaggi consigliati

Salve a tutti,

Non riesco a trovare il modo di risolvere un problema, praticamente tra due date inserite dall'utente, il programma deve capire che a giugno c'è una tassazione diversa invece che a luglio, per eseguire un tariffario su un B&B... Praticamente io vado a creare quattro text box dove nelle perime a sinistrva ad inserire la data di ceck-in (giorno - mese), e nelle seconde a destra la data di ceck-out (giorno - mese). Come potrei farle intendere che se il valore delle date è a cavallo di due mesi con tariffe diverse, dovremme restituirmi l'otput della tariffazzione cambiata dal giorno es. 30 giugno in poi? Grazie

Link al commento
Condividi su altri siti


Ma è un problema di studio del metodo o di stesura del codice?

Perchè, nel primo caso, dovresti prima pensare a come faresti per risolvere il problema a mano. Calcolare i giorni con la prima tariffazione, quelli con la seconda, calcolare i 2 importi, ecc.

Nel secondo caso invece dove hai il problema? Nel confronto delle date o cosa?

In che linguaggio stai lavorando?

 

Link al commento
Condividi su altri siti

Praticamente il problema nasce quando uno ad esempio pernotta dal 27 giugno al 2 luglio, la tariffazione a cavallo dei due mesi cambia, come faccio a farle capire al programma che a luglio c'è un dato prezziario e a giugno un altro? non tutti possono pernottare solo ed esclusivamente ad un giugno o ad un luglio che sia, tutto lì... THX

Link al commento
Condividi su altri siti

Non capisco dove ti blocchi. Non è un semplice confronto di date?

Se la data di check out è dopo la data di cambio tariffazione vuol dire che hai scavallato. A questo punto calcoli i giorni fino a quello di cambio e quelli successivi e ti calcoli gli importi che poi sommerai.

Ripeto: in quale linguaggio lavori? Se fosse C# ti consiglio di cercare "DateTime" con le varie proprietà:

Link al commento
Condividi su altri siti

Secondo me stai facendo confusione su un problema banale, che esperienze di programmazione hai?.

Cosa c'entra la DLL? Lo sviluppo di una DLL serve solo se pensi di dover applicare del codice in molteplici applicazioni, per cui risulta comodo importare delle funzionalità già fatte senza doverle riscrivere.

Quote

oppure creare un database con specificato ogni notte prezzo?

Ma perchè? I prezzi non vanno a scaglioni di periodi? Mica cambiano giorno per giorno.

Ripeto: come faresti a mano?

- Probabilmente ti segneresti su una lista le date di inizio e fine di ogni scaglione di tariffazione e le tariffe corrispondenti.

- Calcoleresti il numero di giorni che cadono nel primo scaglione e calcoleresti la cifra con una moltiplicazione.

- Calcoleresti il numero di giorni che cadono nel secondo (eventualmente nel terzo, ecc.) e faresti lo stesso calcolo.

- Faresti la somma delle cifre calcolate per ottenere il totale.

 

Prova prima a schematizzare queste funzionalità nel modo che preferisci (diagramma di flusso, lista di operazioni, appunti, pseudolinguaggio, ...) e poi comincia a provare a scrivere il codice.

Link al commento
Condividi su altri siti

  • 1 year later...

Ciao,

supponendo che sia i periodi che le tariffe varino di anno in anno, se hai la disponibilità di un database, un'idea protrebbe essere creare una tabella "tariffe" in cui inserisci i prezzi per ogni periodo. Es:

 

image.png.6b0260b07599fd1f13ad68a80feb642a.png

 

A fronte di due date inserite dall'utente (sarebbe opportuno che comprendessero anche l'anno) che chiameramo DataInizio e DataFine, puoi selezionare le tariffe dal database in questo modo:

SELECT 	inizioPeriodo, finePeriodo, tariffaGiornaliera
FROM 	Tariffe
WHERE 	(inizioPeriodo < @DataInizio AND finePeriodo > @DataFine) OR 
		(inizioPeriodo > @DataInizio AND inizioPeriodo < @DataFine) OR 
        (finePeriodo > @DataInizio AND finePeriodo < @DataFine)

 

Poi puoi calcolare la tariffa totale così:

float totale = 0;
foreach(var t in tariffeDallaBaseDati)
{

    DateTime maxStart = t.inizioPeriodo > DataInizio ? t.inizioPeriodo : DataInizio; // Prendo il maggiore
    DateTime minEnd = t.finePeriodo < t.finePeriodo ? firstEnd : DataFine; // Prendo il minore
    TimeSpan interval = minEnd - maxStart;
    var giorniAQuestaTariffa = interval > TimeSpan.FromSeconds(0) ? interval.TotalDays : 0;

    totale += giorniAQuestaTariffa * t.TariffaGiornaliera;
}

 

Va tutto testato perchè l'ho scirtto di getto. Ci sarebbero poi correzioni ed ottimizzazioni da apportare (es. DataInizio probabilmente andrebbe incrementato di 1 in quanto sto considerando nella tariffa anche il giorno prima del primo pernottamento).

 

Link al commento
Condividi su altri siti

Giovanni, ti sei accodato ad una discussione di un anno fa, non è consentito dal regolamento accettato in fase di iscrizione al forum, oltre a creare inutile confusione.

Questa discussione la chiudiamo. 😉

 

***DISCUSSIONE CHIUSA***

Link al commento
Condividi su altri siti

  • Ivan Botta locked this discussione
Ospite
Questa discussione è chiusa alle risposte.
×
×
  • Crea nuovo/a...