class FileUploadSchema(colander.Schema): parent_id = colander.SchemaNode( colander.Integer(), widget=deform.widget.HiddenWidget(), missing=colander.drop, ) come_from = forms.come_from_node() filetype = colander.SchemaNode( colander.String(), widget=deferred_filetype_select, missing="", title=u"Type de fichier", ) description = colander.SchemaNode(colander.String()) upload = colander.SchemaNode( deform.FileData(), widget=deferred_upload_widget, title=u"Choix du fichier", description=file_description, validator=filesize_validator, )
class FileUploadSchema(colander.Schema): come_from = forms.come_from_node() popup = forms.popup_node() file_type_id = FileTypeNode(missing=colander.drop) upload = FileNode() description = colander.SchemaNode(colander.String())
class FileUploadSchema(colander.Schema): come_from = forms.come_from_node() popup = forms.popup_node() file_type_id = FileTypeNode(missing=colander.drop) upload = FileNode() description = colander.SchemaNode( colander.String(), validator=colander.Length( min=5, max=100, min_err= u"La description ne doit pas être inférieure à 5 caractères", max_err= u"La description ne doit pas être supérieure à 100 caractères"), )
class PaymentSchema(colander.MappingSchema): """ colander schema for payment recording """ come_from = forms.come_from_node() bank_remittance_id = colander.SchemaNode( colander.String(), title=u"Identifiant de la remise en banque", description=u"Ce champ est un indicateur permettant de \ retrouver la remise en banque à laquelle cet encaissement est associé", default=deferred_bank_remittance_id_default, ) amount = colander.SchemaNode( AmountType(5), title=u"Montant de l'encaissement", validator=deferred_total_validator, default=deferred_amount_default, ) date = forms.today_node() mode = colander.SchemaNode( colander.String(), title=u"Mode de paiement", widget=deferred_payment_mode_widget, validator=deferred_payment_mode_validator, ) bank_id = colander.SchemaNode( colander.Integer(), title=u"Banque", missing=colander.drop, widget=deferred_bank_widget, validator=deferred_bank_validator, default=forms.get_deferred_default(BankAccount), ) tva_id = colander.SchemaNode(colander.Integer(), title=u"Tva liée à cet encaissement", widget=forms.get_deferred_select( Tva, mandatory=True, keys=('id', 'name')), validator=deferred_tva_id_validator) resulted = colander.SchemaNode( colander.Boolean(), title=u"Soldé", description="""Indique que le document est soldé ( ne recevra plus de paiement), si le montant indiqué correspond au montant de la facture celle-ci est soldée automatiquement""", default=False, )
class CreateActivitySchema(colander.MappingSchema): """ Activity creation schema """ come_from = forms.come_from_node() conseillers = conseiller_choice_node( title=u"Conseillers menant le rendez-vous", multiple=True, ) datetime = forms.now_node(title=u"Date de rendez-vous") type_id = colander.SchemaNode( colander.Integer(), widget=get_deferred_select_type(), title=u"Nature du rendez-vous", ) action_id = colander.SchemaNode( colander.Integer(), widget=deferred_select_action, title=u"Intitulé de l'action (financée)", missing=colander.null, default=colander.null, ) subaction_id = colander.SchemaNode( colander.Integer(), widget=deferred_select_subaction, title=u"Intitulé sous-action", missing=colander.null, default=colander.null, ) mode = colander.SchemaNode( colander.String(), widget=deferred_select_mode, title=u"Mode d'entretien", ) participants = participant_choice_node( multiple=True, description=u"Participants attendus au rendez-vous", ) companies = company_choice_node( multiple=True, title=u"Entreprises concernées (donner le droit de consultation)", description=u"Les membres de ces entreprises qui ne participent \ pas au rendez-vous peuvent quand même le consulter.", )
class Workshop(colander.MappingSchema): """ Schema for workshop creation/edition """ come_from = forms.come_from_node() name = colander.SchemaNode( colander.String(), validator=colander.Length(max=255), title=u"Titre de l'atelier", ) leaders = LeaderSequence( title=u"Animateur(s)/Animatrice(s)", widget=deform_widget.SequenceWidget(min_len=1), ) info1_id = colander.SchemaNode( colander.Integer(), widget=deferred_info1, title=u"Intitulé de l'action financée 1", description=u"Utilisée comme titre dans la sortie PDF", ) info2_id = colander.SchemaNode( colander.Integer(), widget=deferred_info2, title=u"Intitulé de l'action financée 2", description=u"Utilisée comme sous-titre dans la sortie PDF", missing=colander.drop, ) info3_id = colander.SchemaNode( colander.Integer(), widget=deferred_info3, title=u"Intitulé de l'action financée 3", description=u"Utilisée comme second sous-titre dans la sortie PDF", missing=colander.drop, ) participants = activity.ParticipantsSequence( title=u"Participants", widget=deform_widget.SequenceWidget(min_len=1), ) timeslots = TimeslotsSequence( title=u"Tranches horaires", description=u"Les différentes tranches horaires de l'atelier \ donnant lieu à un émargement", widget=deform_widget.SequenceWidget(min_len=1), )
class MultiplePaymentSchema(colander.MappingSchema): """ colander schema for payment recording """ come_from = forms.come_from_node() bank_remittance_id = colander.SchemaNode( colander.String(), title=u"Identifiant de la remise en banque", default= deferred_remittance_amount_default, # FIXME: C'est quoi cette ligne ? ) payment_amount = colander.SchemaNode( AmountType(5), title=u"Montant du paiement", description=u"Ce champ permet de contrôler que la somme des \ encaissements saisis dans ce formulaire correspondent bien au montant du \ paiement.", validator=deferred_total_validator, default=deferred_amount_default, ) date = forms.today_node(title=u"Date de la remise") mode = colander.SchemaNode( colander.String(), title=u"Mode de paiement", widget=deferred_payment_mode_widget, validator=deferred_payment_mode_validator, ) bank_id = colander.SchemaNode( colander.Integer(), title=u"Banque", missing=colander.drop, widget=deferred_bank_widget, default=forms.get_deferred_default(BankAccount), ) tvas = TvaPaymentSequence(title=u'Encaissements par taux de Tva') resulted = colander.SchemaNode( colander.Boolean(), title=u"Soldé", description="""Indique que le document est soldé ( ne recevra plus de paiement), si le montant indiqué correspond au montant de la facture celle-ci est soldée automatiquement""", default=False, )
class ExpensePaymentSchema(colander.MappingSchema): """ Schéma de saisi des paiements des notes de dépense """ come_from = forms.come_from_node() amount = colander.SchemaNode( AmountType(), title=u"Montant du paiement", validator=deferred_expense_total_validator, default=deferred_amount_default, ) date = forms.today_node() mode = colander.SchemaNode( colander.String(), title=u"Mode de paiement", widget=deferred_payment_mode_widget, validator=deferred_payment_mode_validator, ) bank_id = colander.SchemaNode( colander.Integer(), title=u"Banque", missing=colander.drop, widget=deferred_bank_widget, validator=deferred_bank_validator, default=forms.get_deferred_default(BankAccount), ) waiver = colander.SchemaNode( colander.Boolean(), title=u"Abandon de créance", description="""Indique que ce paiement correspond à un abandon de créance à la hauteur du montant indiqué (le Mode de paiement et la Banque sont alors ignorés)""", default=False, ) resulted = colander.SchemaNode( colander.Boolean(), title=u"Soldé", description="""Indique que le document est soldé ( ne recevra plus de paiement), si le montant indiqué correspond au montant de feuille de notes de dépense celle-ci est soldée automatiquement""", default=False, )
class PaymentSchema(colander.MappingSchema): """ colander schema for payment recording """ come_from = forms.come_from_node() amount = colander.SchemaNode(AmountType(), title=u"Montant", validator=deferred_total_validator, default=deferred_amount_default) mode = colander.SchemaNode(colander.String(), title=u"Mode de paiement", widget=deferred_payment_mode_widget, validator=deferred_payment_mode_validator) resulted = colander.SchemaNode( colander.Boolean(), title=u"Soldé", description="""Indique que le document est soldé ( ne recevra plus de paiement), si le montant indiqué correspond au montant de la facture celle-ci est soldée automatiquement""", default=False)
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="") 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 WorkshopSchema(colander.MappingSchema): """ Schema for workshop creation/edition """ come_from = forms.come_from_node() name = colander.SchemaNode( colander.String(), validator=colander.Length(max=255), title=u"Titre de l'atelier", ) owner = trainer_choice_node_factory( title="Gestionnaire de l'atelier", validator=deferred_owner_validator, missing=colander.drop, ) trainers = trainer_choice_node_factory( multiple=True, title=u"Animateur(s)/Animatrice(s)", ) signup_mode = colander.SchemaNode( colander.String(), title=u"Mode d'inscription", widget=deform.widget.SelectWidget( values=EVENT_SIGNUP_MODE, default='closed', ), validator=colander.OneOf([key for key, _ in EVENT_SIGNUP_MODE]), ) description = colander.SchemaNode( colander.String(), description=u"Facultatif", widget=deform.widget.TextAreaWidget(), missing=u"", ) info1_id = colander.SchemaNode( colander.Integer(), widget=deferred_info1, title=u"Intitulé de l'action financée 1", description=u"Utilisée comme titre dans la sortie PDF", missing=colander.null, default=colander.null, ) info2_id = colander.SchemaNode( colander.Integer(), widget=deferred_info2, title=u"Intitulé de l'action financée 2", description=u"Utilisée comme sous-titre dans la sortie PDF", missing=colander.null, default=colander.null, ) info3_id = colander.SchemaNode( colander.Integer(), widget=deferred_info3, title=u"Intitulé de l'action financée 3", description=u"Utilisée comme second sous-titre dans la sortie PDF", missing=colander.null, default=colander.null, ) participants = ParticipantsSequence( title=u"Participants", widget=deform_widget.SequenceWidget( min_len=0, add_subitem_text_template=u"Ajouter un participant", ), ) timeslots = TimeslotsSequence( title=u"Tranches horaires", description=u"Les différentes tranches horaires de l'atelier \ donnant lieu à un émargement", widget=deform_widget.SequenceWidget(min_len=1), )