<?php
namespace App\Controller;
use App\Entity\AccountForm;
use App\Entity\Offers;
use App\Entity\Message;
use App\Entity\ImageProposal;
use MangoPay\PayIn;
use MangoPay\PayOut;
use App\Entity\Orders;
use App\Entity\Proposal;
use MangoPay\ApiPayIns;
use MangoPay\MangoPayApi;
use Psr\Log\LoggerInterface;
use MangoPay\MangoPayApi as Api;
use App\Repository\UserRepository;
use App\Repository\OrdersRepository;
use App\Repository\MessageRepository;
use App\Service\Payment\MangopayService;
use App\Repository\AccountFormRepository;
use App\Repository\ProposalRepository;
use App\Repository\OffersRepository;
use App\Service\Payment\StripeService;
use Stripe\Climate\Order;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Bundle\FrameworkBundle\Controller\RedirectController;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use App\Form\OffersType;
use App\Form\QuotationType;
use App\Form\ImageType;
use App\Form\ImagesOfferType;
use Swift_Mailer;
use Swift_Message;
class OffersController extends AbstractController {
/**
* @Route("/offers/create/{accountFormId?}", name="offers.create")
*/
public function OffersCreate(OffersRepository $offersRepository,AccountFormRepository $accountFormRepository, Request $request, $accountFormId){
$user = $this->getUser();
$em = $this->getDoctrine()->getManager();
$offer = new Offers();
$offer->setUser($user);
if(isset($accountFormId)){
$accountForm = $accountFormRepository->find($accountFormId);
$accountForm->addOffer($offer);
}
$form = $this->createForm(OffersType::class, $offer);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$offerSubmitted = $form->getData();
if(isset($offerSubmitted->getImages()[0])){
$image = $offerSubmitted->getImages()[0];
$imageFile = $image->getImage();
$image->setImage($imageFile);
$em->persist($image);
}
$em->persist($offerSubmitted);
$em->flush();
$this->addFlash('published', 'Votre demande de Job à été publiée.');
return $this->redirectToRoute('offers.list');
}
return $this->render('offers.form.html.twig',['form'=>$form->createView()]);
}
/**
* @Route("/mail", name="mail")
*/
public function mail(Swift_Mailer $mailer){
/* $headers = 'From: contact@jobingwada.fr' . "\r\n" .
'Reply-To: contact@jobingwada.fr' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail("lionel.amiens84@gmail.com",'sujet jobingwada','hello world');*/
$message = (new Swift_Message('Hello from SwiftMailer'))
->setFrom('contact@jobingwada.fr')
->setTo('lionel.purchase@gmail.com')
->setBody('This is the email body (plain text).');
$mailer->send($message);
return new Response('ok');
}
/**
* @Route("/offers/private/{offerId}", name="offers.private")
*/
public function offerPrivate($offerId, OffersRepository $offersRepository,ProposalRepository $proposalRepository, Request $request,MessageRepository $messageRepository, Swift_Mailer $mailer)
{
$this->denyAccessUnlessGranted(['ROLE_USER']);
$offer = $offersRepository->find($offerId);
$user = $this->getUser();
$accountForm = $user->getAccountForm();
$formView = null;
$proposal= null;
$messages = null;
$jobber = $user;
if(isset($jobber) && $jobber ){
$proposalFetch = $proposalRepository->findBy(['offer' => $offer, 'accountForm' => $accountForm]);
if( isset($proposalFetch) && $proposalFetch != null ){
$messages = $messageRepository->findMessagesChat($jobber,$user);
$em = $this->getDoctrine()->getManager();
$proposal = $proposalFetch[0];
} else {
$proposal = new Proposal();
$proposal->setAccountForm($accountForm);
}
$form = $this->createForm(QuotationType::class, $proposal);
$form->handleRequest($request);
$formView = $form->createView();
if($form->isSubmitted() && $form->isValid()){
$message = $form->getData();
$em->persist($message);
$em->flush();
$this->addFlash('quotation', 'Votre offre a bien été soumise !');
/*$message = (new Swift_Message('Hello from SwiftMailer'))
->setFrom('contact@soukounian.fr')
->setTo('lionel.amiens84@gmail.com')
->setBody('This is the email body (plain text).');
$mailer->send($message);*/
return $this->redirectToRoute('offers.list');
}
}
if($offer->getAccountForm()->contains($accountForm)){
return $this->render('offers.private.view.html .twig', ['offer'=>$offer,'proposal'=>$proposal,'user'=>$user,'form'=>$formView,'messages' => $messages]);
}
return $this->redirectToRoute('profil.user');
}
/**
* @Route("/offers/list/{offset}", name="offers.list")
*/
public function OffersList(OffersRepository $offersRepository, Request $request, ProposalRepository $proposalRepository, $offset=0){
$user = $this->getUser();
//$offers = $offersRepository->findBy(['user' => $user->getId()], ['createdAt' => 'DESC']);
$offers = $offersRepository->findOffersWithProposals($user , $offset);
return $this->render('offers.list.html.twig',['offers'=>$offers,'offset'=>$offset]);
}
/**
* @Route("/offers/view/{id}", name="offers.view")
*/
public function OffersView($id,OffersRepository $offersRepository, ProposalRepository $proposalRepository, Request $request,MessageRepository $messageRepository){
$this->denyAccessUnlessGranted(['ROLE_USER']);
$user = $this->getUser();
$offer = $offersRepository->find($id);
$numberProposal = count($offer->getAccountForm());
$formView = null;
$proposal= null;
$messages = null;
if($user){
$accountForm = $user->getAccountForm();
$jobber = $user;
if(isset($jobber) && $jobber ){
$proposalFetch = $proposalRepository->findBy(['offer' => $offer, 'accountForm' => $accountForm]);
if( isset($proposalFetch) && $proposalFetch != null ){
$messages = $messageRepository->findMessagesChat($jobber,$user);
$em = $this->getDoctrine()->getManager();
$proposal = $proposalFetch[0];
} else {
$proposal = new Proposal();
$proposal->setAccountForm($accountForm);
}
$form = $this->createForm(QuotationType::class, $proposal);
$form->handleRequest($request);
$formView = $form->createView();
if($form->isSubmitted() && $form->isValid()){
$message = $form->getData();
$em->persist($message);
$em->flush();
$this->addFlash('quotation', 'Votre offre a bien été soumise !');
return $this->redirectToRoute('offers.list');
}
}
}
return $this->render('offers.view.html.twig',['offer'=>$offer,'proposal'=>$proposal,'user'=>$user, 'numberProposal'=>$numberProposal,'form'=>$formView,'messages' => $messages]);
}
/**
* @Route("/offers/update/{id}", name="offers.update")
*/
public function OffersUpdate($id,OffersRepository $offersRepository, Request $request){
$user = $this->getUser();
$em = $this->getDoctrine()->getManager();
$offer = $offersRepository->find($id);
$offer->setUser($user);
$form = $this->createForm(OffersType::class, $offer);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$offer = $form->getData();
$em->persist($offer);
$em->flush();
$this->addFlash('published', 'Votre demande de Job à été modifiée.');
return $this->redirectToRoute('offers.view',['id'=>$id]);
}
//dd($offer);
return $this->render('offers.update.html.twig',['form'=>$form->createView()]);
}
/**
* @Route("/offers/proposal/{idOffer}", name="offers.proposal")
*/
public function OffersProposal(ProposalRepository $proposalRepository,OffersRepository $offersRepository ,Request $request, $idOffer ){
$jobber = $this->getUser();
$offer = $offersRepository->find($idOffer);
$offer->setStatus(2);
$proposal = new Proposal();
$content = $request->request->get('quotation')['content'];
$price = $request->request->get('quotation')['tarif'];
$offerId = $request->request->get('offer_id');
$delay = $request->request->get('quotation')['delay'];
$proposal->setPrice($price);
$proposal->setContent($content);
$proposal->setOffer($offer);
$accountForm = $jobber->getAccountForm();
$proposal->setAccountForm($accountForm);
if(isset($delay)){
$proposal->setDelay($delay);
}
$em = $this->getDoctrine()->getManager();
try{
$em->persist($proposal);
$em->flush();
} catch (\Exception $e){
//echo 'Proposition non enregistrée';
}
return new JsonResponse([$content,$price,$offerId,$delay]);
}
/**
* @Route("/offers/user/view/proposals/{idOffer}", name="offers.user.view.proposals")
*/
public function OffersProposalsListView( ProposalRepository $proposalRepository,OffersRepository $offersRepository ,Request $request, $idOffer){
$jobber = $this->getUser();
$proposals = $proposalRepository->findBy(['offer'=>$idOffer],['id' => 'DESC']);
$offer = $offersRepository->find($idOffer);
/* if($offer->getUser() !== $jobber)
{
return $this->redirectToRoute('profil.user');
}*/
return $this->render('offers.user.view.html.twig',['proposals'=>$proposals, 'idOffer' => $idOffer, 'offer' => $offer]);
}
/**
* @Route("/offers/user/proposals/{idOffer}", name="offers.user.proposals")
*/
public function OffersProposalsList(ProposalRepository $proposalRepository,OffersRepository $offersRepository ,Request $request, $idOffer){
$jobber = $this->getUser();
$proposals = $proposalRepository->findBy(['offer'=>$idOffer], ['id' => 'DESC']);
//$proposals = json_encode($proposals);
// dd($proposals);
// $messages = $messageRepository->findMessagesChat($jobber,$user);
return $this->render($proposals);
}
}