<?php

class CrmController extends BaseController {

	/**
	 * Constructor
	 */
	public function __construct() {
		// Establish Filters
		$this->beforeFilter('auth');

		if (Auth::check()) {
			$this->user			 = Auth::user();
			$this->projects	 = $this->user->projects()->whereUsecrm(1)->get();
		}
		$this->projectPrefix = 'crm';
		parent::__construct();

		if ($this->user && !$this->user->hasAnyRole(array(Role::ROLE_CRM, Role::ROLE_LOGISTICS))) {
			$this->beforeFilter('hasRole:' . Role::ROLE_CRM, array('except' => 'getRefrenceStat'));
			$this->beforeFilter('hasRole:' . Role::ROLE_LOGISTICS, array('except' => 'getRefrenceStat'));
		}
	}

	protected function getPartners($input = false, $all = false) {
		$limit = 50;
		if ($all) {
			$limit = 10000;
		}
		if ($input) {
			$orderBy		 = 'salenextdatetime';
			$orderByType = 'ASC';
			if (isset($input['statusType']) && $input['statusType'] == 'agreed') {
				$orderBy		 = 'datetime_of_agree';
				$orderByType = 'ASC';
			}
			elseif (isset($input['statusType']) && $input['statusType'] == 'reject') {
				$orderBy		 = 'id';
				$orderByType = 'DESC';
			}
			if (isset($input['searchText'])) {
				$searchText = $input['searchText'];
				if ($searchText) {
					$searchText	 = e($searchText);
					$where			 = '(partners.name LIKE "%' . $searchText . '%" OR partners.phone LIKE "%' . $searchText . '%" OR partners.city LIKE "%' . $searchText . '%" OR partners.address LIKE "%' . $searchText . '%" OR partners.email LIKE "%' . $searchText . '%" OR partners.comment LIKE "%' . $searchText . '%" OR leads.info LIKE "%\"transaction_id\":' . $searchText . '}%")';
					$partners		 = Partner::with('user', 'lead')
									->join('leads', function($join) {
										$join->on('leads.id', '=', 'partners.lead_id');
									})
									->my($input)
									->whereRaw($where)
									->checkStatus($input)
									->orderBy('salenextdatetime', $orderByType)
									->paginate($limit);
				}
				else {
					$partners = Partner::with('user', 'lead')->my($input)->checkStatus($input)->orderBy($orderBy, $orderByType)->paginate($limit);
				}
			}
			else {
				$partners = Partner::with('user', 'lead')->my($input)->checkStatus($input)->orderBy($orderBy, $orderByType)->paginate($limit);
			}
		}
		else {
			$partners = Partner::with('user', 'lead')->my($input)->checkStatus($input)->orderBy($orderBy, $orderByType)->paginate($limit);
		}

		return $partners;
	}

