class ActivityActionConfig(colander.Schema): id = forms.id_node() label = colander.SchemaNode(colander.String(), title=u"Titre", description=u"Titre dans la sortie pdf", validator=colander.Length(max=255)) children = ActivitySubActionSeq( title=u"", widget=deform.widget.SequenceWidget( template=TEMPLATES_URL + "clean_sequence.pt", add_subitem_text_template=u"Ajouter un sous-titre", ))
class WorkshopInfo1(colander.Schema): id = forms.id_node() label = colander.SchemaNode(colander.String(), title=u"Titre", description=u"Titre dans la sortie pdf", validator=colander.Length(max=255)) children = WorkshopInfo2Seq( title=u'', widget=CleanSequenceWidget( add_subitem_text_template=u"Ajouter un sous-titre", orderable=True, ))
class CompetenceRequirement(colander.MappingSchema): deadline_id = forms.id_node() deadline_label = colander.SchemaNode( colander.String(), widget=deform.widget.TextInputWidget(readonly=True), title=u"Pour l'échéance", missing=colander.drop, ) scale_id = colander.SchemaNode( colander.Integer(), title=u"Niveau requis", description=u"Sera mis en évidence dans l'interface", widget=forms.get_deferred_select(CompetenceScale))
class WorkshopInfo2(colander.Schema): id = forms.id_node() label = colander.SchemaNode(colander.String(), title=u"Sous-titre", description=u"Sous-titre dans la sortie pdf", validator=colander.Length(max=255)) children = WorkshopInfo3Seq( title=u"", widget=deform.widget.SequenceWidget( add_subitem_text_template=u"Ajouter un sous-titre 2", orderable=True, template=TEMPLATES_URL + "clean_sequence.pt", ))
class ExpenseConfig(colander.MappingSchema): """ Schema for the configuration of different expense types """ id = forms.id_node() active = colander.SchemaNode( colander.Boolean(), title=u"Actif", default=True, description=u"En décochant cette entrée, elle n'apparaîtra plus dans \ l'interface, mais restera associée aux notes de frais existantes.") label = colander.SchemaNode(colander.String(), title=u"Libellé", validator=colander.Length(max=50)) code = colander.SchemaNode(colander.String(), title=u"Compte de charge de la dépense", validator=colander.Length(max=15)) code_tva = colander.SchemaNode(colander.String(), title=u"Code TVA (si nécessaire)", missing="", validator=colander.Length(max=15)) compte_tva = colander.SchemaNode(colander.String(), title=u"Compte de TVA déductible", missing="", validator=colander.Length(max=15)) contribution = colander.SchemaNode( colander.Boolean(), title=u"Contribution", description=u"Ce type de frais est-il intégré dans la contribution \ à la CAE ?", )
class CompanySchema(colander.MappingSchema): """ Company add/edit form schema """ user_id = forms.id_node() name = colander.SchemaNode(colander.String(), widget=deferred_edit_adminonly_widget, title=u'Nom') goal = colander.SchemaNode(colander.String(), title=u"Descriptif de l'activité") activities = CompanyActivitySchema( title=u"Domaines d'activité", missing=colander.drop, ) email = forms.mail_node(missing=u'') phone = colander.SchemaNode(colander.String(), title=u'Téléphone', missing=u'') mobile = colander.SchemaNode(colander.String(), title=u'Téléphone portable', missing=u'') logo = colander.SchemaNode( FileData(), widget=files.deferred_upload_widget, title="Choisir un logo", validator=validate_image_mime, missing=colander.drop, description=u"Charger un fichier de type image *.png *.jpeg \ *.jpg ...") header = colander.SchemaNode( FileData(), widget=deferred_upload_header_widget, title=u'Entête des fichiers PDF', validator=validate_image_mime, missing=colander.drop, description=u"Charger un fichier de type image *.png *.jpeg \ *.jpg ... Le fichier est idéalement au format 20/4 (par exemple 1000px x \ 200 px)", ) # Fields specific to the treasury code_compta = colander.SchemaNode( colander.String(), title=u"Compte analytique", description=u"Compte analytique utilisé dans le logiciel de \ comptabilité", missing="") contribution = colander.SchemaNode( colander.Integer(), widget=deform.widget.TextInputWidget(input_append="%", css_class="col-md-1"), validator=colander.Range( min=0, max=100, min_err=u"Veuillez fournir un nombre supérieur à 0", max_err=u"Veuillez fournir un nombre inférieur à 100"), title=u"Contribution à la CAE", missing=colander.drop, description=u"Pourcentage que cette entreprise contribue à la CAE", ) cgv = forms.textarea_node( title=u"Conditions générales complémentaires", richwidget=True, missing="", ) RIB = colander.SchemaNode(colander.String(), title=u'RIB', missing=u'') IBAN = colander.SchemaNode(colander.String(), title=u'IBAN', missing=u'')
class CompanySchema(colander.MappingSchema): """ Company add/edit form schema """ user_id = forms.id_node() name = colander.SchemaNode( colander.String(), widget=deferred_edit_adminonly_widget, title=u'Nom' ) goal = colander.SchemaNode( colander.String(), title=u"Descriptif de l'activité") activities = CompanyActivitySchema( title=u"Domaines d'activité", missing=colander.drop, ) email = forms.mail_node(missing=u'') phone = colander.SchemaNode( colander.String(), title=u'Téléphone', missing=u'') mobile = colander.SchemaNode( colander.String(), title=u'Téléphone portable', missing=u'') logo = files.ImageNode( title="Choisir un logo", missing=colander.drop, ) header = files.ImageNode( widget=deferred_upload_header_widget, title=u'Entête des fichiers PDF', missing=colander.drop, description=u"Le fichier est idéalement au format 5/1 (par exemple \ 1000px x 200 px)", ) # Fields specific to the treasury code_compta = colander.SchemaNode( colander.String(), title=u"Compte analytique", description=u"Compte analytique utilisé dans le logiciel de \ comptabilité", missing="") # general_customer_account = colander.SchemaNode( # colander.String(), # title=u"Compte client général", # description="", # missing="", # ) # third_party_customer_account = colander.SchemaNode( # colander.String(), # title=u"Compte client tiers", # description="", # missing="", # ) # bank_account = colander.SchemaNode( # colander.String(), # title=u"Compte de banque", # description="", # missing="", # ) # custom_insurance_rate = colander.SchemaNode( # QuantityType(), # widget=deform.widget.TextInputWidget( # input_append="%", # css_class="col-md-1" # ), # validator=colander.Range( # min=0, # max=100, # min_err=u"Veuillez fournir un nombre supérieur à 0", # max_err=u"Veuillez fournir un nombre inférieur à 100" # ), # title=u"Taux de Responsabilité Civile Professionnel", # missing=colander.drop, # description=u"Pourcentage du taux d'assurance professionnelle " # u"de cette entreprise dans la CAE", # ) contribution = colander.SchemaNode( QuantityType(), widget=deform.widget.TextInputWidget( input_append="%", css_class="col-md-1" ), validator=colander.Range( min=0, max=100, min_err=u"Veuillez fournir un nombre supérieur à 0", max_err=u"Veuillez fournir un nombre inférieur à 100"), title=u"Contribution à la CAE", missing=colander.drop, description=u"Pourcentage que cette entreprise contribue à la CAE", ) cgv = forms.textarea_node( title=u"Conditions générales complémentaires", richwidget=True, missing="", ) RIB = colander.SchemaNode( colander.String(), title=u'RIB', missing=u'') IBAN = colander.SchemaNode( colander.String(), title=u'IBAN', missing=u'') come_from = forms.come_from_node()
class SubCompetenceConfigSchema(colander.MappingSchema): id = forms.id_node() label = colander.SchemaNode( colander.String(), title=u"Libellé", )
class WorkshopInfo3(colander.MappingSchema): id = forms.id_node() label = colander.SchemaNode(colander.String(), title=u"Sous-titre 2", description=u"Sous-titre 2 dans la sortie pdf", validator=colander.Length(max=100))
class ActionConfig(colander.MappingSchema): id = forms.id_node() label = colander.SchemaNode(colander.String(), title=u"Sous-titre", description=u"Sous-titre dans la sortie pdf", validator=colander.Length(max=100))
class MailSchema(colander.MappingSchema): company_id = id_node() attachment = colander.SchemaNode( colander.String(), missing=colander.drop, )