<?php

/**
 *
 * @author korvin
 */
class Admin_CodesController extends Mclib_Admin_Controller_Action {

    private $_article;
    private $_filterForm;
    private $_sessionNamespace;
    private $_filterSQL;
    private $_breadcrumbs;
    private $_title;
    private $_controller;

    public function init() {
        $this->_article = new Mc_Codes();
        $this->_filterForm = $this->_article->getFormFilter();
        $this->_sessionNamespace = new Zend_Session_Namespace(__CLASS__);
        $this->_filterSQL = $this->_article->mapFilterFromSession($this->_sessionNamespace, $this->_filterForm);
        $this->_breadcrumbs = new Mc_Breadcrumbs();
        $this->_title = 'База уникальных цифровых кодов';
        $this->_controller = 'codes';
        $this->view->title = $this->_title;
        $this->view->controller = $this->_controller;
    }

    public function deleteAction() {
        $this->_article->delete($this->_getParam('id'));
        $this->_helper->flashMessenger->addMessage('Данные успешно удалены');
        return $this->_helper->redirector('index');
    }

    public function delfieldsAction() {
        if ($this->getRequest()->isPost()) {
            if (sizeof($this->_getParam('field')) > 0) {
                $this->_article->delfields($this->_getParam('field'));
                $this->_helper->flashMessenger->addMessage('Данные успешно удалены');
            }
        }
        return $this->_helper->redirector('index');
    }
    
    public function checkprintedAction() {
        if ($this->getRequest()->isPost()) {
            if (sizeof($this->_getParam('field')) > 0) {
                $this->_article->checkPrinted($this->_getParam('field'));
                $this->_helper->flashMessenger->addMessage('Коды отмечены как распечатанные');
            }
        }
        return $this->_helper->redirector('index');
    }
    
    public function checknotprintedAction() {
        if ($this->getRequest()->isPost()) {
            if (sizeof($this->_getParam('field')) > 0) {
                $this->_article->checkNotPrinted($this->_getParam('field'));
                $this->_helper->flashMessenger->addMessage('Коды отмечены как нераспечатанные');
            }
        }
        return $this->_helper->redirector('index');
    }

    public function editAction() {
        $id = $this->_getParam('id', NULL);
        $form = $this->_article->getForm();
        $form->makeEditForm(array(
            'access_codes_print' => $this->view->userinfo()->access_codes_print,
        ));

        if ($this->getRequest()->isPost()) {
            if (sizeof($this->_getParam('cancel')) == '0') {
                if ($form->isValid($this->_getAllParams())) {
                    // save the content item

                    $this->_article->save($form->mapForm(), $id);
                    $this->_helper->flashMessenger->addMessage('Данные успешно сохранены');
                    return $this->_helper->redirector('index');
                }
            } else {
                $this->_helper->flashMessenger->addMessage('Изменения отменены');
                return $this->_helper->redirector('index');
            }
        }

        if ($id != NULL) {
            $codes = $this->_article->getCodes($id)->toArray();
            $this->_breadcrumbs->makeCrumbs($this->view->navigation()->breadcrumbs(), $this->_title, $this->_controller, 'edit', $codes['code']);
            //$params['images'] = array('image' => $partners['img']);
            //$form->makeEditForm($params);
            //$partners['img_old'] = $partners['img'];

            $now = new Zend_Date();

            if ($codes['datetime'] == 0) {
                $codes['datetime'] = $now->toString('yyyy-MM-dd HH:mm:ss');
            }

            if ($codes['datetime_active'] == 0) {
                $codes['datetime_active'] = $now->toString('yyyy-MM-dd HH:mm:ss');
            }

            $datetime = new Zend_Date($codes['datetime_active']);
            $codes['datetime_active'] = $datetime->toString('dd.MM.yyyy HH:mm:ss');

            $datetime = new Zend_Date($codes['datetime']);
            $codes['datetime'] = $datetime->toString('dd.MM.yyyy HH:mm:ss');
            
            //---Партнёры-----------------------------------------------------//
            $codesPartnersModel = new Mc_CodesPartners();
            $codesPartners = $codesPartnersModel->getCodesPartnersAll(null, null, array(
                'code_id' => $codes['id'],
            ));
            $codes['partners'] = $codesPartners;
            //---Партнёры-----------------------------------------------------//

            $form->populate($codes);
        } else {
            $this->_breadcrumbs->makeCrumbs($this->view->navigation()->breadcrumbs(), $this->_title, $this->_controller, 'add');
            $form->makeAddForm();
            $form->populate($codes);
        }

        $this->view->filterForm = $this->_filterForm;
        $this->view->form = $form;
    }