	public function index() {
		$input = Input::except('page');

		if (!Input::has('statusType')) {
			$input['statusType'] = Session::get('crm_statusType');
		}
		if (!isset($input['statusType']) || !$input['statusType']) {
			$input['statusType'] = 'work';
		}
		if ($input['statusType'] != 'reject') {
			if (!Input::has('status')) {
				$input['status'] = Session::get('crm_status');
			}
		}
		else {
			if (!Input::has('status')) {
				$input['status'] = '';
			}
		}
		if (!Input::has('type')) {
			$input['type'] = Session::get('crm_type');
		}
		if (!Input::has('date')) {
			$input['date'] = Session::get('crm_date');
		}
		if (!$input['statusType']) {
			$input['statusType'] = 'work';
		}
		$input['projectId'] = Session::get($this->projectPrefix . '_work_projectId');

		if (!Input::has('searchText')) {
			$input['searchText'] = '';
		}
		if (Auth::user()->hasRole(Role::ROLE_LOGISTICS) && !Auth::user()->hasRole(Role::ROLE_CRM) && !Auth::user()->isAdmin()) {
			if (!Input::has('statusType') || !in_array($input['statusType'], array('agreed', 'paywaiting'))) {
				$input['statusType'] = 'agreed';
			}
		}
		if (Auth::user()->hasRole(Role::ROLE_LOGISTICS)) {
			if (isset($input['statusType']) && $input['statusType'] == 'agreed' && (!isset($input['type']) || !$input['type'])) {
				$input['type'] = 'registration';
			}
		}
		if (isset($input['statusType']) && $input['statusType'] == 'hr_agreed' && (!isset($input['type']) || !$input['type'])) {
			$input['type'] = 'waitcall';
		}
		if (isset($input['statusType']) && $input['statusType'] == 'hr_traineeship' && (!isset($input['type']) || !$input['type'])) {
			$input['type'] = 'edu';
		}

		if (isset($input['statusType']) && ($input['statusType'] == 'hr_interviewwait' || $input['statusType'] == 'agreed' && $input['type'] != 'success')) {
			$partners = $this->getPartners($input, true);
		}
		elseif (Auth::user()->isAdmin() && isset($input['statusType']) && in_array($input['statusType'], array('work'))) {
			$partners = $this->getPartners($input, true);
		}
		else {
			$partners = $this->getPartners($input);
		}
		$dates = null;
		if (isset($input['statusType']) && ($input['statusType'] == 'hr_interviewwait' || $input['statusType'] == 'agreed' && $input['type'] != 'success')) {
			foreach ($partners as $partner) {
				if ($input['statusType'] == 'hr_interviewwait') {
					$datetime = explode(' ', $partner->salenextdatetime);
				}
				else {
					$datetime = explode(' ', $partner->datetime_of_agree ? $partner->datetime_of_agree : date('Y-m-d H:i:s'));
				}
				$date								 = explode('-', $datetime[0]);
				$dates[$datetime[0]] = "{$date[2]} {$this->months[$date[1]]}";
				if (!isset($input['date']) || $input['date'] == '') {
					$input['date'] = $datetime[0];
				}
				if ($input['date'] != $datetime[0]) {
					$partner->hide = 1;
				}
			}
		}
		elseif (Auth::user()->isAdmin() && isset($input['statusType']) && in_array($input['statusType'], array('work'))) {
			foreach ($partners as $partner) {
        $creationDate = ($partner->lead_created_at)? $partner->lead_created_at : $partner->created_at;
				if ($creationDate) {
					$datetime						 = explode(' ', $creationDate);
					$date								 = explode('-', $datetime[0]);
					$dates[$datetime[0]] = "{$date[2]} {$this->months[$date[1]]}";
					if (!isset($input['date']) || $input['date'] == '') {
						$input['date'] = $datetime[0];
					}
					if ($input['date'] != $datetime[0] && $input['date'] != 'all') {
						$partner->hide = 1;
					}
				}
				else {
					if ($input['date'] != 'all') {
						$partner->hide = 1;
					}
				}
			}
		}
		if ($dates) {
			ksort($dates);
		}

		Session::put('crm_statusType', $input['statusType']);
		Session::put('crm_status', $input['status']);
		Session::put('crm_type', $input['type']);
		Session::put('crm_date', $input['date']);

		$projectId = Session::get($this->projectPrefix . '_work_projectId');
		if (!$projectId) {
			$projectId = Auth::user()->projects()->whereUsecrm(1)->first()->id;
		}
		$myClientCount	 = Partner::my(array('statusType' => 'work'))->checkStatus(array('statusType' => 'work'))->whereProjectId($projectId)->whereRaw(DB::raw('salenextdatetime < NOW()'))->count();
		$allClientCount	 = Partner::where('user_id', '!=', $this->user->id)->whereProjectId($projectId)->checkStatus(array('statusType' => 'work'))->where('status', '!=', Partner::STATUS_DELIVERY_AFTER_WAIT_PAY)->whereRaw(DB::raw('salenextdatetime < NOW()'))->count();

		return $this->setupLayout('crm.index')
										->with('input', $input)
										->with('partners', $partners)
										->with('dates', $dates)
										->with('myClientCount', $myClientCount)
										->with('allClientCount', $allClientCount);
	}

