first commit

This commit is contained in:
root
2026-03-14 09:42:12 +00:00
commit 0adbd20c2c
10991 changed files with 1646955 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

Binary file not shown.

View File

@@ -0,0 +1,45 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.model import ModelSQL, ModelView, fields
class Allocation(ModelSQL, ModelView):
__name__ = 'project.allocation'
employee = fields.Many2One(
'company.employee', "Employee", required=True, ondelete='CASCADE')
work = fields.Many2One(
'project.work', "Work", required=True, ondelete='CASCADE')
percentage = fields.Float(
"Percentage", digits=(None, 2), required=True,
domain=[('percentage', '>', 0.0)])
@staticmethod
def default_percentage():
return 100
def get_rec_name(self, name):
return self.employee.rec_name
@classmethod
def search_rec_name(cls, name, clause):
return [('employee.rec_name',) + tuple(clause[1:])]
@classmethod
def on_modification(cls, mode, allocations, field_names=None):
super().on_modification(mode, allocations, field_names=field_names)
if mode in {'create', 'write'}:
for allocation in allocations:
allocation.work.reset_leveling()
allocation.work.compute_dates()
@classmethod
def on_delete(cls, allocations):
callback = super().on_delete(allocations)
works = [a.work for a in allocations]
def replan():
for work in works:
work.reset_leveling()
work.compute_dates()
callback.append(replan)
return callback

View File

@@ -0,0 +1,19 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="allocation_view_form">
<field name="model">project.allocation</field>
<field name="type">form</field>
<field name="name">allocation_form</field>
</record>
<record model="ir.ui.view" id="allocation_view_tree">
<field name="model">project.allocation</field>
<field name="type">tree</field>
<field name="priority" eval="8"/>
<field name="name">allocation_tree</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,136 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "Служител"
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "Процент"
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "Задача"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr "Предшественик"
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr "Наследник"
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr "Действително завършване"
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr "Време на действително завършване"
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr "Действително започване"
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr "Време на действително започване"
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr "Разпределения"
#, fuzzy
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr "Изравняване на закъснение"
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr "Ограничение за край"
#, fuzzy
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr "Ограничение за време на завършване"
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr "Ограничение за начало"
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr "Ограничение за начално време"
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "Продължителност"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr "По-рано завършване"
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr "Време на по-рано приключване"
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr "По-рано начало"
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr "По-ранно време на започване"
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr "По-късно завършване"
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr "Време на по-късно завършване"
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr "По-късно начало"
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr "Време на по-късно начало"
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr "Изравняване на закъснение"
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr "Предшественици"
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr "Наследници"
#, fuzzy
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Tasks Leveling"
#, fuzzy
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr "Разпределние"
#, fuzzy
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr "Предшественик - Наследник"
msgctxt "view:project.work:"
msgid "Allocations"
msgstr "Разпределения"
msgctxt "view:project.work:"
msgid "Plan"
msgstr "План"

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "Empleat"
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "Percentatge"
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "Treball"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr "Predecessor"
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr "Successor"
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr "Finalització real"
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr "Hora de finalització real"
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr "Inici real"
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr "Hora d'inici real"
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr "Assignacions"
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr "Retard de l'anivellació"
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr "Restricció de finalització"
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr "Restricció d'hora de finalització"
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr "Restricció d'inici"
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr "Restricció de temps d'inici"
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "Temps"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr "Finalització avançada"
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr "Hora de finalització avançada"
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr "Inici prematur"
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr "Hora d'inici prematur"
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr "Finalització amb retard"
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr "Hora de finalització amb retard"
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr "Inici amb retard"
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr "Hora d'inici amb retard"
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr "Retard d'anivellació"
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr "Predecessors"
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr "Successors"
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Anivellació de tasques"
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr "Assignació de projectes"
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr "Projecte Predecessor - Successor"
msgctxt "view:project.work:"
msgid "Allocations"
msgstr "Assignacions"
msgctxt "view:project.work:"
msgid "Plan"
msgstr "Planificació"

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr ""
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr ""
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr ""
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr ""
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr ""
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr ""
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr ""
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr ""
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr ""
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr ""
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr ""
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr ""
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr ""
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr ""
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr ""
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr ""
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr ""
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr ""
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr ""
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr ""
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr ""
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr ""
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr ""
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr ""
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr ""
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr ""
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr ""
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Tasks Leveling"
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr ""
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr ""
msgctxt "view:project.work:"
msgid "Allocations"
msgstr ""
msgctxt "view:project.work:"
msgid "Plan"
msgstr ""

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "Mitarbeiter"
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "Prozentsatz"
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "Projektaufgabe"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr "Vorgänger"
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr "Nachfolger"
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr "Tatsächliches Enddatum"
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr "Tatsächliche Endzeit"
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr "Tatsächliches Startdatum"
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr "Tatsächliche Startzeit"
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr "Zuordnungen"
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr "Verzögerung Abgleich Rückstand"
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr "Fixes Enddatum"
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr "Fixe Endzeit"
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr "Fixes Startdatum"
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr "Fixe Startzeit"
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "Erfasste Zeit"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr "Frühestes Enddatum"
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr "Früheste Endzeit"
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr "Frühestes Startdatum"
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr "Früheste Startzeit"
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr "Spätestes Enddatum"
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr "Späteste Endzeit"
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr "Spätestes Startdatum"
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr "Späteste Startzeit"
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr "Verzögerung Abgleich"
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr "Vorgänger"
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr "Nachfolger"
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Projektaufgaben abgleichen"
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr "Projekt Zuordnung"
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr "Projekt Vorgänger Nachfolger"
msgctxt "view:project.work:"
msgid "Allocations"
msgstr "Zuordnungen"
msgctxt "view:project.work:"
msgid "Plan"
msgstr "Planung"

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "Empleado"
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "Porcentaje"
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "Trabajo"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr "Predecesor"
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr "Sucesor"
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr "Finalización real"
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr "Hora de finalización real"
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr "Inicio real"
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr "Hora de inicio real"
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr "Asignaciones"
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr "Retraso de la nivelación"
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr "Restricción de finalización"
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr "Restricción hora de finalización"
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr "Restricción de inicio"
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr "Restricción hora de inicio"
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "Tiempo"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr "Finalización anticipada"
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr "Hora de finalización anticipada"
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr "Inicio anticipado"
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr "Hora de inicio anticipado"
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr "Finalización con retraso"
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr "Hora de finalización con retraso"
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr "Inicio con retraso"
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr "Hora de inicio con retraso"
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr "Retraso de nivelación"
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr "Predecesores"
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr "Sucesores"
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Nivelación de tareas"
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr "Asignación de proyectos"
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr "Proyecto Predecesor Sucesor"
msgctxt "view:project.work:"
msgid "Allocations"
msgstr "Asignaciones"
msgctxt "view:project.work:"
msgid "Plan"
msgstr "Planificación"

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr ""
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr ""
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr ""
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr ""
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr ""
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr ""
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr ""
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr ""
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr ""
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr ""
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr "Retraso del ajuste"
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr "Fin de limitación"
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr "Hora fin de limitación"
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr "Inicio de limitación"
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr "Hora inicio de limitación"
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "Duración"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr ""
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr ""
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr ""
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr ""
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr ""
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr ""
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr ""
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr ""
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr "Retraso de ajuste"
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr ""
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr ""
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr ""
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr ""
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr ""
msgctxt "view:project.work:"
msgid "Allocations"
msgstr ""
msgctxt "view:project.work:"
msgid "Plan"
msgstr ""

