1
Changeset 981 – MultiMag

Changeset 981


Ignore:
Timestamp:
Sep 5, 2018, 11:13:50 AM (3 weeks ago)
Author:
blacklight
Message:
  • В импорте банковских документов -- Исправлена ошибка, из-за которой расходы привязывались к заявкам -- Реализована привязка документов к реализациям, поступлениям, товарам в пути -- Добавлена возможность отключения привязки к документу-основанию для приходов и расходов индивидуально -- Проведён рефакторинг модуля
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/web/include/doc_scripts/bank_import.php

    r963 r981  
    2222/// Сценарий автоматизации:  Импорт банковской выписки
    2323class ds_bank_import {
    24    
     24
    2525    protected $agent_rs;    //< Расчётные счета и связанные агенты
    2626    protected $agent_inns;  //< ИНН и связанные агенты
    27 
    28     function getForm() {
    29         $max_fs = \webcore::getMaxUploadFileSize();
    30         $max_fs_size = \webcore::toStrDataSizeInaccurate($max_fs);
    31         return "<h1>" . $this->getname() . "</h1>
    32             <form action='' method='post' enctype='multipart/form-data'>
    33             <input type='hidden' name='mode' value='load'>
    34             <input type='hidden' name='param' value='i'>
    35             <input type='hidden' name='sn' value='bank_import'>
    36 
    37             Файл банковской выписки:<br>
    38             <small>В формате 1с v 1.01, $max_fs_size максимум.</small><br>
    39             <input type='hidden' name='MAX_FILE_SIZE' value='$max_fs'><input name='userfile' type='file'><br>
    40             <label><input type='checkbox' name='process_in' value='1' checked>Обработать приходы</label><br>
    41             <label><input type='checkbox' name='process_out' value='1'>Обработать расходы</label><br>
    42             <label><input type='checkbox' name='apply' value='1'>Провести документы</label><br>
    43             <label><input type='checkbox' name='no_create_agents' value='1'>Не создавать агентов (может привести к дублированию ордеров)</label><br>
    44             <label><input type='checkbox' name='no_create_br' value='1'>Не добавлять существующим агентам новые банковские реквизиты</label><br>
    45             Подтип документов:<br>
    46             <input type='text' name='subtype' maxlength='5'><br>
    47             <button type='submit'>Выполнить</button>
    48             </form>
    49             <p>Проверка принадлежности агента происходит по расчётному счёту.</p>";
     27   
     28    public function getName() {
     29        return "Импорт банковских документов";
    5030    }
    5131   
    5232    /// Список счетов агентов
    53     function loadAgentsData() {
     33    protected function loadAgentsData() {
    5434        global $db;
    5535        $this->agent_rs = array();
     
    7252            }
    7353        }
     54    }
     55   
     56    /// Получить список наших банков
     57    protected function getMyBanksData() {
     58        global $db;
     59        $banks = [];
     60        $res = $db->query("SELECT `num` AS `bank_id`, `firm_id`, `rs` FROM `doc_kassa` WHERE `ids`='bank'");
     61        while($line = $res->fetch_assoc()) {
     62            if($line['rs']) {
     63                $banks[$line['rs']] = $line;
     64            }
     65        }
     66        return $banks;
    7467    }
    7568   
     
    8780    }
    8881
     82    /// Получить ID документа-основания для приходника
     83    protected function getBaseForIn($agent_id, $doc_sum) {
     84        global $db;
     85        $doc_id = null;
     86        if($agent_id!==null) {
     87            settype($agent_id, 'int');
     88        }
     89        $doc_sum = round($doc_sum, 2);
     90        if($agent_id>1) {   
     91            // Ищем реализацию
     92            $res = $db->query("SELECT `id`, `agent` FROM `doc_list` WHERE `type`=2 AND `sum`='$doc_sum' AND `agent`=$agent_id ORDER BY `id` DESC LIMIT 1");
     93            while($doc_info = $res->fetch_assoc()) {
     94                $doc_id = $doc_info['id'];
     95            }
     96           
     97            if(!$doc_id) {
     98                // Ищем заявку
     99                $res = $db->query("SELECT `id`, `agent` FROM `doc_list` WHERE `type`=3 AND `sum`='$doc_sum' AND `agent`=$agent_id ORDER BY `id` DESC LIMIT 1");
     100                while($doc_info = $res->fetch_assoc()) {
     101                    $doc_id = $doc_info['id'];
     102                }
     103            }
     104            if(!$doc_id) {
     105                // Ищем документ с подходящей суммой
     106                $res = $db->query("SELECT `id`, `agent` FROM `doc_list` WHERE (`type`=2 OR `type`=3) AND `agent`=$agent_id ORDER BY `id` DESC LIMIT 1");
     107                while($doc_info = $res->fetch_assoc()) {
     108                    $doc_id = $doc_info['id'];
     109                }
     110            }
     111        } else {
     112            $res = $db->query("SELECT `id`, `agent` FROM `doc_list` WHERE (`type`=2 OR `type`=3) AND `sum`='$doc_sum' ORDER BY `id` DESC LIMIT 1");
     113            while($doc_info = $res->fetch_assoc()) {
     114                $doc_id = $doc_info['id'];
     115            }
     116        }
     117        return $doc_id;
     118    }
     119   
     120        /// Получить ID документа-основания для расходника
     121    protected function getBaseForOut($agent_id, $doc_sum) {
     122        global $db;
     123        $doc_id = null;
     124        if($agent_id!==null) {
     125            settype($agent_id, 'int');
     126        }
     127        $doc_sum = round($doc_sum, 2);
     128        if($agent_id>1) {   
     129            // Ищем поступление
     130            $res = $db->query("SELECT `id`, `agent` FROM `doc_list` WHERE `type`=1 AND `sum`='$doc_sum' AND `agent`=$agent_id ORDER BY `id` DESC LIMIT 1");
     131            while($doc_info = $res->fetch_assoc()) {
     132                $doc_id = $doc_info['id'];
     133            }           
     134            if(!$doc_id) {
     135                // Ищем товар в пути
     136                $res = $db->query("SELECT `id`, `agent` FROM `doc_list` WHERE `type`=12 AND `sum`='$doc_sum' AND `agent`=$agent_id ORDER BY `id` DESC LIMIT 1");
     137                while($doc_info = $res->fetch_assoc()) {
     138                    $doc_id = $doc_info['id'];
     139                }
     140            }
     141            if(!$doc_id) {
     142                // Ищем документ с подходящей суммой
     143                $res = $db->query("SELECT `id`, `agent` FROM `doc_list` WHERE (`type`=1 OR `type`=12) AND `agent`=$agent_id ORDER BY `id` DESC LIMIT 1");
     144                while($doc_info = $res->fetch_assoc()) {
     145                    $doc_id = $doc_info['id'];
     146                }
     147            }
     148        } else {
     149            $res = $db->query("SELECT `id`, `agent` FROM `doc_list` WHERE (`type`=1 OR `type`=12) AND `sum`='$doc_sum' ORDER BY `id` DESC LIMIT 1");
     150            while($doc_info = $res->fetch_assoc()) {
     151                $doc_id = $doc_info['id'];
     152            }
     153        }
     154        return $doc_id;
     155    }
     156   
     157    protected function processData($data, $options) {
     158        global $db;
     159        $result = [];
     160        $banks = $this->getMyBanksData();
     161        $this->loadAgentsData();
     162
     163        $db->startTransaction();
     164        foreach ($data as $import_doc) {
     165            if(isset($banks[$import_doc['src']['rs']])) { // Исходящий
     166                if(!$options['process_out']) {
     167                    continue;
     168                }
     169                $agent_info = $import_doc['dst'];
     170                $curr_rs = $import_doc['src']['rs'];
     171                $doc_type = 5;
     172                if(isset($import_doc['s_date']) && $import_doc['s_date']) {
     173                    list($d, $m, $y) = explode('.', $import_doc['s_date'], 3);
     174                } else {
     175                    list($d, $m, $y) = explode('.', $import_doc['date'], 3);
     176                }
     177            } elseif ($options['process_in']) {
     178                $agent_info = $import_doc['src'];
     179                $curr_rs = $import_doc['dst']['rs'];
     180                $doc_type = 4;
     181                if(isset($import_doc['p_date']) && $import_doc['p_date']) {
     182                    list($d, $m, $y) = explode('.', $import_doc['p_date'], 3);
     183                } else {
     184                    list($d, $m, $y) = explode('.', $import_doc['date'], 3);
     185                }
     186            } else {
     187                continue;
     188            }
     189            if(!isset($banks[$curr_rs])) {
     190                throw new \Exception('В банковской выписке найден счёт собственной организации, которого нет в справочнике. Загрузка невозможна.');
     191            }
     192
     193            $import_doc['docnum'] = intval($import_doc['docnum']);
     194            $sum = sprintf("%0.2f", $import_doc['sum']);               
     195            if(!checkdate($m, $d, $y)) {
     196                throw new \Exception("Недопустимая дата в файле ($y-$m-$d), документ {$import_doc['docnum']}!");
     197            }
     198            $start_day_time = mktime(0, 0, 0, $m, $d, $y);
     199            $end_day_time = mktime(23, 59, 59, $m, $d, $y);
     200            $doc_time = mktime(12, 0, 0, $m, $d, $y);
     201
     202            // Поиск агентов с таким расчётным счётом
     203            $agent_rs_sql = $db->real_escape_string($agent_info['rs']);
     204            $res = $db->query("SELECT `agent_id` FROM `agent_banks` WHERE `rs`='$agent_rs_sql'");
     205            $agents_line = '';
     206            while($line = $res->fetch_assoc()) {
     207                if($agents_line) {
     208                    $agents_line .=',';
     209                }
     210                $agents_line .= $line['agent_id'];
     211            }
     212
     213            if($agents_line) {
     214                $agents_line = " OR `doc_list`.`agent` IN ($agents_line)";
     215            }
     216
     217            $base_id = null;
     218            $bank_doc_num = null;
     219            $exist = false;
     220           
     221            // Поиск банковского документа в системе
     222            $agent_inn_sql = $db->real_escape_string($agent_info['inn']);
     223            $res = $db->query("SELECT `doc_list`.`id`, `doc_list`.`date`, `doc_list`.`altnum`, `doc_list`.`subtype`, `doc_list`.`sum`, `doc_list`.`p_doc`
     224                    , `doc_list`.`agent`
     225                FROM `doc_list`
     226                INNER JOIN `doc_agent` ON `doc_list`.`agent`=`doc_agent`.`id`
     227                WHERE `doc_list`.`type`=$doc_type AND (`doc_agent`.`inn`='$agent_inn_sql' $agents_line)"
     228                . " AND `doc_list`.`altnum`='{$import_doc['docnum']}'"
     229                . " AND `doc_list`.`date`>=$start_day_time AND `doc_list`.`date`<=$end_day_time");
     230            while($doc_info = $res->fetch_assoc()) {
     231                $bank_doc_num = $doc_info['id'];
     232                $base_id = $doc_info['p_doc'];
     233                $exist = true;
     234            }           
     235            if(!$exist) {
     236                // Определяем id агента
     237                $agent_id = 1;
     238                if(isset($this->agent_rs[$agent_info['rs']])) {
     239                    $agent_id = $this->agent_rs[$agent_info['rs']];
     240                }
     241                if($agent_id==1) {
     242                    if(isset($this->agent_inns[$agent_info['inn']])) {
     243                        $agent_id = $this->agent_inns[$agent_info['inn']];
     244                    }
     245                }
     246               
     247                // Определяем номер документа-основания
     248                if($doc_type == 4 && !$options['no_connect_in']) {
     249                    $base_id = $this->getBaseForIn($agent_id, $sum);
     250                }
     251                if($doc_type == 5 && !$options['no_connect_out']) {
     252                    $base_id = $this->getBaseForOut($agent_id, $sum);
     253                }
     254
     255                // Устанавливаем банковские реквизиты агента
     256                if($agent_id>1) { 
     257                    $agent_ks_sql = $db->real_escape_string($agent_info['ks']);
     258                    $agent_bik_sql = $db->real_escape_string($agent_info['bik']);
     259                    $res = $db->query("SELECT * FROM `agent_banks` WHERE `agent_id`='$agent_id' AND `bik`='$agent_bik_sql'"
     260                        . " AND `ks`='$agent_ks_sql' AND `rs`='$agent_rs_sql'");
     261                    if($res->num_rows ==0 && !$options['no_create_br']) {
     262                        $agent_bank_id = $this->agent_create_br($agent_id, $agent_info);
     263                    }
     264                }
     265
     266                if($agent_id == 1 && !$options['no_create_agents']) { //Автодобавление агента
     267                    $repl = array('ООО', 'ОАО', 'ЗАО', 'ПАО', 'ИП', '\'', '"');
     268                    $agent_ins_data = array(
     269                        'name'      => trim(str_replace($repl, '', $agent_info['name'])).' (auto)',
     270                        'fullname'  => trim($agent_info['name']),
     271                        'inn'       => $agent_info['inn'],
     272                        'kpp'       => $agent_info['kpp'],
     273                        'responsible' => $_SESSION['uid'],
     274                        'comment'   => 'Автоматически созданный агент'
     275                    );
     276                    $agent_id = $db->insertA('doc_agent', $agent_ins_data);
     277                    $agent_bank_id = $this->agent_create_br($agent_id, $agent_info);
     278                    $this->agent_rs[$agent_info['rs']] = $agent_id;
     279                    $this->agent_inns[$agent_info['inn']] = $agent_id;
     280                }
     281
     282                if($agent_id == 1) { // Добавим название агента в комментарий
     283                    $import_doc['desc'] .= " - ".$agent_info['name'];
     284                }
     285
     286                $doc_ins_data = array(
     287                    'type'      => $doc_type,
     288                    'date'      => $doc_time, // !!!!!!
     289                    'altnum'    => intval($import_doc['docnum']),
     290                    'subtype'   => $options['subtype'],
     291                    'sum'       => $sum,
     292                    'bank'      => $banks[$curr_rs]['bank_id'],
     293                    'agent'     => $agent_id,
     294                    'firm_id'   => $banks[$curr_rs]['firm_id'],
     295                    'comment'   => $import_doc['desc'],
     296                    'ok'        => $options['apply'] ? time() : 0,
     297                    'user'      => $_SESSION['uid'],
     298                    'p_doc'     => $base_id
     299                );
     300                $bank_doc_num = $db->insertA('doc_list', $doc_ins_data);
     301            }
     302
     303            $result[] = [
     304                'id' => $bank_doc_num,
     305                'pay_type' => $doc_type,
     306                'pay_num' => $import_doc['docnum'],
     307                'pay_date' => date("Y-m-d", $start_day_time),
     308                'pay_sum' => $sum,
     309                'agent_rs' => $agent_info['rs'],
     310                'base_id' => $base_id,
     311                'exist' => $exist,
     312                'desc' => $import_doc['desc']               
     313            ];
     314        }
     315        $db->commit();
     316        return $result;
     317    }
     318   
     319    protected function getForm() {
     320        $max_fs = \webcore::getMaxUploadFileSize();
     321        $max_fs_size = \webcore::toStrDataSizeInaccurate($max_fs);
     322        return "<h1>" . $this->getname() . "</h1>
     323            <form action='' method='post' enctype='multipart/form-data'>
     324            <input type='hidden' name='mode' value='load'>
     325            <input type='hidden' name='param' value='i'>
     326            <input type='hidden' name='sn' value='bank_import'>
     327
     328            Файл банковской выписки:<br>
     329            <small>В формате 1с v 1.01, $max_fs_size максимум.</small><br>
     330            <input type='hidden' name='MAX_FILE_SIZE' value='$max_fs'><input name='userfile' type='file'><br>
     331            <label><input type='checkbox' name='process_in' value='1' checked>Обработать приходы</label><br>
     332            <label><input type='checkbox' name='process_out' value='1'>Обработать расходы</label><br>
     333            <label><input type='checkbox' name='no_connect_in' value='1'>Не привязывать приходы</label><br>
     334            <label><input type='checkbox' name='no_connect_out' value='1'>Не привязывать расходы</label><br>
     335            <label><input type='checkbox' name='apply' value='1'>Провести документы</label><br>
     336            <label><input type='checkbox' name='no_create_agents' value='1'>Не создавать агентов (может привести к дублированию ордеров)</label><br>
     337            <label><input type='checkbox' name='no_create_br' value='1'>Не добавлять существующим агентам новые банковские реквизиты</label><br>           
     338            Подтип документов:<br>
     339            <input type='text' name='subtype' maxlength='5'><br>
     340            <button type='submit'>Выполнить</button>
     341            </form>
     342            <p>Проверка принадлежности агента происходит по расчётному счёту.</p>";
     343    }
    89344
    90345    /// Исполнение сценария
    91     function run($mode) {
     346    public function run($mode) {
    92347        global $tmpl, $db;
    93348        if ($mode == 'view') {
    94349            $tmpl->addContent($this->getForm());
    95350        } else if ($mode == 'load') {
    96             $process_in = rcvint('process_in');
    97             $process_out = rcvint('process_out');
    98             $subtype = request('subtype');
    99             $apply = request('apply');
    100             $no_create_agents = request('no_create_agents');
    101             $no_create_br = request('no_create_br');
     351            $options = [
     352                'process_in' => rcvint('process_in'),
     353                'process_out' => rcvint('process_out'),
     354                'no_connect_in' => rcvint('no_connect_in'),
     355                'no_connect_out' => rcvint('no_connect_out'),
     356                'subtype' => request('subtype'),
     357                'apply' => request('apply'),
     358                'no_create_agents' => request('no_create_agents'),
     359                'no_create_br' => request('no_create_br'),
     360            ];           
    102361           
    103362            $tmpl->addContent("<h1>" . $this->getname() . "</h1>");
     
    107366            $file = file($_FILES['userfile']['tmp_name']);
    108367            $ex = new Bank1CExchange();
    109             $parsed_data = $ex->Parse($file);
    110             //var_dump($parsed_data);
     368            $parsed_data = $ex->Parse($file);           
     369            $processed = $this->processData($parsed_data, $options);
    111370           
    112             // Список наших фирм и счетов
    113             $banks = array();
    114             $res = $db->query("SELECT `num` AS `bank_id`, `firm_id`, `rs` FROM `doc_kassa` WHERE `ids`='bank'");
    115             while($line = $res->fetch_assoc()) {
    116                 if($line['rs']) {
    117                     $banks[$line['rs']] = $line;
    118                 }
    119             }
    120                        
    121             $this->loadAgentsData();
    122            
    123             $tmpl->addContent("<table width='100%' class='list'>
    124             <tr><th>ID</th><th>Тип</th><th>Номер П/П</th><th>Дата</th><th>Сумма</th><th>Счёт</th><th>Назначение</th><th>К заявке</th><th>Есть?</th></tr>");
    125             $db->startTransaction();
    126             foreach ($parsed_data as $import_doc) {
    127                 if(isset($banks[$import_doc['src']['rs']])) { // Исходящий
    128                     if(!$process_out) {
    129                         continue;
    130                     }
    131                     $agent_info = $import_doc['dst'];
    132                     $curr_rs = $import_doc['src']['rs'];
    133                     $doc_type = 5;
    134                     if(isset($import_doc['s_date']) && $import_doc['s_date']) {
    135                         list($d, $m, $y) = explode('.', $import_doc['s_date'], 3);
    136                     } else {
    137                         list($d, $m, $y) = explode('.', $import_doc['date'], 3);
    138                     }
    139                 } elseif ($process_in) {
    140                     $agent_info = $import_doc['src'];
    141                     $curr_rs = $import_doc['dst']['rs'];
    142                     $doc_type = 4;
    143                     if(isset($import_doc['p_date']) && $import_doc['p_date']) {
    144                         list($d, $m, $y) = explode('.', $import_doc['p_date'], 3);
    145                     } else {
    146                         list($d, $m, $y) = explode('.', $import_doc['date'], 3);
    147                     }
    148                 } else {
    149                     continue;
    150                 }
    151                 if(!isset($banks[$curr_rs])) {
    152                     throw new \Exception('В банковской выписке найден счёт собственной организации, которого нет в справочнике. Загрузка невозможна.');
    153                 }
    154                
    155                 $import_doc['docnum'] = intval($import_doc['docnum']);
    156                 $sum = sprintf("%0.2f", $import_doc['sum']);               
    157                 if(!checkdate($m, $d, $y)) {
    158                     throw new \Exception("Недопустимая дата в файле ($y-$m-$d), документ {$import_doc['docnum']}!");
    159                 }
    160                 $start_day_time = mktime(0, 0, 0, $m, $d, $y);
    161                 $end_day_time = mktime(23, 59, 59, $m, $d, $y);
    162                 $doc_time = mktime(12, 0, 0, $m, $d, $y);
    163                
    164                 // Поиск агентов с таким расчётным счётом
    165                 $agent_rs_sql = $db->real_escape_string($agent_info['rs']);
    166                 $res = $db->query("SELECT `agent_id` FROM `agent_banks` WHERE `rs`='$agent_rs_sql'");
    167                 $agents_line = '';
    168                 while($line = $res->fetch_assoc()) {
    169                     if($agents_line) {
    170                         $agents_line .=',';
    171                     }
    172                     $agents_line .= $line['agent_id'];
    173                 }
    174                
    175                 if($agents_line) {
    176                     $agents_line = " OR `doc_list`.`agent` IN ($agents_line)";
    177                 }
    178                
    179                 // Поиск банковского документа в системе
    180                 $agent_inn_sql = $db->real_escape_string($agent_info['inn']);
    181                 $res = $db->query("SELECT `doc_list`.`id`, `doc_list`.`date`, `doc_list`.`altnum`, `doc_list`.`subtype`, `doc_list`.`sum`
    182                         , `doc_list`.`agent`
    183                     FROM `doc_list`
    184                     INNER JOIN `doc_agent` ON `doc_list`.`agent`=`doc_agent`.`id`
    185                     WHERE `doc_list`.`type`=$doc_type AND (`doc_agent`.`inn`='$agent_inn_sql' $agents_line)"
    186                     . " AND `doc_list`.`altnum`='{$import_doc['docnum']}'"
    187                     . " AND `doc_list`.`date`>=$start_day_time AND `doc_list`.`date`<=$end_day_time");
    188                 $doc_nums = '';
    189                 $exist = 0;
    190                 while($doc_info = $res->fetch_assoc()) {
    191                     $doc_nums .= "<a href='/doc.php?mode=body&amp;doc={$doc_info['id']}'>{$doc_info['id']}</a> ";
    192                     $exist = 1;
    193                 }
    194                 $order_id = '';
    195                 if(!$doc_nums) {
    196                     // Определяем id агента
    197                     $agent_id = 1;
    198                     if(isset($this->agent_rs[$agent_info['rs']])) {
    199                         $agent_id = $this->agent_rs[$agent_info['rs']];
    200                     }
    201                     if($agent_id==1) {
    202                         if(isset($this->agent_inns[$agent_info['inn']])) {
    203                             $agent_id = $this->agent_inns[$agent_info['inn']];
    204                         }
    205                     }
    206                    
    207                     // Определяем номер заявки покупателя   
    208                     if($agent_id>1) {                       
    209                         $res = $db->query("SELECT `id`, `agent` FROM `doc_list` WHERE `type`='3' AND `sum`='$sum' AND `agent`=$agent_id ORDER BY `id` DESC LIMIT 1");
    210                         while($doc_info = $res->fetch_assoc()) {
    211                             $order_id = $doc_info['id'];
    212                         }
    213                         if(!$order_id) {
    214                             $res = $db->query("SELECT `id`, `agent` FROM `doc_list` WHERE `type`='3' AND `agent`=$agent_id ORDER BY `id` DESC LIMIT 1");
    215                             while($doc_info = $res->fetch_assoc()) {
    216                                 $order_id = $doc_info['id'];
    217                             }
    218                         }
    219                     } else {
    220                         $res = $db->query("SELECT `id`, `agent` FROM `doc_list` WHERE `type`='3' AND `sum`='$sum' ORDER BY `id` DESC LIMIT 1");
    221                         while($doc_info = $res->fetch_assoc()) {
    222                             $order_id = $doc_info['id'];
    223                         }
    224                     }
    225                    
    226                     // Ищем, есть ли у этого агента такие банковские реквизиты
    227                     if($agent_id>1) { 
    228                         $agent_ks_sql = $db->real_escape_string($agent_info['ks']);
    229                         $agent_bik_sql = $db->real_escape_string($agent_info['bik']);
    230                         $res = $db->query("SELECT * FROM `agent_banks` WHERE `agent_id`='$agent_id' AND `bik`='$agent_bik_sql'"
    231                             . " AND `ks`='$agent_ks_sql' AND `rs`='$agent_rs_sql'");
    232                         if($res->num_rows ==0 && !$no_create_br) {
    233                             $agent_bank_id = $this->agent_create_br($agent_id, $agent_info);
    234                         }
    235                     }
    236                    
    237                     if($agent_id == 1 && !$no_create_agents) { //Автодобавление агента
    238                         $repl = array('ООО', 'ОАО', 'ЗАО', 'ПАО', 'ИП', '\'', '"');
    239                         $agent_ins_data = array(
    240                             'name'      => trim(str_replace($repl, '', $agent_info['name'])).' (auto)',
    241                             'fullname'  => trim($agent_info['name']),
    242                             'inn'       => $agent_info['inn'],
    243                             'kpp'       => $agent_info['kpp'],
    244                             'responsible' => $_SESSION['uid'],
    245                             'comment'   => 'Автоматически созданный агент'
    246                         );
    247                         $agent_id = $db->insertA('doc_agent', $agent_ins_data);
    248                         $agent_bank_id = $this->agent_create_br($agent_id, $agent_info);
    249                         $this->agent_rs[$agent_info['rs']] = $agent_id;
    250                         $this->agent_inns[$agent_info['inn']] = $agent_id;
    251                     }
    252                    
    253                     if($agent_id == 1) { // Добавим название агента в комментарий
    254                         $import_doc['desc'] .= " - ".$agent_info['name'];
    255                     }
    256 
    257                     if(!$order_id) {
    258                         $order_id = 'null';
    259                     }
    260                     $doc_ins_data = array(
    261                         'type'      => $doc_type,
    262                         'date'      => $doc_time, // !!!!!!
    263                         'altnum'    => intval($import_doc['docnum']),
    264                         'subtype'   => $subtype,
    265                         'sum'       => $sum,
    266                         'bank'      => $banks[$curr_rs]['bank_id'],
    267                         'agent'     => $agent_id,
    268                         'firm_id'   => $banks[$curr_rs]['firm_id'],
    269                         'comment'   => $import_doc['desc'],
    270                         'ok'        => $apply ? time() : 0,
    271                         'user'      => $_SESSION['uid'],
    272                         'p_doc'     => $order_id
    273                     );
    274                     $doc_id = $db->insertA('doc_list', $doc_ins_data);
    275                     $doc_nums = $doc_nums .= "<a href='/doc.php?mode=body&amp;doc=$doc_id'>$doc_id</a>";
    276                 }
    277                
    278                 if($exist) {
    279                     $exist = 'Да';
    280                 } else {
    281                     $exist = 'Нет';
    282                 }
    283                
    284                 if($doc_type==4) {
    285                     $print_type = 'Приход';
    286                 } else {
    287                     $print_type = 'Расход';
    288                 }
    289                 if($order_id) {
    290                     $order_id = "<a href='/doc.php?mode=body&amp;doc=$order_id'>$order_id</a>";
    291                 }
    292                 $tmpl->addContent("<tr><td>$doc_nums</td><td>$print_type</td><td>{$import_doc['docnum']}</td><td>".date("Y-m-d", $start_day_time)."</td>
    293                     <td>$sum</td><td>".html_out($agent_info['rs'])."</td><td>".html_out($import_doc['desc'])."</td><td>$exist</td><td>$exist</td></tr>");
    294             }
    295             $tmpl->addContent("</table>");
    296             $db->commit();
    297         }
    298     }
    299 
    300     function getName() {
    301         return "Импорт банковских документов";
    302     }
    303 
     371            $table_header = ['ID', 'Тип', 'Номер П/П', 'Дата', 'Сумма', 'Счёт', 'Назначение', 'К документу', 'Есть'];
     372            $table_body = [];
     373            foreach($processed as $p) {
     374                $table_body[] = [
     375                    "<a href='/doc.php?mode=body&amp;doc={$p['id']}'>{$p['id']}</a>",
     376                    $p['pay_type']==4 ? 'Приход':'Расход',
     377                    html_out($p['pay_num']),
     378                    $p['pay_date'],
     379                    html_out($p['pay_sum']),
     380                    html_out($p['agent_rs']),
     381                    html_out($p['desc']),
     382                    $p['base_id'] ? "<a href='/doc.php?mode=body&amp;doc={$p['base_id']}'>{$p['base_id']}</a>":'',
     383                    $p['exist'] ? 'Да':'Нет',               
     384                ];
     385            }           
     386            $tmpl->addContent( \widgets::getTable($table_header, $table_body) );
     387        }
     388    }
    304389}
Note: See TracChangeset for help on using the changeset viewer.