	//аякс поиск
	public function search() {
		$input = Input::except('page');

		if (!Input::has('statusType')) {
			$input['statusType'] = Session::get('crm_statusType');
		}
		if (!isset($input['statusType']) || !$input['statusType']) {
			$input['statusType'] = 'work';
		}
		if ($input['statusType'] != 'reject') {
			if (!Input::has('status')) {
				$input['status'] = Session::get('crm_status');
			}
		}
		else {
			if (!Input::has('status')) {
				$input['status'] = '';
			}
		}
		if (!Input::has('type')) {
			$input['type'] = Session::get('crm_type');
		}
		if (!Input::has('date')) {
			$input['date'] = Session::get('crm_date');
		}
		if (!$input['statusType']) {
			$input['statusType'] = 'work';
		}

		if (!Input::has('projectId')) {
			$input['projectId'] = Session::get($this->projectPrefix . '_work_projectId');
		}
		if (!$input['projectId']) {
			$input['projectId'] = $this->user->projects()->first()->id;
			Session::put($this->projectPrefix . '_work_projectId', $input['projectId']);
		}

		if (!Input::has('statusType')) {
			$input['statusType'] = 'work';
		}
		if ($this->user->hasRole(Role::ROLE_LOGISTICS) && !$this->user->hasRole(Role::ROLE_CRM) && !$this->user->isAdmin()) {
			if (!Input::has('statusType') || !in_array($input['statusType'], array('agreed', 'paywaiting'))) {
				$input['statusType'] = 'agreed';
			}
		}
		if ($this->user->hasRole(Role::ROLE_LOGISTICS)) {
			if (isset($input['statusType']) && $input['statusType'] == 'agreed' && (!isset($input['type']) || !$input['type'])) {
				$input['type'] = 'registration';
			}
		}
		if (isset($input['statusType']) && $input['statusType'] == 'hr_agreed' && (!isset($input['type']) || !$input['type'])) {
			$input['type'] = 'waitcall';
		}
		if (isset($input['statusType']) && $input['statusType'] == 'hr_traineeship' && (!isset($input['type']) || !$input['type'])) {
			$input['type'] = 'edu';
		}

		if (isset($input['statusType']) && ($input['statusType'] == 'hr_interviewwait' || $input['statusType'] == 'agreed' && $input['type'] != 'success')) {
			$partners = $this->getPartners($input, true);
		}
		elseif (Auth::user()->isAdmin() && isset($input['statusType']) && in_array($input['statusType'], array('work'))) {
			$partners = $this->getPartners($input, true);
		}
		else {
			$partners = $this->getPartners($input);
		}
		$dates = null;
		if (isset($input['statusType']) && ($input['statusType'] == 'hr_interviewwait' || $input['statusType'] == 'agreed' && $input['type'] != 'success')) {
			foreach ($partners as $partner) {
				if ($input['statusType'] == 'hr_interviewwait') {
					$datetime = explode(' ', $partner->salenextdatetime);
				}
				else {
					$datetime = explode(' ', $partner->datetime_of_agree);
				}
				$date								 = explode('-', $datetime[0]);
				$dates[$datetime[0]] = "{$date[2]} {$this->months[$date[1]]}";
				if (!isset($input['date']) || $input['date'] == '') {
					$input['date'] = $datetime[0];
				}
				if ($input['date'] != $datetime[0]) {
					$partner->hide = 1;
				}
			}
		}
		elseif (Auth::user()->isAdmin() && isset($input['statusType']) && in_array($input['statusType'], array('work'))) {
			foreach ($partners as $partner) {
        $creationDate = ($partner->lead_created_at)? $partner->lead_created_at : $partner->created_at;
				if ($creationDate) {
					$datetime						 = explode(' ', $creationDate);
					$date								 = explode('-', $datetime[0]);
					$dates[$datetime[0]] = "{$date[2]} {$this->months[$date[1]]}";
					if (!isset($input['date']) || $input['date'] == '') {
						$input['date'] = $datetime[0];
					}
					if ($input['date'] != $datetime[0] && $input['date'] != 'all') {
						$partner->hide = 1;
					}
				}
				else {
					if ($input['date'] != 'all') {
						$partner->hide = 1;
					}
				}
			}
		}
		if ($dates) {
			ksort($dates);
		}

		Session::put('crm_statusType', $input['statusType']);
		Session::put('crm_status', $input['status']);
		Session::put('crm_type', $input['type']);
		Session::put('crm_date', $input['date']);

		$response = array(
				'status'	 => 'success',
				'htmlText' => View::make('crm.table')
								->with('user', $this->user)
								->with('input', $input)
								->with('partners', $partners)
								->with('dates', $dates)
								->with('workProject', Project::find(Session::get($this->projectPrefix . '_work_projectId')))
								->with('months', $this->months)
								->render()
		);

		return Response::json($response);
	}

