Compare commits
6 Commits
convert_to
...
public_lis
| Author | SHA1 | Date | |
|---|---|---|---|
| 1e115bddee | |||
| 2f2524a5c4 | |||
| f4a0af33b0 | |||
| e44385473f | |||
| 324f01df5e | |||
| 19e6a43847 |
@@ -8,14 +8,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="RestSharp" Version="110.2.0" />
|
||||
<PackageReference Include="Selenium.WebDriver" Version="4.10.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="usedList.csv">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -12,7 +12,6 @@ namespace CardmarketBot
|
||||
{
|
||||
private readonly string username;
|
||||
private readonly string password;
|
||||
private readonly IUsedRepository _usedRepository;
|
||||
|
||||
Dictionary<string, Helper.Porto> portoberechnung = new Dictionary<string, Helper.Porto>()
|
||||
{
|
||||
@@ -24,11 +23,10 @@ namespace CardmarketBot
|
||||
{"3,20 €", Helper.Porto.PRIO270 },
|
||||
};
|
||||
|
||||
public CardMarketParser(string username, string password, IUsedRepository repository)
|
||||
public CardMarketParser(string username, string password)
|
||||
{
|
||||
this.username = username;
|
||||
this.password = password;
|
||||
_usedRepository = repository;
|
||||
}
|
||||
|
||||
public List<Kunde> ParseCardMarket()
|
||||
@@ -64,24 +62,22 @@ namespace CardmarketBot
|
||||
|
||||
List<string> ids = new List<string>();
|
||||
List<Kunde> kunden = new List<Kunde>();
|
||||
|
||||
IWebElement element;
|
||||
try
|
||||
{
|
||||
element = cd.FindElement(By.XPath("/html/body/main/section/div[3]/div[3]/div[2]"));
|
||||
element = cd.FindElement(By.XPath("/html/body/main/section/div[3]/div[4]"));
|
||||
|
||||
string content = element.Text;
|
||||
|
||||
List<string> bereitsbearbeitet = _usedRepository.Query;
|
||||
|
||||
string[] datas = content.Split("\r\n");
|
||||
|
||||
|
||||
for (int i = 0; i < datas.Length; i += 7)
|
||||
for (int i = 8; i < datas.Length; i += 7)
|
||||
{
|
||||
if (bereitsbearbeitet.Find(x => x.Equals(datas[i])) != null) continue;
|
||||
ids.Add(datas[i]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
catch(OpenQA.Selenium.NotFoundException ex)
|
||||
{
|
||||
@@ -91,8 +87,8 @@ namespace CardmarketBot
|
||||
|
||||
foreach (string id in ids)
|
||||
{
|
||||
|
||||
Console.WriteLine(id);
|
||||
//if (id != "1121844928") continue;
|
||||
//Console.WriteLine(id);
|
||||
cd.Navigate().GoToUrl(string.Format(@"https://www.cardmarket.com/de/OnePiece/Orders/{0}", id));
|
||||
element = cd.FindElement(By.XPath("/html/body/main/section/div/div[1]/div/div[3]/div[2]/div[2]/div/div"));
|
||||
|
||||
@@ -113,7 +109,7 @@ namespace CardmarketBot
|
||||
else
|
||||
{
|
||||
kunde.OverrideVersandskosten = element.Text;
|
||||
Console.WriteLine(@"Achtung bei ID {id} wurde kein Richtige Porto berechnet. Liegt es im Ausland?");
|
||||
Console.WriteLine($"Achtung bei ID {id} wurde kein Richtige Porto berechnet. Liegt es im Ausland?");
|
||||
}
|
||||
//kunde.Versandskosten = portoberechnung[element.Text];
|
||||
kunde.BestellungID = id;
|
||||
@@ -127,8 +123,9 @@ namespace CardmarketBot
|
||||
|
||||
|
||||
kunden.Add(kunde);
|
||||
Thread.Sleep(TimeSpan.FromSeconds(5));
|
||||
Thread.Sleep(TimeSpan.FromSeconds(3));
|
||||
}
|
||||
cd.Quit();
|
||||
return kunden;
|
||||
}
|
||||
}
|
||||
|
||||
118
ConsoleApp3/CheckSevDeskPublicList.cs
Normal file
118
ConsoleApp3/CheckSevDeskPublicList.cs
Normal file
@@ -0,0 +1,118 @@
|
||||
using ConsoleApp3.Contracts;
|
||||
using OpenQA.Selenium.DevTools;
|
||||
using OpenQA.Selenium.Support.UI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace CardMarketBot
|
||||
{
|
||||
internal class CheckSevDeskPublicList : ICheckSevDesk
|
||||
{
|
||||
private static readonly object _lock = new object();
|
||||
private static bool _closed;
|
||||
|
||||
enum EResult
|
||||
{
|
||||
FAILED,
|
||||
AVAIBLE,
|
||||
OK,
|
||||
WRITTEN
|
||||
}
|
||||
private static void Write(TcpClient client, string str)
|
||||
{
|
||||
try
|
||||
{
|
||||
SocketShutdown reason = SocketShutdown.Send;
|
||||
lock (_lock)
|
||||
{
|
||||
BinaryWriter writer = new BinaryWriter(client.GetStream());
|
||||
writer.Write(str);
|
||||
if (_closed)
|
||||
{
|
||||
reason = SocketShutdown.Both;
|
||||
}
|
||||
}
|
||||
//client.Client.Shutdown(reason);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
Console.WriteLine($"IOException writing to socket: {e.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private static EResult Read(TcpClient client)
|
||||
{
|
||||
try
|
||||
{
|
||||
//while(true)
|
||||
//{
|
||||
try
|
||||
{
|
||||
if (!client.Connected)
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
_closed = true;
|
||||
//break;
|
||||
}
|
||||
}
|
||||
BinaryReader reader = new BinaryReader(client.GetStream());
|
||||
string res = reader.ReadString();
|
||||
if (res.Contains("OK"))
|
||||
return EResult.OK;
|
||||
return EResult.FAILED;
|
||||
}
|
||||
catch (EndOfStreamException)
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
_closed = true;
|
||||
}
|
||||
return EResult.FAILED;
|
||||
}
|
||||
//client.Client.Shutdown(SocketShutdown.Receive);
|
||||
//}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
return EResult.FAILED;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public bool AlreadyKnown(string verkaufsnummer)
|
||||
{
|
||||
try
|
||||
{
|
||||
TcpClient client = new TcpClient("nas.cosysda.de", 4000);
|
||||
Write(client, string.Format("#TEST#{0}", verkaufsnummer));
|
||||
EResult result = Read(client);
|
||||
|
||||
client.Client.Shutdown(SocketShutdown.Both);
|
||||
client.Close();
|
||||
|
||||
return result == EResult.OK;
|
||||
}
|
||||
catch(SocketException e)
|
||||
{
|
||||
throw new SocketException();
|
||||
}
|
||||
}
|
||||
|
||||
public bool Write(string verkaufsnummer)
|
||||
{
|
||||
TcpClient client = new TcpClient("nas.cosysda.de", 4000);
|
||||
Write(client, string.Format("#WRITE#{0}", verkaufsnummer));
|
||||
EResult result = Read(client);
|
||||
client.Client.Shutdown(SocketShutdown.Both);
|
||||
client.Close();
|
||||
return result == EResult.OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
8
ConsoleApp3/Contracts/ICheckSevDesk.cs
Normal file
8
ConsoleApp3/Contracts/ICheckSevDesk.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace ConsoleApp3.Contracts
|
||||
{
|
||||
internal interface ICheckSevDesk
|
||||
{
|
||||
bool AlreadyKnown(string verkaufsnummer);
|
||||
bool Write(string verkaufsnummer);
|
||||
}
|
||||
}
|
||||
@@ -86,7 +86,7 @@ namespace ConsoleApp3.DataContracts
|
||||
/// <value>time left for paying the invoice, use format dd.MM.yyyy or number for number of days left</value>
|
||||
[DataMember(Name = "timeToPay", EmitDefaultValue = false)]
|
||||
[JsonProperty(PropertyName = "timeToPay")]
|
||||
public DateTime? TimeToPay { get; set; }
|
||||
public int? TimeToPay { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
// See https://aka.ms/new-console-template for more information
|
||||
|
||||
using System.Diagnostics;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
static class Helper
|
||||
{
|
||||
public enum Porto
|
||||
{
|
||||
FAILED,
|
||||
BRIEF085,
|
||||
BRIEF100,
|
||||
BRIEF160,
|
||||
@@ -16,9 +20,9 @@ static class Helper
|
||||
|
||||
string[] datas = text.Split("\r\n");
|
||||
string name = datas[0];
|
||||
string adresseUNDHausnummer = datas[1];
|
||||
string plzUNDOrt = datas[2];
|
||||
string land = datas[3];
|
||||
string adresseUNDHausnummer = datas[datas.Length-3];
|
||||
string plzUNDOrt = datas[datas.Length-2];
|
||||
string land = datas[datas.Length-1];
|
||||
|
||||
datas = plzUNDOrt.Split(" ");
|
||||
string plz = datas[0];
|
||||
@@ -26,13 +30,25 @@ static class Helper
|
||||
|
||||
datas = adresseUNDHausnummer.Split(" ");
|
||||
string strasse = "";
|
||||
for (int i = 0; i < datas.Length - 1; i++)
|
||||
string hausnummer = "";
|
||||
Trace.WriteLine(datas.Length);
|
||||
if (datas.Length <= 1)
|
||||
{
|
||||
strasse += datas[i] + " ";
|
||||
Regex myRegex = new Regex("[0-9]*$");
|
||||
var matched = myRegex.Match(adresseUNDHausnummer);
|
||||
strasse = adresseUNDHausnummer.Substring(0, matched.Index);
|
||||
hausnummer = adresseUNDHausnummer.Substring(matched.Index);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
for (int i = 0; i < datas.Length - 1; i++)
|
||||
{
|
||||
strasse += datas[i] + " ";
|
||||
}
|
||||
strasse = strasse.Trim();
|
||||
hausnummer = datas[datas.Length - 1];
|
||||
}
|
||||
strasse = strasse.Trim();
|
||||
string hausnummer = datas[datas.Length - 1];
|
||||
|
||||
return new Kunde(name, strasse, hausnummer, plz, ort, land);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// See https://aka.ms/new-console-template for more information
|
||||
|
||||
using ConsoleApp3.DataContracts;
|
||||
using System.Diagnostics;
|
||||
|
||||
/*
|
||||
*
|
||||
@@ -48,6 +49,12 @@ namespace CardmarketBot
|
||||
{
|
||||
List<ModelRechnung> result = new List<ModelRechnung>();
|
||||
|
||||
// 1 => Deutschland
|
||||
// 2 => Schweiz
|
||||
// 11 => Frankreich
|
||||
|
||||
|
||||
|
||||
foreach (Kunde kunde in kunden)
|
||||
{
|
||||
ModelRechnung temp = new ModelRechnung();
|
||||
@@ -57,16 +64,16 @@ namespace CardmarketBot
|
||||
//rechnung.InvoiceNumber = string.Format("RE-{0}", await GetNextInvoiceNumber()); => Should be done by services.
|
||||
rechnung.InvoiceDate = kunde.Bezahldatum;
|
||||
rechnung.Header = string.Format("Verkauf #{0}",kunde.BestellungID);
|
||||
rechnung.HeadText = "Sehr geehrte Damen und Herren," +
|
||||
"Wir stellen Ihnen für Ihre bestellung folgende Rechnung." +
|
||||
"Bitte Beachte, dass der Lieferdatum die Bestelldatum entspricht.";
|
||||
rechnung.HeadText = "Sehr geehrte Damen und Herren, " +
|
||||
"wir stellen Ihnen für ihre Bestellung folgende Rechnung. " +
|
||||
"Bitte Beachte, dass das Lieferdatum dem Bestelldatum entspricht.";
|
||||
rechnung.FootText = "Ihre Rechnung ist bereits über Cardmarket beglichen worden.";
|
||||
rechnung.TimeToPay = new DateTime(0);
|
||||
rechnung.TimeToPay = 14;
|
||||
rechnung.Discount = 0;
|
||||
rechnung.Address = string.Format("{0}\n{1} {2}\n{3} {4}", kunde.Name, kunde.Strasse, kunde.Hausnummer, kunde.Plz, kunde.Ort); //"Damian Wessels\nDät Haartje 27A\n26683 Saterland";
|
||||
rechnung.AddressCountry = new ModelStaticCountry()
|
||||
{
|
||||
Id = 1
|
||||
Id = 2
|
||||
};
|
||||
//rechnung.PayDate = new DateTime(2019, 08, 24, 14, 15, 22);
|
||||
rechnung.DeliveryDate = kunde.Bezahldatum;
|
||||
@@ -110,14 +117,22 @@ namespace CardmarketBot
|
||||
Id = null,
|
||||
MapAll = true,
|
||||
Quantity = 1,
|
||||
Price = PortoPreis[kunde.Versandskosten],
|
||||
Name = "Versandskosten",
|
||||
PositionNumber = 0,
|
||||
Discount = 0,
|
||||
TaxRate = 19,
|
||||
PriceGross = PortoPreis[kunde.Versandskosten],
|
||||
PriceTax = 19
|
||||
};
|
||||
if(kunde.OverrideVersandskosten != null)
|
||||
{
|
||||
temp.InvoicePosSaves[temp.InvoicePosSaves.Length - 1].Price = Convert.ToDecimal(kunde.OverrideVersandskosten);
|
||||
temp.InvoicePosSaves[temp.InvoicePosSaves.Length - 1].Price = Convert.ToDecimal(kunde.OverrideVersandskosten);
|
||||
}
|
||||
else
|
||||
{
|
||||
temp.InvoicePosSaves[temp.InvoicePosSaves.Length - 1].Price = PortoPreis[kunde.Versandskosten];
|
||||
temp.InvoicePosSaves[temp.InvoicePosSaves.Length - 1].PriceGross = PortoPreis[kunde.Versandskosten];
|
||||
}
|
||||
result.Add(temp);
|
||||
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ class Kunde
|
||||
string plz;
|
||||
string ort;
|
||||
string land;
|
||||
|
||||
List<Artikel> artikels = new List<Artikel>();
|
||||
public DateTime Bezahldatum { get; set; }
|
||||
|
||||
@@ -48,5 +49,6 @@ class Kunde
|
||||
plz = PLZ;
|
||||
ort = Ort;
|
||||
land = Land;
|
||||
Versandskosten = Helper.Porto.FAILED;
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,30 @@
|
||||
using ConsoleApp3.DataContracts;
|
||||
using ConsoleApp3;
|
||||
using ConsoleApp3.Contracts;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using OpenQA.Selenium.DevTools.V112.Network;
|
||||
using OpenQA.Selenium.DevTools.V112.Debugger;
|
||||
using CardMarketBot;
|
||||
|
||||
namespace CardmarketBot
|
||||
{
|
||||
internal class Programm
|
||||
{
|
||||
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
|
||||
IUsedRepository usedRepository = new UsedRepository();
|
||||
ICheckSevDesk checkSevDesk = new CheckSevDeskPublicList();
|
||||
|
||||
|
||||
|
||||
// Kunden aus Cardmarket erstellen
|
||||
List<Kunde> kunden = new List<Kunde>();
|
||||
CardMarketParser cardMarketParser = new CardMarketParser("More-Tcg", "Magnatpower310!!", usedRepository);
|
||||
CardMarketParser cardMarketParser = new CardMarketParser("More-Tcg", "Magnatpower310!!");
|
||||
kunden = cardMarketParser.ParseCardMarket();
|
||||
|
||||
|
||||
@@ -24,24 +34,44 @@ namespace CardmarketBot
|
||||
InvoiceParser invoiceParser = new InvoiceParser(kunden);
|
||||
rechnungen = invoiceParser.GetInvoices();
|
||||
|
||||
|
||||
|
||||
foreach (var item in rechnungen)
|
||||
|
||||
|
||||
foreach (ModelRechnung item in rechnungen)
|
||||
{
|
||||
SevdeskService sevdeskService = new SevdeskService("7251554968610b78ca865b2b774b4134");
|
||||
sevdeskService.Create(item);
|
||||
|
||||
var str_header = item.Invoice.Header;
|
||||
if (str_header != null)
|
||||
{
|
||||
Regex regex = new Regex("[0-9]*$");
|
||||
Match matched = regex.Match(str_header);
|
||||
string verkaufnummer = str_header.Substring(matched.Index);
|
||||
Console.Write($"Teste {verkaufnummer} : ");
|
||||
if (checkSevDesk.AlreadyKnown(verkaufnummer))
|
||||
{
|
||||
Console.Write("wurde noch nicht in Sevdesk erfasst ");
|
||||
SevdeskService sevdeskService = new SevdeskService("7251554968610b78ca865b2b774b4134");
|
||||
sevdeskService.Create(item);
|
||||
Console.WriteLine("nun in Sevdesk eingetragen");
|
||||
checkSevDesk.Write(verkaufnummer);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("wurde bereits in Sevdesk erfasst, wird somit übersprungen. Jedoch wird PostCSV erstellt");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Post CSV Erstellen
|
||||
DeutschePost deutschePost = new DeutschePost(kunden);
|
||||
deutschePost.GenerateCSV();
|
||||
|
||||
|
||||
usedRepository.Insert(kunden);
|
||||
|
||||
Console.WriteLine("Fertig");
|
||||
Console.ReadLine();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
12
ConsoleApp3/SocketClient.cs
Normal file
12
ConsoleApp3/SocketClient.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace CardMarketBot
|
||||
{
|
||||
internal class SocketClient
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
|
|
Reference in New Issue
Block a user