<?php

class PartnerController extends BaseController {

	/**
	 * Constructor
	 */
	public function __construct() {
		// Establish Filters
		if (Sentry::check()) {
			$user = User::find(Sentry::getUser()->id);
			if (!$user->hasAnyRole(array(Role::ROLE_CRM, Role::ROLE_LOGISTICS, Role::ROLE_PRODUCTION, Role::ROLE_FRANCHISEES))) {
				$this->beforeFilter('hasRole:' . Role::ROLE_CRM);
				$this->beforeFilter('hasRole:' . Role::ROLE_LOGISTICS);
				$this->beforeFilter('hasRole:' . Role::ROLE_PRODUCTION);
				$this->beforeFilter('hasRole:' . Role::ROLE_FRANCHISEES);
			}
		}
		else {
			$this->beforeFilter('auth');
		}
	}

	public function index($partnerId) {
		$user = User::find(Sentry::getUser()->id);

		$partner = Partner::find($partnerId);
		if ($partner == null || !is_numeric($partnerId)) {
			return Redirect::to('/');
		}

		if (!$partner->statusIsAllow(Partner::ALLOW_OPEN_PARTNER)) {
			return Redirect::to('/crm');
		}

		if (!User::find(Sentry::getUser()->id)->hasAnyRole(array(Role::ROLE_FRANCHISEES, Role::ROLE_AGENT))) {
			if (in_array($partner->status, array(Partner::STATUS_NOANSWER, Partner::STATUS_REJECT))) {
				if ($partner->user_id != Sentry::getUser()->id) {
					$user = User::find(Sentry::getUser()->id);
					$partner->user()->associate($user);
					$partner->save();
					$partner->saveHistory("Клиент перешел к другому менеджеру: {$user->first_name} {$user->last_name}");
				}
			}
		}

		$oldPartners = Partner::where('project_id', '=', $partner->project_id)->where('id', '!=', $partner->id)->wherePhone($partner->phone)->orderBy('id', 'DESC')->get();

		$promoters = array('0' => '--Без промокода--');
		foreach (Promoter::whereUserId(Sentry::getUser()->user_id ? Sentry::getUser()->user_id : Sentry::getUser()->id)->orderBy('code', 'ASC')->get() as $item) {
			$promoters[$item->id] = "{$item->code} - {$item->name}";
		}

		return View::make('partner.index')
										->with('user', $user)
										->with('partner', $partner)
										->with('oldPartners', $oldPartners)
										->with('months', $this->months)
										->with('promoters', $promoters);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_TRASH_PHONE) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		$partner->salenextdatetime = DB::raw('NOW()');
		$partner->status					 = Partner::STATUS_TRASH_PHONE;
		$partner->recall					 = 0;
		$partner->save();

