✏️ 正在编辑: Pedido.php
路径:
/srv/systems_dir/oakberry/application/models/Pedido.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Model_Pedido extends Core_Model { public function getLead() { return $this->findParentRow('Model_DbTable_Lead'); } public function resgateEstaDisponivel() { $empresa = Model_Container::getEmpresa()->findById(Yuppie_Auth::getIdentity()->empresa_id); $diasResgate = (int) ($empresa->fidelidade_intervalo+$empresa->fidelidade_tolerancia_resgate); $date1 = $diasResgate == 0 ? Zend_Date::now()->setYear(2000)->get('yyyy-MM-dd 00:00:00') : Zend_Date::now()->subDay($diasResgate)->get('yyyy-MM-dd 00:00:00'); $date2 = Zend_Date::now()->get('yyyy-MM-dd 23:59:59'); if (empty($this->data_resgate) && $this->data_cadastro >= $date1 && $this->data_cadastro <= $date2) { return true; } return false; } public function lancarPedido(int $leadId, $valor = 1, $pontuar = 1) { $lead = Model_Container::getLead()->findById($leadId); $valor = String_Refatorar::parseStringToFloat($valor); $empresaId = Yuppie_Auth::getIdentity()->empresa_id ?: $lead->empresa_id; $empresa = Model_Container::getEmpresa()->findById($empresaId); $pontos = $pontuar == 1 ? floor($valor / $empresa->valor_ponto) : 0; $score = ''; if (empty($lead)) { throw new Core_Exception('Cliente não encontrado.'); } $model = Model_Container::getPedido()->createRow(); $model->lead_id = $leadId; $model->valor_pedido = $valor; $model->total_pontos = $pontos; $model->empresa_id = $empresaId; $result = $model->save(); $count = 0; if ($pontuar == 1) { //trava para lançar o pedido só quando for necessário if ($pontos == 1) { $model = Model_Container::getPontos()->createRow(); $model->pedido_id = $result; $count = $model->save() ? 1 : 0; } elseif ($pontos > 1) { for ($i = 1; $i <= $pontos; $i++) { $model = Model_Container::getPontos()->createRow(); $model->pedido_id = $result; $count += $model->save() ? 1 : 0; } } } if ($result) { $this->notificarPedidoLancado($leadId, $pontos); $score = (new Model_Lead())->lancarScore($lead, $empresa); $leadEmpresa = Model_Container::getLeadEmpresa()->findByLeadId($lead->id, $empresaId); if ($leadEmpresa->score != $score) { Model_Container::getLeadEmpresa()->update([ 'score' => $score, 'data_score' => (new Zend_Date())->now()->get('yyyy-MM-dd HH:mm:ss'), ], 'lead_id = ' . $lead->id . " AND empresa_id = " . $empresaId); } if ($empresa->google_business) { $this->enviarLinkGoogleBusiness($lead, $empresa); } if ($empresa->enviar_pesquisa_satisfacao && $empresa->pesquisa_satisfacao) { $this->enviarPesquisaSatisfacao($lead, $empresa); } } return ['pedido' => $result, 'pontos' => $count, 'score' => $score]; } protected function notificarPedidoLancado($leadId, ?int $pontuacao = 0) { $lead = Model_Container::getLead()->findById($leadId); $empresa = Model_Container::getEmpresa()->findById(Yuppie_Auth::getIdentity()->empresa_id); try { $whatsapp = \Yuppie_Service_Whatsapp_Factory::load($empresa); } catch (\Throwable $e) { $whatsapp = null; Yuppie_Log::write($e->getMessage() . $e->getTraceAsString(), $this); } if ($whatsapp) { $nomeEmpresa = strtoupper($empresa->nome); $bolinhas = $lead->getBolinhas(); $mensagem = "Olá {$lead->getPrimeiroNome()}!😃 \n\nPassando para avisar que seu" . " pedido foi registrado. A cada " . $empresa->fidelidade_pedidos . " selos acumulados você pode realizar o seu resgate!"; $mensagem .= $pontuacao > 0 ? "\n\nEsta compra creditou {$pontuacao} ponto" . ($pontuacao > 1 ? "s" : "") . "." : ""; $mensagem .= $bolinhas != "" ? "\n\nSeus selos:\n " . $bolinhas : ""; if ($empresa->fidelidade_intervalo > 0) { $mensagem .= "\n\nCada selinho tem validade máxima de " . $empresa->fidelidade_intervalo . " dias " . "contados a partir da data da compra."; } $mensagem .= "\n\nLembrando que o resgate é válido apenas presencialmente."; // if ($lead->getQtdPedidosRestantes() == $empresa->fidelidade_pedidos) { // $mensagem = "É isso aí {$lead->getPrimeiroNome()}!😃 \n\nPassando para avisar que seu" // . " pedido foi registrado e você já atingiu o número de pedidos para realizar seu resgate!" // . "\n\n{$bolinhas}" // . "\n\nLembrando que o resgate é válido apenas presencialmente."; // } //assinatura $mensagem .= "\n\n _*{$nomeEmpresa}*_"; $whatsapp->sendMessage($lead->ddi . $lead->celular, $mensagem); } } protected function enviarPesquisaSatisfacao($lead, $empresa) { try { $whatsapp = \Yuppie_Service_Whatsapp_Factory::load($empresa); } catch (\Throwable $e) { $whatsapp = null; Yuppie_Log::write($e->getMessage() . $e->getTraceAsString(), $this); return; } $optionList = []; $dadosPesquisa = Model_Container::getPosvendaPergunta()->findById($empresa->pesquisa_satisfacao); $dadosPesquisa->prepareToSend($lead); foreach ($dadosPesquisa->getOpcoes() as $op) { $optionList[] = [ 'id' => $op['id'], 'description' => $op['legenda'] ?: null, 'title' => $op['opcao'], ]; } $result = $whatsapp->sendOptionList($lead->ddi . $lead->celular, $dadosPesquisa->descricao, $optionList); if ($result) { $dadosPesquisa->status_envio = "ENVIADA"; $dadosPesquisa->qtd_envios = $dadosPesquisa->qtd_envios + 1; $dadosPesquisa->save(); $posvendaResposta = Model_Container::getPosvendaResposta()->createRow([ 'pergunta_id' => $dadosPesquisa->id, 'lead_id' => $lead->id, 'message_id' => $result ]); $posvendaResposta->save(); } } protected function enviarLinkGoogleBusiness($lead, $empresa) { try { $whatsapp = \Yuppie_Service_Whatsapp_Factory::load($empresa); } catch (\Throwable $e) { $whatsapp = null; Yuppie_Log::write($e->getMessage() . $e->getTraceAsString(), $this); return; } if ($whatsapp) { $mensagem = "⭐️ Avalie sua experiência no Google! Sua opinião é muito importante e vai nos fazer alcançar mais pessoas.\n"; $mensagem .= "👇 "; //o dedo está apontando para o link que vai abaixo $whatsapp->sendMessage($lead->ddi . $lead->celular, $mensagem, null, $empresa->google_business, "Avalie no Google"); } } }
💾 保存文件
← 返回文件管理器