<?php

/**
 * Copyright Souke (2018)
 *
 * contact@souke.fr
 *
 * Ce logiciel est un programme informatique servant à aider les producteurs
 * à distribuer leur production en circuits courts.
 *
 * Ce logiciel est régi par la licence CeCILL soumise au droit français et
 * respectant les principes de diffusion des logiciels libres. Vous pouvez
 * utiliser, modifier et/ou redistribuer ce programme sous les conditions
 * de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
 * sur le site "http://www.cecill.info".
 *
 * En contrepartie de l'accessibilité au code source et des droits de copie,
 * de modification et de redistribution accordés par cette licence, il n'est
 * offert aux utilisateurs qu'une garantie limitée.  Pour les mêmes raisons,
 * seule une responsabilité restreinte pèse sur l'auteur du programme,  le
 * titulaire des droits patrimoniaux et les concédants successifs.
 *
 * A cet égard  l'attention de l'utilisateur est attirée sur les risques
 * associés au chargement,  à l'utilisation,  à la modification et/ou au
 * développement et à la reproduction du logiciel par l'utilisateur étant
 * donné sa spécificité de logiciel libre, qui peut le rendre complexe à
 * manipuler et qui le réserve donc à des développeurs et des professionnels
 * avertis possédant  des  connaissances  informatiques approfondies.  Les
 * utilisateurs sont donc invités à charger  et  tester  l'adéquation  du
 * logiciel à leurs besoins dans des conditions permettant d'assurer la
 * sécurité de leurs systèmes et ou de leurs données et, plus généralement,
 * à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
 *
 * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
 * pris connaissance de la licence CeCILL, et que vous en avez accepté les
 * termes.
 */

use domain\Feature\Feature\Feature;
use domain\PointSale\UserPointSale\UserPointSale;
use domain\Producer\Producer\Producer;
use yii\grid\GridView;
use yii\helpers\Html;

$pointSaleModule = $this->getPointSaleModule();
$sharedPointSaleModule = $this->getSharedPointSaleModule();
$featureChecker = $this->getFeatureModule()->getChecker();

$this->setTitle('Points de vente');
$this->addBreadcrumb($this->getTitle());
$this->addButton(
    [
        'label' => 'Nouveau point de vente <span class="glyphicon glyphicon-plus"></span>',
        'url' => 'point-sale/create',
        'class' => 'btn btn-primary'
    ]
);

?>

