Skip to content

Instantly share code, notes, and snippets.

@RafaAguilar
Created August 3, 2015 15:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RafaAguilar/66eea69446f08b3150a6 to your computer and use it in GitHub Desktop.
Save RafaAguilar/66eea69446f08b3150a6 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
import logging
import pycurl
import json
from cgi import escape
from StringIO import StringIO
logging.basicConfig(filename='invoices_missing.log',level=logging.DEBUG)
example_invoice_json = '{"against_income_account":"Revenue - C\u0026C","total_commission":0.0,"write_off_amount":0.0,"naming_series":"SINV-","fiscal_year":"2014-2015","doctype":"Sales Invoice","total_advance":0.0,"conversion_rate":1.0,"total":25.0,"customer_name":"31 PTE. LTD.","paid_amount":0.0,"apply_discount_on":"Grand Total","update_stock":0,"packed_items":[],"base_total":25.0,"selling_price_list":"Standard Selling","source":"","base_grand_total":25.0,"recurring_type":"","docstatus":0,"territory":"Venezuela","base_in_words":"BSF Twenty Five only.","due_date":"2015-07-31","ignore_pricing_rule":1,"advances":[],"company":"Fake COMPANY","is_opening":"No","grand_total":25.0,"base_discount_amount":0.0,"outstanding_amount":25.0,"customer_address":"Customer 1","base_rounded_total":25.0,"base_total_taxes_and_charges":0.0,"remarks":"No Remarks","c_form_applicable":"No","customer":"31 PTE. LTD.","commission_rate":0.0,"base_net_total":25.0,"is_recurring":0,"currency":"Venezuela","items":[{"base_price_list_rate":0.0,"image":"","base_amount":25.0,"qty":1.0,"item_tax_rate":"{}","rate":25.0,"cost_center":"Main - C\u0026C","actual_qty":0.0,"page_break":0,"base_net_rate":25.0,"discount_percentage":0.0,"item_name":"Product #1","base_net_amount":25.0,"net_rate":25.0,"stock_uom":"Unit","docstatus":0,"actual_batch_qty":0.0,"parenttype":"Sales Invoice","description":"AProduct #1","base_rate":25.0,"item_code":"SEC-0001","delivered_qty":0.0,"price_list_rate":0.0,"name":"6767bc733e","idx":1,"income_account":"Revenue - C\u0026C","item_group":"Services","doctype":"Sales Invoice Item","amount":25.0,"net_amount":25.0,"parentfield":"items"}],"debit_to":"Accounts Receivable - C\u0026C","price_list_currency":"BSF","write_off_outstanding_amount_automatically":0,"taxes":[],"plc_conversion_rate":1.0,"net_total":25.0,"is_pos":0,"rounded_total":25.0,"posting_date":"2015-07-31","in_words":"Venezuela Twenty Five only.","customer_group":"Commercial","sales_team":[],"total_taxes_and_charges":0.0}'
def login(usr,pwd,cookie_path="cookie.txt"):
url = "http://example.com:8008/api/method/login"
curl_request = pycurl.Curl()
curl_request.setopt(pycurl.URL, url)
curl_request.setopt(pycurl.POST, 1)
curl_request.setopt(pycurl.POSTFIELDS, "usr=" + usr + "&pwd=" + pwd)
curl_request.setopt(pycurl.COOKIEJAR, cookie_path)
curl_request.perform()
curl_request.close()
def logged_users(cookie_path):
url_get_login = "http://example.com:8008/api/method/frappe.auth.get_logged_user"
curl_request = pycurl.Curl()
curl_request.setopt(pycurl.URL, url_get_login)
curl_request.setopt(pycurl.COOKIEFILE, cookie_path)
curl_request.perform()
curl_request.close()
def create_sales_invoice(json_invoice,cookie_path):
url_create_sales_invoices = "http://example.com/api/resource/Sales%20Invoice"
curl_request = pycurl.Curl()
buffer = StringIO()
curl_request.setopt(curl_request.WRITEDATA, buffer)
#devnull = open('/dev/null', 'w')
#curl_request.setopt(pycurl.WRITEFUNCTION, devnull.write)
curl_request.setopt(pycurl.URL, url_create_sales_invoices)
curl_request.setopt(pycurl.POST, 1)
curl_request.setopt(pycurl.POSTFIELDS, "data=" + json_invoice.replace("&", "\u0026"))
curl_request.setopt(pycurl.COOKIEFILE, cookie_path)
curl_request.perform()
if curl_request.getinfo(pycurl.HTTP_CODE) == 200:
sent_invoices.append(json_invoice)
else:
missing_invoices.append(json_invoice)
logging.warning(json_invoice)
logging.warning(buffer.getvalue())
curl_request.close()
def create_item(json_item, cookie_path):
success = False
devnull = open('/dev/null', 'w')
url_create_item = "http://example.com:8008/api/resource/Item"
curl_request = pycurl.Curl()
curl_request.setopt(pycurl.URL, url_create_item)
curl_request.setopt(pycurl.POST, 1)
curl_request.setopt(pycurl.WRITEFUNCTION, devnull.write)
curl_request.setopt(pycurl.POSTFIELDS, "data=" + json_item.replace("&", "\u0026"))
curl_request.setopt(pycurl.COOKIEFILE, cookie_path)
curl_request.perform()
if curl_request.getinfo(pycurl.HTTP_CODE) == 200:
sent_items.append(json_item)
success = True
else:
missing_items.append(json_item)
curl_request.close()
return success
def item_exists(item_code,cookie_path="cookie.txt"):
exist = False
devnull = open('/dev/null', 'w')
url_get_item="http://example.com/api/resource/Item/" + item_code
curl_request = pycurl.Curl()
curl_request.setopt(pycurl.URL, url_get_item)
curl_request.setopt(pycurl.COOKIEFILE, cookie_path)
curl_request.setopt(pycurl.WRITEFUNCTION, devnull.write)
curl_request.perform()
if curl_request.getinfo(pycurl.HTTP_CODE) == 200:
#print item_code + " : found"
exist = True
else:
print item_code + " : missing"
exist = False
curl_request.close()
return exist
login("username","password","cookie.txt")
missing_items = []
sent_items = []
# examples
create_item(item, "cookie.txt")
create_sales_invoice(example_invoice_json,"cookie.txt")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment