Ejemplo n.º 1
0
 def get_form(self, schema):
     # counter is used to avoid field name conflicts
     form = Form(schema, counter=itertools.count(15000), method='GET')
     if self.grid is not None:
         form.formid = 'grid_search_form'
         form.widget = deform_extensions.GridFormWidget(
             named_grid=self.grid)
         form.buttons = (deform.Button(title='Filtrer',
                                       name='submit',
                                       type='submit',
                                       css_class='btn btn-primary'), )
     else:
         form.widget.template = "autonomie:deform_templates/searchform.pt"
     return form
Ejemplo n.º 2
0
    def set_form_widget(self, form):
        """
        Attach a custom widget to the given form

        :param obj form: The deform.Form instance
        :returns: The deform.Form instance
        :rtype: obj
        """
        if self.grid is not None:
            form.formid = 'grid_search_form'
            form.widget = deform_extensions.GridFormWidget(
                named_grid=self.grid)
        else:
            form.widget.template = "searchform.pt"
        return form
Ejemplo n.º 3
0
class Tva(DBBASE):
    """
        `id` int(2) NOT NULL auto_increment,
        `name` varchar(8) NOT NULL,
        `value` int(5)
        `default` int(2) default 0 #rajouté par mise à jour 1.2
    """
    __colanderalchemy_config__ = {
        "title": u"un taux de TVA",
        "validation_msg": u"Les taux de Tva ont bien été configurés",
        "help_msg": u"""Configurez les taux de Tva disponibles utilisés dans \
Autonomie, ainsi que les produits associés.<br /> \
        Une Tva est composée :<ul><li>D'un libellé (ex : TVA 20%)</li> \
        <li>D'un montant (ex : 20)</li> \
        <li>D'un ensemble d'informations comptables</li> \
        <li>D'un ensemble de produits associés</li> \
        <li> D'une mention : si elle est renseignée, celle-ci viendra se placer
        en lieu et place du libellé (ex : Tva non applicable en vertu ...)
        </ul><br /> \
        <b>Note : les montants doivent tous être distincts, si vous utilisez \
        plusieurs Tva à 0%, utilisez des montants négatifs pour les \
        différencier. \
        """,
        'widget': deform_extensions.GridFormWidget(named_grid=TVA_GRID)
    }
    __tablename__ = 'tva'
    __table_args__ = default_table_args
    id = Column(
        'id',
        Integer,
        primary_key=True,
        info={'colanderalchemy': {
            'widget': deform.widget.HiddenWidget()
        }},
    )
    active = Column(
        Boolean(),
        default=True,
        info={'colanderalchemy': {
            'exclude': True
        }},
    )
    name = Column(
        "name",
        String(15),
        nullable=False,
        info={'colanderalchemy': {
            'title': u'Libellé du taux de TVA',
        }},
    )
    value = Column(
        "value",
        Integer,
        info={
            "colanderalchemy": {
                'title': u'Valeur',
                'typ': AmountType(),
                'description': u"Le pourcentage associé (ex : 19.6)",
            }
        },
    )
    compte_cg = Column(
        "compte_cg",
        String(125),
        default="",
        info={'colanderalchemy': dict(title=u"Compte CG de Tva")})
    code = Column("code",
                  String(125),
                  default="",
                  info={'colanderalchemy': dict(title=u"Code de Tva")})
    compte_a_payer = Column(
        String(125),
        default='',
        info={
            'colanderalchemy':
            dict(
                title=u"Compte de Tva à payer",
                description=u"Utilisé dans les exports comptables des \
encaissements",
            )
        })
    mention = Column(Text,
                     info={
                         'colanderalchemy': {
                             'title': u"Mentions spécifiques à cette TVA",
                             'description':
                             u"""Si cette Tva est utilisée dans un
devis/une facture,la mention apparaitra dans la sortie PDF
(ex: Mention pour la tva liée aux formations ...)""",
                             'widget': deform.widget.TextAreaWidget(rows=1),
                             'preparer': clean_html,
                             'missing': colander.drop,
                         }
                     })
    default = Column(
        "default",
        Boolean(),
        info={
            "colanderalchemy": {
                'title': u'Cette tva doit-elle être proposée par défaut ?'
            }
        },
    )
    products = relationship(
        "Product",
        cascade="all, delete-orphan",
        info={
            'colanderalchemy': {
                'title':
                u"Comptes produit associés",
                "widget":
                deform.widget.SequenceWidget(
                    add_subitem_text_template=u"Ajouter un compte produit", )
            },
        },
        back_populates='tva',
    )

    @classmethod
    def query(cls, include_inactive=False):
        q = super(Tva, cls).query()
        if not include_inactive:
            q = q.filter(Tva.active == True)
        return q.order_by('value')

    @classmethod
    def by_value(cls, value):
        """
        Returns the Tva matching this value
        """
        return super(Tva, cls).query().filter(cls.value == value).one()

    @classmethod
    def get_default(cls):
        return cls.query().filter_by(default=True).first()

    def __json__(self, request):
        return dict(
            id=self.id,
            value=integer_to_amount(self.value, 2),
            label=self.name,
            name=self.name,
            default=self.default,
            products=[product.__json__(request) for product in self.products],
        )

    @classmethod
    def unique_value(cls, value, tva_id=None):
        """
        Check that the given value has not already been attributed to a tva
        entry

        :param int value: The value currently configured
        :param int tva_id: The optionnal id of the current tva object (edition
        mode)
        :returns: True/False
        :rtype: bool
        """
        query = cls.query(include_inactive=True)
        if tva_id:
            query = query.filter(not_(cls.id == tva_id))

        return query.filter_by(value=value).count() == 0
Ejemplo n.º 4
0
class CareerPath(DBBASE):
    """
    Different career path stages
    """
    __colanderalchemy_config__ = {
        'title': u"Etape de parcours",
        'help_msg': u"",
        'validation_msg': u"L'étape de parcours a bien été enregistrée",
        'widget': deform_extensions.GridFormWidget(named_grid=CAREER_PATH_GRID)
    }
    __tablename__ = 'career_path'
    __table_args__ = default_table_args
    id = Column(
        'id',
        Integer,
        primary_key=True,
        info={'colanderalchemy': {
            'widget': deform.widget.HiddenWidget()
        }},
    )
    userdatas_id = Column(
        ForeignKey('user_datas.id'),
        info={
            'colanderalchemy': {
                'exclude': True
            },
            'export': {
                'label': u"Identifiant Autonomie",
                'stats': {
                    'exclude': True
                },
            }
        },
    )
    userdatas = relationship('UserDatas',
                             info={
                                 'colanderalchemy': {
                                     'exclude': True
                                 },
                                 'export': {
                                     'exclude': True
                                 },
                             })
    start_date = Column(Date(),
                        nullable=False,
                        info={'colanderalchemy': {
                            'title': u"Date d'effet"
                        }})
    end_date = Column(Date(),
                      info={'colanderalchemy': {
                          'title': u"Date d'échéance"
                      }})
    career_stage_id = Column(
        ForeignKey('career_stage.id'),
        info={'colanderalchemy': {
            'title': u"Type d'étape"
        }})
    career_stage = relationship(
        'CareerStage',
        primaryjoin='CareerStage.id==CareerPath.career_stage_id',
        info={
            'colanderalchemy':
            get_excluded_colanderalchemy(u'Etape de parcours'),
            'export': {
                'related_key': 'label'
            },
        },
    )
    cae_situation_id = Column(
        ForeignKey('cae_situation_option.id'),
        info={
            'colanderalchemy': {
                'title':
                u"Nouvelle situation dans la CAE",
                'description':
                u"Lorsque cette étape sera affectée à un \
porteur cette nouvelle situation sera proposée par défaut"
            }
        })
    cae_situation = relationship(
        'CaeSituationOption',
        primaryjoin='CaeSituationOption.id==CareerPath.cae_situation_id',
        info={
            'colanderalchemy':
            get_excluded_colanderalchemy(u'Situation dans la CAE'),
            'export': {
                'related_key': 'label'
            },
        },
    )
    stage_type = Column(String(15),
                        info={
                            'colanderalchemy': {
                                'title': u"Type d'étape"
                            },
                            'export': {
                                'formatter':
                                lambda val: dict(STAGE_TYPE_OPTIONS).get(val),
                                'stats': {
                                    'options': STAGE_TYPE_OPTIONS
                                },
                            }
                        })
    type_contrat_id = Column(
        ForeignKey('type_contrat_option.id'),
        info={'colanderalchemy': {
            'title': u"Type de contrat"
        }})
    type_contrat = relationship(
        'TypeContratOption',
        info={
            'colanderalchemy':
            get_excluded_colanderalchemy(u'Type de contrat'),
            'export': {
                'related_key': 'label'
            },
        },
    )
    employee_quality_id = Column(
        ForeignKey('employee_quality_option.id'),
        info={'colanderalchemy': {
            'title': u"Qualité du salarié"
        }})
    employee_quality = relationship(
        'EmployeeQualityOption',
        info={
            'colanderalchemy':
            get_excluded_colanderalchemy(u"Qualité du salarié"),
            'export': {
                'related_key': 'label'
            },
        })
    taux_horaire = Column(Float(),
                          info={'colanderalchemy': {
                              'title': u"Taux horaire"
                          }})
    num_hours = Column(Float(),
                       info={'colanderalchemy': {
                           'title': u"Nombre d'heures"
                       }})
    goals_amount = Column(
        Float(),
        info={'colanderalchemy': {
            'title': u"Objectif de CA / d'activité"
        }})
    goals_period = Column(String(15),
                          info={
                              'colanderalchemy': {
                                  'title': u"Période de l'objectif"
                              },
                              'export': {
                                  'formatter':
                                  lambda val: dict(PERIOD_OPTIONS).get(val),
                                  'stats': {
                                      'options': PERIOD_OPTIONS
                                  },
                              }
                          })
    amendment_number = Column(
        Integer(), info={'colanderalchemy': {
            'title': u"Numéro de l'avenant"
        }})
    type_sortie_id = Column(
        ForeignKey('type_sortie_option.id'),
        info={'colanderalchemy': {
            'title': u"Type de sortie"
        }})
    type_sortie = relationship(
        'TypeSortieOption',
        info={
            'colanderalchemy': get_excluded_colanderalchemy(u"Type de sortie"),
            'export': {
                'related_key': 'label'
            },
        },
    )
    motif_sortie_id = Column(
        ForeignKey('motif_sortie_option.id'),
        info={'colanderalchemy': {
            'title': u"Motif de sortie"
        }})
    motif_sortie = relationship(
        'MotifSortieOption',
        info={
            'colanderalchemy':
            get_excluded_colanderalchemy(u"Motif de sortie"),
            'export': {
                'related_key': 'label'
            },
        },
    )

    @classmethod
    def query(cls, user):
        q = super(CareerPath, cls).query()
        q = q.filter(CareerPath.userdatas_id == user)
        return q.order_by(CareerPath.start_date.desc())