	public function searchPage() {
		$input = Input::all();

		$searchText = $input['searchLine'];

		$where = 'partners.id=' . intval($searchText) . ' OR partners.shoplogistics_post_id=' . intval($searchText) . ' OR partners.name LIKE "%' . $searchText . '%" OR partners.phone LIKE "%' . $searchText . '%" OR partners.city LIKE "%' . $searchText . '%" OR partners.address LIKE "%' . $searchText . '%" OR partners.email LIKE "%' . $searchText . '%" OR partners.comment LIKE "%' . $searchText . '%" OR leads.data LIKE "%\"transaction_id\":' . $searchText . '}%" OR leads.data LIKE "%\"transaction_id\":\"' . $searchText . '\"}%"';

		$firstSymbol = substr($input['searchLine'], 0, 1);
		if ($firstSymbol == '8') {
			$where .= ' OR partners.phone LIKE "%' . substr($input['searchLine'], 1) . '%"';
		}
		$partners = Partner::with('lead')
						->whereRaw("({$where})")
						->leftJoin('leads', function($join) {
							$join->on('leads.id', '=', 'partners.lead_id');
						})
						->whereRaw('partners.project_id IN (SELECT users_projects.project_id FROM users_projects INNER JOIN projects ON projects.id=users_projects.project_id AND projects.usecrm=1 WHERE users_projects.user_id=' . Auth::user()->id . ')')
						->select('partners.*')
						->get();

		return $this->setupLayout('crm.search')
										->with('input', $input)
										->with('partners', $partners);
	}

	//аякс глобавльный поиск
	public function globalSearch() {
		$input = Input::all();

		$searchText = $input['searchLine'];

		$where = 'id=' . intval($searchText) . ' OR name LIKE "%' . $searchText . '%" OR phone LIKE "%' . $searchText . '%" OR city LIKE "%' . $searchText . '%" OR address LIKE "%' . $searchText . '%" OR email LIKE "%' . $searchText . '%" OR comment LIKE "%' . $searchText . '%"';

		$firstSymbol = substr($input['searchLine'], 0, 1);
		if ($firstSymbol == '8') {
			$where .= ' OR phone LIKE "%' . substr($input['searchLine'], 1) . '%"';
		}
		$partners = Partner::whereRaw("({$where})")
						->whereRaw('partners.project_id IN (SELECT users_projects.project_id FROM users_projects INNER JOIN projects ON projects.id=users_projects.project_id AND projects.usecrm=1 WHERE users_projects.user_id=' . Auth::user()->id . ')')
						->limit(10)
						->get();

		$response = array();
		foreach ($partners as &$partner) {
			$value							 = $partner->toArray();
			$value['statusName'] = $partner->getStatusName();
			$response []				 = $value;
		}

		return Response::json($response);
	}

