Created
August 3, 2015 15:09
-
-
Save RafaAguilar/66eea69446f08b3150a6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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