refactor profile and clientspage

remotes/origin/mitri4
Dmitriy Shesterkin 9 years ago
parent c17ed1b3d4
commit d56fc92cdb
  1. 14
      project/customer/forms.py
  2. 30
      project/static/css/style.css
  3. 6
      project/static/js/client.commons.js
  4. 59
      project/static/js/dialogs.js
  5. 5
      project/templates/base.html
  6. 41
      project/templates/customer/clients/form.html
  7. 138
      project/templates/customer/clients/list.html
  8. 71
      project/templates/customer/profile/edit.html

@ -228,10 +228,10 @@ class ClientForm(forms.ModelForm):
) )
_textarea = forms.Textarea(attrs={'cols': 80, 'rows': 3}) _textarea = forms.Textarea(attrs={'cols': 80, 'rows': 3})
widgets = { widgets = {
#'name': _textarea, 'bank_bik': forms.HiddenInput(),
#'address': _textarea, 'bank_name': forms.HiddenInput(),
'bank_name': _textarea, 'short_name': forms.HiddenInput(),
#'contact_other': _textarea, 'bank_korr_account': forms.HiddenInput(),
} }
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -240,9 +240,9 @@ class ClientForm(forms.ModelForm):
self.fields['kpp'].widget.attrs.update(_numeric(self.fields['kpp'])) self.fields['kpp'].widget.attrs.update(_numeric(self.fields['kpp']))
self.fields['ogrn'].widget.attrs.update(_numeric(self.fields['ogrn'])) self.fields['ogrn'].widget.attrs.update(_numeric(self.fields['ogrn']))
self.fields['okpo'].widget.attrs.update(_numeric(self.fields['okpo'])) self.fields['okpo'].widget.attrs.update(_numeric(self.fields['okpo']))
self.fields['bank_bik'].widget.attrs.update(_numeric(self.fields['bank_bik'])) # self.fields['bank_bik'].widget.attrs.update(_numeric(self.fields['bank_bik']))
self.fields['bank_korr_account'].widget.attrs.update(_numeric(self.fields['bank_korr_account'])) # self.fields['bank_korr_account'].widget.attrs.update(_numeric(self.fields['bank_korr_account']))
self.fields['bank_account'].widget.attrs.update(_numeric(self.fields['bank_account'])) # self.fields['bank_account'].widget.attrs.update(_numeric(self.fields['bank_account']))
class ClientAdminForm(ClientForm): class ClientAdminForm(ClientForm):

@ -258,10 +258,11 @@ h2 {font-weight: normal;font-size:24px;font-family:"Arial Narrow", Arial, sans-s
.client-edit-form_dlg .ui-dialog-buttonpane { .client-edit-form_dlg .ui-dialog-buttonpane {
background:none!important; background:none!important;
border:0; border:0;
position:absolute; /*position:absolute;*/
bottom:0; /*bottom:0;*/
right:100px; /*right:100px;*/
padding:15px 0; /*padding:15px 0;*/
margin-top: -56px;
} }
ul.messagelist { padding: 0 0 5px 0; margin: 0; } ul.messagelist { padding: 0 0 5px 0; margin: 0; }
@ -732,4 +733,23 @@ a.popup-unreg {background:url(../img/popup-trash.png) no-repeat 3px center;}
.bank-account-label { .bank-account-label {
padding: 0 15px 0 40px; padding: 0 15px 0 40px;
} }
.search__label {
padding-left: 13px;
}
.search__input_long,
#searchClientInput,
#searchClientBankInput {
width: 556px;
height: 32px;
}
#client-edit-form #address .field {
}
#client-edit-form #id_address {
width: 550px;
}