<div class="point-sale-index">
    <?= GridView::widget([
        'filterModel' => $searchModel,
        'dataProvider' => $dataProvider,
        'columns' => [
            [
                'attribute' => 'name',
                'label' => 'Nom',
                'format' => 'raw',
                'contentOptions' => ['class' => 'column-name'],
                'value' => function ($model) use ($featureChecker, $sharedPointSaleModule) {
                    $html = '';
                    $html .= '<div class="name">';
                    $html .= $model->name;
                    if ($model->is_bread_box) {
                        $html .= ' <span class="label label-default">Boîte à pain</span> ';
                    }
                    $html .= '</div>';

                    if($featureChecker->isEnabled(Feature::ALIAS_SHARED_POINT_SALE)) {
                        if($sharedPointSaleModule->getResolver()->countPointsSaleSharedWithPointSale($model)) {
                            $html .= '<div class="shared-point-sale-producers"><small><span class="fa fa-share-alt"></span> ';
                            $html .= $sharedPointSaleModule->getResolver()->getProducersSharingPointSaleAsString($model);
                            $html .= '</small></div>';
                        }
                    }

                    return $html;
                }
            ],
            [
                'attribute' => 'locality',
                'headerOptions' => ['class' => 'column-hide-on-mobile'],
                'filterOptions' => ['class' => 'column-hide-on-mobile'],
                'contentOptions' => ['class' => 'column-hide-on-mobile'],
            ],
            [
                'attribute' => 'delivery',
                'label' => 'Livraison',
                'filter' => [
                    'monday' => 'Lundi',
                    'tuesday' => 'Mardi',
                    'wednesday' => 'Mercredi',
                    'thursday' => 'Jeudi',
                    'friday' => 'Vendredi',
                    'saturday' => 'Samedi',
                    'sunday' => 'Dimanche',
                ],
                'value' => function ($model) use ($pointSaleModule) {
                    return $pointSaleModule->getStrDeliveryDays($model);
                }
            ],
            [
                'attribute' => 'access_type',
                'label' => 'Accès',
                'filter' => [
                    'open' => 'Ouvert',
                    'code' => 'Code',
                    'restricted_access' => 'Accès restreint'
                ],
                'format' => 'raw',
                'headerOptions' => ['class' => 'column-hide-on-mobile'],
                'filterOptions' => ['class' => 'column-hide-on-mobile'],
                'contentOptions' => ['class' => 'column-hide-on-mobile'],
                'value' => function ($model) {
                    $count = UserPointSale::find()->where(
                        ['id_point_sale' => $model->id]
                    )->count();
                    $html = '';
                    if ($model->restricted_access) {
                        $html .= '<span class="glyphicon glyphicon-lock"></span> ';
                        if ($count == 1) {
                            $html .= '1 utilisateur';
                        } else {
                            $html .= $count . ' utilisateurs';
                        }
                    }

                    if (strlen($model->code)) {
                        if (strlen($html)) {
                            $html .= '<br />';
                        }
                        $html .= 'Code : <strong>' . Html::encode(
                                $model->code
                            ) . '</strong>';
                    }

                    return $html;
                }
            ],
            [
                'label' => 'Modes de paiement',
                'format' => 'raw',
                'headerOptions' => ['class' => 'column-hide-on-mobile'],
                'filterOptions' => ['class' => 'column-hide-on-mobile'],
                'contentOptions' => ['class' => 'column-hide-on-mobile column-payment-method'],
                'value' => function ($model) {
                    $html = '<ul>';
                    if($model->payment_method_onsite) {
                        $html .= '<li><i class="bi bi-wallet2"></i> Sur place</li>';
                    }
                    if ($model->payment_method_credit && isset(Producer::$creditFunctioningArray[$model->credit_functioning])) {
                        $html .= '<li><i class="bi bi-piggy-bank"></i> Cagnotte ('. strtolower(Producer::$creditFunctioningArray[$model->credit_functioning]).')</li>';
                    }
                    if ($model->payment_method_online) {
                        $html .= '<li><i class="bi bi-credit-card"></i> Paiement en ligne</li>';
                    }
                    $html .= '</ul>';
                    return $html;
                }
            ],
            [
                'attribute' => 'default',
                'label' => 'Par défaut',
                'format' => 'raw',
                'headerOptions' => ['class' => 'column-hide-on-mobile'],
                'filterOptions' => ['class' => 'column-hide-on-mobile'],
                'contentOptions' => ['class' => 'td-default column-hide-on-mobile'],
                'value' => function ($model) {
                    if ($model->default) {
                        return Html::a(
                            '<span class="glyphicon glyphicon-star"></span>',
                            ['point-sale/default', 'id' => $model->id],
                            [
                                'title' => 'Point de vente par défaut',
                                'class' => 'btn btn-default'
                            ]
                        );
                    } else {
                        return Html::a(
                            '<span class="glyphicon glyphicon-star-empty"></span>',
                            ['point-sale/default', 'id' => $model->id],
                            [
                                'title' => 'Point de vente par défaut',
                                'class' => 'btn btn-default'
                            ]
                        );
                    }
                }
            ],
            [
                //'visible' => $featureChecker->isEnabled(Feature::ALIAS_SHARED_POINT_SALE),
                'visible' => false,
                'label' => 'Partages',
                'format' => 'raw',
                'headerOptions' => ['class' => 'column-hide-on-mobile'],
                'filterOptions' => ['class' => 'column-hide-on-mobile'],
                'contentOptions' => ['class' => 'td-shared-point-sale column-hide-on-mobile'],
                'value' => function ($pointSale) use ($sharedPointSaleModule) {
                    $countPointsSaleSharedWithPointSale = $sharedPointSaleModule->getResolver()->countPointsSaleSharedWithPointSale($pointSale);
                    return '<a class="btn btn-'.($countPointsSaleSharedWithPointSale ? 'success' : 'default').'" href="'.Yii::$app->urlManager->createUrl(['shared-point-sale/index']).'" title="'.$sharedPointSaleModule->getResolver()->getProducersSharingPointSaleAsString($pointSale, null, '&#013;').'">'.$countPointsSaleSharedWithPointSale.' <span class="fa fa-share-alt"></span></a>';
                }
            ],
            [
                'class' => 'yii\grid\ActionColumn',
                'template' => '{update} {delete}',
                'headerOptions' => ['class' => 'column-actions'],
                'contentOptions' => ['class' => 'column-actions'],
                'buttons' => [
                    'update' => function ($url, $model) {
                        return Html::a(
                            '<span class="glyphicon glyphicon-pencil"></span>',
                            $url,
                            [
                                'title' => 'Modifier',
                                'class' => 'btn btn-default'
                            ]
                        );
                    },
                    'delete' => function ($url, $model) {
                        return Html::a(
                            '<span class="glyphicon glyphicon-trash"></span>',
                            $url,
                            [
                                'title' => 'Supprimer',
                                'class' => 'btn btn-default'
                            ]
                        );
                    }
                ],
            ],
        ],
    ]); ?>
</div>
