class TaskConfiguration(colander.MappingSchema): """ Main fields to be configured """ name = colander.SchemaNode( colander.String(), title=u"Nom du document", description=u"Ce nom n'apparaît pas dans le document final", validator=colander.Length(max=255), default=deferred_default_name, missing="", ) customer_id = colander.SchemaNode( colander.Integer(), title=u"Choix du client", widget=deferred_customer_list, validator=deferred_customer_validator ) address = forms.textarea_node( title=u"Nom et adresse du client", widget_options={'rows': 4} ) workplace = forms.textarea_node( title=u"Lieu d'exécution des travaux", widget_options={'rows': 3}, missing=colander.drop, ) mention_ids = colander.SchemaNode( colander.Set(), title=u"Mentions facultatives", description=u"Choisissez les mentions à ajouter au document", widget=deferred_mention_select_widget, missing=colander.drop, ) phase_id = colander.SchemaNode( colander.String(), title=u"Phase où insérer le devis", widget=deferred_phases_widget, default=deferred_default_phase ) date = forms.today_node(title=u"Date du devis") description = forms.textarea_node(title=u"Objet du devis") course = colander.SchemaNode( colander.Integer(), title=u"", label=deferred_course_title, widget=deform.widget.CheckboxWidget(true_val="1", false_val="0"), missing=0, ) display_units = colander.SchemaNode( colander.Integer(), title="", label=u"Afficher le détail des prestations dans la sortie PDF ?", widget=deform.widget.CheckboxWidget(true_val="1", false_val="0"), missing=0, )
class EstimationConfig(colander.MappingSchema): """ Schema for estimation configuration """ header = forms.textarea_node( title=u"Cadre d'information spécifique (en entête des devis)", missing=u"", ) footer = forms.textarea_node( title=u"Informations sur l'acceptation des devis", missing=u"", )
class DiscountLine(colander.MappingSchema): """ A single estimation line """ description = forms.textarea_node( missing=u'', title=u"Remise", richwidget=True, richtext_options={"height": "100px"}, css_class='col-md-4', ) amount = colander.SchemaNode( AmountType(), title=u"Montant", widget=deform.widget.TextInputWidget(), css_class='col-md-1', validator=forms.positive_validator, ) tva = colander.SchemaNode( Integer(), title=u'TVA', widget=deferred_tvas_widget, default=deferred_default_tva, css_class='col-md-2 col-md-offset-3', )
class TaskNotes(colander.MappingSchema): """ Notes """ exclusions = forms.textarea_node( title=u'Notes', missing=u"", description=u"Note complémentaires concernant les prestations décrites" )
class CommercialSetFormSchema(colander.MappingSchema): month = colander.SchemaNode( colander.Integer(), widget=widget.HiddenWidget(), title=u'', validator=colander.Range(1, 12), ) value = colander.SchemaNode(AmountType(5), title=u"CA prévisionnel") comment = forms.textarea_node(title=u"Commentaire", missing=u"")
class TaskCommunication(colander.MappingSchema): """ Communication avec la CAE """ statusComment = forms.textarea_node( title=u'', missing=u'', description=u"Message à destination des membres de la CAE qui \ valideront votre document (n'apparaît pas dans le PDF)", )
class InvoiceConfig(colander.MappingSchema): """ Schema for invoice configuration """ prefix = colander.SchemaNode(colander.String(), title=u"Préfixer les numéros de facture", missing=u"") header = forms.textarea_node( title=u"Cadre d'information spécifique (en entête des factures)", missing=u"", ) payment = forms.textarea_node( title=u"Information de paiement pour les factures", missing=u"", ) late = forms.textarea_node( title=u"Informations sur les délais de paiement", missing=u"", )
class TaskConfiguration(colander.MappingSchema): """ Main fields to be configured """ name = colander.SchemaNode( colander.String(), title=u"Libellé du document", validator=colander.Length(max=255), default=deferred_default_name, missing="", ) customer_id = colander.SchemaNode(colander.Integer(), title=u"Choix du client", widget=deferred_customer_list, validator=deferred_customer_validator) address = forms.textarea_node(title=u"Nom et adresse du client", widget_options={'rows': 4}) phase_id = colander.SchemaNode(colander.String(), title=u"Phase où insérer le devis", widget=deferred_phases_widget, default=deferred_default_phase) taskDate = forms.today_node(title=u"Date du devis") description = forms.textarea_node(title=u"Objet du devis") course = colander.SchemaNode( colander.Integer(), title=u"", label=deferred_course_title, widget=deform.widget.CheckboxWidget(true_val="1", false_val="0"), missing=0, ) display_units = colander.SchemaNode( colander.Integer(), title="", label=u"Afficher le détail des prestations dans la sortie PDF ?", widget=deform.widget.CheckboxWidget(true_val="1", false_val="0"), missing=0, )
class InvoicePayments(colander.MappingSchema): """ Conditions de paiement de la facture """ payment_conditions_select = colander.SchemaNode( colander.String(), widget=forms.get_deferred_select(PaymentConditions), title=u"", missing=colander.drop, ) payment_conditions = forms.textarea_node( title="", default=deferred_default_payment_condition, )
class TaskLineGroupMapping(colander.MappingSchema): title = colander.SchemaNode(colander.String(), title=u"Titre de l'ouvrage") description = forms.textarea_node( title=u"Description", missing=u'', richwidget=False, richtext_options={"height": "100px"}, ) lines = TaskLines( widget=deform.widget.SequenceWidget( template=TEMPLATES_URL + 'tasklines_sequence.pt', add_subitem_text_template=u"Ajouter une prestation à cet ouvrage", orderable=True, ), title=u'', )
class EstimationPayments(colander.MappingSchema): """ Gestion des acomptes """ deposit = colander.SchemaNode( colander.Integer(), title=u"Acompte à la commande", default=0, widget=deform.widget.SelectWidget( values=get_percents(), css_class='col-md-2') ) payment_times = colander.SchemaNode( colander.Integer(), title=u"Paiement en ", default=1, widget=deform.widget.SelectWidget( values=get_payment_times(), css_class='col-md-2' ) ) paymentDisplay = colander.SchemaNode( colander.String(), validator=colander.OneOf([x[0] for x in PAYMENTDISPLAYCHOICES]), widget=deform.widget.RadioChoiceWidget(values=PAYMENTDISPLAYCHOICES), title=u"Affichage des paiements", default="SUMMARY") payment_lines = EstimationPaymentLines( widget=deform.widget.SequenceWidget( template=TEMPLATES_URL + 'paymentlines_sequence.pt', item_template=TEMPLATES_URL + 'paymentlines_sequence_item.pt', min_len=1), title=u'', description=u"Définissez les échéances de paiement") payment_conditions_select = colander.SchemaNode( colander.String(), widget=forms.get_deferred_select(PaymentConditions), title=u"Conditions de paiement prédéfinies", missing=colander.drop, ) payment_conditions = forms.textarea_node( title=u"Conditions de paiement", default=deferred_default_payment_condition, )
class TaskLine(colander.MappingSchema): """ A single estimation line """ description = forms.textarea_node( title=u"Prestation", missing=u'', richwidget=True, richtext_options={"height": "100px"}, css_class='col-md-3', ) cost = colander.SchemaNode(AmountType(), title=u"Prix/unité", widget=deform.widget.TextInputWidget(), css_class='col-md-1') quantity = colander.SchemaNode(QuantityType(), title=u"Quantité", widget=deform.widget.TextInputWidget(), validator=forms.positive_validator, css_class='col-md-1') unity = colander.SchemaNode(colander.String(), title=u"Unité", widget=deferred_unity_widget, validator=deferred_unity_validator, missing=u"", css_class='col-md-2') tva = colander.SchemaNode(Integer(), widget=deferred_tvas_widget, default=deferred_default_tva, validator=deferred_tva_validator, css_class='col-md-1', title=u'TVA') product_id = colander.SchemaNode( colander.Integer(), title=u"Code produit", widget=deferred_product_widget, validator=deferred_product_validator, missing="", css_class="col-md-2", )