Ejemplo n.º 5
0
class CareerStage(DBBASE):
    """
    Different career stages
    """
    __colanderalchemy_config__ = {
        'validation_msg': u"Les étapes de parcours ont bien été configurées",
        'widget':
        deform_extensions.GridFormWidget(named_grid=CAREER_STAGE_GRID)
    }
    __tablename__ = 'career_stage'
    __table_args__ = default_table_args
    id = Column(
        'id',
        Integer,
        primary_key=True,
        info={'colanderalchemy': {
            'widget': deform.widget.HiddenWidget()
        }},
    )
    active = Column(
        Boolean(),
        default=True,
        info={'colanderalchemy': {
            'exclude': True
        }},
    )
    name = Column(
        "name",
        String(100),
        nullable=False,
        info={'colanderalchemy': {
            'title': u"Libellé de l'étape"
        }},
    )
    cae_situation_id = Column(
        ForeignKey("cae_situation_option.id"),
        info={
            'colanderalchemy': {
                'title':
                u"Nouvelle situation dans la CAE",
                'description':
                u"Lorsque cette étape sera affectée à un \
porteur de projet cette situation lui sera automatiquement attribuée"
            }
        })
    cae_situation = relationship(
        "CaeSituationOption",
        primaryjoin='CaeSituationOption.id==CareerStage.cae_situation_id',
        info={
            'colanderalchemy':
            get_excluded_colanderalchemy(u'Situation dans la CAE'),
            'export': {
                'related_key': 'label'
            },
        },
    )
    stage_type = Column(String(15),
                        info={
                            'colanderalchemy': {
                                'title': u"Type d'étape"
                            },
                            'export': {
                                'formatter':
                                lambda val: dict(STAGE_TYPE_OPTIONS).get(val),
                                'stats': {
                                    'options': STAGE_TYPE_OPTIONS
                                },
                            }
                        })

    @classmethod
    def query(cls, include_inactive=False):
        q = super(CareerStage, cls).query()
        if not include_inactive:
            q = q.filter(CareerStage.active == True)
        return q.order_by('name')