    public function indexAction() {
        $this->_breadcrumbs->makeCrumbs($this->view->navigation()->breadcrumbs(), $this->_title, $this->_controller);
        if ($this->getRequest()->isPost()) {
            if ($this->_filterForm->isValid($this->_getAllParams())) {
                $this->_filterSQL = $this->_article->mapFilterFromPost($this->_filterForm->getValues(), $this->_sessionNamespace);
            } else {
                $this->_filterSQL = $this->_article->mapFilterFromSession($this->_sessionNamespace);
            }
        } else {
            $this->_filterSQL = $this->_article->mapFilterFromSession($this->_sessionNamespace);
        }
        $this->view->filterForm = $this->_filterForm;
        $this->view->paginator = $this->_article->getPaginator($this->_getParam('page'), $this->_filterSQL);

        $this->_cats_options = new Mc_Productscatalog();
        $cats_options_list = $this->_cats_options->getProductsAll();
        $cats_options = array('' => 'выберите...');
        foreach ($cats_options_list as $category) {
            $cats_options[$category['id']] = $category['title'];
        }

        $this->view->cats_options = $cats_options;

        $products = new Mc_Products();
        $products_options = $products->getProductsList();
        $this->view->products_options = $products_options;
    }

    public function generateAction()
    {
        //$this->_article->genRandomCodes(500, 7);
    }
    
//    public function importPartnersAction()
//    {
//        $codes = $this->_article->getCodesAll();
//        if (count($codes) > 0) {
//            $table_codes_partners = new Mc_CodesPartners_Db();
//            foreach ($codes as $codes_key => $codes_item) {
//                if(!empty($codes_item['partner'])) {
//                    $table_codes_partners->insert(array(
//                        'code_id' => $codes_item['id'],
//                        'partner_id' => $codes_item['partner'],
//                        'payed_partner' => $codes_item['payed_partner'],
//                        'summ' => $codes_item['summ'],
//                    ));
//                }
//            }
//        }
//        exit();
//    }

    //========================================================================//
    // AJAX
    //========================================================================//

    public function ajaxGetPartnersAction() {
        //Mc_Functions::isAjax();

        $prod_id = $this->_getParam('prod_id');
        $partnersModel = new Mc_Partners();
        $partnersProductsModel = new Mc_PartnersProducts();

        $partnersProductsArticles = $partnersProductsModel->getPartnersProductsWhere(array(
            'where' => "`product_id` = '{$prod_id}'",
        ));

        $partners_ids = array();
        if (count($partnersProductsArticles) > 0) {
            foreach ($partnersProductsArticles as $partnersProductsArticles_key => $partnersProductsArticles_item) {
                $partners_ids[] = $partnersProductsArticles_item['partner_id'];
            }
        }

        $where = '0';
        if (count($partners_ids) > 0) {
            $where = '`id` IN (' . implode(',', $partners_ids) . ')';
        }

        $suitableArticles = $partnersModel->getPartnersWhere(array(
            'where' => $where,
                ));

        $otherArticles = $partnersModel->getPartnersWhere(array());

        if (count($otherArticles) > 0) {
            foreach ($otherArticles as $otherArticles_key => $otherArticles_item) {
                if (in_array($otherArticles_item['id'], $partners_ids)) {
                    unset($otherArticles[$otherArticles_key]);
                }
            }
        }

        if (count($partnersProductsArticles) > 0) {
            foreach ($partnersProductsArticles as $partnersProductsArticles_key => $partnersProductsArticles_item) {
                $partnersProductsArticles[$partnersProductsArticles_key]['partner'] = $partnersModel->getPartners($partnersProductsArticles_item['partner_id'])->toArray();
            }
        }
        $response['partners_products'] = $partnersProductsArticles;

        $response['articles'] = array();
        if (count($suitableArticles) > 0) {
            foreach ($suitableArticles as $suitableArticles_key => $suitableArticles_item) {
                $response['articles'][] = $suitableArticles_item;
            }
        }
        $response['articles'][] = array('id' => '', 'title' => '----- другие -----');
        if (count($otherArticles) > 0) {
            foreach ($otherArticles as $otherArticles_key => $otherArticles_item) {
                $response['articles'][] = $otherArticles_item;
            }
        }

        $response['ok'] = true;

        // отправляем ответ
        $this->_helper->json($response);
    }

}