<?php
define('DIR_ROOT', '/home/devwebsite/public_html/place/');

/**
 * Возвращает сумму прописью
 * @author runcore
 * @uses morph(...)
 */
function num2str($num) {
    $nul='ноль';
    $ten=array(
        array('','один','два','три','четыре','пять','шесть','семь', 'восемь','девять'),
        array('','одна','две','три','четыре','пять','шесть','семь', 'восемь','девять'),
    );
    $a20=array('десять','одиннадцать','двенадцать','тринадцать','четырнадцать' ,'пятнадцать','шестнадцать','семнадцать','восемнадцать','девятнадцать');
    $tens=array(2=>'двадцать','тридцать','сорок','пятьдесят','шестьдесят','семьдесят' ,'восемьдесят','девяносто');
    $hundred=array('','сто','двести','триста','четыреста','пятьсот','шестьсот', 'семьсот','восемьсот','девятьсот');
    $unit=array( // Units
        array('копейка' ,'копейки' ,'копеек',	 1),
        array('рубль'   ,'рубля'   ,'рублей'    ,0),
        array('тысяча'  ,'тысячи'  ,'тысяч'     ,1),
        array('миллион' ,'миллиона','миллионов' ,0),
        array('миллиард','милиарда','миллиардов',0),
    );
    //
    list($rub,$kop) = explode('.',sprintf("%015.2f", floatval($num)));
    $out = array();
    if (intval($rub)>0) {
        foreach(str_split($rub,3) as $uk=>$v) { // by 3 symbols
            if (!intval($v)) continue;
            $uk = sizeof($unit)-$uk-1; // unit key
            $gender = $unit[$uk][3];
            list($i1,$i2,$i3) = array_map('intval',str_split($v,1));
            // mega-logic
            $out[] = $hundred[$i1]; # 1xx-9xx
            if ($i2>1) $out[]= $tens[$i2].' '.$ten[$gender][$i3]; # 20-99
            else $out[]= $i2>0 ? $a20[$i3] : $ten[$gender][$i3]; # 10-19 | 1-9
            // units without rub & kop
            if ($uk>1) $out[]= morph($v,$unit[$uk][0],$unit[$uk][1],$unit[$uk][2]);
        } //foreach
    }
    else $out[] = $nul;
    $out[] = morph(intval($rub), $unit[1][0],$unit[1][1],$unit[1][2]); // rub
    $out[] = $kop.' '.morph($kop,$unit[0][0],$unit[0][1],$unit[0][2]); // kop
    return trim(preg_replace('/ {2,}/', ' ', join(' ',$out)));
}

/**
 * Склоняем словоформу
 * @ author runcore
 */
function morph($n, $f1, $f2, $f5) {
    $n = abs(intval($n)) % 100;
    if ($n>10 && $n<20) return $f5;
    $n = $n % 10;
    if ($n>1 && $n<5) return $f2;
    if ($n==1) return $f1;
    return $f5;
}


