adborges
Forum Replies Created
-
Forum: Plugins
In reply to: [Melhor Envio] Edição dos nomes dos envios no carrinhoEu tenho um snippet aqui que faz isso. Bem hardcoded no codigo do plugin. Não é uma boa pratica, mas por enquanto ajuda. Quer?
Forum: Plugins
In reply to: [Melhor Envio] Áreas de entrega do WooCommerceEstou em contato com o pessoal do Melhor Envios para conseguir algumas melhorias.
Coloque por aqui o que voce acha que falta.
Eu tenho diversas pontuações, principalmente o fato de não poder fitrar o metodo de entrega de acordo com regras que eu definir. Costumo abrir Jamef por exemplo, somente para alguns clientes de perfil definido.Forum: Plugins
In reply to: [Itau Shopline for WooCommerce] Pedido cancela automaticamentePessoal,
O plugin do @claudiosanches é muito bacana, porém faltam algumas lógicas relacionadas a compensação bancária e o Claudio não tem só este projeto. Por conta disto, eu escrevi uma solução temporária da forma q eu consegui, por favor quem manja melhor de programação reescreve isto de forma mais sanitizada e posta la no GitHub (não sei usar direito :/ )
O que eu alterei:
– Estou forçando o horario de 23:59:59 na expiração do boleto que é gravada no banco pro caso do cara ter comprado as 10 da manha e pago as 10 da manha do dia do vencimento por exemplo e não dar cancelado.– Fiz umas condicionais que jogam o vencimento de boletos para segunda-feira no caso de cairem de Sabado ou Domingo de acordo com a data da compra e a config de dias para pagar.
– Adicionei 1 dia de margem para o SOUNDER (cron q checa o pagamento) para checar casos em que o cara paga o boleto nas ultimas horas do dia de vencimento e o sounder não tem tempo habil de esperar a compensação.
– Retiro esta margem na hora de mandar pro boleto fisico. Ou seja: O itau recebe o vencimento pro dia X, mas no banco de dados (que é o dado utilizado pelo SOUNDER) vai estar X+1
Segue o código. Alteracoes no arquivo wc-class-itau-shopline-api.php
Funcoes abaixo, somente troca-las por completo.
Fazer um tente em sandbox para confirmar se tudo funciona. Aqui está ok./** * Save expiry time in the database. * * @param int $order_id * * @return int */ public function save_expiry_time( $order_id ) { $days = absint( $this->days_to_pay ); $now = strtotime( current_time( 'mysql' ) ); // Seta o horario para 23:59:59 para enganar o sounder. O horario limite do vencimento é as 21:00:00 do dia de vencimento. $fixtime = strtotime(date( 'Y-m-d', $now ).' 23:59:59'); $expiry = strtotime( '+' . $days . ' days', $fixtime ); // Descobre o dia da semana que cai o vencimento $weekday = date('w', $expiry); // Joga o vencimento para segunda-feira as 23:59:59 caso o expiry caia de sabado ou domingo e o sistema entenda o sistema bancario de dias úteis if ($weekday == 6){ $expiry = strtotime( '+ 2 days', $expiry ); // 'Caiu no Sabado - ' ; } if ($weekday == 0){ $expiry = strtotime( '+ 1 days', $expiry ); // 'Caiu no Domingo - ' ; } // Insere um dia de margem pra burlar o sounder no caso do cliente pagar nas ultimas hora do dia de vencimento e só compensar no próximo dia. $expiry = strtotime( '+ 1 days', $expiry ); update_post_meta( $order_id, '_wc_itau_shopline_expiry_time', $expiry ); return $expiry; } /** * Get expiry date. * * @param int $order_id * * @return string */ protected function get_expiry_date( $order_id ) { $time = get_post_meta( $order_id, '_wc_itau_shopline_expiry_time', true ); if ( '' == $time ) { $time = $this->save_expiry_time( $order_id ); } // Elimina a margem de um dia pra jogar no boleto propriamente dito, mantendo 1 dia a mais somente no banco de dados para enganar o sounder. $time = strtotime( '- 1 days', $time ); return date( 'dmY', $time ); }o sistema precisaria contemplar tabelas padrao e tabelas de contrato certo?
alguem pode me dar mais dados de como isso funciona?
nao uso contrato….
cada cliente tem uma negociação de preço, ou são tabelas padrao por faixas de faturamento mensal?as tabelas mudam de origem pra origem tb né?
@claudiosanches, neste plugin novo seu seria interessante a opção de configurar a classe de entrega de forma a escolher se vai dividir em pacotes ou não.
Existem muitos cenários onde é até possivel colocar tudo no mesmo pacote, mas tem q aguardar o pedido q demora mais a produzir para enviar.
Entao acho q 2 passos sao necessarios:
Configurar se X classes no mesmo pedido, desejam fazer o split package OU se pegará o tempo maior de envio e usará como padrao no mesmo pacote.
COnfigurar granulado a nivel de produto se aquele produto, independente de classe, NECESSITA de um pacote individual
Como já te disse, nao sou muito bom programador, mas posso te ajudar com logica e testes. Se tiver esse plugin, ou o esboco dele no github já, me avisa que vou lá.
@claudiosanches disponha
@claudiosanches
Acabei de postar esse… até umas 16hs deve permanecer com UMA movimentação só
PN963983509BRvaleu
@claudiosanches beleza… assim que eu tiver algum código, te passo
@claudiosanches beleza… assim que eu tiver algum código, te passo
infelizmente nao tenho mais nenhum codigo de coisas recem postadas 🙁
mas o que podemos fazer é simular o restorno numa variavel né?
eu tenho aqui no meu log, os arrays … se acha q da pra fazer assim me avisa que te enviodesculpe, mas faltou uma alteração:
no mesmo arquivo do post acima…
na segunda condicional, onde vc checa se evento é objeto, tem que remover a key [0]// Handle multiple objects. if ( is_array( $response->return->objeto ) ) { $objects = (array) $response->return->objeto; // Fix when return only last event for each object. if ( is_object( $objects->evento ) ) { $new_objects = array(); foreach ( $objects as $key => $object ) { $new_objects[ $key ] = $object; $new_objects[ $key ]->evento = array( $new_objects[ $key ]->evento ); } $objects = $new_objects; }@claudiosanches
Comecei a dar uma fuçada aqui, meter uns print_r pra ver o que vinha na parte q tava errada. Ai vi que voce pra arrumar outros cenarios “tirava” o status de array dos caras q teoricamente so tinham 1 movimentacao.depois de muita tentativa e erro, coloquei uma condicional no ultimo foreach antes de chamar a template pra recolocar o array antes de mandar pra views q faz o foreach no front. Acho que foi!!!
if ( is_object( $object->evento ) ) { $object->evento = array( $object->evento );}Vou deixar o seu comment pra vc localizar facil ai:
class-wc-correios-tracking-history.php
// Display the right template for show the tracking code or tracking history. if ( ! empty( $objects ) ) { foreach ( $objects as $object ) { if ( is_object( $object->evento ) ) { $object->evento = array( $object->evento );} wc_get_template( 'myaccount/tracking-history-table.php', array( 'events' => (array) $object->evento, 'code' => (string) $object->numero, ), '', WC_Correios::get_templates_path() ); } } else { wc_get_template( 'myaccount/tracking-codes.php', array( 'codes' => $tracking_codes, ), '', WC_Correios::get_templates_path() ); }Agora precisa ver se outras coisas vão c**gar hehehe
Acredito que até tenha outra forma de tratar isso sem verificar no foreach… talvez fazer uma condição lá em cima onde vc gera o $objects… mas isso nao consegui…
Desculpe novamente utilizar aqui pra mandar codigo… sei que é chato, mas nao sei direito usar o versionamento heheA unica forma de ocorrer o erro é quando um codigo que tem somente UMA movimentacao esta colocado junto de outros que tenham mais de uma.
Quando esse codigo está sozinho, tudo ok
quando os outros estao sozinhos tb tudo okPL654047926BR – Este AINDA tem um movimento só (postei hoje, amanha ou mais tarde deve mudar já) Se nao conseguir mexer nisso hoje, depois vamos ter que arrumar outro codigo fresco entao hehehe.
PN922320686BR – Este tem mais movimentacoes
PN901186751BR – Este tem mais movimentacoesSe precisar de ajuda pra testes me avisa….
abs@claudiosanches
Deixa eu aproveitar pra te alertar de algo.
Quando voce coloca múltiplos códigos de rastreamento, está ocorrendo um problema nas tabelas do my-account.Eu vi no código que tem uma lógica pra tratar o cenario de quando o objeto deles vem com UMA ou MAIS partes no array.
Mas tem UM cenário que rola uma falha.
Quando voce tem mais de um código de rastreamento e o PRIMEIRO da lista só tem um objeto de movimentacao (por exemplo: Pacote postado), os outros codigos de rastreamento do foreach vem em branco.tentei resolver a logica, mas sou bem limitado em programação… não consegui 🙁
Quando puder, da uma olhada. Valeu
Vou deixar aqui como resolvi.
O rastreamento interno via webservice está funcionando normalmente. Quando você ativa a tabela de rastreamento, o plugin passa a adotar o link do pedido para mostrar o rastreamento. Ponto 1 resolvido.O link externo que aparece na página do pedido, onde o cliente pode checar o rastreamento no site dos correios pode ser resolvido da seguinte maneira:
Alterar o código que gera os links nos arquivos:
tracking-codes.php
tracking-history-table.php<form method="POST" target="_blank" action="http://www2.correios.com.br/sistemas/rastreamento/resultado_semcontent.cfm" class="shipment-details-service__correios"> <input type="hidden" name="Objetos" value="<?php echo esc_attr( $code ); ?>"> <input class="shipment-details-service__correios-action" type="submit" value="<?php echo esc_attr( $code ); ?>"> </form>Trocar o a porção do código que gera o link via , por este snippet acima.
Desta forma você inclui um botão que gera um POST para o servidor dos correios.
Cada um pode estilizar o botão com CSS.A única coisa que não consegui fazer, foi colocar uma forma na paginado admin do pedido para checar o rastreamento, pois todo a pagina do editar pedido é um FORM. Pode haver alguma outra forma….
Desculpem não propor isto no github, nem taopouco sei se isto é uma boa pratica, se alguem tiver mais experiencia pode criar um PR lá. Isso é um começo.