src/AppBundle/Entity/Carrito.php line 14

  1. <?php
  2. namespace AppBundle\Entity;
  3. use Doctrine\ORM\Mapping as ORM;
  4. /**
  5.  * Carrito.
  6.  *
  7.  * @ORM\Table(name="carrito_cabecera")
  8.  * @ORM\Entity(repositoryClass="AppBundle\Repository\CarritoRepository")
  9.  * @ORM\HasLifecycleCallbacks()
  10.  */
  11. class Carrito
  12. {
  13.     const PEDIDO_BLOQUEADO 'PB';
  14.     const PEDIDO_BLOQUEADO_SUBTITULO '¡Casi listo!';
  15.     const PEDIDO_GENERADO_OK '00';
  16.     const CARRITO_OSTATUS_EN_TRATAMIENTO '80';
  17.     const ID_BOTON_PACK1 'PK1';
  18.     const ID_BOTON_PACK2 'PK2';
  19.     const ID_BOTON_UNIDAD 'ST';
  20.     
  21.     const TIPO_DOCUMENTO_OFERTA_ESPECIAL 'ZOSP';
  22.     const TIPO_DOCUMENTO_PEDIDO_MOSTRADOR 'ZPMO';
  23.     
  24.     /**
  25.      * @ORM\Id 
  26.      * @ORM\Column(type="integer")
  27.      * @ORM\GeneratedValue
  28.      */
  29.     private $id;
  30.     /**
  31.      * @var string
  32.      */
  33.     private $notaInterna;
  34.     /**
  35.      * @var string
  36.      */
  37.     private $textoSeg;
  38.     /**
  39.      * @var string|Empresa
  40.      *
  41.      * @ORM\ManyToOne(targetEntity="Empresa")
  42.      * @ORM\JoinColumn(name="cliente",referencedColumnName="id")
  43.      */
  44.     private $cliente;
  45.     /**
  46.      * @var string
  47.      *
  48.      * @ORM\ManyToOne(targetEntity="Usuario")
  49.      * @ORM\JoinColumn(name="usuario",referencedColumnName="id")
  50.      */
  51.     private $usuario;
  52.     /**
  53.      * @var string
  54.      *
  55.      * @ORM\Column(name="nro_oferta_pedido", type="string", length=10)
  56.      */
  57.     private $nroOfertaPedido;
  58.     /**
  59.      * @var string
  60.      *
  61.      * @ORM\Column(name="moneda", type="string", length=5)
  62.      */
  63.     private $moneda;
  64.     /**
  65.      * @var string
  66.      *
  67.      * @ORM\Column(name="precio_embalaje", type="float")
  68.      */
  69.     private $precioEmbalaje;
  70.     /**
  71.      * @var string
  72.      *
  73.      * @ORM\Column(name="precio_flete", type="float")
  74.      */
  75.     private $precioFlete;
  76.     /**
  77.      * @var string
  78.      *
  79.      * @ORM\Column(name="precio_corte", type="float")
  80.      */
  81.     private $precioCorte;
  82.     /**
  83.      * @var string
  84.      *
  85.      * @ORM\Column(name="precio_dct_bonif", type="float")
  86.      */
  87.     private $precioDctBonif;
  88.     /**
  89.      * @var string
  90.      *
  91.      * @ORM\Column(name="estado", type="string", length=1)
  92.      */
  93.     private $estado;
  94.     /**
  95.      * @var string
  96.      *
  97.      * @ORM\Column(name="oStatus", type="string", length=2, nullable=true)
  98.      */
  99.     private $oStatus;
  100.     /**
  101.      * @var string
  102.      *
  103.      * @ORM\Column(name="o_status_desc", type="string", length=150, nullable=true)
  104.      */
  105.     private $oStatusDesc;
  106.     /**
  107.      * @var string
  108.      *
  109.      * @ORM\Column(name="fecha_fin_reserva_stock", type="datetime")
  110.      */
  111.     private $fechaFinReservaStock;
  112.     /**
  113.      * @var string
  114.      *
  115.      * @ORM\Column(name="flete", type="string", length=1)
  116.      */
  117.     private $flete;
  118.     /**
  119.      * @var string
  120.      *
  121.      * @ORM\Column(name="cobra_embalaje", type="string", length=1)
  122.      */
  123.     private $cobraEmbalaje;
  124.     /**
  125.      * @var string
  126.      *
  127.      * @ORM\Column(name="embalaje_opt", type="string", length=1)
  128.      */
  129.     private $embalajeOpt;
  130.     /**
  131.      * @var string
  132.      *
  133.      * @ORM\Column(name="pedido_mostrador_activo", type="string", length=5)
  134.      */
  135.     private $pedidoMostradorActivo;
  136.     /**
  137.      * @var string
  138.      *
  139.      * @ORM\Column(name="texto_de_cabecera", type="text")
  140.      */
  141.     private $textoDeCabecera;
  142.     /**
  143.      * @ORM\ManyToOne(targetEntity="Sucursal", inversedBy="carritos")
  144.      * @ORM\JoinColumn(name="sucursal_id", referencedColumnName="id")
  145.      */
  146.     private $centro;
  147.     /**
  148.      * @var string
  149.      *
  150.      * @ORM\Column(name="nro_pedido_cliente", type="string", length=35)
  151.      */
  152.     private $nroPedidoCliente;
  153.     /**
  154.      * @var string
  155.      *
  156.      * @ORM\Column(name="condicion_pago", type="string", length=35)
  157.      */
  158.     private $condicionDePago;
  159.     
  160.     private $condicionDePagoDescripcion;
  161.     /**
  162.      * @var float
  163.      *
  164.      * @ORM\Column(name="importe_impuestos", type="float")
  165.      */
  166.     private $importeImpuestos 0.0;
  167.     /**
  168.      * @var float
  169.      */
  170.     private $importeImpuestosArg 0.0;
  171.     /**
  172.      * @var string
  173.      *
  174.      * @ORM\Column(name="impuestos_json", type="text", nullable=true)
  175.      */
  176.     private $impuestosJson;
  177.     /**
  178.      * @var string
  179.      */
  180.     private $impuestosArgJson;
  181.     /**
  182.      * @var float
  183.      *
  184.      * @ORM\Column(name="descuento_volumen", type="float")
  185.      */
  186.     private $descuentoVolumen 0.0;
  187.     /**
  188.      * @var string
  189.      *
  190.      * @ORM\Column(name="tipo_documento", type="string", length=6)
  191.      */
  192.     private $tipoDocumento;
  193.     /**
  194.      * @var string
  195.      *     
  196.      */
  197.     private $tipoDocumentoProximo;
  198.     private $condicionDePagoDesdeDocumento;
  199.     private $baseDescuentoCP;
  200.     /**
  201.      * @var string
  202.      */
  203.     private $esOfertaNoModificable;
  204.     
  205.     private $items;    
  206.     private $precioDecidir;
  207.     private $tipoDocumentoPedidoMostrador;
  208.     private $tipoDocumentoOfertaEspecial;
  209.     private $flagCobroDeFlete;
  210.     private $visEmbalaje;
  211.     private $DocPreManual;
  212.     private $cupon;
  213.     public function getId()
  214.     {
  215.         return $this->id;
  216.     }
  217.     public function setId($id)
  218.     {
  219.         $this->id $id;
  220.         return $this;
  221.     }
  222.     public function getCliente()
  223.     {
  224.         return $this->cliente;
  225.     }
  226.     public function setCliente($cliente)
  227.     {
  228.         $this->cliente $cliente;
  229.         return $this;
  230.     }
  231.     public function getUsuario()
  232.     {
  233.         return $this->usuario;
  234.     }
  235.     public function setUsuario($usuario)
  236.     {
  237.         $this->usuario $usuario;
  238.         return $this;
  239.     }
  240.     public function getNroOfertaPedido()
  241.     {
  242.         return $this->nroOfertaPedido;
  243.     }
  244.     public function setNroOfertaPedido($nroOfertaPedido)
  245.     {
  246.         $this->nroOfertaPedido $nroOfertaPedido;
  247.         return $this;
  248.     }
  249.     public function getMoneda()
  250.     {
  251.         return $this->moneda;
  252.     }
  253.     public function setMoneda($moneda)
  254.     {
  255.         $this->moneda $moneda;
  256.     }
  257.     public function getPrecioEmbalaje()
  258.     {
  259.         return $this->precioEmbalaje;
  260.     }
  261.     public function setPrecioEmbalaje($precioEmbalaje)
  262.     {
  263.         $this->precioEmbalaje $precioEmbalaje;
  264.         return $this;
  265.     }
  266.     public function getPrecioFlete()
  267.     {
  268.         return $this->precioFlete;
  269.     }
  270.     public function setPrecioFlete($precioFlete)
  271.     {
  272.         $this->precioFlete $precioFlete;
  273.         return $this;
  274.     }
  275.     public function getPrecioCorte()
  276.     {
  277.         return $this->precioCorte;
  278.     }
  279.     public function setPrecioCorte($precioCorte)
  280.     {
  281.         $this->precioCorte $precioCorte;
  282.         return $this;
  283.     }
  284.     public function getPrecioDctBonif()
  285.     {
  286.         return $this->precioDctBonif;
  287.     }
  288.     public function setPrecioDctBonif($precioDctBonif)
  289.     {
  290.         $this->precioDctBonif $precioDctBonif;
  291.         return $this;
  292.     }
  293.     public function getEstado()
  294.     {
  295.         return $this->estado;
  296.     }
  297.     public function setEstado($estado)
  298.     {
  299.         $this->estado $estado;
  300.         return $this;
  301.     }
  302.     public function getOStatus()
  303.     {
  304.         return $this->oStatus;
  305.     }
  306.     public function setOStatus($oStatus)
  307.     {
  308.         $this->oStatus $oStatus;
  309.         return $this;
  310.     }
  311.     public function getOStatusDesc()
  312.     {
  313.         return $this->oStatusDesc;
  314.     }
  315.     public function setOStatusDesc($oStatusDesc)
  316.     {
  317.         $this->oStatusDesc $oStatusDesc;
  318.         return $this;
  319.     }
  320.     public function getFlete()
  321.     {
  322.         return $this->flete;
  323.     }
  324.     public function setFlete($flete)
  325.     {
  326.         $this->flete boolval($flete);
  327.     }
  328.     public function getTextoDeCabecera()
  329.     {
  330.         return $this->textoDeCabecera;
  331.     }
  332.     public function setTextoDeCabecera($textoDeCabecera)
  333.     {
  334.         $this->textoDeCabecera $textoDeCabecera;
  335.         return $this;
  336.     }
  337.     public function getImporteImpuestos()
  338.     {
  339.         return $this->importeImpuestos;
  340.     }
  341.     public function setImporteImpuestos($importeImpuestos)
  342.     {
  343.         $this->importeImpuestos $importeImpuestos;
  344.         return $this;
  345.     }
  346.     public function getImporteImpuestosArg()
  347.     {
  348.         return $this->importeImpuestosArg;
  349.     }
  350.     public function setImporteImpuestosArg($importeImpuestosArg)
  351.     {
  352.         $this->importeImpuestosArg $importeImpuestosArg;
  353.         return $this;
  354.     }
  355.     public function getCentro()
  356.     {
  357.         return $this->centro;
  358.     }
  359.     public function setCentro($centro)
  360.     {
  361.         $this->centro $centro;
  362.         return $this;
  363.     }
  364.     public function getItems()
  365.     {        
  366.         return $this->items;
  367.     }
  368.     public function setItems($items)
  369.     {
  370.         $this->items $items;
  371.         return $this;
  372.     }
  373.     /**
  374.      * Constructor.
  375.      */
  376.     public function __construct($tipoDocumentoPedidoMostrador$tipoDocumentoOfertaEspecial)
  377.     {
  378.         $this->items = new \Doctrine\Common\Collections\ArrayCollection();
  379.         $this->sucursales = new \Doctrine\Common\Collections\ArrayCollection();
  380.         $this->tipoDocumentoPedidoMostrador $tipoDocumentoPedidoMostrador;
  381.         $this->tipoDocumentoOfertaEspecial $tipoDocumentoOfertaEspecial;
  382.     }
  383.     /**
  384.      * Add item.
  385.      *
  386.      * @param \AppBundle\Entity\ItemCarrito $item
  387.      *
  388.      * @return Carrito
  389.      */
  390.     public function addItem(\AppBundle\Entity\ItemCarrito $item)
  391.     {
  392.         $this->items[] = $item;
  393.         return $this;
  394.     }
  395.     /**
  396.      * Remove item.
  397.      *
  398.      * @param \AppBundle\Entity\ItemCarrito $item
  399.      */
  400.     public function removeItem(\AppBundle\Entity\ItemCarrito $item)
  401.     {
  402.         $this->items->removeElement($item);
  403.     }
  404.     /**
  405.      * Set fechaFinReservaStock.
  406.      *
  407.      * @param \DateTime $fechaFinReservaStock
  408.      *
  409.      * @return Carrito
  410.      */
  411.     public function setFechaFinReservaStock($fechaFinReservaStock)
  412.     {
  413.         $this->fechaFinReservaStock $fechaFinReservaStock;
  414.         return $this;
  415.     }
  416.     /**
  417.      * Set fechaFinReservaStock.
  418.      *
  419.      * @param \DateTime $fechaFinReservaStock
  420.      *
  421.      * @return Carrito
  422.      */
  423.     public function setTiempoFechaFinReservaStock($timer)
  424.     {
  425.         $fecha date('Y-m-d H:i:s');
  426.         $timestampFinReservaStock strtotime('+15 minute'strtotime($fecha));
  427.         $fechaFinReservaStock = new \DateTime();
  428.         $fechaFinReservaStock->setTimestamp($timestampFinReservaStock);
  429.         $this->fechaFinReservaStock $fechaFinReservaStock;
  430.         return $this;
  431.     }
  432.     /**
  433.      * Get fechaFinReservaStock.
  434.      *
  435.      * @return \DateTime
  436.      */
  437.     public function getFechaFinReservaStock()
  438.     {
  439.         return $this->fechaFinReservaStock;
  440.     }
  441.     /**
  442.      * Get cantidad de items en carrito sin alternativas y splits.
  443.      *
  444.      * @return \Int
  445.      */
  446.     public function cantMateriales()
  447.     {
  448.         $cantItems $i 0;
  449.         foreach ($this->items as $item) {
  450.             if(!$item->esSplitOAlt()){
  451.                 $cantItems++;
  452.             }
  453.             $i++;
  454.         }
  455.         return $cantItems;
  456.     }
  457.     /**
  458.      * Get items de carrito sin alternativas.
  459.      *
  460.      * @return array \ItemCarrito
  461.      */
  462.     public function getItemsSinAlt()
  463.     {
  464.         $items = [];
  465.         foreach ($this->items as $item) {
  466.             if(!$item->esAlt()){
  467.                 $items[] = $item;
  468.             }
  469.         }
  470.         return $items;
  471.     }
  472.     /**
  473.      * Get items de carrito por centro
  474.      *
  475.      * @return array \ItemCarrito
  476.      */
  477.     public function getItemsPorCentro($idCentro)
  478.     {
  479.         $items = [];
  480.         foreach ($this->items as $item) {
  481.             if(!$item->esSplitOAlt() && $item->getCentro()->getId() == $idCentro){
  482.                 $items[] = $item;
  483.             }
  484.         }
  485.         return $items;
  486.     }
  487.     /**
  488.      * Get items de carrito sin split ni alternativas
  489.      *
  490.      * @return array \ItemCarrito
  491.      */
  492.     public function getItemsOrganico()
  493.     {
  494.         $items = [];
  495.         foreach ($this->items as $item) {
  496.             if(!$item->esSplitOAlt()){
  497.                 $items[] = $item;
  498.             }
  499.         }
  500.         return $items;
  501.     }
  502.     /**
  503.      * Get items de carrito por centro
  504.      *
  505.      * @return array \ItemCarrito
  506.      */
  507.     public function getPosicionesPorCentroSinAlt($idCentro)
  508.     {
  509.         $items = [];
  510.         foreach ($this->items as $item) {
  511.             if(!$item->esAlt() && $item->getCentro()->getId() == $idCentro){
  512.                 $items[] = $item;
  513.             }
  514.         }
  515.         return $items;
  516.     }
  517.     /**
  518.      * Get cant items de carrito por centro
  519.      *
  520.      * @return array \ItemCarrito
  521.      */
  522.     public function cantItemsPorCentro($idCentro)
  523.     {
  524.         $items =  $this->getItemsPorCentro($idCentro);
  525.         return count($items);
  526.     }
  527.     public function reservado()
  528.     {
  529.         $ahora = new \DateTime('now');
  530.         return $ahora->getTimestamp() < $this->fechaFinReservaStock->getTimestamp();
  531.     }
  532.     public function centrosConEnvioADomicilioCount()
  533.     {
  534.         $centros = array();
  535.         foreach ($this->items as $item) {
  536.             if (($item->getCentro()->getId() == Sucursal::CASA_CENTRAL || $item->getCentro()->getId() == Sucursal::SUCURSAL_ROSARIO) && !in_array($item->getCentro()->getId(), $centros)) {
  537.                 $centros[] = $item->getCentro()->getId();
  538.             }
  539.         }
  540.         return count($centros);
  541.     }
  542.     public function centrosCount()
  543.     {
  544.         $centros $this->getSucursales();
  545.         return count($centros);
  546.     }
  547.     public function getSucursales()
  548.     {
  549.         $sucursales = array();
  550.         foreach ($this->items as $item) {            
  551.             if(!isset($sucursales[$item->getCentro()->getId()]) && !$item->esAlt()){
  552.                 $sucursales[$item->getCentro()->getId()] = $item->getCentro();
  553.             }
  554.         }
  555.         return array_values($sucursales);
  556.     }
  557.     public function getFechaStockMaximaParaCentro($centro)
  558.     {
  559.         return $this->getFechaStockMaxima($this->getItemsSinAlt(), $centro);        
  560.     }
  561.     public function getFechaStockMinimaParaCentro($centro)
  562.     {        
  563.         return $this->getFechaStockMinima($this->getItemsSinAlt(), $centro);
  564.     }    
  565.     public function getSubtotal()
  566.     {
  567.         $subtotal 0.0;
  568.         foreach ($this->items as $item) {
  569.             if(!$item->esAlt()){
  570.                 $subtotal += floatval($item->getPrecioTotalSinDcto());
  571.             }
  572.         }
  573.         return $subtotal;
  574.     }
  575.     public function getTotalConImpuestos()
  576.     {
  577.         $subtotal $this->getSubtotal();
  578.         $cortes floatval($this->getPrecioCorte());
  579.         $impuestos floatval($this->getImporteImpuestos());
  580.         $embalaje floatval($this->getPrecioEmbalaje());
  581.         $bonificaciones floatval($this->getPrecioDctBonif());
  582.         $envio floatval($this->getPrecioFlete());
  583.         $total $subtotal $impuestos $cortes $embalaje $bonificaciones $envio;
  584.         return $total;
  585.     }
  586.     /**
  587.      * Set nroPedidoCliente.
  588.      *
  589.      * @param string $nroPedidoCliente
  590.      *
  591.      * @return Carrito
  592.      */
  593.     public function setNroPedidoCliente($nroPedidoCliente)
  594.     {
  595.         $this->nroPedidoCliente $nroPedidoCliente;
  596.         return $this;
  597.     }
  598.     /**
  599.      * Get nroPedidoCliente.
  600.      *
  601.      * @return string
  602.      */
  603.     public function getNroPedidoCliente()
  604.     {
  605.         return $this->nroPedidoCliente;
  606.     }
  607.     public function getCondicionDePago()
  608.     {
  609.         return $this->condicionDePago;
  610.     }    
  611.     public function setCondicionDePago($condicionpago)
  612.     {
  613.         $this->condicionDePago $condicionpago;
  614.         return $this;
  615.     }
  616.     public function getCondicionDePagoDescripcion()
  617.     {
  618.         return $this->condicionDePagoDescripcion;
  619.     }
  620.     public function setCondicionDePagoDescripcion($condicionPagoDesc)
  621.     {
  622.         $this->condicionDePagoDescripcion $condicionPagoDesc;
  623.         return $this;
  624.     }
  625.     public function setCondicionDePagoDesdeDocumento($condicionDePagoDesdeDocumento)
  626.     {
  627.         $this->condicionDePagoDesdeDocumento $condicionDePagoDesdeDocumento;
  628.         return $this;
  629.     }
  630.     public function getCondicionDePagoDesdeDocumento(){
  631.         return $this->condicionDePagoDesdeDocumento;
  632.     }
  633.     public function getFechasSeteadasPorCentro($idCentro)
  634.     {
  635.         $fechasSeteadas = array();
  636.         foreach ($this->getItems() as $item) {            
  637.             if (
  638.                 !in_array($item->getFechaEntregaIso(), $fechasSeteadas
  639.                 && $item->getCentro()->getId() == $idCentro
  640.                 && $item->getFechaEntregaIso() != ''
  641.             ) {
  642.                 $fechasSeteadas[] = $item->getFechaEntregaIso();
  643.             }
  644.         }
  645.         
  646.         // devolvia las fechas al revez si se refrescaba la pagina//
  647.         if (!empty($fechasSeteadas)) {
  648.             if (!empty($fechasSeteadas[0]) && !empty($fechasSeteadas[1])) {
  649.                 if ($fechasSeteadas[0] > $fechasSeteadas[1]) {
  650.                     $temp $fechasSeteadas[0];
  651.                     $fechasSeteadas[0] = $fechasSeteadas[1];
  652.                     $fechasSeteadas[1] = $temp;
  653.                 }
  654.             }
  655.         } 
  656.         
  657.         // -------------------------------------------------------//
  658.         return $fechasSeteadas;
  659.     }    
  660.     public function tieneFechasEntregaSeteadas()
  661.     {
  662.         foreach ($this->getItems() as $item) { 
  663.             if (!$item->esAlt() && $item->getFechaEntregaIso() != '') {
  664.                 return true;
  665.             }
  666.         }
  667.         return false;
  668.     }    
  669.     public function tieneFechasEntregaSeteadasPorCentro($idCentro)
  670.     {
  671.         foreach ($this->getItems() as $item) { 
  672.             if (!$item->esAlt() && $item->getFechaEntregaIso() != '' && $item->getCentro()->getId() == $idCentro) {
  673.                 return true;
  674.             }
  675.         }
  676.         return false;
  677.     } 
  678.     
  679.     public function getCantidadFacturacionDeItem($itemCodigo$idBoton)
  680.     {
  681.         $cantFact 0.0;
  682.         foreach ($this->items as $item) {
  683.             if ($item->getProducto() != null && $item->getProducto()->getCodigo() == $itemCodigo && $item->getIdBoton() == $idBoton) {
  684.                 $cantFact += floatval($item->getCantidadFacturacion());
  685.             }
  686.         }
  687.         return $cantFact;
  688.     }
  689.     public function setImpuestosJson($impuestosJson)
  690.     {
  691.         $this->impuestosJson $impuestosJson;
  692.         return $this;
  693.     }
  694.     
  695.     public function setImpuestosArgJson($impuestosArgJson)
  696.     {
  697.         $this->impuestosArgJson $impuestosArgJson;
  698.         return $this;
  699.     }
  700.         /**
  701.      * Get dataMV.
  702.      *
  703.      * @return array
  704.      */
  705.     public function getImpuestosJson()
  706.     {
  707.         $impuestosJson json_decode($this->impuestosJsontrue);
  708.         if (is_array($impuestosJson)) {
  709.             $impuestos = [];
  710.             foreach ($impuestosJson as $key => $impuesto) {
  711.                 $impuestos[$key] = [
  712.                     'impuesto' => $impuesto['Impuesto'],
  713.                     'importe' => floatval($impuesto['Importe'])
  714.                 ];
  715.             }
  716.             return $impuestos;
  717.         }
  718.         return array();
  719.     }
  720.     /**
  721.      * Get dataMV.
  722.      *
  723.      * @return array
  724.      */
  725.     public function getImpuestosArgJson()
  726.     {
  727.         $impuestosArgJson json_decode($this->impuestosArgJsontrue);
  728.         if (is_array($impuestosArgJson)) {
  729.             $impuestos = [];
  730.             foreach ($impuestosArgJson as $key => $impuesto) {
  731.                 $impuestos[$key] = [
  732.                     'impuesto' => $impuesto['Impuesto'],
  733.                     'importe' => floatval($impuesto['Importe'])
  734.                 ];
  735.             }
  736.             return $impuestos;
  737.         }
  738.         return array();
  739.     }
  740.     public function getEmbalajeOpt()
  741.     {
  742.         return $this->embalajeOpt;
  743.     }
  744.     public function setEmbalajeOpt($embalajeOpt)
  745.     {
  746.         $this->embalajeOpt boolval($embalajeOpt);
  747.         return $this;
  748.     }
  749.     public function getDescuentoVolumen()
  750.     {
  751.         return $this->descuentoVolumen;
  752.     }
  753.     public function setDescuentoVolumen($descuentoVolumen)
  754.     {
  755.         $this->descuentoVolumen $descuentoVolumen;
  756.         return $this;
  757.     }
  758.     public function getCobraEmbalaje()
  759.     {
  760.         return $this->cobraEmbalaje;
  761.     }
  762.     public function setCobraEmbalaje($cobraEmbalaje)
  763.     {
  764.         $this->cobraEmbalaje boolval($cobraEmbalaje);
  765.         return $this;
  766.     }
  767.     /**
  768.      * Get item de carrito por posicion
  769.      * 
  770.      * @param $string $posicion
  771.      *
  772.      * @return array \ItemCarrito
  773.      */
  774.     public function getItemPorPosicion($posicion)
  775.     {
  776.         foreach ($this->items as $item) {
  777.             if($item->getPosicion() != $posicion){
  778.                 continue;
  779.             }
  780.             return $item;
  781.         }
  782.         return null;
  783.     }
  784.     
  785.     public function puedeEntregaInmediata(){                        
  786.         foreach ($this->items as $item) {            
  787.             if ($item->getFechaStockRender() != 'En Stock') {                
  788.                 return false;
  789.             } 
  790.         }
  791.         return true;
  792.     }    
  793.     /**
  794.      * Get items de carrito por centro
  795.      *
  796.      * @return array \ItemCarrito
  797.      */
  798.     public function getSubTotalCentro($idCentro)
  799.     {
  800.         $subtotal 0;
  801.         foreach ($this->items as $item) {                        
  802.             if(!$item->esAlt() && ($item->getCentro()->getId() == $idCentro ||
  803.             ($idCentro == Sucursal::CASA_CENTRAL && $item->getCentro()->getId() == Sucursal::SUCURSAL_FLORIDA) )
  804.             ){
  805.                 $subtotal += floatval($item->getPrecioTotalSinDcto());
  806.             }
  807.         }
  808.         return $subtotal;
  809.     }
  810.     /**
  811.      * Get subtotal y cantidad de items por centro
  812.      *
  813.      * @return array \ItemCarrito
  814.      */
  815.     public function getSubtotalParciales()
  816.     {
  817.         $subtotal   0;
  818.         $totalItems 0;
  819.         $centros = array();
  820.         foreach ($this->items as $item) {
  821.             if($item->esAlt())
  822.                 continue;
  823.             
  824.             if (empty($centros[$item->getCentro()->getId()]['totalItems']))
  825.                 $centros[$item->getCentro()->getId()]['totalItems'] = 0;
  826.             
  827.             if (empty($centros[$item->getCentro()->getId()]['subtotal']))
  828.                 $centros[$item->getCentro()->getId()]['subtotal'] = 0;
  829.             
  830.             $centros[$item->getCentro()->getId()]['sucursal'] = $item->getCentro()->getNombre();
  831.             if (!$item->esSplit()) { //En el resumen los splits no se cuentan como items
  832.                 $centros[$item->getCentro()->getId()]['totalItems']++;
  833.             }
  834.             $centros[$item->getCentro()->getId()]['subtotal'] += floatval($item->getPrecioTotalSinDcto());;
  835.         }
  836.         ksort($centros);
  837.         return $centros;
  838.     }
  839.     public function getTipoDocumento(){
  840.         return $this->tipoDocumento;
  841.     }
  842.     public function setTipoDocumento($tipoDocumento)
  843.     {
  844.         $this->tipoDocumento $tipoDocumento;
  845.         return $this;
  846.     }
  847.     public function getTipoDocumentoProximo(){
  848.         return $this->tipoDocumentoProximo;
  849.     }
  850.     public function setTipoDocumentoProximo($tipoDocumentoProximo)
  851.     {
  852.         $this->tipoDocumentoProximo $tipoDocumentoProximo;
  853.         return $this;
  854.     }
  855.     public function esPedidoMostrador(){                
  856.         return $this->tipoDocumentoProximo == $this->tipoDocumentoPedidoMostrador;
  857.     }
  858.     public function esOfertaEspecial() {
  859.         return $this->tipoDocumento  == $this->tipoDocumentoOfertaEspecial;
  860.     }
  861.     public function esOfertaPrecioManual () {
  862.         return $this->getDocPreManual() == 'X';
  863.     }
  864.     //todo la funcion debe indicar si el vendedor es mostrador para la sucursal ingresada
  865.     // hoy es indistinta la sucursal que tenga el parametro
  866.     public function esVendedorMostradorSucursal($sucursal ''){
  867.         return $this->pedidoMostradorActivo != $sucursal;
  868.     }
  869.     public function esVendedorMostradorSucursalCasaCentral(){
  870.         return $this->pedidoMostradorActivo == Sucursal::CASA_CENTRAL;
  871.     }
  872.     public function setPedidoMostradorActivo($pedidoMostradorActivo){
  873.         $this->pedidoMostradorActivo $pedidoMostradorActivo;
  874.         return $this;
  875.     }
  876.     public function admiteEntregasParciales(){
  877.         $centrosConItems $this->getSucursales();
  878.         $admiteEntregasParciales false;
  879.         if (
  880.             count($centrosConItems) == && 
  881.             count($this->getItems()) > && 
  882.             !$this->puedeEntregaInmediata() && 
  883.             count($this->getFechasStock()) > 1) {
  884.                 $admiteEntregasParciales true;
  885.         }             
  886.         return $admiteEntregasParciales;
  887.     }
  888.     public function pedidoMostradorHabilitado(){
  889.         $pMHabilitado $this->esVendedorMostradorSucursal();
  890.         if($pMHabilitado){
  891.             $centrosConItems $this->getSucursales();            
  892.             if (count($centrosConItems) > or !$this->puedeEntregaInmediata()) {
  893.                 $pMHabilitado false;                
  894.             }             
  895.         }
  896.         return $pMHabilitado;
  897.     }    
  898.     public function getDestinatarioPorCentro($idCentro){        
  899.         foreach ($this->items as $item) {
  900.             if(!$item->esAlt() && $item->getCentro()->getId() == $idCentro){
  901.                 return $item->getDestinatario();
  902.             }
  903.         }
  904.         return '';        
  905.     }    
  906.     public function getFechasStock()
  907.     {
  908.         $fechasStock = array();
  909.         foreach ($this->getItems() as $item) {            
  910.             if (
  911.                 !in_array($item->getFechaStockIso(), $fechasStock)                 
  912.                 && $item->getFechaStockIso() != ''
  913.             ) {
  914.                 $fechasStock[] = $item->getFechaStockIso();
  915.             }
  916.         }
  917.         return $fechasStock;
  918.     }    
  919.     private function getFechaStockMaxima($items$centro null){
  920.         $fechaMaxima null;
  921.         foreach ($items as $item) {
  922.             if ($item->getCentro()->getId() == $centro || is_null($centro)) {
  923.                 if ($item->getFechaStockIso() > $fechaMaxima || is_null($fechaMaxima)) {
  924.                     $fechaMaxima $item->getFechaStockIso();
  925.                 }
  926.             }
  927.         }        
  928.         return $fechaMaxima;
  929.     }
  930.     private function getFechaStockMinima($items$centro null){
  931.         $fechaMinima null;        
  932.         foreach ($items as $item) {
  933.             if ($item->getCentro()->getId() == $centro || is_null($centro)) {                
  934.                 if ($item->getFechaStockIso() < $fechaMinima || is_null($fechaMinima)) {
  935.                     $fechaMinima $item->getFechaStockIso();
  936.                 }
  937.             }
  938.         }        
  939.         return $fechaMinima;
  940.     }
  941.     public function tieneEntregasParciales(){
  942.         if(count($this->getSucursales()) > 1){
  943.             return false;
  944.         }
  945.         $fechasSeteadas = array();
  946.         foreach ($this->items as $item) {
  947.             if (
  948.                 !in_array($item->getFechaEntregaIso(), $fechasSeteadas)                 
  949.                 && $item->getFechaEntregaIso() != ''
  950.             ) {
  951.                 $fechasSeteadas[] = $item->getFechaEntregaIso();
  952.             }
  953.         }
  954.         
  955.         return count($fechasSeteadas) > 1;
  956.     }
  957.     /**
  958.      * Get items de carrito sin alternativas.
  959.      *
  960.      * @return array \ItemCarrito
  961.      */
  962.     public function getItemsConEntregaSeteada()
  963.     {
  964.         $items = [];
  965.         foreach ($this->items as $item) {            
  966.             if($item->tieneFechaEntregaSeteada()){
  967.                 $items[] = $item;
  968.             }
  969.         }
  970.         return $items;
  971.     }
  972.     public function tieneDestinatarioEnBA(){        
  973.         foreach ($this->items as $item) {
  974.             if(!$item->esAlt() && in_array($item->getCentro()->getId(), Sucursal::SUCURSALES_BSAS)){
  975.                 if($item->getDestinatario() != ''){
  976.                     return true;
  977.                 }                
  978.             }
  979.         }
  980.         return false;        
  981.     }
  982.     public function tieneReparto(){
  983.         foreach ($this->items as $item) {
  984.             if(!$item->esAlt()){
  985.                 if($item->getDestinatario() != ''){
  986.                     return true;
  987.                 }                
  988.             }
  989.         }
  990.         return false;        
  991.     }
  992.     public function getItemsPorGrupo($codigoGrupoMaterial)
  993.     {
  994.         $items = [];
  995.         
  996.         foreach ($this->getItems() as $item) {
  997.             if ($item->getGrupoMaterial() != $codigoGrupoMaterial) {
  998.                 continue;
  999.             }
  1000.             $items[] = $item;
  1001.         }
  1002.         return $items;
  1003.     }
  1004.     public function tieneItems()
  1005.     {
  1006.         return count($this->getItems()) > 0;
  1007.     }
  1008.     public function getEsOfertaNoModificable(){
  1009.         return $this->esOfertaNoModificable;
  1010.     }
  1011.     public function setEsOfertaNoModificable($esOfertaNoModificable)
  1012.     {
  1013.         $this->esOfertaNoModificable $esOfertaNoModificable;
  1014.         return $this;
  1015.     }
  1016.     public function tieneCondicionDePagoDesdeDocumento(){        
  1017.         return $this->condicionDePagoDesdeDocumento == 'X';
  1018.     }
  1019.     public function getNotaInterna()
  1020.     {
  1021.         return $this->notaInterna;
  1022.     }
  1023.     public function setNotaInterna($notaInterna)
  1024.     {
  1025.         $this->notaInterna $notaInterna;
  1026.         return $this;
  1027.     }
  1028.     public function getTextoSeg()
  1029.     {
  1030.         return $this->textoSeg;
  1031.     }
  1032.     public function setTextoSeg($textoSeg)
  1033.     {
  1034.         $this->textoSeg $textoSeg;
  1035.         return $this;
  1036.     }
  1037.     public function getBaseDescuentoCP()
  1038.     {
  1039.         return $this->baseDescuentoCP;
  1040.     }
  1041.     public function setBaseDescuentoCP($baseDescuentoCP)
  1042.     {
  1043.         $this->baseDescuentoCP $baseDescuentoCP;
  1044.         return $this;
  1045.     }
  1046.     public function getDestinatarios(){
  1047.         $destinatarios = [];
  1048.         foreach($this->getSucursales() as $centro){
  1049.             $idCentro $centro->getId();
  1050.             $destinatario $this->getDestinatarioPorCentro($idCentro);
  1051.             if(!empty($destinatario)){
  1052.                 $destinatarios[] = $destinatario;
  1053.             }
  1054.         }
  1055.         
  1056.         return $destinatarios;
  1057.     }
  1058.     /**
  1059.      * Obtiene el excendente que surge de aplicar incorrectamente el iva
  1060.      * a las retenciones en SAP para sustraerlo del total posteriormente.
  1061.      *
  1062.      * @return float
  1063.      */
  1064.     public function calcularExcedenteImpuestos()
  1065.     {
  1066.         try {
  1067.             $excedente 0;
  1068.             $impuestos $this->getImpuestosJson();
  1069.             $coheficienteIVA = ($this->getCliente())->getIva();
  1070.             if (!empty($impuestos)) {
  1071.                 foreach ($impuestos as $impuesto) {
  1072.                     if (preg_match('/IVA/'$impuesto['impuesto']) == 0) {
  1073.                         $sobranteIVA $impuesto['importe'] / ($coheficienteIVA);
  1074.                         $excedente += $impuesto['importe'] - $sobranteIVA;
  1075.                     }
  1076.                 }
  1077.             }
  1078.             return $excedente;
  1079.         } catch (\Exception $e) {
  1080.             return 0;
  1081.         }
  1082.     }
  1083.     /**
  1084.      * Refactor carrito
  1085.      * Get subtotal y cantidad de items por centro
  1086.      *
  1087.      * @return array \ItemCarrito
  1088.      */
  1089.     public function getSubtotalParcialesNuevo()
  1090.     {
  1091.         $centros = array();
  1092.         foreach ($this->items as $item) {
  1093.             
  1094.             if (empty($centros[$item->getCentro()->getId()]['totalItems']))
  1095.                 $centros[$item->getCentro()->getId()]['totalItems'] = 0;
  1096.             
  1097.             if (empty($centros[$item->getCentro()->getId()]['subtotal']))
  1098.                 $centros[$item->getCentro()->getId()]['subtotal'] = 0;
  1099.             
  1100.             $centros[$item->getCentro()->getId()]['sucursal'] = $item->getCentro()->getNombre();
  1101.             $centros[$item->getCentro()->getId()]['totalItems']++;
  1102.             $centros[$item->getCentro()->getId()]['subtotal'] += floatval($item->getPrecioTotalSinDcto());
  1103.             foreach($item->getAlternativas() as $alternativa){
  1104.                 if($alternativa->esPosicionAlternativaPrincipal()){
  1105.                     $centros[$item->getCentro()->getId()]['totalItems']++;
  1106.                     $centros[$item->getCentro()->getId()]['subtotal'] += floatval($alternativa->getPrecioTotalSinDcto());
  1107.                     foreach($alternativa->getSplits() as $split){
  1108.                         $centros[$item->getCentro()->getId()]['subtotal'] += floatval($split->getPrecioTotalSinDcto());
  1109.                     }
  1110.                 }
  1111.             }
  1112.             foreach($item->getSplits() as $split){
  1113.                 $centros[$item->getCentro()->getId()]['subtotal'] += floatval($split->getPrecioTotalSinDcto());
  1114.             }
  1115.         }
  1116.         ksort($centros);
  1117.         return $centros;
  1118.     }
  1119.     /**
  1120.      * Refactor carrito
  1121.      * 
  1122.      * @param $string $posicion
  1123.      *
  1124.      * @return array \ItemCarritoNuevo
  1125.      */
  1126.     public function getItemPorPosicionNuevo($posicion)
  1127.     {
  1128.         foreach ($this->items as $item) {
  1129.             if($item->getPosicion() == $posicion){
  1130.                 return $item;
  1131.             }
  1132.             foreach($item->getAlternativas() as $alternativa){
  1133.                 if($alternativa->getPosicion() == $posicion){
  1134.                     return $item;
  1135.                 }
  1136.             }
  1137.         }
  1138.         return null;
  1139.     }
  1140.     //Refactor carrito
  1141.     public function setSucursalesNuevo($sucursal){
  1142.         $this->sucursales[] = $sucursal;
  1143.         return $this;
  1144.     }
  1145.     //Refactor carrito
  1146.     public function getSucursalesNuevo(){
  1147.         return $this->sucursales;
  1148.     }
  1149.     //Refactor carrito
  1150.     public function tieneItemsNuevo($idSucursal null){
  1151.         if($idSucursal){
  1152.             foreach ($this->getItems() as $item) {
  1153.                 if($item->getCentro()->getId() == $idSucursal){
  1154.                     return true;
  1155.                 }
  1156.             }
  1157.             return false;
  1158.         }
  1159.         return !empty($this->getItems());
  1160.     }
  1161.     //Refactor carrito
  1162.     public function tieneFechaDemorada(){
  1163.         return $this->tieneFechaDemorada;
  1164.     }
  1165.     //Refactor carrito
  1166.     public function setTieneFechaDemorada($valor){
  1167.         $this->tieneFechaDemorada $valor;
  1168.         return $this;
  1169.     }
  1170.      
  1171.     public function getPrecioDecidir(){
  1172.         return $this->precioDecidir;
  1173.     }
  1174.     public function setPrecioDecidir($valor){
  1175.         $this->precioDecidir $valor;
  1176.         return $this;
  1177.     }
  1178.     public function setFlagCobroDeFlete($valor) {
  1179.         $this->flagCobroDeFlete $valor;
  1180.         return $this;
  1181.     }
  1182.     public function getFlagCobroDeFlete() {
  1183.         return $this->flagCobroDeFlete;
  1184.     }
  1185.     public function getVisEmbalaje() {
  1186.         return $this->visEmbalaje;
  1187.     }
  1188.     public function setVisEmbalaje($visEmbalaje) {
  1189.         $this->visEmbalaje boolval($visEmbalaje);
  1190.         return $this;
  1191.     }
  1192.     public function setDocPreManual($valor) {
  1193.         $this->DocPreManual $valor;
  1194.         return $this;
  1195.     }
  1196.     public function getDocPreManual() {
  1197.         return $this->DocPreManual;
  1198.     }
  1199.     public function setCupon($cupon) {
  1200.         $this->cupon $cupon;
  1201.         return $this;
  1202.     }
  1203.     public function getCupon() {
  1204.         return $this->cupon;
  1205.     }
  1206. }