السلام عليكم ورحمة الله وبركاته
شباب العرب المبدعين و المنتجين و الأذكياء طبتم وطابت ايامكم بكل خير
ادرس علوم حاسوب و في العطلة الصيفية عملت على مشروع خاص فيني بتسهيل عملية تحويل مبيعات المتجر الاكتروني إلى برنامج المحاسبي (لايتوفر ربط من خلال المنصة) لذلك بدأت بالعمل الخاص طبعاً API عمل على موضوع انشاء العميل و استخرجات المعلومات من خلال ملف أكسل تم تحمليه من خلال منصة تجارة الاكترونية و تحويلها إلى البرنامج المحسابي بنجاح لكن اوجه مشكلة بالبحث او اضافة العميل في فاتورة المبيعات
الكود مبرمج عن طريق البايثون تم استخدم
from flask import Flask, render_template, request, flash
import pandas as pd
import requests
import os
def convert_sales_data(df):
converted_data = []
for index, row in df.iterrows():
data = {
"IssueDate": str(row['added_at']), # تـاريخ الـطلب
"DueDate": "By", # طريقة حساب الأشهر بالأيام أو تاريخ Net or By
"DueDateDays": None,
"DueDateDate": str(row['last_update_at']), # اكتمال الطلب
"Reference": str(row['id']), # مرجع طلب العميل
"QuoteNumber": None,
"OrderNumber": None,
"Customer": None,
"SalesQuote": None,
"SalesOrder": None,
"BillingAddress": None,
"Description": None,
"Lines": None,
"SalesInventoryLocation": None,
"HasLineNumber": True,
"HasLineDescription": False,
"Discount": True,
"DiscountType": "ExactAmount",
"AmountsIncludeTax": False,
"Rounding": False,
"RoundingMethod": "None",
"WithholdingTax": False,
"WithholdingTaxType": "Rate",
"WithholdingTaxPercentage": 0.0,
"WithholdingTaxAmount": 0.0,
"EarlyPaymentDiscount": False,
"EarlyPaymentDiscountType": "Percentage",
"EarlyPaymentDiscountRate": 0.0,
"EarlyPaymentDiscountAmount": 0.0,
"EarlyPaymentDiscountDays": None,
"LatePaymentFees": False,
"LatePaymentFeesPercentage": 0.0,
"TotalAmountInWords": True,
"TotalAmountInBaseCurrency": True,
"Bilingual": True,
"HasSalesInvoiceCustomTitle": False,
"SalesInvoiceCustomTitle": None,
"HasSalesInvoiceCustomTheme": False,
"SalesInvoiceCustomTheme": None,
"AutomaticReference": False,
"HideDueDate": False,
"HideBalanceDue": False,
"ClosedInvoice": False,
"ShowItemImages": False,
"ShowTaxAmountColumn": False,
"HasSalesInvoiceFooters": False,
"SalesInvoiceFooters": None,
"CustomFields": None,
"CustomFields2": None,
}
converted_data.append(data)
return converted_data
عليك التحقق من النقاط التالية:
- تأكد من أن جميع بيانات العميل مطلوبة في برنامج المحاسبي متوفرة في ملف Excel الذي تستخدمه لتحويل المبيعات ففي حال وجود بيانات ناقصة أو غير صحيحة، فسيؤدي ذلك إلى عدم تمكنك من العثور على العميل أو إضافته إلى الفاتورة.
- هل إعدادات برنامج المحاسبي صحيحة لنوع العميل الذي تحاول إضافته، فإن كنت تحاول إضافة عميل جديد، فتأكد من أن إعدادات البرنامج المحاسبي تسمح بإضافة عملاء جدد.
- تحقق من أن بيانات العميل وإعدادات البرنامج المحاسبي صحيحة، ومن الكود الخاص بك للتأكد من أنه يقوم بمعالجة بيانات العميل بشكل صحيح.
- تفقد بيانات العميل في ملف Excel وتأكد من أن جميع الحقول المطلوبة في برنامج المحاسبي متوفرة في ملف Excel وإن وجدت أية حقول ناقصة أو غير صحيحة، فحاول تصحيحها.
وإليك مثال على الكود الصحيح الذي يمكن استخدامه لتحويل بيانات العميل من ملف Excel إلى برنامج محاسبي:
import pandas as pd
import requests
def convert_client_data(df):
# تأكد من أن جميع بيانات العميل مطلوبة في برنامج المحاسبي متوفرة في ملف Excel.
required_fields = ["name", "email", "address", "phone_number"]
for index, row in df.iterrows():
for field in required_fields:
if field not in row.index:
raise ValueError(f"Field {field} is required but not found in the Excel file.")
# قم بإنشاء قاموس ببيانات العميل.
client_data = {}
for field in required_fields:
client_data[field] = row[field]
# استخدم واجهة برمجة تطبيقات API لإضافة العميل إلى برنامج المحاسبي.
url = "https://api.accounting.com/clients"
headers = {"Authorization": "Bearer YOUR_API_TOKEN"}
data = {"data": client_data}
response = requests.post(url, headers=headers, json=data)
# إذا نجحت عملية الإضافة، فأعد العميل.
if response.status_code == 200:
return response.json()["data"]
else:
raise ValueError(f"Failed to add client: {response.status_code}")
# قم بتحميل بيانات العميل من ملف Excel.
df = pd.read_excel("client_data.xlsx")
# قم بتحويل بيانات العميل إلى برنامج المحاسبي.
client = convert_client_data(df)
# اطبع بيانات العميل.
print(client)
شكراً مصطفى على تقديمك للحل اعتذر على تاخير في الرد الحياة مزدحمة في بعض الأحيان
تم تطبيق حـلـك بـحـمدالله مع تعديل على دالة الأتصال بالخادم
def convert_clients_data(df):
required_fields = ["ID", "Name", "Email", "Phone", "Country AR", "Country EN", "City (AR)", "City (EN)", "District", "Street", "Number Of Orders"]
for field in required_fields:
if field not in df.columns:
raise ValueError(f"Missing required field: {field}")
converted_data = []
for _, row in df.iterrows():
# قم بفصل العنوان إلى حقلين للعنوان والمنطقة
address = str(row['Street']) + ', ' + str(row['District'])
data = {
'Name': str(row['Name']),
'Code': str(row['ID']),
'CreditLimit': 0.0,
'Currency': '',
'BillingAddress': address,
'DeliveryAddress': '',
'Email': str(row['Email']),
'Division': '',
'ControlAccount': '',
'StartingBalance': 0.0,
'HasDefaultDueDateDays': False,
'DefaultDueDateDays': None,
'HasDefaultHourlyRate': False,
'DefaultHourlyRate': 0.0,
'Inactive': False,
"CustomFields": {"2f976bfc-10c3-416c-bf06-fb57427c75ed": str(row['City (AR)']),
"abdab3b9-7c2f-4fd3-8d8b-dc4117f015ac": str(row['Phone'])},
}
converted_data.append(data)
return converted_data
def send_to_accounting_system(data, api_url):
headers = {'Content-Type': 'application/json', 'Authorization': 'Basic *****************=='}
response = requests.post(api_url, json=data, headers=headers)
try:
response_data = response.json()
if 'Success' in response_data and response_data['Success']:
return response_data['Key']
else:
raise ValueError(f"Failed to add data. Unexpected response format: {response_data}")
except Exception as e:
raise ValueError(f"Failed to parse server response: {str(e)}")
التعليقات