View File

@@ -0,0 +1,135 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "Töötaja"
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "Protsent"
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "Töö"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr "Eelkäija"
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr "Järeltulija"
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr "Tegelik lõpp"
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr "Tegelik lõpp aeg"
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr "Tegelik algus"
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr "Tegelik algus aeg"
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr "Allokatsioon"
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr ""
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr ""
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr ""
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr ""
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr ""
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "Kestvus"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr ""
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr ""
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr ""
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr ""
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr ""
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr ""
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr ""
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr ""
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr ""
#, fuzzy
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr "Eelkäija"
#, fuzzy
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr "Järeltulija"
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr ""
#, fuzzy
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr "Allokatsioon"
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr ""
#, fuzzy
msgctxt "view:project.work:"
msgid "Allocations"
msgstr "Allokatsioon"
msgctxt "view:project.work:"
msgid "Plan"
msgstr "Plaan"

View File

@@ -0,0 +1,133 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "کارمند"
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "درصد"
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "کار"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr "کارمند اسبق"
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr "جانشین"
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr "پایان واقعی"
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr "زمان پایان واقعی"
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr "شروع واقعی"
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr "زمان شروع واقعی"
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr "تخصیص ها"
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr "سطح تاخیر به عقب"
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr "پایان محدودیت"
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr "زمان پایان محدودیت"
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr "شروع محدودیت"
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr "زمان شروع محدودیت"
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "مدت زمان"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr "پایان زودهنگام"
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr "زمان پایان زودهنگام"
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr "شروع زودهنگام"
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr "زمان شروع زودهنگام"
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr "پایان تأخییر افتاده"
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr "زمان پایان تأخییر افتاده"
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr "شروع با تأخییر"
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr "زمان شروع با تأخییر"
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr "سطح تاخیر"
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr "پیشینیان"
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr "جانشین ها"
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "سطح وظایف"
#, fuzzy
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr "تخصیص"
#, fuzzy
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr "کارمند اسبق - جانشین"
msgctxt "view:project.work:"
msgid "Allocations"
msgstr "تخصیص ها"
msgctxt "view:project.work:"
msgid "Plan"
msgstr "طرح"

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr ""
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr ""
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr ""
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr ""
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr ""
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr ""
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr ""
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr ""
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr ""
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr ""
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr ""
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr ""
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr ""
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr ""
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr ""
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr ""
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr ""
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr ""
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr ""
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr ""
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr ""
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr ""
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr ""
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr ""
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr ""
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr ""
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr ""
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Tasks Leveling"
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr ""
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr ""
msgctxt "view:project.work:"
msgid "Allocations"
msgstr ""
msgctxt "view:project.work:"
msgid "Plan"
msgstr ""

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "Employé"
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "Pourcentage"
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "Travail"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr "Prédécesseur"
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr "Successeur"
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr "Fin réelle"
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr "Heure de fin réelle"
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr "Début réel"
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr "Heure de début réelle"
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr "Répartitions"
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr "Délais rétro-décalage"
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr "Fin imposée"
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr "Heure de fin imposée"
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr "Début imposé"
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr "Heure de début imposée"
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "Durée"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr "Fin au plus tôt"
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr "Heure de fin au plus tôt"
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr "Début au plus tôt"
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr "Heure de début au plus tôt"
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr "Fin au plus tard"
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr "Heure de fin au plus tard"
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr "Début au plus tard"
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr "Heure de début au plus tard"
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr "Délais décalage"
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr "Prédécesseurs"
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr "Successeurs"
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Décalage des tâches"
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr "Répartition du projet"
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr "Prédécesseur - Successeur du projet"
msgctxt "view:project.work:"
msgid "Allocations"
msgstr "Répartitions"
msgctxt "view:project.work:"
msgid "Plan"
msgstr "Planification"

