Passolution, Mails, Tickets,

This commit is contained in:
Kevin Adametz 2020-09-15 17:47:52 +02:00
parent 0857a34766
commit f79806ffe8
46 changed files with 556 additions and 831 deletions

View file

@ -5,7 +5,10 @@ namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use App\Models\IQContentTree;
use App\Models\IQContentTreeNode;
use App\Models\TravelCountry;
use App\Models\TravelGuide;
use App\Models\TravelNationality;
use App\Services\Passolution;
class CMSContentController extends Controller
@ -14,6 +17,70 @@ class CMSContentController extends Controller
private $successKey = 'f6077389c9ce710e554763a5de02c8ec';
public function passolution($lang, $nat, $destco, $tdat){
$data = [
'lang' => $lang,
'nat' => $nat,
'destco' => $destco,
'tdat' => $tdat,
];
$passolution = new Passolution();
$passolution->fill($data);
$html = $passolution->read();
return response()->json(['response' => $html]);
}
public function passolutionPost($lang){
$data = \Request::all();
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: *');
header('Access-Control-Allow-Headers: *');
$headers = [
'Access-Control-Allow-Methods' => 'POST,GET,OPTIONS,PUT,DELETE',
'Access-Control-Allow-Headers' => 'Content-Type, X-Auth-Token, Origin, Authorization',
];
if(!isset($data['nationality_id']) || !isset($data['travel_date_start']) || !isset($data['country_ids']) || !is_array($data['country_ids'])){
return response()->json(['response' => 'Fehler bei der Anfrage'], 200, $headers);
}
$TravelNationality = TravelNationality::find($data['nationality_id']);
if(!$TravelNationality){
return response()->json(['response' => 'Fehler bei der Anfrage: Nationalität nicht gefunden'], 200, $headers);
}
$destco = [];
foreach ($data['country_ids'] as $country_id){
$TravelCountry = TravelCountry::find($country_id);
if(!$TravelCountry){
return response()->json(['response' => 'Fehler bei der Anfrage: Travel Country nicht gefunden'], 200, $headers);
}
$destco[] = $TravelCountry->destco;
}
$tdat = date("d-m-Y", strtotime($data['travel_date_start']));
$data = [
'lang' => $lang,
'nat' => $TravelNationality->nat,
'destco' => trim(implode(',', $destco), ","),
'tdat' => $tdat,
];
$passolution = new Passolution();
$passolution->fill($data);
$html = $passolution->read();
return response()->json(['success' => true, "response" => $html, "data" => $data], 200, $headers);
}
public function search()
{

View file

@ -86,7 +86,6 @@ class CMSContentInfoController extends Controller
}
private function checkAvailable($type, $wday){
$contents = [];
@ -210,7 +209,6 @@ class CMSContentInfoController extends Controller
}
private function checkBetweenHoliday($type, \Carbon $cdate){
$holidays = CMSInfoHoliday::where($type, true)->get();
foreach ($holidays as $holiday){

View file

@ -31,11 +31,13 @@ class TravelNationalityController extends Controller
if($data['id'] === "new"){
$model = TravelNationality::create([
'name' => $data['name'],
'nat' => $data['nat'],
'active' => isset($data['active']) ? true : false,
]);
}else{
$model = TravelNationality::find($data['id']);
$model->name = $data['name'];
$model->nat = $data['nat'];
$model->active = isset($data['active']) ? true : false;
$model->save();
}

View file

@ -7,7 +7,9 @@ use App\Models\IQContentSite;
use App\Models\IQContentSiteField;
use App\Models\IQContentTree;
use App\Models\IQContentTreeNode;
use App\Models\TravelCountry;
use App\Models\TravelGuide;
use App\Models\TravelNationality;
use Illuminate\Support\Str;
use IqContent\LaravelFilemanager\Controllers\FileController;
use IqContent\LaravelFilemanager\Controllers\FolderController;
@ -64,9 +66,6 @@ class ContentLinkController extends Controller
public function store()
{
return redirect()->back();
}
@ -222,6 +221,64 @@ class ContentLinkController extends Controller
}
//import
public function import()
{
$text = "";
$val = [];
$data = [
'text' => $text,
'values' => $val,
];
return view('sys.tools.import', $data);
}
public function importStore()
{
$data = Request::all();
$lines = explode(PHP_EOL, $data['text']);
if($data['action'] === 'import_TN'){
foreach ($lines as $line){
$ex = explode(';', $line);
$t_n = TravelNationality::whereName(trim($ex[1]))->first();
if($t_n){
$t_n->nat = $ex[0];
$t_n->save();
}else{
TravelNationality::create([
'name' => trim($ex[1]),
'nat' => $ex[0],
'active' => false,
]
);
}
}
}
if($data['action'] === 'import_CT') {
foreach ($lines as $line){
$ex = explode(';', $line);
$t_c = TravelCountry::whereName(trim($ex[1]))->first();
if($t_c){
dump($t_c->name);
$t_c->destco = $ex[0];
$t_c->save();
$tc = \App\Models\Sym\TravelCountry::find($t_c->crm_id);
$tc->destco = $ex[0];
$tc->save();
}
}
dd("");
}
return redirect()->back();
}
private function replaceYoutubeDiv(&$val, $travelGuide)
{
@ -656,63 +713,4 @@ class ContentLinkController extends Controller
//tree_title
/* public function tree()
{
$text = "";
$val = [];
$trees = IQContentTree::all();
foreach ($trees as $tree){
foreach ($tree->iq_content_tree_nodes as $tree_node){
$text .= $tree_node->id." -- ".$tree_node->title."\n";
foreach ($tree_node->iq_content_sites as $site){
if(isset($site->travel_guide->meta_title)){
if(isset($val[$tree_node->id])){
if(strlen($site->travel_guide->meta_title) > strlen($val[$tree_node->id])){
$val[$tree_node->id] = $site->travel_guide->meta_title;
}
}else{
$val[$tree_node->id] = $site->travel_guide->meta_title;
}
}
}
}
}
$data = [
'text' => $text,
'values' => $val,
];
return view('sys.tools.trees', $data);
}
public function treeStore()
{
$trees = IQContentTree::all();
$val = [];
foreach ($trees as $tree){
foreach ($tree->iq_content_tree_nodes as $tree_node){
foreach ($tree_node->iq_content_sites as $site){
if(isset($site->travel_guide->meta_title)){
if(isset($val[$tree_node->id])){
if(strlen($site->travel_guide->meta_title) > strlen($val[$tree_node->id])){
$val[$tree_node->id] = $site->travel_guide->meta_title;
}
}else{
$val[$tree_node->id] = $site->travel_guide->meta_title;
}
}
}
if(isset($val[$tree_node->id])){
$tree_node->title = $val[$tree_node->id];
$tree_node->save();
}
}
}
return redirect()->back();
}*/
}

View file

@ -202,7 +202,6 @@ class TravelUserBookingFewoController extends Controller
}
//Mails
//CASCADE
$model->delete();
\Session()->flash('alert-success', __('Buchung gelöscht sowie die Reservierung im Sterntrous Kalender'));
}

