2024-05-13 13:02:09 +03:30
using Back.Common ;
2024-07-04 18:49:11 +03:30
using Back.Data.Contracts ;
2024-05-13 13:02:09 +03:30
using Back.Data.Models ;
using Back.Services ;
using Back.Validations ;
2024-05-28 15:03:08 +03:30
using Microsoft.AspNetCore.Authorization ;
2024-05-13 13:02:09 +03:30
using Microsoft.AspNetCore.Http ;
2024-05-29 15:51:06 +03:30
using Microsoft.AspNetCore.Http.HttpResults ;
2024-05-13 13:02:09 +03:30
using Microsoft.AspNetCore.Mvc ;
using Shared.DTOs ;
using Shared.DTOs.Serch ;
2024-07-01 15:39:40 +03:30
using System.Diagnostics ;
2024-05-13 13:02:09 +03:30
namespace Back.Controllers
{
[Route("api/[controller] ")]
2024-05-28 15:03:08 +03:30
[Authorize]
2024-05-13 13:02:09 +03:30
[ApiController]
public class InvoiceController : ControllerBase
{
2024-07-04 17:18:59 +03:30
private readonly IConfiguration _configuration ;
2024-05-13 13:02:09 +03:30
private readonly servInvoice _servInvoice ;
private readonly servUser _servUser ;
private readonly AddOrUpdateInvoiceValidation _validationInvoice ;
2024-05-13 16:50:26 +03:30
private readonly servTaxPayer _servTaxPayer ;
2024-07-04 18:49:11 +03:30
private readonly IAsyncRepository < rptQueue > _rptQueueRepository ;
2024-07-04 17:18:59 +03:30
public InvoiceController ( servInvoice servInvoice , servUser servUser
, AddOrUpdateInvoiceValidation validationInvoice
2024-07-04 18:49:11 +03:30
, servTaxPayer servTaxPayer , IConfiguration configuration
, IAsyncRepository < rptQueue > rptQueueRepository )
2024-05-13 13:02:09 +03:30
{
_servInvoice = servInvoice ;
_servUser = servUser ;
_validationInvoice = validationInvoice ;
2024-07-06 16:18:23 +03:30
_configuration = configuration ;
2024-05-13 16:50:26 +03:30
_servTaxPayer = servTaxPayer ;
2024-07-04 18:49:11 +03:30
_rptQueueRepository = rptQueueRepository ;
2024-05-13 13:02:09 +03:30
}
[HttpPost("GetAll")]
2024-05-17 23:05:46 +03:30
public async Task < ActionResult < PagingDto < InvoiceGridDTO > ? > > GetAll ( [ FromBody ] ItemSerchGetInvoices itemSerch )
2024-05-13 13:02:09 +03:30
{
var claim = HttpContext . User . Claims . First ( c = > c . Type = = "UserID" ) ;
var UserID = claim . Value ;
var user = await _servUser . GetUserByUserID ( Convert . ToInt32 ( UserID ) ) ;
return Ok ( await _servInvoice . GetInvoices ( user . RolUsers . First ( ) . CompanyID , itemSerch ) ) ;
2024-05-17 23:05:46 +03:30
}
2024-05-30 15:08:36 +03:30
[HttpGet("Get/{ID}/{loaddelete}")]
2024-07-03 16:05:28 +03:30
public async Task < ActionResult < InvoiceDTO ? > > GetAll ( int ID , bool loaddelete )
2024-05-17 23:05:46 +03:30
{
var claim = HttpContext . User . Claims . First ( c = > c . Type = = "UserID" ) ;
var UserID = claim . Value ;
var user = await _servUser . GetUserByUserID ( Convert . ToInt32 ( UserID ) ) ;
2024-07-03 16:05:28 +03:30
var result = await _servInvoice . GetInvoice ( user . RolUsers . First ( ) . CompanyID , ID , ! loaddelete ) ;
2024-05-17 23:05:46 +03:30
2024-07-03 16:05:28 +03:30
return result = = null ? BadRequest ( ) : Ok ( result ) ;
2024-05-17 23:05:46 +03:30
2024-05-13 13:02:09 +03:30
}
2024-05-13 16:50:26 +03:30
[HttpPost("Add")]
public async Task < ActionResult < int > > Add ( [ FromBody ] NUInvoiceDTO item )
2024-05-13 13:02:09 +03:30
{
2024-05-26 13:04:53 +03:30
if ( string . IsNullOrEmpty ( item . InvoiceDate ) )
item . InvoiceDate = DateTime . Now . ConvertMiladiToShamsi ( ) ;
2024-05-16 23:40:32 +03:30
if ( string . IsNullOrEmpty ( item . InvoicIssueDate ) )
item . InvoicIssueDate = DateTime . Now . ConvertMiladiToShamsi ( ) ;
2024-05-26 17:25:34 +03:30
//if (!ModelState.IsValid)
// return BadRequest(item);
2024-05-13 13:02:09 +03:30
//-----GetUserAndCompany
2024-07-03 16:05:28 +03:30
var claim = HttpContext . User . Claims . First ( c = > c . Type = = "UserID" ) ;
2024-05-27 18:57:25 +03:30
var UserID = claim . Value ;
2024-05-13 13:02:09 +03:30
var user = await _servUser . GetUserByUserID ( Convert . ToInt32 ( UserID ) ) ;
//-----Validaton
var resultValidationmodel = await _validationInvoice . ValidateAsync ( Tuple . Create ( user . RolUsers . First ( ) . CompanyID , item , eActionValidation . add ) ) ;
if ( ! resultValidationmodel . IsValid )
return BadRequest ( resultValidationmodel . Errors . Select ( s = > s . ErrorMessage ) . ToList ( ) ) ;
//if (item.BillReference.HasValue)
//{
// Invoice ReferenceInvoice = await _servInvoice.GetInvoiceByInvoiceID(item.BillReference.Value);
// if (ReferenceInvoice == null) return NotFound("صورتحساب مرجع یافت نشد");
// if (await _servCompany.ExsistCompanyByComoanyIDandUserID(UserID, ReferenceInvoice.CompanyID.Value)) return Forbid("صورتحساب مرجع برای شما در دسترس نمی باشد");
//}
2024-05-27 18:57:25 +03:30
return Ok ( await _servInvoice . AddInvoice ( new Invoice ( )
2024-05-26 13:04:53 +03:30
{
Title = item . Title ,
Des = item . Des ,
invoiceType = InvoiceType . Bidding ,
CustomerID = item . CustomerID ,
CompanyID = user . RolUsers . First ( ) . CompanyID ,
InvoicIssueDate = item . InvoicIssueDate . Replace ( "/" , "" ) ,
InvoiceDate = item . InvoicIssueDate . Replace ( "/" , "" ) ,
LastChangeUserID = Convert . ToInt32 ( UserID ) ,
BillReference = null ,
IsDeleted = false ,
2024-06-08 21:48:26 +03:30
PatternID = item . PatternID ,
2024-07-03 16:05:28 +03:30
setm = 1
2024-05-26 13:04:53 +03:30
} ) ) ;
2024-05-13 13:02:09 +03:30
2024-05-13 16:50:26 +03:30
}
[HttpPut("Update")]
2024-05-27 22:01:14 +03:30
public async Task < ActionResult < bool > > Update ( [ FromBody ] NUInvoiceDTO item )
2024-05-13 16:50:26 +03:30
{
2024-05-27 22:01:14 +03:30
//if (!ModelState.IsValid)
// return BadRequest(item);
2024-05-13 16:50:26 +03:30
//-----GetUserAndCompany
var claim = HttpContext . User . Claims . First ( c = > c . Type = = "UserID" ) ;
var UserID = claim . Value ;
var user = await _servUser . GetUserByUserID ( Convert . ToInt32 ( UserID ) ) ;
//-----Validaton
var resultValidationmodel = await _validationInvoice . ValidateAsync ( Tuple . Create ( user . RolUsers . First ( ) . CompanyID , item , eActionValidation . update ) ) ;
if ( ! resultValidationmodel . IsValid )
return BadRequest ( resultValidationmodel . Errors . Select ( s = > s . ErrorMessage ) . ToList ( ) ) ;
//-----Get invoice
2024-05-26 13:04:53 +03:30
Invoice invoice = await _servInvoice . GetInvoiceByInvoiceID ( user . RolUsers . First ( ) . CompanyID , item . ID . Value ) ;
2024-05-13 16:50:26 +03:30
if ( invoice = = null )
return BadRequest ( new List < string > { "invoice notFound..." } ) ;
2024-07-23 22:30:52 +03:30
if ( invoice . PatternID ! = item . PatternID & & invoice . invoice ! = null )
{
return BadRequest ( new List < string > { "این صورتحساب دارای مرجع می باشد" + '\n' +
"امکان تغییر الگو امکان پذیر نیست" } ) ;
}
2024-08-08 00:28:17 +03:30
var CheckTaxPayer = await _servTaxPayer . ExistSuccessfulorSendorpendingInvoice ( invoice ) ;
if ( invoice . PatternID ! = item . PatternID | | invoice . CustomerID ! = item . CustomerID )
2024-05-13 16:50:26 +03:30
{
//----Check TaxPayer
2024-08-08 00:28:17 +03:30
if ( CheckTaxPayer )
2024-05-13 16:50:26 +03:30
return BadRequest ( new List < string > { "این صورتحساب به سازمان ارسال شده" + '\n' +
2024-05-26 13:04:53 +03:30
"برای تغییر ،صورتحساب را ابطال/اصلاح یا برگشت بزنید" } ) ;
2024-12-11 15:33:33 +03:30
else if ( invoice . invoiceType = = InvoiceType . BackFrmSale )
2024-05-26 13:04:53 +03:30
{
return BadRequest ( new List < string >
2024-08-08 00:28:17 +03:30
{ "صورتحساب در وضعیت برگشت از فروش امکان تغییر مشتری یا الگو را ندارد" + '\n' +
"بهتر است صورتحساب دیگر صادر کنید" } ) ;
2024-12-11 15:33:33 +03:30
}
else if ( invoice . invoiceType = = InvoiceType . Repair )
{
return BadRequest ( new List < string >
{ "صورتحساب در وضعیت اصلاحی امکان تغییر مشتری یا الگو را ندارد" + '\n' +
"بهتر است صورتحساب دیگر صادر کنید" } ) ;
2024-05-26 13:04:53 +03:30
}
2024-05-25 21:30:11 +03:30
else if ( invoice . invoiceType ! = InvoiceType . Bidding
2024-05-26 13:04:53 +03:30
& & invoice . invoiceType ! = InvoiceType . Sale & & invoice . invoiceType ! = InvoiceType . Repair )
2024-05-25 21:30:11 +03:30
{
2024-05-26 13:04:53 +03:30
return BadRequest ( new List < string > { $"صورتحساب در حالت {invoice.invoiceType.GetEnumDisplayName()} نمی تواند ویرایش شود" + '\n' +
$"فقط در حالت پیش نویس ، فاکتور و اصلاح (که به سازمان ارسال نشده باشد) میتوان سند را ویرایش کرد" } ) ;
2024-05-25 21:30:11 +03:30
}
2024-05-13 16:50:26 +03:30
}
2024-08-08 00:28:17 +03:30
else if ( invoice . InvoicIssueDate ! = item . InvoicIssueDate | | invoice . InvoiceDate ! = item . InvoiceDate )
{
if ( CheckTaxPayer )
return BadRequest ( new List < string > { "این صورتحساب به سازمان ارسال شده" + '\n' +
"امکان تغییر تاریخ را ندارد" } ) ;
else if ( invoice . BillReference . HasValue )
{
if ( invoice . InvoicIssueDate ! = item . InvoicIssueDate & & Convert . ToInt32 ( invoice . invoice . InvoicIssueDate ) > Convert . ToInt32 ( item . InvoicIssueDate ) )
{
return BadRequest ( new List < string > { "این صورتحساب مرجع دارد" + '\n' +
$"تاریخ صدور نمیتواند از تاریخ صدور مرجع ({invoice.invoice.InvoicIssueDate.ShamciToFormatShamci()}) کمتر باشد" } ) ;
}
if ( invoice . InvoiceDate ! = item . InvoiceDate & & Convert . ToInt32 ( invoice . invoice . InvoiceDate ) > Convert . ToInt32 ( item . InvoiceDate ) )
{
return BadRequest ( new List < string > { "این صورتحساب مرجع دارد" + '\n' +
$"تاریخ صورتحساب نمیتواند از تاریخ صورتحساب مرجع ({invoice.invoice.InvoiceDate.ShamciToFormatShamci()}) کمتر باشد" } ) ;
}
}
}
2024-05-16 23:40:32 +03:30
2024-05-13 16:50:26 +03:30
//-----change invoice
2024-05-16 23:40:32 +03:30
if ( ! string . IsNullOrEmpty ( item . Title ) )
invoice . Title = item . Title ;
2024-05-13 16:50:26 +03:30
invoice . PatternID = item . PatternID ;
2024-05-16 23:40:32 +03:30
2024-05-26 13:04:53 +03:30
if ( item . CustomerID > 0 )
2024-05-16 23:40:32 +03:30
invoice . CustomerID = item . CustomerID ;
if ( ! string . IsNullOrEmpty ( item . InvoicIssueDate ) )
invoice . InvoicIssueDate = item . InvoicIssueDate ;
if ( ! string . IsNullOrEmpty ( item . InvoiceDate ) )
invoice . InvoiceDate = item . InvoiceDate ;
2024-05-13 16:50:26 +03:30
invoice . Des = item . Des ;
invoice . LastChangeUserID = Convert . ToInt32 ( UserID ) ;
return Ok ( await _servInvoice . UpdateInvoice ( invoice ) ) ;
}
[HttpDelete("Delete/{ID}")]
public async Task < ActionResult < bool > > Delete ( int ID )
{
//-----GetUserAndCompany
var claim = HttpContext . User . Claims . First ( c = > c . Type = = "UserID" ) ;
var UserID = claim . Value ;
var user = await _servUser . GetUserByUserID ( Convert . ToInt32 ( UserID ) ) ;
//-----Get invoice
2024-05-26 13:04:53 +03:30
Invoice invoice = await _servInvoice . GetInvoiceByInvoiceID ( user . RolUsers . First ( ) . CompanyID , ID ) ;
2024-05-13 16:50:26 +03:30
if ( invoice = = null )
return NotFound ( ) ;
2024-05-25 21:30:11 +03:30
//----Check TaxPayer
if ( await _servTaxPayer . ExistSuccessfulorSendorpendingInvoice ( invoice ) )
2024-07-03 16:05:28 +03:30
return BadRequest ( new List < string > { "این صورتحساب به سازمان ارسال شده" } ) ;
2024-05-26 13:04:53 +03:30
//else if (invoice.invoiceType != InvoiceType.Bidding
// && invoice.invoiceType != InvoiceType.Sale)
//{
// return BadRequest(new List<string> { $"صورتحساب در حالت {invoice.invoiceType.GetEnumDisplayName()} نمی تواند ویرایش شود" });
//}
2024-05-25 21:30:11 +03:30
2024-05-13 16:50:26 +03:30
invoice . LastChangeUserID = Convert . ToInt32 ( UserID ) ;
//----Update and sendResult
return Ok ( await _servInvoice . DeleteInvoice ( invoice ) ) ;
}
[HttpPost("ChangeInvoiceType/{InvoiceID}")] // ok
2024-05-30 15:08:36 +03:30
public async Task < ActionResult < InvoiceDTO > > ChangeInvoiceType ( int InvoiceID , int invoiceType )
2024-05-13 16:50:26 +03:30
{
//-----GetUserAndCompany
var claim = HttpContext . User . Claims . First ( c = > c . Type = = "UserID" ) ;
var UserID = claim . Value ;
var user = await _servUser . GetUserByUserID ( Convert . ToInt32 ( UserID ) ) ;
2024-05-26 13:04:53 +03:30
Invoice ? Invoice = await _servInvoice . GetInvoiceByInvoiceID ( user . RolUsers . First ( ) . CompanyID , InvoiceID ) ;
2024-05-13 16:50:26 +03:30
if ( Invoice = = null ) return NotFound ( ) ;
2024-05-26 13:04:53 +03:30
2024-05-30 15:08:36 +03:30
if ( Invoice . invoiceType = = InvoiceType . Cancellation ) return BadRequest ( new List < string > { "این صورتحساب ابطال شده" } ) ;
2024-05-13 16:50:26 +03:30
var sent = await _servTaxPayer . ExistSuccessfulorSendorpendingInvoice ( Invoice ) ;
Invoice . LastChangeUserID = Convert . ToInt32 ( UserID ) ;
if ( Invoice . invoiceType = = InvoiceType . Bidding )
{
switch ( invoiceType )
{
2024-05-30 15:08:36 +03:30
case 1 :
return Ok ( await _servInvoice . ChangeInvoiceType ( Invoice , InvoiceType . Sale ) ) ;
case 3 :
return Ok ( await _servInvoice . ChangeInvoiceType ( Invoice , InvoiceType . Cancellation ) ) ;
2024-05-13 16:50:26 +03:30
default :
2024-05-30 15:08:36 +03:30
return BadRequest ( new List < string > { $"تغییر وضعیت از {Invoice.invoiceType.GetEnumDisplayName()} به {((InvoiceType)invoiceType).GetEnumDisplayName()} امکان پذیر نیست" } ) ;
2024-05-13 16:50:26 +03:30
}
}
if ( Invoice . invoiceType = = InvoiceType . Sale )
{
2024-07-08 16:10:06 +03:30
2024-07-03 16:05:28 +03:30
switch ( invoiceType )
{
case 3 :
return Ok ( await _servInvoice . ChangeInvoiceType ( Invoice , InvoiceType . Cancellation ) ) ;
2024-05-13 16:50:26 +03:30
2024-07-03 16:05:28 +03:30
case 2 :
await _servInvoice . ChangeInvoiceType ( Invoice , InvoiceType . Repair , false ) ;
var result = await _servInvoice . AddInvoice ( new Invoice ( )
{
Title = Invoice . Title ,
Des = Invoice . Des ,
invoiceType = InvoiceType . Repair ,
CustomerID = Invoice . CustomerID ,
CompanyID = Invoice . CompanyID ,
2024-12-13 16:04:57 +03:30
InvoicIssueDate = DateTime . Now . ConvertMiladiToShamsi ( ) ,
InvoiceDate = DateTime . Now . ConvertMiladiToShamsi ( ) ,
2024-07-03 16:05:28 +03:30
LastChangeUserID = Convert . ToInt32 ( UserID ) ,
BillReference = Invoice . ID ,
IsDeleted = false ,
PatternID = Invoice . PatternID ,
setm = Invoice . setm ,
2024-07-28 17:31:40 +03:30
crn = Invoice . crn ,
CottageDateOfCustomsDeclaration = Invoice . CottageDateOfCustomsDeclaration ,
ft = Invoice . ft ,
cdcn = Invoice . cdcn ,
insp = Invoice . insp ,
billid = Invoice . billid ,
scc = Invoice . scc ,
scln = Invoice . scln ,
seventeentax = Invoice . seventeentax ,
tinc = Invoice . tinc ,
2024-07-03 16:05:28 +03:30
invoiceDetails = Invoice . invoiceDetails . Select ( s = > new InvoiceItem
2024-05-13 16:50:26 +03:30
{
2024-07-03 16:05:28 +03:30
CODID = s . CODID ,
am = s . am ,
fee = s . fee ,
dis = s . dis ,
2024-07-28 17:31:40 +03:30
bros = s . bros ,
bsrn = s . bsrn ,
consfee = s . consfee ,
cut = s . cut ,
exr = s . exr ,
nw = s . nw ,
odam = s . odam ,
odr = s . odr ,
odt = s . odt ,
olam = s . olam ,
olr = s . olr ,
olt = s . olt ,
spro = s . spro ,
sscv = s . sscv ,
2024-08-15 19:15:51 +03:30
ssrv = s . ssrv ,
pspd = s . pspd ,
cui = s . cui ,
} ) . ToList ( ) ,
payments = Invoice . payments . Select ( s = > new InvoicePayment ( )
{
acn = s . acn ,
iinn = s . iinn ,
PaymentDateTime = s . PaymentDateTime ,
pcn = s . pcn ,
pid = s . pid ,
pmt = s . pmt ,
pv = s . pv ,
trmn = s . trmn ,
trn = s . trn ,
2024-07-03 16:05:28 +03:30
} ) . ToList ( )
} , false ) ;
if ( result > 0 )
return Ok ( await _servInvoice . GetInvoice ( user . RolUsers . First ( ) . CompanyID , result ) ) ;
break ;
case 4 :
await _servInvoice . ChangeInvoiceType ( Invoice , InvoiceType . BackFrmSale , false ) ;
var result1 = await _servInvoice . AddInvoice ( new Invoice ( )
{
Title = Invoice . Title ,
Des = Invoice . Des ,
invoiceType = InvoiceType . BackFrmSale ,
CustomerID = Invoice . CustomerID ,
CompanyID = Invoice . CompanyID ,
2024-12-13 16:04:57 +03:30
InvoicIssueDate = DateTime . Now . ConvertMiladiToShamsi ( ) ,
InvoiceDate = DateTime . Now . ConvertMiladiToShamsi ( ) ,
2024-07-03 16:05:28 +03:30
LastChangeUserID = Convert . ToInt32 ( UserID ) ,
BillReference = Invoice . ID ,
IsDeleted = false ,
PatternID = Invoice . PatternID ,
setm = Invoice . setm ,
2024-07-28 17:31:40 +03:30
crn = Invoice . crn ,
CottageDateOfCustomsDeclaration = Invoice . CottageDateOfCustomsDeclaration ,
ft = Invoice . ft ,
cdcn = Invoice . cdcn ,
insp = Invoice . insp ,
billid = Invoice . billid ,
scc = Invoice . scc ,
scln = Invoice . scln ,
seventeentax = Invoice . seventeentax ,
tinc = Invoice . tinc ,
2024-07-03 16:05:28 +03:30
invoiceDetails = Invoice . invoiceDetails . Select ( s = > new InvoiceItem
2024-05-13 16:50:26 +03:30
{
2024-07-03 16:05:28 +03:30
CODID = s . CODID ,
am = s . am ,
fee = s . fee ,
dis = s . dis ,
2024-07-28 17:31:40 +03:30
bros = s . bros ,
bsrn = s . bsrn ,
consfee = s . consfee ,
cut = s . cut ,
exr = s . exr ,
nw = s . nw ,
odam = s . odam ,
odr = s . odr ,
odt = s . odt ,
olam = s . olam ,
olr = s . olr ,
olt = s . olt ,
spro = s . spro ,
sscv = s . sscv ,
2024-08-15 19:15:51 +03:30
ssrv = s . ssrv ,
pspd = s . pspd ,
cui = s . cui ,
} ) . ToList ( ) ,
payments = Invoice . payments . Select ( s = > new InvoicePayment ( )
{
acn = s . acn ,
iinn = s . iinn ,
PaymentDateTime = s . PaymentDateTime ,
pcn = s . pcn ,
pid = s . pid ,
pmt = s . pmt ,
pv = s . pv ,
trmn = s . trmn ,
trn = s . trn ,
2024-07-03 16:05:28 +03:30
} ) . ToList ( )
} , false ) ;
if ( result1 > 0 )
return Ok ( await _servInvoice . GetInvoice ( user . RolUsers . First ( ) . CompanyID , result1 ) ) ;
break ;
default :
return BadRequest ( new List < string > { $"تغییر وضعیت از {Invoice.invoiceType.GetEnumDisplayName()} به {((InvoiceType)invoiceType).GetEnumDisplayName()} امکان پذیر نیست این صورتحساب به سامانه مودیان ارسال شده" } ) ;
}
2024-05-13 16:50:26 +03:30
}
if ( Invoice . invoiceType = = InvoiceType . Repair )
{
2024-07-03 16:05:28 +03:30
switch ( invoiceType )
{
case 3 :
return Ok ( await _servInvoice . ChangeInvoiceType ( Invoice , InvoiceType . Cancellation ) ) ;
case 4 :
await _servInvoice . ChangeInvoiceType ( Invoice , InvoiceType . BackFrmSale , false ) ;
var result2 = await _servInvoice . AddInvoice ( new Invoice ( )
{
Title = Invoice . Title ,
Des = Invoice . Des ,
invoiceType = InvoiceType . BackFrmSale ,
CustomerID = Invoice . CustomerID ,
CompanyID = Invoice . CompanyID ,
2024-12-13 16:04:57 +03:30
InvoicIssueDate = DateTime . Now . ConvertMiladiToShamsi ( ) ,
InvoiceDate = DateTime . Now . ConvertMiladiToShamsi ( ) ,
2024-07-03 16:05:28 +03:30
LastChangeUserID = Convert . ToInt32 ( UserID ) ,
BillReference = Invoice . ID ,
IsDeleted = false ,
PatternID = Invoice . PatternID ,
setm = Invoice . setm ,
2024-07-28 17:31:40 +03:30
crn = Invoice . crn ,
CottageDateOfCustomsDeclaration = Invoice . CottageDateOfCustomsDeclaration ,
ft = Invoice . ft ,
cdcn = Invoice . cdcn ,
insp = Invoice . insp ,
billid = Invoice . billid ,
scc = Invoice . scc ,
scln = Invoice . scln ,
seventeentax = Invoice . seventeentax ,
tinc = Invoice . tinc ,
2024-07-03 16:05:28 +03:30
invoiceDetails = Invoice . invoiceDetails . Select ( s = > new InvoiceItem
2024-05-13 16:50:26 +03:30
{
2024-07-03 16:05:28 +03:30
CODID = s . CODID ,
am = s . am ,
fee = s . fee ,
dis = s . dis ,
2024-07-28 17:31:40 +03:30
bros = s . bros ,
bsrn = s . bsrn ,
consfee = s . consfee ,
cut = s . cut ,
exr = s . exr ,
nw = s . nw ,
odam = s . odam ,
odr = s . odr ,
odt = s . odt ,
olam = s . olam ,
olr = s . olr ,
olt = s . olt ,
spro = s . spro ,
sscv = s . sscv ,
2024-08-15 19:15:51 +03:30
ssrv = s . ssrv ,
pspd = s . pspd ,
cui = s . cui ,
} ) . ToList ( ) ,
payments = Invoice . payments . Select ( s = > new InvoicePayment ( )
{
acn = s . acn ,
iinn = s . iinn ,
PaymentDateTime = s . PaymentDateTime ,
pcn = s . pcn ,
pid = s . pid ,
pmt = s . pmt ,
pv = s . pv ,
trmn = s . trmn ,
trn = s . trn ,
2024-07-03 16:05:28 +03:30
} ) . ToList ( )
} , false ) ;
if ( result2 > 0 )
return Ok ( await _servInvoice . GetInvoice ( user . RolUsers . First ( ) . CompanyID , result2 ) ) ;
break ;
default :
return BadRequest ( new List < string > { $"تغییر وضعیت از {Invoice.invoiceType.GetEnumDisplayName()} به {((InvoiceType)invoiceType).GetEnumDisplayName()} امکان پذیر نیست این صورتحساب به سامانه مودیان ارسال شده" } ) ;
2024-05-13 16:50:26 +03:30
2024-07-03 16:05:28 +03:30
}
2024-05-13 16:50:26 +03:30
}
if ( Invoice . invoiceType = = InvoiceType . BackFrmSale )
{
2024-07-03 16:05:28 +03:30
switch ( invoiceType )
{
case 3 :
return Ok ( await _servInvoice . ChangeInvoiceType ( Invoice , InvoiceType . Cancellation ) ) ;
default :
return BadRequest ( new List < string > { $"تغییر وضعیت از {Invoice.invoiceType.GetEnumDisplayName()} به {((InvoiceType)invoiceType).GetEnumDisplayName()} امکان پذیر نیست" } ) ;
}
2024-05-13 16:50:26 +03:30
}
2024-07-23 22:30:52 +03:30
return NoContent ( ) ;
}
[HttpPost("CopyInvoice/{InvoiceID}")] // ok
public async Task < ActionResult < InvoiceDTO > > CopyInvoice ( int InvoiceID )
{
//-----GetUserAndCompany
var claim = HttpContext . User . Claims . First ( c = > c . Type = = "UserID" ) ;
var UserID = claim . Value ;
var user = await _servUser . GetUserByUserID ( Convert . ToInt32 ( UserID ) ) ;
Invoice ? Invoice = await _servInvoice . GetInvoiceByInvoiceID ( user . RolUsers . First ( ) . CompanyID , InvoiceID ) ;
if ( Invoice = = null ) return NotFound ( ) ;
//-----Validaton
var resultValidationmodel = await _validationInvoice . ValidateAsync ( Tuple . Create ( user . RolUsers . First ( ) . CompanyID , new NUInvoiceDTO ( ) , eActionValidation . copy ) ) ;
if ( ! resultValidationmodel . IsValid )
return BadRequest ( resultValidationmodel . Errors . Select ( s = > s . ErrorMessage ) . ToList ( ) ) ;
var result = await _servInvoice . AddInvoice ( new Invoice ( )
{
Title = Invoice . Title ,
Des = Invoice . Des ,
invoiceType = InvoiceType . Bidding ,
CustomerID = Invoice . CustomerID ,
CompanyID = Invoice . CompanyID ,
InvoicIssueDate = Invoice . InvoicIssueDate . Replace ( "/" , "" ) ,
InvoiceDate = Invoice . InvoicIssueDate . Replace ( "/" , "" ) ,
LastChangeUserID = Convert . ToInt32 ( UserID ) ,
IsDeleted = false ,
PatternID = Invoice . PatternID ,
setm = Invoice . setm ,
2024-07-24 22:56:46 +03:30
crn = Invoice . crn ,
CottageDateOfCustomsDeclaration = Invoice . CottageDateOfCustomsDeclaration ,
ft = Invoice . ft ,
cdcn = Invoice . cdcn ,
insp = Invoice . insp ,
billid = Invoice . billid ,
scc = Invoice . scc ,
scln = Invoice . scln ,
seventeentax = Invoice . seventeentax ,
2024-08-15 19:15:51 +03:30
tinc = Invoice . tinc ,
2024-07-23 22:30:52 +03:30
invoiceDetails = Invoice . invoiceDetails . Select ( s = > new InvoiceItem
{
CODID = s . CODID ,
am = s . am ,
fee = s . fee ,
dis = s . dis ,
2024-07-24 22:56:46 +03:30
bros = s . bros ,
bsrn = s . bsrn ,
consfee = s . consfee ,
cut = s . cut ,
exr = s . exr ,
nw = s . nw ,
odam = s . odam ,
odr = s . odr ,
odt = s . odt ,
olam = s . olam ,
olr = s . olr ,
olt = s . olt ,
spro = s . spro ,
sscv = s . sscv ,
2024-08-15 19:15:51 +03:30
ssrv = s . ssrv ,
pspd = s . pspd ,
cui = s . cui ,
} ) . ToList ( ) ,
payments = Invoice . payments . Select ( s = > new InvoicePayment ( )
{
acn = s . acn ,
iinn = s . iinn ,
PaymentDateTime = s . PaymentDateTime ,
pcn = s . pcn ,
pid = s . pid ,
pmt = s . pmt ,
pv = s . pv ,
trmn = s . trmn ,
trn = s . trn ,
2024-07-23 22:30:52 +03:30
} ) . ToList ( )
} , true ) ;
if ( result > 0 )
return Ok ( await _servInvoice . GetInvoice ( user . RolUsers . First ( ) . CompanyID , result ) ) ;
2024-05-13 16:50:26 +03:30
return NoContent ( ) ;
2024-05-13 13:02:09 +03:30
}
2024-05-16 23:40:32 +03:30
[HttpGet("GetPatterns")]
public async Task < ActionResult < List < IdName < int > > > > GetPatterns ( )
{
return Ok ( await _servTaxPayer . GetPatterns ( ) ) ;
}
2024-06-14 22:37:22 +03:30
[HttpGet("GetReport/{InvoiceID}")]
2024-07-01 15:39:40 +03:30
public async Task < ActionResult < string > > GetReport ( int InvoiceID )
2024-05-30 15:08:36 +03:30
{
2024-07-01 15:39:40 +03:30
string output = "" ;
//-----GetUserAndCompany
var claim = HttpContext . User . Claims . First ( c = > c . Type = = "UserID" ) ;
var UserID = claim . Value ;
var user = await _servUser . GetUserByUserID ( Convert . ToInt32 ( UserID ) ) ;
2024-07-03 16:05:28 +03:30
var CompanyID = user ? . RolUsers . First ( ) . CompanyID ;
2024-07-01 15:39:40 +03:30
2024-07-01 22:59:01 +03:30
if ( ! await _servInvoice . ExistInvoiceByInvoiceID ( CompanyID . Value , InvoiceID ) )
2024-07-01 15:39:40 +03:30
return NotFound ( ) ;
2024-07-04 18:49:11 +03:30
//if( await _rptQueueRepository.AddBoolResultAsync(new rptQueue
// {
// CompanyID= CompanyID.Value,InvoicID= InvoiceID,
//}))
// {
// Thread.Sleep(2000);
// if(System.IO.File.Exists(_configuration["rptQueue"].ToString()+ InvoiceID + ".txt"))
// {
// output= System.IO.File.ReadAllText(_configuration["rptQueue"].ToString() + InvoiceID + ".txt");
// }
// }
2024-07-06 16:18:23 +03:30
try
{
// Start the child process.
Process p = new Process ( ) ;
// Redirect the output stream of the child process.
p . StartInfo . UseShellExecute = false ;
p . StartInfo . RedirectStandardOutput = true ;
p . StartInfo . FileName = _configuration [ "CreateReportFileName" ] . ToString ( ) ;
p . StartInfo . Arguments = $"{CompanyID} {InvoiceID}" ;
p . Start ( ) ;
output = await p . StandardOutput . ReadToEndAsync ( ) ;
await p . WaitForExitAsync ( ) ;
}
catch ( Exception ex )
{
System . IO . File . AppendAllText ( _configuration [ "ReportLog" ] . ToString ( ) , ex . ToString ( ) ) ;
}
2024-07-01 15:39:40 +03:30
return Ok ( output ) ;
2024-05-30 15:08:36 +03:30
}
2024-07-06 16:18:23 +03:30
2024-05-13 13:02:09 +03:30
}
}