View File

@@ -0,0 +1,135 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
#, fuzzy
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "Alkalmazott"
#, fuzzy
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "Százalék:"
#, fuzzy
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "Tevékenység"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr ""
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr ""
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr ""
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr ""
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr ""
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr ""
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr ""
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr ""
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr ""
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr ""
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr ""
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr ""
#, fuzzy
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "Időtartam"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr ""
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr ""
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr ""
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr ""
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr ""
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr ""
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr ""
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr ""
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr ""
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr ""
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr ""
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Tasks Leveling"
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr ""
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr ""
msgctxt "view:project.work:"
msgid "Allocations"
msgstr ""
msgctxt "view:project.work:"
msgid "Plan"
msgstr ""

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "Karyawan"
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "Persentase"
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr ""
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr ""
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr ""
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr ""
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr ""
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr ""
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr ""
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr ""
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr ""
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr ""
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr ""
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr ""
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr ""
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr ""
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr ""
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr ""
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr ""
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr ""
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr ""
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr ""
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr ""
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr ""
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr ""
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr ""
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr ""
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr ""
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr ""
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr ""
msgctxt "view:project.work:"
msgid "Allocations"
msgstr ""
msgctxt "view:project.work:"
msgid "Plan"
msgstr ""

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "Dipendente"
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "Percentuale"
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "Lavoro"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr ""
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr ""
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr ""
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr ""
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr ""
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr ""
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr ""
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr ""
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr ""
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr ""
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr ""
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr ""
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "Durata"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr ""
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr ""
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr ""
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr ""
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr ""
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr ""
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr ""
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr ""
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr ""
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr ""
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr ""
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Tasks Leveling"
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr ""
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr ""
msgctxt "view:project.work:"
msgid "Allocations"
msgstr ""
msgctxt "view:project.work:"
msgid "Plan"
msgstr ""

View File

@@ -0,0 +1,135 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
#, fuzzy
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "ພະນັກງານ"
#, fuzzy
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "ອັດຕາສ່ວນຮ້ອຍ"
#, fuzzy
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "ເຮັດວຽກ"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr ""
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr ""
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr ""
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr ""
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr ""
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr ""
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr ""
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr ""
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr ""
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr ""
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr ""
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr ""
#, fuzzy
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "ກຳນົດເວລາ"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr ""
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr ""
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr ""
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr ""
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr ""
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr ""
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr ""
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr ""
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr ""
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr ""
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr ""
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Tasks Leveling"
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr ""
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr ""
msgctxt "view:project.work:"
msgid "Allocations"
msgstr ""
msgctxt "view:project.work:"
msgid "Plan"
msgstr ""

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr ""
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr ""
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr ""
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr ""
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr ""
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr ""
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr ""
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr ""
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr ""
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr ""
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr ""
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr ""
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr ""
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr ""
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr ""
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr ""
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr ""
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr ""
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr ""
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr ""
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr ""
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr ""
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr ""
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr ""
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr ""
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr ""
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr ""
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Tasks Leveling"
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr ""
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr ""
msgctxt "view:project.work:"
msgid "Allocations"
msgstr ""
msgctxt "view:project.work:"
msgid "Plan"
msgstr ""

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "Werknemer"
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "Percentage"
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "Werk"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr "Voorganger"
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr "Opvolger"
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr "Werkelijke einddatum"
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr "Werkelijke eindtijd"
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr "Werkelijke start"
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr "Werkelijke starttijd"
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr "Toekenningen"
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr "Achteruitstelvertraging(Back Leveling Delay)"
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr "Vaste einddatum"
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr "Beperking eindtijd"
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr "Vaste startdatum"
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr "Vaste start tijd"
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "Looptijd"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr "vroegste einddatum"
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr "vroegste eindtijd"
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr "Vroegste startdatum"
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr "vroegst start tijd"
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr "ten laatste gedaan"
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr "ten laatste gedaan (tijd)"
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr "laatste start datum"
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr "laatste start tijd"
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr "Leverings vertraging"
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr "voorgangers"
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr "opvolgers"
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Tasks Leveling (match taken?)"
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr "Project indeling"
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr "Project voorganger opvolger"
msgctxt "view:project.work:"
msgid "Allocations"
msgstr "Toekenningen"
msgctxt "view:project.work:"
msgid "Plan"
msgstr "planning"

View File

@@ -0,0 +1,133 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "Pracownik"
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "Procentowy"
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "Praca"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr "Poprzednik"
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr "Następca"
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr ""
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr ""
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr ""
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr ""
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr "Alokacje"
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr ""
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr ""
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr ""
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr ""
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr ""
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "Czas trwania"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr ""
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr ""
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr ""
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr ""
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr ""
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr ""
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr ""
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr ""
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr ""
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr "Poprzednicy"
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr "Następcy"
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Tasks Leveling"
#, fuzzy
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr "Alokacja"
#, fuzzy
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr "Poprzednik - Następca"
msgctxt "view:project.work:"
msgid "Allocations"
msgstr "Alokacje"
msgctxt "view:project.work:"
msgid "Plan"
msgstr "Plan"

