• Resolved adborges

    (@adborges)


    Pessoal,

    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 );
    	}    
    • This topic was modified 7 years, 6 months ago by adborges.
Viewing 3 replies - 1 through 3 (of 3 total)
Viewing 3 replies - 1 through 3 (of 3 total)
  • The topic ‘Quem tem problemas de boleto cancelando indevidamente – Solu??o temporaria aqui’ is closed to new replies.