View file

@ -59,6 +59,7 @@ class TravelCountry extends Model
protected $fillable = [
'name',
'destco',
'is_customer_country',
'active_backend',
'contact_lands',

View file

@ -79,6 +79,7 @@ class TravelCountry extends Model
protected $fillable = [
'name',
'destco',
'slug',
'html_information',
'text_before',

View file

@ -27,6 +27,7 @@ class TravelNationality extends Model
protected $fillable = [
'name',
'nat',
'active',
];

View file

@ -193,7 +193,7 @@ class TravelUserBookingFewoRepository extends BaseRepository {
$data['is_calendar_stern_tours'] = isset($data['is_calendar_stern_tours']) ? true : false;
if($id == "new") {
if($id === "new") {
$model = TravelUserBookingFewo::create($data);
}else{
$model = TravelUserBookingFewo::findOrFail($id);
@ -206,42 +206,45 @@ class TravelUserBookingFewoRepository extends BaseRepository {
$model->save();
$res = $this->calculatePriceNew($model);
$model->daily_prices = $res['season'];
if(isset($data['calculate_price_new'])){
$model->price_travel = $res['price_travel'];
$model->price_service = $res['price_service'];
$model->price_deposit = $res['price_deposit'];
$model->calculate_price();
$model->save();
if($res['season_find'] && $res['price_find']){
$model->daily_prices = $res['season'];
if($fewo_reservation = $model->fewo_reservation){
$model->fewo_reservation->from_date = $model->getFromDateRaw();
$model->fewo_reservation->to_date = $model->getToDateRaw();
$model->fewo_reservation->save();
}
}
if($fewo_reservation = $model->fewo_reservation){
if($model->is_calendar_stern_tours){
$model->fewo_reservation->from_date = $model->getFromDateRaw();
$model->fewo_reservation->to_date = $model->getToDateRaw();
}else{
$model->fewo_reservation->from_date = null;
$model->fewo_reservation->to_date = null;
}
$model->fewo_reservation->save();
}else{
if($model->is_calendar_stern_tours){
$res = FewoReservation::create([
'lodging_id' => $model->fewo_lodging_id,
'from_date' => $model->getFromDateRaw(),
'to_date' => $model->getToDateRaw(),
'status' => 0,
'type' => 0]);
$model->fewo_reservation_id = $res->id;
if (isset($data['calculate_price_new'])) {
$model->price_travel = $res['price_travel'];
$model->price_service = $res['price_service'];
$model->price_deposit = $res['price_deposit'];
$model->calculate_price();
$model->save();
if ($fewo_reservation = $model->fewo_reservation) {
$model->fewo_reservation->from_date = $model->getFromDateRaw();
$model->fewo_reservation->to_date = $model->getToDateRaw();
$model->fewo_reservation->save();
}
}
if ($fewo_reservation = $model->fewo_reservation) {
if ($model->is_calendar_stern_tours) {
$model->fewo_reservation->from_date = $model->getFromDateRaw();
$model->fewo_reservation->to_date = $model->getToDateRaw();
} else {
$model->fewo_reservation->from_date = null;
$model->fewo_reservation->to_date = null;
}
$model->fewo_reservation->save();
} else {
if ($model->is_calendar_stern_tours) {
$res = FewoReservation::create([
'lodging_id' => $model->fewo_lodging_id,
'from_date' => $model->getFromDateRaw(),
'to_date' => $model->getToDateRaw(),
'status' => 0,
'type' => 0]);
$model->fewo_reservation_id = $res->id;
$model->save();
}
}
}
$model->save();
@ -288,31 +291,37 @@ class TravelUserBookingFewoRepository extends BaseRepository {
$result['season'] = [];
$frist_day = false;
$result['season_find'] = false;
$result['price_find'] = false;
//days
foreach ($period as $dt) {
foreach ($seasons as $season) {
if($dt->format("Y-m-d") >= $season['fromDay'] && $dt->format("Y-m-d") <= $season['toDay']){
$check_days[] = $dt->format("d.m.Y");
$price = $season['price'];
if(isset($price->per_night)){
$result['price_find'] = true;
}
$name = $season['name'];
$result['season_find'] = true;
if(!isset($result['season'][$name])){
$result['season'][$name]['fromDay'] = $dt->format("d.m.Y");
$result['price_service'] = $price->flat_price;
$result['price_service'] = isset($price->flat_price) ? $price->flat_price : 0;
$result['season'][$name]['price'] = 0;
$result['season'][$name]['numberDays'] = 0;
$result['season'][$name]['perNight'] = $price->per_night;
$result['season'][$name]['perNight'] = isset($price->per_night) ? $price->per_night : 0;
$result['season'][$name]['minimumStay'] = $season['minimum_stay'];
}
if(!$frist_day){
$result['season'][$name]['price'] += $price->per_night;
$result['season'][$name]['price'] += isset($price->per_night) ? $price->per_night : 0;
$result['season'][$name]['numberDays'] ++;
$result['season'][$name]['toDay'] = $dt->format("d.m.Y");
$result['price_travel'] += $price->per_night;
$result['price_travel'] += isset($price->per_night) ? $price->per_night : 0;
$result['days'] ++;
$result['season_find'] = true;
}else{
$frist_day = true;
@ -327,7 +336,4 @@ class TravelUserBookingFewoRepository extends BaseRepository {
}
}

View file

@ -0,0 +1,162 @@
<?php
namespace App\Services;
use GuzzleHttp\Client;
class Passolution
{
private $aid;
private $apw;
private $sid;
private $sidpw;
private $lang;
private $nat;
private $destco;
private $tdat;
private $descd;
private $trv;
private $ino;
private $vis;
private $enr;
private $agency;
public function __construct()
{
//User-ID of the travel agency to which the data is forwarded
$this->aid = "sterntours@passolution.de";
//User password of the travel agency to which the data is forwarded
$this->apw = "JfSRv!vJXa";
//User-ID of the enquirer
$this->sid = "sterntours@passolution.de";
//User-Password of the enquirer
$this->sidpw = "JfSRv!vJXa";
//Enrichment of the data by country details
$this->descd = 0;
//Enrichment of the data by infomation on transit visa
$this->trv = 1;
//Enrichment of the data by vaccination regulations
$this->ino = 1;
//Enrichment of the data by visa requirements
$this->vis = 1;
//Transaction key external system
$this->enr = 123123;
//Agency number of the travel agency to which the data is forwarded
$this->agency = 1000;
$this->fill();
}
public function fill($data = []){
//Language in which the data is desired
$this->lang = isset($data['lang']) ? $data['lang'] : 'de';
//Nationality of the traveller
$this->nat = isset($data['nat']) ? $data['nat'] : 'de';
//Country-Code of the destination
$this->destco = isset($data['destco']) ? $data['destco'] : 'de';
//Travel dates in format DD-MM-YYYY
$this->tdat = isset($data['tdat']) ? $data['tdat'] : '20-12-2020';
}
public function read()
{
$url = "https://api01.passolution.de/condition/search.php";
$url .= "?aid=".$this->aid;
$url .= "&apw=".$this->apw;
$url .= "&sid=".$this->sid;
$url .= "&sidpw=".$this->sidpw;
$url .= "&lang=".$this->lang;
$url .= "&nat=".$this->nat;
$url .= "&destco=".$this->destco;
$url .= "&tdat=".$this->tdat;
$url .= "&descd=".$this->descd;
$url .= "&trv=".$this->trv;
$url .= "&ino=".$this->ino;
$url .= "&vis=".$this->vis;
$url .= "&enr=".$this->enr;
$url .= "&agency=".$this->agency;
$client = new Client();
$res = $client->get($url, [
]);
if($res->getStatusCode() == 200){
$body = $res->getBody();
$body = json_decode($body);
if($body == null){
return '';
}
if(isset($body->status) && $body->status !== 200){
return isset($body->message) ? $body->message : '';
}
$text = "";
if(is_array($body->response)){
foreach ($body->response as $response){
$text .= "<p><strong>".$response->additionalContent."</strong></p>";
$text .= "<h2>".$response->entry->response->headline."</h2>";
$text .= "<p>".$response->entry->response->content."</p>";
$text .= "<h2>".$response->visa->response->headline."</h2>";
$text .= "<p>".$response->visa->response->content."</p>";
$text .= "<h2>".$response->transitvisa->response->headline."</h2>";
$text .= "<p>".$response->transitvisa->response->content."</p>";
$text .= "<h2>".$response->inoculation->response->headline."</h2>";
$text .= "<p>".$response->inoculation->response->content."</p>";
}
}else{
$text .= "<p><strong>".$body->response->additionalContent."</strong></p>";
$text .= "<h2>".$body->response->entry->headline."</h2>";
$text .= "<p>".$body->response->entry->content."</p>";
$text .= "<h2>".$body->response->visa->headline."</h2>";
$text .= "<p>".$body->response->visa->content."</p>";
$text .= "<h2>".$body->response->transitvisa->headline."</h2>";
$text .= "<p>".$body->response->transitvisa->content."</p>";
$text .= "<h2>".$body->response->inoculation->headline."</h2>";
$text .= "<p>".$body->response->inoculation->content."</p>";
}
return nl2br($text);
}
}
}
/*
* https://api01.passolution.de/condition/search.php?aid=cliquers@passolution.de&apw=Yuyjf8Mi3x&nat=de&destco=eg&descd=0&trv=1&ino=1&vis=1&tdat=20-12-2018&enr=123123&agency=1000&sid=10001&sidpw=dhfZD3f*/
/*
*
* aid Nutzer-ID des Reisebüros, an das die Daten weiter geleitet werden ja 10010
apw Nutzer-Passwort des Reisebüros, an das die Daten weiter geleitet werden ja dhHz42w
lang Sprache, in der der Inhalt angefordert wird nein de,en,
nat Nationalität des Reisenden (mehrfachabfrage ist möglich) ja de,ch,at,
dest3l 3-Letter-Code des Reiseziels dest3l oder destco pmi,hrg,
destco Ländercode des Reiseziels (mehrfachabfrage ist möglich) dest3l oder destco eg,es,
tdat Reisedatum im Format TT-MM-YYYY nein 21-12-2020
enr Vorgangsnummer externes System nein A123433
agency Agentur Nummer des Reisebüros, an das die Daten weiter geleitet werden nein A123433
sid Nutzer-ID des Anfragenden ja 10010
sidpw Nutzer-Passwort des Anfragenden ja dhHz42w
ino Anreichern der Daten um die Impfvorschriften nein 0 oder 1
descd Anreichern der Daten um Länderdetails nein 0 oder 1
trv Anreichern der Daten um Informationen zum Transitvisum nein 0 oder 1
vis Anreichern der Daten um Visabestimmungen nein 0 oder 1
ck Prüft in Verbindung mit tdat, enr, desto und nat, ob zwischen der ersten und der aktuellen Anfrage mitteilungsrelevante Änderungen statt gefunden haben. Das Ergebnis wird in der JSON Antwort unter importantchanges im Bereich condition, inoculation und visa angezeigt. nein 0 oder 1
*/