View File

@@ -0,0 +1,133 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "Empregado"
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "Porcentagem"
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "Tarefa"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr "Predecessor"
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr "Sucessor"
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr "Finalização Real"
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr "Hora de Finalização Real"
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr "Início Real"
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr "Hora de Início Real"
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr "Alocações"
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr "Atraso de Nivelamento"
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr "Restrição de Finalização"
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr "Restrição de Hora de Finalização"
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr "Restrição de Início"
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr "Restrições de Hora de Início"
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "Duração"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr "Finalização Antecipada"
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr "Hora de Finalização Antecipada"
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr "Início Antecipado"
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr "Hora de Início Antecipado"
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr "Finalização com Atrado"
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr "Hora da Finalização com Atraso"
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr "Início com Atraso"
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr "Hora de Início com Atraso"
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr "Atraso de Nivelação"
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr "Predecessores"
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr "Sucessores"
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Nivelamento Das Tarefas"
#, fuzzy
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr "Alocação"
#, fuzzy
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr "Predecessor - Sucessor"
msgctxt "view:project.work:"
msgid "Allocations"
msgstr "Alocações"
msgctxt "view:project.work:"
msgid "Plan"
msgstr "Planejamento"

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr ""
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr ""
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr ""
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr ""
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr ""
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr ""
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr ""
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr ""
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr ""
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr ""
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr ""
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr ""
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr ""
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr ""
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr ""
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr ""
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr ""
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr ""
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr ""
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr ""
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr ""
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr ""
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr ""
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr ""
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr ""
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr ""
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr ""
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr ""
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr ""
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr ""
msgctxt "view:project.work:"
msgid "Allocations"
msgstr ""
msgctxt "view:project.work:"
msgid "Plan"
msgstr ""

View File

@@ -0,0 +1,135 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "Сотрудник"
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "Процент"
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "Работа"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr "Предок"
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr "Потомок"
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr "Фактически завершен"
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr "Фактически завершен (время)"
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr "Фактически начат"
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr "Фактически начат (время)"
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr "Распределения"
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr "Обратная выравнивающая задержка"
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr "Порог завершения"
#, fuzzy
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr "Порог завершения (время)"
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr "Порог начала"
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr "Порог начала (время)"
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "Продолжительность"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr "Досрочное завершение"
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr "Досрочное завершение (время)"
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr "Досрочное начало"
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr "Досрочное начало (время)"
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr "Позднее завершение"
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr "Позднее завершение (время)"
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr "Позднее начало"
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr "Позднее начало (время)"
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr "Выравнивающая задержка"
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr "Предки"
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr "Потомки"
#, fuzzy
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Tasks Leveling"
#, fuzzy
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr "Распределение"
#, fuzzy
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr "Предок - Потомок"
msgctxt "view:project.work:"
msgid "Allocations"
msgstr "Распределения"
msgctxt "view:project.work:"
msgid "Plan"
msgstr "План"

View File

@@ -0,0 +1,134 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "Zaposlenec"
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "Delež"
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "Naloga"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr "Predhodnik"
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr "Naslednik"
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr "Dejanski konec"
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr "Dejanski končni čas"
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr "Dejanski začetek"
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr "Dejanski začetni čas"
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr "Razporeditve"
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr "Izravnalna zakasnitev nazaj"
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr "Planiran konec"
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr "Planiran konćni čas"
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr "Planiran začetek"
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr "Planiran začetni čas"
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "Trajanje"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr "Predčasni konec"
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr "Predčasni končni čas"
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr "Predčasni začetek"
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr "Predčasni začetni čas"
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr "Pozen konec"
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr "Pozen končni čas"
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr "Pozen začetek"
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr "Pozen začetni čas"
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr "Izravnalna zakasnitev"
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr "Predhodniki"
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr "Nasledniki"
#, fuzzy
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Tasks Leveling"
#, fuzzy
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr "Razporeditev"
#, fuzzy
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr "Predhodnik - Naslednik"
msgctxt "view:project.work:"
msgid "Allocations"
msgstr "Razporeditve"
msgctxt "view:project.work:"
msgid "Plan"
msgstr "Planiranje"

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr ""
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr ""
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr ""
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr ""
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr ""
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr ""
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr ""
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr ""
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr ""
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr ""
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr ""
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr ""
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr ""
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr ""
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr ""
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr ""
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr ""
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr ""
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr ""
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr ""
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr ""
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr ""
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr ""
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr ""
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr ""
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr ""
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr ""
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "Tasks Leveling"
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr ""
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr ""
msgctxt "view:project.work:"
msgid "Allocations"
msgstr ""
msgctxt "view:project.work:"
msgid "Plan"
msgstr ""

View File

@@ -0,0 +1,131 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr ""
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr ""
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr ""
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr ""
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr ""
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr ""
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr ""
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr ""
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr ""
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr ""
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr ""
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr ""
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr ""
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr ""
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr ""
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr ""
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr ""
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr ""
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr ""
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr ""
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr ""
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr ""
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr ""
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr ""
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr ""
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr ""
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr ""
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr ""
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr ""
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr ""
msgctxt "view:project.work:"
msgid "Allocations"
msgstr ""
msgctxt "view:project.work:"
msgid "Plan"
msgstr ""

View File

