Skip to Content
Odoo Menu
  • Prisijungti
  • Išbandykite nemokamai
  • Programėlės
    Finansai
    • Apskaita
    • Pateikimas apmokėjimui
    • Sąnaudos
    • Skaičiuoklė (BI)
    • Dokumentai
    • Pasirašymas
    Pardavimai
    • CRM
    • Pardavimai
    • Kasų sistema - Parduotuvė
    • Kasų sistema - Restoranas
    • Prenumeratos
    • Nuoma
    Svetainės
    • Svetainių kūrėjimo įrankis
    • El. Prekyba
    • Internetinis Tinklaraštis
    • Forumas
    • Tiesioginis pokalbis
    • eMokymasis
    Tiekimo grandinė
    • Atsarga
    • Gamyba
    • PLM
    • Įsigijimai
    • Priežiūra
    • Kokybė
    Žmogaus ištekliai
    • Darbuotojai
    • Įdarbinimas
    • Atostogos
    • Įvertinimai
    • Rekomendacijos
    • Transporto priemonės
    Rinkodara
    • Socialinė rinkodara
    • Rinkodara el. paštu
    • SMS rinkodara
    • Renginiai
    • Rinkodaros automatizavimas
    • Apklausos
    Paslaugos
    • Projektas
    • Darbo laiko žiniaraščiai
    • Priežiūros tarnyba
    • Pagalbos tarnyba
    • Planavimas
    • Rezervacijos
    Produktyvumas
    • Diskucija
    • Patvirtinimai
    • IoT
    • VoIP
    • Žinių biblioteka
    • WhatsApp
    Trečiųjų šalių programos Odoo Studija Odoo debesijos platforma
  • Pramonės šakos
    Mažmeninė prekyba
    • Knygynas
    • Drabužių parduotuvė
    • Baldų parduotuvė
    • Maisto prekių parduotuvė
    • Techninės įrangos parduotuvė
    • Žaislų parduotuvė
    Food & Hospitality
    • Barai ir pub'ai
    • Restoranas
    • Greitasis maistas
    • Guest House
    • Gėrimų platintojas
    • Hotel
    Nekilnojamasis turtas
    • Real Estate Agency
    • Architektūros įmonė
    • Konstrukcija
    • Estate Managament
    • Sodininkauti
    • Turto savininkų asociacija
    Konsultavimas
    • Accounting Firm
    • Odoo Partneris
    • Marketing Agency
    • Teisinė firma
    • Talentų paieška
    • Auditai & sertifikavimas
    Gamyba
    • Textile
    • Metal
    • Furnitures
    • Maistas
    • Brewery
    • Įmonių dovanos
    Sveikata & Fitnesas
    • Sporto klubas
    • Akinių parduotuvė
    • Fitneso Centras
    • Sveikatos praktikai
    • Vaistinė
    • Kirpėjas
    Trades
    • Handyman
    • IT įranga ir palaikymas
    • Saulės energijos sistemos
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Kiti
    • Nonprofit Organization
    • Aplinkos agentūra
    • Reklaminių stendų nuoma
    • Fotografavimas
    • Dviračių nuoma
    • Programinės įrangos perpardavėjas
    Browse all Industries
  • Bendrija
    Mokykitės
    • Mokomosios medžiagos
    • Dokumentacija
    • Sertifikatai
    • Mokymai
    • Internetinis Tinklaraštis
    • Tinklalaidės
    Skatinkite švietinimą
    • Švietimo programa
    • Scale Up! Verslo žaidimas
    • Aplankykite Odoo
    Gaukite programinę įrangą
    • Atsisiųsti
    • Palyginkite versijas
    • Leidimai
    Bendradarbiauti
    • Github
    • Forumas
    • Renginiai
    • Vertimai
    • Tapkite partneriu
    • Services for Partners
    • Registruokite jūsų apskaitos įmonę
    Gaukite paslaugas
    • Susiraskite partnerį
    • Susirask buhalterį
    • Susitikti su konsultantu
    • Diegimo paslaugos
    • Klientų rekomendavimas
    • Palaikymas
    • Atnaujinimai
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Gaukite demo
  • Kainodara
  • Pagalba

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Apskaita
  • Atsarga
  • PoS
  • Projektas
  • MRP
All apps
You need to be registered to interact with the community.
All Posts People Badges
Žymos (View all)
odoo accounting v14 pos v15
About this forum
You need to be registered to interact with the community.
All Posts People Badges
Žymos (View all)
odoo accounting v14 pos v15
About this forum
Pagalba

Automated Start date calculation based on End date and Allocated hours.

Prenumeruoti

Get notified when there's activity on this post

This question has been flagged
3 Replies
2185 Rodiniai
Portretas
D. PARMAR

Hello all,
I am using Odoo 16. I am working on a custom implementation in Odoo where I need to compute a start date (x_studio_studio_shift_start) for a task based on the end date (x_studio_studio_shift_end) and the allocated hours (allocated_hours). The requirement is that the start date should be calculated by subtracting the allocated hours from the end date.

