merge
This commit is contained in:
@@ -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,
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user