	//аякс запрос информации по определенном клиенте
	public function getPartner($id) {
		$partner = Partner::find($id);
		if ($partner == null || !is_numeric($id)) {
			$response = array(
					'status' => 'fail'
			);
		}
		else {
			$response = array(
					'status'	 => 'success',
					'partner'	 => $partner->toArray()
			);
		}

		return Response::json($response);
	}

	//аякс сохранение информации о партнере
	public function updatePartner() {
		$input = Input::all();
		$id		 = $input['partner_edit_id'];

		if (Session::token() !== Input::get('_token')) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$validator = Validator::make($input, array(
								'partner_edit_name'	 => 'required',
								'partner_edit_phone' => 'required_without:partner_edit_email',
								'partner_edit_email' => 'email'
		));

		if ($validator->fails()) {
			$messages = $validator->messages();
			if ($messages->has('partner_edit_name')) {
				$message		 = 'Необходимо указать имя';
				$error_field = 'partner_edit_name';
			}
			elseif ($messages->has('partner_edit_phone')) {
				$message		 = 'Необходимо указать телефон';
				$error_field = 'partner_edit_phone';
			}
			elseif ($messages->has('partner_edit_email')) {
				$message		 = 'Неверный формат e-mail адреса';
				$error_field = 'partner_edit_email';
			}
			$response = array(
					'status'				 => 'fail',
					'error_message'	 => $message,
					'error_field'		 => $error_field
			);
			return Response::json($response);
		}

		$project = Project::find(e($input['partner_edit_project_id']));
		if ($project == null) {
				return \App::abort(404);
		}
		$sourceId = e($input['partner_edit_source']);
		if ($sourceId == 0){
			$sourceIdDb = 0;
		}elseif ($sourceId !== 0) {
			$sourceDb = $project->infoSource()->find($sourceId);
			if ($sourceDb){
		  	$sourceIdDb = $sourceDb->id;
			} else {
				$sourceIdDb = 0;
			}
		}else {
				$sourceIdDb = 0;
	  }

		if ($id) {
			$partner = Partner::find($id);
			if ($partner == null) {
				return \App::abort(404);
			}
			$partner->name		       = e($input['partner_edit_name']);
			$partner->phone		       = e($this->preparePhone($input['partner_edit_phone']));
			$partner->email		       = e($input['partner_edit_email']);
			$partner->info_source_id = $sourceIdDb;
			$partner->comment	       = e($input['partner_edit_info']);
			$partner->save();
		}
		else {
			$partner = Partner::create(array(
									'project_id'			 => $project->id,
									'user_id'					 => Auth::user()->id,
					        'info_source_id'	 => $sourceIdDb,
									'status'					 => Partner::STATUS_WORK,
									'name'						 => e($input['partner_edit_name']),
									'phone'						 => e($this->preparePhone($input['partner_edit_phone'])),
									'email'						 => e($input['partner_edit_email']),
									'comment'					 => e($input['partner_edit_info']),
									'salenextdatetime' => DB::raw('NOW()')
			));

			$refrence = Refrence::create(array(
									'partner_id'			 => e($partner->id),
									'comment'					 => e("Добавлен в клиенты"),
									'status'					 => e(Partner::STATUS_WORK),
									'sender_user_id'	 => e(Auth::user()->id),
									'reciver_user_id'	 => e(Auth::user()->id)
			));
		}

		$response = array(
				'status'	 => 'success',
				'partner'	 => $partner->toArray()
		);

		return Response::json($response);
	}

	//берем клиента с которым надо сейчас связаться
	public function getRefrence() {
		$partners	 = Partner::my()->checkStatus(Input::all())->where('salenextdatetime', '<', DB::raw('NOW()'))->orderBy('salenextdatetime', 'ASC')->take(1)->get();
		$partners	 = $partners->toArray();
		$partner	 = false;
		if ($partners) {
			$partner = array_shift($partners);
		}

		$response = array(
				'status'	 => 'success',
				'partner'	 => $partner
		);

		return Response::json($response);
	}

