This commit is contained in:
Hüseyin
2026-06-16 09:07:10 +03:00
parent 2dfda9d553
commit bd08898bf1
91 changed files with 15477 additions and 11812 deletions

View File

@@ -1,11 +1,16 @@
package srv
import (
"bordrobot/lib/bot"
"bordrobot/lib/company"
"bordrobot/lib/run"
"fmt"
"log/slog"
"strings"
"github.com/shopspring/decimal"
"github.com/wailsapp/wails/v3/pkg/application"
"github.com/xuri/excelize/v2"
"log/slog"
)
type Srv struct {
@@ -28,10 +33,25 @@ func (s *Srv) CreateCompany(name, memberNumber, username, password string) error
return c.Create()
}
func (s *Srv) EditCompany(id float64, name, memberNumber, username, password string) error {
c := &company.Company{
Id: int(id),
Name: name,
MemberNumber: memberNumber,
Username: username,
Password: password,
}
return c.Edit()
}
func (s *Srv) UploadExcel() string {
dialog := application.OpenFileDialog()
dialog.AddFilter("Excel Dosyaları", "*.xls;*.xlsx")
// dialog.AddFilter("Excel Dosyaları", "*.xls;*.xlsx;*.ods")
dialog.AddFilter("Excel 97-2003", "*.xls")
dialog.AddFilter("Excel 2007+", "*.xlsx")
dialog.AddFilter("LibreOffice Calc", "*.ods")
dialog.SetTitle("Bordro Excel Dosyası Yükleme")
file, err := dialog.PromptForSingleSelection()
if err != nil {
@@ -41,11 +61,38 @@ func (s *Srv) UploadExcel() string {
return file
}
func (s *Srv) Rpa(companyName string, month float64, year float64) error {
//todo: readb company details by name
//todo: save xls to application folder as /name/year/month.xlsx
type userInfo struct {
userName string
password string
accountNo string
}
//wails nümerik değerleri float gönderiyor.. int gönderimi araştırılmalı
func (s *Srv) Rpa(companyID float64, month float64, year float64, devMode bool) error {
type CompanyInfo struct {
company *company.Company // float64.Company türünü gömme
month float64 // yeni bir alan ekliyoruz
year float64
}
user, err := company.GetCompany(companyID)
if err != nil {
return err
}
// companyInfo := CompanyInfo{
// company: &user,
// month: month,
// year: year,
// }
//todo: readb company details by name
b := bot.NewLucaBot(devMode)
emitLog("Aktarım Başladı")
err = b.Login(user, month, year)
if err != nil {
//todo: inform user about process and errors
emitLog("Şifreniz Hatalı")
return nil
}
err = b.PayrollPageLogin()
slog.Debug("inputs", "year", year, "month", month)
f, err := excelize.OpenFile(s.xlsFileName)
@@ -62,21 +109,170 @@ func (s *Srv) Rpa(companyName string, month float64, year float64) error {
}()
sheets := f.GetSheetList()
cols, err := f.GetCols(sheets[0])
rows, err := f.GetRows(sheets[0])
fmt.Println(rows)
if err != nil {
slog.Error(err.Error())
return err
}
for _, row := range cols {
//todo: process excel and do data input
if len(rows) < 3 {
emitLog("Boş Excel Yüklemesi")
b.ClosingBrowserFromExternalLink()
return nil
}
// if rows[0][0] == "" {
// rows = rows[1:]
// }
// type hashtagValue struct {
// B string
// N string
// G string
// S string
// }
// checkHeader := make(map[string]*hashtagValue)
//todo: inform user about process and errors
run.APP.Events.Emit(&application.WailsEvent{
Name: "logProcess",
Data: row[1],
})
// for _, col := range rows[0] {
// if strings.Contains(col, "Cagatay") {
// fmt.Print("deneme")
// }
// var keySplitOne string
// hs := &hashtagValue{
// B: "",
// N: "",
// G: "",
// S: "",
// }
// key := col
// if strings.Contains(col, "#") {
// keySplit := strings.SplitN(col, " #", 2)
// key = strings.TrimSpace(keySplit[0])
// keySplitOne = strings.TrimSpace(keySplit[0])
// fmt.Print(keySplitOne)
// if existingHS, ok := checkHeader[key]; ok {
// hs = existingHS
// }
// // Burada keySplitOne değerine göre hs struct'ının hangi alanını dolduracağımızı belirliyoruz
// if keySplit[1] == "B" {
// hs.B = keySplit[1]
// } else if keySplit[1] == "N" {
// hs.N = keySplit[1]
// } else if keySplit[1] == "G" {
// hs.G = keySplit[1]
// } else if keySplit[1] == "S" {
// hs.S = keySplit[1]
// }
// }
// checkHeader[key] = hs
// }
var lastItem bool = false
// data := make([]*model.Bordro, 0) // []*Bordro türünde bir dilim oluştur
for i := 1; i < len(rows); i++ {
brd := &bot.LucaBordro{
Sube: rows[i][0],
Bolum: rows[i][1],
TcNo: rows[i][2],
AdSoyad: rows[i][3],
Ucretler: make(map[string]decimal.Decimal),
//Header: make(map[string]string),
}
var status bool = false
//var ExcelError string
for ndx, col := range rows[i] {
if ndx > 3 {
key := rows[0][ndx]
if strings.Contains(key, "#") {
keySplit := strings.SplitN(key, " #", 2)
keySplitOne := strings.TrimSpace(keySplit[0])
tseK := strings.TrimSpace(keySplit[1])
fmt.Print(tseK)
for k, d := range brd.Ucretler {
if strings.Contains(k, keySplitOne) { //k=olan
a := d.String()
fmt.Print(a)
if strings.Contains(k, "B") && strings.Contains(tseK, "N") {
if col != "" && a != "0" {
emitLog(key + " : aynı anda B ve N Sütunu Girilemez ")
status = true
break
}
}
if strings.Contains(k, "N") && strings.Contains(tseK, "B") {
if col != "" && a != "0" {
emitLog(key + " : aynı anda N ve B Sütunu Girilemez ")
status = true
break
}
}
if strings.Contains(k, "G") && strings.Contains(tseK, "S") {
if col != "" && a != "0" {
emitLog(key + ": aynı anda G ve S Sütunu Girilemez ")
status = true
break
}
}
if strings.Contains(k, "S") && strings.Contains(tseK, "G") {
if col != "" && a != "0" {
emitLog(key + ": aynı anda S ve G Sütunu Girilemez ")
status = true
break
}
}
}
}
if status {
break
}
}
brd.Ucretler[key], err = decimal.NewFromString(col)
if err != nil {
if strings.Contains(col, ",") {
col = strings.Replace(col, ",", "", -1)
brd.Ucretler[key], err = decimal.NewFromString(col)
if err != nil {
fmt.Print(err)
}
}
// emitLog(`excel okunurken sorun oluştu`)
fmt.Println(err)
}
}
}
if status {
continue
}
if i == len(rows)-1 {
lastItem = true
}
err := b.BordroYaz(int(month), int(year), brd, lastItem)
var str string
if err != nil {
emitLog("Şube : " + brd.Sube + "Bölüm : " + brd.Bolum + "Kullanıcı Adı: " + brd.AdSoyad + err.Error())
} else {
str = "Şube : " + brd.Sube + "Bölüm : " + brd.Bolum + "işlem başarılı, " + "Kullanıcı Adı: " + brd.AdSoyad
emitLog(str)
}
}
emitLog("İşlem Tamamlandı")
b.ClosingBrowserFromExternalLink()
return nil
}
func emitLog(logMessage string) {
run.APP.Events.Emit(&application.WailsEvent{
Name: "logProcess",
Data: logMessage,
})
}