@@ -0,0 +1,133 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:project.allocation,employee:"
msgid "Employee"
msgstr "雇员"
msgctxt "field:project.allocation,percentage:"
msgid "Percentage"
msgstr "百分比"
msgctxt "field:project.allocation,work:"
msgid "Work"
msgstr "工作"
msgctxt "field:project.predecessor_successor,predecessor:"
msgid "Predecessor"
msgstr "前驱"
msgctxt "field:project.predecessor_successor,successor:"
msgid "Successor"
msgstr "后继"
msgctxt "field:project.work,actual_finish_date:"
msgid "Actual Finish"
msgstr "实际完成"
msgctxt "field:project.work,actual_finish_time:"
msgid "Actual Finish Time"
msgstr "实际完成时间"
msgctxt "field:project.work,actual_start_date:"
msgid "Actual Start"
msgstr "实际开始"
msgctxt "field:project.work,actual_start_time:"
msgid "Actual Start Time"
msgstr "实际开始时间"
msgctxt "field:project.work,allocations:"
msgid "Allocations"
msgstr "资源分配"
msgctxt "field:project.work,back_leveling_delay:"
msgid "Back Leveling Delay"
msgstr ""
msgctxt "field:project.work,constraint_finish_date:"
msgid "Constraint Finish"
msgstr "约束完成"
msgctxt "field:project.work,constraint_finish_time:"
msgid "Constraint Finish Time"
msgstr "约束完成时间"
msgctxt "field:project.work,constraint_start_date:"
msgid "Constraint Start"
msgstr "约束开始"
msgctxt "field:project.work,constraint_start_time:"
msgid "Constraint Start Time"
msgstr "约束开始时间"
msgctxt "field:project.work,duration:"
msgid "Duration"
msgstr "持续时间"
msgctxt "field:project.work,early_finish_date:"
msgid "Early Finish"
msgstr "最早完成"
msgctxt "field:project.work,early_finish_time:"
msgid "Early Finish Time"
msgstr "最早完成时间"
msgctxt "field:project.work,early_start_date:"
msgid "Early Start"
msgstr "最早开始"
msgctxt "field:project.work,early_start_time:"
msgid "Early Start Time"
msgstr "最早开始时间"
msgctxt "field:project.work,late_finish_date:"
msgid "Late Finish"
msgstr "最迟完成"
msgctxt "field:project.work,late_finish_time:"
msgid "Late Finish Time"
msgstr "最迟完成时间"
msgctxt "field:project.work,late_start_date:"
msgid "Late Start"
msgstr "最迟开始"
msgctxt "field:project.work,late_start_time:"
msgid "Late Start Time"
msgstr "最迟开始时间"
msgctxt "field:project.work,leveling_delay:"
msgid "Leveling Delay"
msgstr "资源调配延迟"
msgctxt "field:project.work,predecessors:"
msgid "Predecessors"
msgstr "前驱"
msgctxt "field:project.work,successors:"
msgid "Successors"
msgstr "后继"
msgctxt "model:ir.action,name:wizard_leveling"
msgid "Tasks Leveling"
msgstr "任务资源调配"
#, fuzzy
msgctxt "model:project.allocation,string:"
msgid "Project Allocation"
msgstr "资源分配"
#, fuzzy
msgctxt "model:project.predecessor_successor,string:"
msgid "Project Predecessor Successor"
msgstr "前驱 - 后继"
msgctxt "view:project.work:"
msgid "Allocations"
msgstr "资源分配"
msgctxt "view:project.work:"
msgid "Plan"
msgstr "规划"

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

View File

@@ -0,0 +1,13 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.modules.company.tests import CompanyTestMixin
from trytond.tests.test_tryton import ModuleTestCase
class ProjectPlanTestCase(CompanyTestMixin, ModuleTestCase):
'Test ProjectPlan module'
module = 'project_plan'
del ModuleTestCase

View File

@@ -0,0 +1,18 @@
[tryton]
version=7.8.1
depends:
ir
company
project
timesheet
xml:
work.xml
allocation.xml
[register]
model:
allocation.Allocation
work.Work
work.PredecessorSuccessor
wizard:
work.Leveling

View File

@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<label name="employee"/>
<field name="employee"/>
<label name="percentage"/>
<field name="percentage"/>
<label name="work"/>
<field name="work"/>
</form>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree>
<field name="employee" expand="1"/>
<field name="percentage"/>
<field name="work" expand="1"/>
</tree>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="/form/notebook/page[@name='children']" position="after">
<page string="Plan" id="plan">
<label name="constraint_start_date"/>
<field name="constraint_start_date"/>
<label name="constraint_finish_date"/>
<field name="constraint_finish_date"/>
<label name="early_start_date"/>
<field name="early_start_date"/>
<label name="early_finish_date"/>
<field name="early_finish_date"/>
<label name="late_start_date"/>
<field name="late_start_date"/>
<label name="late_finish_date"/>
<field name="late_finish_date"/>
<label name="actual_start_date"/>
<field name="actual_start_date"/>
<label name="actual_finish_date"/>
<field name="actual_finish_date"/>
<label name="duration"/>
<field name="duration"/>
<newline/>
<field name="predecessors" colspan="2"/>
<field name="successors" colspan="2"/>
</page>
<page string="Allocations" name="allocations">
<field name="allocations" colspan="4"/>
</page>
</xpath>
</data>

View File

