· 6 years ago · Nov 21, 2019, 06:54 AM
1const API = {
2 organizationList: '/orgsList',
3 analytics: '/api3/analytics',
4 orgReqs: '/api3/reqBase',
5 buhForms: '/api3/buh',
6};
7
8async function run() {
9 const orgOgrns = await sendRequest(API.organizationList);
10 const ogrns = orgOgrns.join(',');
11 const requisites = await sendRequest(`${API.orgReqs}?ogrn=${ogrns}`);
12 const orgsMap = reqsToMap(requisites);
13 const analytics = await sendRequest(`${API.analytics}?ogrn=${ogrns}`);
14 addInOrgsMap(orgsMap, analytics, 'analytics');
15 const buh = await sendRequest(`${API.buhForms}?ogrn=${ogrns}`);
16 addInOrgsMap(orgsMap, buh, 'buhForms');
17 render(orgsMap, orgOgrns);
18}
19
20run();
21
22function sendRequest (url) {
23 return fetch(url)
24 .then(function(response){
25 if (!response.ok) {
26 alert(response.status);
27 }
28 return response.json();
29 });
30}
31
32function reqsToMap (requisites) {
33 return requisites.reduce((acc, item) => {
34 acc[item.ogrn] = item;
35 return acc;
36 }, {});
37}
38
39function addInOrgsMap (orgsMap, additionalInfo, key) {
40 for (const item of additionalInfo) {
41 orgsMap[item.ogrn][key] = item[key];
42 }
43}
44
45function render (organizationsInfo, organizationsOrder) {
46 const table = document.getElementById('organizations');
47 table.classList.remove('hide');
48
49 const template = document.getElementById('orgTemplate');
50 const container = table.querySelector('tbody');
51
52
53 organizationsOrder.forEach(item => {
54 renderOrganization(organizationsInfo[item], template, container);
55 });
56}
57
58function renderOrganization (orgInfo, template, container) {
59 const clone = document.importNode(template.content, true);
60 const name = clone.querySelector('.name');
61 const indebtedness = clone.querySelector('.indebtedness');
62 const money = clone.querySelector('.money');
63 const address = clone.querySelector('.address');
64
65 name.textContent = (orgInfo.UL && orgInfo.UL.legalName && orgInfo.UL.legalName.short) || '';
66 indebtedness.textContent = formatMoney(orgInfo.analytics.s1002 || 0);
67
68 if (orgInfo.buhForms && orgInfo.buhForms.length && orgInfo.buhForms[orgInfo.buhForms.length -1] &&
69 orgInfo.buhForms[orgInfo.buhForms.length -1].year === 2017) {
70 money.textContent = formatMoney((orgInfo.buhForms[orgInfo.buhForms.length -1].form2 &&
71 orgInfo.buhForms[orgInfo.buhForms.length -1].form2[0] &&
72 orgInfo.buhForms[orgInfo.buhForms.length -1].form2[0].endValue) || 0);
73 } else {
74 money.textContent = '—';
75 }
76
77 const addressFromServer = orgInfo.UL.legalAddress.parsedAddressRF;
78 address.textContent = createAddress(addressFromServer);
79
80 container.appendChild(clone);
81}
82
83function formatMoney (money) {
84 let formatted = money.toFixed(2);
85 formatted = formatted.replace('.', ',');
86
87 const rounded = money.toFixed(0);
88 const numLen = rounded.length;
89 for (let i = numLen - 3; i > 0; i -= 3) {
90 formatted = `${formatted.slice(0, i)} ${formatted.slice(i)}`;
91 }
92
93 return `${formatted} ₽`;
94}
95
96function createAddress (address) {
97 const addressToRender = [];
98 if (address.regionName) {
99 addressToRender.push(createAddressItem('regionName'));
100 }
101 if (address.city) {
102 addressToRender.push(createAddressItem('city'));
103 }
104 if (address.street) {
105 addressToRender.push(createAddressItem('street'));
106 }
107 if (address.house) {
108 addressToRender.push(createAddressItem('house'));
109 }
110
111 return addressToRender.join(', ');
112
113 function createAddressItem (key) {
114 return `${address[key].topoShortName}. ${address[key].topoValue}`;
115 }
116}