275 lines
6.3 KiB
Go
275 lines
6.3 KiB
Go
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"
|
||
)
|
||
|
||
type Srv struct {
|
||
xlsFileName string
|
||
}
|
||
|
||
func (s *Srv) Companies() ([]company.Company, error) {
|
||
var res []company.Company
|
||
err := run.DB.Select(&res, "SELECT * FROM company order by 1")
|
||
return res, err
|
||
}
|
||
|
||
func (s *Srv) CreateCompany(name, memberNumber, username, password string) error {
|
||
c := &company.Company{
|
||
Name: name,
|
||
MemberNumber: memberNumber,
|
||
Username: username,
|
||
Password: password,
|
||
}
|
||
|
||
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.SetTitle("Bordro Excel Dosyası Yükleme")
|
||
file, err := dialog.PromptForSingleSelection()
|
||
if err != nil {
|
||
return ""
|
||
}
|
||
s.xlsFileName = file
|
||
return file
|
||
}
|
||
|
||
type userInfo struct {
|
||
userName string
|
||
password string
|
||
accountNo string
|
||
}
|
||
|
||
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)
|
||
if err != nil {
|
||
slog.Error(err.Error())
|
||
return err
|
||
}
|
||
defer func() {
|
||
// Close the spreadsheet.
|
||
if err := f.Close(); err != nil {
|
||
slog.Error(err.Error())
|
||
//return err
|
||
}
|
||
}()
|
||
|
||
sheets := f.GetSheetList()
|
||
rows, err := f.GetRows(sheets[0])
|
||
fmt.Println(rows)
|
||
if err != nil {
|
||
slog.Error(err.Error())
|
||
return err
|
||
}
|
||
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)
|
||
|
||
// 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,
|
||
})
|
||
}
|