Создать + группировать новую строку счета на основе даты пользователя - PullRequest
0 голосов
/ 04 декабря 2018

Мой сценарий следующий:

Пользователь назначается одной или нескольким группам счетов-фактур (которые содержат подробную информацию: имя пользователя).

Группа товаров (= InvoiceLine) имеет:

  • ID
  • Имя
  • Количество
  • Стоимость
  • Стоимость установки

itemgroupDetail (= InvoiceLineDetail) имеет:

  • ID
  • ItemgroupID
  • Имя пользователя
*Однако количество 1028 * My зависит от количества пользователей.

Пример:

Пользователь A, зарегистрированный в ноябре 2018 года, находится в списке «Группа G1».

Пользователь A, зарегистрированный в ноябре 2018 года, находится в списке «Группа G2».

Пользователь B, Зарегистрированный в ноябре 2018 года, находится в списке «Группа G3».

Пользователь B, зарегистрированный в марте 2018 года, находится в списке «Группа G1».

Пользователь C, зарегистрированный в марте 2018 года, находится в списке «Группа G3»

За что нужно выставить счет?Все группы товаров.Но если пользователь присоединяется в течение месяца выставления счета, сама группа также должна быть отдельной строкой счета-фактуры (поскольку новым пользователям необходимо выставлять счет один раз с затратами на настройку, в какую группу он входит).

Мои счета-фактуры (результат) должны выглядеть следующим образом:

Quantity    Itemgroup   
    2       G1
    1       G2
    2       G3
    1       G1 NEW
    1       G2 NEW
    1       G3 NEW

Моя проблема в том, что я не знаю, как мне следует решать тот факт, что мне нужно динамически создавать новые счета-фактуры (с новыми подробностями)).

Это код, который, как я знаю, имеет:

Я начинаю с создания строк счета-фактуры (но я НЕ УСТАНАВЛИВАЮЮ количество YET):

 public List<Company_Recurring_Invoice_Line> getInvoiceLines(int invoiceID)
        {
            List<Company_Recurring_Invoice_Line> lines = new List<Company_Recurring_Invoice_Line>();
            SqlCommand command = new SqlCommand(@"SELECT * FROM ITEMGROUPS", conn);
            command.Parameters.Add("@invoiceID", SqlDbType.Int).Value = invoiceID;
            conn.Open();
            SqlDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                Company_Recurring_Invoice_Line line = new Company_Recurring_Invoice_Line();
                line.invoiceID = invoiceID;
                line.itemgroupID = int.Parse(reader["id"].ToString());
                line.unitPrice = decimal.Parse(reader["price"].ToString());
                line.description = reader["name"].ToString();
                lines.Add(line);
            }
            conn.Close();
            return lines;
        }

Здесь и далееВ каждой строке счета-фактуры я перехожу к пользователям + задаю количество строки счета-фактуры и сохраняю детали в строке счета-фактуры:

public Company_Invoice getInvoiceLineDetails(Company_Recurring_Invoice invoice)
        {
            Company_Recurring_Invoice i = invoice;

            foreach (Company_Recurring_Invoice_Line line in i.InvoiceLines)
            {
                getInvoiceLineDetails(line);
            }
            return i;
        }

public Company_Recurring_Invoice_Line getInvoiceLineLineDetails(Company_Recurring_Invoice_Line _line)
        {
            Company_Recurring_Invoice_Line Line = _line;
            Line.InvoiceLineDetails = new List<Company_Recurring_Invoice_Line_Detail>();
            SqlCommand command = new SqlCommand(@"SELECT * FROM PERSON WHERE ITEMGROUPID = @ITEMGROUP", conn);
            command.Parameters.Add("@ITEMGROUP", SqlDbType.Int).Value = Line.itemgroupID;
            conn.Open();
            SqlDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
// We create a new detail line (with the name of the user + check it's date) 
//THIS IS WHERE I NEED TO CHECK IF THE MONTH OF THE USER = MONTH OF INVOICING AND ADD IT TO AN EXISTING OR NEW INVOICE LINE TOO 
            DateTime Date = DateTime.Parse(reader["joindate"].ToString());

                    Line.quantity++;
                    Company_Recurring_Invoice_Line_Detail detail = new Company_Recurring_Invoice_Line_Detail();
                detail.Value = reader["name"].ToString();
                detail.Company_Recurring_Invoice_Line = Line.InvoiceLineID;
                Line.InvoiceLineDetails.Add(detail);
            }
            conn.Close();
            return Line;
        }

Мой код отлично работает для пользователей, которые не являются новыми (мои строки +детали генерируются идеально), но я ломаю голову, чтобы выяснить, как я могу реализовать тот факт, что ему также необходимо создать отдельную строку счета-фактуры, ЕСЛИ дата пользователя, например, 11. Имейте в виду, что НОВЫЕ строки счета-фактурытакже должны быть заполнены более чем одним пользователем.

Как лучше всего это реализовать?Поскольку оптимизация здесь не очень важна, я думал о том, чтобы просто создать отдельные методы для этого или новых классов (сначала генерировать старые, а затем создавать новые), но могу ли я сделать это без этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...