John
John

Reputation: 23

How can i get a warning pop up before saving

I'm on Odoo 14 and I wonder how can I get a warning message when some require fields are empty before saving.

This is what I try to do :

warning_message = {
            'title': ('Attention!'),
            'message': ('Certains champs requis sont vides, est tu sûr de vouloir sauvegarder?'),
            }
@api.onsave
def onsave_check_fields(self):
    for field in self.fields:
        if field.require == True:
        if field.value == empty:
                if warning_message:
                    return save()
    return save()

Upvotes: 0

Views: 513

Answers (1)

Ahrimann Steiner
Ahrimann Steiner

Reputation: 1314

For Web-forms on your website (front office):

In your xml template (here : id="your_form_template_id") :

    <t t-if="error" t-foreach="error.get('error_message', [])" t-as="err"><h4 class="text-danger" t-esc="err" /></t>

    <form  action="/process_form_inputs">

      <input type="hidden" name="field_required" t-att-value="'phone,name'" />
      <input type="hidden" name="submitted" value="1" />

      <label for="name">Name</label><input type="text" name="name"  value="" />
      <label for="name">Email</label><input type="text" name="email"  value="" />
      <label for="name">Phone</label><input type="text" name="phone"  value="" />
    </form>

For Web-forms on your website (front office), the right place to check form inputs is not in your odoo-model file: your_(inherited)model/models/your_model.py. But in your odoo-controller file : your_(inherited)model/controller/main.py

    @http.route(['/process_form_inputs'], type='http', methods=['GET', 'POST'], auth="public", website=True, sitemap=False)
    def process_form(self, **kw):
       # form input fields,values are sent in kw 
       # IF POSTED
       
       if 'submitted' in kw:
          partner_fields = request.env['res.partner']._fields
          pre_values = { k: (bool(v) and int(v)) if k in partner_fields and partner_fields[k].type == 'many2one' else v for k, v in kw.items()  }
          errors, error_msg = self.onsave_check_fields(kw, pre_values)
           
           if not errors:
               # YOUR CODE TO CREATE OR UPDATE THE MODEL-record : Partner.create(values) or Partner.browse(id).write(values)
               return request.redirect('/success_page')            
           else:
               errors['error_message'] = error_msg
               values = kw 
               render_values={'form_values': values,'error': errors,}
               return request.render("your_module.your_form_template_id", render_values)


     def onsave_check_fields(self, all_form_values, data):
        error = dict()
        error_message = []
        # Required fields from form
        required_fields = [f for f in (all_form_values.get('field_required') or '').split(',') if f]
        # error message for empty required fields
        for field_name in required_fields:
            if not data.get(field_name):
                error[field_name] = 'missing'
        return error, error_message

Upvotes: 1

Related Questions