What I’m Trying to Achieve:

  • Model: planning.slot (this is the model where I'm implementing the logic)
  • Fields:
    • x_studio_studio_shift_start: Start date of the task (computed field)
    • x_studio_studio_shift_end: End date of the task
    • allocated_hours: Number of hours allocated to the task


    • The script below which I have tried but it is giving me errors. "ValueError: forbidden opcode(s) in 'from datetime import timedelta\n\n..."

    • Logic:

    1. Compute Start Date: The start date should be computed by subtracting the allocated hours from the end date. For example, if the end date is August 24, 2024, 08:41:28, and the allocated hours are 8, the start date should be August 23, 2024, 08:41:28.
    2. Planning by Resource: I'm using the Gantt view to manage tasks by resource. The idea is that if I drag and drop a task, the system will first consider the end date, then deduct the allocated hours, and finally set the start date accordingl


  • def _compute_shift_start(self):
    •     for record in self:
    •         if record.x_studio_studio_shift_end and record.allocated_hours:
    •             # Calculate start date by subtracting allocated hours from end date
    •             record.x_studio_studio_shift_start = fields.Datetime.subtract(
    •                 record.x_studio_studio_shift_end, hours=record.allocated_hours
    •             )
    •         else:
    •             record.x_studio_studio_shift_start = record.x_studio_studio_shift_end

  • 0
    Portretas
    Atmesti
    Portretas
    S.A. Methsiri Madusanka Sooriyaarachchi
    Best Answer

    To compute the start date based on the end date and allocated hours in Odoo, you can use Python's datetime module to handle date and time calculations. In Odoo 16, you would generally use datetime.timedelta for this kind of calculation. The error you encountered suggests there's an issue with the way you're trying to subtract time from a date.

    Here's how you can correctly implement this in your model:

    1. Ensure datetime Module Import:
      • Import datetime and timedelta at the beginning of your Python file.
    2. Correct Computation Method:
      • Use timedelta to subtract hours from the end date. The fields.Datetime class in Odoo doesn't directly support operations like subtraction, so you need to convert the datetime field to a Python datetime object, perform the calculation, and then set the result back to the Odoo field.

    Here’s how you can update your _compute_shift_start method:

    pythonCopy codefrom datetime import datetime, timedelta
    from odoo import models, fields
    
    class PlanningSlot(models.Model):
        _name = 'planning.slot'
        _description = 'Planning Slot'
    
        x_studio_studio_shift_start = fields.Datetime(compute='_compute_shift_start', store=True)
        x_studio_studio_shift_end = fields.Datetime(string='End Date')
        allocated_hours = fields.Float(string='Allocated Hours')
    
        def _compute_shift_start(self):
            for record in self:
                if record.x_studio_studio_shift_end and record.allocated_hours:
                    end_date = fields.Datetime.from_string(record.x_studio_studio_shift_end)
                    allocated_time = timedelta(hours=record.allocated_hours)
                    start_date = end_date - allocated_time
                    record.x_studio_studio_shift_start = fields.Datetime.to_string(start_date)
                else:
                    record.x_studio_studio_shift_start = record.x_studio_studio_shift_end
    

    Explanation:

    1. Imports:
      • timedelta is used to create a time difference of the allocated hours.
    2. Conversion to datetime:
      • fields.Datetime.from_string(record.x_studio_studio_shift_end) converts the Odoo datetime field to a Python datetime object.
      • fields.Datetime.to_string(start_date) converts the Python datetime object back to an Odoo-compatible datetime string.
    3. Subtracting Time:
      • end_date - allocated_time performs the date-time subtraction to compute the start date.

    Additional Notes:

    • Ensure that store=True is used in the field definition if you want to persist computed values in the database.
    • If the allocated_hours can be a fraction (e.g., 8.5 hours), ensure that your model's field type is set to Float for allocated_hours.

    This approach should work for your requirement to compute the start date by subtracting allocated hours from the end date. Let me know if you encounter any further issues!

    1
    Portretas
    Atmesti
    Portretas
    D. PARMAR
    Autorius Best Answer

    This does not work.

    0
    Portretas
    Atmesti
    Portretas
    Yahoo Baba Innovations Pvt.Ltd
    Best Answer

    Hi,

    Have a look at this:

    @api.depends( 'x_studio_studio_shift_end' , 'allocated_hours' ) 

    def _compute_shift_start ( self ): 

    for record in self: 

    ​if record.x_studio_studio_shift_end and record.allocated_hours: 

          ​ ​# Calculate start date by subtracting allocated hours from end date record.

    ​​x_studio_studio_shift_start = record. x_studio_studio_shift_end - timedelta(hours=record.allocated_hours)  ​

    ​else : 

    ​ ​record.x_studio_studio_shift_start = record.x_studio_studio_shift_end ​


    Thanks & Regards,

    0
    Portretas
    Atmesti
    Enjoying the discussion? Don't just read, join in!

    Create an account today to enjoy exclusive features and engage with our awesome community!

    Registracija
    Bendrija
    • Mokomosios medžiagos
    • Dokumentacija
    • Forumas
    Atvirasis kodas
    • Atsisiųsti
    • Github
    • Runbot
    • Vertimai
    Paslaugos
    • Odoo.sh talpinimas
    • Palaikymas
    • Atnaujinti
    • Pritaikytas programavimo kūrimas
    • Švietimas
    • Susirask buhalterį
    • Susiraskite partnerį
    • Tapkite partneriu
    Apie mus
    • Mūsų įmonė
    • Prekės ženklo turtas
    • Susisiekite su mumis
    • Darbo pasiūlymai
    • Renginiai
    • Tinklalaidės
    • Internetinis Tinklaraštis
    • Klientai
    • Teisinis • Privatumas
    • Saugumas
    الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

    Odoo yra atvirojo kodo verslo programų rinkinys, kuris apima visas įmonės poreikius: CRM, El. Prekybą, Apskaitą, Atsargų, Kasų sistemą, Projektų valdymą ir kt.

    Unikali Odoo vertės pasiūla – būti tuo pačiu metu labai lengvai naudojama ir visiškai integruota sistema.

    Website made with

    Odoo Experience on YouTube

    1. Use the live chat to ask your questions.
    2. The operator answers within a few minutes.

    Live support on Youtube
    Watch now