diff --git a/index.cfm b/index.cfm
index 8c8ed1a..fa968d6 100644
--- a/index.cfm
+++ b/index.cfm
@@ -61,7 +61,7 @@

-
Сверка договоров — LLM v1.0.41 — Lucee
+
Сверка договоров — LLM v1.0.42 — Lucee
@@ -140,6 +140,7 @@
lucide.createIcons();
var UPLOAD_URL = 'https://contracts.kube5s.ru/lucee/upload.cfm';
+var CONVERT_URL = 'https://contracts.kube5s.ru/convert-doc';
var SITE_URL = ''; // same origin for api calls
var fileInput = document.getElementById('fileInput');
@@ -227,26 +228,51 @@ fileInput.addEventListener('change', async function() {
function uploadFile(file, onProgress) {
return new Promise(function(resolve, reject) {
- var xhr = new XMLHttpRequest();
- var fd = new FormData();
- fd.append('files', file);
- if (contractId) fd.append('contract_id', contractId);
+ // .doc → конвертация в docx
+ var isDoc = file.name.toLowerCase().endsWith('.doc') && !file.name.toLowerCase().endsWith('.docx');
+ var uploadFile = file;
+ var uploadName = file.name;
- xhr.open('POST', UPLOAD_URL);
- xhr.upload.onprogress = function(e) {
- if (e.lengthComputable && onProgress) onProgress(Math.round(e.loaded / e.total * 100));
- };
- xhr.onload = function() {
- try {
- var r = JSON.parse(xhr.responseText);
- if (r.OK) resolve(r);
- else reject(new Error(r.ERROR || 'Неизвестная ошибка'));
- } catch(e) { reject(new Error('Некорректный ответ')); }
- };
- xhr.onerror = function() { reject(new Error('Сеть')); };
- xhr.ontimeout = function() { reject(new Error('Таймаут')); };
- xhr.timeout = 180000;
- xhr.send(fd);
+ function doUpload() {
+ var xhr = new XMLHttpRequest();
+ var fd = new FormData();
+ fd.append('files', uploadFile, uploadName);
+ if (contractId) fd.append('contract_id', contractId);
+ xhr.open('POST', UPLOAD_URL);
+ xhr.upload.onprogress = function(e) {
+ if (e.lengthComputable && onProgress) onProgress(Math.round(e.loaded / e.total * 100));
+ };
+ xhr.onload = function() {
+ try {
+ var r = JSON.parse(xhr.responseText);
+ if (r.OK) resolve(r);
+ else reject(new Error(r.ERROR || 'Неизвестная ошибка'));
+ } catch(e) { reject(new Error('Некорректный ответ')); }
+ };
+ xhr.onerror = function() { reject(new Error('Сеть')); };
+ xhr.ontimeout = function() { reject(new Error('Таймаут')); };
+ xhr.timeout = 180000;
+ xhr.send(fd);
+ }
+
+ if (isDoc) {
+ var xhr = new XMLHttpRequest();
+ xhr.open('POST', CONVERT_URL);
+ xhr.responseType = 'blob';
+ xhr.onload = function() {
+ if (xhr.status === 200 && xhr.response.size > 100) {
+ uploadFile = xhr.response;
+ uploadName = file.name.replace(/\.doc$/i, '.docx');
+ doUpload();
+ } else {
+ reject(new Error('Конвертация .doc'));
+ }
+ };
+ xhr.onerror = function() { reject(new Error('Конвертер')); };
+ xhr.send(file);
+ } else {
+ doUpload();
+ }
});
}
diff --git a/parser.cfm b/parser.cfm
index fe3c31b..60aebfe 100644
--- a/parser.cfm
+++ b/parser.cfm
@@ -163,6 +163,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -210,7 +232,7 @@
-
+
@@ -264,7 +286,10 @@
-
+
+
+
+