Skip to content

Instantly share code, notes, and snippets.

@monroy95
Created December 16, 2017 19:15
Show Gist options
  • Save monroy95/515abc0993aad233646be401b4a56fa2 to your computer and use it in GitHub Desktop.
Save monroy95/515abc0993aad233646be401b4a56fa2 to your computer and use it in GitHub Desktop.
Usando frappe.model.get_value para la obtencion de valores.
frappe.ui.form.on("Sales Invoice", "refresh", function(frm, cdt, cdn) {
// es-GT: Obtiene el numero de Identificacion tributaria ingresado en la hoja del cliente.
// en-US: Fetches the Taxpayer Identification Number entered in the Customer doctype.
cur_frm.add_fetch("customer", "nit_face_customer", "nit_face_customer");
// Funcion para la obtencion del PDF, segun el documento generado.
function pdf_button() {
frappe.call({
// Este metodo verifica, el modo de generacion de PDF para la factura electronica
// retornara 'Manul' o 'Automatico'
method: "factura_electronica.api.save_url_pdf",
callback: function(data) {
if (data.message === 'Manual') {
// Si en la configuracion se encuentra que la generacion de PDF debe ser manual
// Se realizara lo siguiente
//cur_frm.clear_custom_buttons();
console.log(data.message);
frm.add_custom_button(__("Obtener PDF"),
function() {
var cae_fac = frm.doc.cae_factura_electronica;
var link_cae_pdf = "https://www.ingface.net/Ingfacereport/dtefactura.jsp?cae=";
//console.log(cae_fac)
window.open(link_cae_pdf + cae_fac);
}).addClass("btn-primary");
} else {
// Si en la configuracion se encuentra que la generacion de PDF debe ser Automatico
// Se realizara lo siguiente
console.log(data.message);
var cae_fac = frm.doc.cae_factura_electronica;
var link_cae_pdf = "https://www.ingface.net/Ingfacereport/dtefactura.jsp?cae=";
frappe.call({
method: "factura_electronica.api.save_pdf_server",
args: {
file_url: link_cae_pdf + cae_fac,
filename: frm.doc.name,
dt: 'Sales Invoice',
dn: frm.doc.name,
folder: 'Home/Facturas Electronicas',
is_private: 1
}
});
}
}
});
}
// Codigo para Factura Electronica FACE, CFACE
// El codigo se ejecutara segun el estado del documento, puede ser: Pagado, No Pagado, Validado, Atrasado
if (frm.doc.status === "Paid" || frm.doc.status === "Unpaid" || frm.doc.status === "Submitted" || frm.doc.status === "Overdue") {
// SI en el campo de 'cae_factura_electronica' ya se encuentra el dato correspondiente, ocultara el boton
// para generar el documento, para luego mostrar el boton para obtener el PDF del documento ya generado.
if (frm.doc.cae_factura_electronica) {
cur_frm.clear_custom_buttons();
pdf_button();
} else {
var nombre = 'Factura Electronica';
frm.add_custom_button(__(nombre), function() {
frappe.call({
method: "factura_electronica.api.generar_factura_electronica",
args: {
serie_factura: frm.doc.name,
nombre_cliente: frm.doc.customer
},
// El callback recibe como parametro el dato retornado por script python del lado del servidor
callback: function(data) {
// Asignacion del valor retornado por el script python del lado del servidor en el campo
// 'cae_factura_electronica' para ser mostrado del lado del cliente y luego guardado en la DB
cur_frm.set_value("cae_factura_electronica", data.message);
if (frm.doc.cae_factura_electronica) {
cur_frm.clear_custom_buttons();
pdf_button();
}
}
});
}).addClass("btn-primary");
}
}
// Codigo para Notas de Credito NCE
// El codigo se ejecutara segun el estado del documento, puede ser: Retornar
if (frm.doc.status === "Return") {
//var nombre = 'Nota Credito';
// SI en el campo de 'cae_nota_de_credito' ya se encuentra el dato correspondiente, ocultara el boton
// para generar el documento, para luego mostrar el boton para obtener el PDF del documento ya generado.
if (frm.doc.cae_nota_de_credito) {
cur_frm.clear_custom_buttons();
pdf_button();
} else {
frm.add_custom_button(__('Nota Credito'), function() {
frappe.call({
method: "factura_electronica.api.generar_factura_electronica",
args: {
serie_factura: frm.doc.name,
nombre_cliente: frm.doc.customer
},
// El callback recibe como parametro el dato retornado por script python del lado del servidor
callback: function(data) {
// Asignacion del valor retornado por el script python del lado del servidor en el campo
// 'cae_nota_de_credito' para ser mostrado del lado del cliente y luego guardado en la DB
cur_frm.set_value("cae_nota_de_credito", data.message);
if (frm.doc.cae_nota_de_credito) {
cur_frm.clear_custom_buttons();
pdf_button();
}
}
});
}).addClass("btn-primary");
}
}
frm.add_fetch("item_code", "tax_rate_per_uom", "tax_rate_per_uom");
frappe.ui.form.on("Sales Invoice Item", {
// Cuando exista un cambio en la seleccion de codigo de producto, se ejecutara la funcion que recibe como parametros
// frm = El Formulario, cdt = Current Doctype, cdn = Current docname
/*FIXME: Por el momento, el usuario TIENE QUE Refrescar el campo de item_code,
desde la ventanita de Sales invoice Item para que funcione. Si lo refresca usando el
grid edtiable de Sales Invoice Item mostrado en Sales invoice, no jala la data.
Para arreglarlo el objetivo es como hacer trigger de tal forma, que sea irrelevante en donde
actualiza, coloca, o simplemente LEE el Sales Invoice.
*/
item_code: function(frm, cdt, cdn) {
//frm.add_fetch("item_code", "tax_rate_per_uom", "tax_rate_per_uom");
//var row = frappe.get_doc(cdt, cdn);
//frappe.model.set_value(cdt, cdn, "valor_otro_impuesto", row.qty * row.rate);
console.log('Usando Trigger item_code');
var item_c = frappe.model.get_value(cdt, cdn, "item_code");
console.log("Codigo de Producto : " + item_c);
var cantidad = frappe.model.get_value(cdt, cdn, "qty");
console.log("Cantidad : " + cantidad);
var monto = frappe.model.get_value(cdt, cdn, "rate");
console.log("Precio : " + monto);
var conversion = frappe.model.get_value(cdt, cdn, 'conversion_factor');
console.log(' Factor de Conversion = ' + conversion);
var stock_q = frappe.model.get_value(cdt, cdn, 'stock_qty');
console.log('stock qty = ' + stock_q);
console.log('operacion = ' + monto * cantidad);
},
qty: function(frm, cdt, cdn) {
//frm.add_fetch("item_code", "tax_rate_per_uom", "tax_rate_per_uom");
// var row = frappe.get_doc(cdt, cdn);
// frappe.model.set_value(cdt, cdn, "valor_otro_impuesto", row.qty * row.rate);
console.log('Usando Trigger qty');
var item_c = frappe.model.get_value(cdt, cdn, "item_code");
console.log("Codigo de Producto : " + item_c);
var cantidad = frappe.model.get_value(cdt, cdn, "qty");
console.log("Cantidad : " + cantidad);
var monto = frappe.model.get_value(cdt, cdn, "rate");
console.log("Precio : " + monto);
var conversion = frappe.model.get_value(cdt, cdn, 'conversion_factor');
console.log(' Factor de Conversion = ' + conversion);
var stock_q = frappe.model.get_value(cdt, cdn, 'stock_qty');
console.log('stock qty = ' + stock_q);
console.log('operacion = ' + monto * cantidad);
},
uom: function(frm, cdt, cdn) {
let d = locals[cdt][cdn];
var monto = d.amount;
var cantidad = d.stock_qty;
//frappe.msgprint(d);
console.log(d);
console.log("Usando trigger de UOM");
// Agregar logica para realizar calculos
frappe.model.set_value(cdt, cdn, 'campo_de_prueba', flt(monto) * flt(cantidad));
cur_frm.refresh_fields();
},
conversion_factor: function(frm, cdt, cdn) {
let d = locals[cdt][cdn];
var monto = d.amount;
var cantidad = d.stock_qty;
//frappe.msgprint(d);
console.log(d);
console.log("Usando trigger de conversion_factor");
// Agregar logica para realizar calculos
frappe.model.set_value(cdt, cdn, 'campo_de_prueba', flt(monto) * flt(cantidad));
cur_frm.refresh_fields();
}
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment