src/AppBundle/Entity/Carrito.php line 14
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Carrito.
*
* @ORM\Table(name="carrito_cabecera")
* @ORM\Entity(repositoryClass="AppBundle\Repository\CarritoRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Carrito
{
const PEDIDO_BLOQUEADO = 'PB';
const PEDIDO_BLOQUEADO_SUBTITULO = '¡Casi listo!';
const PEDIDO_GENERADO_OK = '00';
const CARRITO_OSTATUS_EN_TRATAMIENTO = '80';
const ID_BOTON_PACK1 = 'PK1';
const ID_BOTON_PACK2 = 'PK2';
const ID_BOTON_UNIDAD = 'ST';
const TIPO_DOCUMENTO_OFERTA_ESPECIAL = 'ZOSP';
const TIPO_DOCUMENTO_PEDIDO_MOSTRADOR = 'ZPMO';
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
private $id;
/**
* @var string
*/
private $notaInterna;
/**
* @var string
*/
private $textoSeg;
/**
* @var string|Empresa
*
* @ORM\ManyToOne(targetEntity="Empresa")
* @ORM\JoinColumn(name="cliente",referencedColumnName="id")
*/
private $cliente;
/**
* @var string
*
* @ORM\ManyToOne(targetEntity="Usuario")
* @ORM\JoinColumn(name="usuario",referencedColumnName="id")
*/
private $usuario;
/**
* @var string
*
* @ORM\Column(name="nro_oferta_pedido", type="string", length=10)
*/
private $nroOfertaPedido;
/**
* @var string
*
* @ORM\Column(name="moneda", type="string", length=5)
*/
private $moneda;
/**
* @var string
*
* @ORM\Column(name="precio_embalaje", type="float")
*/
private $precioEmbalaje;
/**
* @var string
*
* @ORM\Column(name="precio_flete", type="float")
*/
private $precioFlete;
/**
* @var string
*
* @ORM\Column(name="precio_corte", type="float")
*/
private $precioCorte;
/**
* @var string
*
* @ORM\Column(name="precio_dct_bonif", type="float")
*/
private $precioDctBonif;
/**
* @var string
*
* @ORM\Column(name="estado", type="string", length=1)
*/
private $estado;
/**
* @var string
*
* @ORM\Column(name="oStatus", type="string", length=2, nullable=true)
*/
private $oStatus;
/**
* @var string
*
* @ORM\Column(name="o_status_desc", type="string", length=150, nullable=true)
*/
private $oStatusDesc;
/**
* @var string
*
* @ORM\Column(name="fecha_fin_reserva_stock", type="datetime")
*/
private $fechaFinReservaStock;
/**
* @var string
*
* @ORM\Column(name="flete", type="string", length=1)
*/
private $flete;
/**
* @var string
*
* @ORM\Column(name="cobra_embalaje", type="string", length=1)
*/
private $cobraEmbalaje;
/**
* @var string
*
* @ORM\Column(name="embalaje_opt", type="string", length=1)
*/
private $embalajeOpt;
/**
* @var string
*
* @ORM\Column(name="pedido_mostrador_activo", type="string", length=5)
*/
private $pedidoMostradorActivo;
/**
* @var string
*
* @ORM\Column(name="texto_de_cabecera", type="text")
*/
private $textoDeCabecera;
/**
* @ORM\ManyToOne(targetEntity="Sucursal", inversedBy="carritos")
* @ORM\JoinColumn(name="sucursal_id", referencedColumnName="id")
*/
private $centro;
/**
* @var string
*
* @ORM\Column(name="nro_pedido_cliente", type="string", length=35)
*/
private $nroPedidoCliente;
/**
* @var string
*
* @ORM\Column(name="condicion_pago", type="string", length=35)
*/
private $condicionDePago;
private $condicionDePagoDescripcion;
/**
* @var float
*
* @ORM\Column(name="importe_impuestos", type="float")
*/
private $importeImpuestos = 0.0;
/**
* @var float
*/
private $importeImpuestosArg = 0.0;
/**
* @var string
*
* @ORM\Column(name="impuestos_json", type="text", nullable=true)
*/
private $impuestosJson;
/**
* @var string
*/
private $impuestosArgJson;
/**
* @var float
*
* @ORM\Column(name="descuento_volumen", type="float")
*/
private $descuentoVolumen = 0.0;
/**
* @var string
*
* @ORM\Column(name="tipo_documento", type="string", length=6)
*/
private $tipoDocumento;
/**
* @var string
*
*/
private $tipoDocumentoProximo;
private $condicionDePagoDesdeDocumento;
private $baseDescuentoCP;
/**
* @var string
*/
private $esOfertaNoModificable;
private $items;
private $precioDecidir;
private $tipoDocumentoPedidoMostrador;
private $tipoDocumentoOfertaEspecial;
private $flagCobroDeFlete;
private $visEmbalaje;
private $DocPreManual;
private $cupon;
public function getId()
{
return $this->id;
}
public function setId($id)
{
$this->id = $id;
return $this;
}
public function getCliente()
{
return $this->cliente;
}
public function setCliente($cliente)
{
$this->cliente = $cliente;
return $this;
}
public function getUsuario()
{
return $this->usuario;
}
public function setUsuario($usuario)
{
$this->usuario = $usuario;
return $this;
}
public function getNroOfertaPedido()
{
return $this->nroOfertaPedido;
}
public function setNroOfertaPedido($nroOfertaPedido)
{
$this->nroOfertaPedido = $nroOfertaPedido;
return $this;
}
public function getMoneda()
{
return $this->moneda;
}
public function setMoneda($moneda)
{
$this->moneda = $moneda;
}
public function getPrecioEmbalaje()
{
return $this->precioEmbalaje;
}
public function setPrecioEmbalaje($precioEmbalaje)
{
$this->precioEmbalaje = $precioEmbalaje;
return $this;
}
public function getPrecioFlete()
{
return $this->precioFlete;
}
public function setPrecioFlete($precioFlete)
{
$this->precioFlete = $precioFlete;
return $this;
}
public function getPrecioCorte()
{
return $this->precioCorte;
}
public function setPrecioCorte($precioCorte)
{
$this->precioCorte = $precioCorte;
return $this;
}
public function getPrecioDctBonif()
{
return $this->precioDctBonif;
}
public function setPrecioDctBonif($precioDctBonif)
{
$this->precioDctBonif = $precioDctBonif;
return $this;
}
public function getEstado()
{
return $this->estado;
}
public function setEstado($estado)
{
$this->estado = $estado;
return $this;
}
public function getOStatus()
{
return $this->oStatus;
}
public function setOStatus($oStatus)
{
$this->oStatus = $oStatus;
return $this;
}
public function getOStatusDesc()
{
return $this->oStatusDesc;
}
public function setOStatusDesc($oStatusDesc)
{
$this->oStatusDesc = $oStatusDesc;
return $this;
}
public function getFlete()
{
return $this->flete;
}
public function setFlete($flete)
{
$this->flete = boolval($flete);
}
public function getTextoDeCabecera()
{
return $this->textoDeCabecera;
}
public function setTextoDeCabecera($textoDeCabecera)
{
$this->textoDeCabecera = $textoDeCabecera;
return $this;
}
public function getImporteImpuestos()
{
return $this->importeImpuestos;
}
public function setImporteImpuestos($importeImpuestos)
{
$this->importeImpuestos = $importeImpuestos;
return $this;
}
public function getImporteImpuestosArg()
{
return $this->importeImpuestosArg;
}
public function setImporteImpuestosArg($importeImpuestosArg)
{
$this->importeImpuestosArg = $importeImpuestosArg;
return $this;
}
public function getCentro()
{
return $this->centro;
}
public function setCentro($centro)
{
$this->centro = $centro;
return $this;
}
public function getItems()
{
return $this->items;
}
public function setItems($items)
{
$this->items = $items;
return $this;
}
/**
* Constructor.
*/
public function __construct($tipoDocumentoPedidoMostrador, $tipoDocumentoOfertaEspecial)
{
$this->items = new \Doctrine\Common\Collections\ArrayCollection();
$this->sucursales = new \Doctrine\Common\Collections\ArrayCollection();
$this->tipoDocumentoPedidoMostrador = $tipoDocumentoPedidoMostrador;
$this->tipoDocumentoOfertaEspecial = $tipoDocumentoOfertaEspecial;
}
/**
* Add item.
*
* @param \AppBundle\Entity\ItemCarrito $item
*
* @return Carrito
*/
public function addItem(\AppBundle\Entity\ItemCarrito $item)
{
$this->items[] = $item;
return $this;
}
/**
* Remove item.
*
* @param \AppBundle\Entity\ItemCarrito $item
*/
public function removeItem(\AppBundle\Entity\ItemCarrito $item)
{
$this->items->removeElement($item);
}
/**
* Set fechaFinReservaStock.
*
* @param \DateTime $fechaFinReservaStock
*
* @return Carrito
*/
public function setFechaFinReservaStock($fechaFinReservaStock)
{
$this->fechaFinReservaStock = $fechaFinReservaStock;
return $this;
}
/**
* Set fechaFinReservaStock.
*
* @param \DateTime $fechaFinReservaStock
*
* @return Carrito
*/
public function setTiempoFechaFinReservaStock($timer)
{
$fecha = date('Y-m-d H:i:s');
$timestampFinReservaStock = strtotime('+15 minute', strtotime($fecha));
$fechaFinReservaStock = new \DateTime();
$fechaFinReservaStock->setTimestamp($timestampFinReservaStock);
$this->fechaFinReservaStock = $fechaFinReservaStock;
return $this;
}
/**
* Get fechaFinReservaStock.
*
* @return \DateTime
*/
public function getFechaFinReservaStock()
{
return $this->fechaFinReservaStock;
}
/**
* Get cantidad de items en carrito sin alternativas y splits.
*
* @return \Int
*/
public function cantMateriales()
{
$cantItems = $i = 0;
foreach ($this->items as $item) {
if(!$item->esSplitOAlt()){
$cantItems++;
}
$i++;
}
return $cantItems;
}
/**
* Get items de carrito sin alternativas.
*
* @return array \ItemCarrito
*/
public function getItemsSinAlt()
{
$items = [];
foreach ($this->items as $item) {
if(!$item->esAlt()){
$items[] = $item;
}
}
return $items;
}
/**
* Get items de carrito por centro
*
* @return array \ItemCarrito
*/
public function getItemsPorCentro($idCentro)
{
$items = [];
foreach ($this->items as $item) {
if(!$item->esSplitOAlt() && $item->getCentro()->getId() == $idCentro){
$items[] = $item;
}
}
return $items;
}
/**
* Get items de carrito sin split ni alternativas
*
* @return array \ItemCarrito
*/
public function getItemsOrganico()
{
$items = [];
foreach ($this->items as $item) {
if(!$item->esSplitOAlt()){
$items[] = $item;
}
}
return $items;
}
/**
* Get items de carrito por centro
*
* @return array \ItemCarrito
*/
public function getPosicionesPorCentroSinAlt($idCentro)
{
$items = [];
foreach ($this->items as $item) {
if(!$item->esAlt() && $item->getCentro()->getId() == $idCentro){
$items[] = $item;
}
}
return $items;
}
/**
* Get cant items de carrito por centro
*
* @return array \ItemCarrito
*/
public function cantItemsPorCentro($idCentro)
{
$items = $this->getItemsPorCentro($idCentro);
return count($items);
}
public function reservado()
{
$ahora = new \DateTime('now');
return $ahora->getTimestamp() < $this->fechaFinReservaStock->getTimestamp();
}
public function centrosConEnvioADomicilioCount()
{
$centros = array();
foreach ($this->items as $item) {
if (($item->getCentro()->getId() == Sucursal::CASA_CENTRAL || $item->getCentro()->getId() == Sucursal::SUCURSAL_ROSARIO) && !in_array($item->getCentro()->getId(), $centros)) {
$centros[] = $item->getCentro()->getId();
}
}
return count($centros);
}
public function centrosCount()
{
$centros = $this->getSucursales();
return count($centros);
}
public function getSucursales()
{
$sucursales = array();
foreach ($this->items as $item) {
if(!isset($sucursales[$item->getCentro()->getId()]) && !$item->esAlt()){
$sucursales[$item->getCentro()->getId()] = $item->getCentro();
}
}
return array_values($sucursales);
}
public function getFechaStockMaximaParaCentro($centro)
{
return $this->getFechaStockMaxima($this->getItemsSinAlt(), $centro);
}
public function getFechaStockMinimaParaCentro($centro)
{
return $this->getFechaStockMinima($this->getItemsSinAlt(), $centro);
}
public function getSubtotal()
{
$subtotal = 0.0;
foreach ($this->items as $item) {
if(!$item->esAlt()){
$subtotal += floatval($item->getPrecioTotalSinDcto());
}
}
return $subtotal;
}
public function getTotalConImpuestos()
{
$subtotal = $this->getSubtotal();
$cortes = floatval($this->getPrecioCorte());
$impuestos = floatval($this->getImporteImpuestos());
$embalaje = floatval($this->getPrecioEmbalaje());
$bonificaciones = floatval($this->getPrecioDctBonif());
$envio = floatval($this->getPrecioFlete());
$total = $subtotal + $impuestos + $cortes + $embalaje + $bonificaciones + $envio;
return $total;
}
/**
* Set nroPedidoCliente.
*
* @param string $nroPedidoCliente
*
* @return Carrito
*/
public function setNroPedidoCliente($nroPedidoCliente)
{
$this->nroPedidoCliente = $nroPedidoCliente;
return $this;
}
/**
* Get nroPedidoCliente.
*
* @return string
*/
public function getNroPedidoCliente()
{
return $this->nroPedidoCliente;
}
public function getCondicionDePago()
{
return $this->condicionDePago;
}
public function setCondicionDePago($condicionpago)
{
$this->condicionDePago = $condicionpago;
return $this;
}
public function getCondicionDePagoDescripcion()
{
return $this->condicionDePagoDescripcion;
}
public function setCondicionDePagoDescripcion($condicionPagoDesc)
{
$this->condicionDePagoDescripcion = $condicionPagoDesc;
return $this;
}
public function setCondicionDePagoDesdeDocumento($condicionDePagoDesdeDocumento)
{
$this->condicionDePagoDesdeDocumento = $condicionDePagoDesdeDocumento;
return $this;
}
public function getCondicionDePagoDesdeDocumento(){
return $this->condicionDePagoDesdeDocumento;
}
public function getFechasSeteadasPorCentro($idCentro)
{
$fechasSeteadas = array();
foreach ($this->getItems() as $item) {
if (
!in_array($item->getFechaEntregaIso(), $fechasSeteadas)
&& $item->getCentro()->getId() == $idCentro
&& $item->getFechaEntregaIso() != ''
) {
$fechasSeteadas[] = $item->getFechaEntregaIso();
}
}
// devolvia las fechas al revez si se refrescaba la pagina//
if (!empty($fechasSeteadas)) {
if (!empty($fechasSeteadas[0]) && !empty($fechasSeteadas[1])) {
if ($fechasSeteadas[0] > $fechasSeteadas[1]) {
$temp = $fechasSeteadas[0];
$fechasSeteadas[0] = $fechasSeteadas[1];
$fechasSeteadas[1] = $temp;
}
}
}
// -------------------------------------------------------//
return $fechasSeteadas;
}
public function tieneFechasEntregaSeteadas()
{
foreach ($this->getItems() as $item) {
if (!$item->esAlt() && $item->getFechaEntregaIso() != '') {
return true;
}
}
return false;
}
public function tieneFechasEntregaSeteadasPorCentro($idCentro)
{
foreach ($this->getItems() as $item) {
if (!$item->esAlt() && $item->getFechaEntregaIso() != '' && $item->getCentro()->getId() == $idCentro) {
return true;
}
}
return false;
}
public function getCantidadFacturacionDeItem($itemCodigo, $idBoton)
{
$cantFact = 0.0;
foreach ($this->items as $item) {
if ($item->getProducto() != null && $item->getProducto()->getCodigo() == $itemCodigo && $item->getIdBoton() == $idBoton) {
$cantFact += floatval($item->getCantidadFacturacion());
}
}
return $cantFact;
}
public function setImpuestosJson($impuestosJson)
{
$this->impuestosJson = $impuestosJson;
return $this;
}
public function setImpuestosArgJson($impuestosArgJson)
{
$this->impuestosArgJson = $impuestosArgJson;
return $this;
}
/**
* Get dataMV.
*
* @return array
*/
public function getImpuestosJson()
{
$impuestosJson = json_decode($this->impuestosJson, true);
if (is_array($impuestosJson)) {
$impuestos = [];
foreach ($impuestosJson as $key => $impuesto) {
$impuestos[$key] = [
'impuesto' => $impuesto['Impuesto'],
'importe' => floatval($impuesto['Importe'])
];
}
return $impuestos;
}
return array();
}
/**
* Get dataMV.
*
* @return array
*/
public function getImpuestosArgJson()
{
$impuestosArgJson = json_decode($this->impuestosArgJson, true);
if (is_array($impuestosArgJson)) {
$impuestos = [];
foreach ($impuestosArgJson as $key => $impuesto) {
$impuestos[$key] = [
'impuesto' => $impuesto['Impuesto'],
'importe' => floatval($impuesto['Importe'])
];
}
return $impuestos;
}
return array();
}
public function getEmbalajeOpt()
{
return $this->embalajeOpt;
}
public function setEmbalajeOpt($embalajeOpt)
{
$this->embalajeOpt = boolval($embalajeOpt);
return $this;
}
public function getDescuentoVolumen()
{
return $this->descuentoVolumen;
}
public function setDescuentoVolumen($descuentoVolumen)
{
$this->descuentoVolumen = $descuentoVolumen;
return $this;
}
public function getCobraEmbalaje()
{
return $this->cobraEmbalaje;
}
public function setCobraEmbalaje($cobraEmbalaje)
{
$this->cobraEmbalaje = boolval($cobraEmbalaje);
return $this;
}
/**
* Get item de carrito por posicion
*
* @param $string $posicion
*
* @return array \ItemCarrito
*/
public function getItemPorPosicion($posicion)
{
foreach ($this->items as $item) {
if($item->getPosicion() != $posicion){
continue;
}
return $item;
}
return null;
}
public function puedeEntregaInmediata(){
foreach ($this->items as $item) {
if ($item->getFechaStockRender() != 'En Stock') {
return false;
}
}
return true;
}
/**
* Get items de carrito por centro
*
* @return array \ItemCarrito
*/
public function getSubTotalCentro($idCentro)
{
$subtotal = 0;
foreach ($this->items as $item) {
if(!$item->esAlt() && ($item->getCentro()->getId() == $idCentro ||
($idCentro == Sucursal::CASA_CENTRAL && $item->getCentro()->getId() == Sucursal::SUCURSAL_FLORIDA) )
){
$subtotal += floatval($item->getPrecioTotalSinDcto());
}
}
return $subtotal;
}
/**
* Get subtotal y cantidad de items por centro
*
* @return array \ItemCarrito
*/
public function getSubtotalParciales()
{
$subtotal = 0;
$totalItems = 0;
$centros = array();
foreach ($this->items as $item) {
if($item->esAlt())
continue;
if (empty($centros[$item->getCentro()->getId()]['totalItems']))
$centros[$item->getCentro()->getId()]['totalItems'] = 0;
if (empty($centros[$item->getCentro()->getId()]['subtotal']))
$centros[$item->getCentro()->getId()]['subtotal'] = 0;
$centros[$item->getCentro()->getId()]['sucursal'] = $item->getCentro()->getNombre();
if (!$item->esSplit()) { //En el resumen los splits no se cuentan como items
$centros[$item->getCentro()->getId()]['totalItems']++;
}
$centros[$item->getCentro()->getId()]['subtotal'] += floatval($item->getPrecioTotalSinDcto());;
}
ksort($centros);
return $centros;
}
public function getTipoDocumento(){
return $this->tipoDocumento;
}
public function setTipoDocumento($tipoDocumento)
{
$this->tipoDocumento = $tipoDocumento;
return $this;
}
public function getTipoDocumentoProximo(){
return $this->tipoDocumentoProximo;
}
public function setTipoDocumentoProximo($tipoDocumentoProximo)
{
$this->tipoDocumentoProximo = $tipoDocumentoProximo;
return $this;
}
public function esPedidoMostrador(){
return $this->tipoDocumentoProximo == $this->tipoDocumentoPedidoMostrador;
}
public function esOfertaEspecial() {
return $this->tipoDocumento == $this->tipoDocumentoOfertaEspecial;
}
public function esOfertaPrecioManual () {
return $this->getDocPreManual() == 'X';
}
//todo la funcion debe indicar si el vendedor es mostrador para la sucursal ingresada
// hoy es indistinta la sucursal que tenga el parametro
public function esVendedorMostradorSucursal($sucursal = ''){
return $this->pedidoMostradorActivo != $sucursal;
}
public function esVendedorMostradorSucursalCasaCentral(){
return $this->pedidoMostradorActivo == Sucursal::CASA_CENTRAL;
}
public function setPedidoMostradorActivo($pedidoMostradorActivo){
$this->pedidoMostradorActivo = $pedidoMostradorActivo;
return $this;
}
public function admiteEntregasParciales(){
$centrosConItems = $this->getSucursales();
$admiteEntregasParciales = false;
if (
count($centrosConItems) == 1 &&
count($this->getItems()) > 1 &&
!$this->puedeEntregaInmediata() &&
count($this->getFechasStock()) > 1) {
$admiteEntregasParciales = true;
}
return $admiteEntregasParciales;
}
public function pedidoMostradorHabilitado(){
$pMHabilitado = $this->esVendedorMostradorSucursal();
if($pMHabilitado){
$centrosConItems = $this->getSucursales();
if (count($centrosConItems) > 1 or !$this->puedeEntregaInmediata()) {
$pMHabilitado = false;
}
}
return $pMHabilitado;
}
public function getDestinatarioPorCentro($idCentro){
foreach ($this->items as $item) {
if(!$item->esAlt() && $item->getCentro()->getId() == $idCentro){
return $item->getDestinatario();
}
}
return '';
}
public function getFechasStock()
{
$fechasStock = array();
foreach ($this->getItems() as $item) {
if (
!in_array($item->getFechaStockIso(), $fechasStock)
&& $item->getFechaStockIso() != ''
) {
$fechasStock[] = $item->getFechaStockIso();
}
}
return $fechasStock;
}
private function getFechaStockMaxima($items, $centro = null){
$fechaMaxima = null;
foreach ($items as $item) {
if ($item->getCentro()->getId() == $centro || is_null($centro)) {
if ($item->getFechaStockIso() > $fechaMaxima || is_null($fechaMaxima)) {
$fechaMaxima = $item->getFechaStockIso();
}
}
}
return $fechaMaxima;
}
private function getFechaStockMinima($items, $centro = null){
$fechaMinima = null;
foreach ($items as $item) {
if ($item->getCentro()->getId() == $centro || is_null($centro)) {
if ($item->getFechaStockIso() < $fechaMinima || is_null($fechaMinima)) {
$fechaMinima = $item->getFechaStockIso();
}
}
}
return $fechaMinima;
}
public function tieneEntregasParciales(){
if(count($this->getSucursales()) > 1){
return false;
}
$fechasSeteadas = array();
foreach ($this->items as $item) {
if (
!in_array($item->getFechaEntregaIso(), $fechasSeteadas)
&& $item->getFechaEntregaIso() != ''
) {
$fechasSeteadas[] = $item->getFechaEntregaIso();
}
}
return count($fechasSeteadas) > 1;
}
/**
* Get items de carrito sin alternativas.
*
* @return array \ItemCarrito
*/
public function getItemsConEntregaSeteada()
{
$items = [];
foreach ($this->items as $item) {
if($item->tieneFechaEntregaSeteada()){
$items[] = $item;
}
}
return $items;
}
public function tieneDestinatarioEnBA(){
foreach ($this->items as $item) {
if(!$item->esAlt() && in_array($item->getCentro()->getId(), Sucursal::SUCURSALES_BSAS)){
if($item->getDestinatario() != ''){
return true;
}
}
}
return false;
}
public function tieneReparto(){
foreach ($this->items as $item) {
if(!$item->esAlt()){
if($item->getDestinatario() != ''){
return true;
}
}
}
return false;
}
public function getItemsPorGrupo($codigoGrupoMaterial)
{
$items = [];
foreach ($this->getItems() as $item) {
if ($item->getGrupoMaterial() != $codigoGrupoMaterial) {
continue;
}
$items[] = $item;
}
return $items;
}
public function tieneItems()
{
return count($this->getItems()) > 0;
}
public function getEsOfertaNoModificable(){
return $this->esOfertaNoModificable;
}
public function setEsOfertaNoModificable($esOfertaNoModificable)
{
$this->esOfertaNoModificable = $esOfertaNoModificable;
return $this;
}
public function tieneCondicionDePagoDesdeDocumento(){
return $this->condicionDePagoDesdeDocumento == 'X';
}
public function getNotaInterna()
{
return $this->notaInterna;
}
public function setNotaInterna($notaInterna)
{
$this->notaInterna = $notaInterna;
return $this;
}
public function getTextoSeg()
{
return $this->textoSeg;
}
public function setTextoSeg($textoSeg)
{
$this->textoSeg = $textoSeg;
return $this;
}
public function getBaseDescuentoCP()
{
return $this->baseDescuentoCP;
}
public function setBaseDescuentoCP($baseDescuentoCP)
{
$this->baseDescuentoCP = $baseDescuentoCP;
return $this;
}
public function getDestinatarios(){
$destinatarios = [];
foreach($this->getSucursales() as $centro){
$idCentro = $centro->getId();
$destinatario = $this->getDestinatarioPorCentro($idCentro);
if(!empty($destinatario)){
$destinatarios[] = $destinatario;
}
}
return $destinatarios;
}
/**
* Obtiene el excendente que surge de aplicar incorrectamente el iva
* a las retenciones en SAP para sustraerlo del total posteriormente.
*
* @return float
*/
public function calcularExcedenteImpuestos()
{
try {
$excedente = 0;
$impuestos = $this->getImpuestosJson();
$coheficienteIVA = ($this->getCliente())->getIva();
if (!empty($impuestos)) {
foreach ($impuestos as $impuesto) {
if (preg_match('/IVA/', $impuesto['impuesto']) == 0) {
$sobranteIVA = $impuesto['importe'] / (1 + $coheficienteIVA);
$excedente += $impuesto['importe'] - $sobranteIVA;
}
}
}
return $excedente;
} catch (\Exception $e) {
return 0;
}
}
/**
* Refactor carrito
* Get subtotal y cantidad de items por centro
*
* @return array \ItemCarrito
*/
public function getSubtotalParcialesNuevo()
{
$centros = array();
foreach ($this->items as $item) {
if (empty($centros[$item->getCentro()->getId()]['totalItems']))
$centros[$item->getCentro()->getId()]['totalItems'] = 0;
if (empty($centros[$item->getCentro()->getId()]['subtotal']))
$centros[$item->getCentro()->getId()]['subtotal'] = 0;
$centros[$item->getCentro()->getId()]['sucursal'] = $item->getCentro()->getNombre();
$centros[$item->getCentro()->getId()]['totalItems']++;
$centros[$item->getCentro()->getId()]['subtotal'] += floatval($item->getPrecioTotalSinDcto());
foreach($item->getAlternativas() as $alternativa){
if($alternativa->esPosicionAlternativaPrincipal()){
$centros[$item->getCentro()->getId()]['totalItems']++;
$centros[$item->getCentro()->getId()]['subtotal'] += floatval($alternativa->getPrecioTotalSinDcto());
foreach($alternativa->getSplits() as $split){
$centros[$item->getCentro()->getId()]['subtotal'] += floatval($split->getPrecioTotalSinDcto());
}
}
}
foreach($item->getSplits() as $split){
$centros[$item->getCentro()->getId()]['subtotal'] += floatval($split->getPrecioTotalSinDcto());
}
}
ksort($centros);
return $centros;
}
/**
* Refactor carrito
*
* @param $string $posicion
*
* @return array \ItemCarritoNuevo
*/
public function getItemPorPosicionNuevo($posicion)
{
foreach ($this->items as $item) {
if($item->getPosicion() == $posicion){
return $item;
}
foreach($item->getAlternativas() as $alternativa){
if($alternativa->getPosicion() == $posicion){
return $item;
}
}
}
return null;
}
//Refactor carrito
public function setSucursalesNuevo($sucursal){
$this->sucursales[] = $sucursal;
return $this;
}
//Refactor carrito
public function getSucursalesNuevo(){
return $this->sucursales;
}
//Refactor carrito
public function tieneItemsNuevo($idSucursal = null){
if($idSucursal){
foreach ($this->getItems() as $item) {
if($item->getCentro()->getId() == $idSucursal){
return true;
}
}
return false;
}
return !empty($this->getItems());
}
//Refactor carrito
public function tieneFechaDemorada(){
return $this->tieneFechaDemorada;
}
//Refactor carrito
public function setTieneFechaDemorada($valor){
$this->tieneFechaDemorada = $valor;
return $this;
}
public function getPrecioDecidir(){
return $this->precioDecidir;
}
public function setPrecioDecidir($valor){
$this->precioDecidir = $valor;
return $this;
}
public function setFlagCobroDeFlete($valor) {
$this->flagCobroDeFlete = $valor;
return $this;
}
public function getFlagCobroDeFlete() {
return $this->flagCobroDeFlete;
}
public function getVisEmbalaje() {
return $this->visEmbalaje;
}
public function setVisEmbalaje($visEmbalaje) {
$this->visEmbalaje = boolval($visEmbalaje);
return $this;
}
public function setDocPreManual($valor) {
$this->DocPreManual = $valor;
return $this;
}
public function getDocPreManual() {
return $this->DocPreManual;
}
public function setCupon($cupon) {
$this->cupon = $cupon;
return $this;
}
public function getCupon() {
return $this->cupon;
}
}