Диплом: Автоматизация продажи авиабилетов в ООО «Avia Traffic Company»

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
97
mb_substr(post('deptdate1'),3,2), mb_substr(post('deptdate1'),0,2))-
>addDays(post('delay1'))->subYears(8)->format('m/d/Y');
}
$allpass = $aaa + $chd + $infx + $inf;
$i = 0;
for ($o=1; $o <= $aaa ; $o++) {
$i++;
$whoiam[$i] = 'ААА';
}
for ($o=1; $o <= $chd ; $o++) {
$i++;
$whoiam[$i] = 'РБГ';
}
for ($o=1; $o <= $infx ; $o++) {
$i++;
$whoiam[$i] = 'РВГ';
}
for ($o=1; $o <= $inf ; $o++) {
$i++;
$whoiam[$i] = 'РМГ';
}
$notes = Notes::where('where', 'finder_variants2')->where('is_active', 1)-
>get();
if ($back == 0)
{
return ['#findme' => $this-
>renderPartial($this.'::list_passengers',['inside' => $inside, 'dateaaadop' =>
$dateaaadop, 'dateinfmin' => $dateinfmin, 'datechdmin' => $datechdmin, 'datechdmax' =>
$datechdmax, 'dateaaamax' => $dateaaamax, 'allpass' => $allpass, 'flight' => $flight,
'class' => $class, 'date' => $date, 'whoiam' => $whoiam, 'user'=> \Auth::getUser(),
'from' => $from, 'to' => $to, 'company' => $company, 'notes' => $notes, 'total_price'
=> post('total_price'), 'price_currency' => post('price_currency'), 'datedept' =>
$datedept, 'datearrv' => $datearrv, 'recaptcha' => post('recaptcha_response') ])];
} else {
return ['#findme' => $this-
>renderPartial($this.'::list_passengers',['inside' => $inside, 'dateaaadop' =>
$dateaaadop, 'dateinfmin' => $dateinfmin, 'datechdmin' => $datechdmin, 'datechdmax' =>
$datechdmax, 'dateaaamax' => $dateaaamax, 'allpass' => $allpass, 'flight' => $flight,
'class' => $class, 'date' => $date, 'whoiam' => $whoiam, 'user'=> \Auth::getUser(),
'from' => $from, 'to' => $to, 'company' => $company, 'notes' => $notes, 'total_price'
=> post('total_price'), 'price_currency' => post('price_currency'), 'datedept' =>
$datedept, 'datearrv' => $datearrv, 'datedept_back' => $datedept_back, 'datearrv_back'
=> $datearrv_back, 'flight_back' => $flight_back, 'class_back' => $class_back, 'date2'
=> $date2, 'recaptcha' => post('recaptcha_response') ])];
}
}
public function onMakeBooking()
{
if (mb_substr($this->param('findme'), 12, 4) == 'BACK')
{
$back = 1;
$aaa = mb_substr($this->param('findme'), 23, 1);
$chd = mb_substr($this->param('findme'), 24, 1);
$infx = mb_substr($this->param('findme'), 25, 1);
98
$inf = mb_substr($this->param('findme'), 26, 1);
} else {
$back = 0;
$aaa = mb_substr($this->param('findme'), 13, 1);
$chd = mb_substr($this->param('findme'), 14, 1);
$infx = mb_substr($this->param('findme'), 15, 1);
$inf = mb_substr($this->param('findme'), 16, 1);
}
$allpass = $aaa + $chd + $infx + $inf;
$data = post();
$rules = array();
for ($numpass=1; $numpass <= $allpass; $numpass++) {
$rules = array_add($rules, 'lastname'.$numpass, 'required|alpha');
$rules = array_add($rules, 'firstname'.$numpass, 'required|alpha');
$rules = array_add($rules, 'birthdate'.$numpass, 'required');
}
$rules = array_add($rules, 'customer_email', 'required');
$rules = array_add($rules, 'customer_tel', 'required');
$rules = array_add($rules, 'agree', 'accepted');
$validation = Validator::make($data, $rules);
if ($validation->fails()) {
throw new ValidationException($validation);
}
if ($allpass == 1){
$checkBirthday = Carbon::parse(substr(post('birthdate1'), 6, 4).'-
'.substr(post('birthdate1'), 3, 2).'-'.substr(post('birthdate1'), 0, 2));
if ($checkBirthday > Carbon::now()->subYears(16)){
return [
'#error' => '<div class="alert alert-danger">Несопровождаемый
ребенок не может лететь один!</div>',
];
}
}
//Валидация рекаптчи
// Build POST request
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_secret = '6LeUisYUAAAAAKfTc5EEOOQehDdACPHyaF5z_XNH';
$recaptcha_response = post('recaptcha_response');
// Make and decode POST request
$recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret
. '&response=' . $recaptcha_response);
$recaptcha = json_decode($recaptcha);
//trace_log('Рекаптча');
//trace_log($recaptcha);
// Take action based on the score returned
trace_log($recaptcha);
if (isset($recaptcha->score) and $recaptcha->score < 0.6) {
trace_log('Заблокирована попытка брони ботом ('.$recaptcha->score.') с '.
Request::ip().'. '.post('flight').' '.post('from').' - '.post('to'));
// Mail::rawTo('it@aero.kg', 'Заблокирована попытка брони ботом.');
return [
99
'#error' => '<div class="alert alert-danger">Привет, я Aerobot. Судя по
всему, ты тоже бот, поэтому твоя попытка забронировать авиабилет была успешно
отклонена. Если есть вопросы, пиши на it@aero.kg.</div>',
];
}
// Проводим транслитерацию
$translit = array(
'А' => 'A', 'Б' => 'B', 'В' => 'V',
'Г' => 'G', ' => 'D', 'Е' => 'E',
'Ё' => 'YO', ' => 'ZH', ' => 'Z',
'И' => 'I', ' => 'Y', 'К' => 'K',
'Л' => 'L', ' => 'M', 'Н' => 'N',
'О' => 'O', ' => 'P', 'Р' => 'R',
'С' => 'S', ' => 'T', 'У' => 'U',
'Ф' => 'F', ' => 'KH', ' => 'TS',
'Ч' => 'CH', ' => 'SH', ' => 'SH',
'Ь' => '', ' => 'Y', 'Ъ' => '',
'Э' => 'E', ' => 'YU', ' => 'YA',
);
for ($numpass=1; $numpass <= $allpass; $numpass++) {
$lastname = trim(post('lastname'.$numpass));
$firstname = trim(post('firstname'.$numpass));
$lastnames[$numpass] = strtr(mb_strtoupper($lastname), $translit);
$firstnames[$numpass] = strtr(mb_strtoupper($firstname), $translit);
$birthdate[$numpass] = post('birthdate'.$numpass);
$sex[$numpass] = post('sex'.$numpass);
$category[$numpass] = post('category'.$numpass);
$nationality[$numpass] = post('nationality'.$numpass);
$doccode[$numpass] = post('doccode'.$numpass);
$doc[$numpass] = post('doc'.$numpass);
$doc_country[$numpass] = post('doc_country'.$numpass);
if (post('pspexpire'.$numpass)){ $pspexpire[$numpass] =
post('pspexpire'.$numpass); } else { $pspexpire[$numpass] = 0; }
$phone[$numpass] = post('phone'.$numpass);
$email[$numpass] = post('email'.$numpass);
$customer_email = post('customer_email');
$customer_tel = post('customer_tel');
}
//^[a-zA-Z]{2,25}$
$datas = ['customer_email' => $customer_email, 'customer_tel' => $customer_tel,
'phone' => $phone, 'email' => $email, 'doc_country' => $doc_country,'pspexpire' =>
$pspexpire, 'doc' => $doc, 'nationality' => $nationality, 'doccode' => $doccode,
'birthdate' => $birthdate, 'sex' => $sex, 'category' => $category, 'allpass' =>
$allpass, 'lastnames' => $lastnames, 'firstnames' => $firstnames, 'date' =>
post('date'), 'flight' => post('flight'), 'class' => post('class'), 'origin' =>
100
post('from'), 'destination' => post('to'), 'company' => post('company')];
if (mb_substr($this->param('findme'), 12, 4) == 'BACK')
{
$datas = array_add($datas, 'flight_back', post('flight_back'));
$datas = array_add($datas, 'class_back', post('class_back'));
$datas = array_add($datas, 'date2', post('date2'));
}
//trace_log(mb_substr($this->param('findme'), 12, 4));
$user = \Auth::getUser();
// добавим ремарку поисковика если есть.
if (Input::has('search_engine')){
$meta = MetaSearch::where('partner', Input::get ('search_engine'))->first();
if ($meta){
$datas = array_add($datas, 'search_engine', $meta->marker);
}
} elseif (\Cookie::get('search_engine')) {
$cookie_array = explode(':', \Cookie::get('search_engine'));
$meta = MetaSearch::where('partner', $cookie_array[0])->first();
if ($meta){
$datas = array_add($datas, 'search_engine', $meta->marker);
}
}
if (Settings::get('mainremark')){
$datas = array_add($datas, 'mainremark', Settings::get('mainremark'));
}
/*if ($user and in_array($user->id, [1, 519])) {
$datas = array_add($datas, 'remark', 'ATCAGENT001');
}*/
$answer = $this->getAnswer('selling_query', $datas);
//$ert = strlen($answer);
//echo "wer";
$xml = simplexml_load_string($answer);
$zakaz = $xml->answer->selling_query;
//$zakaz = $xml->answer->booking;
if ($zakaz->error) {
return ['#error' => $this-
>renderPartial($this.'::error_selling_query',['xml' => $xml ])];
} else if ($zakaz['regnum']) // если заказ успешный и бронь выполнена
{
$order = new Orders;
$order->pnr = $zakaz['regnum'];
$order->total = $zakaz->pnr->prices->variant_total;
$order->status = 1;
$order->currency = $zakaz->pnr->prices->variant_total['currency'];
$utc_timelimit = new Carbon($zakaz->pnr->utc_timelimit);
$order->utc_timelimit = $utc_timelimit;
$order->regnum = $zakaz->pnr->regnum;
$order->customer_email = mb_strtolower($zakaz->contacts->email);
foreach ($zakaz->contacts->contact as $tel) {
if ($tel['comment'] == 'CUSTOMER') { $order->customer_tel = $tel; }
}
if (post('customer_firstname')) { $order->customer_firstname =
post('customer_firstname'); }
101
if (post('customer_lastname')) { $order->customer_lastname =
post('customer_lastname'); }
$order->slug = $this->param('findme');
$order->firstpaxname = $zakaz->pnr->passengers->passenger->surname;
$order->prices = $zakaz->pnr->prices;
$order->segments = $zakaz->pnr->segments;
$order->purchase_ip = Request::ip();
if (Input::has('search_engine')){
$order->meta_finder = Input::get('search_engine');
} elseif (\Cookie::get('search_engine')) {
$cookie_array = explode(':', \Cookie::get('search_engine'));
$order->meta_finder = $cookie_array[0];
$order->meta_marker = $cookie_array[1];
}
if (Input::has('meta_marker')){
$order->meta_marker = Input::get('meta_marker');
}
$order->save();
foreach ($zakaz->pnr->passengers->passenger as $pass) {
$pax = new Paxs;
$pax->name = $pass->name;
$pax->surname = $pass->surname;
$pax->sex = $pass->sex;
$pax->birthdate = mb_substr($pass->birthdate, 6, 4).'-
'.mb_substr($pass->birthdate, 3, 2).'-'.mb_substr($pass->birthdate, 0, 2);
$pax->doccode = $pass->doccode;
$pax->doc = $pass->doc;
$pax->pspexpire = mb_substr($pass->pspexpire, 6, 4).'-
'.mb_substr($pass->pspexpire, 3, 2).'-'.mb_substr($pass->pspexpire, 0, 2);
$pax->nationality = $pass->nationality;
$pax->order_id = $order->id;
$pax->save();
}
$maildata = ['pnr' => $order->pnr];
$mailemail = $order->customer_email;
Mail::send('mihailbishkek.cousteau::mail.booking_success', $maildata,
function ($message) use ($mailemail) {
$message->to($mailemail); //->cc('support@aero.kg')->cc('it@aero.kg')
});
return Redirect::to('order/'.$order->pnr);
}
}
public function onGetPlatron()
{
$order = Orders::find(post('my_order_id'));
//trace_log(Carbon::parse($order->utc_timelimit)->timestamp);
//trace_log(Carbon::now()->timestamp);
//trace_log($pg_lifetime);
102
if (is_null($order->payment_id)) {
/* if( $curl = curl_init() ) {
curl_setopt($curl, CURLOPT_URL,
'https://www.platron.ru/init_payment.php');
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $this-
>makePlatronLink(post('pg_amount'), post('pg_order_id'), post('pg_user_phone'), $order-
>id, $order->customer_email, $pg_lifetime ));
$out = curl_exec($curl);
trace_log('это запрос в платрон');
trace_log($this->makePlatronLink(post('pg_amount'),
post('pg_order_id'), post('pg_user_phone'), $order->id, $order->customer_email,
$pg_lifetime ));
curl_close($curl);
}
$xml = simplexml_load_string($out); */
$pays = Settings::instance()->pays;
/*$merchant_id = Settings::get('pg_merchant_id');
$secret_key = Settings::get('pg_secret_key');
$result_url = Settings::get('pg_result_url');
$success_url = Settings::get('pg_success_url');
$payment_system = Settings::get('pg_payment_system'); */
$pg_lifetime = Carbon::parse($order->utc_timelimit)->timestamp -
Carbon::now()->timestamp;
//trace_log($pays);
$platron_datas = array('pg_merchant_id' => $pays->platron_merchant_id,
'pg_amount' => post('pg_amount'), 'pg_description' => 'Оплата авиабилетов по заказу:
'.post('pg_order_id'), 'pg_salt' => md5(uniqid(rand(), true)), 'pg_user_phone' =>
post('pg_user_phone'), 'pg_user_contact_email' => $order->customer_email, 'pg_order_id'
=> post('pg_order_id'), 'pg_result_url' => $pays->platron_result_url,
'pg_request_method' => 'XML', 'atc_order_id' => $order->id, 'pg_success_url' => $pays-
>platron_success_url.$this->param('pnr'), 'pg_success_url_method' => 'AUTOGET',
'pg_payment_system' => $pays->platron_payment_system, 'pg_lifetime' => $pg_lifetime,
'pg_secret_key' => $pays->platron_secret_key );
$xml = simplexml_load_string($this-
>getAnswerFromPlatron('init_payment.php', $platron_datas ,'platron_init'));
if ($xml->pg_status == 'ok') {
$order->payment_id = $xml->pg_payment_id;
$order->payment_url = $xml->pg_redirect_url;
$order->pays_id = $pays->id;
$order->save();
return ['#ordercont' => $this-
>renderPartial($this.'::platron_iframe',['link_iframe' => $xml->pg_redirect_url ]) ];
} else {
return [
'#error_on_pay_system' => '<div class="alert alert-danger
part">Банковская система временно недоступна. Попробуйте оплатить заказ
позже...</div>',
];
103
}
} else {
return ['#ordercont' => $this-
>renderPartial($this.'::platron_iframe',['link_iframe' => $order->payment_url ]) ];
}
}
public function onMakeMyOrder()
{
$order = Orders::find(post('order_id'));
if ($order->status == 3){
if (is_null($order->user_id)) {
$user = \Auth::getUser();
if ($user){
if (strtolower($user->email) == strtolower($order-
>customer_email)){
$order->user_id = $user->id;
$order->save();
return [
'#refund' => '<a id="refundlink" class="btn btn-danger btn-
block" href="javascript:void(0);" onclick="refundlink();" role="button">Возврат
билетов</a>'
];
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
public function onMakeRefund()
{
$data = post();
//trace_log($data);
if (post('iws') == 1) {
//trace_log('Сработало условие!');
$rules = ['checkbox1' => 'required'];
} else {
$rules = array();
for ($nim=1; $nim <= post('iws'); $nim++) {
$qqq = "required_without_all:";
for ($xsd = 1; $xsd <=post('iws'); $xsd++){
if ($nim != $xsd) {
$qqq .= 'checkbox'.$xsd.',';
}
}
$qqq = substr($qqq, 0, -1);
$rules = array_add($rules, 'checkbox'.$nim, $qqq);
}
}
104
$validation = Validator::make($data, $rules);
if ($validation->fails()) {
throw new ValidationException(['Выберите пассажиров для расчёта стоимости
возврата!']);
}
//$names = array();
$paxes_well_id = array(); // массив тех, кто остался без возврата!
for ($i=1; $i <= post('iws') ; $i++) {
if (post('checkbox'.$i) and post('checkbox'.$i) == 'ok'){
list($paxes_id[], $clearfio) = explode("!", post('fio'.$i));
list($name[], $surname[]) = explode(" ", $clearfio);
} else {
list($paxes_well_id[]) = explode("!", post('fio'.$i));
}
}
//trace_log('К возврату id: ', $paxes_id );
//trace_log('Остаются id: ', $paxes_well_id );
$datas = ['action' => 'query', 'name' => $name, 'surname' => $surname,
'countimes' => count($surname), 'pnr' => post('pnr'), 'firstpaxname' =>
post('firstpaxname')];
$answer = $this->getAnswer('payment_ext_auth_refund', $datas);
$xml = simplexml_load_string($answer);
//trace_log($xml);
if (isset($xml->answer->{'payment-ext-auth'}->error)){
$error = $xml->answer->{'payment-ext-auth'}->error;
$notes = Notes::where('where', 'error_on_refund')->where('is_active', 1)-
>get();
$summa = false;
$valuta = false;
} else {
$summa = $xml->answer->{'payment-ext-auth'}->cost;
$valuta = $xml->answer->{'payment-ext-auth'}->cost['curr'];
$error = false;
$notes = false;
}
//trace_log('Сумма составила: '.$summa);
/*trace_log('Всего: '.post('iws'));
trace_log($name);
trace_log($surname);
$answer = $this->getAnswer('payment_ext_auth_refund', $datas);
$xml = simplexml_load_string($answer);
trace_log($xml); */
return [
'#makerealrefundcancel' => 'Вы все ещё можете <a id="cancelref" data-
request="onCancelRefund" data-request-data="pnr: \''. post('pnr') .'\', firstpaxname:
\''. post('firstpaxname') .'\'" data-attach-loading class="btn btn-xs btn-warning"
href="javascript:void(0);">отменить</a>
возврат.<script>$("#cancelref").click(function(){ $("#refundcont").hide();
$("#ordercont").show(); });</script>',
'#refundcountsteptwo' => $this->renderPartial($this.'::refundstep_two', [
'pnr' => post('pnr'), 'firstpaxname' => post('firstpaxname'), 'summa' => $summa,
'valuta' => $valuta, 'paxes_id' => $paxes_id, 'paxes_well_id' => $paxes_well_id,
'order_id' => post('order_id'), 'notes' => $notes, 'error' => $error ] )
];
}
105
public function onCancelRefund()
{
$datas = ['action' => 'cancel', 'pnr' => post('pnr'), 'firstpaxname' =>
post('firstpaxname')];
$answer = $this->getAnswer('payment_ext_auth_refund', $datas);
}
public function onMakeMoneyRefund()
{
//trace_log(post('test'));
$datas = ['action' => 'confirm', 'pnr' => post('pnr'), 'firstpaxname' =>
post('firstpaxname'), 'summa' => post('summa'), 'valuta' => post('valuta')];
$mydatakey = $this->makeHandShake();
$answer = $this->getAnswer('payment_ext_auth_refund', $datas,3,$mydatakey);
$xml_sirena = simplexml_load_string($answer);
//trace_log('Вот она: '.$xml->answer->{'payment-ext-auth'}->ok);
//trace_log($xml);
if (isset($xml_sirena->answer->{'payment-ext-auth'}->ok))
{
//$merchant_id = Settings::get('pg_merchant_id');
$paxes = Paxs::whereIn('id', post('paxes_id'))->get();
foreach ($paxes as $pax) {
$pax->is_refunded = 1;
$pax->save();
}
$order = Orders::find(post('order_id'));
//узнаем остались ли не возвращённые пассажиры в заказе
if (!empty(post('paxes_well_id'))){
$welpax = Paxs::find(post('paxes_well_id')[0]);
$order->firstpaxname = $welpax->surname;
$order->status = 5;
$order->save();
} else {
$order->status = 4;
$order->save();
}
$platron_datas = ['pg_salt' => md5(uniqid(rand(), true)), 'pg_merchant_id'
=> $order->pays->platron_merchant_id, 'pg_payment_id' => $order->payment_id,
'pg_refund_amount' => abs(post('summa')), 'pg_secret_key' => $order->pays-
>platron_secret_key ];
$xml_platron = simplexml_load_string($this-
>getAnswerFromPlatron('revoke.php', $platron_datas ,'platron_refund'));
if ($xml_platron->pg_status == 'ok'){
$order->refund = $order->refund + post('summa');
$order->balance = $order->balance + post('summa');
$order->save();
Flash::success('Возврат успешно произведён! Денежные средства поступят
на счёт карты, с которой был сделан заказ от 2х до 25ти банковских дней.');
106
$user = \Auth::getUser();
$vars = ['pnr' => $order->pnr ];
Mail::send('mihailbishkek.cousteau::mail.refund_success', $vars,
function($message) use ($user) {
$message->from('aerobot@aero.kg', 'Aerobot');
$message->to($user->email)->cc('it@aero.kg');
});
return Redirect::refresh();
} else {
trace_log('Ошибка платрона: ', $xml_platron);
Flash::error('При возврате произошла ошибка! Возврат не произведён.');
$vars = ['pnr' => $order->pnr, 'error_code'=> $xml_platron-
>pg_error_code, 'error_desc' => $xml_platron->pg_error_description ];
Mail::send('mihailbishkek.cousteau::mail.refund_error_platron', $vars,
function($message) {
$message->from('aerobot@aero.kg', 'Aerobot');
$message->to('it@aero.kg')->cc('support@aero.kg');
});
return Redirect::refresh();
}
} else {
Flash::error('При возврате произошла ошибка: "'. $xml_sirena->answer-
>{'payment-ext-auth'}->error .'" Возврат не произведён. Сделайте фото данного
сообщения, и обратитесь на почту: support@aero.kg ');
$vars = ['pnr' => post('pnr'), 'error' => $xml_sirena->answer->{'payment-
ext-auth'}->error];
Mail::send('mihailbishkek.cousteau::mail.refund_error_sirena', $vars,
function($message) {
$message->from('aerobot@aero.kg', 'Aerobot');
$message->to('it@aero.kg')->cc('support@aero.kg');
});
return Redirect::refresh();
}
}
public function onFindInAllOrders()
{
$datas = ['fio' => post('fio'), 'pnr' => post('pnr') ];
$answer = $this->getAnswer('query_order', $datas);
$xml = simplexml_load_string($answer);
return [
'#answer' => $this->renderPartial($this.'::order_outhere', [ 'order' =>
$xml->answer->order ] ),
];
}
}

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
IPO - инструмент финансирования деятельности организации. На примере ПАО «Нефтяная компания «Лукойл»
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)