فرض کنید در حال طراحی یک سیستم فروش هستید، در این سیستم شما موجودیت سند `Voucher` خواهید داشت که خود می تواند شامل چندین ردیف اقلام `VoucherSub` باشد. ردیف اقلام نیز داری چندین خصیصه است که یکتایی ردیف را مشخص می کند. کلاس دیاگرام سیستم بصورت زیر است:
![توضیح تصویر](https://quera.org/qbox/view/dSzF3xN48h/1.png)
هر ردیف اقلام (`VoucherSub`) شامل کالا، تعداد و فی است. با استفاده از قابلیت `Operator Overloading`در سیشارپ، پیادهسازیی انجام دهید که بتوان ۲ سند را به راحتی با عملگر `+` ، با هم جمع زد که شرایط زیر را حفظ کنند.
1. برای دانلود فایل پروژه بر روی [این لینک](/problemset/assignments/4367/download_problem_initial_project/197311/) کلیک کنید
2. در صورت جمع ۲ سند، تمامی ردیفهای غیرتکراری دو سند قبل در یک سند جدید باید اضافه شود.
![توضیح تصویر](https://quera.org/qbox/view/Ib8FVzu2tP/2.png)
> تکراری بودن به معنای یکسان بود کد کالا است.
3. اگر ردیفی کالاهای آن ادغام پذیر باشد یک ردیف جدید ایجاد خواهد شد که تعداد برابر با جمع تعداد ردیفهای هم نوع، و مبلغ برابر بزرگترین مبلغ ردیف خواهد بود.
![توضیح تصویر](https://quera.org/qbox/view/nZDmizYZbM/3.png)
> ادغام پذیر بودن به این معناست که `IsMergeable == ture` و در زمان ادغام بزرگترین مبلغ ردیفها در ستون `Price` قرار داده میشود.
4. به ازای ردیفهایی که کالای تکراری دارند و ادغام پذیر نیستند برای هر کدام یک ردیف جدید درج شود.
![توضیح تصویر](https://quera.org/qbox/view/59LJD4pLV6/4.png)
5. بعد از افزودن اقلام، مبلغ نهایی فاکتور باید محاسبه شود. `TotalPrice = SUM(all-vouchersub.price)`
6. تاریخ تحویل در سند جدید برابر است با بزرگترین تاریخ تحویل. `delivery date`
7. در زمان درج هر ردیف، باید شماره ردیف لحاظ گردد. `RowNumber`