		$refrence	 = $partner->saveHistory("Не корректный номер телефона");
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_REPEATED) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		$partner->salenextdatetime = DB::raw('NOW()');
		$partner->status					 = Partner::STATUS_REPEATED;
		$partner->recall					 = 0;
		$partner->save();

		$refrence	 = $partner->saveHistory("Повторный клиент");
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		if ($partner->status == Partner::STATUS_WORK) {
			if ($partner->recall < 2) {
				$partner->salenextdatetime = DB::raw('DATE_ADD(NOW(), INTERVAL 90 MINUTE)');
				$partner->status					 = Partner::STATUS_WORK;
				$partner->recall++;
				$partner->save();

				$refrence = $partner->saveHistory("Не дозвонился до клиента, перезвонить через 30 минут");
			}
			elseif ($partner->recall < 4) {
				$partner->salenextdatetime = DB::raw('DATE_ADD(NOW(), INTERVAL 23 HOUR)');
				$partner->status					 = Partner::STATUS_WORK;
				$partner->recall++;
				$partner->save();

				$refrence = $partner->saveHistory("Не дозвонился до клиента, перезвонить завтра");
			}
			else {
				$partner->recall++;
				$partner->status = Partner::STATUS_NOANSWER;
				$partner->save();

				if ($partner->recall == 4) {
					$refrence = $partner->saveHistory("Не дозвонился до клиента, отправлен в архив недозвонившихся");
				}
				else {
					$refrence = $partner->saveHistory("Не дозвонился до клиента, оставлен в архиве недозвонившихся");
				}
			}
		}
		else {
			$partner->salenextdatetime = DB::raw('DATE_ADD(NOW(), INTERVAL 30 MINUTE)');
			$partner->save();

			$refrence = $partner->saveHistory("Не дозвонился до клиента, перезвонить через 30 минут");
		}

		$partner = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		$partner->salenextdatetime = DB::raw('DATE_ADD(NOW(), INTERVAL 15 MINUTE)');
		$partner->save();
		$refrence									 = $partner->saveHistory("Клиент занят, перезвонить через 15 минут");

		$partner = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_REJECT) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		if (!isset($input['reject_type']) || !$input['reject_type']) {
			if (!isset($input['comment']) || $input['comment'] == '') {
				$message		 = 'Необходимо указать причину отказа';
				$error_field = 'reject_comment';
				$response		 = array(
						'status'				 => 'fail',
						'error_message'	 => $message,
						'error_field'		 => $error_field
				);
				return Response::json($response);
			}
			$partner->reject_id = 0;
		}
		else {
			$reject = Reject::find($input['reject_type']);
			if ($reject == null || !is_numeric($input['reject_type']) || $reject->project_id != $partner->project_id) {
				$response = array(
						'status' => 'fail'
				);
				return Response::json($response);
			}
			$partner->reject_id = $reject->id;
			if (isset($input['comment']) && $input['comment']) {
				$input['comment'] = "{$reject->name}. {$input['comment']}";
			}
			else {
				$input['comment'] = $reject->name;
			}
		}

		// откат счетчика заблокированных шторок
		foreach ($partner->productions()->get() as $partnerProduct) {
			if ($partnerProduct->production_start_at && $partnerProduct->production_master_id == 0 && !$partnerProduct->production_end_at) { // без даты окончания, т.к кол-во шторок уже уменьшается при окончании производства
				$productId		 = $partnerProduct->product_id;
				$productTypeId = $partnerProduct->product_type_id;

				$productStorageType = ProductQuant::where('product_id', $productId)->where('product_type_id', $productTypeId)->first();
				if ($productStorageType != null) {
					$oldQuant          = $productStorageType->quant;
				  $oldQuantBlocked   = $productStorageType->quant_blocked;
					
					$productStorageType->decrement('quant_blocked');
					
					$productStorageType->saveProductQuantHistory($productId, 0, $productTypeId, 0, $oldQuant, -1, $oldQuantBlocked, '№'.$partnerProduct->partner_id.' Отказ. Откат счетчика заблокированных шторок (продукт)');
				}
			}
		}
		$partner->productions()->delete();

		if ($partner->statusIsAllow(Partner::ALLOW_DELETE_CDEK)) {
			$result = $partner->deleteCdek();
		}
		DB::table('shipments_partners')->where('partner_id', '=', $partner->id)->delete();

		$partner->recall = 0;
		if ($partner->status == Partner::STATUS_DELIVERING) {
			$partner->status = Partner::STATUS_DELIVERING_FAIL;
			$message				 = "Клиент отказался от покупки: ";
		}
		elseif ($partner->status == Partner::STATUS_WAIT_CLIENT_PAY || $partner->status == Partner::STATUS_WAIT_CLIENT_PAY_CONFIRM) {
			$partner->status = Partner::STATUS_WAIT_CLIENT_PAY_FAIL;
			$message				 = "Клиент отказался платить: ";
		}
		else {
			$partner->status = Partner::STATUS_REJECT;
			$message				 = "Клиент отказался покупать: ";
		}
		$partner->save();

		if ($partner->lead_id) {
			$partner->lead->leadstatPay(0);
		}

		$refrence	 = $partner->saveHistory($message . $input['comment']);
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

	//переносим клиента на нужную дату и время
	public function setDateTime() {
		$input		 = Input::all();
		$partnerId = $input['partner_id'];

		if (!$partnerId || !is_numeric($partnerId)) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		if (!isset($input['comment']) || $input['comment'] == '') {
			$message		 = 'Необходимо указать текст';
			$error_field = 'refrence_comment';

			$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
			return Response::json($response);
		}
//		if (isset($input['comment'])) {
//			if (strlen($input['comment']) < 50) {
//				$message		 = 'Слишком короткий комментарий';
//				$error_field = 'refrence_comment';
//				$response		 = array(
//						'status'				 => 'fail',
//						'error_message'	 => $message,
//						'error_field'		 => $error_field
//				);
//				return Response::json($response);
//			}
//		}

		$partner = Partner::find($partnerId);
		if ($partner == null || !is_numeric($partnerId) || $partner->user_id != Sentry::getUser()->id) {
			$message		 = 'Эта не ваш клиент, вы не можете обработать его';
			$error_field = 'refrence_comment';

			$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
			return Response::json($response);
		}

		$validator = Validator::make(
										$input, array(
								'nextdate' => 'required|date_format:d.m.Y',
								'nexttime' => 'required|date_format:H:i'
										)
		);
		if ($validator->fails()) {
			$message		 = 'Не правильная дата или время';
			$error_field = 'refrence_nextdatetime';

			$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
			return Response::json($response);
		}

		$validator = Validator::make(
										$input, array(
								'nextdate' => 'after:' . date("Y-m-d", time() - 60 * 60 * 24)
										)
		);
		if ($validator->fails()) {
			$message		 = 'На эту дату нельзя перенести клиента';
			$error_field = 'refrence_nextdatetime';

			$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
			return Response::json($response);
		}

		if ($input['nextdate'] && $input['nexttime']) {
			$nextdate = explode('.', $input['nextdate']);
			if (checkdate($nextdate[1], $nextdate[0], $nextdate[2])) {
//				if (preg_match("/^([0-1][0-9]|[2][0-3]):([0-5][0-9])$/", $input['nexttime'])) {
				$partner->salenextdatetime = "{$nextdate[2]}-{$nextdate[1]}-{$nextdate[0]} {$input['nexttime']}";
//				}
			}
		}
		$partner->recall = 0;
		if (in_array($partner->status, array(Partner::STATUS_REJECT, Partner::STATUS_NOANSWER))) {
			$partner->status = Partner::STATUS_WORK;
		}
		$partner->save();

		$refrence	 = $partner->saveHistory("Перенес клиента на {$nextdate[0]} {$this->months[$nextdate[1]]} {$input['nexttime']}. {$input['comment']}");
		$partner	 = Partner::find($partnerId);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'						 => 'success',
				'btns'							 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'						 => $comment,
				'partnerStatusName'	 => $partner->getStatusName(),
				'partner'						 => $partner->toArray()
		);

		return Response::json($response);
	}

	// для кнопки отправка в производство
	public function toProduction($partnerId) {
		if (!$partnerId || !is_numeric($partnerId)) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Неверный номер клиента'
			);
			return Response::json($response);
		}

		$partner = Partner::find($partnerId);
		if (!$partner) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		if ($partner->user->money >= $partner->franchisees_cost) {
			$cart	 = $partner->getCart();
			$count = 0;
			foreach ($cart as $cartContent) {
				foreach ($cartContent as $cartContentPos) {
					$count += $cartContentPos['quant']; // общее кол-во товаров в заказе
				}
			}
			$position				 = 1;
			$haveProduction	 = 0; //есть ли в заказе хотя бы одна позиция для производства,
			//0 - нет (статус->готов), 1 - есть (статус->30 или 31)
			$haveOnStorage	 = 0; //есть ли в заказе позиции, которые могут производиться и имеются на складе
			//0 - нет (статус->30), 1 - есть (статус->31)
			$partner->productions()->delete();

			foreach ($cart as $key => $value) {
				$product = Product::find($key);
				if ($product != null) {
					$quants = $product->getQuant();

					foreach ($value as $key2 => $item) {
						$productType = ProductType::find($key2);
						if ($productType) {
							//$value2 - заказ
							//$value3 - изготовить
							//$value4 - заблокировать
							$value2				 = $item['quant'];
							$quantStore		 = $quants[$key2]['quant']; // кол-во на складе
							$quantBlocked	 = $quants[$key2]['quant_blocked']; // заблокированное кол-во
							$quantFree		 = $quantStore - $quantBlocked; // кол-во доступное для заказа
							if ($quantFree < 0) {
								$quantFree = 0;
							}
							if ($value2 < $quantFree) { // если заказ < доступно для заказа
								$value3	 = 0; // в производство
								$value4	 = $value2; // заблокировать (взять со склада)
							}
							else { // заказ больше, чем доступно
								$value3	 = $value2 - $quantFree; // в производство
								$value4	 = $quantFree; // заблокировать
							}

							if ($product->no_production == 0) { // временно отключает работу со складом для продуктов с отметкой "не производить"
								//резервирование на складе (увеличение поля quant_blocked)
								$productStorageType = ProductQuant::where('product_id', $product->id)->where('product_type_id', $key2)->first();
								if ($productStorageType != null) {
									$oldQuant          = $productStorageType->quant;
									$oldQuantBlocked   = $productStorageType->quant_blocked;

									if($value4 != 0){
										$newBlockedQuant	 = $quantBlocked + $value4; // новое значение поля quant_blocked (старое значение + заказ)
										$productStorageType->quant_blocked = $newBlockedQuant;
										$productStorageType->save();

										$productStorageType->saveProductQuantHistory($product->id, 0, $key2, 0, $oldQuant, $value4, $oldQuantBlocked, '№'.$partner->id.' Резервирование при отправке в работу из статуса Недостаточно денег (продукт)');
									}
								}
							}
							if ($product->no_production == 0) {
								// заполнение таблицы для производства - изготовить
								if ($value3 > 0) {
									$haveProduction = 1;
									for ($i = 0; $i < $value3; $i++) {
										Production::create(array(
												'partner_id'			 => e($partner->id),
												'order_id'				 => e("{$partner->id}/{$position}-{$count}"),
												'product_id'			 => e($key),
												'product_type_id'	 => e($key2),
												'name'						 => e($item['name'])
										));
										$position++;
									}
								}
								// заполнение таблицы для производства - взять со склада
								if ($value4 > 0) {
									$haveProduction	 = 1;
									$haveOnStorage	 = 1;
									for ($i = 0; $i < $value4; $i++) {
										Production::create(array(
												'partner_id'					 => e($partner->id),
												'order_id'						 => e("{$partner->id}/{$position}-{$count}"),
												'product_id'					 => e($key),
												'product_type_id'			 => e($key2),
												'name'								 => e($item['name']),
												'production_start_at'	 => DB::raw('NOW()'),
												'production_master_id' => 0
										));
										$position++;
									}
								}
							}
							elseif ($product->no_production == 1) {
								// заполнение таблицы производства - создать как готовый продукт
								if ($value2 > 0) { // кол-во из заказа
									for ($i = 0; $i < $value2; $i++) {
										Production::create(array(
												'partner_id'					 => e($partner->id),
												'order_id'						 => e("{$partner->id}/{$position}-{$count}"),
												'product_id'					 => e($key),
												'product_type_id'			 => e($key2),
												'name'								 => e($item['name']),
												'production_start_at'	 => DB::raw('NOW()'),
												'production_end_at'		 => DB::raw('NOW()'),
												'production_master_id' => 0
										));
										$position++;
									}
								}
							}
						}
						unset($productType);
					}
					unset($product);
				}
			}
			if (!$partner->datetime_of_agree) {
				$partner->datetime_of_agree = DB::raw('NOW()');
			}

			if ($haveProduction == 1) { // есть позиции, которые могут производиться
				if ($haveOnStorage == 1) { // есть позиции, которые нужно взять на складе
					$partner->status = Partner::STATUS_PRODUCTION_PROCESS;
				}
				else {
					$partner->status = Partner::STATUS_PRODUCTION_WAIT;
				}
			}
			else if ($noProduction == 0) {
				$partner->status = Partner::STATUS_REGISTRATION;
			}
			$partner->save();

			if ($partner->paytype == 3) {
				if ($partner->pickup == 1) {
					$message = "Заказ оформлен: отправка до франчайзи, стоимость {$partner->franchisees_cost} руб.";
				}
				else {
					$message = "Заказ оформлен: отправка наложенным платежом, стоимость {$partner->franchisees_cost} руб, стоимость доставки {$partner->deliveryprice} руб.";
				}
			}
			else {
				$message = "Заказ оформлен: доставка наложенным платежом, к оплате {$partner->cartprice} руб, стоимость доставки {$partner->deliveryprice} руб";
			}

			$refrence	 = $partner->saveHistory($message);
			$partner	 = Partner::find($partnerId);

			$refrence->load('sender');
			$comment						 = $refrence->toArray();
			$comment['comment']	 = nl2br($comment['comment']);

			$response = array(
					'status'						 => 'success',
					'btns'							 => View::make('partner.btns')->with('partner', $partner)->render(),
					'comment'						 => $comment,
					'frozenMoney'				 => User::find(Sentry::getUser()->id)->getFrozenMoney(),
					'partnerStatusName'	 => $partner->getStatusName(),
					'partner'						 => $partner->toArray()
			);
		}
		else { // денег на счете недостаточно
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Недостаточно средств на депозите.'
			);
		}
		return Response::json($response);
	}

	//клиент согласился
	public function agree() {
		$input		 = Input::all();
		$partnerId = $input['agreePartnerId'];

		if (!$partnerId || !is_numeric($partnerId)) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($partnerId);
		if ($partner == null || !is_numeric($partnerId)) {
//		if ($partner == null || !is_numeric($partnerId) || $partner->status != Partner::STATUS_SIZING) {
			$message		 = 'Клиент не найден';
			$error_field = 'agree_comment';

			$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
			return Response::json($response);
		}

		if (isset($input['need_size']) && !$input['need_size_message']) {
			$message		 = 'Необходимо указать автомобиль для снятия размеров';
			$error_field = 'agree_pay_error_container';

			$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
			return Response::json($response);
		}
		elseif ( (!isset($input['agree_product']) || !is_array($input['agree_product'])) && !isset($input['need_size']) ) {
			$message		 = 'Необходимо выбрать продукт';
			$error_field = 'agree_pay_error_container';

			$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
			return Response::json($response);
		}

		$count = 0;
		if(isset($input['agree_product'])){
			foreach ($input['agree_product'] as $key => $value) {
				foreach ($value as $key2 => $value2) {
					$count += $value2;
				}
			}
		}
		if (!isset($input['agree_pay_type']) || !in_array($input['agree_pay_type'], array(1, 2, 3))) {
			$message		 = 'Необходимо выбрать тип оплаты';
			$error_field = 'agree_pay_error_container';

			$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
			return Response::json($response);
		}
		if (!isset($input['agree_transport_type']) || !in_array($input['agree_transport_type'], array(Partner::TRANSPORT_TYPE_DPD, Partner::TRANSPORT_TYPE_POST, Partner::TRANSPORT_TYPE_CDEK))) {
			$message		 = 'Необходимо выбрать тип доставки';
			$error_field = 'agree_pay_error_container';

			$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
			return Response::json($response);
		}
		if (!isset($input['agree_pickup'])) {
			if ($input['agree_transport_type'] == Partner::TRANSPORT_TYPE_CDEK) {
				if (!isset($input['receiverCityId']) || !$input['cdek_city']) {
					$message		 = 'Необходимо указать город доставки из СДЭК';
					$error_field = 'agree_pay_error_container';

					$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
					return Response::json($response);
				}
				if (!$input['cdekCacheOnDelivery'] && in_array($input['agree_pay_type'], array(2, 3))) {
					$message		 = 'В выбранном городе нет наложенного платежа';
					$error_field = 'agree_pay_error_container';

					$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
					return Response::json($response);
				}
			}
		}
		if (!isset($input['need_size'])) {
			if (!$count) {
				$message		 = 'Необходимо выбрать продукт';
				$error_field = 'agree_pay_error_container';

				$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
				return Response::json($response);
			}
			if (!isset($input['agree_pickup'])) {
				if (!isset($input['agree_delivery_pay']) || !$input['agree_delivery_pay']) {
					$message		 = 'Необходимо указать стоимость доставки';
					$error_field = 'agree_pay_error_container';

					$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
					return Response::json($response);
				}
			}

			if ($input['agree_pay_type'] == 1) {
				$validator = Validator::make($input, array('agree_nextdate' => 'required|date_format:d.m.Y'));
				if ($validator->fails()) {
					$message		 = 'Не правильная дата';
					$error_field = 'agree_pay_error_container';

					$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
					return Response::json($response);
				}
				$validator = Validator::make($input, array('agree_nextdate' => 'after:' . date("Y-m-d", time() - 60 * 60 * 24)));
				if ($validator->fails()) {
					$message		 = 'На эту дату нельзя перенести клиента';
					$error_field = 'agree_pay_error_container';

					$response = array('status' => 'fail', 'error_message' => $message, 'error_field' => $error_field);
					return Response::json($response);
				}
			}
		}

		$partner->name									 = e(trim($input['agree_name']));
		$partner->phone									 = e($this->preparePhone($input['agree_phone']));
		$partner->email									 = e($input['agree_email']);
		$partner->paytype								 = e($input['agree_pay_type']);
		$partner->zip										 = e(isset($input['agree_zip']) ? $input['agree_zip'] : DB::raw(NULL));
		$partner->state									 = e(isset($input['agree_state']) ? $input['agree_state'] : DB::raw(NULL));
		$partner->region								 = e(isset($input['agree_region']) ? $input['agree_region'] : DB::raw(NULL));
		$partner->city									 = e(isset($input['agree_city']) ? $input['agree_city'] : DB::raw(NULL));
		$partner->street								 = e(isset($input['agree_street']) ? $input['agree_street'] : DB::raw(NULL));
		$partner->building							 = e(isset($input['agree_building']) ? $input['agree_building'] : DB::raw(NULL));
		$partner->room									 = e($input['agree_room']);
		$partner->address								 = e(isset($input['agree_address']) ? $input['agree_address'] : DB::raw(NULL));
		$partner->address_short					 = e($input['agree_address_short']);
		$partner->comment								 = e($input['agree_info']);
		$partner->comment_to_production	 = e($input['agree_info2']);
		$partner->transport_type				 = e($input['agree_transport_type']);
		$partner->cdek_senderCityId			 = e($input['senderCityId']);
		$partner->cdek_receiverCityId		 = e($input['receiverCityId']);
		$partner->cdek_receiverCity			 = e(isset($input['cdek_city']) ? $input['cdek_city'] : DB::raw(NULL));
		$partner->cdek_tariffId					 = e($input['tariffId']);
		$partner->cdek_cacheOnDelivery	 = e($input['cdekCacheOnDelivery']);
		$partner->clarification_address	 = 0;
		if (isset($input['iswholesaler'])) {
			$partner->iswholesaler = 1;
		}
		else {
			$partner->iswholesaler = 0;
		}
		if (isset($input['agree_pickup'])) {
			$partner->pickup = 1;
		}
		else {
			$partner->pickup = 0;
		}
		if (isset($input['agree_prepay'])) {
			$partner->prepay = $input['agree_prepay'];
		}
		else {
			$partner->prepay = 0;
		}

		$sum			 = 0;
		$discount	 = 0;
		if ($input['agree_discount']) {
			$discount = $input['agree_discount'];
		}
		$position								 = 1;
		$haveProduction					 = 0; //есть ли в заказе хотя бы одна позиция для производства,
		//0 - нет (статус->готов), 1 - есть (статус->30 или 31)
		$haveOnStorage					 = 0; //есть ли в заказе позиции, которые могут производиться и имеются на складе
		//0 - нет (статус->30), 1 - есть (статус->31)
		$franchisees_cost_total	 = 0;
		$agent_cost_total				 = 0;
		$prime_cost_total				 = 0;
		$franchisees_cost				 = Settings::where('name', 'franchisees_cost')->first()->value;
		$agent_cost							 = Settings::where('name', 'agent_cost')->first()->value;
		$prime_cost							 = Settings::where('name', 'prime_cost')->first()->value;
		$prime_cost_default			 = $prime_cost;
		$cart										 = array();
		// откат счетчика заблокированных шторок
		foreach ($partner->productions()->get() as $partnerProduct) {
			if ($partnerProduct->production_start_at && $partnerProduct->production_master_id == 0) {
				$productId		 = $partnerProduct->product_id;
				$productTypeId = $partnerProduct->product_type_id;

				$productStorageType = ProductQuant::where('product_id', $productId)->where('product_type_id', $productTypeId)->first();
				if ($productStorageType != null) {
					$oldQuant          = $productStorageType->quant;
				  $oldQuantBlocked   = $productStorageType->quant_blocked;
					
					$productStorageType->decrement('quant_blocked');
					
					$productStorageType->saveProductQuantHistory($productId, 0, $productTypeId, 0, $oldQuant, -1, $oldQuantBlocked, '№'.$partner->id.' Переоформление заказа. Откат счетчика заблокированных шторок (продукт)');
				}
			}
		}

		$partner->productions()->delete();
		if(isset($input['agree_product'])){
			foreach ($input['agree_product'] as $key => $value) {
				$product = Product::find($key);
				if ($product != null) {
					$prices	 = $product->getPrices();
					$quants	 = $product->getQuant();

					foreach ($value as $key2 => $value2) {
						$productType = ProductType::find($key2);
						if (isset($prices[$key2]) && $productType != null && $value2 > 0) {
							$price = 0;
							if (isset($prices[$key2]['prime_cost']) && $prices[$key2]['prime_cost']) {
								$prime_cost = $prices[$key2]['prime_cost'];
							}
							else {
								$prime_cost = $prime_cost_default;
							}
							if (isset($input['iswholesaler'])) {
								$price = $prices[$key2]['price_opt'];
							}
							else {
								if ($input['agree_pay_type'] == 1 && $prices[$key2]['price']) {
									$price = $prices[$key2]['price'];
								}
								elseif ($input['agree_pay_type'] == 2 && $prices[$key2]['price_back']) {
									$price = $prices[$key2]['price_back'];
								}
								elseif ($input['agree_pay_type'] == 3 && $prices[$key2]['price']) {
									$price = $prices[$key2]['price'];
								}
							}
							//$value2 - заказ
							//$value3 - изготовить
							//$value4 - заблокировать
							$quantStore		 = $quants[$key2]['quant']; // кол-во на складе
							$quantBlocked	 = $quants[$key2]['quant_blocked']; // заблокированное кол-во
							$quantFree		 = $quantStore - $quantBlocked; // кол-во доступное для заказа
							if ($quantFree < 0) {
								$quantFree = 0;
							}
							if ($value2 < $quantFree) { // если заказ < доступно для заказа
								$value3	 = 0; // в производство
								$value4	 = $value2; // заблокировать (взять со склада)
							}
							else { // заказ больше, чем доступно
								$value3	 = $value2 - $quantFree; // в производство
								$value4	 = $quantFree; // заблокировать
							}
							$noProduction = $product->no_production;

							$franchisees_cost_total += $franchisees_cost * $value2;
							$agent_cost_total += $agent_cost * $value2;
							$prime_cost_total += $prime_cost * $value2;
							$sum += $price * $value2 + $discount * $value2;

							if ($product->no_production == 0) { // временно отключена работа со складом для продуктов с отметкой "не производить"
								//резервирование на складе (увеличение поля quant_blocked)
								$productStorageType = ProductQuant::where('product_id', $product->id)->where('product_type_id', $key2)->first();
								if ( $productStorageType != null && !isset($input['need_size']) ) {
									$oldQuant          = $productStorageType->quant;
									$oldQuantBlocked   = $productStorageType->quant_blocked;

									if($value4 != 0 ){
										$newBlockedQuant	 = $quantBlocked + $value4; // новое значение поля quant_blocked (старое значение + заказ)
										$productStorageType->quant_blocked = $newBlockedQuant;
										$productStorageType->save();

										$productStorageType->saveProductQuantHistory($product->id, 0, $key2, 0, $oldQuant, $value4, $oldQuantBlocked, '№'.$partner->id.' Резервирование на складе при оформлении заказа (продукт)');
									}
								}
							}
							$cart[$product->id][$key2] = array(
									'product_id'			 => $product->id,
									'product_type_id'	 => $key2,
									'name'						 => "{$productType->name} {$product->mark->name} {$product->name} {$product->year_start}-{$product->year_end}",
									'price'						 => $price + $discount,
									'quant'						 => $value2,
							);


							if ($product->no_production == 0) {
								// заполнение таблицы для производства - изготовить
								if ($value3 > 0) {
									if ($input['agree_pay_type'] != 1) {
										if (!isset($input['need_size'])) {
											$haveProduction = 1;
											for ($i = 0; $i < $value3; $i++) {
												Production::create(array(
														'partner_id'			 => e($partner->id),
														'order_id'				 => e("{$partner->id}/{$position}-{$count}"),
														'product_id'			 => e($cart[$product->id][$key2]['product_id']),
														'product_type_id'	 => e($cart[$product->id][$key2]['product_type_id']),
														'name'						 => e($cart[$product->id][$key2]['name'])
												));
												$position++;
											}
										}
									}
								}
								// заполнение таблицы для производства - взять со склада
								if ($value4 > 0) {
									if ($input['agree_pay_type'] != 1) {
										if (!isset($input['need_size'])) {
											$haveProduction	 = 1;
											$haveOnStorage	 = 1;
											for ($i = 0; $i < $value4; $i++) {
												Production::create(array(
														'partner_id'					 => e($partner->id),
														'order_id'						 => e("{$partner->id}/{$position}-{$count}"),
														'product_id'					 => e($cart[$product->id][$key2]['product_id']),
														'product_type_id'			 => e($cart[$product->id][$key2]['product_type_id']),
														'name'								 => e($cart[$product->id][$key2]['name']),
														'production_start_at'	 => DB::raw('NOW()'),
														'production_master_id' => 0
												));
												$position++;
											}
										}
									}
								}
							}
							elseif ($product->no_production == 1) {
								// заполнение таблицы производства - создать как готовый продукт
								if ($value2 > 0) { // кол-во из заказа
									if ($input['agree_pay_type'] != 1) {
										if (!isset($input['need_size'])) {
											for ($i = 0; $i < $value2; $i++) {
												Production::create(array(
														'partner_id'					 => e($partner->id),
														'order_id'						 => e("{$partner->id}/{$position}-{$count}"),
														'product_id'					 => e($cart[$product->id][$key2]['product_id']),
														'product_type_id'			 => e($cart[$product->id][$key2]['product_type_id']),
														'name'								 => e($cart[$product->id][$key2]['name']),
														'production_start_at'	 => DB::raw('NOW()'),
														'production_end_at'		 => DB::raw('NOW()'),
														'production_master_id' => 0
												));
												$position++;
											}
										}
									}
								}
							}
						}
						unset($productType);
					}
					unset($product);
				}
			}
		}
//		if ($input['agree_discount']) {
//			$sum -= $input['agree_discount'];
//		}

		if ($partner->status == Partner::STATUS_SIZING) {
			$partner->status = Partner::STATUS_SIZING_END;
			$partner->saveHistory("Размеры сняты");
		}

		if (isset($input['need_size'])) {
			$partner->status						 = Partner::STATUS_SIZING;
			$partner->salenextdatetime	 = DB::raw('NOW()');
			$partner->need_size_message	 = $input['need_size_message'];
		}
		else {
			$partner->need_size_message = '';
			if ($input['agree_pay_type'] == 1) { // 100% предоплата
				$partner->status_next	 = Partner::STATUS_PRODUCTION_WAIT;
				$partner->status			 = Partner::STATUS_WAIT_CLIENT_PAY;
			}
			else {
				if (!$partner->datetime_of_agree) {
					$partner->datetime_of_agree = DB::raw('NOW()');
				}
				if ($partner->user->hasRole(Role::ROLE_FRANCHISEES)) {
					if ($partner->user->money < $franchisees_cost_total) {
						$partner->status_next	 = Partner::STATUS_PRODUCTION_WAIT;
						$partner->status			 = Partner::STATUS_WAIT_FRANCHISEES_PAY;

						foreach ($partner->productions()->get() as $partnerProduct) {
							if ($partnerProduct->production_start_at && $partnerProduct->production_master_id == 0) {
								$productId		 = $partnerProduct->product_id;
								$productTypeId = $partnerProduct->product_type_id;

								$productStorageType = ProductQuant::where('product_id', $productId)->where('product_type_id', $productTypeId)->first();
								if ($productStorageType != null) {
									$oldQuant          = $productStorageType->quant;
									$oldQuantBlocked   = $productStorageType->quant_blocked;

									$productStorageType->decrement('quant_blocked');

									$productStorageType->saveProductQuantHistory($productId, 0, $productTypeId, 0, $oldQuant, -1, $oldQuantBlocked, '№'.$partner->id.' Откат кол-ва заблокированного при оформлении заказа франчайзи и недостаточности депозита(продукт)');
								}
							}
						}

						Production::wherePartnerId($partner->id)->delete();
					}
					else {
						/* if ($noProduction == 0){
						  if ($value3<=0){
						  $partner->status = Partner::STATUS_PRODUCTION_PROCESS;
						  } else {
						  $partner->status = Partner::STATUS_PRODUCTION_WAIT;
						  }
						  } else if ($noProduction == 1){
						  $partner->status = Partner::STATUS_REGISTRATION;
						  } */
						/*if ($haveProduction == 1) { // есть позиции, которые могут производиться
							if ($haveOnStorage == 1) { // есть позиции, которые нужно взять на складе
								$partner->status_next	 = Partner::STATUS_PRODUCTION_PROCESS;
								$partner->status			 = Partner::STATUS_PRODUCTION_WAIT;
							}
							else {*/
								$partner->status_next	 = Partner::STATUS_PRODUCTION_PROCESS;
								$partner->status			 = Partner::STATUS_PRODUCTION_WAIT;
						/*	}
						}
						else if ($noProduction == 0) {
							$partner->status_next	 = Partner::STATUS_REGISTRATION;
							$partner->status			 = Partner::STATUS_PRODUCTION_WAIT;
						}*/
					}
				}
				else {
					/* if ($noProduction == 0){
					  if ($value3<=0){
					  $partner->status = Partner::STATUS_PRODUCTION_PROCESS;
					  }else {
					  $partner->status = Partner::STATUS_PRODUCTION_WAIT;
					  }
					  }else if ($noProduction == 1){
					  $partner->status = Partner::STATUS_REGISTRATION;
					  } */
					/*if ($haveProduction == 1) { // есть позиции, которые могут производиться
						if ($haveOnStorage == 1) { // есть позиции, которые нужно взять на складе
							$partner->status_next	 = Partner::STATUS_PRODUCTION_PROCESS;
							$partner->status			 = Partner::STATUS_PRODUCTION_WAIT;
						}
						else {*/
							$partner->status_next	 = Partner::STATUS_PRODUCTION_PROCESS;
							$partner->status			 = Partner::STATUS_PRODUCTION_WAIT;
					/*	}
					}
					else if ($noProduction == 0) {
						$partner->status_next	 = Partner::STATUS_REGISTRATION;
						$partner->status			 = Partner::STATUS_PRODUCTION_WAIT;
					}*/
				}
				$partner->salenextdatetime = DB::raw('NOW()');
			}
		}

		$partner->promoter_id		 = e($input['agree_promocode']);
		$partner->deliveryprice	 = e(isset($input['agree_delivery_pay']) ? $input['agree_delivery_pay'] : DB::raw(NULL));
		$partner->discount			 = e($input['agree_discount']);
		$partner->cartprice			 = e($sum);
		$partner->cart					 = json_encode($cart);
		$partner->recall				 = 0;

		if ($input['agree_pay_type'] == 1) {
			if ($input['agree_nextdate'] && $input['agree_pay_type'] == 1) {
				$nextdate = explode('.', $input['agree_nextdate']);
				if (checkdate($nextdate[1], $nextdate[0], $nextdate[2])) {
					$partner->salenextdatetime = "{$nextdate[2]}-{$nextdate[1]}-{$nextdate[0]} 16:00";
				}
			}
		}

		$partner->franchisees_cost = $franchisees_cost_total;
		$partner->agent_cost			 = $agent_cost_total;
		$partner->prime_cost			 = $prime_cost_total;

		if (User::find(Sentry::getUser()->id)->hasRole(Role::ROLE_FRANCHISEES)) {
			$partner->is_franchisees_order = 1;
		}
		$partner->save();

		if ($partner->lead_id) {
			$partner->lead->leadstatOrder($sum);
		}

		DB::table('shipments_partners')->where('partner_id', '=', $partner->id)->delete();

		$moneyStatus = 'ok';
		if (isset($input['need_size'])) {
			$message = "Необходимо снять размеры: {$input['need_size_message']}.";
		}
		elseif ($partner->status == Partner::STATUS_WAIT_FRANCHISEES_PAY) {
			$message		 = "На депозите не достаточно денег.";
			$moneyStatus = 'fail';
		}
		else {
			if ($input['agree_pay_type'] == 1) {
				$message = "Заказ оформлен: 100% предоплата, к оплате {$sum} руб, стоимость доставки {$partner->deliveryprice} руб. Связаться {$nextdate[0]} {$this->months[$nextdate[1]]} для уточнения сроков оплаты.";
			}
			elseif ($input['agree_pay_type'] == 3) {
				if (isset($input['agree_pickup'])) {
					$message = "Заказ оформлен: отправка до франчайзи, стоимость {$franchisees_cost_total} руб.";
				}
				else {
					$message = "Заказ оформлен: отправка наложенным платежом, стоимость {$franchisees_cost_total} руб, стоимость доставки {$partner->deliveryprice} руб.";
				}
			}
			else {
				$message = "Заказ оформлен: доставка наложенным платежом, к оплате {$sum} руб, стоимость доставки {$partner->deliveryprice} руб";
			}
		}

		if ($partner->email) {
			ob_start();
			$partner->sendInfoVideo();
			$partner->saveHistory('На почту '.$partner->email.' отправлено видео по установке автошторок.');
			ob_end_clean();
		}

		$refrence	 = $partner->saveHistory($message);
		$partner	 = Partner::find($partnerId);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'						 => 'success',
				'moneyStatus'				 => $moneyStatus,
				'btns'							 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'						 => $comment,
				'frozenMoney'				 => User::find(Sentry::getUser()->id)->getFrozenMoney(),
				'partnerStatusName'	 => $partner->getStatusName(),
				'partner'						 => $partner->toArray()
		);

		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_PAYMENT_CONFIRM) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		$partner->paidsum					 = e($input['paidsum']);
		$partner->salenextdatetime = DB::raw('DATE_ADD(NOW(), INTERVAL 1 DAY)');
		$partner->status					 = Partner::STATUS_WAIT_CLIENT_PAY_CONFIRM;
		$partner->recall					 = 0;
		$partner->save();

		$refrence	 = $partner->saveHistory("Клиент сказал что оплатил {$input['paidsum']} руб");
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_PAYMENT_RECEPTION) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		if ($partner->paytype == 1) {
			$partner->paidsum						 = e($input['paidsum']);
			$partner->paidsum_date			 = DB::raw('NOW()');
			$partner->status						 = Partner::STATUS_PRODUCTION_WAIT;
			if (!$partner->datetime_of_agree) {
				$partner->datetime_of_agree	 = DB::raw('NOW()');
			}
			$partner->salenextdatetime	 = DB::raw('NOW()');

			$cart			 = $partner->getCart();
			$count		 = count($cart);
			$position	 = 1;
			foreach ($cart as $key => $value) {
				foreach ($value as $item) {
					for ($i = 0; $i < $item['quant']; $i++) {
						Production::create(array(
								'partner_id'			 => e($partner->id),
								'order_id'				 => e("{$partner->id}/{$position}-{$count}"),
								'product_id'			 => e($item['product_id']),
								'product_type_id'	 => e($item['product_type_id']),
								'name'						 => e($item['name'])
						));
						$position++;
					}
				}
			}
		}
		else {
			$partner->paidsum			 = e($input['paidsum']);
			$partner->paidsum_date = DB::raw('NOW()');
			$partner->status			 = Partner::STATUS_SUCCESS;
			if ($partner->is_franchisees_order) {
				$partner->user->profit += $partner->cartprice - $partner->franchisees_cost;
				$partner->user->save();
			}
		}
		if ($partner->agent) {
			$partner->agent->profit += $partner->cartprice - $partner->agent_cost;
			$partner->agent->save();
		}
		$partner->salenextdatetime = DB::raw('DATE_ADD(NOW(), INTERVAL 1 DAY)');
		$partner->save();

		if ($partner->lead_id) {
			$partner->lead->leadstatPay($partner->cartprice);
		}

		$refrence	 = $partner->saveHistory("Оплата получена. Сумма {$input['paidsum']} руб");
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_CHECK_PATTERNS) || !is_numeric($input['partnerId']) || !$partner->status_next) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}

		$partner->status = $partner->status_next;
		$partner->save();

		$refrence	 = $partner->saveHistory("Лекало проверено.");
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_CHECK_PATTERNS) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}

		$partner->status = Partner::STATUS_SIZING;
		$partner->save();

		$refrence	 = $partner->saveHistory("Необходимо переделать лекало.");
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_REGISTRATION_OK) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		$partner->salenextdatetime = DB::raw('NOW()');
		$partner->status					 = Partner::STATUS_WAIT_DELIVERING;
		$partner->save();

		$refrence	 = $partner->saveHistory("Документы на доставку оформлены. Ждем передачи в транспортную компанию.");
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_TO_DELIVERING) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		$partner->salenextdatetime = DB::raw('NOW()');
		$partner->status					 = Partner::STATUS_WAIT_SENDING;
		$partner->save();

		$refrence	 = $partner->saveHistory("Товар передан в транспортную компанию");
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_SENDED) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		$partner->salenextdatetime = DB::raw('NOW()');
		$partner->status					 = Partner::STATUS_DELIVERING;
		$partner->save();

		$refrence	 = $partner->saveHistory("Товар отправлен клиенту");
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partners']) || !is_array($input['partners'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		foreach ($input['partners'] as $key => $value) {
			$partner = Partner::find($key);
			if ($partner->statusIsAllow(Partner::ALLOW_TO_DELIVERING) && $partner != null && is_numeric($key)) {
				$partner->salenextdatetime = DB::raw('NOW()');
				$partner->status					 = Partner::STATUS_WAIT_SENDING;
				$partner->save();

				$refrence = $partner->saveHistory("Товар передан в транспортную компанию");
			}
		}

		$response = array(
				'status' => 'success'
		);
		return Response::json($response);
	}

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

		if (!isset($input['partners']) || !is_array($input['partners'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		foreach ($input['partners'] as $key => $value) {
			$partner = Partner::find($key);
			if ($partner->statusIsAllow(Partner::ALLOW_SENDED) && $partner != null && is_numeric($key)) {
				$message									 = "Товар отправлен клиенту";
				$partner->salenextdatetime = DB::raw('NOW()');
				$partner->status					 = Partner::STATUS_DELIVERING;
				if ($partner->pickup) {
					$message = "Товар отправлен франчайзи";
				}
				$partner->save();

				$refrence = $partner->saveHistory($message);
			}
		}

		$response = array(
				'status' => 'success'
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_RECIVED) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		$message									 = "Товар успешно получен клиентом";
		$partner->salenextdatetime = DB::raw('NOW()');
		if (!$partner->is_franchisees_order) {
			if ($partner->paytype == 1 || $partner->paytype == 3) {
				$partner->status = Partner::STATUS_SUCCESS;
			}
			elseif ($partner->paytype == 2) {
				$partner->status = Partner::STATUS_WAIT_TRANSPORT_COMPANY_PAY;
			}
		}
		else {
			if (!$partner->pickup) {
				$partner->status = Partner::STATUS_WAIT_TRANSPORT_COMPANY_PAY;
			}
			elseif ($partner->pickup) {
				$partner->status = Partner::STATUS_FRANCHISEES_WAIT_CLIENT;
				$message				 = "Товар успешно получен франчайзи";
			}
		}
		$partner->save();

		$refrence	 = $partner->saveHistory($message);
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'noredirect'							 => 1,
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_CLIENT_RECEIVED) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		$partner->salenextdatetime = DB::raw('NOW()');
		$partner->status					 = Partner::STATUS_SUCCESS;
		$partner->recall					 = 0;
		$partner->save();

		$refrence	 = $partner->saveHistory("Товар успешно передан клиенту");
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_UPLOAD_FILE) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}

		$valid_exts	 = array('xls', 'xlsx', 'doc', 'docx', 'pdf');
		$max_size		 = 5 * 1024 * 1024;
		$path				 = public_path() . '/userfiles/' . $partner->id . '/';
		$file				 = Input::file('file');
		$ext				 = ($file->getClientOriginalExtension()) ? $file->getClientOriginalExtension() : 'xls';
		$size				 = $file->getClientSize();