@@ -0,0 +1,628 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import datetime
from collections import defaultdict, deque
from functools import reduce
from heapq import heappop, heappush
from trytond.model import ModelSQL, fields, tree
from trytond.pool import PoolMeta
from trytond.pyson import Eval
from trytond.wizard import StateTransition, Wizard
def intfloor(x):
return int(round(x, 4))
class Work(tree(parent='successors'), metaclass=PoolMeta):
__name__ = 'project.work'
predecessors = fields.Many2Many('project.predecessor_successor',
'successor', 'predecessor', 'Predecessors',
domain=[
('parent', '=', Eval('parent', -1)),
('id', '!=', Eval('id', -1)),
])
successors = fields.Many2Many('project.predecessor_successor',
'predecessor', 'successor', 'Successors',
domain=[
('parent', '=', Eval('parent', -1)),
('id', '!=', Eval('id', -1)),
])
leveling_delay = fields.Float("Leveling Delay", required=True)
back_leveling_delay = fields.Float("Back Leveling Delay", required=True)
allocations = fields.One2Many('project.allocation', 'work', 'Allocations',
states={
'invisible': Eval('type') != 'task',
})
duration = fields.Function(
fields.TimeDelta('Duration', 'company_work_time'),
'get_function_fields')
early_start_time = fields.DateTime("Early Start Time", readonly=True)
late_start_time = fields.DateTime("Late Start Time", readonly=True)
early_finish_time = fields.DateTime("Early Finish Time", readonly=True)
late_finish_time = fields.DateTime("Late Finish Time", readonly=True)
actual_start_time = fields.DateTime("Actual Start Time")
actual_finish_time = fields.DateTime("Actual Finish Time")
constraint_start_time = fields.DateTime("Constraint Start Time")
constraint_finish_time = fields.DateTime("Constraint Finish Time")
early_start_date = fields.Function(fields.Date('Early Start'),
'get_function_fields')
late_start_date = fields.Function(fields.Date('Late Start'),
'get_function_fields')
early_finish_date = fields.Function(fields.Date('Early Finish'),
'get_function_fields')
late_finish_date = fields.Function(fields.Date('Late Finish'),
'get_function_fields')
actual_start_date = fields.Function(fields.Date('Actual Start'),
'get_function_fields', setter='set_function_fields')
actual_finish_date = fields.Function(fields.Date('Actual Finish'),
'get_function_fields', setter='set_function_fields')
constraint_start_date = fields.Function(fields.Date('Constraint Start',
depends={'type'}), 'get_function_fields',
setter='set_function_fields')
constraint_finish_date = fields.Function(fields.Date('Constraint Finish',
depends={'type'}), 'get_function_fields',
setter='set_function_fields')
@classmethod
def __setup__(cls):
super().__setup__()
@staticmethod
def default_leveling_delay():
return 0.0
@staticmethod
def default_back_leveling_delay():
return 0.0
@classmethod
def get_function_fields(cls, works, names):
'''
Function to compute function fields
'''
res = {}
ids = [w.id for w in works]
if 'duration' in names:
all_works = cls.search([
('parent', 'child_of', ids),
])
all_works = set(all_works)
durations = {}
id2work = {}
leafs = set()
for work in all_works:
id2work[work.id] = work
if not work.children:
leafs.add(work.id)
total_allocation = 0
effort = work.effort_duration or datetime.timedelta()
if not work.allocations:
durations[work.id] = effort
continue
for allocation in work.allocations:
total_allocation += allocation.percentage
durations[work.id] = datetime.timedelta(
seconds=effort.total_seconds()
/ (total_allocation / 100.0))
while leafs:
for work_id in leafs:
work = id2work[work_id]
all_works.remove(work)
if work.parent and work.parent.id in durations:
durations[work.parent.id] += durations[work_id]
next_leafs = set(w.id for w in all_works)
for work in all_works:
if not work.parent:
continue
if work.parent.id in next_leafs and work.parent in works:
next_leafs.remove(work.parent.id)
leafs = next_leafs
res['duration'] = durations
fun_fields = ('early_start_date', 'early_finish_date',
'late_start_date', 'late_finish_date',
'actual_start_date', 'actual_finish_date',
'constraint_start_date', 'constraint_finish_date')
db_fields = ('early_start_time', 'early_finish_time',
'late_start_time', 'late_finish_time',
'actual_start_time', 'actual_finish_time',
'constraint_start_time', 'constraint_finish_time')
for fun_field, db_field in zip(fun_fields, db_fields):
if fun_field in names:
values = {}
for work in works:
values[work.id] = getattr(work, db_field) \
and getattr(work, db_field).date() or None
res[fun_field] = values
return res
@classmethod
def set_function_fields(cls, works, name, value):
fun_fields = ('actual_start_date', 'actual_finish_date',
'constraint_start_date', 'constraint_finish_date')
db_fields = ('actual_start_time', 'actual_finish_time',
'constraint_start_time', 'constraint_finish_time')
for fun_field, db_field in zip(fun_fields, db_fields):
if fun_field == name:
cls.write(works, {
db_field: (value
and datetime.datetime.combine(value,
datetime.time())
or None),
})
break
@property
def hours(self):
if not self.duration:
return 0
return self.duration.total_seconds() / 60 / 60
@classmethod
def add_minutes(cls, company, date, minutes):
minutes = int(round(minutes))
minutes = date.minute + minutes
hours = minutes // 60
if hours:
date = cls.add_hours(company, date, hours)
minutes = minutes % 60
date = datetime.datetime(
date.year,
date.month,
date.day,
date.hour,
minutes,
date.second)
return date
@classmethod
def add_hours(cls, company, date, hours):
while hours:
if hours != intfloor(hours):
minutes = (hours - intfloor(hours)) * 60
date = cls.add_minutes(company, date, minutes)
hours = intfloor(hours)
hours = date.hour + hours
days = hours // company.hours_per_work_day
if days:
date = cls.add_days(company, date, days)
hours = hours % company.hours_per_work_day
date = datetime.datetime(
date.year,
date.month,
date.day,
intfloor(hours),
date.minute,
date.second)
hours = hours - intfloor(hours)
return date
@classmethod
def add_days(cls, company, date, days):
day_per_week = company.hours_per_work_week / company.hours_per_work_day
while days:
if days != intfloor(days):
hours = (days - intfloor(days)) * company.hours_per_work_day
date = cls.add_hours(company, date, hours)
days = intfloor(days)
days = date.weekday() + days
weeks = days // day_per_week
days = days % day_per_week
if weeks:
date = cls.add_weeks(company, date, weeks)
date += datetime.timedelta(days=-date.weekday() + intfloor(days))
days = days - intfloor(days)
return date
@classmethod
def add_weeks(cls, company, date, weeks):
day_per_week = company.hours_per_work_week / company.hours_per_work_day
if weeks != intfloor(weeks):
days = (weeks - intfloor(weeks)) * day_per_week
if days:
date = cls.add_days(company, date, days)
date += datetime.timedelta(days=7 * intfloor(weeks))
return date
def compute_dates(self):
values = {}
def get_early_finish(work):
return values.get(work, {}).get(
'early_finish_time', work.early_finish_time)
def get_late_start(work):
return values.get(work, {}).get(
'late_start_time', work.late_start_time)
def maxdate(x, y):
return x and y and max(x, y) or x or y
def mindate(x, y):
return x and y and min(x, y) or x or y
# propagate constraint_start_time
constraint_start = reduce(maxdate, (pred.early_finish_time
for pred in self.predecessors), None)
if constraint_start is None and self.parent:
constraint_start = self.parent.early_start_time
constraint_start = maxdate(constraint_start,
self.constraint_start_time)
works = deque([(self, constraint_start)])
work2children = {}
parent = None
while works or parent:
if parent:
work = parent
parent = None
# Compute early_finish
if work.children:
early_finish_time = reduce(
maxdate, map(get_early_finish, work.children), None)
else:
early_finish_time = None
if values[work]['early_start_time']:
early_finish_time = self.add_hours(work.company,
values[work]['early_start_time'],
work.hours)
values[work]['early_finish_time'] = early_finish_time
# Propagate constraint_start on successors
for w in work.successors:
works.append((w, early_finish_time))
if not work.parent:
continue
# housecleaning work2children
if work.parent not in work2children:
work2children[work.parent] = set()
work2children[work.parent].update(work.successors)
if work in work2children[work.parent]:
work2children[work.parent].remove(work)
# if no sibling continue to walk up the tree
if not work2children.get(work.parent):
if work.parent not in values:
values[work.parent] = {}
parent = work.parent
continue
work, constraint_start = works.popleft()
# take constraint define on the work into account
constraint_start = maxdate(constraint_start,
work.constraint_start_time)
if constraint_start:
early_start = self.add_hours(work.company, constraint_start,
work.leveling_delay)
else:
early_start = None
# update values
if work not in values:
values[work] = {}
values[work]['early_start_time'] = early_start
# Loop on children if they exist
if work.children and work not in work2children:
work2children[work] = set(work.children)
# Propagate constraint_start on children
for w in work.children:
if w.predecessors:
continue
works.append((w, early_start))
else:
parent = work
# propagate constraint_finish_time
constraint_finish = reduce(mindate, (succ.late_start_time
for succ in self.successors), None)
if constraint_finish is None and self.parent:
constraint_finish = self.parent.late_finish_time
constraint_finish = mindate(constraint_finish,
self.constraint_finish_time)
works = deque([(self, constraint_finish)])
work2children = {}
parent = None
while works or parent:
if parent:
work = parent
parent = None
# Compute late_start
if work.children:
reduce(mindate, map(get_late_start, work.children), None)
else:
late_start_time = None
if values[work]['late_finish_time']:
late_start_time = self.add_hours(work.company,
values[work]['late_finish_time'],
-work.hours)
values[work]['late_start_time'] = late_start_time
# Propagate constraint_finish on predecessors
for w in work.predecessors:
works.append((w, late_start_time))
if not work.parent:
continue
# housecleaning work2children
if work.parent not in work2children:
work2children[work.parent] = set()
work2children[work.parent].update(work.predecessors)
if work in work2children[work.parent]:
work2children[work.parent].remove(work)
# if no sibling continue to walk up the tree
if not work2children.get(work.parent):
if work.parent not in values:
values[work.parent] = {}
parent = work.parent
continue
work, constraint_finish = works.popleft()
# take constraint define on the work into account
constraint_finish = mindate(constraint_finish,
work.constraint_finish_time)
if constraint_finish:
late_finish = self.add_hours(work.company, constraint_finish,
-work.back_leveling_delay)
else:
late_finish = None
# update values
if work not in values:
values[work] = {}
values[work]['late_finish_time'] = late_finish
# Loop on children if they exist
if work.children and work not in work2children:
work2children[work] = set(work.children)
# Propagate constraint_start on children
for w in work.children:
if w.successors:
continue
works.append((w, late_finish))
else:
parent = work
# write values
write_fields = ('early_start_time', 'early_finish_time',
'late_start_time', 'late_finish_time')
to_write = []
for work, val in values.items():
write_cond = False
for field in write_fields:
if field in val and getattr(work, field) != val[field]:
write_cond = True
break
if write_cond:
to_write.extend(([work], val))
if to_write:
self.write(*to_write)
def reset_leveling(self):
def get_key(w):
return (
set(p.id for p in w.predecessors),
set(s.id for s in w.successors))
if not self.parent:
return
siblings = self.search([
('parent', '=', self.parent.id)
])
to_clean = []
ref_key = get_key(self)
for sibling in siblings:
if sibling.leveling_delay == sibling.back_leveling_delay == 0:
continue
if get_key(sibling) == ref_key:
to_clean.append(sibling)
if to_clean:
self.write(to_clean, {
'leveling_delay': 0,
'back_leveling_delay': 0,
})
def create_leveling(self):
# define some helper functions
def get_key(w):
return (
set(p.id for p in w.predecessors),
set(s.id for s in w.successors))
def over_alloc(current_alloc, work):
return reduce(lambda res, alloc: (
res
or (current_alloc[alloc.employee.id]
+ alloc.percentage) > 100),
work.allocations,
False)
def sum_allocs(current_alloc, work):
res = defaultdict(float)
for alloc in work.allocations:
empl = alloc.employee.id
res[empl] = current_alloc[empl] + alloc.percentage
return res
def compute_delays(siblings):
# time_line is a list [[end_delay, allocations], ...], this
# mean that allocations is valid between the preceding end_delay
# (or 0 if it doesn't exist) and the current end_delay.
timeline = []
for sibling in siblings:
delay = 0
ignored = []
overloaded = []
item = None
while timeline:
# item is [end_delay, allocations]
item = heappop(timeline)
if over_alloc(item[1], sibling):
ignored.extend(overloaded)
ignored.append(item)
delay = item[0]
continue
elif item[1] >= delay + sibling.duration:
overloaded.append(item)
else:
# Succes!
break
heappush(timeline,
[delay + sibling.duration,
sum_allocs(defaultdict(float), sibling),
sibling.id])
for i in ignored:
heappush(timeline, i)
for i in overloaded:
i[1] = sum_allocs(i[1], sibling)
heappush(timeline, i)
yield sibling, delay
siblings = self.search([
('parent', '=', self.parent.id if self.parent else None)
])
refkey = get_key(self)
siblings = [s for s in siblings if get_key(s) == refkey]
for sibling, delay in compute_delays(siblings):
sibling.leveling_delay = delay
siblings.reverse()
for sibling, delay in compute_delays(siblings):
sibling.back_leveling_delay = delay
self.__class__.save(siblings)
if self.parent:
self.parent.compute_dates()
@classmethod
def on_modification(cls, mode, works, field_names=None):
super().on_modification(mode, works, field_names=field_names)
if mode in {'create', 'write'}:
for work in works:
if field_names is None or 'effort' in field_names:
work.reset_leveling()
if field_names is None or field_names & {
'constraint_start_time', 'constraint_finish_time',
'effort'}:
work.compute_dates()
@classmethod
def on_delete(cls, works):
callback = super().on_delete(works)
to_update = set()
for work in works:
if work.parent and work.parent not in works:
to_update.add(work.parent)
to_update.update(
c for c in work.parent.children if c not in works)
def replan():
for work in to_update:
work.reset_leveling()
work.compute_dates()
callback.append(replan)
return callback
class PredecessorSuccessor(ModelSQL):
__name__ = 'project.predecessor_successor'
predecessor = fields.Many2One(
'project.work', "Predecessor", ondelete='CASCADE', required=True)
successor = fields.Many2One(
'project.work', "Successor", ondelete='CASCADE', required=True)
@classmethod
def on_modification(cls, mode, records, field_names=None):
super().on_modification(mode, records, field_names=field_names)
if mode == 'create':
if field_names is None or field_names & {
'predecessor', 'successor', 'parent'}:
for record in records:
record.predecessor.reset_leveling()
record.successor.reset_leveling()
if record.predecessor.parent:
record.predecessor.parent.compute_dates()
@classmethod
def on_delete(cls, records):
callback = super().on_delete(records)
works = set()
parents = set()
for record in records:
works.add(record.predecessor)
works.add(record.successor)
if record.predecessor.parent:
parents.add(record.predecessor.parent)
def replan():
for work in works:
work.reset_leveling()
for parent in parents:
parent.compute_dates()
callback.append(replan)
return callback
class Leveling(Wizard):
__name__ = 'project_plan.work.leveling'
start_state = 'leveling'
leveling = StateTransition()
def transition_leveling(self):
self.record.create_leveling()
return 'end'

View File

@@ -0,0 +1,25 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="work_view_form">
<field name="model">project.work</field>
<field name="inherit" ref="project.work_view_form"/>
<field name="name">work_form</field>
</record>
<record model="ir.action.wizard" id="wizard_leveling">
<field name="name">Tasks Leveling</field>
<field name="wiz_name">project_plan.work.leveling</field>
<field name="model">project.work</field>
</record>
<record model="ir.action.keyword" id="leveling_keyword">
<field name="keyword">form_action</field>
<field name="model">project.work,-1</field>
<field name="action" ref="wizard_leveling"/>
</record>
</data>
</tryton>