first commit

This commit is contained in:
0ceanSlim 2023-12-08 12:14:36 -05:00
commit 2e8b8a5e75
13 changed files with 363 additions and 0 deletions

7
.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
sql_config.json
bfg.jar
/build
/dist
*.spec
__pycache__/
/output

17
LICENSE Normal file
View File

@ -0,0 +1,17 @@
Apache License
Version 2.0, January 2004
Copyright 2023 OceanSlim
[pySource]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

32
README.md Normal file
View File

@ -0,0 +1,32 @@
# Alpine ITWs iSource Inventory Management CLI
This command-line interface (CLI) provides functionalities to analyze and manage the Alpine ITWs iSource inventory management system.
## Prerequisites
Python 3.x: Ensure Python 3.x is installed on your system.
SQL Server Credentials: Have SQL Server credentials available to configure the CLI.
## Getting Started
Clone the Repository:
```bash
Copy code
git clone https://github.com/0ceanslim/pysource.git
cd pysource
```
Run the CLI
`python cli.py`
- Follow the prompts to enter your SQL Server credentials when prompted.
- Once completed, you're ready to proceed.
## Contributing
If you'd like to contribute to this project:
1. Fork the repository and create a new branch.
2. Make your changes and commit them.
3. Push to the branch and submit a pull request detailing your changes.
## License
This project is licensed under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0) - see the [LICENSE](LICENSE) file for details.

115
cli.py Normal file
View File

@ -0,0 +1,115 @@
import os
import json
import subprocess
import sys
from src.help import help
def clear_console():
# Clear console based on the operating system
if os.name == "nt": # For Windows
os.system("cls")
else: # For Unix/Linux/Mac
os.system("clear")
def check_python_installation():
try:
python_version = subprocess.check_output(
["python", "--version"], stderr=subprocess.STDOUT, universal_newlines=True
)
print(f"Python is already installed ({python_version})")
return True
except FileNotFoundError:
return False
def install_python():
print("Python is not installed. Please download and install it from:")
print("https://www.python.org/downloads/")
input("Press Enter to continue after installing Python...")
sys.exit(1)
def check_sql_config():
if os.path.exists("sql_config.json"):
return True
return False
def get_sql_config():
# Define the connection string
sql_server = input("Enter the sql server (network\location): ")
sql_database = input("Enter the sql database: ")
sql_user = input("Enter the sql user: ")
sql_password = input("Enter the sql password: ")
sql_config = {
"sql_server": sql_server,
"sql_database": sql_database,
"sql_user": sql_user,
"sql_password": sql_password,
}
with open("sql_config.json", "w") as config_file:
json.dump(sql_config, config_file)
def run_script(script_name):
script_path = os.path.join("src", f"{script_name}.py")
if os.path.exists(script_path):
# print(f"Running {script_name}...")
os.system(f"python {script_path}")
else:
print(f"Error: {script_name} not found!")
def main():
setup_completed = False
while not check_python_installation():
install_python()
subprocess.run(["pip", "install", "-r", "requirements.txt"])
while not check_sql_config():
clear_console()
print("sql config file not found.")
user_input = input(
"Do you have credentials for your SQL Server (yes/no)? "
).lower()
if user_input in ["no", "n"]:
print(
"Please retrieve your server location and credentials as well as the name of the database you'd like to work with"
)
input("Press Enter to continue after you have this information...")
elif user_input in ["yes", "y"]:
get_sql_config()
else:
print("Invalid input. Please enter 'y' or 'n'.")
setup_completed = True
print("You are ready to proceed.")
clear_console()
print("\nPySource Command Line Interface")
help()
while True:
user_input = input("Enter a command: ")
if user_input.lower() == "exit":
break
if user_input.lower() == "help":
help()
if setup_completed:
run_script(user_input)
else:
print("Error: Setup not completed. Use 'help' to see available commands.")
if __name__ == "__main__":
main()

1
requirements.txt Normal file
View File

@ -0,0 +1 @@
pyodbc

0
src/__init__.py Normal file
View File

8
src/help.py Normal file
View File

@ -0,0 +1,8 @@
def help():
print("\nAvailable Commands:\n")
print("listDatabases - Lists all Databases in the SQL Server as defined in your sql_config.json")
print("listTables - Lists all tables in the Database that's configured in your sql_config.json")
print("productData - Saves a CSV with data for all products to the Output folder with the following information: \n tProduct_ID,Sku,Product_Type,Product_Code,ShortDescription,IsActive")
print("skuCost - Saves a CSV file for each Product Category to the Output folder that contains the items sku and associated cost")
print("help - Display available commands")
print("exit - Quit the program\n")

30
src/listDatabases.py Normal file
View File

@ -0,0 +1,30 @@
import pyodbc
from util.sqlHandler import read_sql_config
# Read SQL credentials from the JSON file
sql_server, sql_database, sql_user, sql_password, connection_string = read_sql_config()
# Connect to the database
try:
connection = pyodbc.connect(connection_string)
except pyodbc.Error as e:
print(f"Error connecting to the database: {e}")
exit()
# Define the SQL query
sql_query = "SELECT name FROM sys.databases;"
# Execute the query and fetch the results
try:
cursor = connection.cursor()
cursor.execute(sql_query)
rows = cursor.fetchall()
for row in rows:
print(row.name)
except pyodbc.Error as e:
print(f"Error executing the query: {e}")
finally:
# Close the cursor and connection
cursor.close()
connection.close()