//		$name				 = $file->getClientOriginalName();
		$name				 = "DPD{$partner->id}." . $ext;

		if (in_array($ext, $valid_exts) AND $size < $max_size) {
			$fileObj = new Partnerfile(
							array(
					'name'		 => e($name),
					'user_id'	 => Sentry::getUser()->id
							)
			);
			$fileObj = $partner->partnerfiles()->save($fileObj);
			if ($file->move($path . $fileObj->id . '/', iconv("UTF-8", "Windows-1251", $name))) {
				$response = array(
						'status'	 => 'success',
						'file'		 => $fileObj->toArray(),
						'filePath' => urlencode('/userfiles/' . $partner->id . '/' . $fileObj->id . '/' . iconv("UTF-8", "Windows-1251", $name)),
						'btns'		 => View::make('partner.btns')->with('partner', $partner)->render()
				);
				return Response::json($response);
			}
		}

		$response = array(
				'status' => 'fail'
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !is_numeric($input['partnerId']) || ($partner->user_id != Sentry::getUser()->id && !User::find(Sentry::getUser()->id)->hasRole(Role::ROLE_LOGISTICS))) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}

		$file = Partnerfile::find($input['fileId']);
		if ($file == null || !is_numeric($input['fileId']) || $file->partner_id != $partner->id) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		$file->delete();

		$response = array(
				'status' => 'success',
				'btns'	 => View::make('partner.btns')->with('partner', $partner)->render()
		);
		return Response::json($response);
	}

	public function getSource($id) {
		$partner = Partner::find($id);
		$sources = array('00' => 'Нет'); // '00' нужно т.к c '0' в value подставит не 0, а "Нет", если в массив больше ничего не добавляется
		foreach (InfoSource::where('project_id', '=', $partner->project_id)->get() as $source) {
			$sources[$source->id] = $source->source;
		}
		return Response::json($sources);
	}

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

		if (!isset($input['pk']) || !isset($input['name'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['pk']);
    if ($partner == null || !is_numeric($input['pk'])/* || $partner->user_id != Sentry::getUser()->id*/) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден',
					'$partner'=> $partner
			);
			return Response::json($response);
		}

		switch ($input['name']) {
			case 'partnerInfoName':
				$partner->name		 = e($input['value']);
				$partner->save();
				break;
			case 'partnerInfoPhone':
				$partner->phone		 = e($this->preparePhone($input['value']));
				$partner->save();
				break;
			case 'partnerInfoEmail':
				$partner->email		 = e($input['value']);
				$partner->save();
				break;
			case 'partnerInfoSource':
				$partner->info_source_id = e($input['value']);
				$partner->save();
				break;
			case 'partnerInfoCity':
				$partner->city		 = e($input['value']);
				$partner->save();
				break;
			case 'partnerInfoAddress':
				$partner->address	 = e($input['value']);
				$partner->save();
				break;
			case 'partnerInfoComment':
				$partner->comment	 = e($input['value']);
				$partner->save();
				break;
		}
	}

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

		if (!isset($partnerId)) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($partnerId);
		if ($partner == null || !is_numeric($partnerId) || $partner->user_id != Sentry::getUser()->id) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}

		if (isset($input['q'])) {
			$products = $partner->project->products()->where('name', 'LIKE', "%{$input['q']}%")->get()->toArray();
		}
		else {
			$products = $partner->project->products->toArray();
		}

		return Response::json($products);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_CLARIFICATION_ADDRESS) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		$partner->clarification_address = 1;
		$partner->save();

		$refrence	 = $partner->saveHistory("Необходимо уточнить адрес");
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		$res = null;
		try {
			//создаём экземпляр объекта CalculatePriceDeliveryCdek
			$calc = new CalculatePriceDeliveryCdek();

			//Авторизация. Для получения логина/пароля (в т.ч. тестового) обратитесь к разработчикам СДЭК -->
			//$calc->setAuth('authLoginString', 'passwordString');
			//устанавливаем город-отправитель
			$calc->setSenderCityId($input['senderCityId']);
			//устанавливаем город-получатель
			$calc->setReceiverCityId($input['receiverCityId']);
			//устанавливаем дату планируемой отправки
			$calc->setDateExecute($input['dateExecute']);

			//устанавливаем тариф по-умолчанию
//			$calc->setTariffId('137');
			//задаём список тарифов с приоритетами
			$calc->addTariffPriority(137);
			$calc->addTariffPriority(11);
			// $calc->addTariffPriority($input['tariffList2']);
			//устанавливаем режим доставки
			$calc->setModeDeliveryId($input['modeId']);
			//добавляем места в отправление
			foreach ($input['goods'] as $item) {
				$calc->addGoodsItemBySize($item['weight'], $item['length'], $item['width'], $item['height']);
			}

			if ($calc->calculate() == true) {
				$res															 = $calc->getResult();
				$res['result']['deliveryPeriodMin'] += 2;
				$res['result']['deliveryPeriodMax'] += 2;
				$res['result']['deliveryDateMin']	 = date('d.m.Y', strtotime("+{$res['result']['deliveryPeriodMin']} day", strtotime($res['result']['deliveryDateMin'])));
				$res['result']['deliveryDateMax']	 = date('d.m.Y', strtotime("+{$res['result']['deliveryPeriodMax']} day", strtotime($res['result']['deliveryDateMax'])));
//				$res['result']['deliveryDateMin']	 = explode('-', $res['result']['deliveryDateMin']);
//				$res['result']['deliveryDateMin']	 = "{$res['result']['deliveryDateMin'][2]}.{$res['result']['deliveryDateMin'][1]}.{$res['result']['deliveryDateMin'][0]}";
//				$res['result']['deliveryDateMax']	 = explode('-', $res['result']['deliveryDateMax']);
//				$res['result']['deliveryDateMax']	 = "{$res['result']['deliveryDateMax'][2]}.{$res['result']['deliveryDateMax'][1]}.{$res['result']['deliveryDateMax'][0]}";
				if (isset($res['result']['cacheOnDelivery'])) {
					$res['result']['cacheOnDeliveryMax'] = (int) $res['result']['cacheOnDelivery'];
				}
				if (CdekCacheondelivery::whereName($input['cdek_city'])->count()) {
					$res['result']['cacheOnDelivery']				 = 1;
					$res['result']['cacheOnDeliveryMessage'] = 'Есть наложенный платеж';
				}
				else {
					$res['result']['cacheOnDelivery']				 = 0;
					$res['result']['cacheOnDeliveryMessage'] = 'Нет наложенного платежа';
				}
			}
			else {
				$res = $calc->getError();
			}
		}
		catch (Exception $e) {

		}

		return Response::json($res);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_CHECK_CDEK) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}

		$result					 = $partner->checkCdek();
		$partner->recall = 0;
		$partner->save();

		$refrence	 = $partner->saveHistory($result['message']);
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'noredirect'							 => 1,
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

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

		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_DELETE_CDEK) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}

		$result					 = $partner->deleteCdek();
		$partner->recall = 0;
		$partner->save();
		DB::table('shipments_partners')->where('partner_id', '=', $partner->id)->delete();

		$refrence	 = $partner->saveHistory($result['message']);
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'noredirect'							 => 1,
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerIsStatusToWork'		 => $partner->isStatusToWork(),
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}

	public function tochange() {
		$input = Input::all();
		
		if (!isset($input['partnerId'])) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::find($input['partnerId']);
		if ($partner == null || !$partner->statusIsAllow(Partner::ALLOW_CHANGE) || !is_numeric($input['partnerId'])) {
			$response = array(
					'status'	 => 'fail',
					'message'	 => 'Клиент не найден'
			);
			return Response::json($response);
		}
		
		$partner->status_next = $partner->status;
	  $partner->status      = Partner::STATUS_WAIT_CHANGE;
		$partner->save();
		$refrence	 = $partner->saveHistory('Заказ передан на проверку возможности обмена. Ответственный за обмен заказа: '.e($input['change_type']).'. '.e($input['change_comment']));
		
		$partner	 = Partner::find($input['partnerId']);

		$refrence->load('sender');
		$comment						 = $refrence->toArray();
		$comment['comment']	 = nl2br($comment['comment']);

		$response = array(
				'status'									 => 'success',
				'btns'										 => View::make('partner.btns')->with('partner', $partner)->render(),
				'comment'									 => $comment,
				'partnerSaleNextDateTime'	 => $partner->salenextdatetime,
				'partnerStatusName'				 => $partner->getStatusName(),
				'partner'									 => $partner->toArray()
		);
		return Response::json($response);
	}
	
}
