<?php | |||||
namespace Lc\ShopBundle\Context; | |||||
interface DocumentDeliveryNoteInterface | |||||
{ | |||||
} |
namespace Lc\ShopBundle\Context; | namespace Lc\ShopBundle\Context; | ||||
interface DocumentInvoiceInterface | |||||
interface DocumentInterface | |||||
{ | { | ||||
} | } |
<?php | |||||
namespace Lc\ShopBundle\Context; | |||||
interface DocumentQuotationInterface | |||||
{ | |||||
} |
<?php | |||||
namespace Lc\ShopBundle\Model; | |||||
use Doctrine\Common\Collections\ArrayCollection; | |||||
use Doctrine\Common\Collections\Collection; | |||||
use Doctrine\ORM\Mapping as ORM; | |||||
/** | |||||
* @ORM\MappedSuperclass() | |||||
*/ | |||||
abstract class Document extends AbstractDocumentEntity | |||||
{ | |||||
const TYPE_INVOICE = 'invoice' ; | |||||
const TYPE_QUOTATION = 'quotation' ; | |||||
const TYPE_PURCHASE_ORDER = 'purchase-order' ; | |||||
const TYPE_DELIVERY_NOTE = 'delivery-note' ; | |||||
/** | |||||
* @ORM\Column(type="string", length=64) | |||||
*/ | |||||
protected $type; | |||||
/** | |||||
* @ORM\Column(type="string", length=128, nullable=true) | |||||
*/ | |||||
protected $reference; | |||||
/** | |||||
* @ORM\Column(type="string", length=255, nullable=true) | |||||
*/ | |||||
protected $logo; | |||||
/** | |||||
* @ORM\ManyToOne(targetEntity="Lc\ShopBundle\Context\AddressInterface") | |||||
* @ORM\JoinColumn(nullable=false) | |||||
*/ | |||||
protected $merchantAddress; | |||||
/** | |||||
* @ORM\ManyToOne(targetEntity="Lc\ShopBundle\Context\AddressInterface") | |||||
* @ORM\JoinColumn(nullable=false) | |||||
*/ | |||||
protected $buyerAddress; | |||||
/** | |||||
* @ORM\Column(type="text") | |||||
*/ | |||||
protected $merchantAddressText; | |||||
/** | |||||
* @ORM\Column(type="text") | |||||
*/ | |||||
protected $buyerAddressText; | |||||
/** | |||||
* @ORM\Column(type="text", nullable=true) | |||||
*/ | |||||
protected $deliveryAddressText; | |||||
/** | |||||
* @ORM\Column(type="boolean", nullable=true) | |||||
*/ | |||||
protected $isSent; | |||||
/** | |||||
* @ORM\ManyToMany(targetEntity="Lc\ShopBundle\Context\OrderShopInterface", mappedBy="documents") | |||||
*/ | |||||
protected $orderShops; | |||||
public function __construct() | |||||
{ | |||||
$this->orderShops = new ArrayCollection(); | |||||
} | |||||
public function getLabel() | |||||
{ | |||||
if($this->getType() == self::TYPE_INVOICE) { | |||||
return 'Facture' ; | |||||
} | |||||
elseif($this->getType() == self::TYPE_QUOTATION) { | |||||
return 'Devis' ; | |||||
} | |||||
elseif($this->getType() == self::TYPE_PURCHASE_ORDER) { | |||||
return 'Bon de commande' ; | |||||
} | |||||
elseif($this->getType() == self::TYPE_DELIVERY_NOTE) { | |||||
return 'Bon de livraison' ; | |||||
} | |||||
} | |||||
public function getType(): ?string | |||||
{ | |||||
return $this->type; | |||||
} | |||||
public function setType(string $type): self | |||||
{ | |||||
$this->type = $type; | |||||
return $this; | |||||
} | |||||
public function getReference(): ?string | |||||
{ | |||||
return $this->reference; | |||||
} | |||||
public function setReference(?string $reference): self | |||||
{ | |||||
$this->reference = $reference; | |||||
return $this; | |||||
} | |||||
public function getLogo(): ?string | |||||
{ | |||||
return $this->logo; | |||||
} | |||||
public function setLogo(string $logo): self | |||||
{ | |||||
$this->logo = $logo; | |||||
return $this; | |||||
} | |||||
public function getMerchantAddress(): ?Address | |||||
{ | |||||
return $this->merchantAddress; | |||||
} | |||||
public function setMerchantAddress(?Address $merchantAddress): self | |||||
{ | |||||
$this->merchantAddress = $merchantAddress; | |||||
return $this; | |||||
} | |||||
public function getBuyerAddress(): ?Address | |||||
{ | |||||
return $this->buyerAddress; | |||||
} | |||||
public function setBuyerAddress(?Address $buyerAddress): self | |||||
{ | |||||
$this->buyerAddress = $buyerAddress; | |||||
return $this; | |||||
} | |||||
public function getMerchantAddressText(): ?string | |||||
{ | |||||
return $this->merchantAddressText; | |||||
} | |||||
public function setMerchantAddressText(string $merchantAddressText): self | |||||
{ | |||||
$this->merchantAddressText = $merchantAddressText; | |||||
return $this; | |||||
} | |||||
public function getBuyerAddressText(): ?string | |||||
{ | |||||
return $this->buyerAddressText; | |||||
} | |||||
public function setBuyerAddressText(string $buyerAddressText): self | |||||
{ | |||||
$this->buyerAddressText = $buyerAddressText; | |||||
return $this; | |||||
} | |||||
public function getDeliveryAddressText(): ?string | |||||
{ | |||||
return $this->deliveryAddressText; | |||||
} | |||||
public function setDeliveryAddressText(?string $deliveryAddressText): self | |||||
{ | |||||
$this->deliveryAddressText = $deliveryAddressText; | |||||
return $this; | |||||
} | |||||
public function getIsSent(): ?bool | |||||
{ | |||||
return $this->isSent; | |||||
} | |||||
public function setIsSent(?bool $isSent): self | |||||
{ | |||||
$this->isSent = $isSent; | |||||
return $this; | |||||
} | |||||
/** | |||||
* @return Collection|OrderShop[] | |||||
*/ | |||||
public function getOrderShops(): Collection | |||||
{ | |||||
return $this->orderShops; | |||||
} | |||||
public function addOrderShop(OrderShop $orderShop): self | |||||
{ | |||||
if (!$this->orderShops->contains($orderShop)) { | |||||
$this->orderShops[] = $orderShop; | |||||
$orderShop->addDocument($this); | |||||
} | |||||
return $this; | |||||
} | |||||
public function removeOrderShop(OrderShop $orderShop): self | |||||
{ | |||||
if ($this->orderShops->contains($orderShop)) { | |||||
$this->orderShops->removeElement($orderShop); | |||||
$orderShop->removeDocument($this); | |||||
} | |||||
return $this; | |||||
} | |||||
} |
<?php | |||||
namespace Lc\ShopBundle\Model; | |||||
use Lc\ShopBundle\Model\OrderShop; | |||||
use Doctrine\Common\Collections\ArrayCollection; | |||||
use Doctrine\Common\Collections\Collection; | |||||
use Doctrine\ORM\Mapping as ORM; | |||||
/** | |||||
* @ORM\MappedSuperclass() | |||||
*/ | |||||
abstract class DocumentDeliveryNote extends AbstractDocumentOrder | |||||
{ | |||||
/** | |||||
* @ORM\OneToMany(targetEntity="Lc\ShopBundle\Context\OrderShopInterface", mappedBy="documentDeliveryNote") | |||||
*/ | |||||
protected $orderShops; | |||||
public function __construct() | |||||
{ | |||||
$this->orderShops = new ArrayCollection(); | |||||
} | |||||
/** | |||||
* @return Collection|OrderShop[] | |||||
*/ | |||||
public function getOrderShops(): Collection | |||||
{ | |||||
return $this->orderShops; | |||||
} | |||||
public function addOrderShop(OrderShop $orderShop): self | |||||
{ | |||||
if (!$this->orderShops->contains($orderShop)) { | |||||
$this->orderShops[] = $orderShop; | |||||
$orderShop->setDocumentDeliveryNote($this); | |||||
} | |||||
return $this; | |||||
} | |||||
public function removeOrderShop(OrderShop $orderShop): self | |||||
{ | |||||
if ($this->orderShops->contains($orderShop)) { | |||||
$this->orderShops->removeElement($orderShop); | |||||
// set the owning side to null (unless already changed) | |||||
if ($orderShop->getDocumentDeliveryNote() === $this) { | |||||
$orderShop->setDocumentDeliveryNote(null); | |||||
} | |||||
} | |||||
return $this; | |||||
} | |||||
} |
<?php | |||||
namespace Lc\ShopBundle\Model; | |||||
use Lc\ShopBundle\Model\OrderShop; | |||||
use Doctrine\Common\Collections\ArrayCollection; | |||||
use Doctrine\Common\Collections\Collection; | |||||
use Doctrine\ORM\Mapping as ORM; | |||||
/** | |||||
* @ORM\MappedSuperclass() | |||||
*/ | |||||
abstract class DocumentInvoice extends AbstractDocumentOrder | |||||
{ | |||||
/** | |||||
* @ORM\OneToMany(targetEntity="Lc\ShopBundle\Context\OrderShopInterface", mappedBy="documentInvoice") | |||||
*/ | |||||
protected $orderShops; | |||||
public function __construct() | |||||
{ | |||||
$this->orderShops = new ArrayCollection(); | |||||
} | |||||
/** | |||||
* @return Collection|OrderShop[] | |||||
*/ | |||||
public function getOrderShops(): Collection | |||||
{ | |||||
return $this->orderShops; | |||||
} | |||||
public function addOrderShop(OrderShop $orderShop): self | |||||
{ | |||||
if (!$this->orderShops->contains($orderShop)) { | |||||
$this->orderShops[] = $orderShop; | |||||
$orderShop->setDocumentInvoice($this); | |||||
} | |||||
return $this; | |||||
} | |||||
public function removeOrderShop(OrderShop $orderShop): self | |||||
{ | |||||
if ($this->orderShops->contains($orderShop)) { | |||||
$this->orderShops->removeElement($orderShop); | |||||
// set the owning side to null (unless already changed) | |||||
if ($orderShop->getDocumentInvoice() === $this) { | |||||
$orderShop->setDocumentInvoice(null); | |||||
} | |||||
} | |||||
return $this; | |||||
} | |||||
} |
<?php | |||||
namespace Lc\ShopBundle\Model; | |||||
use App\Entity\OrderShop; | |||||
use Doctrine\Common\Collections\ArrayCollection; | |||||
use Doctrine\Common\Collections\Collection; | |||||
use Doctrine\ORM\Mapping as ORM; | |||||
/** | |||||
* @ORM\MappedSuperclass() | |||||
*/ | |||||
abstract class DocumentQuotation extends AbstractDocumentOrder | |||||
{ | |||||
/** | |||||
* @ORM\Column(type="integer", nullable=true) | |||||
*/ | |||||
protected $duration; | |||||
/** | |||||
* @ORM\OneToMany(targetEntity="Lc\ShopBundle\Context\OrderShopInterface", mappedBy="documentQuotation") | |||||
*/ | |||||
protected $orderShops; | |||||
public function __construct() | |||||
{ | |||||
$this->orderShops = new ArrayCollection(); | |||||
} | |||||
public function getDuration(): ?int | |||||
{ | |||||
return $this->duration; | |||||
} | |||||
public function setDuration(?int $duration): self | |||||
{ | |||||
$this->duration = $duration; | |||||
return $this; | |||||
} | |||||
/** | |||||
* @return Collection|OrderShop[] | |||||
*/ | |||||
public function getOrderShops(): Collection | |||||
{ | |||||
return $this->orderShops; | |||||
} | |||||
public function addOrderShop(OrderShop $orderShop): self | |||||
{ | |||||
if (!$this->orderShops->contains($orderShop)) { | |||||
$this->orderShops[] = $orderShop; | |||||
$orderShop->setDocumentQuotation($this); | |||||
} | |||||
return $this; | |||||
} | |||||
public function removeOrderShop(OrderShop $orderShop): self | |||||
{ | |||||
if ($this->orderShops->contains($orderShop)) { | |||||
$this->orderShops->removeElement($orderShop); | |||||
// set the owning side to null (unless already changed) | |||||
if ($orderShop->getDocumentQuotation() === $this) { | |||||
$orderShop->setDocumentQuotation(null); | |||||
} | |||||
} | |||||
return $this; | |||||
} | |||||
} |
namespace Lc\ShopBundle\Model; | namespace Lc\ShopBundle\Model; | ||||
use App\Entity\Visitor; | |||||
use Doctrine\Common\Collections\ArrayCollection; | use Doctrine\Common\Collections\ArrayCollection; | ||||
use Doctrine\Common\Collections\Collection; | use Doctrine\Common\Collections\Collection; | ||||
use Doctrine\ORM\Mapping as ORM; | use Doctrine\ORM\Mapping as ORM; | ||||
use Lc\ShopBundle\Context\DocumentInterface; | |||||
use Lc\ShopBundle\Context\FilterMerchantInterface; | use Lc\ShopBundle\Context\FilterMerchantInterface; | ||||
/** | /** | ||||
*/ | */ | ||||
abstract class OrderShop extends AbstractEntity implements FilterMerchantInterface | abstract class OrderShop extends AbstractEntity implements FilterMerchantInterface | ||||
{ | { | ||||
/** | /** | ||||
* @ORM\ManyToOne(targetEntity="Lc\ShopBundle\Context\MerchantInterface", inversedBy="productFamilies") | * @ORM\ManyToOne(targetEntity="Lc\ShopBundle\Context\MerchantInterface", inversedBy="productFamilies") | ||||
* @ORM\JoinColumn(nullable=false) | * @ORM\JoinColumn(nullable=false) | ||||
*/ | */ | ||||
protected $creditHistories; | protected $creditHistories; | ||||
/** | |||||
* @ORM\ManyToOne(targetEntity="Lc\ShopBundle\Context\DocumentInvoiceInterface", inversedBy="orderShops") | |||||
*/ | |||||
protected $documentInvoice; | |||||
/** | |||||
* @ORM\ManyToOne(targetEntity="Lc\ShopBundle\Context\DocumentQuotationInterface", inversedBy="orderShops") | |||||
*/ | |||||
protected $documentQuotation; | |||||
/** | |||||
* @ORM\ManyToOne(targetEntity="Lc\ShopBundle\Context\DocumentDeliveryNoteInterface", inversedBy="orderShops") | |||||
*/ | |||||
protected $documentDeliveryNote; | |||||
/** | /** | ||||
* @ORM\Column(type="text", nullable=true) | * @ORM\Column(type="text", nullable=true) | ||||
*/ | */ | ||||
*/ | */ | ||||
protected $orderReductionCredits; | protected $orderReductionCredits; | ||||
/** | |||||
* @ORM\ManyToMany(targetEntity="Lc\ShopBundle\Context\DocumentInterface", inversedBy="orderShops") | |||||
*/ | |||||
protected $documents; | |||||
public function __construct() | public function __construct() | ||||
{ | { | ||||
$this->orderStatusHistories = new ArrayCollection(); | $this->orderStatusHistories = new ArrayCollection(); | ||||
$this->creditHistories = new ArrayCollection(); | $this->creditHistories = new ArrayCollection(); | ||||
$this->orderReductionCarts = new ArrayCollection(); | $this->orderReductionCarts = new ArrayCollection(); | ||||
$this->orderReductionCredits = new ArrayCollection(); | $this->orderReductionCredits = new ArrayCollection(); | ||||
$this->documents = new ArrayCollection(); | |||||
} | } | ||||
public function getDateCreated() | public function getDateCreated() | ||||
return $this; | return $this; | ||||
} | } | ||||
public function getDocumentInvoice(): ?DocumentInvoice | |||||
{ | |||||
return $this->documentInvoice; | |||||
} | |||||
public function setDocumentInvoice(?DocumentInvoice $documentInvoice): self | |||||
{ | |||||
$this->documentInvoice = $documentInvoice; | |||||
return $this; | |||||
} | |||||
public function getDocumentQuotation(): ?DocumentQuotation | |||||
{ | |||||
return $this->documentQuotation; | |||||
} | |||||
public function setDocumentQuotation(?DocumentQuotation $documentQuotation): self | |||||
{ | |||||
$this->documentQuotation = $documentQuotation; | |||||
return $this; | |||||
} | |||||
public function getDocumentDeliveryNote(): ?DocumentDeliveryNote | |||||
{ | |||||
return $this->documentDeliveryNote; | |||||
} | |||||
public function setDocumentDeliveryNote(?DocumentDeliveryNote $documentDeliveryNote): self | |||||
{ | |||||
$this->documentDeliveryNote = $documentDeliveryNote; | |||||
return $this; | |||||
} | |||||
public function getVisitor(): ?Visitor | public function getVisitor(): ?Visitor | ||||
{ | { | ||||
return $this->visitor; | return $this->visitor; | ||||
return $this; | return $this; | ||||
} | } | ||||
/** | |||||
* @return Collection|Document[] | |||||
*/ | |||||
public function getDocuments(): Collection | |||||
{ | |||||
return $this->documents; | |||||
} | |||||
public function addDocument(Document $document): self | |||||
{ | |||||
if (!$this->documents->contains($document)) { | |||||
$this->documents[] = $document; | |||||
} | |||||
return $this; | |||||
} | |||||
public function removeDocument(Document $document): self | |||||
{ | |||||
if ($this->documents->contains($document)) { | |||||
$this->documents->removeElement($document); | |||||
} | |||||
return $this; | |||||
} | |||||
} | } |
<?php | |||||
namespace Lc\ShopBundle\Repository; | |||||
use Lc\ShopBundle\Context\DefaultRepositoryInterface; | |||||
use Lc\ShopBundle\Context\DocumentDeliveryNoteInterface; | |||||
/** | |||||
* @method DocumentDeliveryNoteInterface|null find($id, $lockMode = null, $lockVersion = null) | |||||
* @method DocumentDeliveryNoteInterface|null findOneBy(array $criteria, array $orderBy = null) | |||||
* @method DocumentDeliveryNoteInterface[] findAll() | |||||
* @method DocumentDeliveryNoteInterface[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) | |||||
*/ | |||||
class DocumentDeliveryNoteRepository extends BaseRepository implements DefaultRepositoryInterface | |||||
{ | |||||
public function getInterfaceClass() | |||||
{ | |||||
return DocumentDeliveryNoteInterface::class; | |||||
} | |||||
} |
<?php | |||||
namespace Lc\ShopBundle\Repository; | |||||
use App\Entity\DocumentInvoice; | |||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; | |||||
use Doctrine\Common\Persistence\ManagerRegistry; | |||||
use Lc\ShopBundle\Context\DefaultRepositoryInterface; | |||||
use Lc\ShopBundle\Context\DocumentInvoiceInterface; | |||||
/** | |||||
* @method DocumentInvoice|null find($id, $lockMode = null, $lockVersion = null) | |||||
* @method DocumentInvoice|null findOneBy(array $criteria, array $orderBy = null) | |||||
* @method DocumentInvoice[] findAll() | |||||
* @method DocumentInvoice[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) | |||||
*/ | |||||
class DocumentInvoiceRepository extends BaseRepository implements DefaultRepositoryInterface | |||||
{ | |||||
public function getInterfaceClass() | |||||
{ | |||||
return DocumentInvoiceInterface::class; | |||||
} | |||||
} |
<?php | |||||
namespace Lc\ShopBundle\Repository; | |||||
use App\Entity\DocumentQuotation; | |||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; | |||||
use Doctrine\Common\Persistence\ManagerRegistry; | |||||
use Lc\ShopBundle\Context\DefaultRepositoryInterface; | |||||
use Lc\ShopBundle\Context\DocumentQuotationInterface; | |||||
/** | |||||
* @method DocumentQuotation|null find($id, $lockMode = null, $lockVersion = null) | |||||
* @method DocumentQuotation|null findOneBy(array $criteria, array $orderBy = null) | |||||
* @method DocumentQuotation[] findAll() | |||||
* @method DocumentQuotation[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) | |||||
*/ | |||||
class DocumentQuotationRepository extends BaseRepository implements DefaultRepositoryInterface | |||||
{ | |||||
public function getInterfaceClass() | |||||
{ | |||||
return DocumentQuotationInterface::class; | |||||
} | |||||
} |
<?php | |||||
namespace Lc\ShopBundle\Repository; | |||||
use App\Entity\DocumentQuotation; | |||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; | |||||
use Doctrine\Common\Persistence\ManagerRegistry; | |||||
use Lc\ShopBundle\Context\DefaultRepositoryInterface; | |||||
use Lc\ShopBundle\Context\DocumentInterface; | |||||
/** | |||||
* @method Document|null find($id, $lockMode = null, $lockVersion = null) | |||||
* @method Document|null findOneBy(array $criteria, array $orderBy = null) | |||||
* @method Document[] findAll() | |||||
* @method Document[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) | |||||
*/ | |||||
class DocumentRepository extends BaseRepository implements DefaultRepositoryInterface | |||||
{ | |||||
public function getInterfaceClass() | |||||
{ | |||||
return DocumentInterface::class; | |||||
} | |||||
} |
use App\Entity\OrderProductReductionCatalog; | use App\Entity\OrderProductReductionCatalog; | ||||
use App\Entity\OrderShop; | use App\Entity\OrderShop; | ||||
use Doctrine\ORM\EntityManagerInterface; | use Doctrine\ORM\EntityManagerInterface; | ||||
use Lc\ShopBundle\Context\DocumentInterface; | |||||
use Lc\ShopBundle\Context\MerchantUtilsInterface; | use Lc\ShopBundle\Context\MerchantUtilsInterface; | ||||
use Lc\ShopBundle\Context\OrderReductionCartInterface; | use Lc\ShopBundle\Context\OrderReductionCartInterface; | ||||
use Lc\ShopBundle\Context\OrderProductInterface; | use Lc\ShopBundle\Context\OrderProductInterface; | ||||
use Lc\ShopBundle\Context\ReductionCartInterface; | use Lc\ShopBundle\Context\ReductionCartInterface; | ||||
use Lc\ShopBundle\Context\ReductionCreditInterface; | use Lc\ShopBundle\Context\ReductionCreditInterface; | ||||
use Lc\ShopBundle\Context\UserInterface; | use Lc\ShopBundle\Context\UserInterface; | ||||
use Lc\ShopBundle\Model\Document; | |||||
use Symfony\Component\HttpFoundation\Session\SessionInterface; | use Symfony\Component\HttpFoundation\Session\SessionInterface; | ||||
use Symfony\Component\Security\Core\Security; | use Symfony\Component\Security\Core\Security; | ||||
} | } | ||||
}*/ | }*/ | ||||
public function mergeOrderShops($orderShop1, $orderShop2) | public function mergeOrderShops($orderShop1, $orderShop2) | ||||
{ | { | ||||
if ($orderShop1 && $orderShop2) { | if ($orderShop1 && $orderShop2) { | ||||
return $orderShop1; | return $orderShop1; | ||||
} | } | ||||
} | } | ||||
public function createDocumentInvoice(OrderShopInterface $orderShop) | |||||
{ | |||||
$documentClass = $this->em->getClassMetadata(DocumentInterface::class)->getName(); | |||||
$invoice = new $documentClass ; | |||||
$merchantAddress = $orderShop->getMerchant()->getAddress() ; | |||||
$buyerAddress = $orderShop->getBillingAddress() ; | |||||
$invoice->addOrderShop($orderShop) ; | |||||
$invoice->setType(Document::TYPE_INVOICE) ; | |||||
$invoice->setTitle('Test facture') ; | |||||
$invoice->setStatus(1) ; | |||||
$invoice->setReference('0001') ; | |||||
$invoice->setMerchantAddress($merchantAddress) ; | |||||
$invoice->setBuyerAddress($buyerAddress) ; | |||||
$invoice->setMerchantAddressText($merchantAddress->getSummary()) ; | |||||
$invoice->setBuyerAddressText($buyerAddress->getSummary()) ; | |||||
$invoice->setCreatedBy($orderShop->getUser()) ; | |||||
$invoice->setUpdatedBy($orderShop->getUser()) ; | |||||
$this->em->persist($invoice); | |||||
$this->em->flush() ; | |||||
return $invoice ; | |||||
} | |||||
} | } |