<?php

final class DModelwsceopedidowsnotafiscal extends Model
{


    public function wsnfeToDB($pdata = array(), $tempoLimite = false)
    {
        $this->load->dmodel('notafiscal/notafiscal');
        $this->load->dmodel('checkout/order');
        $this->load->type('tipofuturaserver');
        $this->load->type('tipocomum');

        do{
            $aux = 0;

            $result = $this->dmodel_notafiscal_notafiscal->getNotaFiscalServer($pdata);
            if((!$result) || (count($result) <= 0)){
                break;
            }

            $aux += count($result);
            $logoDanfe = $this->dmodel_notafiscal_notafiscal->getLogoNFE();

            foreach ($result as $row) {
                $this->db->startTransaction();
                try {

                    $danfeCons = array(
                        'XML'  => base64_decode($row['xml_arquivo']),
                        'logo' => $logoDanfe
                    );
                    $linksXmlDanfe = $this->wsceo->getLinksDanfeXml($danfeCons);

                    if (!$linksXmlDanfe) {
                        throw new Exception('Não foi possível gerar os links da DANFE.');
                    }

                    $nfe = $this->dmodel_notafiscal_notafiscal->getOrderNfe($row['id_ecommerce']);

                    if($nfe){
                        if($row['chave_acesso'] == $nfe['chave_acesso']){
                            $this->dmodel_notafiscal_notafiscal->setEcmEnviado($row['nota_fiscal_id']);
                            continue;
                        }else{
                            $this->dmodel_notafiscal_notafiscal->deleteOrderNfe($row['id_ecommerce']);
                        }
                    }

                    $this->dmodel_notafiscal_notafiscal->saveNFEToDB($row['id_ecommerce'],
                        $row['chave_acesso'],
                        $danfeCons['XML'],
                        $linksXmlDanfe['xml'],
                        $linksXmlDanfe['danfe'],
                        $row['quantidade_volumes'],
                        0,
                        0,
                        $row['nro_nota'],
                        $row['data_hora_emissao'],
                        $row['serie'],
                        $row['cfop']);

                    if ((!empty($this->config->get('select_order_status_nota_fiscal_emitida_id'))) && ($this->config->get('processo_venda_status') == Type_DsimDnao::Tp_Nao)) {
                        $data = array();
                        $data['order_status_id'] = $this->config->get('select_order_status_nota_fiscal_emitida_id');
                        $data['comment'] = '';

                        $this->dmodel_checkout_order->addOrderHistory($row['id_ecommerce'], $data);
                    }

                    $this->dmodel_notafiscal_notafiscal->setEcmEnviado($row['nota_fiscal_id']);

                    $this->db->commit();
                } catch (Exception $e) {
                    $this->db->rollback();
                    $this->log->write("Erro na URL automática de capturar NFe: " . $e->getMessage());
                    throw new Exception($e->getMessage());
                }
            }

            if (($tempoLimite) && (new DateTime($this->db->dataAtual()) > $tempoLimite)){
              break;
            }
        }while($aux <= 250);

    }

}