	//берем статистику по заявкам и клиентам с которыми надо работать
	public function getRefrenceStat() {
		$this->user	 = Auth::user();
		$dateWhere	 = '(salenextdatetime < NOW())';

		$leadsCnt		 = 0;
		$partnersCnt = 0;
		if (!Auth::user()->isAdmin()) {
			if ($this->user->hasRole(Role::ROLE_LEADS)) {
				$leadsCnt = Lead::inMyProjects()->count();
			}
			if ($this->user->hasRole(Role::ROLE_CRM) && !$this->user->hasRole(Role::ROLE_LOGISTICS)) {
				$partnersCnt = Partner::with('user')->my()->checkStatus()->whereRaw($dateWhere)->count();
			}
			elseif (!$this->user->hasRole(Role::ROLE_CRM) && $this->user->hasRole(Role::ROLE_LOGISTICS)) {
				$partnersCnt = Partner::with('user')->my()->checkStatus()->whereRaw($dateWhere)->count();
			}
			elseif ($this->user->hasRole(Role::ROLE_CRM) && $this->user->hasRole(Role::ROLE_LOGISTICS)) {
				$partnersCnt = Partner::with('user')->my()->whereIn('status', array(Partner::STATUS_WORK, Partner::STATUS_DELIVERY_AFTER_WAIT_PAY, Partner::STATUS_DELIVERY_AFTER_REGISTRATION, Partner::STATUS_DELIVERY_BEFORE_REGISTRATION))->whereRaw($dateWhere)->count();
			}
		}

		$response = array(
				'status'			 => 'success',
				'partnersCnt'	 => $partnersCnt,
				'leadsCnt'		 => $leadsCnt
		);

		return Response::json($response);
	}

