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})
widgets = {
#'name': _textarea,
#'address': _textarea,
'bank_name': _textarea,
#'contact_other': _textarea,
'bank_bik': forms.HiddenInput(),
'bank_name': forms.HiddenInput(),
'short_name': forms.HiddenInput(),
'bank_korr_account': forms.HiddenInput(),
}
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['ogrn'].widget.attrs.update(_numeric(self.fields['ogrn']))
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_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_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_account'].widget.attrs.update(_numeric(self.fields['bank_account']))
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 {
background:none!important;
border:0;
position:absolute;
bottom:0;
right:100px;
padding:15px 0;
/*position:absolute;*/
/*bottom:0;*/
/*right:100px;*/
/*padding:15px 0;*/
margin-top: -56px;
}
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 {
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() {
$(this).on('click', function() {
var link = $(this);
var form_action = link.attr('href') + 'ajax/'; // url to post form
if (typeof(reload_on_success)!=='undefined' && reload_on_success)
form_action += '?reload_on_success';
@ -48,12 +47,10 @@ function setup_client_edit_links(form, reload_on_success) {
form.clearForm();
clear_form_errors(form);
var get_url = link.attr('href').replace('edit/', 'get/ajax/'); // url to fetch client fields
var obj_values = fetch_data(get_url);
update_form_fields(form, obj_values);
fillResultSearchBankTemplate(obj_values);
form.dialog('open');
return false;
});
@ -98,6 +95,7 @@ function setup_client_add_link(form, reload_on_success) {
form.clearForm();
clear_form_errors(form);
clearResultSearchDiv($("#searchBankResult"));
form.dialog('open');
return false;

@ -144,7 +144,6 @@ function update_form_fields(form, obj_values) {
var input_type = input.attr('type');
if (input_type == 'checkbox' || input_type == 'radio') {
// console.log("---- value", value);
input.prop('checked', value);
} else {
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) {
if ($(div).html().trim() !== '') {
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/callback.js"></script>
{% include 'autocomplete_light/static.html' %}
<script>
$(document).ready(function() {
window.daDataExternalApiKey = "{{ dadata_api_key }}";
});
</script>
{% 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 %}>
{% 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 %}
{{ hidden }}
@ -71,20 +82,31 @@
<div class="clear"></div>
</div>
<div id="address" class="field">
<div id="address" class="field" style="width: 700px;margin-bottom: 5px;">
<div class="left label">
Юр. адрес{% if form.address.field.required %}<span class="required">*</span>{% endif %}:
</div>
<div class="form-field">
<div class="form-field ">
{{ form.address }}
{% if not is_ajax %}{{ form.address.errors }}{% endif %}
</div>
<div class="clear"></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 class="left label">
БИК{% if form.bank_bik.field.required %}<span class="required">*</span>{% endif %}:
</div>
@ -94,7 +116,8 @@
</div>
<div class="clear"></div>
</div>
{% endif %}
{% if not form.bank_name.is_hidden %}
<div id="bank_name" class="field">
<div class="left label">
Наименование банка{% if form.bank_name.field.required %}<span class="required">*</span>{% endif %}:
@ -105,7 +128,7 @@
</div>
<div class="clear"></div>
</div>
{% endif %}
{% comment %}
<div id="bank_address" class="field">
<div class="left label">
@ -118,18 +141,20 @@
<div class="clear"></div>
</div>
{% endcomment %}
{% if not form.bank_korr_account.is_hidden %}
<div id="bank_korr_account" class="field">
<div class="left label">
К/сч.{% if form.bank_korr_account.field.required %}<span class="required">*</span>{% endif %}:
</div>
<div class="form-field">
{{ form.bank_korr_account }}
{% if not is_ajax %}{{ form.bank_korr_account.errors }}{% endif %}
</div>
<div class="clear"></div>
</div>
{% endif %}
<div id="bank_account" class="field">
<div class="left label">
Р/сч.{% 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>
var index,
clientForm = $("#client-edit-form"),
$(document).ready(function() {
var clientForm = $("#client-edit-form"),
clientSearch = $("#searchClientInput", clientForm),
clientName = $("#id_name", clientForm),
clientInn = $("#id_inn", clientForm),
clientKpp = $("#id_kpp", clientForm),
clientOqrn = $("#id_ogrn", clientForm),
clientAddress = $("#id_address", clientForm),
bankSearch = $("#searchClientBankInput", clientForm),
bankBic = $("#id_bank_bik", clientForm),
bankFullName = $("#id_bank_name", clientForm),
bankCorrespondentAccount = $("#id_bank_korr_account", clientForm),
bankInputs = [bankBic, bankFullName, bankCorrespondentAccount],
clientInputs = [clientName, clientInn, clientKpp, clientOqrn];
clientInputs = [clientName, clientInn, clientOqrn, clientAddress];
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) {
var separator = arguments.length > 1 ? arguments[1] : ", ";
return arr.filter(function(n){return n}).join(separator);
} else {
defer.resolve(true);
}
return defer.promise();
}
function showSuggestion(suggestion) {
function cleanSearchInput() {
clientSearch.val('');
}
var data = suggestion.data;
if (!data) return;
function changeDataInInputs(data) {
if (data.type === "LEGAL"|| data.type === "INDIVIDUAL" ) {
if (data.name)
clientName.val(join([data.opf && data.opf.short || "", data.name.short || data.name.full], " "));
@ -95,27 +129,91 @@
}
bankBic.val(data.bic);
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({
token: "{{ dadata_api_key }}",
token: daDataExternalApiKey,
type: type,
count: 5,
count: count,
onSelect: showSuggestion
});
}
for (index = clientInputs.length - 1; index >= 0; --index) {
fillInput(clientInputs[index], "PARTY" );
}
bankSearch.on('keyup',(function () {
if (bankSearch.val().length === 0) {
clearResultSearchDiv($("#searchBankResult"));
clearSearchInputs([bankFullName, bankBic, bankCorrespondentAccount]);
}
}));
for (index = bankInputs.length - 1; index >= 0; --index) {
fillInput(bankInputs[index], "BANK" );
}
clientSearch.on('keyup',(function () {
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>
{% endverbatim %}
{% endblock %}

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