<?php

/**
 * cron actions.
 *
 * @package www.katao.fr
 * @subpackage cron
 * @author Your name here
 * @version SVN: $Id: actions.class.php 9301 2008-05-27 01:08:46Z dwhittle $
 */
class cronActions extends sfActions {
    public function preExecute() {
        parent::preExecute();
        sfLoader::loadHelpers(array('Tag', 'Url'));
    }

    public function executeCheckOutdatedMemberDeposits($request) {
        // retrieve all deposits with pending status and "valid until" date before current time
        $criteria = new Criteria();
        $criteria->add(KataoMemberDepositPeer::STATUS, KataoMemberDeposit::STATUS_PENDING);
        $criteria->add(KataoMemberDepositPeer::VALID_UNTIL, date('Y-m-d H:i:s'), Criteria::LESS_THAN);
        $katao_member_deposits = KataoMemberDepositPeer::doSelectJoinKataoMember($criteria);

        if (0 < count($katao_member_deposits)) {
            $mailer = new wpMail();
            foreach ($katao_member_deposits as/*(KataoMemberDeposit)*/ $katao_member_deposit) {
                // set deposit status to expired
                $katao_member_deposit->setStatus(KataoMemberDeposit::STATUS_EXPIRED);
                $katao_member_deposit->save();
                // update member current amount to cancel deposit
                $katao_member =/*(KataoMember)*/ $katao_member_deposit->getKataoMember();
                if (KataoMemberDeposit::PAYMENT_MODE_WITHDRAWAL == $katao_member_deposit->getPaymentMode()) {
                    $katao_member->setInitialAmount($katao_member->getCurrentAmount() + $katao_member_deposit->getAmount());
                } else {
                    $katao_member->setInitialAmount($katao_member->getCurrentAmount() - $katao_member_deposit->getAmount());
                }
                $katao_member->save();
                // send an email to seo to notify him/her
                if (null != $katao_user = $katao_member->getFirstKataoUser()) {
                    $katao_member_seo = wpConfig::getInstance()->getKataoMember();
                    if (null != $katao_user_seo = $katao_member_seo->getFirstKataoUser()) {
                        try {
                            $swift_message = new Swift_Message('Votre dépot ne nous est pas parvenu à ce jour', sprintf('%s,

Attention, tu t\'étais engagé(e) le %s a nous envoyer %s
avant le %s afin d\'honorer le paiement de tes demandes.

Cette date vient d\'arriver à échéance.

Si ton solde %s est inferieur à ta prochaine demande,

ELLE NE SERA PAS PRIS EN COMPTE DANS LES COMMANDES FOURNISSEURS.

Merci de prendre contact rapidement avec %s au %s
afin de régulariser ta situation
%s', $katao_member->getFirstName(), $katao_member_deposit->getCreatedAtStr(), $katao_member_deposit->getAmountStr(), CatalyzDate::formatShort($katao_member_deposit->getValidUntil(null)), $katao_member->getCurrentAmountEuroStr(), $katao_member_seo->getFirstName(), $katao_user_seo->getPhone(), Utils::getKataoEmailFooter()));
                            $mailer->send($swift_message, new Swift_Address($katao_member->getFirstKataoUser()->getEmail(), $katao_member->getFullName()), sfConfig::get('app_mail_from'));
                            $mailer->send($swift_message, new Swift_Address($katao_user_seo->getEmail(), $katao_user_seo->getFullName()), sfConfig::get('app_mail_from'));
                        }
                        catch (Exception $e) {
                            $mailer->disconnect();
                        }
                    }
                }
            }
            $mailer->disconnect();
        }

        return sfView::HEADER_ONLY;
    }

    public function executeValidateAllCartsBeforeOrderPeriod($request) {
        // retrieve active period
        if (null != $katao_period = KataoPeriodPeer::getActivePeriod()) {
            // check if we are after the delay before automatic validation
            if (date('Y-m-d') == date('Y-m-d', strtotime(sprintf('-%d days', wpConfig::getCartValidationDaysNumber()), $katao_period->getOrderEndedAt(null)))) {
                // retrieve all carts with pending status for current period
                $criteria = new Criteria();
                $criteria->addJoin(KataoCartPeer::KATAO_USER_ID, KataoUserPeer::ID);
                $criteria->add(KataoCartPeer::STATUS, KataoCart::STATUS_IN_PROGRESS);
                $criteria->add(KataoCartPeer::KATAO_PERIOD_ID, $katao_period->getId());
                $criteria->add(KataoUserPeer::IS_MEMBER, true);
                foreach (KataoCartPeer::doSelectJoinKataoUser($criteria) as/*(KataoCart)*/ $katao_cart) {
                    // set cart status to validated
                    $katao_cart->setStatus(KataoCart::STATUS_VALIDATED);
                    $katao_cart->save();
                    // send an email to member with a link to unvalidate his cart
                    if (null != $katao_user = $katao_cart->getKataoUser()) {
                        try {
                            $mailer = new wpMail();
                            $mailer->send(new Swift_Message('KATAO : validation automatique de votre panier', sprintf('Bonjour %s,

Votre panier vient d\'être automatiquement validé car la période de commande se termine bientôt.

Cliquez sur le lien ci-dessous pour accèder à votre panier si vous souhaitez y faire des modifications.
%smon-panier

A bientôt,
L\'équipe KATAO', $katao_user->getFullName(), $katao_user->getLogin(), $katao_user->getPassword(), sfConfig::get('app_katao_frontend_url'))), new Swift_Address($katao_user->getEmail(), $katao_user->getFullName()), sfConfig::get('app_mail_from'));
                            $mailer->disconnect();
                        }
                        catch (Exception $e) {
                            $mailer->disconnect();
                        }
                    }
                }
            }
        }

        return sfView::HEADER_ONLY;
    }

    public function executeDisableAllMembers($request) {
        if ('01-01' == date('m-d')) {
            $criteria = new Criteria();
            $criteria->addJoin(KataoUserPeer::KATAO_MEMBER_ID, KataoMemberPeer::ID);
            $criteria->add(KataoUserPeer::EMAIL, null, Criteria::NOT_EQUAL);
            $criteria->add(KataoUserPeer::EMAIL, '', Criteria::NOT_EQUAL);
            $criteria->add(KataoMemberPeer::IS_MEMBER, true);
            $katao_users = KataoUserPeer::doSelectJoinKataoMember($criteria);

            if (0 < count($katao_users)) {
                if (null != $katao_member_seo = wpConfig::getInstance()->getKataoMember()) {
                    $year = date('Y');
                    $katao_user_seo = $katao_member_seo->getFirstKataoUser();

                    $katao_node_transactions = array();
                    $katao_node_transactions[0]['members'] = Utils::getKataoMembersCount(false);
                    $katao_node_transactions[0]['count'] = Utils::getKataoTransactionsCount(false, $year);
                    $katao_node_transactions[0]['sum'] = Utils::getKataoTransactionsSum(false, $year);
                    foreach (KataoNodePeer::getAllArray() as $katao_node_id => $katao_node_city) {
                        $katao_node_transactions[$katao_node_id]['members'] = Utils::getKataoMembersCount($katao_node_id);
                        $katao_node_transactions[$katao_node_id]['count'] = Utils::getKataoTransactionsCount($katao_node_id, $year);
                        $katao_node_transactions[$katao_node_id]['sum'] = Utils::getKataoTransactionsSum($katao_node_id, $year);
                    }

                    $mailer = new wpMail();
                    foreach ($katao_users as/*(KataoUser)*/ $katao_user) {
                        $katao_member = $katao_user->getKataoMember();
                        $katao_node = $katao_member->getKataoNode();

                        try {
                            $mailer->send(new Swift_Message(sprintf('KATAO : Bonne année %d', $year), sprintf('%s,

Toute l\'équipe de katao te souhaite une bonne et heureuse année %d.
Que toi et ta famille profitent au mieux de ce nouveau tour de soleil pour réaliser tout ce qui ne nuit pas à autrui et à notre bonne et vielle planète !

A ce titre, dans le respect des hommes et de la nature, dans notre noeud %s nous sommes %d et avons l\'année dernière réalisé %d transactions pour un montant de %s

Sur tout le réseau katao, nous sommes %d et avons l\'année dernière réalisé %d transactions pour un montant de %s

Continuons donc notre marche pour réduire notre empreinte écologique tout en nous faisant plaisr !

Comme chaque année, ton compte vient d\'être désactivé.
Si tu veux continuer cette année à réaliser tes achats sur notre réseau, il te faut renouveller ton adhésion en faisant un chèque de %s à l\'ordre de "KATAO ASSOCIATION" et l\'envoyer à l\'adresse :

%s
%s

Pour toute information, prend contact avec %s au %s.
%s', $katao_member->getFirstName(), $year, $katao_node->getCity(),
                                        $katao_node_transactions[$katao_node->getId()]['members'], $katao_node_transactions[$katao_node->getId()]['count'], $katao_node_transactions[$katao_node->getId()]['sum'],
                                        $katao_node_transactions[0]['members'], $katao_node_transactions[0]['count'], $katao_node_transactions[0]['sum'],
                                        wpConfig::getMemberFeeStr(), $katao_user_seo->getFullName(), $katao_user_seo->getFullAdress(), $katao_member_seo->getFirstName(), $katao_user_seo->getPhone(),
                                        Utils::getKataoEmailFooter())), new Swift_Address($katao_user->getEmail(), $katao_user->getFullName()), sfConfig::get('app_mail_from'));
                        }
                        catch (Exception $e) {
                            $mailer->disconnect();
                        }

                        $katao_member->setIsMember(false);
                        $katao_member->save();
                    }
                    $mailer->disconnect();
                }
            }
        }

        return sfView::HEADER_ONLY;
    }
}