Add new Draft
git-svn-id: http://78.47.251.156/svn/dev/sterntours-3@3476 f459cee4-fb09-11de-96c3-f9c5f16c3c76
This commit is contained in:
parent
9421cf8c5c
commit
b75c88bf96
5 changed files with 398 additions and 114 deletions
|
|
@ -79,9 +79,6 @@ class BookingController extends Controller
|
||||||
$ret .= "<hr>";
|
$ret .= "<hr>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo $ret;
|
|
||||||
die();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$travelProgram = $travelProgramPage->getTravelProgram();
|
$travelProgram = $travelProgramPage->getTravelProgram();
|
||||||
|
|
@ -143,8 +140,6 @@ class BookingController extends Controller
|
||||||
$bookingPriceInfo = [];
|
$bookingPriceInfo = [];
|
||||||
$totalPrice = $this->calculatePrice($travelDate, $bookingRequest, $travelProgram->getCategory()->getId(), $travelProgram->getDepositPercent(), $htmlSummary, $bookingPriceInfo);
|
$totalPrice = $this->calculatePrice($travelDate, $bookingRequest, $travelProgram->getCategory()->getId(), $travelProgram->getDepositPercent(), $htmlSummary, $bookingPriceInfo);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ($action == '/buchen')
|
if ($action == '/buchen')
|
||||||
{
|
{
|
||||||
$breadcrumbEntries = Util::createBreadcrumb($travelProgramPage);
|
$breadcrumbEntries = Util::createBreadcrumb($travelProgramPage);
|
||||||
|
|
@ -179,6 +174,8 @@ class BookingController extends Controller
|
||||||
{
|
{
|
||||||
$crmBookingUrl = preg_replace('/\\/api/', '', $crmBookingUrl).'/edit';
|
$crmBookingUrl = preg_replace('/\\/api/', '', $crmBookingUrl).'/edit';
|
||||||
}
|
}
|
||||||
|
var_dump($crmBookingUrl);
|
||||||
|
die();
|
||||||
|
|
||||||
$this->get('mailer')->send(\Swift_Message::newInstance()
|
$this->get('mailer')->send(\Swift_Message::newInstance()
|
||||||
->setSubject('Ihr Buchungsauftrag bei STERN TOURS')
|
->setSubject('Ihr Buchungsauftrag bei STERN TOURS')
|
||||||
|
|
|
||||||
|
|
@ -263,7 +263,6 @@ class TravelProgram
|
||||||
* @ORM\GeneratedValue(strategy="IDENTITY")
|
* @ORM\GeneratedValue(strategy="IDENTITY")
|
||||||
*/
|
*/
|
||||||
private $id;
|
private $id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var \AppBundle\Entity\TravelArrivalPoint
|
* @var \AppBundle\Entity\TravelArrivalPoint
|
||||||
*
|
*
|
||||||
|
|
@ -340,6 +339,13 @@ class TravelProgram
|
||||||
*/
|
*/
|
||||||
private $periods;
|
private $periods;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\OneToMany(targetEntity="AppBundle\Entity\TravelProgramDrafts", mappedBy="program")
|
||||||
|
*/
|
||||||
|
private $drafts;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ORM\OneToMany(targetEntity="AppBundle\Entity\TravelDeparturePoint", mappedBy="program")
|
* @ORM\OneToMany(targetEntity="AppBundle\Entity\TravelDeparturePoint", mappedBy="program")
|
||||||
*/
|
*/
|
||||||
|
|
@ -1496,6 +1502,43 @@ class TravelProgram
|
||||||
return $this->periods;
|
return $this->periods;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add drafts
|
||||||
|
*
|
||||||
|
* @param \AppBundle\Entity\TravelProgramDrafts $draft
|
||||||
|
*
|
||||||
|
* @return TravelProgram
|
||||||
|
*/
|
||||||
|
public function addDraft(\AppBundle\Entity\TravelProgramDrafts $draft)
|
||||||
|
{
|
||||||
|
$this->drafts[] = $draft;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove draft
|
||||||
|
*
|
||||||
|
* @param \AppBundle\Entity\TravelProgramDrafts $draft
|
||||||
|
*/
|
||||||
|
public function removeDraft(\AppBundle\Entity\TravelProgramDrafts $draft)
|
||||||
|
{
|
||||||
|
$this->drafts->removeElement($draft);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get $this->drafts
|
||||||
|
*
|
||||||
|
* @return \Doctrine\Common\Collections\Collection|TravelProgramDrafts[]
|
||||||
|
*/
|
||||||
|
public function getDrafts()
|
||||||
|
{
|
||||||
|
return $this->drafts;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public function getIsMediated()
|
public function getIsMediated()
|
||||||
{
|
{
|
||||||
return $this->programType == TravelProgram::MEDIATED_PROGRAM_TYPE;
|
return $this->programType == TravelProgram::MEDIATED_PROGRAM_TYPE;
|
||||||
|
|
|
||||||
103
trunk/src/AppBundle/Entity/TravelProgramDrafts.php
Normal file
103
trunk/src/AppBundle/Entity/TravelProgramDrafts.php
Normal file
|
|
@ -0,0 +1,103 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace AppBundle\Entity;
|
||||||
|
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TravelProgramDrafts
|
||||||
|
*
|
||||||
|
* @ORM\Table(name="travel_program_drafts", indexes={@ORM\Index(name="travel_program_drafts_ibfk_1", columns={"travel_program_id"})})
|
||||||
|
* @ORM\Entity
|
||||||
|
*/
|
||||||
|
|
||||||
|
class TravelProgramDrafts
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var integer
|
||||||
|
*
|
||||||
|
* @ORM\Column(name="id", type="integer")
|
||||||
|
* @ORM\Id
|
||||||
|
* @ORM\GeneratedValue(strategy="IDENTITY")
|
||||||
|
*/
|
||||||
|
private $id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*
|
||||||
|
* @ORM\Column(name="weekdays", type="string", length=255, nullable=true)
|
||||||
|
*/
|
||||||
|
private $weekdays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \AppBundle\Entity\TravelProgram
|
||||||
|
*
|
||||||
|
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\TravelProgram", inversedBy="drafts")
|
||||||
|
* @ORM\JoinColumns({
|
||||||
|
* @ORM\JoinColumn(name="travel_program_id", referencedColumnName="id")
|
||||||
|
* })
|
||||||
|
*/
|
||||||
|
private $program;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get id
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getId()
|
||||||
|
{
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set program
|
||||||
|
*
|
||||||
|
* @param \AppBundle\Entity\TravelProgram $program
|
||||||
|
*
|
||||||
|
* @return TravelProgramDrafts
|
||||||
|
*/
|
||||||
|
public function setProgram(\AppBundle\Entity\TravelProgram $program = null)
|
||||||
|
{
|
||||||
|
$this->program = $program;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get program
|
||||||
|
*
|
||||||
|
* @return \AppBundle\Entity\TravelProgram
|
||||||
|
*/
|
||||||
|
public function getProgram()
|
||||||
|
{
|
||||||
|
return $this->program;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set weekdays
|
||||||
|
*
|
||||||
|
* @param string TravelProgramDrafts
|
||||||
|
*
|
||||||
|
* @return TravelProgramDrafts
|
||||||
|
*/
|
||||||
|
public function setWeekdays($weekdays)
|
||||||
|
{
|
||||||
|
$this->weekdays = $weekdays;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get weekdays
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getWeekdays()
|
||||||
|
{
|
||||||
|
return $this->weekdays;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -25,6 +25,11 @@ class BookingSternToursCrmExporter extends SternToursCrmExporter
|
||||||
{
|
{
|
||||||
$tp = $travelDate->getTravelProgram();
|
$tp = $travelDate->getTravelProgram();
|
||||||
$startDateStr = $travelDate->getStart()->format('Y-m-d');
|
$startDateStr = $travelDate->getStart()->format('Y-m-d');
|
||||||
|
if(count($tp->getDrafts()) > 0){
|
||||||
|
$newDrafts = true;
|
||||||
|
}else{
|
||||||
|
$newDrafts = false;
|
||||||
|
}
|
||||||
|
|
||||||
$lead = $this->createLead($bookingRequest, $travelDate);
|
$lead = $this->createLead($bookingRequest, $travelDate);
|
||||||
|
|
||||||
|
|
@ -33,7 +38,7 @@ class BookingSternToursCrmExporter extends SternToursCrmExporter
|
||||||
$this->warn('Failed creating lead in CRM Lead', $bookingRequest, $travelDate, Logger::ERROR);
|
$this->warn('Failed creating lead in CRM Lead', $bookingRequest, $travelDate, Logger::ERROR);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$bookingUrl = $this->createBooking($bookingRequest, $travelDate, $bookingPriceInfo, $lead['customer_id'], $lead['id']);
|
$bookingUrl = $this->createBooking($bookingRequest, $travelDate, $bookingPriceInfo, $lead['customer_id'], $lead['id'], $newDrafts);
|
||||||
if ($bookingUrl === false)
|
if ($bookingUrl === false)
|
||||||
{
|
{
|
||||||
$this->warn('Failed creating booking in CRM Booking', $bookingRequest, $travelDate, Logger::ERROR);
|
$this->warn('Failed creating booking in CRM Booking', $bookingRequest, $travelDate, Logger::ERROR);
|
||||||
|
|
@ -87,73 +92,180 @@ class BookingSternToursCrmExporter extends SternToursCrmExporter
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
//has drafts - get the new Drafts from the CRM v3
|
||||||
|
if($newDrafts){
|
||||||
|
$this->createNewDrafts($bookingUrl, $bookingRequest, $tp, $travelDate, $bookingPriceInfo, $startDateStr);
|
||||||
|
}else{
|
||||||
|
//no new Drafts - create the old Arrangements
|
||||||
|
$this->createOldArrangement($bookingUrl, $bookingRequest, $tp, $travelDate, $bookingPriceInfo, $startDateStr);
|
||||||
|
}
|
||||||
|
|
||||||
$viewPosition = 100;
|
foreach ($bookingPriceInfo['insurances'] as $insuranceInfo) {
|
||||||
$viewPositionPrice = 50;
|
$this->createServiceItem($bookingUrl, [
|
||||||
$endDateStr = $travelDate->getEnd()->format('Y-m-d');
|
'travel_company_id' => 30,
|
||||||
|
'service_price' => $insuranceInfo['count'] * $insuranceInfo['insurancePriceValue'],
|
||||||
$arrangementDefaults = [
|
'name' => $insuranceInfo['count'] . 'x ' . $insuranceInfo['insurance']->getName() . ' (' .
|
||||||
'state' => (new \DateTime())->format('Y-m-d'),
|
$insuranceInfo['insurancePrice']->getCode() . ')',
|
||||||
'in_pdf' => 1
|
'commission' => round(($insuranceInfo['count'] * $insuranceInfo['insurancePriceValue']) * 20 / 100, 2),
|
||||||
];
|
'travel_date' => $startDateStr,
|
||||||
|
]);
|
||||||
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
//child
|
||||||
'type_id' => 4, // Flug
|
if ($insuranceInfo['countChild'] > 0) {
|
||||||
'type_s' => 'Flug',
|
$this->createServiceItem($bookingUrl, [
|
||||||
'begin' => $startDateStr,
|
'travel_company_id' => 30,
|
||||||
'view_position' => --$viewPosition,
|
'service_price' => $insuranceInfo['countChild'] * $insuranceInfo['insuranceChildPriceValue'],
|
||||||
'data_s' => ['Hinflug' => 'von '. $bookingPriceInfo['departure']->getName()],
|
'name' => $insuranceInfo['countChild'] . 'x ' . $insuranceInfo['insurance']->getName() . ' (' .
|
||||||
]);
|
$insuranceInfo['insuranceChildPrice']->getCode() . ')',
|
||||||
|
'commission' => round(($insuranceInfo['countChild'] * $insuranceInfo['insuranceChildPriceValue']) * 20 / 100, 2),
|
||||||
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
'travel_date' => $startDateStr,
|
||||||
'type_id' => 26, // Preisinformation
|
]);
|
||||||
'type_s' => 'Preisinformation',
|
|
||||||
'view_position' => --$viewPositionPrice,
|
|
||||||
'data_s' => [
|
|
||||||
'Name' => 'Abfahrts-/Abflugort '. $bookingPriceInfo['departure']->getName(),
|
|
||||||
'Preis' => $bookingPriceInfo['departure']->getExtraCharge(),
|
|
||||||
'Teilnehmer' => ($bookingRequest->getTravelerCount() + $bookingRequest->getChildrenCount()),
|
|
||||||
],
|
|
||||||
]);
|
|
||||||
|
|
||||||
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
|
||||||
'type_id' => 24, // Rundreise
|
|
||||||
'type_s' => 'Rundreise', // Rundreise
|
|
||||||
'begin' => $startDateStr,
|
|
||||||
'end' => $endDateStr,
|
|
||||||
'view_position' => --$viewPosition,
|
|
||||||
'data_s' => ['Name' => $tp->getTitle() .' ('. $travelDate->getName() .')'],
|
|
||||||
]);
|
|
||||||
|
|
||||||
|
|
||||||
$roomStrs = [];
|
|
||||||
foreach ($bookingPriceInfo['rooms'] as $room)
|
|
||||||
{
|
|
||||||
$roomStrs[] = '1x '. $room['name'];
|
|
||||||
$child = array();
|
|
||||||
if($room['children'] > 0){
|
|
||||||
$child = [
|
|
||||||
'Kind' => $room['children'],
|
|
||||||
'KindPreis' => $room['price_children'],
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
$data = [
|
}
|
||||||
'Name' => 'pro Person im \''. $room['name'] .'\'',
|
}
|
||||||
'Preis' => $room['price'],
|
|
||||||
'Teilnehmer' => $room['adults'],
|
|
||||||
];
|
|
||||||
$data = array_merge($data, $child);
|
|
||||||
|
|
||||||
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
return $bookingUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createNewDrafts($bookingUrl, $bookingRequest, $tp, $travelDate, $bookingPriceInfo, $startDateStr){
|
||||||
|
//make an request omn the new API
|
||||||
|
$endDateStr = $travelDate->getEnd()->format('Y-m-d');
|
||||||
|
|
||||||
|
$rooms = [];
|
||||||
|
$i = 0;
|
||||||
|
foreach ($bookingPriceInfo['rooms'] as $room)
|
||||||
|
{
|
||||||
|
$rooms[$i] = [
|
||||||
|
'name' => $room['name'],
|
||||||
|
'price_adult' => $room['price'],
|
||||||
|
'adult' => $room['adults'],
|
||||||
|
'children' => 0,
|
||||||
|
'price_children' => 0,
|
||||||
|
];
|
||||||
|
if($room['children'] > 0){
|
||||||
|
$rooms[$i]['children'] = $room['children'];
|
||||||
|
$rooms[$i]['price_children'] = $room['price_children'];
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
$class_options = [];
|
||||||
|
// Actually: extra_category
|
||||||
|
foreach ($bookingPriceInfo['classOptions'] as $classOption)
|
||||||
|
{
|
||||||
|
$class_options[] = [
|
||||||
|
'name' => $classOption['name'],
|
||||||
|
'price' => $classOption['price'],
|
||||||
|
'count' => $classOption['count'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
$travel_options = [];
|
||||||
|
$i = 0;
|
||||||
|
foreach ($bookingRequest->getTravelOptions() as $option)
|
||||||
|
{
|
||||||
|
$travel_options[$i] = [
|
||||||
|
'name' => $option->getName(),
|
||||||
|
'price_adult' => $option->getPrice(),
|
||||||
|
'adult' => $bookingRequest->getTravelerCount(),
|
||||||
|
'children' => 0,
|
||||||
|
'price_children' => 0,
|
||||||
|
];
|
||||||
|
if($option->getPriceChildren() > 0){
|
||||||
|
$travel_options[$i]['children'] = $bookingRequest->getChildrenCount();
|
||||||
|
$travel_options[$i]['price_children'] = $option->getPriceChildren();
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$resp = $this->httpPostAPIv3('create_drafts', [
|
||||||
|
'travel_program_id' => $tp->getId(),
|
||||||
|
'comfort' => $bookingRequest->getComfort(),
|
||||||
|
'booking_id' => array_values(array_slice(explode("/", $bookingUrl), -1))[0],
|
||||||
|
'request_date' => (new \DateTime())->format('Y-m-d'),
|
||||||
|
'startDateStr' => $startDateStr,
|
||||||
|
'endDateStr' => $endDateStr,
|
||||||
|
'departure' => $bookingPriceInfo['departure']->getName(),
|
||||||
|
'departure_extra_charge' => $bookingPriceInfo['departure']->getExtraCharge(),
|
||||||
|
'traveler' => ($bookingRequest->getTravelerCount() + $bookingRequest->getChildrenCount()),
|
||||||
|
'title' => $tp->getTitle(),
|
||||||
|
'number' => $travelDate->getName(),
|
||||||
|
'rooms' => $rooms,
|
||||||
|
'class_options' => $class_options,
|
||||||
|
'travel_options' => $travel_options,
|
||||||
|
]);
|
||||||
|
if (count($resp) == 0)
|
||||||
|
{
|
||||||
|
$this->warn('Failed retrieving newly created lead object', $bookingRequest, $travelDate);
|
||||||
|
}
|
||||||
|
return $resp;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createOldArrangement($bookingUrl, $bookingRequest, $tp, $travelDate, $bookingPriceInfo, $startDateStr){
|
||||||
|
$viewPosition = 100;
|
||||||
|
$viewPositionPrice = 50;
|
||||||
|
$endDateStr = $travelDate->getEnd()->format('Y-m-d');
|
||||||
|
|
||||||
|
$arrangementDefaults = [
|
||||||
|
'state' => (new \DateTime())->format('Y-m-d'),
|
||||||
|
'in_pdf' => 1
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
||||||
|
'type_id' => 4, // Flug
|
||||||
|
'type_s' => 'Flug',
|
||||||
|
'begin' => $startDateStr,
|
||||||
|
'view_position' => --$viewPosition,
|
||||||
|
'data_s' => ['Hinflug' => 'von '. $bookingPriceInfo['departure']->getName()],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
||||||
|
'type_id' => 26, // Preisinformation
|
||||||
|
'type_s' => 'Preisinformation',
|
||||||
|
'view_position' => --$viewPositionPrice,
|
||||||
|
'data_s' => [
|
||||||
|
'Name' => 'Abfahrts-/Abflugort '. $bookingPriceInfo['departure']->getName(),
|
||||||
|
'Preis' => $bookingPriceInfo['departure']->getExtraCharge(),
|
||||||
|
'Teilnehmer' => ($bookingRequest->getTravelerCount() + $bookingRequest->getChildrenCount()),
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
||||||
|
'type_id' => 24, // Rundreise
|
||||||
|
'type_s' => 'Rundreise', // Rundreise
|
||||||
|
'begin' => $startDateStr,
|
||||||
|
'end' => $endDateStr,
|
||||||
|
'view_position' => --$viewPosition,
|
||||||
|
'data_s' => ['Name' => $tp->getTitle() .' ('. $travelDate->getName() .')'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
$roomStrs = [];
|
||||||
|
foreach ($bookingPriceInfo['rooms'] as $room)
|
||||||
|
{
|
||||||
|
$roomStrs[] = '1x '. $room['name'];
|
||||||
|
$child = array();
|
||||||
|
if($room['children'] > 0){
|
||||||
|
$child = [
|
||||||
|
'Kind' => $room['children'],
|
||||||
|
'KindPreis' => $room['price_children'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
$data = [
|
||||||
|
'Name' => 'pro Person im \''. $room['name'] .'\'',
|
||||||
|
'Preis' => $room['price'],
|
||||||
|
'Teilnehmer' => $room['adults'],
|
||||||
|
];
|
||||||
|
$data = array_merge($data, $child);
|
||||||
|
|
||||||
|
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
||||||
'type_id' => 26, // Preisinformation
|
'type_id' => 26, // Preisinformation
|
||||||
'type_s' => 'Preisinformation',
|
'type_s' => 'Preisinformation',
|
||||||
'view_position' => --$viewPositionPrice,
|
'view_position' => --$viewPositionPrice,
|
||||||
'data_s' => $data,
|
'data_s' => $data,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
|
||||||
|
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
||||||
'type_id' => 5, // Hotel
|
'type_id' => 5, // Hotel
|
||||||
'type_s' => 'Hotel',
|
'type_s' => 'Hotel',
|
||||||
'begin' => $startDateStr,
|
'begin' => $startDateStr,
|
||||||
|
|
@ -162,10 +274,10 @@ class BookingSternToursCrmExporter extends SternToursCrmExporter
|
||||||
'data_s' => ['Zimmer' => implode(', ', $roomStrs)],
|
'data_s' => ['Zimmer' => implode(', ', $roomStrs)],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Actually: extra_category
|
// Actually: extra_category
|
||||||
foreach ($bookingPriceInfo['classOptions'] as $classOption)
|
foreach ($bookingPriceInfo['classOptions'] as $classOption)
|
||||||
{
|
{
|
||||||
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
||||||
'type_id' => 26, // Preisinformation
|
'type_id' => 26, // Preisinformation
|
||||||
'type_s' => 'Preisinformation',
|
'type_s' => 'Preisinformation',
|
||||||
'view_position' => --$viewPositionPrice,
|
'view_position' => --$viewPositionPrice,
|
||||||
|
|
@ -176,9 +288,9 @@ class BookingSternToursCrmExporter extends SternToursCrmExporter
|
||||||
|
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
||||||
'type_id' => 4, // Flug
|
'type_id' => 4, // Flug
|
||||||
'type_s' => 'Flug',
|
'type_s' => 'Flug',
|
||||||
'begin' => $endDateStr,
|
'begin' => $endDateStr,
|
||||||
|
|
@ -187,53 +299,28 @@ class BookingSternToursCrmExporter extends SternToursCrmExporter
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
foreach ($bookingRequest->getTravelOptions() as $option)
|
foreach ($bookingRequest->getTravelOptions() as $option)
|
||||||
{
|
{
|
||||||
$child = array();
|
$child = array();
|
||||||
if($option->getPriceChildren() > 0){
|
if($option->getPriceChildren() > 0){
|
||||||
$child = [
|
$child = [
|
||||||
'Kind' => $bookingRequest->getChildrenCount(),
|
'Kind' => $bookingRequest->getChildrenCount(),
|
||||||
'KindPreis' => $option->getPriceChildren(),
|
'KindPreis' => $option->getPriceChildren(),
|
||||||
];
|
|
||||||
}
|
|
||||||
$data = [
|
|
||||||
'Name' => $option->getName(),
|
|
||||||
'Preis' => $option->getPrice(),
|
|
||||||
'Teilnehmer' => $bookingRequest->getTravelerCount(),
|
|
||||||
];
|
];
|
||||||
$data = array_merge($data, $child);
|
}
|
||||||
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
$data = [
|
||||||
|
'Name' => $option->getName(),
|
||||||
|
'Preis' => $option->getPrice(),
|
||||||
|
'Teilnehmer' => $bookingRequest->getTravelerCount(),
|
||||||
|
];
|
||||||
|
$data = array_merge($data, $child);
|
||||||
|
$this->createArrangement($bookingUrl, $arrangementDefaults + [
|
||||||
'type_id' => 26, // Preisinformation
|
'type_id' => 26, // Preisinformation
|
||||||
'type_s' => 'Preisinformation',
|
'type_s' => 'Preisinformation',
|
||||||
'view_position' => --$viewPositionPrice,
|
'view_position' => --$viewPositionPrice,
|
||||||
'data_s' => $data
|
'data_s' => $data
|
||||||
]);
|
]);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($bookingPriceInfo['insurances'] as $insuranceInfo) {
|
|
||||||
$this->createServiceItem($bookingUrl, [
|
|
||||||
'travel_company_id' => 30,
|
|
||||||
'service_price' => $insuranceInfo['count'] * $insuranceInfo['insurancePriceValue'],
|
|
||||||
'name' => $insuranceInfo['count'] . 'x ' . $insuranceInfo['insurance']->getName() . ' (' .
|
|
||||||
$insuranceInfo['insurancePrice']->getCode() . ')',
|
|
||||||
'commission' => round(($insuranceInfo['count'] * $insuranceInfo['insurancePriceValue']) * 20 / 100, 2),
|
|
||||||
'travel_date' => $startDateStr,
|
|
||||||
]);
|
|
||||||
//child
|
|
||||||
if ($insuranceInfo['countChild'] > 0){
|
|
||||||
$this->createServiceItem($bookingUrl, [
|
|
||||||
'travel_company_id' => 30,
|
|
||||||
'service_price' => $insuranceInfo['countChild'] * $insuranceInfo['insuranceChildPriceValue'],
|
|
||||||
'name' => $insuranceInfo['countChild'] . 'x ' . $insuranceInfo['insurance']->getName() . ' (' .
|
|
||||||
$insuranceInfo['insuranceChildPrice']->getCode() . ')',
|
|
||||||
'commission' => round(($insuranceInfo['countChild'] * $insuranceInfo['insuranceChildPriceValue']) * 20 / 100, 2),
|
|
||||||
'travel_date' => $startDateStr,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $bookingUrl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function createLead(BookingRequest $bookingRequest, TravelDate $travelDate)
|
private function createLead(BookingRequest $bookingRequest, TravelDate $travelDate)
|
||||||
|
|
@ -276,7 +363,7 @@ class BookingSternToursCrmExporter extends SternToursCrmExporter
|
||||||
}
|
}
|
||||||
|
|
||||||
private function createBooking(BookingRequest $bookingRequest, TravelDate $travelDate, $bookingPriceInfo,
|
private function createBooking(BookingRequest $bookingRequest, TravelDate $travelDate, $bookingPriceInfo,
|
||||||
$customerId, $leadId)
|
$customerId, $leadId, $newDrafts = false)
|
||||||
{
|
{
|
||||||
$tp = $travelDate->getTravelProgram();
|
$tp = $travelDate->getTravelProgram();
|
||||||
$resp = $this->httpPost('booking', ['booking' => [
|
$resp = $this->httpPost('booking', ['booking' => [
|
||||||
|
|
@ -303,6 +390,7 @@ class BookingSternToursCrmExporter extends SternToursCrmExporter
|
||||||
'participant_name' => $bookingRequest->getTravelers()[0]->getLastName(),
|
'participant_name' => $bookingRequest->getTravelers()[0]->getLastName(),
|
||||||
'participant_firstname' => $bookingRequest->getTravelers()[0]->getFirstName(),
|
'participant_firstname' => $bookingRequest->getTravelers()[0]->getFirstName(),
|
||||||
'participant_birthdate' => $bookingRequest->getTravelers()[0]->getBirthDate(),
|
'participant_birthdate' => $bookingRequest->getTravelers()[0]->getBirthDate(),
|
||||||
|
'new_drafts' => $newDrafts,
|
||||||
]]);
|
]]);
|
||||||
if (!$resp['success'])
|
if (!$resp['success'])
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -12,12 +12,17 @@ use Monolog\Logger;
|
||||||
|
|
||||||
abstract class SternToursCrmExporter
|
abstract class SternToursCrmExporter
|
||||||
{
|
{
|
||||||
const API_URL = 'https://www.cms.stern-tours.net/api';
|
|
||||||
//const API_URL = 'http://cms-stern-tours.local/api';
|
//const API_URL = 'http://cms-stern-tours.local/api';
|
||||||
|
const API_URL = 'https://www.cms.stern-tours.net/api';
|
||||||
const API_KEY = 'f6077389c9ce710e554763a5de02c8ec';
|
const API_KEY = 'f6077389c9ce710e554763a5de02c8ec';
|
||||||
const API_USER_ID = 15; // 'apiuser'
|
const API_USER_ID = 15; // 'apiuser'
|
||||||
const WEBSITE_ID = 1; // 'sterntours.de'
|
const WEBSITE_ID = 1; // 'sterntours.de'
|
||||||
|
|
||||||
|
//const API_v3_URL = 'http://crm-stern-tours.local/';
|
||||||
|
const API_v3_URL = 'https://mein.sterntours.de/';
|
||||||
|
const API_v3_MAIL = 'info@mein.sterntours.de';
|
||||||
|
const API_v3_PASS = '6m9j,v2GE8px<bt75w';
|
||||||
|
|
||||||
protected $logger;
|
protected $logger;
|
||||||
|
|
||||||
public function __construct(Logger $logger)
|
public function __construct(Logger $logger)
|
||||||
|
|
@ -53,4 +58,52 @@ abstract class SternToursCrmExporter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected final function httpPostAPIv3($action, $postData = [])
|
||||||
|
{
|
||||||
|
return self::loadFromApi($action, $postData);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected final function loadFromApi($action, $postData){
|
||||||
|
|
||||||
|
|
||||||
|
//first - login and get token
|
||||||
|
$baseUrl = self::API_v3_URL.'api/';
|
||||||
|
$data = array(
|
||||||
|
'email' => self::API_v3_MAIL,
|
||||||
|
'password' => self::API_v3_PASS,
|
||||||
|
);
|
||||||
|
$ret = [];
|
||||||
|
|
||||||
|
$ch = curl_init();
|
||||||
|
curl_setopt($ch, CURLOPT_URL, $baseUrl.'login');
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||||
|
curl_setopt($ch, CURLOPT_TIMEOUT, 8);
|
||||||
|
curl_setopt($ch, CURLOPT_POST, count($data));
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
|
||||||
|
|
||||||
|
$result = curl_exec($ch);
|
||||||
|
$r = json_decode($result);
|
||||||
|
|
||||||
|
if($r->success) {
|
||||||
|
if($action == 'create_drafts'){
|
||||||
|
|
||||||
|
//api URL
|
||||||
|
$data = json_encode($postData);
|
||||||
|
// var_dump($data);
|
||||||
|
curl_setopt($ch, CURLOPT_POST, true);
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
||||||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $r->success->token, 'Accept:application/json', 'Content-Type:application/json']);
|
||||||
|
curl_setopt($ch, CURLOPT_URL, $baseUrl.'draft/create_drafts_from_booking');
|
||||||
|
$result = curl_exec($ch);
|
||||||
|
$r = json_decode($result);
|
||||||
|
if($r->success) {
|
||||||
|
curl_close($ch);
|
||||||
|
return $r->success;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue