PDA

View Full Version : ساخت دیتابیس صدور فاکتور با EF Code first



torisoft
دوشنبه 14 بهمن 1392, 19:39 عصر
با سلام

در حال تهیه یک دیتابیس با تکنولوژی code first هستم که به مشکلاتی برخوردم امیدوارم دوستان کمک کنند.
مستندات :
1- فریمورک برنامه، فریمورک دابلیو پی اف
2- برنامه مربوطه یک حسابداری کوچک برای یک فروشگاه
3- قسمت های برنامه : ورود اطلاعات ( مربوط به فروشگاه و اجناس و خدمات)، فروش (فقط صدور فاکتور و ادیت آن)، خرید یا پرداختی (فاکتورهای خریداری شده و هزینه های فروشگاه و هرچیز پرداختی)، گزارشات
4- جداول تهیه شده و روابط آن در زیر موجود است.
5- در جدول اطلاعات فروشگاه لازم است لوگو و امضا و مهر بصورت عکس دریافت شود شاید موارد دیگری هم بعدا اضافه شود. (آیا برای هر کدام یک خاصیت در نظر باید گرفت یا یک کلاس جدا ؟؟)
6- در یک فاکتور (چه فاکتور صادره و چه فاکتور یا هزینه های پرداختی فروشگاه) دریافت یا پرداخت به چند صورت هست که هر کدام باید اطلاعات مربوط به خودشون رو دریافت کنن


نقدی
چک : در این صورت مبلغ، تاریخ چک، سریال و نام بانک باید ثبت شود
کارت خوان : شماره پیگیری و شماره پایانه (و در صورت پرداخت قبوض نوع قبض،شناسه، شناسه پرداخت)
اینترنت : شماره پیگیری و نام بانک مبدا و مقصد (و در صورت پرداخت قبوض نوع قبض،شناسه، شناسه پرداخت)
قرض الحسنه
لازم به ذکر است که دریافت و پرداخت می تواند ترکیبی از موارد فوق باشد

در اینجا لازم است نوع پرداخت بصورت یک کلاس جدا برای هر قسمت ( خرید و فروش) در نظر گرفته شود یا بطور مشترک و یا تمام موارد در یک کلاس و قسمت هایی که مورد نیاز نمی باشد نال گرفته شود ؟؟
7- در قسمت خرید یا پرداختی اگر فاکتور یا سند موجود بود بصورت اسکن ذخیره شود (تهیه خاصیت این قسمت رو متوجه نمیشم)
با تشکر



namespace Invoice.DomainClasses.Entities.IntrestComponents
{
[ComplexType]
public class AddressComp
{
public string Address1 { set; get; }
public string Address2 { set; get; }
}
}

namespace Invoice.DomainClasses.Entities.IntrestComponents
{
[ComplexType]
public class MobileComp
{
public int Mobile1 { set; get; }
public int Mobile2 { set; get; }
}
}


namespace Invoice.DomainClasses.Entities.IntrestComponents
{
[ComplexType]
public class TelComp
{
[DataType(DataType.PhoneNumber)]
public int Tel1 { set; get; }
[DataType(DataType.PhoneNumber)]
public int Tel2 { set; get; }
}
}


namespace Invoice.DomainClasses.Entities
{
public class Company : BaseEntity
{

public string Name { set; get; }
public AddressComp Addresses { set; get; }
public string NameManagement { set; get; }

[Required(ErrorMessage = "لطفا نام خانوادگی را وارد کنید")]
[RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$", ErrorMessage =
"عدد و کاراکتر مجاز نمی باشد")]
[StringLength(8, MinimumLength = 3, ErrorMessage =
"Last name must be between 3 and 8 characters long.")]
public string FamilyManagement { set; get; }
public string FullName
{
get { return NameManagement + " " + FamilyManagement; }
}
[DataType(DataType.EmailAddress)]
[RegularExpression(@"@(gmail|yahoo|live)\.com$",
ErrorMessage = "Invalid domain in email address. " +
"The domain must be gmail.com, yahoo.com or live.com")]
public string Email { set; get; }
//String.Format("{0:(###) ###-####}", 8005551212);
public TelComp Tels { set; get; }
[DataType(DataType.PhoneNumber)]
public MobileComp Mobiles { set; get; }

public virtual ICollection<Invoice> Invoices { set; get; }
public virtual ICollection<Costumer> Costumers { set; get; }

public Company()
{
Mobiles = new MobileComp();
Addresses = new AddressComp();
Tels = new TelComp();
}
}
}


