pub mod pdf_builder_80mm;
use crate::nfe::xml_extractor::structs::NFeProc;
use pdf_builder_80mm::PdfItem;
pub struct DanfeBuilderActions;
impl DanfeBuilderActions {
pub async fn generate_55_80mm(nfe_proc: NFeProc) -> Result<Vec<u8>, String> {
let inf = &nfe_proc.nfe.inf_nfe;
let ide = &inf.ide;
let emit = &inf.emit;
let dest = &inf.dest;
let prot = &nfe_proc.prot_nfe.inf_prot;
let chave_acesso = inf
.id
.as_deref()
.unwrap_or("")
.strip_prefix("NFe")
.unwrap_or(inf.id.as_deref().unwrap_or(""))
.to_string();
let n_prot = prot
.as_ref()
.and_then(|p| p.n_prot.clone())
.unwrap_or_default();
let dh_recbto = prot
.as_ref()
.and_then(|p| p.dh_recbto.clone())
.unwrap_or_default();
let emit_x_nome = emit
.x_fant
.as_deref()
.filter(|v| !v.trim().is_empty())
.or(emit.x_nome.as_deref().filter(|v| !v.trim().is_empty()))
.unwrap_or_default()
.to_string();
let emit_uf = emit.ender_emit.uf.clone().unwrap_or_default();
let emit_cnpj = emit.cnpj.clone().unwrap_or_default();
let emit_ie = emit.ie.clone().unwrap_or_default();
let tp_nf = ide.tp_nf.clone().unwrap_or_default(); let serie = ide.serie.clone().unwrap_or_default();
let n_nf = ide.n_nf.clone().unwrap_or_default();
let dh_emi = ide.dh_emi.clone().unwrap_or_default();
let dest_x_nome = dest
.as_ref()
.and_then(|d| d.x_nome.clone())
.unwrap_or_default();
let dest_cnpj_cpf = dest
.as_ref()
.and_then(|d| d.cnpj.clone().or_else(|| d.cpf.clone()))
.unwrap_or_default();
let dest_uf = dest
.as_ref()
.and_then(|d| d.ender_dest.as_ref())
.and_then(|e| e.uf.clone())
.unwrap_or_default();
let dest_ie = dest.as_ref().and_then(|d| d.ie.clone()).unwrap_or_default();
let v_nf = inf
.total
.icms_tot
.as_ref()
.and_then(|t| t.v_nf.clone())
.unwrap_or_default();
let inf_cpl = inf.inf_adic.inf_cpl.clone().unwrap_or_default();
let t_pag = inf
.pag
.det_pag
.as_ref()
.and_then(|d| d.t_pag.clone())
.unwrap_or_default();
let items: Vec<PdfItem> = inf
.det
.iter()
.map(|det| {
let prod = &det.prod;
PdfItem {
n_item: det.n_item.clone().unwrap_or_default(),
x_prod: prod.x_prod.clone().unwrap_or_default(),
q_com: prod.q_com.clone().unwrap_or_default(),
u_com: prod.u_com.clone().unwrap_or_default(),
v_un_com: prod.v_un_com.clone().unwrap_or_default(),
v_prod: prod.v_prod.clone().unwrap_or_default(),
}
})
.collect();
pdf_builder_80mm::build_pdf_80mm(
&chave_acesso,
&n_prot,
&dh_recbto,
&emit_x_nome,
&emit_uf,
&emit_cnpj,
&emit_ie,
&tp_nf,
&serie,
&n_nf,
&dh_emi,
&dest_x_nome,
&dest_cnpj_cpf,
&dest_uf,
&dest_ie,
&v_nf,
&t_pag,
&inf_cpl,
&items,
)
}
}