Hey there,
I want to sell a digital product through ecommerce module. Its a B2B transaction and I need the following logic. Whenever a customer selects a country that is Intra-Europe and not Germany, the VAT/ID Field shall be required. How to do that? This is the code. As you can see, I removed "phone" from required and added "company_name".
<?xml version="1.0"?>
<t name="Address Management" t-name="website_sale.address">
<t t-set="no_footer">1</t>
<t t-call="website.layout">
<div id="wrap">
<div class="container oe_website_sale">
<div class="row">
<div class="col-md-8 col-md-offset-2 oe_cart">
<div class="row">
<t t-call="website_sale.wizard_checkout">
<t t-set="step" t-value="20"/>
</t>
</div>
<div class="row">
<t t-if="mode == ('new', 'billing')">
<h2 class="page-header mt8 ml16">Your Address
<small> or </small>
<a href="/web/login?redirect=/shop/checkout" class="btn btn-primary" style="margin-top: -11px">Log In</a>
</h2>
</t>
<t t-if="mode == ('edit', 'billing')">
<h2 class="page-header mt8 ml16">Your Address</h2>
</t>
<t t-if="mode[1] == 'shipping'">
<h2 class="page-header mt8 ml16">Shipping Address </h2>
</t>
<t t-if="error" t-foreach="error.get('error_message', [])" t-as="err">
<h4 class="text-danger" t-esc="err"/>
</t>
<form name="/shop/checkout" method="post" class="checkout_autoformat">
<div t-attf-class="form-group #{error.get('name') and 'has-error' or ''} col-md-12 div_name">
<label class="control-label label-optional" for="name">Name</label>
<input type="text" name="name" class="form-control" t-att-value="'name' in checkout and checkout['name']"/>
</div>
<div class="clearfix"/>
<t t-if="mode[1] == 'billing'">
<div t-attf-class="form-group #{error.get('email') and 'has-error' or ''} col-md-6" id="div_email">
<label class="control-label" for="email">Email</label>
<input type="email" name="email" class="form-control" t-att-value="'email' in checkout and checkout['email']"/>
</div>
</t>
<div t-attf-class="form-group #{error.get('phone') and 'has-error' or ''} col-md-6" id="div_phone">
<label class="control-label" for="phone">Phone</label>
<input type="tel" name="phone" class="form-control" t-att-value="'phone' in checkout and checkout['phone']"/>
</div>
<div class="clearfix"/>
<t t-if="mode == ('new', 'billing')">
<div t-attf-class="form-group #{error.get('company_name') and 'has-error' or ''} col-md-6">
<label class="control-label" for="company_name">Company Name</label>
<input type="text" name="company_name" class="form-control" t-att-value="'company_name' in checkout and checkout['company_name']"/>
</div>
<div t-attf-class="form-group #{error.get('vat') and 'has-error' or ''} col-md-6 div_vat">
<label class="control-label font-weight-normal label-optional" for="vat">TIN / VAT </label>
<input type="text" name="vat" class="form-control" t-att-value="'vat' in checkout and checkout['vat']"/>
</div>
</t>
<div class="clearfix"/>
<div t-attf-class="form-group #{error.get('street') and 'has-error' or ''} col-md-12 div_street">
<label class="control-label" for="street">Street <span class="hidden-xs"> and Number</span></label>
<input type="text" name="street" class="form-control" t-att-value="'street' in checkout and checkout['street']"/>
</div>
<div t-attf-class="form-group #{error.get('street2') and 'has-error' or ''} col-md-12 div_street2">
<label class="control-label label-optional" for="street2">Street 2</label>
<input type="text" name="street2" class="form-control" t-att-value="'street2' in checkout and checkout['street2']"/>
</div>
<div class="clearfix"/>
<t t-set="zip_city" t-value="country and [x for x in country.get_address_fields() if x in ["zip", "city"]] or ["city", "zip"]"/>
<t t-if="'zip' in zip_city and zip_city.index('zip') < zip_city.index('city')">
<div t-attf-class="form-group #{error.get('zip') and 'has-error' or ''} col-sm-4 div_zip">
<label class="control-label label-optional" for="zip">Zip Code</label>
<input type="text" name="zip" class="form-control" t-att-value="'zip' in checkout and checkout['zip']"/>
</div>
</t>
<div t-attf-class="form-group #{error.get('city') and 'has-error' or ''} col-sm-8 div_city">
<label class="control-label" for="city">City</label>
<input type="text" name="city" class="form-control" t-att-value="'city' in checkout and checkout['city']"/>
</div>
<t t-if="'zip' in zip_city and zip_city.index('zip') > zip_city.index('city')">
<div t-attf-class="form-group #{error.get('zip') and 'has-error' or ''} col-sm-4 div_zip">
<label class="control-label label-optional" for="zip">Zip Code</label>
<input type="text" name="zip" class="form-control" t-att-value="'zip' in checkout and checkout['zip']"/>
</div>
</t>
<div class="clearfix"/>
<div t-attf-class="form-group #{error.get('country_id') and 'has-error' or ''} col-md-6 div_country">
<label class="control-label" for="country_id">Country</label>
<select id="country_id" name="country_id" class="form-control">
<option value="">Country...</option>
<t t-foreach="countries" t-as="c">
<option t-att-value="c.id" t-att-selected="c.id == (country and country.id or -1)">
<t t-esc="c.name"/>
</option>
</t>
</select>
</div>
<div t-attf-class="form-group #{error.get('state_id') and 'has-error' or ''} col-md-6 div_state" t-att-style="(not country or not country.state_ids) and 'display: none'">
<label class="control-label" for="state_id">State / Province</label>
<select name="state_id" class="form-control" data-init="1">
<option value="">State / Province...</option>
<t t-foreach="country and country.state_ids or []" t-as="s">
<option t-att-value="s.id" t-att-selected="s.id == ('state_id' in checkout and country and checkout['state_id'] != '' and int(checkout['state_id']))">
<t t-esc="s.name"/>
</option>
</t>
</select>
</div>
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<input type="hidden" name="submitted" value="1"/>
<input type="hidden" name="partner_id" t-att-value="partner_id or '0'"/>
<input type="hidden" name="callback" t-att-value="callback"/>
<!-- Example -->
<input type="hidden" name="field_required" t-att-value="'company_name'"/>
<div class="clearfix"/>
<div style="padding: 0 15px">
<a t-att-href="mode == ('new', 'billing') and '/shop/cart' or '/shop/checkout'" class="btn btn-default mb32">
<span class="fa fa-long-arrow-left"/> Back
</a>
<a class="btn btn-primary pull-right mb32 a-submit a-submit-disable a-submit-loading">
<span>Next </span><span class="fa fa-long-arrow-right"/>
</a>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</t>
</t>
Thanks for your help.
Adrian
Hello @Adrian,
I am working on a similar case, did you find the solution?