public function prepare_fields() { $fields = array(); $invoice_id = false; if (isset($this->data['invoice'])) { $invoice = $this->data['invoice']; $invoice_id = $invoice->id; } $profile = MS_Addon_Taxamo_Api::get_tax_profile(); $countries = MS_Addon_Taxamo_Api::get_country_codes(); $action = MS_Addon_Taxamo::AJAX_SAVE_USERPROFILE; $nonce = wp_create_nonce($action); $country_options = array('auto' => sprintf(__('The detected country %s is correct.', MS_TEXT_DOMAIN), '<strong>' . $profile->detected_country->name . '</strong>'), 'vat' => __('I have an EU VAT number and want to use it for tax declaration.', MS_TEXT_DOMAIN), 'declared' => __('Manually declare my country of residence.', MS_TEXT_DOMAIN)); $vat_details = ''; if (!empty($profile->vat_number) && $profile->vat_valid) { $vat_details = sprintf(__('This is a valid VAT number of %s. By using this you are are now exempt of VAT.', MS_TEXT_DOMAIN), '<strong>' . $profile->vat_country->name . '</strong>'); } else { $vat_details = __('VAT Number is invalid.', MS_TEXT_DOMAIN); } if ($profile->use_vat_number) { $tax_message = __('Valid EU VAT Number provided: You are exempt of VAT', MS_TEXT_DOMAIN); } else { $tax_message = __('The country used for tax calculation is %s', MS_TEXT_DOMAIN); } $fields['tax_country_label'] = array('type' => MS_Helper_Html::TYPE_HTML_TEXT, 'title' => sprintf($tax_message, '<strong>' . $profile->tax_country->name . '</strong>'), 'wrapper_class' => 'effective_tax_country'); $fields['detected_country_label'] = array('type' => MS_Helper_Html::TYPE_HTML_TEXT, 'title' => sprintf(__('We have detected that your computer is located in %s', MS_TEXT_DOMAIN), '<strong>' . $profile->detected_country->name . '</strong>')); $fields['detected_country'] = array('type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'id' => 'detected_country', 'value' => $profile->detected_country->code); $fields['country_choice'] = array('type' => MS_Helper_Html::INPUT_TYPE_RADIO, 'id' => 'country_choice', 'class' => 'country_choice', 'value' => $profile->country_choice, 'field_options' => $country_options); $fields['declared_country_code'] = array('type' => MS_Helper_Html::INPUT_TYPE_SELECT, 'id' => 'declared_country', 'title' => __('My country of residence', MS_TEXT_DOMAIN), 'desc' => __('I confirm that I am established, have my permanent address, or usually reside in the following country', MS_TEXT_DOMAIN), 'value' => $profile->declared_country->code, 'field_options' => $countries, 'wrapper_class' => 'manual_country_field'); $fields['vat_number'] = array('type' => MS_Helper_Html::INPUT_TYPE_TEXT, 'id' => 'vat_number', 'title' => __('EU VAT Number', MS_TEXT_DOMAIN), 'desc' => __('Fill this field if you are representing EU VAT payer', MS_TEXT_DOMAIN), 'wrapper_class' => 'vat_number_field', 'value' => $profile->vat_number, 'valid_country' => $profile->vat_country->vat_valid, 'after' => $vat_details); $fields['invoice_id'] = array('type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'id' => 'invoice_id', 'value' => $invoice_id); $fields['action'] = array('type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'id' => 'action', 'value' => $action); $fields['_wpnonce'] = array('type' => MS_Helper_Html::INPUT_TYPE_HIDDEN, 'id' => '_wpnonce', 'value' => $nonce); /* * 1. Checkbox "I confirm that the country of my main residence is in <country>" (in the payment table!) * 4. When VAT is entered the checkbox is disabled and VAT country is used. Checkbox 1 is hidden. */ return apply_filters('ms_addon_taxamo_userprofile_fields', $fields); }
/** * Handle Ajax action to update a user tax-profile field. * * @since 1.0.0 */ public function ajax_save_userprofile() { $response = ''; $isset = array('country_choice', 'declared_country', 'vat_number'); if ($this->verify_nonce() && self::validate_required($isset, 'POST', false)) { $invoice_id = intval($_POST['invoice_id']); $invoice = MS_Factory::load('MS_Model_Invoice', $invoice_id); $data = $_POST; unset($data['invoice_id']); unset($data['action']); unset($data['_wpnonce']); $data['declared_country'] = (object) array('code' => $data['declared_country']); foreach ($data as $field => $value) { $value = apply_filters('ms_addon_taxamo_userprofile_value', $value, $field, $invoice_id, $this); MS_Addon_Taxamo_Api::set_tax_profile($field, $value); } // User profile updated. Now update the tax-rate in the invoice. if ($invoice->is_valid()) { $profile = MS_Addon_Taxamo_Api::get_tax_profile(); $invoice->set_custom_data('tax_profile', $profile); $invoice->total_amount_changed(); $invoice->save(); } $view = MS_Factory::load('MS_Addon_Taxamo_Userprofile'); $view->data = apply_filters('ms_addon_taxamo_editor_data', array('invoice' => $invoice), $this); $response = trim($view->to_html()); } wp_die($response); }