Questo sito utilizza cookie per le proprie funzionalità e per inviarti pubblicità e servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie.

Accedendo al link http://www.odoo-italia.org/index.php/home/cookie-policy puoi leggere in dettaglio le modalità di trattamento dei cookie da parte dell'Associazione Odoo Italia.

Benvenuto, Ospite
Nome utente: Password: Ricordami
  • Pagina:
  • 1
  • 2

ARGOMENTO: Confronto date

Confronto date 4 Anni 3 Mesi fa #18128

  • vencizon
  • Avatar di vencizon
  • Offline
  • Expert Boarder
  • Messaggi: 121
  • Ringraziamenti ricevuti 3
  • Karma: 1
Salve a tutti,
sto scrivendo una funzione che conti il numero di festività (dal modulo hr.holiday.public) incluse in una richiesta di permesso.

In pratica, se un dipendente chiede un permesso dal giorno xx-xx-xxxx al giorno yy-yy-yyyy e in questo intervallo è inclusa la festività in data zz-zz-zzzz, il numero di giorni di permesso deve essere decrementato di uno.
def _holidays_check(self, cr, uid, ids, date_from, date_to):
        DATETIME = '%Y-%m-%d %H:%M:%S'
        dt_to = datetime.datetime.strptime(date_from, DATETIME).strftime("%Y-%m-%d")
        dt_from = datetime.datetime.strptime(date_from, DATETIME).strftime("%Y-%m-%d")
        free_leaves = 0
        for holiday in self.pool.get('hr.public.holidays.line').browse(cr, uid, 'date' context=None):
            if ((holiday >= dt_from) and (holiday <= dt_to)):
                free_leaves += 1
        return free_leaves

Con questa funzione ho un errore di incompatibilità di dati nel confronto. Non posso confrontare un oggetto hr.public.line con una stringa.

La classe che contiene il campo date è la seguente:
class hr_holidays_line(osv.osv):

    _name = 'hr.public.holidays.line'
    _description = 'Public Holidays Lines'

    _columns = {
        'name': fields.char('Name', size=128, required=True),
        'date': fields.date('Date', required=True),
        'holidays_id': fields.many2one('hr.public.holidays', 'Holiday Calendar Year'),
        'variable': fields.boolean('Date may change'),
    }

Qualcuno sa come posso riuscire a fare questo controllo?
Grazie :cheer:
Ultima modifica: 4 Anni 3 Mesi fa da vencizon.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Confronto date 4 Anni 3 Mesi fa #18133

  • NicoTheBrush
  • Avatar di NicoTheBrush
  • Offline
  • Platinum Boarder
  • Messaggi: 1952
  • Ringraziamenti ricevuti 156
  • Karma: 46
il browse è sicuramete errato:
browse(cr, uid, 'date' context=None)

il terzo campo viene rappresentato dagli ID (quindi una lista o un intero) che vuoi sfogliare con quel metodo, quindi una cosa del genere:
browse(cr, uid, ids,  context=context)

per rilevare poi la data utilizzi dentro il ciclo

holiday.date

consiglio gratuito e non richiesto, puoi importare il formato data utilizzato da odoo, senza create una tua costante:
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Confronto date 4 Anni 3 Mesi fa #18134

  • NicoTheBrush
  • Avatar di NicoTheBrush
  • Offline
  • Platinum Boarder
  • Messaggi: 1952
  • Ringraziamenti ricevuti 156
  • Karma: 46
Domanda: il metodo _holidays_check fa parte dello stesso oggetto hr.public.holidays.line ? in tal caso puoi usare self.browse direttamente senza passare attraverso il pool.get
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Confronto date 4 Anni 3 Mesi fa #18142

  • vencizon
  • Avatar di vencizon
  • Offline
  • Expert Boarder
  • Messaggi: 121
  • Ringraziamenti ricevuti 3
  • Karma: 1
Il metodo _holidays_check è nella classe hr_holidays (ho creato un modulo di inherit), mentre l'oggetto hr.public.holidays.line è in tutt'altro modulo.

Avevo già provato a fare
def _holidays_check(self, cr, uid, ids, date_from, date_to):
        DATETIME = '%Y-%m-%d %H:%M:%S'
        dt_to = datetime.datetime.strptime(date_from, DATETIME).strftime("%Y-%m-%d")
        dt_from = datetime.datetime.strptime(date_from, DATETIME).strftime("%Y-%m-%d")
        free_leaves = 0
        for holiday in self.pool.get('hr.public.holidays.line').browse(cr, uid, ids, context=None):
            if ((holiday.date >= dt_from) and (holiday.date <= dt_to)):
                free_leaves += 1
        return free_leaves

Ma in questo modo pare non entrare proprio nel ciclo for. Non o nessun errore, ma il conteggio non viene aggiornato.

In un altro metodo, richiamo la funzione in questo modo
number_of_days += self._holidays_check(cr, uid, ids, date_from, date_to)
senza ottenere il risultato sperato (il totale non varia come dovrebbe).

EDIT
il campo date in hr.public.holidays.line è di tipo date
i campi date_from e date_to sono di tipo datetime
Ultima modifica: 4 Anni 3 Mesi fa da vencizon.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Confronto date 4 Anni 3 Mesi fa #18148

  • NicoTheBrush
  • Avatar di NicoTheBrush
  • Offline
  • Platinum Boarder
  • Messaggi: 1952
  • Ringraziamenti ricevuti 156
  • Karma: 46
il motivo della mia domanda è che utilizzi nel browse il valore ids, trovandosi in un altro oggetto sicuramente non va bene passarlo a browse, quello che ti manca è un metodo search prima del browse che ti dica quale elementi di hr.public.holidays.line "spazzolarsi" nel ciclo
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Confronto date 4 Anni 3 Mesi fa #18159

  • vencizon
  • Avatar di vencizon
  • Offline
  • Expert Boarder
  • Messaggi: 121
  • Ringraziamenti ricevuti 3
  • Karma: 1
Quindi una cosa di questo tipo?
for holiday in self.pool.get('hr.public.holidays.line').search(cr, uid, [('date','>=','date_from'),'&',('date','<=','date_from')]).browse(cr, uid, ids, context=None):
            free_leaves += 1
        return free_leaves

Anche se continua a non funzionare. Mi sa che mi sfugge qualcosa nella gestione dei metodi browse e search. :what:
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
  • Pagina:
  • 1
  • 2
Tempo creazione pagina: 0.141 secondi

Odoo Italia Associazione - C.F: 94200470485 - Sede: Viale dei Cadorna, 83 - Firenze - Italy

Protected by R Antispam