	//откладываем на 15 минут
	public function holdRefrence() {
		$input = Input::all();
		$id		 = $input['partner_id'];

		if (!$id || !is_numeric($id)) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Нет id клиента'
			);
			return Response::json($response);
		}
		$partner = Partner::find($id);

		if ($partner == null || !is_numeric($id) || $partner->user_id != Auth::user()->id) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		$partner->salenextdatetime = DB::raw('DATE_ADD(NOW(), INTERVAL 15 MINUTE)');
		$partner->save();

		$response = array(
				'status' => 'success'
		);

		return Response::json($response);
	}

	//аякс получение комментариев
	public function getPartnerComments($partnerId) {
		$partner = Partner::find($partnerId);
		if ($partner == null || !is_numeric($partnerId)) {
			$response = array(
					'status' => 'fail'
			);
		}
		else {
			$comments = $partner->getComments(0);

			$partner						 = $partner->toArray();
			$partner['comments'] = $comments->toArray();
			if (is_array($partner['comments'])) {
				foreach ($partner['comments'] as &$comment) {
					$comment['comment'] = nl2br($comment['comment']);
				}
			}

			$response = array(
					'status'	 => 'success',
					'partner'	 => $partner
			);
		}

		return Response::json($response);
	}

	//аякс получение нового клиента, для работы
	public function getWorkPartner() {
		$this->user		 = Auth::user();
		$myClientCount = Partner::my(array('statusType' => 'work'))->checkStatus(array('statusType' => 'work'))->whereRaw(DB::raw('salenextdatetime < NOW()'))->count();

		if (!$myClientCount) {
			$projectId = Session::get($this->projectPrefix . '_work_projectId');
			if (!$projectId) {
				$projectId = Auth::user()->projects()->first()->id;
			}
			$partner									 = Partner::where('user_id', '!=', $this->user->id)->whereProjectId($projectId)->checkStatus(array('statusType' => 'work'))->where('status', '!=', Partner::STATUS_DELIVERY_AFTER_WAIT_PAY)->whereRaw(DB::raw('salenextdatetime < NOW()'))->orderBy('salenextdatetime', 'ASC')->first();
			$partner->user()->associate($this->user);
			$partner->salenextdatetime = DB::raw('DATE_ADD(NOW(), INTERVAL 30 MINUTE)');
			$partner->save();

			$partner->saveHistory("Клиент перешел к другому менеджеру: {$this->user->first_name} {$this->user->last_name}");

			$response = array(
					'status'	 => 'success',
					'partner'	 => $partner->toArray()
			);
		}

		return Response::json($response);
	}

	//настройки экспорта в шоплогистикс
	public function shopLogisticsExport() {
		$date			 = Session::get('crm_date');
		$projectId = Session::get($this->projectPrefix . '_work_projectId');
		if (!$date || !$projectId) {
			return Redirect::to('crm');
		}

//		foreach (Partner::whereTransportType(Partner::TRANSPORT_TYPE_POST)->whereRaw('datetime_of_agree IS NOT NULL')->get() as $partner) {
//			$as = str_replace("{$partner->zip}, ", '', $partner->address);
//			$as = str_replace("{$partner->state}", '', $as);
//			$as = str_replace("{$partner->city}", '', $as);
//			$as = str_replace(", г. , ", '', $as);
//			$as = str_replace(", г. ", '', $as);
//			$as = str_replace(", г.", '', $as);
//			$partner->address_short = $as;
//			$partner->save();
//		}

		$fileName = "ShopLogistics{$date}";
		Excel::create($fileName, function($excel) {
			$excel->sheet('Почтовые доставки', function($sheet) {
				$date			 = Session::get('crm_date');
				$projectId = Session::get($this->projectPrefix . '_work_projectId');
				$sheet->loadView('crm.shoplogistics.partners')->with('partners', Partner::with('user')
												->checkStatus(array('statusType' => 'agreed', 'type' => 'registration'))
												->whereProjectId($projectId)
												->whereTransportType(Partner::TRANSPORT_TYPE_POST)
												->whereClarificationAddress(0)
												->whereRaw('(DATE(datetime_of_agree)<? OR (DATE(datetime_of_agree)=? AND TIME(datetime_of_agree)<TIME(?)))', array($date, $date, '16:00:00'))
												->get());
			});
			$excel->sheet('Товары', function($sheet) {
				$date			 = Session::get('crm_date');
				$projectId = Session::get($this->projectPrefix . '_work_projectId');
				$sheet->loadView('crm.shoplogistics.products')->with('partners', Partner::with('user')
												->checkStatus(array('statusType' => 'agreed', 'type' => 'registration'))
												->whereProjectId($projectId)
												->whereTransportType(Partner::TRANSPORT_TYPE_POST)
												->whereClarificationAddress(0)
												->whereRaw('(DATE(datetime_of_agree)<? OR (DATE(datetime_of_agree)=? AND TIME(datetime_of_agree)<TIME(?)))', array($date, $date, '16:00:00'))
												->get());
			});
		})->store('xlsx');

		return Response::download('../app/storage/exports/' . $fileName . '.xlsx');
	}

	//формирование акта забора ShopLogistics
	public function shopLogisticsActFence() {
		$date			 = Session::get('crm_date');
		$projectId = Session::get($this->projectPrefix . '_work_projectId');
		if (!$date || !$projectId) {
			return Redirect::to('crm');
		}

		$fileName = "ShopLogisticsActFence-{$date}";
		Excel::create($fileName, function($excel) {
			$excel->sheet('Лист1', function($sheet) {
				$date			 = Session::get('crm_date');
				$projectId = Session::get($this->projectPrefix . '_work_projectId');
				$products	 = array();

				foreach (Partner::with('user')
								->checkStatus(array('statusType' => 'agreed', 'type' => 'registration'))
								->whereProjectId($projectId)
								->whereTransportType(Partner::TRANSPORT_TYPE_POST)
								->whereClarificationAddress(0)
								->whereRaw('(DATE(datetime_of_agree)<? OR (DATE(datetime_of_agree)=? AND TIME(datetime_of_agree)<TIME(?)))', array($date, $date, '16:00:00'))
								->get() as $partner) {
					if ($partner->getCart()) {
						foreach ($partner->getCart() as $item) {
							if ($item['quant'] > 0) {
								$product = Product::withTrashed()->whereId($item['id'])->first();
								if ($product) {
									if (!isset($products[$product->article])) {
										$products[$product->article]['article']	 = $product->article;
										$products[$product->article]['name']		 = $product->name;
										$products[$product->article]['price']		 = $product->price_purchase;
										$products[$product->article]['quant']		 = 0;
									}
									$products[$product->article]['quant'] += $item['quant'];
								}
							}
						}
					}
				}
				$sheet->loadView('crm.shoplogistics.act_fence')->with('products', $products);
			});
		})->store('xlsx');

		return Response::download('../app/storage/exports/' . $fileName . '.xlsx');
	}

	//формирование акта забора СДЭК
	public function cdekActFence() {
		$date			 = Session::get('crm_date');
		$projectId = Session::get($this->projectPrefix . '_work_projectId');
		if (!$date || !$projectId) {
			return Redirect::to('crm');
		}

		$fileName = "CdekActFence-{$date}";
		Excel::create($fileName, function($excel) {
			$excel->sheet('Лист1', function($sheet) {
				$date			 = Session::get('crm_date');
				$projectId = Session::get($this->projectPrefix . '_work_projectId');
				$products	 = array();

				foreach (Partner::with('user')
								->checkStatus(array('statusType' => 'agreed', 'type' => 'registration'))
								->whereProjectId($projectId)
								->whereTransportType(Partner::TRANSPORT_TYPE_CDEK)
								->whereClarificationAddress(0)
								->whereRaw('(DATE(datetime_of_agree)<? OR (DATE(datetime_of_agree)=? AND TIME(datetime_of_agree)<TIME(?)))', array($date, $date, '16:00:00'))
								->get() as $partner) {
					if ($partner->getCart()) {
						foreach ($partner->getCart() as $item) {
							if ($item['quant'] > 0) {
								$product = Product::withTrashed()->whereId($item['id'])->first();
								if ($product) {
									if (!isset($products[$product->article])) {
										$products[$product->article]['article']	 = $product->article;
										$products[$product->article]['name']		 = $product->name;
										$products[$product->article]['price']		 = $product->price_purchase;
										$products[$product->article]['quant']		 = 0;
									}
									$products[$product->article]['quant'] += $item['quant'];
								}
							}
						}
					}
				}
				$sheet->loadView('crm.shoplogistics.act_fence')->with('products', $products);
			});

			$excel->sheet('Лист2', function($sheet) {
				$date			 = Session::get('crm_date');
				$projectId = Session::get($this->projectPrefix . '_work_projectId');
				$partners	 = Partner::with('user')
								->checkStatus(array('statusType' => 'agreed', 'type' => 'registration'))
								->whereProjectId($projectId)
								->whereTransportType(Partner::TRANSPORT_TYPE_CDEK)
								->whereClarificationAddress(0)
								->whereRaw('(DATE(datetime_of_agree)<? OR (DATE(datetime_of_agree)=? AND TIME(datetime_of_agree)<TIME(?)))', array($date, $date, '16:00:00'))
								->get();

				$sum		 = 0;
				$weight	 = 0;
				foreach ($partners as $partner) {
					$partner->weight = 0;
					if ($partner->getCart()) {
						foreach ($partner->getCart() as $item) {
							if ($item['quant'] > 0) {
								$product = Product::withTrashed()->whereId($item['id'])->first();
								if ($product) {
									$partner->weight += $product->weight * $item['quant'];
									$partner->sum += $item['price'] * $item['quant'];
									$weight += $product->weight * $item['quant'];
									$sum += $item['price'] * $item['quant'];
								}
							}
						}
					}
				}

				$sheet->loadView('crm.cdek.act_fence')->with('partners', $partners)->with('sum', $sum)->with('weight', $weight);
			});
		})->store('xlsx');

		return Response::download('../app/storage/exports/' . $fileName . '.xlsx');
	}

}