31
src/listTables.py Normal file
View File

@ -0,0 +1,31 @@
import pyodbc
from util.sqlHandler import read_sql_config
# Read SQL credentials from the JSON file
sql_server, sql_database, sql_user, sql_password, connection_string = read_sql_config()
# Connect to the database
try:
connection = pyodbc.connect(connection_string)
except pyodbc.Error as e:
print(f"Error connecting to the database: {e}")
exit()
# Get a list of all tables in the database
tables = []
try:
cursor = connection.cursor()
cursor.execute("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';")
rows = cursor.fetchall()
tables = [row.TABLE_NAME for row in rows]
except pyodbc.Error as e:
print(f"Error fetching table names: {e}")
# Print the names of all tables
for table in tables:
print(table)
# Close the cursor and connection
cursor.close()
connection.close()

51
src/productData.py Normal file
View File

@ -0,0 +1,51 @@
import pyodbc
import csv
from util.sqlHandler import read_sql_config
# Read SQL credentials from the JSON file
sql_server, sql_database, sql_user, sql_password, connection_string = read_sql_config()
# Connect to the database
try:
connection = pyodbc.connect(connection_string)
except pyodbc.Error as e:
print(f"Error connecting to the database: {e}")
exit()
# Define the table name and columns of interest
table_name = 'tProduct'
columns_of_interest = ['tProduct_ID', 'Sku', 'Product_Type', 'Product_Code', 'ShortDescription', 'IsActive']
# Retrieve data from the specified columns where IsActive=1
data = []
try:
cursor = connection.cursor()
column_names = ', '.join(columns_of_interest)
query = f"SELECT {column_names} FROM {table_name} WHERE IsActive = 1;"
cursor.execute(query)
rows = cursor.fetchall()
data = [list(row) for row in rows]
except pyodbc.Error as e:
print(f"Error fetching data: {e}")
# Define the CSV file path
csv_file_path = 'output/tProduct_data.csv'
# Save the retrieved data to a CSV file
try:
with open(csv_file_path, 'w', newline='') as csv_file:
csv_writer = csv.writer(csv_file)
# Write the header row
csv_writer.writerow(columns_of_interest)
# Write the data rows
csv_writer.writerows(data)
print(f"Data saved to {csv_file_path}")
except IOError as e:
print(f"Error saving data to CSV: {e}")
# Close the cursor and connection
cursor.close()
connection.close()

58
src/skuCost.py Normal file
View File

@ -0,0 +1,58 @@
import pyodbc
import csv
import os
from util.sqlHandler import read_sql_config
# Read SQL credentials from the JSON file
sql_server, sql_database, sql_user, sql_password, connection_string = read_sql_config()
# Connect to the database
try:
connection = pyodbc.connect(connection_string)
except pyodbc.Error as e:
print(f"Error connecting to the database: {e}")
exit()
# Define the directory to save CSV files
output_directory = 'output/product_type_csv'
os.makedirs(output_directory, exist_ok=True)
# Define the SQL query to retrieve data
query = """
SELECT tProduct.Product_Type, tProduct.Sku, tCost.Cost
FROM tProduct
INNER JOIN tProductgroup_Product
ON tProduct.tProduct_ID = tProductgroup_Product.tProduct_ID
INNER JOIN tCost
ON tProductgroup_Product.tProductgroup_Product_ID = tCost.tProductgroup_Product_ID
WHERE tProduct.IsActive = 1
"""
# Execute the SQL query
try:
cursor = connection.cursor()
cursor.execute(query)
# Fetch the data and group by Product_Type
data = {}
for row in cursor.fetchall():
product_type, sku, cost = row
if product_type not in data:
data[product_type] = []
data[product_type].append((sku, cost))
except pyodbc.Error as e:
print(f"Error executing SQL query: {e}")
exit()
# Close the cursor and connection
cursor.close()
connection.close()
# Save data to separate CSV files for each Product_Type
for product_type, rows in data.items():
csv_file_path = os.path.join(output_directory, f"{product_type}_data.csv")
with open(csv_file_path, 'w', newline='') as csv_file:
csv_writer = csv.writer(csv_file)
csv_writer.writerow(['Sku', 'Cost'])
csv_writer.writerows(rows)
print(f"Data for {product_type} saved to {csv_file_path}")

0
src/util/__init__.py Normal file
View File

13
src/util/sqlHandler.py Normal file
View File

@ -0,0 +1,13 @@
import json
def read_sql_config(filename="sql_config.json"):
with open(filename, "r") as config_file:
config = json.load(config_file)
sql_server = config["sql_server"]
sql_database = config["sql_database"]
sql_user = config["sql_user"]
sql_password = config["sql_password"]
connection_string = f'DRIVER={{ODBC Driver 17 for SQL Server}};SERVER={sql_server};DATABASE={sql_database};UID={sql_user};PWD={sql_password}'
return sql_server, sql_database, sql_user, sql_password, connection_string