@ -39,7 +39,6 @@ function setup_client_edit_links(form, reload_on_success) {
$('table#clients td a.client.edit-link').each(function() { $('table#clients td a.client.edit-link').each(function() {
$(this).on('click', function() { $(this).on('click', function() {
var link = $(this); var link = $(this);
var form_action = link.attr('href') + 'ajax/'; // url to post form var form_action = link.attr('href') + 'ajax/'; // url to post form
if (typeof(reload_on_success)!=='undefined' && reload_on_success) if (typeof(reload_on_success)!=='undefined' && reload_on_success)
form_action += '?reload_on_success'; form_action += '?reload_on_success';
@ -48,12 +47,10 @@ function setup_client_edit_links(form, reload_on_success) {
form.clearForm(); form.clearForm();
clear_form_errors(form); clear_form_errors(form);
var get_url = link.attr('href').replace('edit/', 'get/ajax/'); // url to fetch client fields var get_url = link.attr('href').replace('edit/', 'get/ajax/'); // url to fetch client fields
var obj_values = fetch_data(get_url); var obj_values = fetch_data(get_url);
update_form_fields(form, obj_values); update_form_fields(form, obj_values);
fillResultSearchBankTemplate(obj_values);
form.dialog('open'); form.dialog('open');
return false; return false;
}); });
@ -98,6 +95,7 @@ function setup_client_add_link(form, reload_on_success) {
form.clearForm(); form.clearForm();
clear_form_errors(form); clear_form_errors(form);
clearResultSearchDiv($("#searchBankResult"));
form.dialog('open'); form.dialog('open');
return false; return false;

@ -144,7 +144,6 @@ function update_form_fields(form, obj_values) {
var input_type = input.attr('type'); var input_type = input.attr('type');
if (input_type == 'checkbox' || input_type == 'radio') { if (input_type == 'checkbox' || input_type == 'radio') {
// console.log("---- value", value);
input.prop('checked', value); input.prop('checked', value);
} else { } else {
input.val(value); input.val(value);
@ -154,9 +153,67 @@ function update_form_fields(form, obj_values) {
} }
} }
//-------------------------------------------------------
function expandObject(obj, width, align) {
obj["templateColWidth"] = width;
obj["templateColAlign"] = align;
return obj
}
function clearResultSearchDiv(div) { function clearResultSearchDiv(div) {
if ($(div).html().trim() !== '') { if ($(div).html().trim() !== '') {
div.html(''); div.html('');
} }
}
function clearSearchInputs(input) {
if (input instanceof Array) {
var index, len;
for (index = 0, len = input.length; index < len; ++index) {
var item = input[index];
item.val('');
}
} else {
input.val('');
}
}
function join(arr) {
var separator = arguments.length > 1 ? arguments[1] : ", ";
return arr.filter(function(n){return n}).join(separator);
}
function fillResultSearchBankTemplate(obj) {
var bankResultDiv = $("#searchBankResult");
var templateBank = $("#resultSearchBankTemplate").html();
var template = Handlebars.compile(templateBank);
var newObj = {};
newObj['name'] = {};
if (obj.hasOwnProperty('bik')) {
newObj["bic"] = obj.bik;
newObj["name"]["full"] = obj.name;
newObj["name"]["payment"] = obj.short_name;
newObj["correspondent_account"] = obj.korr_account;
obj = newObj;
}
if (obj.hasOwnProperty('bank_bik')) {
newObj["bic"] = obj.bank_bik;
newObj["name"]["full"] = obj.bank_name;
newObj["name"]["payment"] = obj.bank_name;
newObj["correspondent_account"] = obj.bank_korr_account;
obj = newObj;
}
bankResultDiv.html(template(obj));
} }

@ -166,6 +166,11 @@
<script src="{{ STATIC_URL }}js/dialogs.js"></script> <script src="{{ STATIC_URL }}js/dialogs.js"></script>
<script src="{{ STATIC_URL }}js/callback.js"></script> <script src="{{ STATIC_URL }}js/callback.js"></script>
{% include 'autocomplete_light/static.html' %} {% include 'autocomplete_light/static.html' %}
<script>
$(document).ready(function() {
window.daDataExternalApiKey = "{{ dadata_api_key }}";
});
</script>
{% endblock %} {% endblock %}
{% block js %}{% endblock %} {% block js %}{% endblock %}

@ -7,6 +7,17 @@
<form id="client-edit-form" class="client-form{% if is_ajax %} ajax-form{% endif %}" action="" method="post"{% if is_ajax %} title="Добавить / редактировать контрагента"{% endif %}> <form id="client-edit-form" class="client-form{% if is_ajax %} ajax-form{% endif %}" action="" method="post"{% if is_ajax %} title="Добавить / редактировать контрагента"{% endif %}>
{% csrf_token %} {% csrf_token %}
<div class="search__container">
<div class="field">
<div class="left label search__label">
Поиск реквизитов:
</div>
<div class="form-field">
<input id="searchClientInput" class="search__input search__input_long" maxlength="256" autocomplete="off" name="searchClientInput" type="text" placeholder="Введите название в свободной форме, адрес, ИНН или ОГРН">
</div>
<div class="clear"></div>
</div>
</div>
{% for hidden in form.hidden_fields %} {% for hidden in form.hidden_fields %}
{{ hidden }} {{ hidden }}
@ -71,20 +82,31 @@
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<div id="address" class="field"> <div id="address" class="field" style="width: 700px;margin-bottom: 5px;">
<div class="left label"> <div class="left label">
Юр. адрес{% if form.address.field.required %}<span class="required">*</span>{% endif %}: Юр. адрес{% if form.address.field.required %}<span class="required">*</span>{% endif %}:
</div> </div>
<div class="form-field"> <div class="form-field ">
{{ form.address }} {{ form.address }}
{% if not is_ajax %}{{ form.address.errors }}{% endif %} {% if not is_ajax %}{{ form.address.errors }}{% endif %}
</div> </div>
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<div class="bank-header">Банковские реквизиты</div> <div class="search-bank" style="width: 803px;">
<div class="search__container">
<div class="left label search__label">
Поиск банка:
</div>
<div class="form-field">
<input class="search__input search__input_long" id="searchClientBankInput" placeholder="Введите название, БИК или SWIFT" type="text">
</div>
</div>
<div id="searchBankResult"></div>
</div>
{% if not form.bank_bik.is_hidden %}
<div id="bank_bik" class="field"> <div id="bank_bik" class="field">
<div class="left label"> <div class="left label">
БИК{% if form.bank_bik.field.required %}<span class="required">*</span>{% endif %}: БИК{% if form.bank_bik.field.required %}<span class="required">*</span>{% endif %}:
</div> </div>
@ -94,7 +116,8 @@
</div> </div>
<div class="clear"></div> <div class="clear"></div>
</div> </div>
{% endif %}
{% if not form.bank_name.is_hidden %}
<div id="bank_name" class="field"> <div id="bank_name" class="field">
<div class="left label"> <div class="left label">
Наименование банка{% if form.bank_name.field.required %}<span class="required">*</span>{% endif %}: Наименование банка{% if form.bank_name.field.required %}<span class="required">*</span>{% endif %}:
@ -105,7 +128,7 @@
</div> </div>
<div class="clear"></div> <div class="clear"></div>
</div> </div>
{% endif %}
{% comment %} {% comment %}
<div id="bank_address" class="field"> <div id="bank_address" class="field">
<div class="left label"> <div class="left label">
@ -118,18 +141,20 @@
<div class="clear"></div> <div class="clear"></div>
</div> </div>
{% endcomment %} {% endcomment %}
{% if not form.bank_korr_account.is_hidden %}
<div id="bank_korr_account" class="field"> <div id="bank_korr_account" class="field">
<div class="left label"> <div class="left label">
К/сч.{% if form.bank_korr_account.field.required %}<span class="required">*</span>{% endif %}: К/сч.{% if form.bank_korr_account.field.required %}<span class="required">*</span>{% endif %}:
</div> </div>
<div class="form-field"> <div class="form-field">
{{ form.bank_korr_account }} {{ form.bank_korr_account }}
{% if not is_ajax %}{{ form.bank_korr_account.errors }}{% endif %} {% if not is_ajax %}{{ form.bank_korr_account.errors }}{% endif %}
</div> </div>
<div class="clear"></div> <div class="clear"></div>
</div> </div>
{% endif %}
<div id="bank_account" class="field"> <div id="bank_account" class="field">
<div class="left label"> <div class="left label">
Р/сч.{% if form.bank_account.field.required %}<span class="required">*</span>{% endif %}: Р/сч.{% if form.bank_account.field.required %}<span class="required">*</span>{% endif %}:

@ -53,29 +53,63 @@
<script src="{{ STATIC_URL }}js/lib/jquery.suggestions.min.js"></script> <script src="{{ STATIC_URL }}js/lib/jquery.suggestions.min.js"></script>
<script> <script>
$(document).ready(function() {
var index, var clientForm = $("#client-edit-form"),
clientForm = $("#client-edit-form"), clientSearch = $("#searchClientInput", clientForm),
clientName = $("#id_name", clientForm), clientName = $("#id_name", clientForm),
clientInn = $("#id_inn", clientForm), clientInn = $("#id_inn", clientForm),
clientKpp = $("#id_kpp", clientForm), clientKpp = $("#id_kpp", clientForm),
clientOqrn = $("#id_ogrn", clientForm), clientOqrn = $("#id_ogrn", clientForm),
clientAddress = $("#id_address", clientForm), clientAddress = $("#id_address", clientForm),
bankSearch = $("#searchClientBankInput", clientForm),
bankBic = $("#id_bank_bik", clientForm), bankBic = $("#id_bank_bik", clientForm),
bankFullName = $("#id_bank_name", clientForm), bankFullName = $("#id_bank_name", clientForm),
bankCorrespondentAccount = $("#id_bank_korr_account", clientForm), bankCorrespondentAccount = $("#id_bank_korr_account", clientForm),
bankInputs = [bankBic, bankFullName, bankCorrespondentAccount], clientInputs = [clientName, clientInn, clientOqrn, clientAddress];
clientInputs = [clientName, clientInn, clientKpp, clientOqrn];
function confirmChangeDataPromise(inputArray) {
var dlg_msg = $('#dialog-message');
var emptyInput = true;
var defer = $.Deferred();
for (var i = inputArray.length - 1; i >= 0; --i) {
if (inputArray[i].val()) {
emptyInput = false;
break;
}
}
if (!emptyInput) {
dlg_msg.dialog({
title: 'Изменить данные',
buttons:
{'Да':
function(){
defer.resolve(true);
$(this).dialog('close');
}, 'Нет':
function(){
defer.resolve(false);
$(this).dialog('close');
}
}
}).html('Имеются уже заполненные данные, они будут изменены, продолжить?');
dlg_msg.dialog('open');
function join(arr) { } else {
var separator = arguments.length > 1 ? arguments[1] : ", "; defer.resolve(true);
return arr.filter(function(n){return n}).join(separator); }
return defer.promise();
} }
function showSuggestion(suggestion) { function cleanSearchInput() {
clientSearch.val('');
}
var data = suggestion.data; function changeDataInInputs(data) {
if (!data) return;
if (data.type === "LEGAL"|| data.type === "INDIVIDUAL" ) { if (data.type === "LEGAL"|| data.type === "INDIVIDUAL" ) {
if (data.name) if (data.name)
clientName.val(join([data.opf && data.opf.short || "", data.name.short || data.name.full], " ")); clientName.val(join([data.opf && data.opf.short || "", data.name.short || data.name.full], " "));
@ -95,27 +129,91 @@
} }
bankBic.val(data.bic); bankBic.val(data.bic);
bankCorrespondentAccount.val(data.correspondent_account); bankCorrespondentAccount.val(data.correspondent_account);
var advancedObj = expandObject(data, 118, "right");
fillResultSearchBankTemplate(advancedObj);
}
}
function showSuggestion(suggestion) {
var data = suggestion.data;
if (!data) return;
if (data.type === "LEGAL"|| data.type === "INDIVIDUAL" ) {
confirmChangeDataPromise(clientInputs).then(function (answer) {
if (answer) {
changeDataInInputs(data)
}
cleanSearchInput();
}) ;
} else {
changeDataInInputs(data)
} }
} }
function fillInput(input, type) { function fillInput(input, type, count) {
input.suggestions({ input.suggestions({
token: "{{ dadata_api_key }}", token: daDataExternalApiKey,
type: type, type: type,
count: 5, count: count,
onSelect: showSuggestion onSelect: showSuggestion
}); });
} }
for (index = clientInputs.length - 1; index >= 0; --index) { bankSearch.on('keyup',(function () {
fillInput(clientInputs[index], "PARTY" ); if (bankSearch.val().length === 0) {
} clearResultSearchDiv($("#searchBankResult"));
clearSearchInputs([bankFullName, bankBic, bankCorrespondentAccount]);
}
}));
for (index = bankInputs.length - 1; index >= 0; --index) { clientSearch.on('keyup',(function () {
fillInput(bankInputs[index], "BANK" ); if (clientSearch.val().length === 0) {
} clearSearchInputs([clientName, clientInn, clientKpp, clientOqrn, clientAddress]);
} else {
}
}));
fillInput(clientSearch, "PARTY", 5);
fillInput(bankSearch, "BANK", 1);
});
</script>
{# TODO: to carry out #}
{% verbatim %}
<script id="resultSearchBankTemplate" type="text/x-handlebars-template">
<table>
<tbody>
<tr>
<td width="{{ templateColWidth }}" align="{{ templateColAlign }}">Наименование:</td>
{{#if name.full}}
<td>{{ name.full }}</td>
{{else}}
<td>{{ name.payment }}</td>
{{/if}}
</tr>
<tr>
<td></td>
<td><span class="bank-short-name">{{ name.payment }}</span></td>
</tr>
<tr>
<td width="{{ templateColWidth }}" align="{{ templateColAlign }}">БИК:</td>
<td>
<span class="bank-bic">{{ bic }}</span>
<span class="bank-account-label">К/сч:</span>
<span class="bank-account">{{ correspondent_account }}</span>
</td>
</tr>
</tbody>
</table>
</script> </script>
{% endverbatim %}
{% endblock %} {% endblock %}

@ -551,9 +551,25 @@
<script src="{{ STATIC_URL }}js/lib/jquery.suggestions.min.js"></script> <script src="{{ STATIC_URL }}js/lib/jquery.suggestions.min.js"></script>
<script>
$(document).ready(function() {
var False = false,
True = true;
window.isOrg = {{ profile.is_org }};
});
</script>
<script> <script>
function getType() {
return isOrg ? "LEGAL" : "INDIVIDUAL";
}
function getPartOfPersonName(fullName, part) {
if (!fullName) return;
return fullName.split(' ')[part];
}
$(document).ready(function() { $(document).ready(function() {
var paramsType, var paramsType,
@ -570,22 +586,6 @@
profilePostalAddress = $("#id_real_address", profileForm), profilePostalAddress = $("#id_real_address", profileForm),
profileInputs = []; profileInputs = [];
function getType() {
var False = false,
True = true,
isOrg = {{ profile.is_org }};
return isOrg ? "LEGAL" : "INDIVIDUAL";
}
function join(arr) {
var separator = arguments.length > 1 ? arguments[1] : ", ";
return arr.filter(function(n){return n}).join(separator);
}
function getPartOfPersonName(fullName, part) {
if (!fullName) return;
return fullName.split(' ')[part];
}
function confirmChangeDataPromise(inputArray) { function confirmChangeDataPromise(inputArray) {
var dlg_msg = $('#dialog-message'); var dlg_msg = $('#dialog-message');
@ -718,7 +718,7 @@
} }
profileSearch.suggestions({ profileSearch.suggestions({
token: "{{ dadata_api_key }}", token: daDataExternalApiKey,
type: "PARTY", type: "PARTY",
params: { params: {
type: paramsType type: paramsType
@ -745,19 +745,17 @@
var data = suggestion.data; var data = suggestion.data;
if (!data) return; if (!data) return;
//console.log("----",data);
bankShortName.val(data.name && data.name.payment || ""); bankShortName.val(data.name && data.name.payment || "");
bankFullName.val(data.name && data.name.full && data.name.payment || ""); bankFullName.val(data.name && data.name.full && data.name.payment || "");
bankBic.val(data.bic); bankBic.val(data.bic);
bankCorrespondentAccount.val(data.correspondent_account); bankCorrespondentAccount.val(data.correspondent_account);
fillResultSearchBankTemplate(data); var advancedObj = expandObject(data, 110, "left");
fillResultSearchBankTemplate(advancedObj);
} }
bankSearch.suggestions({ bankSearch.suggestions({
token: "{{ dadata_api_key }}", token: daDataExternalApiKey,
type: "BANK", type: "BANK",
count: 2, count: 2,
onSelect: showSuggestion onSelect: showSuggestion
@ -766,39 +764,21 @@
bankSearch.on('keyup',(function () { bankSearch.on('keyup',(function () {
if (bankSearch.val().length === 0) { if (bankSearch.val().length === 0) {
clearResultSearchDiv($("#searchBankResult")); clearResultSearchDiv($("#searchBankResult"));
clearSearchInputs([bankFullName, bankShortName, bankBic, bankCorrespondentAccount]);
} }
})); }));
}); });
function fillResultSearchBankTemplate(obj) {
var bankResultDiv = $("#searchBankResult");
var templateBank = $("#resultSearchBankTemplate").html();
var template = Handlebars.compile(templateBank);
if (obj.bik) {
var newObj = {};
newObj["bic"] = obj.bik;
newObj['name'] = {};
newObj["name"]["full"] = obj.name;
newObj["name"]["payment"] = obj.short_name;
newObj["correspondent_account"] = obj.korr_account;
obj = newObj;
}
//console.log("----", obj);
bankResultDiv.html(template(obj));
}
</script> </script>
{# TODO: to carry out #}
{% verbatim %} {% verbatim %}
<script id="resultSearchBankTemplate" type="text/x-handlebars-template"> <script id="resultSearchBankTemplate" type="text/x-handlebars-template">
<table> <table>
<tbody> <tbody>
<tr> <tr>
<td width="110">Наименование:</td> <td width="{{ templateColWidth }}" align="{{ templateColAlign }}">Наименование:</td>
{{#if name.full}} {{#if name.full}}
<td>{{ name.full }}</td> <td>{{ name.full }}</td>
{{else}} {{else}}
@ -810,7 +790,7 @@
<td><span class="bank-short-name">{{ name.payment }}</span></td> <td><span class="bank-short-name">{{ name.payment }}</span></td>
</tr> </tr>
<tr> <tr>
<td>БИК:</td> <td width="{{ templateColWidth }}" align="{{ templateColAlign }}">БИК:</td>
<td> <td>
<span class="bank-bic">{{ bic }}</span> <span class="bank-bic">{{ bic }}</span>
<span class="bank-account-label">К/сч:</span> <span class="bank-account-label">К/сч:</span>
@ -822,5 +802,4 @@
</script> </script>
{% endverbatim %} {% endverbatim %}
{% endblock js %} {% endblock js %}
Loading…
Cancel
Save