if (isset($_POST['type'])) {
    $phpexcel = DIR_ROOT . 'phpexcel/';

    include_once(DIR_ROOT . 'config.php');
    include_once($phpexcel . 'Classes/PHPExcel.php');

    $mysqli = new mysqli(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
    if ($mysqli->connect_errno) {
        echo "Не удалось подключиться к MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    }

    $id = (int)$_POST['id'];
    $order = $mysqli->query("
        select *
        from " . DB_PREFIX . "order
        where order_id = {$id}
    ");
    $orders = $mysqli->query("
        select *
        from " . DB_PREFIX . "order_product
        where order_id = {$id}
    ");


    if ($_POST['type'] === 'torg12') {
        $xls = PHPExcel_IOFactory::load($phpexcel . 'torg12.xlsx');
        $sheet = $xls->getSheet(0);
        $file_name = "{$id}-Торг12.xlsx";

        $quantity = 0;
        $row_num = 24;
        while ($row = $orders->fetch_object()) {
            $sheet->insertNewRowBefore($row_num, 1);

            $quantity += $row->quantity;

            $sheet->mergeCells('C' . $row_num . ':J' . $row_num);
            $sheet->getStyle('C' . $row_num)->getAlignment()
                ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);

            $sheet->setCellValue('B' . $row_num, $row->order_product_id);
            $sheet->setCellValue('C' . $row_num, $row->name);
            $sheet->setCellValue('L' . $row_num, 'шт.');
            $sheet->setCellValue('M' . $row_num, 'шт.');
            $sheet->setCellValue('R' . $row_num, $row->quantity);
            $sheet->setCellValue('S' . $row_num, $row->price);
            $sheet->setCellValue('T' . $row_num, $row->total);
            $sheet->setCellValue('U' . $row_num, 0);
            $sheet->setCellValue('V' . $row_num, 0);
            $sheet->setCellValue('W' . $row_num, $row->total);
            $row_num++;
        }

        $sheet->getStyle('B23:W23')->applyFromArray(array(
            'borders' => array(
                'allborders' => array(
                    'style' => PHPExcel_Style_Border::BORDER_MEDIUM
                )
            )
        ));


        if ($order_info = $order->fetch_object()) {
            $sheet->setCellValue('R' . $row_num, $quantity);
            $sheet->setCellValue('R' . ($row_num+1), $quantity);
            $sheet->setCellValue('T' . $row_num, $order_info->total);
            $sheet->setCellValue('T' . ($row_num+1), $order_info->total);
            $sheet->setCellValue('W' . $row_num, $order_info->total);
            $sheet->setCellValue('W' . ($row_num+1), $order_info->total);

            $sheet->setCellValue('C11',
                $order_info->firstname . ' ' . $order_info->lastname);
            $sheet->setCellValue('C14',
                $order_info->payment_firstname . ' ' . $order_info->payment_lastname . ', '
                . $order_info->payment_city . ', ' . $order_info->payment_address_1 . ' ' . $order_info->payment_address_2);
            $sheet->setCellValue('C15', "По заказу № NM-{$id} от {$order_info->date_added} г.");

            $sheet->setCellValue('K19', "NM-{$id}");
            $sheet->setCellValue('M19', date('d.m.Y'));

            $sheet->setCellValue('W12', "NM-{$id}");
            $sheet->setCellValue('W13', date('d.m.Y'));

            $sheet->setCellValue('A' . ($row_num+15), num2str($order_info->total) . ', без налога (НДС)');

            $sheet->setCellValue('E' . ($row_num+22), date('d.m.Y'));
            $sheet->setCellValue('R' . ($row_num+22), date('d.m.Y'));
        }

    } elseif ($_POST['type'] === 'schet') {
        $xls = PHPExcel_IOFactory::load($phpexcel . 'schet.xlsx');
        $sheet = $xls->getSheet(0);
        $file_name = "{$id}-Счет.xlsx";

        $row_num = 21;
        while ($row = $orders->fetch_object()) {
            $sheet->insertNewRowBefore($row_num, 1);

            $sheet->setCellValue('A' . $row_num, $row->order_product_id);
            $sheet->setCellValue('B' . $row_num, $row->name);
            $sheet->setCellValue('C' . $row_num, 'шт.');
            $sheet->setCellValue('D' . $row_num, $row->quantity);
            $sheet->setCellValue('E' . $row_num, $row->price);
            $sheet->setCellValue('F' . $row_num, $row->total);
            $row_num++;
        }

        if ($order_info = $order->fetch_object()) {
            $sheet->setCellValue('F' . $row_num, $order_info->total);
            $sheet->setCellValue('A' . ($row_num+2), 'К оплате: ' . num2str($order_info->total));

            $sheet->setCellValue('A13',"СЧЕТ № {$id} от {$order_info->date_added} г.");

            $sheet->setCellValue('A15', 'Заказчик: '
                . $order_info->firstname . ' ' . $order_info->lastname);
            $sheet->setCellValue('A16', 'Плательщик: '
                . $order_info->payment_firstname . ' ' . $order_info->payment_lastname . ', '
                . $order_info->payment_city . ', ' . $order_info->payment_address_1 . ' ' . $order_info->payment_address_2);
            $sheet->setCellValue('A17', 'Контактное лицо: '
                . $order_info->firstname . ' ' . $order_info->lastname);
            $sheet->setCellValue('A18', 'Тел: '
                . $order_info->telephone);
        }
    }

    $new_xls = PHPExcel_IOFactory::createWriter($xls, 'Excel2007');
    $new_xls->save($phpexcel . $file_name);

    $xls->disconnectWorksheets();
    unset($xls);

    $data = array(
        'file' => '/phpexcel/' . $file_name,
        'name' => $file_name,
        'msg' => "Файл {$file_name} скачивается"
    );
    echo json_encode($data);
}

if (isset($_POST['delete'])) {
    //10 секунд для скачивания файла
    sleep(10);
    if (unlink(DIR_ROOT . $_POST['file'])) {
        echo "Файл {$_POST['file']} был удален";
    }
}

die();