namespace Invoice.DomainClasses.Entities
{
public class Costumer : BaseEntity
{
[MaxLength(50, ErrorMessage = "حداکثر 50 حرف"),
MinLength(4, ErrorMessage = "حداقل 4 حرف")]
public string Name { set; get; }
public MobileComp Mobiles { set; get; }
public AddressComp Addresses { set; get; }
public TelComp Tels { set; get; }

//One to Many relationship
public virtual ICollection<Invoice> Invoices { set; get; }
public virtual Company Company { set; get; }

public Costumer()
{
Mobiles = new MobileComp();
Addresses = new AddressComp();
Tels = new TelComp();
}

}
}



namespace Invoice.DomainClasses.Entities
{
public class Invoice : BaseEntity
{
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime Date { set; get; }

public int CostumerId { set; get; }
public int CompanyId { set; get; }
public virtual Company Company { set; get; }
public virtual Costumer Costumer { set; get; }
public virtual ICollection<InvoiceItem> InvoiceItems { set; get; }
}
}



namespace Invoice.DomainClasses.Entities
{
public class InvoiceItem : BaseEntity
{

public string Description { set; get; }
public string CarName { set; get; }
public decimal TotalPrice { set; get; }
public decimal Tax { set; get; }
public decimal Vat { set; get; }
public decimal Off { set; get; }

public decimal CashPrice { set; get; }
public decimal CheckPrice { set; get; }
public decimal POSPrice { set; get; }
public decimal NetPrice { set; get; }
public decimal LoanPrice { set; get; }

//Check
[Display(Name = "Price")]
[DataType(DataType.Currency)]
public decimal Amount { set; get; }
public DateTime DateCheck { set; get; }
public int Serial { set; get; }
public string BankName { set; get; }

//POS
public int TerminalNum { set; get; }
public int TrackNumPOS { set; get; }

//Internet
public int TrackNumNet { set; get; }
public string SourceBank { set; get; }
public string DestBank { set; get;}

//
public int InvoiceId { set; get; }
public int ProductId { set; get; }
public virtual Invoice Invoice { set; get; }
public virtual Product Product { set; get; }


}
}


//کلاس قسمت خرید یا پرداختی
namespace Invoice.DomainClasses.Entities
{
public enum HowPay
{
Cash,
Chek
}

public enum PayType
{
Buy,
Cost,
Loan,
Bill
}
public class Payment : BaseEntity
{
//[DatabaseGenerated(DatabaseGeneratedOption.None)]
//[Column("PaymentID")]
//public int Id { set; get; }
public string Description { set; get; }
[Column(TypeName = "money")]
public decimal Price { set; get; }
public DateTime Date { set; get; }
public HowPay HowPay { set; get; }
public PayType PayType { set; get; }

}
}


namespace Invoice.DomainClasses.Entities
{
public class Product : BaseEntity
{
public string Name { set; get; }
public string Description { set;get; }

[ForeignKey("TemporalPriceId")]
public virtual TemporalPrice TemporalPrice { set; get; }
public int TemporalPriceId { set; get; }


}
}


namespace Invoice.DomainClasses.Entities
{
public class TemporalPrice : BaseEntity
{
public decimal Prrice { set; get; }
//Actual Time
public int DateFrom { set; get; }
//Record Time
public int DateTo { set; get; }

}
}